@dolomite-exchange/dolomite-margin
Version:
Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol
405 lines (404 loc) • 195 kB
JSON
{
"contractName": "LiquidatorAssetRegistry",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "dolomiteMargin",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "marketId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "liquidator",
"type": "address"
}
],
"name": "LiquidatorAddedToWhitelist",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "marketId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "liquidator",
"type": "address"
}
],
"name": "LiquidatorRemovedFromWhitelist",
"type": "event"
},
{
"constant": true,
"inputs": [],
"name": "DOLOMITE_MARGIN",
"outputs": [
{
"internalType": "contract IDolomiteMargin",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "_marketId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_liquidator",
"type": "address"
}
],
"name": "ownerAddLiquidatorToAssetWhitelist",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "_marketId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_liquidator",
"type": "address"
}
],
"name": "ownerRemoveLiquidatorFromAssetWhitelist",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "_marketId",
"type": "uint256"
}
],
"name": "getLiquidatorsForAsset",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "_marketId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_liquidator",
"type": "address"
}
],
"name": "isAssetWhitelistedForLiquidation",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dolomiteMargin\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"}],\"name\":\"LiquidatorAddedToWhitelist\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"}],\"name\":\"LiquidatorRemovedFromWhitelist\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_MARGIN\",\"outputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_marketId\",\"type\":\"uint256\"}],\"name\":\"getLiquidatorsForAsset\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_marketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_liquidator\",\"type\":\"address\"}],\"name\":\"isAssetWhitelistedForLiquidation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_marketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_liquidator\",\"type\":\"address\"}],\"name\":\"ownerAddLiquidatorToAssetWhitelist\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_marketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_liquidator\",\"type\":\"address\"}],\"name\":\"ownerRemoveLiquidatorFromAssetWhitelist\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Dolomite\",\"methods\":{},\"title\":\"LiquidatorAssetRegistry\"},\"userdoc\":{\"methods\":{},\"notice\":\"A registry contract for tracking which assets can be liquidated by each contract.\"}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/LiquidatorAssetRegistry.sol\":\"LiquidatorAssetRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/LiquidatorAssetRegistry.sol\":{\"keccak256\":\"0x7dfd94065d3d9d31062fb46971958ac822c2035b2c13240bda5b0f061a67d793\",\"urls\":[\"bzz-raw://e01095348e632281409e8d2caabbb40890fa29372138a9e51f1cdc2c6bd48413\",\"dweb:/ipfs/QmTzkzRHftAfk8v2zCWtk2awy5AcT1VGJDU5PwvBPdmAfP\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol\":{\"keccak256\":\"0xe40babc0a6dd2a767d76f3e0f0a22de124c4c480f2b2227a7b924b44e57526ea\",\"urls\":[\"bzz-raw://458f7f1f16eacd4faae597090503dc1e58446e9d371640c77b2e01e3e3113f17\",\"dweb:/ipfs/QmXqTG4sWJeDh5XA286KarbqHT4qJ7m3dphS16enpqtQiX\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/ILiquidatorAssetRegistry.sol\":{\"keccak256\":\"0x0d99615ee12fad08fbdf59a67683af9c7cdcfd2f25cf20b6767ebb6988eec514\",\"urls\":[\"bzz-raw://90230d7a44d9936cda8d1b1fef170daf91750b97d3da9634ed6c079fb8dbd15a\",\"dweb:/ipfs/QmfQxDE36en2hecxS4Y2i4BH6TsSEDEzKNxooysW4GsdKb\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol\":{\"keccak256\":\"0x5b9fde139ddfdaae7b650b3c3f6699e0e44605f0d9d3daadc1622eb06ad4c3f8\",\"urls\":[\"bzz-raw://2dfd5af24b6de63f94519c99fd8777a264d7cd11266fa2d525c7d72d96a9c7cf\",\"dweb:/ipfs/QmPg9fjhbnmBayZMh6yTG79xsK1PWSoAHA5pfwSXfnKKjF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x7e86ed1ed04dc205245db9f4e7cf7cca60c3bfc46c57ade8129a463780647967\",\"urls\":[\"bzz-raw://f8fbd85afd334c12bdccbb6523ebea9172b27b7b4b132c4a48b4b4dd03ceeb2b\",\"dweb:/ipfs/QmU1srfSqBTz3kw7oz1KEzfTUJvphZiE4K8MRZcy9uJjv1\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol\":{\"keccak256\":\"0xa94499fda55ef112640daed2cb1d06062e72c51c7b925c323b4e0ffa9b456ce5\",\"urls\":[\"bzz-raw://18b4a16acac577590a57f34f7ec6583e3cb35f575c948abb928b308d29cac1ab\",\"dweb:/ipfs/QmR1jLkzj6w7SjrdZ7GVW4V2vofSdMJwzjTqKpeUKABvxu\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x2059276ea5e478bd5ac7f2712e7b1b6c85d291c647a54b264909044844828e67\",\"urls\":[\"bzz-raw://f153777051d12131b13a57e5c3af10a2670927cfc7d22c9519ab20c9b4b9bc89\",\"dweb:/ipfs/QmQMP3qS5xDAVGYKDfNkbkSqBKozQGQsGqX4e8VyjRtxPS\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x7b2fcf441c034952dd042b6c8b20b148359db771e7c9ac07d06369560a9f0301\",\"urls\":[\"bzz-raw://84665ee4a780360fe6160d197ba98f0bf0ab0d7c6ad87bfed6226bf2f88d8d30\",\"dweb:/ipfs/QmRDfRdAd8hSXeu4SAeeYKkKoXBhStu7n4uReYBce2JD5Z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x6d9a641163b2dd25e648c65f5d9e4949a57938e29ddc4c9dddefd74a9964aeef\",\"urls\":[\"bzz-raw://67e5a04ed4055faafbc100d6ccca9c54448ed378a1a8c71171562edda7bcbf7c\",\"dweb:/ipfs/QmYRikK3Xbgiq3UBJkgoo2zNUSSrShVabpRHmQj6iQHhrc\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0xe57c80a7621a77fcb2acb9f883fb5248e71a6dce03bc2db56df0db3fee332950\",\"urls\":[\"bzz-raw://28e221c04629674490b9a0041d4f9a5f15e669dc0cc192a5df6e2c701c36369f\",\"dweb:/ipfs/QmaL3oh8c7v9cx91pB175pyCEuzxnhNTab4UxmBMsDYfUx\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0xd9a348c2b1eec076609ba12bbec6b9c2e4ea135790a7ef4f5411feb050af2144\",\"urls\":[\"bzz-raw://d5bcff29e47d5cd02d7a9966e9f44c46ccbb4f0e4adfc4b0b86646880677db39\",\"dweb:/ipfs/QmRKfJD4FFM1AvTynSFNx1NcDg94o9SAcjz7dvMaJCfecp\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol\":{\"keccak256\":\"0x53f205f6a779d579be29faa9412c806a892b3e605fff092dfd9d14d936fa019f\",\"urls\":[\"bzz-raw://0ff936f89602a63b8e6a4eb4ce8f87673c0f45b7ce29694920905a3f0b5a6a69\",\"dweb:/ipfs/QmbYME9BeEvPC1ndV8EaUDX5fDMghLc3rocNUxFtgHmg8m\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x41a3460e34b7b8635d936e35e6568ceb5354b638f53b884530e0d4875fa0f151\",\"urls\":[\"bzz-raw://d1a5ba866ee95d455afe5075dadd91fc71c2806371f2c1b358a1f67c632bb0df\",\"dweb:/ipfs/QmW4qCjmsG8J3UJv97GwDLDM7wt1K4yLDKAwzWMY7TFYi5\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x141a0ecb4a746f0e5767df4b99dbe33c6362df507ae9d5c02da1c1c17bc26df3\",\"urls\":[\"bzz-raw://9ff03e64a8ce5231acde07788624bf8c7a8ff55d90b157fa32f62fa887a0eff0\",\"dweb:/ipfs/QmUVxxWeE954RDXbmHJAYnHsXcit6rSXGqZUigu8t9oH2z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0x05a2a90b41b6a5f42f0a72da63d015fb0b406a9ba2172823352e522e8bf3a606\",\"urls\":[\"bzz-raw://19883f0c6d33266f756ec5c3d17539524aa24b993c46c33f8400801d09373a6c\",\"dweb:/ipfs/QmYX2fwK3vQQDSZLMrc5wMfeb8RWrcC9CGX8XECLty8QDk\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0x9c27f3cd52af28c9b6bca18097b1793f114d08284d78417467d0d05f67e9e2a9\",\"urls\":[\"bzz-raw://d1ed0e7a7f76d59f30572996d4e164ab8fb5b2ec4bfca127983f9e936b904813\",\"dweb:/ipfs/QmePVYbgrY8Yw3Vf76pmEvE9pX916Jaa9we4kjM8tGM4J1\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x87ee8d3c1d6e315a116426d8c8fc6f083e220fd14dda27fad4e8d7cab3dc7305\",\"urls\":[\"bzz-raw://7c20f2c52da682c3b5917fb6a19e81f43699b1d13c62b569ed723f34da72e766\",\"dweb:/ipfs/QmbXWYXi67nHBVNDKYUpo2E9ZaEVcHLvmXQkpYLMm1d5Vm\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0x095b5f8eb3665f6e246200311efc8a654fa3e90f9a1a522e27a4d089e8ab3917\",\"urls\":[\"bzz-raw://5db812b752a03d601d424e6e21be38153477082af0acf51b5c98eefa5553ed18\",\"dweb:/ipfs/QmbE549QUXYTurpx8hSMLBJvuBpfYqyNE6FBCgHJDY8PLf\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xe1bab8c8799d83e86c7a49aaf815d8e3bc8d09562d46d44d921500db5e98de0e\",\"urls\":[\"bzz-raw://8ea3d0cc4fdab6dd9bba545a792170f939b342d8d1a7051c1c6365009af72658\",\"dweb:/ipfs/QmaLJgbavu88eEit6JPqfWnw6NmGBDZfveMXxumgWywBFG\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/utils/EnumerableSet.sol\":{\"keccak256\":\"0xcce1d35afae7905e2fd76ff67c3fe866091e223c50133527c302a31ffce9a5d7\",\"urls\":[\"bzz-raw://0fb055ae3a79a6ff6136feeabf8905a535fe90ee273b5099b4405fbeda0dc411\",\"dweb:/ipfs/QmYiqVcFnYuGGX8m7hzASfo7HMPhEqTxSvvGRX1ZipDknF\"]}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b5060405161101238038061101283398101604081905261002f91610065565b600080546001600160a01b0319166001600160a01b03929092169190911790556100b3565b805161005f8161009c565b92915050565b60006020828403121561007757600080fd5b60006100838484610054565b949350505050565b60006001600160a01b03821661005f565b6100a58161008b565b81146100b057600080fd5b50565b610f50806100c26000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806366c045561161005057806366c04556146100aa578063d9f47601146100bf578063dcb4c304146100df57610067565b806315c14a4a1461006c57806366b8742c1461008a575b600080fd5b6100746100f2565b6040516100819190610de6565b60405180910390f35b61009d610098366004610ba6565b61010e565b6040516100819190610dc0565b6100bd6100b8366004610bc4565b610130565b005b6100d26100cd366004610bc4565b610313565b6040516100819190610dd8565b6100bd6100ed366004610bc4565b61034b565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600081815260016020526040902060609061012890610480565b90505b919050565b336102496000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561019b57600080fd5b505afa1580156101af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101d39190810190610b88565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d697465206f776e65722063616e2063616c6c0000000084610540565b6102ac73ffffffffffffffffffffffffffffffffffffffff831615157f4c697175696461746f72417373657452656769737472790000000000000000007f496e76616c6964206c697175696461746f722061646472657373000000000000610645565b60008381526001602052604090206102ca908363ffffffff61069416565b5060405173ffffffffffffffffffffffffffffffffffffffff83169084907fd0e6a9753fc5cbfb447f79fca89c485db10aaec2a782a6e8aa3b5b703dc6e60f90600090a3505050565b600082815260016020526040812061032a81610719565b15806103415750610341818463ffffffff61072016565b9150505b92915050565b336103b66000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561019b57600080fd5b61041973ffffffffffffffffffffffffffffffffffffffff831615157f4c697175696461746f72417373657452656769737472790000000000000000007f496e76616c6964206c697175696461746f722061646472657373000000000000610645565b6000838152600160205260409020610437908363ffffffff61074b16565b5060405173ffffffffffffffffffffffffffffffffffffffff83169084907f6a952d443dacef0b06e2ce4cc9a89dc382e2c8e876b36d21c3da4938ebff919590600090a3505050565b60608082600101805490506040519080825280602002602001820160405280156104b4578160200160208202803883390190505b50905060005b6001840154811015610539578360010181815481106104d557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682828151811061050c57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001016104ba565b5092915050565b8361063f5761054e836108f6565b7f3a20000000000000000000000000000000000000000000000000000000000000610578846108f6565b7f203c0000000000000000000000000000000000000000000000000000000000006105a2856109ce565b6040516105d89594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001610d62565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261063691600401610df4565b60405180910390fd5b50505050565b8261068f57610653826108f6565b7f3a2000000000000000000000000000000000000000000000000000000000000061067d836108f6565b6040516020016105d893929190610d31565b505050565b60006106a08383610720565b6107115750600182810180548083018083556000928352602080842090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155835290859052604090912055610345565b506000610345565b6001015490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902054151590565b60006107578383610720565b156107115773ffffffffffffffffffffffffffffffffffffffff821660009081526020849052604090205460018401547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918201910180821461085f5760008560010182815481106107c557fe5b60009182526020909120015460018701805473ffffffffffffffffffffffffffffffffffffffff90921692508291859081106107fd57fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94851617905592909116815290869052604090206001830190555b73ffffffffffffffffffffffffffffffffffffffff84166000908152602086905260408120556001850180548061089257fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905550600191506103459050565b6060808260405160200161090a9190610d1c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156109b35781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061097657fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156109ae576001018152905061012b565b61093d565b5060408051600080825260208201909252905b509392505050565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b81600081518110610a1a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110610a5b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156109c65760028102610aa6600f8516610b45565b838260290381518110610ab557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350610af7600f8516610b45565b838260280381518110610b0657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101610a8d565b6000600a821015610b5d57506030810160f81b61012b565b5060570160f81b90565b803561034581610eed565b805161034581610eed565b803561034581610f04565b600060208284031215610b9a57600080fd5b60006103418484610b72565b600060208284031215610bb857600080fd5b60006103418484610b7d565b60008060408385031215610bd757600080fd5b6000610be38585610b7d565b9250506020610bf485828601610b67565b9150509250929050565b6000610c0a8383610c12565b505060200190565b610c1b81610e18565b82525050565b6000610c2c82610e0b565b610c368185610e0f565b9350610c4183610e05565b8060005b83811015610c6f578151610c598882610bfe565b9750610c6483610e05565b925050600101610c45565b509495945050505050565b610c1b81610e23565b610c1b610c8f82610e28565b610e72565b610c1b610c8f82610e4d565b610c1b610c8f82610e72565b6000610cb782610e0b565b610cc1818561012b565b9350610cd1818560208601610e99565b9290920192915050565b610c1b81610e8e565b6000610cef82610e0b565b610cf98185610e0f565b9350610d09818560208601610e99565b610d1281610ec5565b9093019392505050565b6000610d288284610ca0565b50602001919050565b6000610d3d8286610cac565b9150610d498285610c94565b600282019150610d598284610cac565b95945050505050565b6000610d6e8289610cac565b9150610d7a8288610c94565b600282019150610d8a8287610cac565b9150610d968286610c94565b600282019150610da68285610cac565b9150610db28284610c83565b506001019695505050505050565b60208082528101610dd18184610c21565b9392505050565b602081016103458284610c7a565b602081016103458284610cdb565b60208082528101610dd18184610ce4565b60200190565b5190565b90815260200190565b600061012882610e75565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600061012882610e18565b60005b83811015610eb4578181015183820152602001610e9c565b8381111561063f5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b610ef681610e18565b8114610f0157600080fd5b50565b610ef681610e7256fea365627a7a72315820cfd2f3c260fed62eff396daa5d0db7cae2817f337d74f66eccb6f8a70ff637d46c6578706572696d656e74616cf564736f6c63430005100040",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c806366c045561161005057806366c04556146100aa578063d9f47601146100bf578063dcb4c304146100df57610067565b806315c14a4a1461006c57806366b8742c1461008a575b600080fd5b6100746100f2565b6040516100819190610de6565b60405180910390f35b61009d610098366004610ba6565b61010e565b6040516100819190610dc0565b6100bd6100b8366004610bc4565b610130565b005b6100d26100cd366004610bc4565b610313565b6040516100819190610dd8565b6100bd6100ed366004610bc4565b61034b565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600081815260016020526040902060609061012890610480565b90505b919050565b336102496000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561019b57600080fd5b505afa1580156101af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101d39190810190610b88565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d697465206f776e65722063616e2063616c6c0000000084610540565b6102ac73ffffffffffffffffffffffffffffffffffffffff831615157f4c697175696461746f72417373657452656769737472790000000000000000007f496e76616c6964206c697175696461746f722061646472657373000000000000610645565b60008381526001602052604090206102ca908363ffffffff61069416565b5060405173ffffffffffffffffffffffffffffffffffffffff83169084907fd0e6a9753fc5cbfb447f79fca89c485db10aaec2a782a6e8aa3b5b703dc6e60f90600090a3505050565b600082815260016020526040812061032a81610719565b15806103415750610341818463ffffffff61072016565b9150505b92915050565b336103b66000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561019b57600080fd5b61041973ffffffffffffffffffffffffffffffffffffffff831615157f4c697175696461746f72417373657452656769737472790000000000000000007f496e76616c6964206c697175696461746f722061646472657373000000000000610645565b6000838152600160205260409020610437908363ffffffff61074b16565b5060405173ffffffffffffffffffffffffffffffffffffffff83169084907f6a952d443dacef0b06e2ce4cc9a89dc382e2c8e876b36d21c3da4938ebff919590600090a3505050565b60608082600101805490506040519080825280602002602001820160405280156104b4578160200160208202803883390190505b50905060005b6001840154811015610539578360010181815481106104d557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682828151811061050c57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001016104ba565b5092915050565b8361063f5761054e836108f6565b7f3a20000000000000000000000000000000000000000000000000000000000000610578846108f6565b7f203c0000000000000000000000000000000000000000000000000000000000006105a2856109ce565b6040516105d89594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001610d62565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261063691600401610df4565b60405180910390fd5b50505050565b8261068f57610653826108f6565b7f3a2000000000000000000000000000000000000000000000000000000000000061067d836108f6565b6040516020016105d893929190610d31565b505050565b60006106a08383610720565b6107115750600182810180548083018083556000928352602080842090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155835290859052604090912055610345565b506000610345565b6001015490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902054151590565b60006107578383610720565b156107115773ffffffffffffffffffffffffffffffffffffffff821660009081526020849052604090205460018401547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918201910180821461085f5760008560010182815481106107c557fe5b60009182526020909120015460018701805473ffffffffffffffffffffffffffffffffffffffff90921692508291859081106107fd57fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94851617905592909116815290869052604090206001830190555b73ffffffffffffffffffffffffffffffffffffffff84166000908152602086905260408120556001850180548061089257fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905550600191506103459050565b6060808260405160200161090a9190610d1c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156109b35781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061097657fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156109ae576001018152905061012b565b61093d565b5060408051600080825260208201909252905b509392505050565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b81600081518110610a1a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b81600181518110610a5b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156109c65760028102610aa6600f8516610b45565b838260290381518110610ab557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350610af7600f8516610b45565b838260280381518110610b0657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c91600101610a8d565b6000600a821015610b5d57506030810160f81b61012b565b5060570160f81b90565b803561034581610eed565b805161034581610eed565b803561034581610f04565b600060208284031215610b9a57600080fd5b60006103418484610b72565b600060208284031215610bb857600080fd5b60006103418484610b7d565b60008060408385031215610bd757600080fd5b6000610be38585610b7d565b9250506020610bf485828601610b67565b9150509250929050565b6000610c0a8383610c12565b505060200190565b610c1b81610e18565b82525050565b6000610c2c82610e0b565b610c368185610e0f565b9350610c4183610e05565b8060005b83811015610c6f578151610c598882610bfe565b9750610c6483610e05565b925050600101610c45565b509495945050505050565b610c1b81610e23565b610c1b610c8f82610e28565b610e72565b610c1b610c8f82610e4d565b610c1b610c8f82610e72565b6000610cb782610e0b565b610cc1818561012b565b9350610cd1818560208601610e99565b9290920192915050565b610c1b81610e8e565b6000610cef82610e0b565b610cf98185610e0f565b9350610d09818560208601610e99565b610d1281610ec5565b9093019392505050565b6000610d288284610ca0565b50602001919050565b6000610d3d8286610cac565b9150610d498285610c94565b600282019150610d598284610cac565b95945050505050565b6000610d6e8289610cac565b9150610d7a8288610c94565b600282019150610d8a8287610cac565b9150610d968286610c94565b600282019150610da68285610cac565b9150610db28284610c83565b506001019695505050505050565b60208082528101610dd18184610c21565b9392505050565b602081016103458284610c7a565b602081016103458284610cdb565b60208082528101610dd18184610ce4565b60200190565b5190565b90815260200190565b600061012882610e75565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600061012882610e18565b60005b83811015610eb4578181015183820152602001610e9c565b8381111561063f5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b610ef681610e18565b8114610f0157600080fd5b50565b610ef681610e7256fea365627a7a72315820cfd2f3c260fed62eff396daa5d0db7cae2817f337d74f66eccb6f8a70ff637d46c6578706572696d656e74616cf564736f6c63430005100040",
"sourceMap": "1148:2097:4:-;;;1615:107;8:9:-1;5:2;;;30:1;27;20:12;5:2;1615:107:4;;;;;;;;;;;;;;;;;;;;;1302:15:6;:50;;-1:-1:-1;;;;;;1302:50:6;-1:-1:-1;;;;;1302:50:6;;;;;;;;;;1148:2097:4;;5:134:-1;83:13;;101:33;83:13;101:33;;;68:71;;;;;146:263;;261:2;249:9;240:7;236:23;232:32;229:2;;;277:1;274;267:12;229:2;312:1;329:64;385:7;365:9;329:64;;;319:74;223:186;-1:-1;;;;223:186;416:91;;-1:-1;;;;;576:54;;478:24;559:76;642:117;711:24;729:5;711:24;;;704:5;701:35;691:2;;750:1;747;740:12;691:2;685:74;;;1148:2097:4;;;;;;",
"deployedSourceMap": "1148:2097:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1148:2097:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1130:38:6;;;:::i;:::-;;;;;;;;;;;;;;;;2721:190:4;;;;;;;;;:::i;:::-;;;;;;;;1778:434;;;;;;;;;:::i;:::-;;2917:326;;;;;;;;;:::i;:::-;;;;;;;;2218:446;;;;;;;;;:::i;1130:38:6:-;;;;;;:::o;2721:190:4:-;2848:44;;;;:33;:44;;;;;2813:16;;2848:56;;:54;:56::i;:::-;2841:63;;2721:190;;;;:::o;1778:434::-;1925:10;1697:149:6;1732:15;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1732:23:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1732:23:6;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1732:23:6;;;;;;;;;1723:32;;:5;:32;;;1769:4;1697:149;1831:5;1697:12;:149::i;:::-;1947:121:4;1973:25;;;;;2012:4;1947:121;:12;:121::i;:::-;2079:44;;;;:33;:44;;;;;:61;;2128:11;2079:61;:48;:61;:::i;:::-;-1:-1:-1;2155:50:4;;;;;;2182:9;;2155:50;;;;;1778:434;;;:::o;2917:326::-;3044:4;3117:44;;;:33;:44;;;;;3178:18;3117:44;3178:16;:18::i;:::-;:23;;:58;;-1:-1:-1;3205:31:4;:9;3224:11;3205:31;:18;:31;:::i;:::-;3171:65;;;2917:326;;;;;:::o;2218:446::-;2370:10;1697:149:6;1732:15;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;1697:149:6;2392:121:4;2418:25;;;;;2457:4;2392:121;:12;:121::i;:::-;2524:44;;;;:33;:44;;;;;:64;;2576:11;2524:64;:51;:64;:::i;:::-;-1:-1:-1;2603:54:4;;;;;;2634:9;;2603:54;;;;;2218:446;;;:::o;2937:312:155:-;3027:16;3059:23;3099:3;:10;;:17;;;;3085:32;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;3085:32:155;;3059:58;;3132:9;3127:93;3147:10;;;:17;3143:21;;3127:93;;;3196:3;:10;;3207:1;3196:13;;;;;;;;;;;;;;;;;;;;;;;;;3184:6;3191:1;3184:9;;;;;;;;:25;;;;:9;;;;;;;;;;;:25;3166:3;;3127:93;;;-1:-1:-1;3236:6:155;2937:312;-1:-1:-1;;2937:312:155:o;2962:561:99:-;3122:4;3117:400;;3236:24;3255:4;3236:18;:24::i;:::-;3286:5;3317:26;3336:6;3317:18;:26::i;:::-;3369:6;3401:19;3411:8;3401:9;:19::i;:::-;3194:280;;;;;;;;;3446:6;;3194:280;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;3194:280:99;;;;3142:364;;;;;;;;;;;;;;;;;3117:400;2962:561;;;;:::o;1294:426::-;1428:4;1423:291;;1542:24;1561:4;1542:18;:24::i;:::-;1592:5;1623:26;1642:6;1623:18;:26::i;:::-;1500:171;;;;;;;;;;;1423:291;1294:426;;;:::o;923:272:155:-;1009:4;1034:20;1043:3;1048:5;1034:8;:20::i;:::-;1029:160;;-1:-1:-1;1088:10:155;;;;27::-1;;23:18;;;45:23;;;-1:-1;1088:22:155;;;;;;;;;;;;;;;;;;;;;;;1069:16;;;;;;;;;;:41;1124:11;;1029:160;-1:-1:-1;1173:5:155;1166:12;;3332:141;3449:10;;:17;;3332:141::o;2425:159::-;2556:16;;2529:4;2556:16;;;;;;;;;;;;:21;;;2425:159::o;1325:1019::-;1414:4;1438:20;1447:3;1452:5;1438:8;:20::i;:::-;1434:904;;;1497:16;;;1473:21;1497:16;;;;;;;;;;;1516:1;1551:10;;:17;1497:20;;;;;1551:21;1696:26;;;1692:382;;1742:17;1762:3;:10;;1773:9;1762:21;;;;;;;;;;;;;;;;;;;1881:10;;:25;;1762:21;;;;;-1:-1:-1;1762:21:155;;1892:13;;1881:25;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;1992:20;;;;;;;;;;;;;-1:-1:-1;2015:17:155;;1992:40;;1692:382;2155:16;;;:9;:16;;;;;;;;;;2148:23;2242:10;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2242:16:155;;-1:-1:-1;2273:11:155;;-1:-1:-1;2273:11:155;6359:968:99;6463:12;6538:19;6577:5;6560:23;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;6560:23:99;;;;-1:-1:-1;49:4;6689:572:99;6710:6;;6689:572;;6962:9;;6864:3;;;;;6962:6;;6864:3;;6962:9;;;;;;;;;;;;:14;6958:293;;7017:1;7013:5;7143:22;;7150:6;-1:-1:-1;7223:13:99;;6958:293;6689:572;;;-1:-1:-1;7308:12:99;;;7318:1;7308:12;;;;;;;;;;;-1:-1:-1;7301:19:99;6359:968;-1:-1:-1;;;6359:968:99:o;8252:958::-;8524:13;;;8534:2;8524:13;;;8346:12;8524:13;;;;;;8386:14;;;;8346:12;;8524:13;;;21:6:-1;;104:10;8524:13:99;87:34:-1;135:17;;-1:-1;8524:13:99;8502:35;;902:2;8601:23;;8589:6;8596:1;8589:9;;;;;;;;;;;:35;;;;;;;;;;;1010:3;8646:27;;8634:6;8641:1;8634:9;;;;;;;;;;;:39;;;;;;;;;;;8787:9;8782:398;8802:2;8798:1;:6;8782:398;;;8891:1;8887:5;;8984:23;1232:3;8989:17;;8984:4;:23::i;:::-;8963:6;8975:5;8970:2;:10;8963:18;;;;;;;;;;;:44;;;;;;;;;;;9030:1;9025;:6;;9021:10;;9122:23;1232:3;9127:1;:17;9122:4;:23::i;:::-;9101:6;9113:5;9108:2;:10;9101:18;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;;9168:1:99;9163:6;;;;;8806:3;;8782:398;;10178:325;10267:4;10335:2;10327:5;:10;10323:79;;;-1:-1:-1;902:2:99;10371:18;;10360:31;;10353:38;;10323:79;-1:-1:-1;956:2:99;10467:27;10456:40;;;10178:325::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:134;220:13;;238:33;220:13;238:33;;283:130;350:20;;375:33;350:20;375:33;;420:263;;535:2;523:9;514:7;510:23;506:32;503:2;;;551:1;548;541:12;503:2;586:1;603:64;659:7;639:9;603:64;;690:241;;794:2;782:9;773:7;769:23;765:32;762:2;;;810:1;807;800:12;762:2;845:1;862:53;907:7;887:9;862:53;;938:366;;;1059:2;1047:9;1038:7;1034:23;1030:32;1027:2;;;1075:1;1072;1065:12;1027:2;1110:1;1127:53;1172:7;1152:9;1127:53;;;1117:63;;1089:97;1217:2;1235:53;1280:7;1271:6;1260:9;1256:22;1235:53;;;1225:63;;1196:98;1021:283;;;;;;1312:173;;1399:46;1441:3;1433:6;1399:46;;;-1:-1;;1474:4;1465:14;;1392:93;1493:103;1566:24;1584:5;1566:24;;;1561:3;1554:37;1548:48;;;1634:690;;1779:54;1827:5;1779:54;;;1846:86;1925:6;1920:3;1846:86;;;1839:93;;1953:56;2003:5;1953:56;;;2029:7;2057:1;2042:260;2067:6;2064:1;2061:13;2042:260;;;2134:6;2128:13;2155:63;2214:3;2199:13;2155:63;;;2148:70;;2235:60;2288:6;2235:60;;;2225:70;-1:-1;;2089:1;2082:9;2042:260;;;-1:-1;2315:3;;1758:566;-1:-1;;;;;1758:566;2332:104;2409:21;2424:5;2409:21;;2443:148;2542:43;2561:23;2578:5;2561:23;;;2542:43;;2598:148;2697:43;2716:23;2733:5;2716:23;;2753:152;2854:45;2874:24;2892:5;2874:24;;2912:356;;3040:38;3072:5;3040:38;;;3090:88;3171:6;3166:3;3090:88;;;3083:95;;3183:52;3228:6;3223:3;3216:4;3209:5;3205:16;3183:52;;;3247:16;;;;;3020:248;-1:-1;;3020:248;3275:176;3383:62;3439:5;3383:62;;3458:347;;3570:39;3603:5;3570:39;;;3621:71;3685:6;3680:3;3621:71;;;3614:78;;3697:52;3742:6;3737:3;3730:4;3723:5;3719:16;3697:52;;;3770:29;3792:6;3770:29;;;3761:39;;;;3550:255;-1:-1;;;3550:255;3812:244;;3931:75;4002:3;3993:6;3931:75;;;-1:-1;4028:2;4019:12;;3919:137;-1:-1;3919:137;4063:553;;4279:93;4368:3;4359:6;4279:93;;;4272:100;;4383:73;4452:3;4443:6;4383:73;;;4478:1;4473:3;4469:11;4462:18;;4498:93;4587:3;4578:6;4498:93;;;4491:100;4260:356;-1:-1;;;;;4260:356;4623:978;;4937:93;5026:3;5017:6;4937:93;;;4930:100;;5041:73;5110:3;5101:6;5041:73;;;5136:1;5131:3;5127:11;5120:18;;5156:93;5245:3;5236:6;5156:93;;;5149:100;;5260:73;5329:3;5320:6;5260:73;;;5355:1;5350:3;5346:11;5339:18;;5375:93;5464:3;5455:6;5375:93;;;5368:100;;5479:73;5548:3;5539:6;5479:73;;;-1:-1;5574:1;5565:11;;4918:683;-1:-1;;;;;;4918:683;5608:361;5776:2;5790:47;;;5761:18;;5851:108;5761:18;5945:6;5851:108;;;5843:116;5747:222;-1:-1;;;5747:222;5976:201;6088:2;6073:18;;6102:65;6077:9;6140:6;6102:65;;6184:263;6327:2;6312:18;;6341:96;6316:9;6410:6;6341:96;;6454:301;6592:2;6606:47;;;6577:18;;6667:78;6577:18;6731:6;6667:78;;6762:151;6886:4;6877:14;;6834:79;6920:137;7023:12;;6994:63;7437:178;7555:19;;;7604:4;7595:14;;7548:67;7948:91;;8010:24;8028:5;8010:24;;8046:85;8112:13;8105:21;;8088:43;8138:144;8210:66;8199:78;;8182:100;8289:144;8361:66;8350:78;;8333:100;8440:72;8502:5;8485:27;8519:121;8592:42;8581:54;;8564:76;8726:171;;8830:62;8886:5;8830:62;;9045:268;9110:1;9117:101;9131:6;9128:1;9125:13;9117:101;;;9198:11;;;9192:18;9179:11;;;9172:39;9153:2;9146:10;9117:101;;;9233:6;9230:1;9227:13;9224:2;;;-1:-1;;9298:1;9280:16;;9273:27;9094:219;9562:97;9650:2;9630:14;9646:7;9626:28;;9610:49;9667:117;9736:24;9754:5;9736:24;;;9729:5;9726:35;9716:2;;9775:1;9772;9765:12;9716:2;9710:74;;9791:117;9860:24;9878:5;9860:24;",
"source": "/*\n\n Copyright 2022 Dolomite.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.7;\npragma experimental ABIEncoderV2;\n\nimport { EnumerableSet as OpenZeppelinEnumerableSet } from \"@openzeppelin/contracts/utils/EnumerableSet.sol\";\n\nimport { Require } from \"../../protocol/lib/Require.sol\";\n\nimport { OnlyDolomiteMargin } from \"../helpers/OnlyDolomiteMargin.sol\";\n\nimport { ILiquidatorAssetRegistry } from \"../interfaces/ILiquidatorAssetRegistry.sol\";\n\n\n/**\n * @title LiquidatorAssetRegistry\n * @author Dolomite\n *\n * @notice A registry contract for tracking which assets can be liquidated by each contract.\n */\ncontract LiquidatorAssetRegistry is ILiquidatorAssetRegistry, OnlyDolomiteMargin {\n using OpenZeppelinEnumerableSet for OpenZeppelinEnumerableSet.AddressSet;\n\n // ============ Constants ============\n\n bytes32 private constant FILE = \"LiquidatorAssetRegistry\";\n\n // ============ Storage ============\n\n mapping(uint256 => OpenZeppelinEnumerableSet.AddressSet) private _marketIdToLiquidatorWhitelistMap;\n\n // ============ Constructor ============\n\n constructor (\n address dolomiteMargin\n )\n public\n OnlyDolomiteMargin(dolomiteMargin)\n {}\n\n // ============ Admin Functions ============\n\n function ownerAddLiquidatorToAssetWhitelist(\n uint256 _marketId,\n address _liquidator\n )\n external\n onlyDolomiteMarginOwner(msg.sender) {\n Require.that(\n _liquidator != address(0),\n FILE,\n \"Invalid liquidator address\"\n );\n\n _marketIdToLiquidatorWhitelistMap[_marketId].add(_liquidator);\n emit LiquidatorAddedToWhitelist(_marketId, _liquidator);\n }\n\n function ownerRemoveLiquidatorFromAssetWhitelist(\n uint256 _marketId,\n address _liquidator\n )\n external\n onlyDolomiteMarginOwner(msg.sender) {\n Require.that(\n _liquidator != address(0),\n FILE,\n \"Invalid liquidator address\"\n );\n\n _marketIdToLiquidatorWhitelistMap[_marketId].remove(_liquidator);\n emit LiquidatorRemovedFromWhitelist(_marketId, _liquidator);\n }\n\n // ============ Getter Functions ============\n\n function getLiquidatorsForAsset(\n uint256 _marketId\n )\n external view returns (address[] memory) {\n return _marketIdToLiquidatorWhitelistMap[_marketId].enumerate();\n }\n\n function isAssetWhitelistedForLiquidation(\n uint256 _marketId,\n address _liquidator\n ) external view returns (bool) {\n OpenZeppelinEnumerableSet.AddressSet storage whitelist = _marketIdToLiquidatorWhitelistMap[_marketId];\n return whitelist.length() == 0 || whitelist.contains(_liquidator);\n }\n}\n",
"sourcePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/LiquidatorAssetRegistry.sol",
"ast": {
"absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/LiquidatorAssetRegistry.sol",
"exportedSymbols": {
"LiquidatorAssetRegistry": [
1873
]
},
"id": 1874,
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1724,
"literals": [
"solidity",
"^",
"0.5",
".7"
],
"nodeType": "PragmaDirective",
"src": "595:23:4"
},
{
"id": 1725,
"literals": [
"experimental",
"ABIEncoderV2"
],
"nodeType": "PragmaDirective",
"src": "619:33:4"
},
{
"absolutePath": "@openzeppelin/contracts/utils/EnumerableSet.sol",
"file": "@openzeppelin/contracts/utils/EnumerableSet.sol",
"id": 1727,
"nodeType": "ImportDirective",
"scope": 1874,
"sourceUnit": 38063,
"src": "654:109:4",
"symbolAliases": [
{
"foreign": 1726,
"local": "OpenZeppelinEnumerableSet"
}
],
"unitAlias": ""
},
{
"absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol",
"file": "../../protocol/lib/Require.sol",
"id": 1729,
"nodeType": "ImportDirective",
"scope": 1874,
"sourceUnit": 28453,
"src": "765:57:4",
"symbolAliases": [
{
"foreign": 1728,
"local": null
}
],
"unitAlias": ""
},
{
"absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol",
"file": "../helpers/OnlyDolomiteMargin.sol",
"id": 1731,
"nodeType": "ImportDirective",
"scope": 1874,
"sourceUnit": 3067,
"src": "824:71:4",
"symbolAliases": [
{
"foreign": 1730,
"local": null
}
],
"unitAlias": ""
},
{
"absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/ILiquidatorAssetRegistry.sol",
"file": "../interfaces/ILiquidatorAssetRegistry.sol",
"id": 1733,
"nodeType": "ImportDirective",
"scope": 1874,
"sourceUnit": 4875,
"src": "897:86:4",
"symbolAliases": [
{
"foreign": 1732,
"local": null
}
],
"unitAlias": ""
},
{
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 1734,
"name": "ILiquidatorAssetRegistry",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 4874,
"src": "1184:24:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ILiquidatorAssetRegistry_$4874",
"typeString": "contract ILiquidatorAssetRegistry"
}
},
"id": 1735,
"nodeType": "InheritanceSpecifier",
"src": "1184:24:4"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 1736,
"name": "OnlyDolomiteMargin",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 3066,
"src": "1210:18:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_OnlyDolomiteMargin_$3066",
"typeString": "contract OnlyDolomiteMargin"
}
},
"id": 1737,
"nodeType": "InheritanceSpecifier",
"src": "1210:18:4"
}
],
"contractDependencies": [
3066,
4874
],
"contractKind": "contract",
"documentation": "@title LiquidatorAssetRegistry\n@author Dolomite\n * @notice A registry contract for tracking which assets can be liquidated by each contract.",
"fullyImplemented": true,
"id": 1873,
"linearizedBaseContracts": [
1873,
3066,
4874
],
"name": "LiquidatorAssetRegistry",
"nodeType": "ContractDefinition",
"nodes": [
{
"id": 1740,
"libraryName": {
"contractScope": null,
"id": 1738,
"name": "OpenZeppelinEnumerableSet",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 38062,
"src": "1241:25:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_EnumerableSet_$38062",
"typeString": "library EnumerableSet"
}
},
"nodeType": "UsingForDirective",
"src": "1235:73:4",
"typeName": {
"contractScope": null,
"id": 1739,
"name": "OpenZeppelinEnumerableSet.AddressSet",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 37857,
"src": "1271:36:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_AddressSet_$37857_storage_ptr",
"typeString": "struct EnumerableSet.AddressSet"
}
}
},
{
"constant": true,
"id": 1743,
"name": "FILE",
"nodeType": "VariableDeclaration",
"scope": 1873,
"src": "1358:57:4",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 1741,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1358:7:4",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": {
"argumentTypes": null,
"hexValue": "4c697175696461746f7241737365745265676973747279",
"id": 1742,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1390:25:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_da54c48cdc83a61b0f9c8f0cfb13df5dede560fe10c6e43d2b9b94858de5946f",
"typeString": "literal_string \"LiquidatorAssetRegistry\""
},
"value": "LiquidatorAssetRegistry"
},
"visibility": "private"
},
{
"constant": false,
"id": 1747,
"name": "_marketIdToLiquidatorWhitelistMap",
"nodeType": "VariableDeclaration",
"scope": 1873,
"src": "1464:98:4",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_AddressSet_$37857_storage_$",
"typeString": "mapping(uint256 => struct EnumerableSet.AddressSet)"
},
"typeName": {
"id": 1746,
"keyType": {
"id": 1744,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1472:7:4",