{
  "contractName": "TestCallee",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "dolomiteMargin",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "accountOwner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accountNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accountData",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "senderData",
          "type": "uint256"
        }
      ],
      "name": "Called",
      "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": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "accountData",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "senderData",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "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"
    }
  ],
  "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\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"accountOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountData\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"senderData\",\"type\":\"uint256\"}],\"name\":\"Called\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"accountData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"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\"}],\"name\":\"senderData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"dYdX * ICallee for testing\",\"methods\":{},\"title\":\"TestCallee\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TestCallee.sol\":\"TestCallee\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol\":{\"keccak256\":\"0xe40babc0a6dd2a767d76f3e0f0a22de124c4c480f2b2227a7b924b44e57526ea\",\"urls\":[\"bzz-raw://458f7f1f16eacd4faae597090503dc1e58446e9d371640c77b2e01e3e3113f17\",\"dweb:/ipfs/QmXqTG4sWJeDh5XA286KarbqHT4qJ7m3dphS16enpqtQiX\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol\":{\"keccak256\":\"0x5b9fde139ddfdaae7b650b3c3f6699e0e44605f0d9d3daadc1622eb06ad4c3f8\",\"urls\":[\"bzz-raw://2dfd5af24b6de63f94519c99fd8777a264d7cd11266fa2d525c7d72d96a9c7cf\",\"dweb:/ipfs/QmPg9fjhbnmBayZMh6yTG79xsK1PWSoAHA5pfwSXfnKKjF\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IAutoTrader.sol\":{\"keccak256\":\"0x123b5d92696b180c60a838d3117a9fd571851911f37c78212969015e169e14fc\",\"urls\":[\"bzz-raw://cd5d9aeb5b4e3de18ac8a51a3b2320f3e7a247b959defa9c289ee6aaf2bfc348\",\"dweb:/ipfs/QmPdjeya5BDYHEUMuz6jiwZrKJa8p2uN1vumLAJ7nhG5cN\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/ICallee.sol\":{\"keccak256\":\"0x0b65209369307041e67c28634fc17a19e953199ac42a88198b76578f7fa9b0f8\",\"urls\":[\"bzz-raw://46618851882c2bc5a6212bb0a8ad095e0f38049f24ecf404163ad6b493c728a1\",\"dweb:/ipfs/QmRx4VabTaXTGSyMt8NCTZ7nMiWCHfrvqZjRaKNRir3zEe\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x7e86ed1ed04dc205245db9f4e7cf7cca60c3bfc46c57ade8129a463780647967\",\"urls\":[\"bzz-raw://f8fbd85afd334c12bdccbb6523ebea9172b27b7b4b132c4a48b4b4dd03ceeb2b\",\"dweb:/ipfs/QmU1srfSqBTz3kw7oz1KEzfTUJvphZiE4K8MRZcy9uJjv1\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol\":{\"keccak256\":\"0xa94499fda55ef112640daed2cb1d06062e72c51c7b925c323b4e0ffa9b456ce5\",\"urls\":[\"bzz-raw://18b4a16acac577590a57f34f7ec6583e3cb35f575c948abb928b308d29cac1ab\",\"dweb:/ipfs/QmR1jLkzj6w7SjrdZ7GVW4V2vofSdMJwzjTqKpeUKABvxu\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x2059276ea5e478bd5ac7f2712e7b1b6c85d291c647a54b264909044844828e67\",\"urls\":[\"bzz-raw://f153777051d12131b13a57e5c3af10a2670927cfc7d22c9519ab20c9b4b9bc89\",\"dweb:/ipfs/QmQMP3qS5xDAVGYKDfNkbkSqBKozQGQsGqX4e8VyjRtxPS\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x7b2fcf441c034952dd042b6c8b20b148359db771e7c9ac07d06369560a9f0301\",\"urls\":[\"bzz-raw://84665ee4a780360fe6160d197ba98f0bf0ab0d7c6ad87bfed6226bf2f88d8d30\",\"dweb:/ipfs/QmRDfRdAd8hSXeu4SAeeYKkKoXBhStu7n4uReYBce2JD5Z\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x6d9a641163b2dd25e648c65f5d9e4949a57938e29ddc4c9dddefd74a9964aeef\",\"urls\":[\"bzz-raw://67e5a04ed4055faafbc100d6ccca9c54448ed378a1a8c71171562edda7bcbf7c\",\"dweb:/ipfs/QmYRikK3Xbgiq3UBJkgoo2zNUSSrShVabpRHmQj6iQHhrc\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0xe57c80a7621a77fcb2acb9f883fb5248e71a6dce03bc2db56df0db3fee332950\",\"urls\":[\"bzz-raw://28e221c04629674490b9a0041d4f9a5f15e669dc0cc192a5df6e2c701c36369f\",\"dweb:/ipfs/QmaL3oh8c7v9cx91pB175pyCEuzxnhNTab4UxmBMsDYfUx\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0xd9a348c2b1eec076609ba12bbec6b9c2e4ea135790a7ef4f5411feb050af2144\",\"urls\":[\"bzz-raw://d5bcff29e47d5cd02d7a9966e9f44c46ccbb4f0e4adfc4b0b86646880677db39\",\"dweb:/ipfs/QmRKfJD4FFM1AvTynSFNx1NcDg94o9SAcjz7dvMaJCfecp\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol\":{\"keccak256\":\"0x53f205f6a779d579be29faa9412c806a892b3e605fff092dfd9d14d936fa019f\",\"urls\":[\"bzz-raw://0ff936f89602a63b8e6a4eb4ce8f87673c0f45b7ce29694920905a3f0b5a6a69\",\"dweb:/ipfs/QmbYME9BeEvPC1ndV8EaUDX5fDMghLc3rocNUxFtgHmg8m\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x41a3460e34b7b8635d936e35e6568ceb5354b638f53b884530e0d4875fa0f151\",\"urls\":[\"bzz-raw://d1a5ba866ee95d455afe5075dadd91fc71c2806371f2c1b358a1f67c632bb0df\",\"dweb:/ipfs/QmW4qCjmsG8J3UJv97GwDLDM7wt1K4yLDKAwzWMY7TFYi5\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x141a0ecb4a746f0e5767df4b99dbe33c6362df507ae9d5c02da1c1c17bc26df3\",\"urls\":[\"bzz-raw://9ff03e64a8ce5231acde07788624bf8c7a8ff55d90b157fa32f62fa887a0eff0\",\"dweb:/ipfs/QmUVxxWeE954RDXbmHJAYnHsXcit6rSXGqZUigu8t9oH2z\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0x05a2a90b41b6a5f42f0a72da63d015fb0b406a9ba2172823352e522e8bf3a606\",\"urls\":[\"bzz-raw://19883f0c6d33266f756ec5c3d17539524aa24b993c46c33f8400801d09373a6c\",\"dweb:/ipfs/QmYX2fwK3vQQDSZLMrc5wMfeb8RWrcC9CGX8XECLty8QDk\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0x9c27f3cd52af28c9b6bca18097b1793f114d08284d78417467d0d05f67e9e2a9\",\"urls\":[\"bzz-raw://d1ed0e7a7f76d59f30572996d4e164ab8fb5b2ec4bfca127983f9e936b904813\",\"dweb:/ipfs/QmePVYbgrY8Yw3Vf76pmEvE9pX916Jaa9we4kjM8tGM4J1\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x87ee8d3c1d6e315a116426d8c8fc6f083e220fd14dda27fad4e8d7cab3dc7305\",\"urls\":[\"bzz-raw://7c20f2c52da682c3b5917fb6a19e81f43699b1d13c62b569ed723f34da72e766\",\"dweb:/ipfs/QmbXWYXi67nHBVNDKYUpo2E9ZaEVcHLvmXQkpYLMm1d5Vm\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0x095b5f8eb3665f6e246200311efc8a654fa3e90f9a1a522e27a4d089e8ab3917\",\"urls\":[\"bzz-raw://5db812b752a03d601d424e6e21be38153477082af0acf51b5c98eefa5553ed18\",\"dweb:/ipfs/QmbE549QUXYTurpx8hSMLBJvuBpfYqyNE6FBCgHJDY8PLf\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xe1bab8c8799d83e86c7a49aaf815d8e3bc8d09562d46d44d921500db5e98de0e\",\"urls\":[\"bzz-raw://8ea3d0cc4fdab6dd9bba545a792170f939b342d8d1a7051c1c6365009af72658\",\"dweb:/ipfs/QmaLJgbavu88eEit6JPqfWnw6NmGBDZfveMXxumgWywBFG\"]},\"/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TestCallee.sol\":{\"keccak256\":\"0xd5c123a1505d236f935567b9cebd380153a05967ddbe5a29ee548e24138dbde3\",\"urls\":[\"bzz-raw://096c86be334c44873b9600bb94cd4a4e367b817b263b534646e7ffbbdb1944b2\",\"dweb:/ipfs/QmZSBNfL5EEdwvc5WsG8KuoxzUC74sHW4TYvweBbKVRWRC\"]},\"@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\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50604051610c05380380610c0583398101604081905261002f91610065565b600080546001600160a01b0319166001600160a01b03929092169190911790556100b3565b805161005f8161009c565b92915050565b60006020828403121561007757600080fd5b60006100838484610054565b949350505050565b60006001600160a01b03821661005f565b6100a58161008b565b81146100b057600080fd5b50565b610b43806100c26000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806315c14a4a146100515780632137c0e51461006f5780638b4187131461008f578063b33b9cc0146100a4575b600080fd5b6100596100b7565b604051610066919061092e565b60405180910390f35b61008261007d3660046107a8565b6100d3565b6040516100669190610954565b6100a261009d366004610743565b6100f0565b005b6100826100b236600461071d565b61022a565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600160209081526000928352604080842090915290825290205481565b60005433906101599073ffffffffffffffffffffffffffffffffffffffff1682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e008461023c565b60008061016584610341565b91509150846000015173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f4c3c182d38f9efecd4bc09ba9ff16cf39e0b4c71b7f0286d0306f9ef91a5a6a8876020015185856040516101d293929190610962565b60405180910390a3845173ffffffffffffffffffffffffffffffffffffffff90811660009081526001602090815260408083209882015183529781528782209490945596168652600290915292909320919091555050565b60026020526000908152604090205481565b8361033b5761024a836103a4565b7f3a20000000000000000000000000000000000000000000000000000000000000610274846103a4565b7f203c00000000000000000000000000000000000000000000000000000000000061029e8561047e565b6040516102d49594939291907f3e00000000000000000000000000000000000000000000000000000000000000906020016108d0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526103329160040161093c565b60405180910390fd5b50505050565b60008061039383516040147f5465737443616c6c6565000000000000000000000000000000000000000000007f43616c6c206461746120696e76616c6964206c656e67746800000000000000006105f5565b505060208101516040820151915091565b606080826040516020016103b8919061088a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156104615781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061042457fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561045c5760010181529050610479565b6103eb565b5060408051600080825260208201909252905b509150505b919050565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b816000815181106104ca57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b8160018151811061050b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156104745760028102610556600f8516610644565b83826029038151811061056557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c93506105a7600f8516610644565b8382602803815181106105b657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c9160010161053d565b8261063f57610603826103a4565b7f3a2000000000000000000000000000000000000000000000000000000000000061062d836103a4565b6040516020016102d49392919061089f565b505050565b6000600a82101561065c57506030810160f81b610479565b5060570160f81b90565b803561067181610ae0565b92915050565b600082601f83011261068857600080fd5b813561069b610696826109b1565b61098a565b915080825260208301602083018583830111156106b757600080fd5b6106c2838284610a80565b50505092915050565b6000604082840312156106dd57600080fd5b6106e7604061098a565b905060006106f58484610666565b825250602061070684848301610712565b60208301525092915050565b803561067181610af7565b60006020828403121561072f57600080fd5b600061073b8484610666565b949350505050565b60008060006080848603121561075857600080fd5b60006107648686610666565b9350506020610775868287016106cb565b925050606084013567ffffffffffffffff81111561079257600080fd5b61079e86828701610677565b9150509250925092565b600080604083850312156107bb57600080fd5b60006107c78585610666565b92505060206107d885828601610712565b9150509250929050565b6107f36107ee82610a0f565b610a59565b82525050565b6107f36107ee82610a34565b6107f36107ee82610a59565b600061081c826109f7565b6108268185610479565b9350610836818560208601610a8c565b9290920192915050565b6107f381610a75565b6000610854826109f7565b61085e81856109fb565b935061086e818560208601610a8c565b61087781610ab8565b9093019392505050565b6107f381610a59565b60006108968284610805565b50602001919050565b60006108ab8286610811565b91506108b782856107f9565b6002820191506108c78284610811565b95945050505050565b60006108dc8289610811565b91506108e882886107f9565b6002820191506108f88287610811565b915061090482866107f9565b6002820191506109148285610811565b915061092082846107e2565b506001019695505050505050565b602081016106718284610840565b6020808252810161094d8184610849565b9392505050565b602081016106718284610881565b606081016109708286610881565b61097d6020830185610881565b61073b6040830184610881565b60405181810167ffffffffffffffff811182821017156109a957600080fd5b604052919050565b600067ffffffffffffffff8211156109c857600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b90815260200190565b600061067182610a5c565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600061067182610a04565b82818337506000910152565b60005b83811015610aa7578181015183820152602001610a8f565b8381111561033b5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b610ae981610a04565b8114610af457600080fd5b50565b610ae981610a5956fea365627a7a72315820f17bdc5ed05ad109cccb62f91f52d7a2891d9e89c08501fee69490f303e10ffb6c6578706572696d656e74616cf564736f6c63430005100040",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806315c14a4a146100515780632137c0e51461006f5780638b4187131461008f578063b33b9cc0146100a4575b600080fd5b6100596100b7565b604051610066919061092e565b60405180910390f35b61008261007d3660046107a8565b6100d3565b6040516100669190610954565b6100a261009d366004610743565b6100f0565b005b6100826100b236600461071d565b61022a565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600160209081526000928352604080842090915290825290205481565b60005433906101599073ffffffffffffffffffffffffffffffffffffffff1682147f4f6e6c79446f6c6f6d6974654d617267696e00000000000000000000000000007f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e008461023c565b60008061016584610341565b91509150846000015173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f4c3c182d38f9efecd4bc09ba9ff16cf39e0b4c71b7f0286d0306f9ef91a5a6a8876020015185856040516101d293929190610962565b60405180910390a3845173ffffffffffffffffffffffffffffffffffffffff90811660009081526001602090815260408083209882015183529781528782209490945596168652600290915292909320919091555050565b60026020526000908152604090205481565b8361033b5761024a836103a4565b7f3a20000000000000000000000000000000000000000000000000000000000000610274846103a4565b7f203c00000000000000000000000000000000000000000000000000000000000061029e8561047e565b6040516102d49594939291907f3e00000000000000000000000000000000000000000000000000000000000000906020016108d0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526103329160040161093c565b60405180910390fd5b50505050565b60008061039383516040147f5465737443616c6c6565000000000000000000000000000000000000000000007f43616c6c206461746120696e76616c6964206c656e67746800000000000000006105f5565b505060208101516040820151915091565b606080826040516020016103b8919061088a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156104615781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061042457fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561045c5760010181529050610479565b6103eb565b5060408051600080825260208201909252905b509150505b919050565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b816000815181106104ca57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b8160018151811061050b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156104745760028102610556600f8516610644565b83826029038151811061056557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c93506105a7600f8516610644565b8382602803815181106105b657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c9160010161053d565b8261063f57610603826103a4565b7f3a2000000000000000000000000000000000000000000000000000000000000061062d836103a4565b6040516020016102d49392919061089f565b505050565b6000600a82101561065c57506030810160f81b610479565b5060570160f81b90565b803561067181610ae0565b92915050565b600082601f83011261068857600080fd5b813561069b610696826109b1565b61098a565b915080825260208301602083018583830111156106b757600080fd5b6106c2838284610a80565b50505092915050565b6000604082840312156106dd57600080fd5b6106e7604061098a565b905060006106f58484610666565b825250602061070684848301610712565b60208301525092915050565b803561067181610af7565b60006020828403121561072f57600080fd5b600061073b8484610666565b949350505050565b60008060006080848603121561075857600080fd5b60006107648686610666565b9350506020610775868287016106cb565b925050606084013567ffffffffffffffff81111561079257600080fd5b61079e86828701610677565b9150509250925092565b600080604083850312156107bb57600080fd5b60006107c78585610666565b92505060206107d885828601610712565b9150509250929050565b6107f36107ee82610a0f565b610a59565b82525050565b6107f36107ee82610a34565b6107f36107ee82610a59565b600061081c826109f7565b6108268185610479565b9350610836818560208601610a8c565b9290920192915050565b6107f381610a75565b6000610854826109f7565b61085e81856109fb565b935061086e818560208601610a8c565b61087781610ab8565b9093019392505050565b6107f381610a59565b60006108968284610805565b50602001919050565b60006108ab8286610811565b91506108b782856107f9565b6002820191506108c78284610811565b95945050505050565b60006108dc8289610811565b91506108e882886107f9565b6002820191506108f88287610811565b915061090482866107f9565b6002820191506109148285610811565b915061092082846107e2565b506001019695505050505050565b602081016106718284610840565b6020808252810161094d8184610849565b9392505050565b602081016106718284610881565b606081016109708286610881565b61097d6020830185610881565b61073b6040830184610881565b60405181810167ffffffffffffffff811182821017156109a957600080fd5b604052919050565b600067ffffffffffffffff8211156109c857600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b90815260200190565b600061067182610a5c565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600061067182610a04565b82818337506000910152565b60005b83811015610aa7578181015183820152602001610a8f565b8381111561033b5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b610ae981610a04565b8114610af457600080fd5b50565b610ae981610a5956fea365627a7a72315820f17bdc5ed05ad109cccb62f91f52d7a2891d9e89c08501fee69490f303e10ffb6c6578706572696d656e74616cf564736f6c63430005100040",
  "sourceMap": "1058:1976:113:-;;;1711:114;8:9:-1;5:2;;;30:1;27;20:12;5:2;1711:114:113;;;;;;;;;;;;;;;;;;;;;1302:15:6;:50;;-1:-1:-1;;;;;;1302:50:6;-1:-1:-1;;;;;1302:50:6;;;;;;;;;;1058:1976:113;;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;;;1058:1976:113;;;;;;",
  "deployedSourceMap": "1058:1976:113:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1058:1976:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1130:38:6;;;:::i;:::-;;;;;;;;;;;;;;;;1515:68:113;;;;;;;;;:::i;:::-;;;;;;;;1883:515;;;;;;;;;:::i;:::-;;1612:46;;;;;;;;;:::i;1130:38:6:-;;;;;;:::o;1515:68:113:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;1883:515::-;1505:15:6;;2041:10:113;;1462:153:6;;1505:15;;1488:33;;1535:4;1462:153;2041:10:113;1462:12:6;:153::i;:::-;2081:13:113;2108;2134:15;2144:4;2134:9;:15::i;:::-;2067:82;;;;2205:7;:13;;;2165:129;;2185:6;2165:129;;;2232:7;:14;;;2260:5;2279;2165:129;;;;;;;;;;;;;;;;;2317:13;;2305:26;;;;;;;;:11;:26;;;;;;;;2332:14;;;;2305:42;;;;;;;;:50;;;;2365:18;;;;:10;:18;;;;;;;:26;;;;-1:-1:-1;;1883:515:113:o;1612:46::-;;;;;;;;;;;;;:::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;2456:576:113:-;2567:7;2588;2620:111;2646:4;:11;2661:2;2646:17;2677:4;2620:111;:12;:111::i;:::-;-1:-1:-1;;2904:2:113;2894:13;;2888:20;2946:2;2936:13;;2930:20;2456:576;;;:::o;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;;;;;;;;;;;;7301:19;;;6359:968;;;;:::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;;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;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;;;57:78;;;;;143:440;;244:3;237:4;229:6;225:17;221:27;211:2;;262:1;259;252:12;211:2;299:6;286:20;321:64;336:48;377:6;336:48;;;321:64;;;312:73;;405:6;398:5;391:21;441:4;433:6;429:17;474:4;467:5;463:16;509:3;500:6;495:3;491:16;488:25;485:2;;;526:1;523;516:12;485:2;536:41;570:6;565:3;560;536:41;;;204:379;;;;;;;;617:468;;729:4;717:9;712:3;708:19;704:30;701:2;;;747:1;744;737:12;701:2;765:20;780:4;765:20;;;756:29;-1:-1;836:1;868:49;913:3;893:9;868:49;;;843:75;;-1:-1;981:2;1014:49;1059:3;1035:22;;;1014:49;;;1007:4;1000:5;996:16;989:75;939:136;695:390;;;;;1092:130;1159:20;;1184:33;1159:20;1184:33;;1229:241;;1333:2;1321:9;1312:7;1308:23;1304:32;1301:2;;;1349:1;1346;1339:12;1301:2;1384:1;1401:53;1446:7;1426:9;1401:53;;;1391:63;1295:175;-1:-1;;;;1295:175;1477:642;;;;1647:3;1635:9;1626:7;1622:23;1618:33;1615:2;;;1664:1;1661;1654:12;1615:2;1699:1;1716:53;1761:7;1741:9;1716:53;;;1706:63;;1678:97;1806:2;1824:76;1892:7;1883:6;1872:9;1868:22;1824:76;;;1814:86;;1785:121;1965:2;1954:9;1950:18;1937:32;1989:18;1981:6;1978:30;1975:2;;;2021:1;2018;2011:12;1975:2;2041:62;2095:7;2086:6;2075:9;2071:22;2041:62;;;2031:72;;1916:193;1609:510;;;;;;2126:366;;;2247:2;2235:9;2226:7;2222:23;2218:32;2215:2;;;2263:1;2260;2253:12;2215:2;2298:1;2315:53;2360:7;2340:9;2315:53;;;2305:63;;2277:97;2405:2;2423:53;2468:7;2459:6;2448:9;2444:22;2423:53;;;2413:63;;2384:98;2209:283;;;;;;2499:148;2598:43;2617:23;2634:5;2617:23;;;2598:43;;;2593:3;2586:56;2580:67;;;2654:148;2753:43;2772:23;2789:5;2772:23;;2809:152;2910:45;2930:24;2948:5;2930:24;;2968:356;;3096:38;3128:5;3096:38;;;3146:88;3227:6;3222:3;3146:88;;;3139:95;;3239:52;3284:6;3279:3;3272:4;3265:5;3261:16;3239:52;;;3303:16;;;;;3076:248;-1:-1;;3076:248;3331:176;3439:62;3495:5;3439:62;;3514:347;;3626:39;3659:5;3626:39;;;3677:71;3741:6;3736:3;3677:71;;;3670:78;;3753:52;3798:6;3793:3;3786:4;3779:5;3775:16;3753:52;;;3826:29;3848:6;3826:29;;;3817:39;;;;3606:255;-1:-1;;;3606:255;3868:113;3951:24;3969:5;3951:24;;3988:244;;4107:75;4178:3;4169:6;4107:75;;;-1:-1;4204:2;4195:12;;4095:137;-1:-1;4095:137;4239:553;;4455:93;4544:3;4535:6;4455:93;;;4448:100;;4559:73;4628:3;4619:6;4559:73;;;4654:1;4649:3;4645:11;4638:18;;4674:93;4763:3;4754:6;4674:93;;;4667:100;4436:356;-1:-1;;;;;4436:356;4799:978;;5113:93;5202:3;5193:6;5113:93;;;5106:100;;5217:73;5286:3;5277:6;5217:73;;;5312:1;5307:3;5303:11;5296:18;;5332:93;5421:3;5412:6;5332:93;;;5325:100;;5436:73;5505:3;5496:6;5436:73;;;5531:1;5526:3;5522:11;5515:18;;5551:93;5640:3;5631:6;5551:93;;;5544:100;;5655:73;5724:3;5715:6;5655:73;;;-1:-1;5750:1;5741:11;;5094:683;-1:-1;;;;;;5094:683;5784:263;5927:2;5912:18;;5941:96;5916:9;6010:6;5941:96;;6054:301;6192:2;6206:47;;;6177:18;;6267:78;6177:18;6331:6;6267:78;;;6259:86;6163:192;-1:-1;;;6163:192;6362:213;6480:2;6465:18;;6494:71;6469:9;6538:6;6494:71;;6582:435;6756:2;6741:18;;6770:71;6745:9;6814:6;6770:71;;;6852:72;6920:2;6909:9;6905:18;6896:6;6852:72;;;6935;7003:2;6992:9;6988:18;6979:6;6935:72;;7024:256;7086:2;7080:9;7112:17;;;7187:18;7172:34;;7208:22;;;7169:62;7166:2;;;7244:1;7241;7234:12;7166:2;7260;7253:22;7064:216;;-1:-1;7064:216;7287:321;;7430:18;7422:6;7419:30;7416:2;;;7462:1;7459;7452:12;7416:2;-1:-1;7593:4;7529;7506:17;;;;7525:9;7502:33;7583:15;;7353:255;7615:121;7702:12;;7673:63;8026:163;8129:19;;;8178:4;8169:14;;8122:67;8197:91;;8259:24;8277:5;8259:24;;8295:144;8367:66;8356:78;;8339:100;8446:144;8518:66;8507:78;;8490:100;8597:72;8659:5;8642:27;8676:121;8749:42;8738:54;;8721:76;8883:171;;8987:62;9043:5;8987:62;;9202:145;9283:6;9278:3;9273;9260:30;-1:-1;9339:1;9321:16;;9314:27;9253:94;9356:268;9421:1;9428:101;9442:6;9439:1;9436:13;9428:101;;;9509:11;;;9503:18;9490:11;;;9483:39;9464:2;9457:10;9428:101;;;9544:6;9541:1;9538:13;9535:2;;;-1:-1;;9609:1;9591:16;;9584:27;9405:219;9873:97;9961:2;9941:14;9957:7;9937:28;;9921:49;9978:117;10047:24;10065:5;10047:24;;;10040:5;10037:35;10027:2;;10086:1;10083;10076:12;10027:2;10021:74;;10102:117;10171:24;10189:5;10171:24;",
  "source": "/*\n\n    Copyright 2019 dYdX Trading Inc.\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 { OnlyDolomiteMargin } from \"../external/helpers/OnlyDolomiteMargin.sol\";\nimport { ICallee } from \"../protocol/interfaces/ICallee.sol\";\nimport { IAutoTrader } from \"../protocol/interfaces/IAutoTrader.sol\";\nimport { Account } from \"../protocol/lib/Account.sol\";\nimport { Require } from \"../protocol/lib/Require.sol\";\n\n\n/**\n * @title TestCallee\n * @author dYdX\n *\n * ICallee for testing\n */\ncontract TestCallee is\n    ICallee,\n    OnlyDolomiteMargin\n{\n    // ============ Constants ============\n\n    bytes32 private constant FILE = \"TestCallee\";\n\n    // ============ Events ============\n\n    event Called(\n        address indexed sender,\n        address indexed accountOwner,\n        uint256 accountNumber,\n        uint256 accountData,\n        uint256 senderData\n    );\n\n    // ============ Storage ============\n\n    // owner => number => data\n    mapping (address => mapping (uint256 => uint256)) public accountData;\n\n    // sender => data\n    mapping (address => uint256) public senderData;\n\n    // ============ Constructor ============\n\n    constructor(\n        address dolomiteMargin\n    )\n        public\n        OnlyDolomiteMargin(dolomiteMargin)\n    {}\n\n    // ============ ICallee Functions ============\n\n    function callFunction(\n        address sender,\n        Account.Info memory account,\n        bytes memory data\n    )\n        public\n        onlyDolomiteMargin(msg.sender)\n    {\n        (\n            uint256 aData,\n            uint256 sData\n        ) = parseData(data);\n\n        emit Called(\n            sender,\n            account.owner,\n            account.number,\n            aData,\n            sData\n        );\n\n        accountData[account.owner][account.number] = aData;\n        senderData[sender] = sData;\n    }\n\n    // ============ Private Functions ============\n\n    function parseData(\n        bytes memory data\n    )\n        private\n        pure\n        returns (\n            uint256,\n            uint256\n        )\n    {\n        Require.that(\n            data.length == 64,\n            FILE,\n            \"Call data invalid length\"\n        );\n\n        uint256 aData;\n        uint256 sData;\n\n        /* solium-disable-next-line security/no-inline-assembly */\n        assembly {\n            aData := mload(add(data, 32))\n            sData := mload(add(data, 64))\n        }\n\n        return (\n            aData,\n            sData\n        );\n    }\n}\n",
  "sourcePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TestCallee.sol",
  "ast": {
    "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TestCallee.sol",
    "exportedSymbols": {
      "TestCallee": [
        32941
      ]
    },
    "id": 32942,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 32811,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".7"
        ],
        "nodeType": "PragmaDirective",
        "src": "603:23:113"
      },
      {
        "id": 32812,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "627:33:113"
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol",
        "file": "../external/helpers/OnlyDolomiteMargin.sol",
        "id": 32814,
        "nodeType": "ImportDirective",
        "scope": 32942,
        "sourceUnit": 3067,
        "src": "662:80:113",
        "symbolAliases": [
          {
            "foreign": 32813,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/ICallee.sol",
        "file": "../protocol/interfaces/ICallee.sol",
        "id": 32816,
        "nodeType": "ImportDirective",
        "scope": 32942,
        "sourceUnit": 24074,
        "src": "743:61:113",
        "symbolAliases": [
          {
            "foreign": 32815,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IAutoTrader.sol",
        "file": "../protocol/interfaces/IAutoTrader.sol",
        "id": 32818,
        "nodeType": "ImportDirective",
        "scope": 32942,
        "sourceUnit": 24059,
        "src": "805:69:113",
        "symbolAliases": [
          {
            "foreign": 32817,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Account.sol",
        "file": "../protocol/lib/Account.sol",
        "id": 32820,
        "nodeType": "ImportDirective",
        "scope": 32942,
        "sourceUnit": 24886,
        "src": "875:54:113",
        "symbolAliases": [
          {
            "foreign": 32819,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Require.sol",
        "file": "../protocol/lib/Require.sol",
        "id": 32822,
        "nodeType": "ImportDirective",
        "scope": 32942,
        "sourceUnit": 28453,
        "src": "930:54:113",
        "symbolAliases": [
          {
            "foreign": 32821,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 32823,
              "name": "ICallee",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24073,
              "src": "1085:7:113",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICallee_$24073",
                "typeString": "contract ICallee"
              }
            },
            "id": 32824,
            "nodeType": "InheritanceSpecifier",
            "src": "1085:7:113"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 32825,
              "name": "OnlyDolomiteMargin",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3066,
              "src": "1098:18:113",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OnlyDolomiteMargin_$3066",
                "typeString": "contract OnlyDolomiteMargin"
              }
            },
            "id": 32826,
            "nodeType": "InheritanceSpecifier",
            "src": "1098:18:113"
          }
        ],
        "contractDependencies": [
          3066,
          24073
        ],
        "contractKind": "contract",
        "documentation": "@title TestCallee\n@author dYdX\n * ICallee for testing",
        "fullyImplemented": true,
        "id": 32941,
        "linearizedBaseContracts": [
          32941,
          3066,
          24073
        ],
        "name": "TestCallee",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 32829,
            "name": "FILE",
            "nodeType": "VariableDeclaration",
            "scope": 32941,
            "src": "1167:44:113",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 32827,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1167:7:113",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5465737443616c6c6565",
              "id": 32828,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1199:12:113",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b8fe05e474259c1dc5079042a8c3dff9b6b2c67643868693313263e900c1db6d",
                "typeString": "literal_string \"TestCallee\""
              },
              "value": "TestCallee"
            },
            "visibility": "private"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 32841,
            "name": "Called",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 32840,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32831,
                  "indexed": true,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 32841,
                  "src": "1281:22:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32830,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1281:7:113",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32833,
                  "indexed": true,
                  "name": "accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 32841,
                  "src": "1313:28:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32832,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1313:7:113",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32835,
                  "indexed": false,
                  "name": "accountNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 32841,
                  "src": "1351:21:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32834,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1351:7:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32837,
                  "indexed": false,
                  "name": "accountData",
                  "nodeType": "VariableDeclaration",
                  "scope": 32841,
                  "src": "1382:19:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32836,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1382:7:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32839,
                  "indexed": false,
                  "name": "senderData",
                  "nodeType": "VariableDeclaration",
                  "scope": 32841,
                  "src": "1411:18:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32838,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1411:7:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1271:164:113"
            },
            "src": "1259:177:113"
          },
          {
            "constant": false,
            "id": 32847,
            "name": "accountData",
            "nodeType": "VariableDeclaration",
            "scope": 32941,
            "src": "1515:68:113",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(uint256 => uint256))"
            },
            "typeName": {
              "id": 32846,
              "keyType": {
                "id": 32842,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1524:7:113",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1515:49:113",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(uint256 => uint256))"
              },
              "valueType": {
                "id": 32845,
                "keyType": {
                  "id": 32843,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1544:7:113",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "nodeType": "Mapping",
                "src": "1535:28:113",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                  "typeString": "mapping(uint256 => uint256)"
                },
                "valueType": {
                  "id": 32844,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1555:7:113",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 32851,
            "name": "senderData",
            "nodeType": "VariableDeclaration",
            "scope": 32941,
            "src": "1612:46:113",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 32850,
              "keyType": {
                "id": 32848,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1621:7:113",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1612:28:113",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 32849,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1632:7:113",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 32859,
              "nodeType": "Block",
              "src": "1823:2:113",
              "statements": []
            },
            "documentation": null,
            "id": 32860,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 32856,
                    "name": "dolomiteMargin",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32853,
                    "src": "1803:14:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 32857,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 32855,
                  "name": "OnlyDolomiteMargin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3066,
                  "src": "1784:18:113",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_OnlyDolomiteMargin_$3066_$",
                    "typeString": "type(contract OnlyDolomiteMargin)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1784:34:113"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 32854,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32853,
                  "name": "dolomiteMargin",
                  "nodeType": "VariableDeclaration",
                  "scope": 32860,
                  "src": "1732:22:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32852,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1732:7:113",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1722:38:113"
            },
            "returnParameters": {
              "id": 32858,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1823:0:113"
            },
            "scope": 32941,
            "src": "1711:114:113",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 32907,
              "nodeType": "Block",
              "src": "2057:341:113",
              "statements": [
                {
                  "assignments": [
                    32874,
                    32876
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32874,
                      "name": "aData",
                      "nodeType": "VariableDeclaration",
                      "scope": 32907,
                      "src": "2081:13:113",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32873,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2081:7:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 32876,
                      "name": "sData",
                      "nodeType": "VariableDeclaration",
                      "scope": 32907,
                      "src": "2108:13:113",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32875,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2108:7:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32880,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 32878,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32866,
                        "src": "2144:4:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 32877,
                      "name": "parseData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32940,
                      "src": "2134:9:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (bytes memory) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 32879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2134:15:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2067:82:113"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 32882,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32862,
                        "src": "2185:6:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 32883,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32864,
                          "src": "2205:7:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                            "typeString": "struct Account.Info memory"
                          }
                        },
                        "id": 32884,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24848,
                        "src": "2205:13:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 32885,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32864,
                          "src": "2232:7:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                            "typeString": "struct Account.Info memory"
                          }
                        },
                        "id": 32886,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24850,
                        "src": "2232:14:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 32887,
                        "name": "aData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32874,
                        "src": "2260:5:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 32888,
                        "name": "sData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32876,
                        "src": "2279:5:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 32881,
                      "name": "Called",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32841,
                      "src": "2165:6:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 32889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2165:129:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32890,
                  "nodeType": "EmitStatement",
                  "src": "2160:134:113"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 32891,
                          "name": "accountData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32847,
                          "src": "2305:11:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(uint256 => uint256))"
                          }
                        },
                        "id": 32896,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32892,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32864,
                            "src": "2317:7:113",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                              "typeString": "struct Account.Info memory"
                            }
                          },
                          "id": 32893,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24848,
                          "src": "2317:13:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2305:26:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 32897,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 32894,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32864,
                          "src": "2332:7:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                            "typeString": "struct Account.Info memory"
                          }
                        },
                        "id": 32895,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24850,
                        "src": "2332:14:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2305:42:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32898,
                      "name": "aData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32874,
                      "src": "2350:5:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2305:50:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32900,
                  "nodeType": "ExpressionStatement",
                  "src": "2305:50:113"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 32901,
                        "name": "senderData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32851,
                        "src": "2365:10:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 32903,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 32902,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32862,
                        "src": "2376:6:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2365:18:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32904,
                      "name": "sData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32876,
                      "src": "2386:5:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2365:26:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32906,
                  "nodeType": "ExpressionStatement",
                  "src": "2365:26:113"
                }
              ]
            },
            "documentation": null,
            "id": 32908,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 32869,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38107,
                      "src": "2041:3:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 32870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "2041:10:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 32871,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 32868,
                  "name": "onlyDolomiteMargin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3028,
                  "src": "2022:18:113",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2022:30:113"
              }
            ],
            "name": "callFunction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 32867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32862,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 32908,
                  "src": "1914:14:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32861,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1914:7:113",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32864,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 32908,
                  "src": "1938:27:113",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32863,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "1938:12:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32866,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 32908,
                  "src": "1975:17:113",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 32865,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1975:5:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1904:94:113"
            },
            "returnParameters": {
              "id": 32872,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2057:0:113"
            },
            "scope": 32941,
            "src": "1883:515:113",
            "stateMutability": "nonpayable",
            "superFunction": 24072,
            "visibility": "public"
          },
          {
            "body": {
              "id": 32939,
              "nodeType": "Block",
              "src": "2610:422:113",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 32923,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32920,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32910,
                            "src": "2646:4:113",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 32921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2646:11:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3634",
                          "id": 32922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2661:2:113",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_64_by_1",
                            "typeString": "int_const 64"
                          },
                          "value": "64"
                        },
                        "src": "2646:17:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 32924,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32829,
                        "src": "2677:4:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43616c6c206461746120696e76616c6964206c656e677468",
                        "id": 32925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2695:26:113",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_38c11ee85530891107e7cade2820ce4b8a852990a7a34a6436f79aa9731c54a3",
                          "typeString": "literal_string \"Call data invalid length\""
                        },
                        "value": "Call data invalid length"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_38c11ee85530891107e7cade2820ce4b8a852990a7a34a6436f79aa9731c54a3",
                          "typeString": "literal_string \"Call data invalid length\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 32917,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "2620:7:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 32919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "2620:12:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 32926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2620:111:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32927,
                  "nodeType": "ExpressionStatement",
                  "src": "2620:111:113"
                },
                {
                  "assignments": [
                    32929
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32929,
                      "name": "aData",
                      "nodeType": "VariableDeclaration",
                      "scope": 32939,
                      "src": "2742:13:113",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32928,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2742:7:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32930,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2742:13:113"
                },
                {
                  "assignments": [
                    32932
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32932,
                      "name": "sData",
                      "nodeType": "VariableDeclaration",
                      "scope": 32939,
                      "src": "2765:13:113",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32931,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2765:7:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32933,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2765:13:113"
                },
                {
                  "externalReferences": [
                    {
                      "aData": {
                        "declaration": 32929,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2879:5:113",
                        "valueSize": 1
                      }
                    },
                    {
                      "data": {
                        "declaration": 32910,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2898:4:113",
                        "valueSize": 1
                      }
                    },
                    {
                      "sData": {
                        "declaration": 32932,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2921:5:113",
                        "valueSize": 1
                      }
                    },
                    {
                      "data": {
                        "declaration": 32910,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2940:4:113",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 32934,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    aData := mload(add(data, 32))\n    sData := mload(add(data, 64))\n}",
                  "src": "2856:104:113"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 32935,
                        "name": "aData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32929,
                        "src": "2991:5:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 32936,
                        "name": "sData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32932,
                        "src": "3010:5:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 32937,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "2977:48:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 32916,
                  "id": 32938,
                  "nodeType": "Return",
                  "src": "2970:55:113"
                }
              ]
            },
            "documentation": null,
            "id": 32940,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "parseData",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 32911,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32910,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 32940,
                  "src": "2484:17:113",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 32909,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2484:5:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2474:33:113"
            },
            "returnParameters": {
              "id": 32916,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32913,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32940,
                  "src": "2567:7:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32912,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2567:7:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32915,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32940,
                  "src": "2588:7:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32914,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2588:7:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2553:52:113"
            },
            "scope": 32941,
            "src": "2456:576:113",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 32942,
        "src": "1058:1976:113"
      }
    ],
    "src": "603:2432:113"
  },
  "legacyAST": {
    "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/testing/TestCallee.sol",
    "exportedSymbols": {
      "TestCallee": [
        32941
      ]
    },
    "id": 32942,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 32811,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".7"
        ],
        "nodeType": "PragmaDirective",
        "src": "603:23:113"
      },
      {
        "id": 32812,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "627:33:113"
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol",
        "file": "../external/helpers/OnlyDolomiteMargin.sol",
        "id": 32814,
        "nodeType": "ImportDirective",
        "scope": 32942,
        "sourceUnit": 3067,
        "src": "662:80:113",
        "symbolAliases": [
          {
            "foreign": 32813,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/ICallee.sol",
        "file": "../protocol/interfaces/ICallee.sol",
        "id": 32816,
        "nodeType": "ImportDirective",
        "scope": 32942,
        "sourceUnit": 24074,
        "src": "743:61:113",
        "symbolAliases": [
          {
            "foreign": 32815,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/interfaces/IAutoTrader.sol",
        "file": "../protocol/interfaces/IAutoTrader.sol",
        "id": 32818,
        "nodeType": "ImportDirective",
        "scope": 32942,
        "sourceUnit": 24059,
        "src": "805:69:113",
        "symbolAliases": [
          {
            "foreign": 32817,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Account.sol",
        "file": "../protocol/lib/Account.sol",
        "id": 32820,
        "nodeType": "ImportDirective",
        "scope": 32942,
        "sourceUnit": 24886,
        "src": "875:54:113",
        "symbolAliases": [
          {
            "foreign": 32819,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/cdc218/projects/dolomite/dolomite-protocol-v2/contracts/protocol/lib/Require.sol",
        "file": "../protocol/lib/Require.sol",
        "id": 32822,
        "nodeType": "ImportDirective",
        "scope": 32942,
        "sourceUnit": 28453,
        "src": "930:54:113",
        "symbolAliases": [
          {
            "foreign": 32821,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 32823,
              "name": "ICallee",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24073,
              "src": "1085:7:113",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICallee_$24073",
                "typeString": "contract ICallee"
              }
            },
            "id": 32824,
            "nodeType": "InheritanceSpecifier",
            "src": "1085:7:113"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 32825,
              "name": "OnlyDolomiteMargin",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3066,
              "src": "1098:18:113",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OnlyDolomiteMargin_$3066",
                "typeString": "contract OnlyDolomiteMargin"
              }
            },
            "id": 32826,
            "nodeType": "InheritanceSpecifier",
            "src": "1098:18:113"
          }
        ],
        "contractDependencies": [
          3066,
          24073
        ],
        "contractKind": "contract",
        "documentation": "@title TestCallee\n@author dYdX\n * ICallee for testing",
        "fullyImplemented": true,
        "id": 32941,
        "linearizedBaseContracts": [
          32941,
          3066,
          24073
        ],
        "name": "TestCallee",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 32829,
            "name": "FILE",
            "nodeType": "VariableDeclaration",
            "scope": 32941,
            "src": "1167:44:113",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 32827,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1167:7:113",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "5465737443616c6c6565",
              "id": 32828,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1199:12:113",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b8fe05e474259c1dc5079042a8c3dff9b6b2c67643868693313263e900c1db6d",
                "typeString": "literal_string \"TestCallee\""
              },
              "value": "TestCallee"
            },
            "visibility": "private"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 32841,
            "name": "Called",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 32840,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32831,
                  "indexed": true,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 32841,
                  "src": "1281:22:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32830,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1281:7:113",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32833,
                  "indexed": true,
                  "name": "accountOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 32841,
                  "src": "1313:28:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32832,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1313:7:113",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32835,
                  "indexed": false,
                  "name": "accountNumber",
                  "nodeType": "VariableDeclaration",
                  "scope": 32841,
                  "src": "1351:21:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32834,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1351:7:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32837,
                  "indexed": false,
                  "name": "accountData",
                  "nodeType": "VariableDeclaration",
                  "scope": 32841,
                  "src": "1382:19:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32836,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1382:7:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32839,
                  "indexed": false,
                  "name": "senderData",
                  "nodeType": "VariableDeclaration",
                  "scope": 32841,
                  "src": "1411:18:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32838,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1411:7:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1271:164:113"
            },
            "src": "1259:177:113"
          },
          {
            "constant": false,
            "id": 32847,
            "name": "accountData",
            "nodeType": "VariableDeclaration",
            "scope": 32941,
            "src": "1515:68:113",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(uint256 => uint256))"
            },
            "typeName": {
              "id": 32846,
              "keyType": {
                "id": 32842,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1524:7:113",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1515:49:113",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(uint256 => uint256))"
              },
              "valueType": {
                "id": 32845,
                "keyType": {
                  "id": 32843,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1544:7:113",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "nodeType": "Mapping",
                "src": "1535:28:113",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                  "typeString": "mapping(uint256 => uint256)"
                },
                "valueType": {
                  "id": 32844,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1555:7:113",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 32851,
            "name": "senderData",
            "nodeType": "VariableDeclaration",
            "scope": 32941,
            "src": "1612:46:113",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 32850,
              "keyType": {
                "id": 32848,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1621:7:113",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1612:28:113",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 32849,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1632:7:113",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 32859,
              "nodeType": "Block",
              "src": "1823:2:113",
              "statements": []
            },
            "documentation": null,
            "id": 32860,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 32856,
                    "name": "dolomiteMargin",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32853,
                    "src": "1803:14:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 32857,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 32855,
                  "name": "OnlyDolomiteMargin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3066,
                  "src": "1784:18:113",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_OnlyDolomiteMargin_$3066_$",
                    "typeString": "type(contract OnlyDolomiteMargin)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1784:34:113"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 32854,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32853,
                  "name": "dolomiteMargin",
                  "nodeType": "VariableDeclaration",
                  "scope": 32860,
                  "src": "1732:22:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32852,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1732:7:113",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1722:38:113"
            },
            "returnParameters": {
              "id": 32858,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1823:0:113"
            },
            "scope": 32941,
            "src": "1711:114:113",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 32907,
              "nodeType": "Block",
              "src": "2057:341:113",
              "statements": [
                {
                  "assignments": [
                    32874,
                    32876
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32874,
                      "name": "aData",
                      "nodeType": "VariableDeclaration",
                      "scope": 32907,
                      "src": "2081:13:113",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32873,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2081:7:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 32876,
                      "name": "sData",
                      "nodeType": "VariableDeclaration",
                      "scope": 32907,
                      "src": "2108:13:113",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32875,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2108:7:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32880,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 32878,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32866,
                        "src": "2144:4:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 32877,
                      "name": "parseData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32940,
                      "src": "2134:9:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (bytes memory) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 32879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2134:15:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2067:82:113"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 32882,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32862,
                        "src": "2185:6:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 32883,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32864,
                          "src": "2205:7:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                            "typeString": "struct Account.Info memory"
                          }
                        },
                        "id": 32884,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24848,
                        "src": "2205:13:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 32885,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32864,
                          "src": "2232:7:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                            "typeString": "struct Account.Info memory"
                          }
                        },
                        "id": 32886,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24850,
                        "src": "2232:14:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 32887,
                        "name": "aData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32874,
                        "src": "2260:5:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 32888,
                        "name": "sData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32876,
                        "src": "2279:5:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 32881,
                      "name": "Called",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32841,
                      "src": "2165:6:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 32889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2165:129:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32890,
                  "nodeType": "EmitStatement",
                  "src": "2160:134:113"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 32891,
                          "name": "accountData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32847,
                          "src": "2305:11:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(uint256 => uint256))"
                          }
                        },
                        "id": 32896,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32892,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32864,
                            "src": "2317:7:113",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                              "typeString": "struct Account.Info memory"
                            }
                          },
                          "id": 32893,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 24848,
                          "src": "2317:13:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2305:26:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 32897,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 32894,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32864,
                          "src": "2332:7:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                            "typeString": "struct Account.Info memory"
                          }
                        },
                        "id": 32895,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24850,
                        "src": "2332:14:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2305:42:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32898,
                      "name": "aData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32874,
                      "src": "2350:5:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2305:50:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32900,
                  "nodeType": "ExpressionStatement",
                  "src": "2305:50:113"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 32905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 32901,
                        "name": "senderData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32851,
                        "src": "2365:10:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 32903,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 32902,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32862,
                        "src": "2376:6:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2365:18:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 32904,
                      "name": "sData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32876,
                      "src": "2386:5:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2365:26:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32906,
                  "nodeType": "ExpressionStatement",
                  "src": "2365:26:113"
                }
              ]
            },
            "documentation": null,
            "id": 32908,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 32869,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38107,
                      "src": "2041:3:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 32870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "2041:10:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 32871,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 32868,
                  "name": "onlyDolomiteMargin",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3028,
                  "src": "2022:18:113",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2022:30:113"
              }
            ],
            "name": "callFunction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 32867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32862,
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 32908,
                  "src": "1914:14:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32861,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1914:7:113",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32864,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 32908,
                  "src": "1938:27:113",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$24851_memory_ptr",
                    "typeString": "struct Account.Info"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 32863,
                    "name": "Account.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 24851,
                    "src": "1938:12:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$24851_storage_ptr",
                      "typeString": "struct Account.Info"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32866,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 32908,
                  "src": "1975:17:113",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 32865,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1975:5:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1904:94:113"
            },
            "returnParameters": {
              "id": 32872,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2057:0:113"
            },
            "scope": 32941,
            "src": "1883:515:113",
            "stateMutability": "nonpayable",
            "superFunction": 24072,
            "visibility": "public"
          },
          {
            "body": {
              "id": 32939,
              "nodeType": "Block",
              "src": "2610:422:113",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 32923,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 32920,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32910,
                            "src": "2646:4:113",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 32921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2646:11:113",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3634",
                          "id": 32922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2661:2:113",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_64_by_1",
                            "typeString": "int_const 64"
                          },
                          "value": "64"
                        },
                        "src": "2646:17:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 32924,
                        "name": "FILE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32829,
                        "src": "2677:4:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43616c6c206461746120696e76616c6964206c656e677468",
                        "id": 32925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2695:26:113",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_38c11ee85530891107e7cade2820ce4b8a852990a7a34a6436f79aa9731c54a3",
                          "typeString": "literal_string \"Call data invalid length\""
                        },
                        "value": "Call data invalid length"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_38c11ee85530891107e7cade2820ce4b8a852990a7a34a6436f79aa9731c54a3",
                          "typeString": "literal_string \"Call data invalid length\""
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 32917,
                        "name": "Require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28452,
                        "src": "2620:7:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Require_$28452_$",
                          "typeString": "type(library Require)"
                        }
                      },
                      "id": 32919,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "that",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27816,
                      "src": "2620:12:113",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bool,bytes32,bytes32) pure"
                      }
                    },
                    "id": 32926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2620:111:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32927,
                  "nodeType": "ExpressionStatement",
                  "src": "2620:111:113"
                },
                {
                  "assignments": [
                    32929
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32929,
                      "name": "aData",
                      "nodeType": "VariableDeclaration",
                      "scope": 32939,
                      "src": "2742:13:113",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32928,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2742:7:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32930,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2742:13:113"
                },
                {
                  "assignments": [
                    32932
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32932,
                      "name": "sData",
                      "nodeType": "VariableDeclaration",
                      "scope": 32939,
                      "src": "2765:13:113",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32931,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2765:7:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 32933,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2765:13:113"
                },
                {
                  "externalReferences": [
                    {
                      "aData": {
                        "declaration": 32929,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2879:5:113",
                        "valueSize": 1
                      }
                    },
                    {
                      "data": {
                        "declaration": 32910,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2898:4:113",
                        "valueSize": 1
                      }
                    },
                    {
                      "sData": {
                        "declaration": 32932,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2921:5:113",
                        "valueSize": 1
                      }
                    },
                    {
                      "data": {
                        "declaration": 32910,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2940:4:113",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 32934,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    aData := mload(add(data, 32))\n    sData := mload(add(data, 64))\n}",
                  "src": "2856:104:113"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 32935,
                        "name": "aData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32929,
                        "src": "2991:5:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 32936,
                        "name": "sData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32932,
                        "src": "3010:5:113",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 32937,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "2977:48:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 32916,
                  "id": 32938,
                  "nodeType": "Return",
                  "src": "2970:55:113"
                }
              ]
            },
            "documentation": null,
            "id": 32940,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "parseData",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 32911,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32910,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 32940,
                  "src": "2484:17:113",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 32909,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2484:5:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2474:33:113"
            },
            "returnParameters": {
              "id": 32916,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32913,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32940,
                  "src": "2567:7:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32912,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2567:7:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32915,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32940,
                  "src": "2588:7:113",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32914,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2588:7:113",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2553:52:113"
            },
            "scope": 32941,
            "src": "2456:576:113",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 32942,
        "src": "1058:1976:113"
      }
    ],
    "src": "603:2432:113"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.23",
  "updatedAt": "2026-03-02T16:38:29.047Z",
  "devdoc": {
    "author": "dYdX * ICallee for testing",
    "methods": {},
    "title": "TestCallee"
  },
  "userdoc": {
    "methods": {}
  }
}