{
  "_format": "hh-sol-artifact-1",
  "contractName": "ExampleSlidingWindowOracle",
  "sourceName": "contracts/soma/SomaSwap/examples/ExampleSlidingWindowOracle.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "factory_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "windowSize_",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "granularity_",
          "type": "uint8"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "consult",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "granularity",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "observationIndexOf",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "index",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "pairObservations",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "price0Cumulative",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "price1Cumulative",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "periodSize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "update",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "windowSize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6101006040523480156200001257600080fd5b506040516200147a3803806200147a833981016040819052620000359162000135565b60018160ff16116200008e5760405162461bcd60e51b815260206004820181905260248201527f536c6964696e6757696e646f774f7261636c653a204752414e554c415249545960448201526064015b60405180910390fd5b8160ff82166200009f81836200018d565b60e0819052620000b09190620001b0565b14620001185760405162461bcd60e51b815260206004820152603060248201527f536c6964696e6757696e646f774f7261636c653a2057494e444f575f4e4f545f60448201526f4556454e4c595f444956495349424c4560801b606482015260840162000085565b6001600160a01b0390921660805260a05260ff1660c052620001dc565b6000806000606084860312156200014b57600080fd5b83516001600160a01b03811681146200016357600080fd5b60208501516040860151919450925060ff811681146200018257600080fd5b809150509250925092565b600082620001ab57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417620001d657634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c05160e0516112206200025a600039600081816101ad015281816102b40152818161051d0152610573015260008181609201528181610463015281816105a1015261074001526000818160d00152818161022001526102e0015260008181610146015281816101d7015261041e01526112206000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c45a01551161005b578063c45a015514610141578063c640752d14610180578063dbaad32f14610195578063e4463eb2146101a857600080fd5b8063556f0dc71461008d5780638a14117a146100cb5780638c86f1e414610100578063bfcc8e4214610113575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6100f27f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100c2565b6100f261010e366004610f9d565b6101cf565b610126610121366004610fdf565b6103d5565b604080519384526020840192909252908201526060016100c2565b6101687f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c2565b61019361018e36600461100b565b610417565b005b6100b46101a3366004611044565b61056b565b6100f27f000000000000000000000000000000000000000000000000000000000000000081565b6000806101fd7f000000000000000000000000000000000000000000000000000000000000000086856105c7565b9050600061020a8261072e565b805490915060009061021c9042611073565b90507f00000000000000000000000000000000000000000000000000000000000000008111156102af5760405162461bcd60e51b815260206004820152603360248201527f536c6964696e6757696e646f774f7261636c653a204d495353494e475f4849536044820152722a27a924a1a0a62fa7a129a2a92b20aa24a7a760691b60648201526084015b60405180910390fd5b6102da7f00000000000000000000000000000000000000000000000000000000000000006002611086565b610304907f0000000000000000000000000000000000000000000000000000000000000000611073565b8110156103685760405162461bcd60e51b815260206004820152602c60248201527f536c6964696e6757696e646f774f7261636c653a20554e45585045435445445f60448201526b1512535157d153105414d15160a21b60648201526084016102a6565b600080610374856107bc565b509150915060006103858a896109b3565b509050896001600160a01b0316816001600160a01b0316036103be576103b1856001015484868c610aa8565b96505050505050506103ce565b6103b1856002015483868c610aa8565b9392505050565b600060205281600052604060002081815481106103f157600080fd5b600091825260209091206003909102018054600182015460029092015490935090915083565b60006104447f000000000000000000000000000000000000000000000000000000000000000084846105c7565b6001600160a01b0381166000908152602081905260409020549091505b7f000000000000000000000000000000000000000000000000000000000000000060ff168110156104bd576001600160a01b03821660009081526020819052604081208054600101815590526104b68161109d565b9050610461565b5060006104c94261056b565b6001600160a01b03831660009081526020819052604081208054929350909160ff84169081106104fb576104fb6110b6565b60009182526020822060039091020180549092506105199042611073565b90507f00000000000000000000000000000000000000000000000000000000000000008111156105635760008061054f866107bc565b504286556001860191909155600285015550505b505050505050565b6000806105987f0000000000000000000000000000000000000000000000000000000000000000846110e2565b90506103ce60ff7f000000000000000000000000000000000000000000000000000000000000000016826110f6565b60008060006105d685856109b3565b91509150610724866001600160a01b0316632dd310006040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063f919061110a565b876001600160a01b031663257671f56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a19190611127565b60408051606087811b6bffffffffffffffffffffffff1990811660208085019190915288831b82166034850152845160288186030181526048850186528051908201206001600160f81b031960688601529690921b166069830152607d820194909452609d808201939093528151808203909301835260bd019052805191012090565b9695505050505050565b60008061073a4261056b565b905060007f000000000000000000000000000000000000000000000000000000000000000061076a836001611140565b6107749190611159565b6001600160a01b038516600090815260208190526040902080549192509060ff83169081106107a5576107a56110b6565b906000526020600020906003020192505050919050565b60008060006107c9610b01565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082d9190611127565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190611127565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa9190611197565b9250925092508363ffffffff168163ffffffff16146109a957600061091f82866111dc565b90508063ffffffff16610944846001600160701b0316866001600160701b0316610b17565b5161095891906001600160e01b0316611086565b6109629088611200565b96508063ffffffff16610987856001600160701b0316856001600160701b0316610b17565b5161099b91906001600160e01b0316611086565b6109a59087611200565b9550505b5050509193909250565b600080826001600160a01b0316846001600160a01b031603610a235760405162461bcd60e51b8152602060048201526024808201527f536f6d61537761704c6962726172793a204944454e544943414c5f41444452456044820152635353455360e01b60648201526084016102a6565b826001600160a01b0316846001600160a01b031610610a43578284610a46565b83835b90925090506001600160a01b038216610aa15760405162461bcd60e51b815260206004820152601d60248201527f536f6d61537761704c6962726172793a205a45524f5f4144445245535300000060448201526064016102a6565b9250929050565b6000806040518060200160405280858888610ac39190611073565b610acd91906110e2565b6001600160e01b031690529050610aee610ae78285610c50565b5160701c90565b6001600160901b03169695505050505050565b6000610b12640100000000426110f6565b905090565b60408051602081019091526000815260008211610b855760405162461bcd60e51b815260206004820152602660248201527f4669786564506f696e743a3a6672616374696f6e3a206469766973696f6e206260448201526579207a65726f60d01b60648201526084016102a6565b82600003610ba25750604080516020810190915260008152610c4a565b6001600160901b038311610c39576000610bc083607086901b6110e2565b90506001600160e01b03811115610c195760405162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f77000060448201526064016102a6565b6040518060200160405280826001600160e01b0316815250915050610c4a565b6000610bc084600160701b85610cee565b92915050565b6040805160208101909152600081526000821580610c8d575083516001600160e01b031683610c7f8183611086565b9250610c8b90836110e2565b145b610cd95760405162461bcd60e51b815260206004820152601960248201527f4669786564506f696e743a3a6d756c3a206f766572666c6f770000000000000060448201526064016102a6565b60408051602081019091529081529392505050565b6000806000610cfd8686610db9565b9150915060008480610d1157610d116110cc565b868809905082811115610d2c57610d29600183611073565b91505b610d368184611073565b925081600003610d5457610d4a85846110e2565b93505050506103ce565b848210610da35760405162461bcd60e51b815260206004820152601a60248201527f46756c6c4d6174683a2046554c4c4449565f4f564552464c4f5700000000000060448201526064016102a6565b610dae838387610dfb565b979650505050505050565b600080806000198486099050610dcf8486611086565b9250610ddb8382611073565b915082811015610df357610df0600183611073565b91505b509250929050565b600080610e0783610f6c565b83169050610e1581846110e2565b9250610e2181866110e2565b945080610e2d82610f6c565b610e3791906110e2565b610e42906001611200565b610e4c9085611086565b610e569086611200565b94506001610e648185611086565b610e6f906002611073565b610e799082611086565b9050610e858185611086565b610e90906002611073565b610e9a9082611086565b9050610ea68185611086565b610eb1906002611073565b610ebb9082611086565b9050610ec78185611086565b610ed2906002611073565b610edc9082611086565b9050610ee88185611086565b610ef3906002611073565b610efd9082611086565b9050610f098185611086565b610f14906002611073565b610f1e9082611086565b9050610f2a8185611086565b610f35906002611073565b610f3f9082611086565b9050610f4b8185611086565b610f56906002611073565b610f609082611086565b90506107248187611086565b6000610f7a82600019611073565b610c4a906001611200565b6001600160a01b0381168114610f9a57600080fd5b50565b600080600060608486031215610fb257600080fd5b8335610fbd81610f85565b9250602084013591506040840135610fd481610f85565b809150509250925092565b60008060408385031215610ff257600080fd5b8235610ffd81610f85565b946020939093013593505050565b6000806040838503121561101e57600080fd5b823561102981610f85565b9150602083013561103981610f85565b809150509250929050565b60006020828403121561105657600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c4a57610c4a61105d565b8082028115828204841417610c4a57610c4a61105d565b6000600182016110af576110af61105d565b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826110f1576110f16110cc565b500490565b600082611105576111056110cc565b500690565b60006020828403121561111c57600080fd5b81516103ce81610f85565b60006020828403121561113957600080fd5b5051919050565b60ff8181168382160190811115610c4a57610c4a61105d565b600060ff83168061116c5761116c6110cc565b8060ff84160691505092915050565b80516001600160701b038116811461119257600080fd5b919050565b6000806000606084860312156111ac57600080fd5b6111b58461117b565b92506111c36020850161117b565b9150604084015163ffffffff81168114610fd457600080fd5b63ffffffff8281168282160390808211156111f9576111f961105d565b5092915050565b80820180821115610c4a57610c4a61105d56fea164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063c45a01551161005b578063c45a015514610141578063c640752d14610180578063dbaad32f14610195578063e4463eb2146101a857600080fd5b8063556f0dc71461008d5780638a14117a146100cb5780638c86f1e414610100578063bfcc8e4214610113575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6100f27f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100c2565b6100f261010e366004610f9d565b6101cf565b610126610121366004610fdf565b6103d5565b604080519384526020840192909252908201526060016100c2565b6101687f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c2565b61019361018e36600461100b565b610417565b005b6100b46101a3366004611044565b61056b565b6100f27f000000000000000000000000000000000000000000000000000000000000000081565b6000806101fd7f000000000000000000000000000000000000000000000000000000000000000086856105c7565b9050600061020a8261072e565b805490915060009061021c9042611073565b90507f00000000000000000000000000000000000000000000000000000000000000008111156102af5760405162461bcd60e51b815260206004820152603360248201527f536c6964696e6757696e646f774f7261636c653a204d495353494e475f4849536044820152722a27a924a1a0a62fa7a129a2a92b20aa24a7a760691b60648201526084015b60405180910390fd5b6102da7f00000000000000000000000000000000000000000000000000000000000000006002611086565b610304907f0000000000000000000000000000000000000000000000000000000000000000611073565b8110156103685760405162461bcd60e51b815260206004820152602c60248201527f536c6964696e6757696e646f774f7261636c653a20554e45585045435445445f60448201526b1512535157d153105414d15160a21b60648201526084016102a6565b600080610374856107bc565b509150915060006103858a896109b3565b509050896001600160a01b0316816001600160a01b0316036103be576103b1856001015484868c610aa8565b96505050505050506103ce565b6103b1856002015483868c610aa8565b9392505050565b600060205281600052604060002081815481106103f157600080fd5b600091825260209091206003909102018054600182015460029092015490935090915083565b60006104447f000000000000000000000000000000000000000000000000000000000000000084846105c7565b6001600160a01b0381166000908152602081905260409020549091505b7f000000000000000000000000000000000000000000000000000000000000000060ff168110156104bd576001600160a01b03821660009081526020819052604081208054600101815590526104b68161109d565b9050610461565b5060006104c94261056b565b6001600160a01b03831660009081526020819052604081208054929350909160ff84169081106104fb576104fb6110b6565b60009182526020822060039091020180549092506105199042611073565b90507f00000000000000000000000000000000000000000000000000000000000000008111156105635760008061054f866107bc565b504286556001860191909155600285015550505b505050505050565b6000806105987f0000000000000000000000000000000000000000000000000000000000000000846110e2565b90506103ce60ff7f000000000000000000000000000000000000000000000000000000000000000016826110f6565b60008060006105d685856109b3565b91509150610724866001600160a01b0316632dd310006040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063f919061110a565b876001600160a01b031663257671f56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a19190611127565b60408051606087811b6bffffffffffffffffffffffff1990811660208085019190915288831b82166034850152845160288186030181526048850186528051908201206001600160f81b031960688601529690921b166069830152607d820194909452609d808201939093528151808203909301835260bd019052805191012090565b9695505050505050565b60008061073a4261056b565b905060007f000000000000000000000000000000000000000000000000000000000000000061076a836001611140565b6107749190611159565b6001600160a01b038516600090815260208190526040902080549192509060ff83169081106107a5576107a56110b6565b906000526020600020906003020192505050919050565b60008060006107c9610b01565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082d9190611127565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190611127565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa9190611197565b9250925092508363ffffffff168163ffffffff16146109a957600061091f82866111dc565b90508063ffffffff16610944846001600160701b0316866001600160701b0316610b17565b5161095891906001600160e01b0316611086565b6109629088611200565b96508063ffffffff16610987856001600160701b0316856001600160701b0316610b17565b5161099b91906001600160e01b0316611086565b6109a59087611200565b9550505b5050509193909250565b600080826001600160a01b0316846001600160a01b031603610a235760405162461bcd60e51b8152602060048201526024808201527f536f6d61537761704c6962726172793a204944454e544943414c5f41444452456044820152635353455360e01b60648201526084016102a6565b826001600160a01b0316846001600160a01b031610610a43578284610a46565b83835b90925090506001600160a01b038216610aa15760405162461bcd60e51b815260206004820152601d60248201527f536f6d61537761704c6962726172793a205a45524f5f4144445245535300000060448201526064016102a6565b9250929050565b6000806040518060200160405280858888610ac39190611073565b610acd91906110e2565b6001600160e01b031690529050610aee610ae78285610c50565b5160701c90565b6001600160901b03169695505050505050565b6000610b12640100000000426110f6565b905090565b60408051602081019091526000815260008211610b855760405162461bcd60e51b815260206004820152602660248201527f4669786564506f696e743a3a6672616374696f6e3a206469766973696f6e206260448201526579207a65726f60d01b60648201526084016102a6565b82600003610ba25750604080516020810190915260008152610c4a565b6001600160901b038311610c39576000610bc083607086901b6110e2565b90506001600160e01b03811115610c195760405162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f77000060448201526064016102a6565b6040518060200160405280826001600160e01b0316815250915050610c4a565b6000610bc084600160701b85610cee565b92915050565b6040805160208101909152600081526000821580610c8d575083516001600160e01b031683610c7f8183611086565b9250610c8b90836110e2565b145b610cd95760405162461bcd60e51b815260206004820152601960248201527f4669786564506f696e743a3a6d756c3a206f766572666c6f770000000000000060448201526064016102a6565b60408051602081019091529081529392505050565b6000806000610cfd8686610db9565b9150915060008480610d1157610d116110cc565b868809905082811115610d2c57610d29600183611073565b91505b610d368184611073565b925081600003610d5457610d4a85846110e2565b93505050506103ce565b848210610da35760405162461bcd60e51b815260206004820152601a60248201527f46756c6c4d6174683a2046554c4c4449565f4f564552464c4f5700000000000060448201526064016102a6565b610dae838387610dfb565b979650505050505050565b600080806000198486099050610dcf8486611086565b9250610ddb8382611073565b915082811015610df357610df0600183611073565b91505b509250929050565b600080610e0783610f6c565b83169050610e1581846110e2565b9250610e2181866110e2565b945080610e2d82610f6c565b610e3791906110e2565b610e42906001611200565b610e4c9085611086565b610e569086611200565b94506001610e648185611086565b610e6f906002611073565b610e799082611086565b9050610e858185611086565b610e90906002611073565b610e9a9082611086565b9050610ea68185611086565b610eb1906002611073565b610ebb9082611086565b9050610ec78185611086565b610ed2906002611073565b610edc9082611086565b9050610ee88185611086565b610ef3906002611073565b610efd9082611086565b9050610f098185611086565b610f14906002611073565b610f1e9082611086565b9050610f2a8185611086565b610f35906002611073565b610f3f9082611086565b9050610f4b8185611086565b610f56906002611073565b610f609082611086565b90506107248187611086565b6000610f7a82600019611073565b610c4a906001611200565b6001600160a01b0381168114610f9a57600080fd5b50565b600080600060608486031215610fb257600080fd5b8335610fbd81610f85565b9250602084013591506040840135610fd481610f85565b809150509250925092565b60008060408385031215610ff257600080fd5b8235610ffd81610f85565b946020939093013593505050565b6000806040838503121561101e57600080fd5b823561102981610f85565b9150602083013561103981610f85565b809150509250929050565b60006020828403121561105657600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c4a57610c4a61105d565b8082028115828204841417610c4a57610c4a61105d565b6000600182016110af576110af61105d565b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826110f1576110f16110cc565b500490565b600082611105576111056110cc565b500690565b60006020828403121561111c57600080fd5b81516103ce81610f85565b60006020828403121561113957600080fd5b5051919050565b60ff8181168382160190811115610c4a57610c4a61105d565b600060ff83168061116c5761116c6110cc565b8060ff84160691505092915050565b80516001600160701b038116811461119257600080fd5b919050565b6000806000606084860312156111ac57600080fd5b6111b58461117b565b92506111c36020850161117b565b9150604084015163ffffffff81168114610fd457600080fd5b63ffffffff8281168282160390808211156111f9576111f961105d565b5092915050565b80820180821115610c4a57610c4a61105d56fea164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
