{
  "contractName": "TokenPriceDataFeed",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "startIndex",
          "type": "uint256"
        },
        {
          "name": "endIndex",
          "type": "uint256"
        }
      ],
      "name": "medianizeByIndices",
      "outputs": [
        {
          "name": "medianValue",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_date",
          "type": "uint256"
        }
      ],
      "name": "dateHasResult",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "dataSource",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token2",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "exchangeAdapter",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "resultByIndex",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "latestResult",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "latestResultDate",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_result",
          "type": "bytes32"
        },
        {
          "name": "_date",
          "type": "uint256"
        }
      ],
      "name": "setResult",
      "outputs": [
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_date",
          "type": "uint256"
        }
      ],
      "name": "resultByDate",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalResults",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "startDate",
          "type": "uint256"
        },
        {
          "name": "endDate",
          "type": "uint256"
        }
      ],
      "name": "medianizeByTimeframe",
      "outputs": [
        {
          "name": "medianValue",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token1",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "indexHasResult",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_result",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_date",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "ResultSet",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token1",
          "type": "address"
        },
        {
          "name": "_token2",
          "type": "address"
        },
        {
          "name": "_exchangeAdapter",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_dataSource",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "logResult",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "viewCurrentResult",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50611ca3806100206000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307acc14b146101015780631a0ba4f2146101545780631b076edc1461019957806325be124e146101f05780632cbcda251461024757806330adb55d1461029e5780636a2ea57e146102ee5780636e4aa4d0146103215780636f1e84981461034c57806371a1c0ae1461037f57806392549bf214610396578063a25fa35c146103e5578063c0a6ab7914610435578063c0c53b8b14610460578063c2605a64146104e3578063c4d66de814610536578063d21220a714610579578063dab21b63146105d0575b600080fd5b34801561010d57600080fd5b506101366004803603810190808035906020019092919080359060200190929190505050610615565b60405180826000191660001916815260200191505060405180910390f35b34801561016057600080fd5b5061017f60048036038101908080359060200190929190505050610780565b604051808215151515815260200191505060405180910390f35b3480156101a557600080fd5b506101ae61079f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101fc57600080fd5b506102056107c5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025357600080fd5b5061025c6107eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102aa57600080fd5b506102c960048036038101908080359060200190929190505050610811565b6040518083600019166000191681526020018281526020019250505060405180910390f35b3480156102fa57600080fd5b506103036108e1565b60405180826000191660001916815260200191505060405180910390f35b34801561032d57600080fd5b5061033661091c565b6040518082815260200191505060405180910390f35b34801561035857600080fd5b50610361610944565b60405180826000191660001916815260200191505060405180910390f35b34801561038b57600080fd5b50610394610abe565b005b3480156103a257600080fd5b506103cf600480360381019080803560001916906020019092919080359060200190929190505050610cf3565b6040518082815260200191505060405180910390f35b3480156103f157600080fd5b5061041060048036038101908080359060200190929190505050610eb1565b6040518083600019166000191681526020018281526020019250505060405180910390f35b34801561044157600080fd5b5061044a610f62565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b506104e1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f72565b005b3480156104ef57600080fd5b5061051860048036038101908080359060200190929190803590602001909291905050506111c1565b60405180826000191660001916815260200191505060405180910390f35b34801561054257600080fd5b50610577600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611476565b005b34801561058557600080fd5b5061058e6116ce565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105dc57600080fd5b506105fb600480360381019080803590602001909291905050506116f4565b604051808215151515815260200191505060405180910390f35b60006060808385111515156106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001807f7374617274496e646578206d757374206265206c657373207468616e206f722081526020017f657175616c20746f20656e64496e64657800000000000000000000000000000081525060400191505060405180910390fd5b600085111515610756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f7374617274496e646578206d7573742062652067726561746572207468616e2081526020017f300000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610760858561177c565b915061076b82611828565b905061077681611a70565b9250505092915050565b6000806035600084815260200190815260200160002054119050919050565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061081d836116f4565b1515610891576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f20726573756c742073657420666f72205f696e646578000000000000000081525060200191505060405180910390fd5b603460006033858154811015156108a457fe5b90600052602060002001548152602001908152602001600020546033848154811015156108cd57fe5b906000526020600020015491509150915091565b60006034600060336108f1610f62565b8154811015156108fd57fe5b9060005260206000200154815260200190815260200160002054905090565b60006033610928610f62565b81548110151561093457fe5b9060005260206000200154905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610a7b57600080fd5b505af1158015610a8f573d6000803e3d6000fd5b505050506040513d6020811015610aa557600080fd5b8101908080519060200190929190505050600102905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b810190808051906020019092919050505090503073ffffffffffffffffffffffffffffffffffffffff166392549bf282600102426040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b81019080805190602001909291905050505050565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f5468652063616c6c6572206973206e6f7420746865206461746120736f75726381526020017f650000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81428111151515610e59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f446174652063616e6e6f7420626520696e20746865206675747572650000000081525060200191505060405180910390fd5b60006033805490501115610e96576033610e71610f62565b815481101515610e7d57fe5b906000526020600020015483111515610e9557600080fd5b5b610ea08484611abc565b610ea8610f62565b91505092915050565b600080610ebd83610780565b1515610f31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f20726573756c742073657420666f72205f6461746500000000000000000081525060200191505060405180910390fd5b6034600084815260200190815260200160002054603560008581526020019081526020016000205491509150915091565b6000600160338054905003905090565b8073ffffffffffffffffffffffffffffffffffffffff1663d6e7444d84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d602081101561106b57600080fd5b810190808051906020019092919050505015156110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f746f6b656e207061697220646f6573206e6f742065786973740000000000000081525060200191505060405180910390fd5b82603760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111bc30611476565b505050565b60008060008060008587101515611266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f737461727444617465206d757374206265206c657373207468616e20656e644481526020017f617465000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016033805490500391505b6000821180156112825750600084145b156112bb578560338381548110151561129757fe5b90600052602060002001541115156112ad578193505b818060019003925050611272565b600084111515611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8660338581548110151561136957fe5b906000526020600020015410151515611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8390505b600081101580156114255750600083145b15611460578660338281548110151561143a57fe5b90600052602060002001541015611452576001810192505b808060019003915050611414565b61146a8385610615565b94505050505092915050565b60008060019054906101000a900460ff16806114965750611495611bbb565b5b806114ad57506000809054906101000a900460ff16155b1515611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f436f6e747261637420696e7374616e63652068617320616c726561647920626581526020017f656e20696e697469616c697a656400000000000000000000000000000000000081525060400191505060405180910390fd5b600060019054906101000a900460ff161590508015611596576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5f64617461536f757263652063616e6e6f74206265206164647265737328302981525060200191505060405180910390fd5b81603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060336000908060018154018082558091505090600182039060005260206000200160009091929091909150555080156116ca5760008060016101000a81548160ff0219169083151502179055505b5050565b603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808211151561176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5f696e646578206d7573742062652067726561746572207468616e203000000081525060200191505060405180910390fd5b81603380549050119050919050565b6060600060606000806001878703019350836040519080825280602002602001820160405280156117bc5781602001602082028038833980820191505090505b509250600091508690505b858111151561181b576033818154811015156117df57fe5b906000526020600020015483838151811015156117f857fe5b9060200190602002018181525050818060010192505080806001019150506117c7565b8294505050505092915050565b6060600080600080600080600061184a60028a51611bcc90919063ffffffff16565b96506000955061186560018a51611bf690919063ffffffff16565b94505b84861015611a615761189660026118888789611c1790919063ffffffff16565b611bcc90919063ffffffff16565b935088848151811015156118a657fe5b90602001906020020151925088858151811015156118c057fe5b9060200190602002015189858151811015156118d857fe5b906020019060200201518a868151811015156118f057fe5b9060200190602002018b8881518110151561190757fe5b906020019060200201828152508281525050508591508590505b848110156119cd5761194a898281518110151561193a57fe5b9060200190602002015184611c38565b156119c057888181518110151561195d57fe5b90602001906020020151898381518110151561197557fe5b906020019060200201518a8481518110151561198d57fe5b9060200190602002018b848151811015156119a457fe5b9060200190602002018281525082815250505081806001019250505b8080600101915050611921565b88858151811015156119db57fe5b9060200190602002015189838151811015156119f357fe5b906020019060200201518a84815181101515611a0b57fe5b9060200190602002018b88815181101515611a2257fe5b9060200190602002018281525082815250505086821015611a5857611a51600183611c1790919063ffffffff16565b9550611a5c565b8194505b611868565b88975050505050505050919050565b600080600060028451811515611a8257fe5b0491508382815181101515611a9357fe5b906020019060200201519050603460008281526020019081526020016000205492505050919050565b816034600083815260200190815260200160002081600019169055506033819080600181540180825580915050906001820390600052602060002001600090919290919091505550611b0c610f62565b6035600083815260200190815260200160002081905550611b2d8282611c73565b7f441cd35745cc95136f39641bf16b52089bd7e481d97d7db059792befa3caec198282611b58610f62565b336040518085600019166000191681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a15050565b600080303b90506000811491505090565b600080600083111515611bde57600080fd5b8284811515611be957fe5b0490508091505092915050565b600080838311151515611c0857600080fd5b82840390508091505092915050565b6000808284019050838110151515611c2e57600080fd5b8091505092915050565b600060346000838152602001908152602001600020546001900460346000858152602001908152602001600020546001900410905092915050565b50505600a165627a7a72305820229d59cff97483188e4f5407c14d921953d2d030adeb5e4dedef366296c037e50029",
  "deployedBytecode": "0x6080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806307acc14b146101015780631a0ba4f2146101545780631b076edc1461019957806325be124e146101f05780632cbcda251461024757806330adb55d1461029e5780636a2ea57e146102ee5780636e4aa4d0146103215780636f1e84981461034c57806371a1c0ae1461037f57806392549bf214610396578063a25fa35c146103e5578063c0a6ab7914610435578063c0c53b8b14610460578063c2605a64146104e3578063c4d66de814610536578063d21220a714610579578063dab21b63146105d0575b600080fd5b34801561010d57600080fd5b506101366004803603810190808035906020019092919080359060200190929190505050610615565b60405180826000191660001916815260200191505060405180910390f35b34801561016057600080fd5b5061017f60048036038101908080359060200190929190505050610780565b604051808215151515815260200191505060405180910390f35b3480156101a557600080fd5b506101ae61079f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101fc57600080fd5b506102056107c5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025357600080fd5b5061025c6107eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102aa57600080fd5b506102c960048036038101908080359060200190929190505050610811565b6040518083600019166000191681526020018281526020019250505060405180910390f35b3480156102fa57600080fd5b506103036108e1565b60405180826000191660001916815260200191505060405180910390f35b34801561032d57600080fd5b5061033661091c565b6040518082815260200191505060405180910390f35b34801561035857600080fd5b50610361610944565b60405180826000191660001916815260200191505060405180910390f35b34801561038b57600080fd5b50610394610abe565b005b3480156103a257600080fd5b506103cf600480360381019080803560001916906020019092919080359060200190929190505050610cf3565b6040518082815260200191505060405180910390f35b3480156103f157600080fd5b5061041060048036038101908080359060200190929190505050610eb1565b6040518083600019166000191681526020018281526020019250505060405180910390f35b34801561044157600080fd5b5061044a610f62565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b506104e1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f72565b005b3480156104ef57600080fd5b5061051860048036038101908080359060200190929190803590602001909291905050506111c1565b60405180826000191660001916815260200191505060405180910390f35b34801561054257600080fd5b50610577600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611476565b005b34801561058557600080fd5b5061058e6116ce565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105dc57600080fd5b506105fb600480360381019080803590602001909291905050506116f4565b604051808215151515815260200191505060405180910390f35b60006060808385111515156106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001807f7374617274496e646578206d757374206265206c657373207468616e206f722081526020017f657175616c20746f20656e64496e64657800000000000000000000000000000081525060400191505060405180910390fd5b600085111515610756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f7374617274496e646578206d7573742062652067726561746572207468616e2081526020017f300000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610760858561177c565b915061076b82611828565b905061077681611a70565b9250505092915050565b6000806035600084815260200190815260200160002054119050919050565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061081d836116f4565b1515610891576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f20726573756c742073657420666f72205f696e646578000000000000000081525060200191505060405180910390fd5b603460006033858154811015156108a457fe5b90600052602060002001548152602001908152602001600020546033848154811015156108cd57fe5b906000526020600020015491509150915091565b60006034600060336108f1610f62565b8154811015156108fd57fe5b9060005260206000200154815260200190815260200160002054905090565b60006033610928610f62565b81548110151561093457fe5b9060005260206000200154905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610a7b57600080fd5b505af1158015610a8f573d6000803e3d6000fd5b505050506040513d6020811015610aa557600080fd5b8101908080519060200190929190505050600102905090565b6000603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aaaa795603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b810190808051906020019092919050505090503073ffffffffffffffffffffffffffffffffffffffff166392549bf282600102426040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b505050506040513d6020811015610cde57600080fd5b81019080805190602001909291905050505050565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f5468652063616c6c6572206973206e6f7420746865206461746120736f75726381526020017f650000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81428111151515610e59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f446174652063616e6e6f7420626520696e20746865206675747572650000000081525060200191505060405180910390fd5b60006033805490501115610e96576033610e71610f62565b815481101515610e7d57fe5b906000526020600020015483111515610e9557600080fd5b5b610ea08484611abc565b610ea8610f62565b91505092915050565b600080610ebd83610780565b1515610f31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f20726573756c742073657420666f72205f6461746500000000000000000081525060200191505060405180910390fd5b6034600084815260200190815260200160002054603560008581526020019081526020016000205491509150915091565b6000600160338054905003905090565b8073ffffffffffffffffffffffffffffffffffffffff1663d6e7444d84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d602081101561106b57600080fd5b810190808051906020019092919050505015156110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f746f6b656e207061697220646f6573206e6f742065786973740000000000000081525060200191505060405180910390fd5b82603760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111bc30611476565b505050565b60008060008060008587101515611266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f737461727444617465206d757374206265206c657373207468616e20656e644481526020017f617465000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016033805490500391505b6000821180156112825750600084145b156112bb578560338381548110151561129757fe5b90600052602060002001541115156112ad578193505b818060019003925050611272565b600084111515611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8660338581548110151561136957fe5b906000526020600020015410151515611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f6461746573206f757473696465206f662072616e6765206f662064617461666581526020017f656420726573756c74730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8390505b600081101580156114255750600083145b15611460578660338281548110151561143a57fe5b90600052602060002001541015611452576001810192505b808060019003915050611414565b61146a8385610615565b94505050505092915050565b60008060019054906101000a900460ff16806114965750611495611bbb565b5b806114ad57506000809054906101000a900460ff16155b1515611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f436f6e747261637420696e7374616e63652068617320616c726561647920626581526020017f656e20696e697469616c697a656400000000000000000000000000000000000081525060400191505060405180910390fd5b600060019054906101000a900460ff161590508015611596576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5f64617461536f757263652063616e6e6f74206265206164647265737328302981525060200191505060405180910390fd5b81603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060336000908060018154018082558091505090600182039060005260206000200160009091929091909150555080156116ca5760008060016101000a81548160ff0219169083151502179055505b5050565b603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808211151561176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5f696e646578206d7573742062652067726561746572207468616e203000000081525060200191505060405180910390fd5b81603380549050119050919050565b6060600060606000806001878703019350836040519080825280602002602001820160405280156117bc5781602001602082028038833980820191505090505b509250600091508690505b858111151561181b576033818154811015156117df57fe5b906000526020600020015483838151811015156117f857fe5b9060200190602002018181525050818060010192505080806001019150506117c7565b8294505050505092915050565b6060600080600080600080600061184a60028a51611bcc90919063ffffffff16565b96506000955061186560018a51611bf690919063ffffffff16565b94505b84861015611a615761189660026118888789611c1790919063ffffffff16565b611bcc90919063ffffffff16565b935088848151811015156118a657fe5b90602001906020020151925088858151811015156118c057fe5b9060200190602002015189858151811015156118d857fe5b906020019060200201518a868151811015156118f057fe5b9060200190602002018b8881518110151561190757fe5b906020019060200201828152508281525050508591508590505b848110156119cd5761194a898281518110151561193a57fe5b9060200190602002015184611c38565b156119c057888181518110151561195d57fe5b90602001906020020151898381518110151561197557fe5b906020019060200201518a8481518110151561198d57fe5b9060200190602002018b848151811015156119a457fe5b9060200190602002018281525082815250505081806001019250505b8080600101915050611921565b88858151811015156119db57fe5b9060200190602002015189838151811015156119f357fe5b906020019060200201518a84815181101515611a0b57fe5b9060200190602002018b88815181101515611a2257fe5b9060200190602002018281525082815250505086821015611a5857611a51600183611c1790919063ffffffff16565b9550611a5c565b8194505b611868565b88975050505050505050919050565b600080600060028451811515611a8257fe5b0491508382815181101515611a9357fe5b906020019060200201519050603460008281526020019081526020016000205492505050919050565b816034600083815260200190815260200160002081600019169055506033819080600181540180825580915050906001820390600052602060002001600090919290919091505550611b0c610f62565b6035600083815260200190815260200160002081905550611b2d8282611c73565b7f441cd35745cc95136f39641bf16b52089bd7e481d97d7db059792befa3caec198282611b58610f62565b336040518085600019166000191681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a15050565b600080303b90506000811491505090565b600080600083111515611bde57600080fd5b8284811515611be957fe5b0490508091505092915050565b600080838311151515611c0857600080fd5b82840390508091505092915050565b6000808284019050838110151515611c2e57600080fd5b8091505092915050565b600060346000838152602001908152602001600020546001900460346000858152602001908152602001600020546001900410905092915050565b50505600a165627a7a72305820229d59cff97483188e4f5407c14d921953d2d030adeb5e4dedef366296c037e50029",
  "sourceMap": "114:1090:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;114:1090:1;;;;;;;",
  "deployedSourceMap": "114:1090:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1139:484:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1139:484:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3824:109:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3824:109:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;460:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;460:25:10;;;;;;;;;;;;;;;;;;;;;;;;;;;193:21:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;193:21:1;;;;;;;;;;;;;;;;;;;;;;;;;;;218:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;218:39:1;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:209:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2276:209:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3279:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3279:123:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3051:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3051:114:10;;;;;;;;;;;;;;;;;;;;;;;1064:138:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1064:138:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;789:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;789:186:1;;;;;;1575:290:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1575:290:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2722:203;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2722:203:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1947:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1947:90:10;;;;;;;;;;;;;;;;;;;;;;;262:436:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;262:436:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;213:922:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;213:922:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1138:238:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1138:238:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;168:21:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;168:21:1;;;;;;;;;;;;;;;;;;;;;;;;;;;3526:167:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3526:167:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1139:484:0;1232:19;1418:27;1492:30;1283:8;1269:10;:22;;1261:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1372:1;1359:10;:14;1351:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1448:38;1465:10;1477:8;1448:16;:38::i;:::-;1418:68;;1525:38;1549:13;1525:23;:38::i;:::-;1492:71;;1583:35;1601:16;1583:17;:35::i;:::-;1569:49;;1139:484;;;;;;:::o;3824:109:10:-;3883:4;3926:1;3903:13;:20;3917:5;3903:20;;;;;;;;;;;;:24;3896:31;;3824:109;;;:::o;460:25::-;;;;;;;;;;;;;:::o;193:21:1:-;;;;;;;;;;;;;:::o;218:39::-;;;;;;;;;;;;;:::o;2276:209:10:-;2336:7;2345;2369:22;2384:6;2369:14;:22::i;:::-;2361:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2435:13;:28;2449:5;2455:6;2449:13;;;;;;;;;;;;;;;;;;2435:28;;;;;;;;;;;;2465:5;2471:6;2465:13;;;;;;;;;;;;;;;;;;2427:52;;;;2276:209;;;:::o;3279:123::-;3334:7;3360:13;:36;3374:5;3380:14;:12;:14::i;:::-;3374:21;;;;;;;;;;;;;;;;;;3360:36;;;;;;;;;;;;3353:43;;3279:123;:::o;3051:114::-;3110:7;3137:5;3143:14;:12;:14::i;:::-;3137:21;;;;;;;;;;;;;;;;;;3129:30;;3051:114;:::o;1064:138:1:-;1114:7;1144:15;;;;;;;;;;;:36;;;1181:6;;;;;;;;;;;1189;;;;;;;;;;;1144:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1144:52:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1144:52:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1144:52:1;;;;;;;;;;;;;;;;1136:61;;1129:68;;1064:138;:::o;789:186::-;823:10;836:15;;;;;;;;;;;:36;;;873:6;;;;;;;;;;;881;;;;;;;;;;;836:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;836:52:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;836:52:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;836:52:1;;;;;;;;;;;;;;;;823:65;;913:4;894:34;;;937:5;929:14;;953:15;894:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;894:76:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;894:76:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;894:76:1;;;;;;;;;;;;;;;;;789:186;:::o;1575:290:10:-;1697:13;942:10;;;;;;;;;;;928:24;;:10;:24;;;920:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1676:5;761:3;752:5;:12;;744:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1741:1;1726:5;:12;;;;:16;1722:77;;;1769:5;1775:14;:12;:14::i;:::-;1769:21;;;;;;;;;;;;;;;;;;1761:5;:29;1753:38;;;;;;;;1722:77;1805:26;1816:7;1825:5;1805:10;:26::i;:::-;1845:14;:12;:14::i;:::-;1838:21;;997:1;1575:290;;;;:::o;2722:203::-;2780:7;2789;2813:20;2827:5;2813:13;:20::i;:::-;2805:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2876:13;:20;2890:5;2876:20;;;;;;;;;;;;2898:13;:20;2912:5;2898:20;;;;;;;;;;;;2868:51;;;;2722:203;;;:::o;1947:90::-;1992:7;2030:1;2015:5;:12;;;;:16;2008:23;;1947:90;:::o;262:436:1:-;394:16;:32;;;427:7;436;394:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;394:50:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;394:50:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;394:50:1;;;;;;;;;;;;;;;;386:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;490:7;481:6;;:16;;;;;;;;;;;;;;;;;;512:7;503:6;;:16;;;;;;;;;;;;;;;;;;543;525:15;;:34;;;;;;;;;;;;;;;;;;649:44;687:4;649:29;:44::i;:::-;262:436;;;:::o;213:922:0:-;306:19;408:13;427:15;494:6;909;355:7;343:9;:19;335:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;518:1;503:5;:12;;;;:16;494:25;;489:165;525:1;521;:5;:22;;;;;542:1;530:8;:13;521:22;489:165;;;574:7;562:5;568:1;562:8;;;;;;;;;;;;;;;;;;:19;;558:90;;;604:1;593:12;;558:90;545:3;;;;;;;;489:165;;;718:1;707:8;:12;699:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:9;780:5;786:8;780:15;;;;;;;;;;;;;;;;;;:28;;772:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;918:8;909:17;;904:166;933:1;928;:6;;:25;;;;;952:1;938:10;:15;928:25;904:166;;;983:9;972:5;978:1;972:8;;;;;;;;;;;;;;;;;;:20;968:96;;;1021:1;1017;:5;1004:18;;968:96;955:3;;;;;;;;904:166;;;1090:40;1109:10;1121:8;1090:18;:40::i;:::-;1076:54;;213:922;;;;;;;;:::o;1138:238:10:-;601:19:12;496:12;;;;;;;;;;;:31;;;;512:15;:13;:15::i;:::-;496:31;:47;;;;532:11;;;;;;;;;;;531:12;496:47;488:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;624:12;;;;;;;;;;;623:13;601:35;;646:14;642:80;;;685:4;670:12;;:19;;;;;;;;;;;;;;;;;;711:4;697:11;;:18;;;;;;;;;;;;;;;;;;642:80;1236:1:10;1213:25;;:11;:25;;;;1205:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1295:11;1282:10;;:24;;;;;;;;;;;;;;;;;;1313:5;1324:1;1313:13;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;1313:13:10;;;;;;;;;;;;;;;;;;;;;;740:14:12;736:55;;;779:5;764:12;;:20;;;;;;;;;;;;;;;;;;736:55;1138:238:10;;:::o;168:21:1:-;;;;;;;;;;;;;:::o;3526:167:10:-;3587:4;3617:1;3608:6;:10;3600:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3681:6;3666:5;:12;;;;:21;3659:28;;3526:167;;;:::o;3091:339:0:-;3184:6;3200:11;3245:17;3289:10;3314:6;3238:1;3225:10;3214:8;:21;:25;3200:39;;3276:6;3265:18;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;3265:18:0;;;;3245:38;;3302:1;3289:14;;3323:10;3314:19;;3309:101;3340:8;3335:1;:13;;3309:101;;;3378:5;3384:1;3378:8;;;;;;;;;;;;;;;;;;3365:3;3369:5;3365:10;;;;;;;;;;;;;;;;;:21;;;;;3396:7;;;;;;;3350:3;;;;;;;3309:101;;;3422:3;3415:10;;3091:339;;;;;;;;:::o;2056:1031::-;2146:6;2162;2204:9;2223:10;2301:15;2351;2516;2553:6;2171:27;2196:1;2171:13;:20;:24;;:27;;;;:::i;:::-;2162:36;;2216:1;2204:13;;2236:27;2261:1;2236:13;:20;:24;;:27;;;;:::i;:::-;2223:40;;2270:786;2284:5;2277:4;:12;2270:786;;;2319:22;2339:1;2319:15;2328:5;2319:4;:8;;:15;;;;:::i;:::-;:19;;:22;;;;:::i;:::-;2301:40;;2369:13;2383:10;2369:25;;;;;;;;;;;;;;;;;;2351:43;;2458:13;2472:5;2458:20;;;;;;;;;;;;;;;;;;2480:13;2494:10;2480:25;;;;;;;;;;;;;;;;;;2406:13;2420:10;2406:25;;;;;;;;;;;;;;;;;2433:13;2447:5;2433:20;;;;;;;;;;;;;;;;;2405:101;;;;;;;;;;2534:4;2516:22;;2562:4;2553:13;;2548:263;2572:5;2568:1;:9;2548:263;;;2602:41;2614:13;2628:1;2614:16;;;;;;;;;;;;;;;;;;2632:10;2602:11;:41::i;:::-;2598:203;;;2712:13;2726:1;2712:16;;;;;;;;;;;;;;;;;;2730:13;2744:10;2730:25;;;;;;;;;;;;;;;;;;2664:13;2678:10;2664:25;;;;;;;;;;;;;;;;;2691:13;2705:1;2691:16;;;;;;;;;;;;;;;;;2663:93;;;;;;;;;;2774:12;;;;;;;2598:203;2579:3;;;;;;;2548:263;;;2874:13;2888:5;2874:20;;;;;;;;;;;;;;;;;;2896:13;2910:10;2896:25;;;;;;;;;;;;;;;;;;2822:13;2836:10;2822:25;;;;;;;;;;;;;;;;;2849:13;2863:5;2849:20;;;;;;;;;;;;;;;;;2821:101;;;;;;;;;;2949:1;2936:10;:14;2932:118;;;2973:17;2988:1;2973:10;:14;;:17;;;;:::i;:::-;2966:24;;2932:118;;;3029:10;3021:18;;2932:118;2270:786;;;3069:13;3062:20;;2056:1031;;;;;;;;;;:::o;1652:254::-;1735:19;1764:16;1812:15;1805:1;1783:12;:19;:23;;;;;;;;1764:42;;1831:12;1844:11;1831:25;;;;;;;;;;;;;;;;;;1812:44;;1876:13;:25;1890:10;1876:25;;;;;;;;;;;;1862:39;;1652:254;;;;;:::o;4102:277:10:-;4193:7;4170:13;:20;4184:5;4170:20;;;;;;;;;;;:30;;;;;;;4207:5;4218;4207:17;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;4207:17:10;;;;;;;;;;;;;;;;;;;;;;4254:14;:12;:14::i;:::-;4231:13;:20;4245:5;4231:20;;;;;;;;;;;:37;;;;4277:29;4291:7;4300:5;4277:13;:29::i;:::-;4320:53;4330:7;4339:5;4346:14;:12;:14::i;:::-;4362:10;4320:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4102:277;;:::o;881:467:12:-;928:4;1269:10;1314:7;1302:20;1296:26;;1342:1;1336:2;:7;1329:14;;881:467;;:::o;699:270:8:-;757:7;850:9;784:1;780;:5;772:14;;;;;;;;866:1;862;:5;;;;;;;;850:17;;963:1;956:8;;699:270;;;;;:::o;1082:131::-;1140:7;1176:9;1168:1;1163;:6;;1155:15;;;;;;;;1192:1;1188;:5;1176:17;;1207:1;1200:8;;1082:131;;;;;:::o;1276:::-;1334:7;1349:9;1365:1;1361;:5;1349:17;;1385:1;1380;:6;;1372:15;;;;;;;;1401:1;1394:8;;1276:131;;;;;:::o;3434:161:0:-;3514:4;3569:13;:20;3583:5;3569:20;;;;;;;;;;;;3564:26;;;3540:13;:20;3554:5;3540:20;;;;;;;;;;;;3535:26;;;:55;3528:62;;3434:161;;;;:::o;4470:104:10:-;;;:::o",
  "source": "pragma solidity >=0.4.24;\n\nimport \"./TimeMedianDataFeed.sol\";\nimport \"../ExchangeAdapters/IExchangeAdapter.sol\";\n\ncontract TokenPriceDataFeed is TimeMedianDataFeed {\n  address public token1;\n  address public token2;\n  IExchangeAdapter public exchangeAdapter;\n\n  function initialize(\n    address _token1,\n    address _token2,\n    IExchangeAdapter _exchangeAdapter\n  )\n    public\n  {\n    require(_exchangeAdapter.tokenPairExists(_token1, _token2), 'token pair does not exist');\n\n    token1 = _token1;\n    token2 = _token2;\n    exchangeAdapter = _exchangeAdapter;\n\n    // set dataSource to `this` so setResult can only be called from this contract\n    DataFeedOracleBase.initialize(address(this));\n  }\n\n  /**\n  * @dev logs current exchange price in dataFeed at current block timestamp\n  */\n  function logResult() public {\n    uint price = exchangeAdapter.getPriceForTokenPair(token1, token2);\n    TimeMedianDataFeed(this).setResult(bytes32(price), uint256(block.timestamp));\n  }\n\n  /**\n  * @dev returns the value of the current price according to the exchange\n  */\n  function viewCurrentResult() public view returns (bytes32) {\n    return bytes32(exchangeAdapter.getPriceForTokenPair(token1, token2));\n  }\n}\n",
  "sourcePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/DataFeeds/TokenPriceDataFeed.sol",
  "ast": {
    "absolutePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/DataFeeds/TokenPriceDataFeed.sol",
    "exportedSymbols": {
      "TokenPriceDataFeed": [
        505
      ]
    },
    "id": 506,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 416,
        "literals": [
          "solidity",
          ">=",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:25:1"
      },
      {
        "absolutePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/DataFeeds/TimeMedianDataFeed.sol",
        "file": "./TimeMedianDataFeed.sol",
        "id": 417,
        "nodeType": "ImportDirective",
        "scope": 506,
        "sourceUnit": 415,
        "src": "27:34:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/ExchangeAdapters/IExchangeAdapter.sol",
        "file": "../ExchangeAdapters/IExchangeAdapter.sol",
        "id": 418,
        "nodeType": "ImportDirective",
        "scope": 506,
        "sourceUnit": 641,
        "src": "62:50:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 419,
              "name": "TimeMedianDataFeed",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 414,
              "src": "145:18:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TimeMedianDataFeed_$414",
                "typeString": "contract TimeMedianDataFeed"
              }
            },
            "id": 420,
            "nodeType": "InheritanceSpecifier",
            "src": "145:18:1"
          }
        ],
        "contractDependencies": [
          414,
          1649,
          1699,
          1762
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 505,
        "linearizedBaseContracts": [
          505,
          414,
          1649,
          1699,
          1762
        ],
        "name": "TokenPriceDataFeed",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 422,
            "name": "token1",
            "nodeType": "VariableDeclaration",
            "scope": 505,
            "src": "168:21:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 421,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "168:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 424,
            "name": "token2",
            "nodeType": "VariableDeclaration",
            "scope": 505,
            "src": "193:21:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 423,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "193:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 426,
            "name": "exchangeAdapter",
            "nodeType": "VariableDeclaration",
            "scope": 505,
            "src": "218:39:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
              "typeString": "contract IExchangeAdapter"
            },
            "typeName": {
              "contractScope": null,
              "id": 425,
              "name": "IExchangeAdapter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 640,
              "src": "218:16:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                "typeString": "contract IExchangeAdapter"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 464,
              "nodeType": "Block",
              "src": "380:318:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 438,
                            "name": "_token1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 428,
                            "src": "427:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 439,
                            "name": "_token2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 430,
                            "src": "436:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 436,
                            "name": "_exchangeAdapter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 432,
                            "src": "394:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                              "typeString": "contract IExchangeAdapter"
                            }
                          },
                          "id": 437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tokenPairExists",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 639,
                          "src": "394:32:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address,address) view external returns (bool)"
                          }
                        },
                        "id": 440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "394:50:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e207061697220646f6573206e6f74206578697374",
                        "id": 441,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "446:27:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a20d6d613fcf1e2a59349c916d92ee0c11158d24cf3f69a77cfcf1321bb3e87d",
                          "typeString": "literal_string \"token pair does not exist\""
                        },
                        "value": "token pair does not exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a20d6d613fcf1e2a59349c916d92ee0c11158d24cf3f69a77cfcf1321bb3e87d",
                          "typeString": "literal_string \"token pair does not exist\""
                        }
                      ],
                      "id": 435,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1780,
                        1781
                      ],
                      "referencedDeclaration": 1781,
                      "src": "386:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "386:88:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 443,
                  "nodeType": "ExpressionStatement",
                  "src": "386:88:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 444,
                      "name": "token1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 422,
                      "src": "481:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 445,
                      "name": "_token1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 428,
                      "src": "490:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "481:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 447,
                  "nodeType": "ExpressionStatement",
                  "src": "481:16:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 450,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 448,
                      "name": "token2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 424,
                      "src": "503:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 449,
                      "name": "_token2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 430,
                      "src": "512:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "503:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 451,
                  "nodeType": "ExpressionStatement",
                  "src": "503:16:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 454,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 452,
                      "name": "exchangeAdapter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 426,
                      "src": "525:15:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                        "typeString": "contract IExchangeAdapter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 453,
                      "name": "_exchangeAdapter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 432,
                      "src": "543:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                        "typeString": "contract IExchangeAdapter"
                      }
                    },
                    "src": "525:34:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                      "typeString": "contract IExchangeAdapter"
                    }
                  },
                  "id": 455,
                  "nodeType": "ExpressionStatement",
                  "src": "525:34:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 460,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1802,
                            "src": "687:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenPriceDataFeed_$505",
                              "typeString": "contract TokenPriceDataFeed"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenPriceDataFeed_$505",
                              "typeString": "contract TokenPriceDataFeed"
                            }
                          ],
                          "id": 459,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "679:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "679:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 456,
                        "name": "DataFeedOracleBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1649,
                        "src": "649:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_DataFeedOracleBase_$1649_$",
                          "typeString": "type(contract DataFeedOracleBase)"
                        }
                      },
                      "id": 458,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1439,
                      "src": "649:29:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "649:44:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 463,
                  "nodeType": "ExpressionStatement",
                  "src": "649:44:1"
                }
              ]
            },
            "documentation": null,
            "id": 465,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 428,
                  "name": "_token1",
                  "nodeType": "VariableDeclaration",
                  "scope": 465,
                  "src": "287:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 427,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "287:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 430,
                  "name": "_token2",
                  "nodeType": "VariableDeclaration",
                  "scope": 465,
                  "src": "308:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 429,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "308:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 432,
                  "name": "_exchangeAdapter",
                  "nodeType": "VariableDeclaration",
                  "scope": 465,
                  "src": "329:33:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                    "typeString": "contract IExchangeAdapter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 431,
                    "name": "IExchangeAdapter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 640,
                    "src": "329:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                      "typeString": "contract IExchangeAdapter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "281:85:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 434,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "380:0:1"
            },
            "scope": 505,
            "src": "262:436:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 489,
              "nodeType": "Block",
              "src": "817:158:1",
              "statements": [
                {
                  "assignments": [
                    469
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 469,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 490,
                      "src": "823:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 468,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "823:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 475,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 472,
                        "name": "token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 422,
                        "src": "873:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 473,
                        "name": "token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 424,
                        "src": "881:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 470,
                        "name": "exchangeAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 426,
                        "src": "836:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                          "typeString": "contract IExchangeAdapter"
                        }
                      },
                      "id": 471,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getPriceForTokenPair",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 630,
                      "src": "836:36:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view external returns (uint256)"
                      }
                    },
                    "id": 474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "836:52:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "823:65:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 481,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 469,
                            "src": "937:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "929:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": "bytes32"
                        },
                        "id": 482,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "929:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 484,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1767,
                              "src": "953:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "953:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "945:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 486,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "945:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 477,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1802,
                            "src": "913:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenPriceDataFeed_$505",
                              "typeString": "contract TokenPriceDataFeed"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenPriceDataFeed_$505",
                              "typeString": "contract TokenPriceDataFeed"
                            }
                          ],
                          "id": 476,
                          "name": "TimeMedianDataFeed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 414,
                          "src": "894:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TimeMedianDataFeed_$414_$",
                            "typeString": "type(contract TimeMedianDataFeed)"
                          }
                        },
                        "id": 478,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "894:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TimeMedianDataFeed_$414",
                          "typeString": "contract TimeMedianDataFeed"
                        }
                      },
                      "id": 479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setResult",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1477,
                      "src": "894:34:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (bytes32,uint256) external returns (uint256)"
                      }
                    },
                    "id": 487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "894:76:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 488,
                  "nodeType": "ExpressionStatement",
                  "src": "894:76:1"
                }
              ]
            },
            "documentation": "@dev logs current exchange price in dataFeed at current block timestamp",
            "id": 490,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "logResult",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 466,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "807:2:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 467,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "817:0:1"
            },
            "scope": 505,
            "src": "789:186:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 503,
              "nodeType": "Block",
              "src": "1123:79:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 498,
                            "name": "token1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 422,
                            "src": "1181:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 499,
                            "name": "token2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 424,
                            "src": "1189:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 496,
                            "name": "exchangeAdapter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 426,
                            "src": "1144:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                              "typeString": "contract IExchangeAdapter"
                            }
                          },
                          "id": 497,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getPriceForTokenPair",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 630,
                          "src": "1144:36:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address,address) view external returns (uint256)"
                          }
                        },
                        "id": 500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1144:52:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 495,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1136:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": "bytes32"
                    },
                    "id": 501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1136:61:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 494,
                  "id": 502,
                  "nodeType": "Return",
                  "src": "1129:68:1"
                }
              ]
            },
            "documentation": "@dev returns the value of the current price according to the exchange",
            "id": 504,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "viewCurrentResult",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 491,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1090:2:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 493,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 504,
                  "src": "1114:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 492,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1114:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1113:9:1"
            },
            "scope": 505,
            "src": "1064:138:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 506,
        "src": "114:1090:1"
      }
    ],
    "src": "0:1205:1"
  },
  "legacyAST": {
    "absolutePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/DataFeeds/TokenPriceDataFeed.sol",
    "exportedSymbols": {
      "TokenPriceDataFeed": [
        505
      ]
    },
    "id": 506,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 416,
        "literals": [
          "solidity",
          ">=",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:25:1"
      },
      {
        "absolutePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/DataFeeds/TimeMedianDataFeed.sol",
        "file": "./TimeMedianDataFeed.sol",
        "id": 417,
        "nodeType": "ImportDirective",
        "scope": 506,
        "sourceUnit": 415,
        "src": "27:34:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/mfcalvanese/dev/eth/token-price-oracles/contracts/ExchangeAdapters/IExchangeAdapter.sol",
        "file": "../ExchangeAdapters/IExchangeAdapter.sol",
        "id": 418,
        "nodeType": "ImportDirective",
        "scope": 506,
        "sourceUnit": 641,
        "src": "62:50:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 419,
              "name": "TimeMedianDataFeed",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 414,
              "src": "145:18:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TimeMedianDataFeed_$414",
                "typeString": "contract TimeMedianDataFeed"
              }
            },
            "id": 420,
            "nodeType": "InheritanceSpecifier",
            "src": "145:18:1"
          }
        ],
        "contractDependencies": [
          414,
          1649,
          1699,
          1762
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 505,
        "linearizedBaseContracts": [
          505,
          414,
          1649,
          1699,
          1762
        ],
        "name": "TokenPriceDataFeed",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 422,
            "name": "token1",
            "nodeType": "VariableDeclaration",
            "scope": 505,
            "src": "168:21:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 421,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "168:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 424,
            "name": "token2",
            "nodeType": "VariableDeclaration",
            "scope": 505,
            "src": "193:21:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 423,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "193:7:1",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 426,
            "name": "exchangeAdapter",
            "nodeType": "VariableDeclaration",
            "scope": 505,
            "src": "218:39:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
              "typeString": "contract IExchangeAdapter"
            },
            "typeName": {
              "contractScope": null,
              "id": 425,
              "name": "IExchangeAdapter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 640,
              "src": "218:16:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                "typeString": "contract IExchangeAdapter"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 464,
              "nodeType": "Block",
              "src": "380:318:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 438,
                            "name": "_token1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 428,
                            "src": "427:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 439,
                            "name": "_token2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 430,
                            "src": "436:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 436,
                            "name": "_exchangeAdapter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 432,
                            "src": "394:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                              "typeString": "contract IExchangeAdapter"
                            }
                          },
                          "id": 437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tokenPairExists",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 639,
                          "src": "394:32:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address,address) view external returns (bool)"
                          }
                        },
                        "id": 440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "394:50:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e207061697220646f6573206e6f74206578697374",
                        "id": 441,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "446:27:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a20d6d613fcf1e2a59349c916d92ee0c11158d24cf3f69a77cfcf1321bb3e87d",
                          "typeString": "literal_string \"token pair does not exist\""
                        },
                        "value": "token pair does not exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a20d6d613fcf1e2a59349c916d92ee0c11158d24cf3f69a77cfcf1321bb3e87d",
                          "typeString": "literal_string \"token pair does not exist\""
                        }
                      ],
                      "id": 435,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1780,
                        1781
                      ],
                      "referencedDeclaration": 1781,
                      "src": "386:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "386:88:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 443,
                  "nodeType": "ExpressionStatement",
                  "src": "386:88:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 444,
                      "name": "token1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 422,
                      "src": "481:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 445,
                      "name": "_token1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 428,
                      "src": "490:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "481:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 447,
                  "nodeType": "ExpressionStatement",
                  "src": "481:16:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 450,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 448,
                      "name": "token2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 424,
                      "src": "503:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 449,
                      "name": "_token2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 430,
                      "src": "512:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "503:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 451,
                  "nodeType": "ExpressionStatement",
                  "src": "503:16:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 454,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 452,
                      "name": "exchangeAdapter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 426,
                      "src": "525:15:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                        "typeString": "contract IExchangeAdapter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 453,
                      "name": "_exchangeAdapter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 432,
                      "src": "543:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                        "typeString": "contract IExchangeAdapter"
                      }
                    },
                    "src": "525:34:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                      "typeString": "contract IExchangeAdapter"
                    }
                  },
                  "id": 455,
                  "nodeType": "ExpressionStatement",
                  "src": "525:34:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 460,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1802,
                            "src": "687:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenPriceDataFeed_$505",
                              "typeString": "contract TokenPriceDataFeed"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenPriceDataFeed_$505",
                              "typeString": "contract TokenPriceDataFeed"
                            }
                          ],
                          "id": 459,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "679:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "679:13:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 456,
                        "name": "DataFeedOracleBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1649,
                        "src": "649:18:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_DataFeedOracleBase_$1649_$",
                          "typeString": "type(contract DataFeedOracleBase)"
                        }
                      },
                      "id": 458,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1439,
                      "src": "649:29:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "649:44:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 463,
                  "nodeType": "ExpressionStatement",
                  "src": "649:44:1"
                }
              ]
            },
            "documentation": null,
            "id": 465,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 428,
                  "name": "_token1",
                  "nodeType": "VariableDeclaration",
                  "scope": 465,
                  "src": "287:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 427,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "287:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 430,
                  "name": "_token2",
                  "nodeType": "VariableDeclaration",
                  "scope": 465,
                  "src": "308:15:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 429,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "308:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 432,
                  "name": "_exchangeAdapter",
                  "nodeType": "VariableDeclaration",
                  "scope": 465,
                  "src": "329:33:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                    "typeString": "contract IExchangeAdapter"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 431,
                    "name": "IExchangeAdapter",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 640,
                    "src": "329:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                      "typeString": "contract IExchangeAdapter"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "281:85:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 434,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "380:0:1"
            },
            "scope": 505,
            "src": "262:436:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 489,
              "nodeType": "Block",
              "src": "817:158:1",
              "statements": [
                {
                  "assignments": [
                    469
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 469,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 490,
                      "src": "823:10:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 468,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "823:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 475,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 472,
                        "name": "token1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 422,
                        "src": "873:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 473,
                        "name": "token2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 424,
                        "src": "881:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 470,
                        "name": "exchangeAdapter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 426,
                        "src": "836:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                          "typeString": "contract IExchangeAdapter"
                        }
                      },
                      "id": 471,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getPriceForTokenPair",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 630,
                      "src": "836:36:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view external returns (uint256)"
                      }
                    },
                    "id": 474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "836:52:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "823:65:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 481,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 469,
                            "src": "937:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "929:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": "bytes32"
                        },
                        "id": 482,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "929:14:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 484,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1767,
                              "src": "953:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "953:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "945:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 486,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "945:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 477,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1802,
                            "src": "913:4:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenPriceDataFeed_$505",
                              "typeString": "contract TokenPriceDataFeed"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenPriceDataFeed_$505",
                              "typeString": "contract TokenPriceDataFeed"
                            }
                          ],
                          "id": 476,
                          "name": "TimeMedianDataFeed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 414,
                          "src": "894:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TimeMedianDataFeed_$414_$",
                            "typeString": "type(contract TimeMedianDataFeed)"
                          }
                        },
                        "id": 478,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "894:24:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TimeMedianDataFeed_$414",
                          "typeString": "contract TimeMedianDataFeed"
                        }
                      },
                      "id": 479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setResult",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1477,
                      "src": "894:34:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (bytes32,uint256) external returns (uint256)"
                      }
                    },
                    "id": 487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "894:76:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 488,
                  "nodeType": "ExpressionStatement",
                  "src": "894:76:1"
                }
              ]
            },
            "documentation": "@dev logs current exchange price in dataFeed at current block timestamp",
            "id": 490,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "logResult",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 466,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "807:2:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 467,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "817:0:1"
            },
            "scope": 505,
            "src": "789:186:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 503,
              "nodeType": "Block",
              "src": "1123:79:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 498,
                            "name": "token1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 422,
                            "src": "1181:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 499,
                            "name": "token2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 424,
                            "src": "1189:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 496,
                            "name": "exchangeAdapter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 426,
                            "src": "1144:15:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IExchangeAdapter_$640",
                              "typeString": "contract IExchangeAdapter"
                            }
                          },
                          "id": 497,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getPriceForTokenPair",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 630,
                          "src": "1144:36:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address,address) view external returns (uint256)"
                          }
                        },
                        "id": 500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1144:52:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 495,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1136:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": "bytes32"
                    },
                    "id": 501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1136:61:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 494,
                  "id": 502,
                  "nodeType": "Return",
                  "src": "1129:68:1"
                }
              ]
            },
            "documentation": "@dev returns the value of the current price according to the exchange",
            "id": 504,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "viewCurrentResult",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 491,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1090:2:1"
            },
            "payable": false,
            "returnParameters": {
              "id": 494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 493,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 504,
                  "src": "1114:7:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 492,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1114:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1113:9:1"
            },
            "scope": 505,
            "src": "1064:138:1",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 506,
        "src": "114:1090:1"
      }
    ],
    "src": "0:1205:1"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.25+commit.59dbf8f1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.2",
  "updatedAt": "2020-02-17T22:26:47.993Z"
}