{
  "_format": "hh-sol-artifact-1",
  "contractName": "PriceOracleForTest",
  "sourceName": "contracts/mocks/PriceOracleForTest.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "getIndexPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "getMarkPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isIndexPrice",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "beta",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "negative",
          "type": "bool"
        }
      ],
      "name": "getMarkPriceAcc",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "name": "getMarkPriceAfterSwap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isIndexPrice",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "name": "getMarkPriceInRatio",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "getMarketPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "getPremiumFraction",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "base",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "quote",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "quoteToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "name": "quote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "source",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "name": "quoteFromAmmTwap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "quoteToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "reserveBase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveQuote",
          "type": "uint256"
        }
      ],
      "name": "setReserve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "setupTwap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pair",
          "type": "address"
        }
      ],
      "name": "updateAmmTwap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50611050806100206000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063b263e0101161008c578063d480731c11610066578063d480731c146101e9578063d52bb6f4146101ff578063da751dcb14610243578063f65770ba146100d4576100cf565b8063b263e01014610193578063b6466384146101a6578063ba4433c0146101d0576100cf565b8063422bb010146100d457806346b55e40146100e75780634c0000dc1461010d5780635d6f9c14146101205780637e650a05146101485780639c6f30261461017f575b600080fd5b6100e56100e2366004610af5565b50565b005b6100fa6100f5366004610af5565b610296565b6040519081526020015b60405180910390f35b6100fa61011b366004610c49565b61036a565b61013361012e366004610af5565b61047c565b60408051928352901515602083015201610104565b610162610156366004610c15565b50600092839250829150565b604080519384526020840192909252151590820152606001610104565b6100fa61018d366004610af5565b50600090565b6100fa6101a1366004610af5565b610710565b6101b96101b4366004610b65565b61092b565b6040805192835260ff909116602083015201610104565b6101336101de366004610c15565b600080935093915050565b6100fa6101f7366004610bea565b600092915050565b61022e61020d366004610b2d565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610104565b6100e5610251366004610ba5565b60408051808201825292835260208084019283526001600160a01b03958616600090815280825282812095909616865293909352919092209151825551600190910155565b6000806102a28361047c565b5090508060006102b185610710565b90506000821380156102c35750600081135b61032a5760405162461bcd60e51b815260206004820152602d60248201527f50726963654f7261636c652e6765745072656d69756d4672616374696f6e3a2060448201526c494e56414c49445f505249434560981b60648201526084015b60405180910390fd5b80620151806103398285610f51565b61034b90670de0b6b3a7640000610eaf565b6103559190610d46565b61035f9190610d46565b93505050505b919050565b600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156103a657600080fd5b505afa1580156103ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103de9190610c9f565b506001600160701b031691505060006103f68761047c565b509050600061042a82606460ff8a166104108a6002610f32565b61041a9190610f32565b6104249190610d74565b85610a29565b9050600085156104455761043e8284610f90565b9050610452565b61044f8284610d09565b90505b8061046588670de0b6b3a7640000610f32565b61046f9190610d74565b9998505050505050505050565b600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156104bb57600080fd5b505afa1580156104cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f39190610c9f565b506001600160701b031691506001600160701b031691506000856001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561054557600080fd5b505afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d9190610b11565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156105b557600080fd5b505afa1580156105c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ed9190610ced565b90506000866001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b15801561062a57600080fd5b505afa15801561063e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106629190610b11565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561069a57600080fd5b505afa1580156106ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d29190610ced565b90506000816106e2846012610d21565b6106ec9190610fa7565b6106f790600a610ddd565b9050610704818587610a29565b96505050505050915091565b600080826001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561074c57600080fd5b505afa158015610760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107849190610b11565b90506000836001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c157600080fd5b505afa1580156107d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f99190610b11565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561083657600080fd5b505afa15801561084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e9190610ced565b60ff1690506000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156108ae57600080fd5b505afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e69190610ced565b60ff16905060006108fd85856101b486600a610dce565b50905061090b826012610f90565b61091690600a610dce565b6109209082610f32565b979650505050505050565b6001600160a01b0380841660009081526020818152604080832093861683529281528282208351808501909452805484526001015490830152908190836109aa5760405162461bcd60e51b8152602060048201526013602482015272125394d551919250d251539517d05353d55395606a1b6044820152606401610321565b8051158015906109be575060008160200151115b610a035760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b6044820152606401610321565b80516020820151610a149086610f32565b610a1e9190610d74565b925050935093915050565b600080806000198587098587029250828110838203039150508060001415610a635760008411610a5857600080fd5b508290049050610ad7565b808411610a6f57600080fd5b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b80516001600160701b038116811461036557600080fd5b600060208284031215610b06578081fd5b8135610ad781610ff6565b600060208284031215610b22578081fd5b8151610ad781610ff6565b60008060408385031215610b3f578081fd5b8235610b4a81610ff6565b91506020830135610b5a81610ff6565b809150509250929050565b600080600060608486031215610b79578081fd5b8335610b8481610ff6565b92506020840135610b9481610ff6565b929592945050506040919091013590565b60008060008060808587031215610bba578081fd5b8435610bc581610ff6565b93506020850135610bd581610ff6565b93969395505050506040820135916060013590565b60008060408385031215610bfc578182fd5b8235610c0781610ff6565b946020939093013593505050565b600080600060608486031215610c29578283fd5b8335610c3481610ff6565b95602085013595506040909401359392505050565b60008060008060808587031215610c5e578384fd5b8435610c6981610ff6565b93506020850135610c798161100b565b92506040850135915060608501358015158114610c94578182fd5b939692955090935050565b600080600060608486031215610cb3578283fd5b610cbc84610ade565b9250610cca60208501610ade565b9150604084015163ffffffff81168114610ce2578182fd5b809150509250925092565b600060208284031215610cfe578081fd5b8151610ad78161100b565b60008219821115610d1c57610d1c610fca565b500190565b600060ff821660ff84168060ff03821115610d3e57610d3e610fca565b019392505050565b600082610d5557610d55610fe0565b600160ff1b821460001984141615610d6f57610d6f610fca565b500590565b600082610d8357610d83610fe0565b500490565b80825b6001808611610d9a5750610dc5565b818704821115610dac57610dac610fca565b80861615610db957918102915b9490941c938002610d8b565b94509492505050565b6000610ad76000198484610deb565b6000610ad760001960ff8516845b600082610dfa57506001610ad7565b81610e0757506000610ad7565b8160018114610e1d5760028114610e2757610e54565b6001915050610ad7565b60ff841115610e3857610e38610fca565b6001841b915084821115610e4e57610e4e610fca565b50610ad7565b5060208310610133831016604e8410600b8410161715610e87575081810a83811115610e8257610e82610fca565b610ad7565b610e948484846001610d88565b808604821115610ea657610ea6610fca565b02949350505050565b60006001600160ff1b0381841382841380821686840486111615610ed557610ed5610fca565b600160ff1b84871282811687830589121615610ef357610ef3610fca565b858712925087820587128484161615610f0e57610f0e610fca565b87850587128184161615610f2457610f24610fca565b505050929093029392505050565b6000816000190483118215151615610f4c57610f4c610fca565b500290565b60008083128015600160ff1b850184121615610f6f57610f6f610fca565b6001600160ff1b0384018313811615610f8a57610f8a610fca565b50500390565b600082821015610fa257610fa2610fca565b500390565b600060ff821660ff841680821015610fc157610fc1610fca565b90039392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146100e257600080fd5b60ff811681146100e257600080fdfea2646970667358221220042f268ed341e72731b7f1c24907b2c942b06d83948f2423cc5b737d673febe164736f6c63430008020033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063b263e0101161008c578063d480731c11610066578063d480731c146101e9578063d52bb6f4146101ff578063da751dcb14610243578063f65770ba146100d4576100cf565b8063b263e01014610193578063b6466384146101a6578063ba4433c0146101d0576100cf565b8063422bb010146100d457806346b55e40146100e75780634c0000dc1461010d5780635d6f9c14146101205780637e650a05146101485780639c6f30261461017f575b600080fd5b6100e56100e2366004610af5565b50565b005b6100fa6100f5366004610af5565b610296565b6040519081526020015b60405180910390f35b6100fa61011b366004610c49565b61036a565b61013361012e366004610af5565b61047c565b60408051928352901515602083015201610104565b610162610156366004610c15565b50600092839250829150565b604080519384526020840192909252151590820152606001610104565b6100fa61018d366004610af5565b50600090565b6100fa6101a1366004610af5565b610710565b6101b96101b4366004610b65565b61092b565b6040805192835260ff909116602083015201610104565b6101336101de366004610c15565b600080935093915050565b6100fa6101f7366004610bea565b600092915050565b61022e61020d366004610b2d565b60006020818152928152604080822090935290815220805460019091015482565b60408051928352602083019190915201610104565b6100e5610251366004610ba5565b60408051808201825292835260208084019283526001600160a01b03958616600090815280825282812095909616865293909352919092209151825551600190910155565b6000806102a28361047c565b5090508060006102b185610710565b90506000821380156102c35750600081135b61032a5760405162461bcd60e51b815260206004820152602d60248201527f50726963654f7261636c652e6765745072656d69756d4672616374696f6e3a2060448201526c494e56414c49445f505249434560981b60648201526084015b60405180910390fd5b80620151806103398285610f51565b61034b90670de0b6b3a7640000610eaf565b6103559190610d46565b61035f9190610d46565b93505050505b919050565b600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156103a657600080fd5b505afa1580156103ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103de9190610c9f565b506001600160701b031691505060006103f68761047c565b509050600061042a82606460ff8a166104108a6002610f32565b61041a9190610f32565b6104249190610d74565b85610a29565b9050600085156104455761043e8284610f90565b9050610452565b61044f8284610d09565b90505b8061046588670de0b6b3a7640000610f32565b61046f9190610d74565b9998505050505050505050565b600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156104bb57600080fd5b505afa1580156104cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f39190610c9f565b506001600160701b031691506001600160701b031691506000856001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561054557600080fd5b505afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d9190610b11565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156105b557600080fd5b505afa1580156105c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ed9190610ced565b90506000866001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b15801561062a57600080fd5b505afa15801561063e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106629190610b11565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561069a57600080fd5b505afa1580156106ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d29190610ced565b90506000816106e2846012610d21565b6106ec9190610fa7565b6106f790600a610ddd565b9050610704818587610a29565b96505050505050915091565b600080826001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561074c57600080fd5b505afa158015610760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107849190610b11565b90506000836001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c157600080fd5b505afa1580156107d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f99190610b11565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561083657600080fd5b505afa15801561084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e9190610ced565b60ff1690506000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156108ae57600080fd5b505afa1580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e69190610ced565b60ff16905060006108fd85856101b486600a610dce565b50905061090b826012610f90565b61091690600a610dce565b6109209082610f32565b979650505050505050565b6001600160a01b0380841660009081526020818152604080832093861683529281528282208351808501909452805484526001015490830152908190836109aa5760405162461bcd60e51b8152602060048201526013602482015272125394d551919250d251539517d05353d55395606a1b6044820152606401610321565b8051158015906109be575060008160200151115b610a035760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b6044820152606401610321565b80516020820151610a149086610f32565b610a1e9190610d74565b925050935093915050565b600080806000198587098587029250828110838203039150508060001415610a635760008411610a5857600080fd5b508290049050610ad7565b808411610a6f57600080fd5b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b80516001600160701b038116811461036557600080fd5b600060208284031215610b06578081fd5b8135610ad781610ff6565b600060208284031215610b22578081fd5b8151610ad781610ff6565b60008060408385031215610b3f578081fd5b8235610b4a81610ff6565b91506020830135610b5a81610ff6565b809150509250929050565b600080600060608486031215610b79578081fd5b8335610b8481610ff6565b92506020840135610b9481610ff6565b929592945050506040919091013590565b60008060008060808587031215610bba578081fd5b8435610bc581610ff6565b93506020850135610bd581610ff6565b93969395505050506040820135916060013590565b60008060408385031215610bfc578182fd5b8235610c0781610ff6565b946020939093013593505050565b600080600060608486031215610c29578283fd5b8335610c3481610ff6565b95602085013595506040909401359392505050565b60008060008060808587031215610c5e578384fd5b8435610c6981610ff6565b93506020850135610c798161100b565b92506040850135915060608501358015158114610c94578182fd5b939692955090935050565b600080600060608486031215610cb3578283fd5b610cbc84610ade565b9250610cca60208501610ade565b9150604084015163ffffffff81168114610ce2578182fd5b809150509250925092565b600060208284031215610cfe578081fd5b8151610ad78161100b565b60008219821115610d1c57610d1c610fca565b500190565b600060ff821660ff84168060ff03821115610d3e57610d3e610fca565b019392505050565b600082610d5557610d55610fe0565b600160ff1b821460001984141615610d6f57610d6f610fca565b500590565b600082610d8357610d83610fe0565b500490565b80825b6001808611610d9a5750610dc5565b818704821115610dac57610dac610fca565b80861615610db957918102915b9490941c938002610d8b565b94509492505050565b6000610ad76000198484610deb565b6000610ad760001960ff8516845b600082610dfa57506001610ad7565b81610e0757506000610ad7565b8160018114610e1d5760028114610e2757610e54565b6001915050610ad7565b60ff841115610e3857610e38610fca565b6001841b915084821115610e4e57610e4e610fca565b50610ad7565b5060208310610133831016604e8410600b8410161715610e87575081810a83811115610e8257610e82610fca565b610ad7565b610e948484846001610d88565b808604821115610ea657610ea6610fca565b02949350505050565b60006001600160ff1b0381841382841380821686840486111615610ed557610ed5610fca565b600160ff1b84871282811687830589121615610ef357610ef3610fca565b858712925087820587128484161615610f0e57610f0e610fca565b87850587128184161615610f2457610f24610fca565b505050929093029392505050565b6000816000190483118215151615610f4c57610f4c610fca565b500290565b60008083128015600160ff1b850184121615610f6f57610f6f610fca565b6001600160ff1b0384018313811615610f8a57610f8a610fca565b50500390565b600082821015610fa257610fa2610fca565b500390565b600060ff821660ff841680821015610fc157610fc1610fca565b90039392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146100e257600080fd5b60ff811681146100e257600080fdfea2646970667358221220042f268ed341e72731b7f1c24907b2c942b06d83948f2423cc5b737d673febe164736f6c63430008020033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
