@dolomite-exchange/dolomite-margin
Version:
Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol
513 lines • 1.34 MB
JSON
{
"contractName": "Expiry",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "dolomiteMargin",
"type": "address"
},
{
"internalType": "uint256",
"name": "expiryRampTime",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "number",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "marketId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint32",
"name": "time",
"type": "uint32"
}
],
"name": "ExpirySet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "expiryRampTime",
"type": "uint256"
}
],
"name": "LogExpiryRampTimeSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "approver",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint32",
"name": "minTimeDelta",
"type": "uint32"
}
],
"name": "LogSenderApproved",
"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": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "g_approvedSender",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "g_expiryRampTime",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "newExpiryRampTime",
"type": "uint256"
}
],
"name": "ownerSetExpiryRampTime",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint32",
"name": "minTimeDelta",
"type": "uint32"
}
],
"name": "approveSender",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info",
"name": "account",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "callFunction",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "inputMarketId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "outputMarketId",
"type": "uint256"
},
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info",
"name": "makerAccount",
"type": "tuple"
},
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info",
"name": "",
"type": "tuple"
},
{
"components": [
{
"internalType": "bool",
"name": "sign",
"type": "bool"
},
{
"internalType": "uint128",
"name": "value",
"type": "uint128"
}
],
"internalType": "struct Types.Par",
"name": "oldInputPar",
"type": "tuple"
},
{
"components": [
{
"internalType": "bool",
"name": "sign",
"type": "bool"
},
{
"internalType": "uint128",
"name": "value",
"type": "uint128"
}
],
"internalType": "struct Types.Par",
"name": "newInputPar",
"type": "tuple"
},
{
"components": [
{
"internalType": "bool",
"name": "sign",
"type": "bool"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct Types.Wei",
"name": "inputWei",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "getTradeCost",
"outputs": [
{
"components": [
{
"internalType": "bool",
"name": "sign",
"type": "bool"
},
{
"internalType": "enum Types.AssetDenomination",
"name": "denomination",
"type": "uint8"
},
{
"internalType": "enum Types.AssetReference",
"name": "ref",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct Types.AssetAmount",
"name": "",
"type": "tuple"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info",
"name": "account",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "marketId",
"type": "uint256"
}
],
"name": "getExpiry",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info",
"name": "liquidAccount",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "heldMarketId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "owedMarketId",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "expiry",
"type": "uint32"
}
],
"name": "getLiquidationSpreadAdjustedPrices",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct Monetary.Price",
"name": "",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct Monetary.Price",
"name": "",
"type": "tuple"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "heldMarketId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "owedMarketId",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "expiry",
"type": "uint32"
}
],
"name": "getSpreadAdjustedPrices",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct Monetary.Price",
"name": "",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct Monetary.Price",
"name": "",
"type": "tuple"
}
],
"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\"},{\"internalType\":\"uint256\",\"name\":\"expiryRampTime\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"time\",\"type\":\"uint32\"}],\"name\":\"ExpirySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiryRampTime\",\"type\":\"uint256\"}],\"name\":\"LogExpiryRampTimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"minTimeDelta\",\"type\":\"uint32\"}],\"name\":\"LogSenderApproved\",\"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\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"minTimeDelta\",\"type\":\"uint32\"}],\"name\":\"approveSender\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callFunction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"g_approvedSender\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"g_expiryRampTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"marketId\",\"type\":\"uint256\"}],\"name\":\"getExpiry\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"liquidAccount\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"heldMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"owedMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"expiry\",\"type\":\"uint32\"}],\"name\":\"getLiquidationSpreadAdjustedPrices\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Price\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Price\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"heldMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"owedMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"expiry\",\"type\":\"uint32\"}],\"name\":\"getSpreadAdjustedPrices\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Price\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Monetary.Price\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"inputMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"outputMarketId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"makerAccount\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"oldInputPar\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newInputPar\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"inputWei\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"getTradeCost\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newExpiryRampTime\",\"type\":\"uint256\"}],\"name\":\"ownerSetExpiryRampTime\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"dYdX * Expiry contract that also allows approved senders to set expiry to be 28 days in the future.\",\"methods\":{},\"title\":\"Expiry\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/traders/Expiry.sol\":\"Expiry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/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/IExpiry.sol\":{\"keccak256\":\"0xa7b197139e570e823cab42c3b8500c9c5edc8a40110970a7d6fe60f05864ba10\",\"urls\":[\"bzz-raw://4f469be063d8f694c5277650bc53ac2c0d164f62e36c6a9ab7dad126479990a9\",\"dweb:/ipfs/Qme4sTbGi4T2QhsJSweqGzqm5rxQkypy27g1vLy8ipVijV\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/traders/Expiry.sol\":{\"keccak256\":\"0x1323d7c0c209764fdb97a399ce6e42a29f0c623bc1b2779c8e15de69fabb4805\",\"urls\":[\"bzz-raw://4264b5d23858351ddbc4703ef4c27321144320212764d4b813145c86be2b4fba\",\"dweb:/ipfs/QmXdNRCbsssnUqpyzU2bzR4foYpCv2cSMLShk9rmWAZXv4\"]},\"/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/IAutoTrader.sol\":{\"keccak256\":\"0x123b5d92696b180c60a838d3117a9fd571851911f37c78212969015e169e14fc\",\"urls\":[\"bzz-raw://cd5d9aeb5b4e3de18ac8a51a3b2320f3e7a247b959defa9c289ee6aaf2bfc348\",\"dweb:/ipfs/QmPdjeya5BDYHEUMuz6jiwZrKJa8p2uN1vumLAJ7nhG5cN\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/ICallee.sol\":{\"keccak256\":\"0x0b65209369307041e67c28634fc17a19e953199ac42a88198b76578f7fa9b0f8\",\"urls\":[\"bzz-raw://46618851882c2bc5a6212bb0a8ad095e0f38049f24ecf404163ad6b493c728a1\",\"dweb:/ipfs/QmRx4VabTaXTGSyMt8NCTZ7nMiWCHfrvqZjRaKNRir3zEe\"]},\"/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/IExternalCallback.sol\":{\"keccak256\":\"0xd8134eac006b0a59b71cbcca82dfce7ce092a57c13a8383ebf0e8bc90c0df3e7\",\"urls\":[\"bzz-raw://ccead8bdcc71402ae7b1d8fb9bc1527081a5eb14f98a5157f5c6f27f21f8ad31\",\"dweb:/ipfs/QmdnDvTiX3EDm93ahjnZabNNgoyQzGtKpfbQUNtJe7t8Ts\"]},\"/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/Address.sol\":{\"keccak256\":\"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11\",\"urls\":[\"bzz-raw://03335b7b07c7c8c8d613cfdd8ec39a0b5ec133ee510bf2fe6cc5a496767bef4b\",\"dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf\"]}},\"version\":1}",
"bytecode": "0x60806040523480156200001157600080fd5b5060405162002c3e38038062002c3e83398101604081905262000034916200007e565b600080546001600160a01b0319166001600160a01b039390931692909217909155600355620000f7565b80516200006b81620000d2565b92915050565b80516200006b81620000ec565b600080604083850312156200009257600080fd5b6000620000a085856200005e565b9250506020620000b38582860162000071565b9150509250929050565b60006001600160a01b0382166200006b565b90565b620000dd81620000bd565b8114620000e957600080fd5b50565b620000dd81620000cf565b612b3780620001076000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80636b8301da11610076578063b13965421161005b578063b13965421461017d578063d886248414610190578063f64e654c146101a5576100be565b80636b8301da146101495780638b4187131461016a576100be565b80631be7dd83116100a75780631be7dd831461010157806320bed57214610114578063448f706514610129576100be565b80630bce846a146100c357806315c14a4a146100ec575b600080fd5b6100d66100d13660046120b2565b6101b8565b6040516100e391906128e5565b60405180910390f35b6100f46101db565b6040516100e3919061282c565b6100d661010f366004612235565b6101f7565b610127610122366004612151565b610241565b005b61013c610137366004612320565b610250565b6040516100e3919061286b565b61015c610157366004612265565b61048b565b6040516100e39291906128bc565b6101276101783660046120ec565b6104ce565b61015c61018b3660046123eb565b610587565b6101986105e1565b6040516100e391906128d7565b6101276101b3366004612302565b6105e7565b600260209081526000928352604080842090915290825290205463ffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b815173ffffffffffffffffffffffffffffffffffffffff166000908152600160209081526040808320828601518452825280832084845290915290205463ffffffff165b92915050565b61024c338383610741565b5050565b610258611ca1565b60005433906102c19073ffffffffffffffffffffffffffffffffffffffff1682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e00846107e2565b6102ca846108e7565b156102fc576040805160808101909152600180825260208201908152602001600081526020016000815250915061047e565b60008084806020019051610313919081019061242e565b9150915060006103238b846101f7565b90506103858163ffffffff16600014157f45787069727900000000000000000000000000000000000000000000000000007f457870697279206e6f74207365740000000000000000000000000000000000008e600001518f60200151886108f3565b6103ed6103906109eb565b63ffffffff168263ffffffff1611157f45787069727900000000000000000000000000000000000000000000000000007f426f72726f77206e6f74207965742065787069726564000000000000000000008463ffffffff166109fb565b61044e8263ffffffff168263ffffffff1611157f45787069727900000000000000000000000000000000000000000000000000007f4578706972792070617374206d617845787069727900000000000000000000008463ffffffff166109fb565b6000546104789073ffffffffffffffffffffffffffffffffffffffff168e8e8e8d8d8d8a89610a5d565b94505050505b5098975050505050505050565b610493611cca565b61049b611cca565b6000546104c19073ffffffffffffffffffffffffffffffffffffffff1687878787610e42565b9150915094509492505050565b60005433906105379073ffffffffffffffffffffffffffffffffffffffff1682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e00846107e2565b60008280602001905161054d9190810190612181565b9050600081600181111561055d57fe5b141561057457835161056f90846110fc565b610580565b8351610580908461135c565b5050505050565b61058f611cca565b610597611cca565b600080546040805180820190915282815260208101929092526105d59173ffffffffffffffffffffffffffffffffffffffff90911690878787610e42565b91509150935093915050565b60035481565b336107006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561065257600080fd5b505afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061068a9190810190612094565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d697465206f776e65722063616e2063616c6c00000000846107e2565b60038290556040517fd08f204a092297d87c6a408c8d66cb1b189734e8284e655f896717b45a93a536906107359084906128d7565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600260209081526040808320938616835292905281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8416179055517f6d39d55c693043fe0327fddb80edde3a40fb0419a6299d29592cc2f11e728b9c906107d5908590859085906127c6565b60405180910390a1505050565b836108e1576107f0836113a7565b7f3a2000000000000000000000000000000000000000000000000000000000000061081a846113a7565b7f203c0000000000000000000000000000000000000000000000000000000000006108448561147f565b60405161087a9594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001612652565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526108d89160040161283a565b60405180910390fd5b50505050565b6020810151155b919050565b856109e357610901856113a7565b7f3a2000000000000000000000000000000000000000000000000000000000000061092b866113a7565b7f203c0000000000000000000000000000000000000000000000000000000000006109558761147f565b7f2c2000000000000000000000000000000000000000000000000000000000000061097f886115f6565b7f2c200000000000000000000000000000000000000000000000000000000000006109a9896115f6565b60405161087a999897969594939291907f3e000000000000000000000000000000000000000000000000000000000000009060200161272c565b505050505050565b60006109f642611705565b905090565b836108e157610a09836113a7565b7f3a20000000000000000000000000000000000000000000000000000000000000610a33846113a7565b7f203c000000000000000000000000000000000000000000000000000000000000610844856115f6565b610a65611ca1565b610a6d611ca1565b610a75611cdd565b6040517fc190c2ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d169063c190c2ec90610ac9908c908e90600401612879565b604080518083038186803b158015610ae057600080fd5b505afa158015610af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b1891908101906122e4565b9050610b238661175c565b15610c7857610b76858c147f45787069727900000000000000000000000000000000000000000000000000007f696e7075744d61726b6574206d69736d617463680000000000000000000000008e6109fb565b610be1610b8288611772565b157f45787069727900000000000000000000000000000000000000000000000000007f426f72726f77732063616e6e6f74206265206f766572706169640000000000008a602001516fffffffffffffffffffffffffffffffff166109fb565b610bea8861179a565b610bf057fe5b610c49610bfc8261175c565b7f45787069727900000000000000000000000000000000000000000000000000007f436f6c6c61746572616c206d75737420626520706f73697469766500000000008d85602001516117c3565b610c578c8a888d8f89611887565b9150610c6287611900565b15610c7357610c738986600061191a565b610dc5565b610cc6858b147f45787069727900000000000000000000000000000000000000000000000000007f6f75747075744d61726b6574206d69736d6174636800000000000000000000008d6109fb565b610d31610cd28861179a565b157f45787069727900000000000000000000000000000000000000000000000000007f436f6c6c61746572616c2063616e6e6f74206265206f766572757365640000008a602001516fffffffffffffffffffffffffffffffff166109fb565b610d3a88611772565b610d4057fe5b610d99610d4c826119bd565b7f45787069727900000000000000000000000000000000000000000000000000007f426f72726f7773206d757374206265206e6567617469766500000000000000008d85602001516117c3565b610da78c8a888e8e896119d4565b9150806020015182606001511415610dc557610dc58986600061191a565b60208101516060830151610e229180821115917f4578706972790000000000000000000000000000000000000000000000000000917f6f75747075744d61726b657420746f6f20736d616c6c0000000000000000000091906117c3565b8051825115159015151415610e3357fe5b509a9950505050505050505050565b610e4a611cca565b610e52611cca565b610e5a611cca565b6040517f1eb1207600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff891690631eb1207690610eb0908a908a908a90600401612894565b60206040518083038186803b158015610ec857600080fd5b505afa158015610edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f009190810190612217565b90506000610f0c6109eb565b905060008563ffffffff168263ffffffff161115610f4f57610f4a8663ffffffff16610f366109eb565b63ffffffff16611a3390919063ffffffff16565b610f52565b60005b9050600354811015610f7257610f6f836000015182600354611a7c565b83525b610f7a611cca565b6040517f8928378e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c1690638928378e90610fcc908c906004016128d7565b60206040518083038186803b158015610fe457600080fd5b505afa158015610ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061101c9190810190612217565b9050611026611cca565b6040517f8928378e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d1690638928378e90611078908c906004016128d7565b60206040518083038186803b15801561109057600080fd5b505afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110c89190810190612217565b90506110e96110db826000015187611aa6565b82519063ffffffff611abf16565b8152909b909a5098505050505050505050565b6000606082806020019051611114919081019061219f565b9092509050600082600181111561112757fe5b1461112e57fe5b805160005b818110156109e357611143611cf4565b83828151811061114f57fe5b602002602001015190508673ffffffffffffffffffffffffffffffffffffffff1681600001516000015173ffffffffffffffffffffffffffffffffffffffff16146111fa5780515173ffffffffffffffffffffffffffffffffffffffff9081166000908152600260209081526040808320938b168352929052205463ffffffff168015806111ec57508063ffffffff16826040015163ffffffff16105b156111f8575050611354565b505b604081015163ffffffff16158015906112bf5750600054815160208301516040517f47d1b53c0000000000000000000000000000000000000000000000000000000081526112bf9373ffffffffffffffffffffffffffffffffffffffff16926347d1b53c9261126b92600401612879565b604080518083038186803b15801561128257600080fd5b505afa158015611296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112ba91908101906122c6565b61179a565b1561133e578060600151806112e957506112e1816000015182602001516101f7565b63ffffffff16155b1561133957600061132261131d836040015163ffffffff166113096109eb565b63ffffffff16611abf90919063ffffffff16565b611705565b9050611337826000015183602001518361191a565b505b611352565b61135281600001518260200151600061191a565b505b600101611133565b6000611366611cdd565b8280602001905161137a91908101906121e7565b9092509050600182600181111561138d57fe5b1461139457fe5b6108e18482600001518360200151610741565b606080826040516020016113bb919061263d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156114645781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061142757fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561145f57600101815290506108ee565b6113ee565b5060408051600080825260208201909252905b509392505050565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b816000815181106114cb57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b8160018151811061150c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156114775760028102611557600f8516611afe565b83826029038151811061156657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c93506115a8600f8516611afe565b8382602803815181106115b757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c9160010161153e565b606081611637575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526108ee565b8160005b811561164f57600101600a8204915061163b565b6060816040519080825280601f01601f19166020018201604052801561167c576020820181803883390190505b508593509050815b80156116fc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b8282815181106116c257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611684565b50949350505050565b60008161023b63ffffffff821682147f4d617468000000000000000000000000000000000000000000000000000000007f556e73616665206361737420746f2075696e7433320000000000000000000000846109fb565b8051600090801561023b57505060200151151590565b8051600090801561023b575050602001516fffffffffffffffffffffffffffffffff16151590565b805160009015801561023b575050602001516fffffffffffffffffffffffffffffffff16151590565b84610580576117d1846113a7565b7f3a200000000000000000000000000000000000000000000000000000000000006117fb856113a7565b7f203c000000000000000000000000000000000000000000000000000000000000611825866115f6565b7f2c2000000000000000000000000000000000000000000000000000000000000061184f876115f6565b60405161087a97969594939291907f3e00000000000000000000000000000000000000000000000000000000000000906020016126b0565b61188f611ca1565b611897611cca565b61189f611cca565b6118ac8989888888610e42565b9150915060006118c9886020015183600001518560000151611a7c565b604080516080810190915260008082529192509060208201905b815260200160008152602001919091529998505050505050505050565b602001516fffffffffffffffffffffffffffffffff161590565b825173ffffffffffffffffffffffffffffffffffffffff166000908152600160209081526040808320828701805185529083528184208685529092529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff85161790558451905191517ecee2201664da23900ada76f5e96bcae576e5d7253b36f10dc1b379597d521b926107d59291869086906127ee565b805160009015801561023b57505060200151151590565b6119dc611ca1565b6119e4611cca565b6119ec611cca565b6119f98989888888610e42565b915091506000611a16886020015184600001518460000151611b20565b6040805160808101909152600181529091506020810160006118e3565b6000611a7583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b79565b9392505050565b6000611a9e82611a92868663ffffffff611bbf16565b9063ffffffff611c1316565b949350505050565b6000611a75838360000151670de0b6b3a7640000611a7c565b600082820183811015611a75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d89061284b565b6000600a821015611b1657506030810160f81b6108ee565b5060570160f81b90565b6000831580611b2d575082155b15611b4457611b3d600083611c13565b9050611a75565b611a9e6001611b6d84611a9283611b618a8a63ffffffff611bbf16565b9063ffffffff611a3316565b9063ffffffff611abf16565b60008184841115611bb7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d8919061283a565b505050900390565b600082611bce5750600061023b565b82820282848281611bdb57fe5b0414611a75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d89061285b565b6000611a7583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060008183611c8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d8919061283a565b506000838581611c9757fe5b0495945050505050565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b6040518060200160405280600081525090565b604080518082019091526000808252602082015290565b6040518060800160405280611d07611cdd565b81526000602082018190526040820181905260609091015290565b803561023b81612aaf565b805161023b81612aaf565b600082601f830112611d4957600080fd5b8151611d5c611d578261291a565b6128f3565b915081818352602084019350602081019050838560a0840282011115611d8157600080fd5b60005b83811015611daf5781611d978882611f8f565b84525060209092019160a09190910190600101611d84565b5050505092915050565b803561023b81612ac3565b805161023b81612ac3565b600082601f830112611de057600080fd5b8135611dee611d578261293b565b91508082526020830160208301858383011115611e0a57600080fd5b611e15838284612a42565b50505092915050565b805161023b81612acc565b600060208284031215611e3b57600080fd5b611e4560206128f3565b90506000611e538484612073565b82525092915050565b600060408284031215611e6e57600080fd5b611e7860406128f3565b90506000611e868484611d2d565b8252506020611e9784848301612073565b60208301525092915050565b600060408284031215611eb557600080fd5b611ebf60406128f3565b90506000611ecd8484611d22565b8252506020611e9784848301612068565b600060408284031215611ef057600080fd5b611efa60406128f3565b90506000611f088484611db9565b8252506020611e9784848301612052565b600060408284031215611f2b57600080fd5b611f3560406128f3565b90506000611f438484611dc4565b8252506020611e978484830161205d565b600060408284031215611f6657600080fd5b611f7060406128f3565b90506000611f7e8484611d2d565b8252506020611e9784848301612089565b600060a08284031215611fa157600080fd5b611fab60806128f3565b90506000611fb98484611e5c565b8252506040611fca84848301612073565b6020830152506060611fde84828501612089565b6040830152506080611ff284828501611dc4565b60608301525092915050565b60006040828403121561201057600080fd5b61201a60406128f3565b90506000611ecd8484611db9565b60006040828403121561203a57600080fd5b61204460406128f3565b90506000611e868484611dc4565b803561023b81612ad9565b805161023b81612ad9565b803561023b81612ae2565b805161023b81612ae2565b803561023b81612aeb565b805161023b81612aeb565b6000602082840312156120a657600080fd5b6000611a9e8484611d2d565b600080604083850312156120c557600080fd5b60006120d18585611d22565b92505060206120e285828601611d22565b9150509250929050565b60008060006080848603121561210157600080fd5b600061210d8686611d22565b935050602061211e86828701611ea3565b925050606084013567ffffffffffffffff81111561213b57600080fd5b61214786828701611dcf565b9150509250925092565b6000806040838503121561216457600080fd5b60006121708585611d22565b92505060206120e28582860161207e565b60006020828403121561219357600080fd5b6000611a9e8484611e1e565b600080604083850312156121b257600080fd5b60006121be8585611e1e565b925050602083015167ffffffffffffffff8111156121db57600080fd5b6120e285828601611d38565b600080606083850312156121fa57600080fd5b60006122068585611e1e565b92505060206120e285828601611f54565b60006020828403121561222957600080fd5b6000611a9e8484611e29565b6000806060838503121561224857600080fd5b60006122548585611ea3565b92505060406120e285828601612068565b60008060008060a0858703121561227b57600080fd5b60006122878787611ea3565b945050604061229887828801612068565b93505060606122a987828801612068565b92505060806122ba8782880161207e565b91505092959194509250565b6000604082840312156122d857600080fd5b6000611a9e8484611f19565b6000604082840312156122f657600080fd5b6000611a9e8484612028565b60006020828403121561231457600080fd5b6000611a9e8484612068565b6000806000806000806000806101a0898b03121561233d57600080fd5b60006123498b8b612068565b985050602061235a8b828c01612068565b975050604061236b8b828c01611ea3565b965050608061237c8b828c01611ea3565b95505060c061238d8b828c01611ede565b94505061010061239f8b828c01611ede565b9350506101406123b18b828c01611ffe565b92505061018089013567ffffffffffffffff8111156123cf57600080fd5b6123db8b828c01611dcf565b9150509295985092959890939650565b60008060006060848603121561240057600080fd5b600061240c8686612068565b935050602061241d86828701612068565b92505060406121478682870161207e565b6000806040838503121561244157600080fd5b600061244d8585612073565b92505060206120e285828601612089565b6124678161298e565b82525050565b61246781612999565b6124676124828261299e565b6129e8565b612467612482826129c3565b612467612482826129e8565b60006124aa82612981565b6124b481856108ee565b93506124c4818560208601612a4e565b9290920192915050565b61246781612a2c565b61246781612a37565b60006124eb82612981565b6124f58185612985565b9350612505818560208601612a4e565b61250e81612a7a565b9093019392505050565b6000612525601b83612985565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061255e602183612985565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b805160808301906125c1848261246d565b5060208201516125d460208501826124d7565b5060408201516125e760408501826124d7565b5060608201516108e1606085018261262b565b8051604083019061260b848261245e565b5060208201516108e1602085018261262b565b805160208301906108e184825b612467816129e8565b61246781612a23565b60006126498284612493565b50602001919050565b600061265e828961249f565b915061266a8288612487565b60028201915061267a828761249f565b91506126868286612487565b600282019150612696828561249f565b91506126a28284612476565b506001019695505050505050565b60006126bc828b61249f565b91506126c8828a612487565b6002820191506126d8828961249f565b91506126e48288612487565b6002820191506126f4828761249f565b91506127008286612487565b600282019150612710828561249f565b915061271c8284612476565b5060010198975050505050505050565b6000612738828d61249f565b9150612744828c612487565b600282019150612754828b61249f565b9150612760828a612487565b600282019150612770828961249f565b915061277c8288612487565b60028201915061278c828761249f565b91506127988286612487565b6002820191506127a8828561249f565b91506127b48284612476565b506001019a9950505050505050505050565b606081016127d4828661245e565b6127e1602083018561245e565b611a9e6040830184612634565b608081016127fc828761245e565b612809602083018661262b565b612816604083018561262