{
  "_format": "hh-sol-artifact-1",
  "contractName": "MockMarketMath",
  "sourceName": "contracts/mock/MockMarketMath.sol",
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "weight",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "balance",
              "type": "uint256"
            }
          ],
          "internalType": "struct TokenReserve",
          "name": "inTokenReserve",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "weight",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "balance",
              "type": "uint256"
            }
          ],
          "internalType": "struct TokenReserve",
          "name": "outTokenReserve",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "exactOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "swapFee",
          "type": "uint256"
        }
      ],
      "name": "calcExactIn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "weight",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "balance",
              "type": "uint256"
            }
          ],
          "internalType": "struct TokenReserve",
          "name": "inTokenReserve",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "weight",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "balance",
              "type": "uint256"
            }
          ],
          "internalType": "struct TokenReserve",
          "name": "outTokenReserve",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "exactIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "swapFee",
          "type": "uint256"
        }
      ],
      "name": "calcExactOut",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "inAmount",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "weight",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "balance",
              "type": "uint256"
            }
          ],
          "internalType": "struct TokenReserve",
          "name": "inTokenReserve",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "swapFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalSupplyLp",
          "type": "uint256"
        }
      ],
      "name": "calcOutAmountLp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "weight",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "balance",
              "type": "uint256"
            }
          ],
          "internalType": "struct TokenReserve",
          "name": "outTokenReserve",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "totalSupplyLp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "inLp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "swapFee",
          "type": "uint256"
        }
      ],
      "name": "calcOutAmountToken",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50610aa6806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806327433e9e1461005157806374b504b91461007a57806376de56df1461008d578063ff22311c146100a0575b600080fd5b61006461005f36600461093e565b6100b3565b6040516100719190610a46565b60405180910390f35b6100646100883660046109ba565b6100ca565b61006461009b36600461093e565b6100d8565b6100646100ae366004610981565b6100e6565b60006100c1858585856100f4565b95945050505050565b60006100c185858585610183565b60006100c185858585610220565b60006100c1858585856102b6565b6000806101098660000151866000015161034b565b9050600061011b600160281b8561037c565b905061012785826103d9565b60208801519091506000906101459061014081856103fc565b61034b565b905060006101538285610456565b90506000610165600160281b8361037c565b90506101758960200151826103d9565b9a9950505050505050505050565b8251600090816101a061019a600160281b8461037c565b866103d9565b905060006101bb886101b6600160281b8561037c565b6103d9565b905060006101d68289602001516103fc90919063ffffffff16565b905060006101e8828a6020015161034b565b905060006101f68287610456565b90506000610204828a6103d9565b9050610210818a61037c565b9c9b505050505050505050505050565b6000806102358560000151876000015161034b565b9050600061025085876020015161037c90919063ffffffff16565b9050600061026287602001518361034b565b905060006102708285610456565b905061028081600160281b61037c565b9050610290600160281b8761037c565b94506102a96102a38a60200151836103d9565b8661034b565b9998505050505050505050565b8351600090816102c6868661037c565b905060006102d4828861034b565b905060006102ef826102ea600160281b8761034b565b610456565b90506000610301828b602001516103d9565b9050600061031c828c6020015161037c90919063ffffffff16565b90506000610337610331600160281b8961037c565b8a6103d9565b9050610210826101b6600160281b8461037c565b60006103738261036d61036286600160281b61051d565b6002865b04906103fc565b90610576565b90505b92915050565b6000828211156103d3576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000610373600160281b61036d6103f0868661051d565b6002600160281b610366565b600082820183811015610373576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000816104685750600160281b610376565b8261047557506000610376565b6000610480836105dd565b9050808303600061049986610494846105e7565b6105f1565b90506000600160281b8710156104e55760006104ca856101b66104c0600160281b8c61034b565b600160281b610644565b90506104dd600160281b610140836106af565b915050610508565b60006104f9856101b68a600160281b610644565b9050610504816106af565b9150505b61051282826103d9565b979650505050505050565b60008261052c57506000610376565b8282028284828161053957fe5b04146103735760405162461bcd60e51b8152600401808060200182810382526021815260200180610a506021913960400191505060405180910390fd5b60008082116105cc576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816105d557fe5b049392505050565b64ffffffffff1690565b600160281b900490565b6000806002830661060657600160281b610608565b835b90506002830492505b82156103735761062184856103d9565b935060028306156106395761063681856103d9565b90505b600283049250610611565b6000690177c17eb2ae5edd211c69021e19e0c9bab2400000826106678686610710565b90506106738382610817565b156106995760405162461bcd60e51b8152600401610690906109f5565b60405180910390fd5b81818402816106a457fe5b049695505050505050565b600080600160281b815b918101916106d1826101b6876101406001860161083c565b9150816106dd57610707565b806101f414156106ff5760405162461bcd60e51b815260040161069090610a19565b6001016106b9565b50909392505050565b60008082841115610728576107258484610845565b90505b600160c81b600160281b820211156107525760405162461bcd60e51b8152600401610690906109f5565b61076084600160281b610817565b1561077d5760405162461bcd60e51b8152600401610690906109f5565b61078b81600160281b610817565b156107a85760405162461bcd60e51b8152600401610690906109f5565b6107b56001821b84610817565b156107d25760405162461bcd60e51b8152600401610690906109f5565b600083821b600160281b8602816107e557fe5b04905060006107f382610878565b9050600160c81b81111561080357fe5b600160281b92909202909101949350505050565b60008161082657506000610376565b82828385028161083257fe5b0414159392505050565b600160281b0290565b6000808083858161085257fe5b0490505b801561086c576001919091019060029004610856565b50600019019392505050565b600080600160281b650200000000008180861080159061089757508186105b6108b35760405162461bcd60e51b8152600401610690906109f5565b60285b80156108eb5783878802816108c757fe5b0496506002820491508287106108e257600287049650938101935b600019016108b6565b509295945050505050565b600060408284031215610907578081fd5b6040516040810181811067ffffffffffffffff8211171561092457fe5b604052823581526020928301359281019290925250919050565b60008060008060c08587031215610953578384fd5b61095d86866108f6565b935061096c86604087016108f6565b939693955050505060808201359160a0013590565b60008060008060a08587031215610996578384fd5b6109a086866108f6565b966040860135965060608601359560800135945092505050565b60008060008060a085870312156109cf578384fd5b843593506109e086602087016108f6565b93969395505050506060820135916080013590565b6020808252600a908201526926a0aa242fa2a92927a960b11b604082015260600190565b60208082526013908201527252504f57455f534c4f575f434f4e564552474560681b604082015260600190565b9081526020019056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220c6264ed8270ca954886c80fb29688deb6c2153a6b9e1066789f314acb42f1bd364736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806327433e9e1461005157806374b504b91461007a57806376de56df1461008d578063ff22311c146100a0575b600080fd5b61006461005f36600461093e565b6100b3565b6040516100719190610a46565b60405180910390f35b6100646100883660046109ba565b6100ca565b61006461009b36600461093e565b6100d8565b6100646100ae366004610981565b6100e6565b60006100c1858585856100f4565b95945050505050565b60006100c185858585610183565b60006100c185858585610220565b60006100c1858585856102b6565b6000806101098660000151866000015161034b565b9050600061011b600160281b8561037c565b905061012785826103d9565b60208801519091506000906101459061014081856103fc565b61034b565b905060006101538285610456565b90506000610165600160281b8361037c565b90506101758960200151826103d9565b9a9950505050505050505050565b8251600090816101a061019a600160281b8461037c565b866103d9565b905060006101bb886101b6600160281b8561037c565b6103d9565b905060006101d68289602001516103fc90919063ffffffff16565b905060006101e8828a6020015161034b565b905060006101f68287610456565b90506000610204828a6103d9565b9050610210818a61037c565b9c9b505050505050505050505050565b6000806102358560000151876000015161034b565b9050600061025085876020015161037c90919063ffffffff16565b9050600061026287602001518361034b565b905060006102708285610456565b905061028081600160281b61037c565b9050610290600160281b8761037c565b94506102a96102a38a60200151836103d9565b8661034b565b9998505050505050505050565b8351600090816102c6868661037c565b905060006102d4828861034b565b905060006102ef826102ea600160281b8761034b565b610456565b90506000610301828b602001516103d9565b9050600061031c828c6020015161037c90919063ffffffff16565b90506000610337610331600160281b8961037c565b8a6103d9565b9050610210826101b6600160281b8461037c565b60006103738261036d61036286600160281b61051d565b6002865b04906103fc565b90610576565b90505b92915050565b6000828211156103d3576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000610373600160281b61036d6103f0868661051d565b6002600160281b610366565b600082820183811015610373576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000816104685750600160281b610376565b8261047557506000610376565b6000610480836105dd565b9050808303600061049986610494846105e7565b6105f1565b90506000600160281b8710156104e55760006104ca856101b66104c0600160281b8c61034b565b600160281b610644565b90506104dd600160281b610140836106af565b915050610508565b60006104f9856101b68a600160281b610644565b9050610504816106af565b9150505b61051282826103d9565b979650505050505050565b60008261052c57506000610376565b8282028284828161053957fe5b04146103735760405162461bcd60e51b8152600401808060200182810382526021815260200180610a506021913960400191505060405180910390fd5b60008082116105cc576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816105d557fe5b049392505050565b64ffffffffff1690565b600160281b900490565b6000806002830661060657600160281b610608565b835b90506002830492505b82156103735761062184856103d9565b935060028306156106395761063681856103d9565b90505b600283049250610611565b6000690177c17eb2ae5edd211c69021e19e0c9bab2400000826106678686610710565b90506106738382610817565b156106995760405162461bcd60e51b8152600401610690906109f5565b60405180910390fd5b81818402816106a457fe5b049695505050505050565b600080600160281b815b918101916106d1826101b6876101406001860161083c565b9150816106dd57610707565b806101f414156106ff5760405162461bcd60e51b815260040161069090610a19565b6001016106b9565b50909392505050565b60008082841115610728576107258484610845565b90505b600160c81b600160281b820211156107525760405162461bcd60e51b8152600401610690906109f5565b61076084600160281b610817565b1561077d5760405162461bcd60e51b8152600401610690906109f5565b61078b81600160281b610817565b156107a85760405162461bcd60e51b8152600401610690906109f5565b6107b56001821b84610817565b156107d25760405162461bcd60e51b8152600401610690906109f5565b600083821b600160281b8602816107e557fe5b04905060006107f382610878565b9050600160c81b81111561080357fe5b600160281b92909202909101949350505050565b60008161082657506000610376565b82828385028161083257fe5b0414159392505050565b600160281b0290565b6000808083858161085257fe5b0490505b801561086c576001919091019060029004610856565b50600019019392505050565b600080600160281b650200000000008180861080159061089757508186105b6108b35760405162461bcd60e51b8152600401610690906109f5565b60285b80156108eb5783878802816108c757fe5b0496506002820491508287106108e257600287049650938101935b600019016108b6565b509295945050505050565b600060408284031215610907578081fd5b6040516040810181811067ffffffffffffffff8211171561092457fe5b604052823581526020928301359281019290925250919050565b60008060008060c08587031215610953578384fd5b61095d86866108f6565b935061096c86604087016108f6565b939693955050505060808201359160a0013590565b60008060008060a08587031215610996578384fd5b6109a086866108f6565b966040860135965060608601359560800135945092505050565b60008060008060a085870312156109cf578384fd5b843593506109e086602087016108f6565b93969395505050506060820135916080013590565b6020808252600a908201526926a0aa242fa2a92927a960b11b604082015260600190565b60208082526013908201527252504f57455f534c4f575f434f4e564552474560681b604082015260600190565b9081526020019056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220c6264ed8270ca954886c80fb29688deb6c2153a6b9e1066789f314acb42f1bd364736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
