{
  "_format": "hh-sol-artifact-1",
  "contractName": "PerpV2LibraryV2",
  "sourceName": "contracts/protocol/integration/lib/PerpV2LibraryV2.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IVault",
          "name": "_vault",
          "type": "IVault"
        },
        {
          "internalType": "contract IERC20",
          "name": "_asset",
          "type": "IERC20"
        },
        {
          "internalType": "uint256",
          "name": "_amountNotional",
          "type": "uint256"
        }
      ],
      "name": "getDepositCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IClearingHouse",
          "name": "_clearingHouse",
          "type": "IClearingHouse"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBaseToQuote",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "isExactInput",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "oppositeAmountBound",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            },
            {
              "internalType": "bytes32",
              "name": "referralCode",
              "type": "bytes32"
            }
          ],
          "internalType": "struct IClearingHouse.OpenPositionParams",
          "name": "_params",
          "type": "tuple"
        }
      ],
      "name": "getOpenPositionCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IQuoter",
          "name": "_quoter",
          "type": "IQuoter"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBaseToQuote",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "isExactInput",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct IQuoter.SwapParams",
          "name": "_params",
          "type": "tuple"
        }
      ],
      "name": "getSwapCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IVault",
          "name": "_vault",
          "type": "IVault"
        },
        {
          "internalType": "contract IERC20",
          "name": "_asset",
          "type": "IERC20"
        },
        {
          "internalType": "uint256",
          "name": "_amountNotional",
          "type": "uint256"
        }
      ],
      "name": "getWithdrawCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x610d6f610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100a85760003560e01c806384e88afe1161007057806384e88afe14610140578063892d5a6e14610153578063d3a5c28514610180578063d4c2a2cd146101ae578063e815274e146101ce576100a8565b80630293a128146100ad578063178642a4146100d85780632130ef5e146100fa5780633f3876eb1461010d5780635567d1de14610120575b600080fd5b6100c06100bb366004610a5c565b6101ee565b6040516100cf93929190610b79565b60405180910390f35b8180156100e457600080fd5b506100f86100f3366004610a0c565b610240565b005b6100c061010836600461095a565b6102e1565b6100c061011b366004610924565b610330565b81801561012c57600080fd5b506100f861013b366004610a0c565b61037f565b6100c061014e366004610a5c565b610388565b81801561015f57600080fd5b5061017361016e3660046109ce565b6103da565b6040516100cf9190610c70565b81801561018c57600080fd5b506101a061019b366004610986565b61049b565b6040516100cf929190610cae565b8180156101ba57600080fd5b506101a06101c9366004610a9c565b61055b565b8180156101da57600080fd5b506101a06101e9366004610a9c565b6105e8565b6000806060808585604051602401610207929190610ba9565b60408051601f198184030181529190526020810180516001600160e01b03166311f9fbc960e21b17905296976000979650945050505050565b606061024d8484846101ee565b6040516347b7819960e11b81529093506001600160a01b0388169250638f6f033291506102839087906000908690600401610b79565b600060405180830381600087803b15801561029d57600080fd5b505af11580156102b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102d99190810190610898565b505050505050565b600080606080846040516024016102f89190610c2b565b60408051601f198184030181529190526020810180516001600160e01b0316630a856f9360e31b179052959660009695509350505050565b600080606080846040516024016103479190610bc2565b60408051601f198184030181529190526020810180516001600160e01b031663b6b1b6c360e01b179052959660009695509350505050565b606061024d8484845b60008060608085856040516024016103a1929190610ba9565b60408051601f198184030181529190526020810180516001600160e01b031663f3fef3a360e01b17905296976000979650945050505050565b6103e2610666565b60606103ee84846102e1565b925050506060856001600160a01b0316638f6f0332866000856040518463ffffffff1660e01b815260040161042593929190610b79565b600060405180830381600087803b15801561043f57600080fd5b505af1158015610453573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047b9190810190610898565b9050808060200190518101906104919190610ad3565b9695505050505050565b60008060606104aa8585610330565b925050506060866001600160a01b0316638f6f0332876000856040518463ffffffff1660e01b81526004016104e193929190610b79565b600060405180830381600087803b1580156104fb57600080fd5b505af115801561050f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105379190810190610898565b90508080602001905181019061054d9190610b2a565b935093505050935093915050565b60008061056661069e565b60405180610100016040528086602001516001600160a01b03168152602001866040015115151581526020018660400151151515815260200186606001518152602001866080015181526020016105bb610660565b815260006020820181905260409091015285519091506105dc90858361049b565b92509250509250929050565b6000806105f36106e2565b506040805160a0810182526020808701516001600160a01b0316825286830180511591830191909152511591810191909152606080860151908201526000608082015261063e610666565b855161064b9086846103da565b80516020909101519097909650945050505050565b60001990565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b8035801515811461072057600080fd5b92915050565b600060a08284031215610737578081fd5b61074160a0610cbc565b9050813561074e81610d13565b8152602082013561075e81610d13565b6020820152604082013561077181610d2b565b80604083015250606082013560608201526080820135608082015292915050565b60006101008083850312156107a5578182fd5b6107ae81610cbc565b91505081356107bc81610d13565b81526107cb8360208401610710565b60208201526107dd8360408401610710565b6040820152606082013560608201526080820135608082015260a082013560a082015260c082013561080e81610d13565b8060c08301525060e082013560e082015292915050565b600060a08284031215610836578081fd5b61084060a0610cbc565b9050813561084d81610d13565b8152602082013561085d81610d2b565b6020820152604082013561087081610d2b565b604082015260608281013590820152608082013561088d81610d13565b608082015292915050565b6000602082840312156108a9578081fd5b815167ffffffffffffffff808211156108c0578283fd5b81840185601f8201126108d1578384fd5b80519250818311156108e1578384fd5b6108f4601f8401601f1916602001610cbc565b915082825285602084830101111561090a578384fd5b61091b836020840160208401610ce3565b50949350505050565b6000806101208385031215610937578081fd5b823561094281610d13565b91506109518460208501610792565b90509250929050565b60008060c0838503121561096c578182fd5b823561097781610d13565b91506109518460208501610825565b6000806000610140848603121561099b578081fd5b83356109a681610d13565b925060208401356109b681610d13565b91506109c58560408601610792565b90509250925092565b600080600060e084860312156109e2578283fd5b83356109ed81610d13565b925060208401356109fd81610d13565b91506109c58560408601610825565b60008060008060808587031215610a21578182fd5b8435610a2c81610d13565b93506020850135610a3c81610d13565b92506040850135610a4c81610d13565b9396929550929360600135925050565b600080600060608486031215610a70578081fd5b8335610a7b81610d13565b92506020840135610a8b81610d13565b929592945050506040919091013590565b60008060c08385031215610aae578182fd5b610ab88484610726565b915060a0830135610ac881610d13565b809150509250929050565b600060a08284031215610ae4578081fd5b610aee60a0610cbc565b825181526020830151602082015260408301516040820152606083015160608201526080830151610b1e81610d13565b60808201529392505050565b60008060408385031215610b3c578182fd5b505080516020909101519092909150565b60008151808452610b65816020860160208601610ce3565b601f01601f19169290920160200192915050565b600060018060a01b038516825283602083015260606040830152610ba06060830184610b4d565b95945050505050565b6001600160a01b03929092168252602082015260400190565b60006101008201905060018060a01b03808451168352602084015115156020840152604084015115156040840152606084015160608401526080840151608084015260a084015160a08401528060c08501511660c08401525060e083015160e083015292915050565b81516001600160a01b03908116825260208084015115159083015260408084015115159083015260608084015190830152608092830151169181019190915260a00190565b815181526020808301519082015260408083015190820152606080830151908201526080918201516001600160a01b03169181019190915260a00190565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715610cdb57600080fd5b604052919050565b60005b83811015610cfe578181015183820152602001610ce6565b83811115610d0d576000848401525b50505050565b6001600160a01b0381168114610d2857600080fd5b50565b8015158114610d2857600080fdfea264697066735822122004ecf2816924c19c6e74f2b2b24683a56648bff2219cfc51c675d71c0c37100564736f6c634300060a0033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100a85760003560e01c806384e88afe1161007057806384e88afe14610140578063892d5a6e14610153578063d3a5c28514610180578063d4c2a2cd146101ae578063e815274e146101ce576100a8565b80630293a128146100ad578063178642a4146100d85780632130ef5e146100fa5780633f3876eb1461010d5780635567d1de14610120575b600080fd5b6100c06100bb366004610a5c565b6101ee565b6040516100cf93929190610b79565b60405180910390f35b8180156100e457600080fd5b506100f86100f3366004610a0c565b610240565b005b6100c061010836600461095a565b6102e1565b6100c061011b366004610924565b610330565b81801561012c57600080fd5b506100f861013b366004610a0c565b61037f565b6100c061014e366004610a5c565b610388565b81801561015f57600080fd5b5061017361016e3660046109ce565b6103da565b6040516100cf9190610c70565b81801561018c57600080fd5b506101a061019b366004610986565b61049b565b6040516100cf929190610cae565b8180156101ba57600080fd5b506101a06101c9366004610a9c565b61055b565b8180156101da57600080fd5b506101a06101e9366004610a9c565b6105e8565b6000806060808585604051602401610207929190610ba9565b60408051601f198184030181529190526020810180516001600160e01b03166311f9fbc960e21b17905296976000979650945050505050565b606061024d8484846101ee565b6040516347b7819960e11b81529093506001600160a01b0388169250638f6f033291506102839087906000908690600401610b79565b600060405180830381600087803b15801561029d57600080fd5b505af11580156102b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102d99190810190610898565b505050505050565b600080606080846040516024016102f89190610c2b565b60408051601f198184030181529190526020810180516001600160e01b0316630a856f9360e31b179052959660009695509350505050565b600080606080846040516024016103479190610bc2565b60408051601f198184030181529190526020810180516001600160e01b031663b6b1b6c360e01b179052959660009695509350505050565b606061024d8484845b60008060608085856040516024016103a1929190610ba9565b60408051601f198184030181529190526020810180516001600160e01b031663f3fef3a360e01b17905296976000979650945050505050565b6103e2610666565b60606103ee84846102e1565b925050506060856001600160a01b0316638f6f0332866000856040518463ffffffff1660e01b815260040161042593929190610b79565b600060405180830381600087803b15801561043f57600080fd5b505af1158015610453573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047b9190810190610898565b9050808060200190518101906104919190610ad3565b9695505050505050565b60008060606104aa8585610330565b925050506060866001600160a01b0316638f6f0332876000856040518463ffffffff1660e01b81526004016104e193929190610b79565b600060405180830381600087803b1580156104fb57600080fd5b505af115801561050f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105379190810190610898565b90508080602001905181019061054d9190610b2a565b935093505050935093915050565b60008061056661069e565b60405180610100016040528086602001516001600160a01b03168152602001866040015115151581526020018660400151151515815260200186606001518152602001866080015181526020016105bb610660565b815260006020820181905260409091015285519091506105dc90858361049b565b92509250509250929050565b6000806105f36106e2565b506040805160a0810182526020808701516001600160a01b0316825286830180511591830191909152511591810191909152606080860151908201526000608082015261063e610666565b855161064b9086846103da565b80516020909101519097909650945050505050565b60001990565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b8035801515811461072057600080fd5b92915050565b600060a08284031215610737578081fd5b61074160a0610cbc565b9050813561074e81610d13565b8152602082013561075e81610d13565b6020820152604082013561077181610d2b565b80604083015250606082013560608201526080820135608082015292915050565b60006101008083850312156107a5578182fd5b6107ae81610cbc565b91505081356107bc81610d13565b81526107cb8360208401610710565b60208201526107dd8360408401610710565b6040820152606082013560608201526080820135608082015260a082013560a082015260c082013561080e81610d13565b8060c08301525060e082013560e082015292915050565b600060a08284031215610836578081fd5b61084060a0610cbc565b9050813561084d81610d13565b8152602082013561085d81610d2b565b6020820152604082013561087081610d2b565b604082015260608281013590820152608082013561088d81610d13565b608082015292915050565b6000602082840312156108a9578081fd5b815167ffffffffffffffff808211156108c0578283fd5b81840185601f8201126108d1578384fd5b80519250818311156108e1578384fd5b6108f4601f8401601f1916602001610cbc565b915082825285602084830101111561090a578384fd5b61091b836020840160208401610ce3565b50949350505050565b6000806101208385031215610937578081fd5b823561094281610d13565b91506109518460208501610792565b90509250929050565b60008060c0838503121561096c578182fd5b823561097781610d13565b91506109518460208501610825565b6000806000610140848603121561099b578081fd5b83356109a681610d13565b925060208401356109b681610d13565b91506109c58560408601610792565b90509250925092565b600080600060e084860312156109e2578283fd5b83356109ed81610d13565b925060208401356109fd81610d13565b91506109c58560408601610825565b60008060008060808587031215610a21578182fd5b8435610a2c81610d13565b93506020850135610a3c81610d13565b92506040850135610a4c81610d13565b9396929550929360600135925050565b600080600060608486031215610a70578081fd5b8335610a7b81610d13565b92506020840135610a8b81610d13565b929592945050506040919091013590565b60008060c08385031215610aae578182fd5b610ab88484610726565b915060a0830135610ac881610d13565b809150509250929050565b600060a08284031215610ae4578081fd5b610aee60a0610cbc565b825181526020830151602082015260408301516040820152606083015160608201526080830151610b1e81610d13565b60808201529392505050565b60008060408385031215610b3c578182fd5b505080516020909101519092909150565b60008151808452610b65816020860160208601610ce3565b601f01601f19169290920160200192915050565b600060018060a01b038516825283602083015260606040830152610ba06060830184610b4d565b95945050505050565b6001600160a01b03929092168252602082015260400190565b60006101008201905060018060a01b03808451168352602084015115156020840152604084015115156040840152606084015160608401526080840151608084015260a084015160a08401528060c08501511660c08401525060e083015160e083015292915050565b81516001600160a01b03908116825260208084015115159083015260408084015115159083015260608084015190830152608092830151169181019190915260a00190565b815181526020808301519082015260408083015190820152606080830151908201526080918201516001600160a01b03169181019190915260a00190565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715610cdb57600080fd5b604052919050565b60005b83811015610cfe578181015183820152602001610ce6565b83811115610d0d576000848401525b50505050565b6001600160a01b0381168114610d2857600080fd5b50565b8015158114610d2857600080fdfea264697066735822122004ecf2816924c19c6e74f2b2b24683a56648bff2219cfc51c675d71c0c37100564736f6c634300060a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
