{
  "_format": "hh-sol-artifact-1",
  "contractName": "MockUniswapV3Pool",
  "sourceName": "contracts/mocks/MockUniswapV3Pool.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token0_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1_",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee_",
          "type": "uint24"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "fee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "observationCardinalityNext",
          "type": "uint16"
        }
      ],
      "name": "increaseObservationCardinalityNext",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint112",
          "name": "baseReserve",
          "type": "uint112"
        },
        {
          "internalType": "uint112",
          "name": "quoteReserve",
          "type": "uint112"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "liquidity",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "observations",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "blockTimestamp",
          "type": "uint32"
        },
        {
          "internalType": "int56",
          "name": "tickCumulative",
          "type": "int56"
        },
        {
          "internalType": "uint160",
          "name": "secondsPerLiquidityCumulativeX128",
          "type": "uint160"
        },
        {
          "internalType": "bool",
          "name": "initialized",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32[]",
          "name": "secondsAgos",
          "type": "uint32[]"
        }
      ],
      "name": "observe",
      "outputs": [
        {
          "internalType": "int56[]",
          "name": "tickCumulatives",
          "type": "int56[]"
        },
        {
          "internalType": "uint160[]",
          "name": "secondsPerLiquidityCumulativeX128s",
          "type": "uint160[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint128",
          "name": "liquidity_",
          "type": "uint128"
        }
      ],
      "name": "setLiquidity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint112",
          "name": "baseReserve",
          "type": "uint112"
        },
        {
          "internalType": "uint112",
          "name": "quoteReserve",
          "type": "uint112"
        }
      ],
      "name": "setSqrtPriceX96",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "slot0",
      "outputs": [
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        },
        {
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        },
        {
          "internalType": "uint16",
          "name": "observationIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "observationCardinality",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "observationCardinalityNext",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "feeProtocol",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "unlocked",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "zeroForOne",
          "type": "bool"
        },
        {
          "internalType": "int256",
          "name": "amountSpecified",
          "type": "int256"
        },
        {
          "internalType": "uint160",
          "name": "sqrtPriceLimitX96",
          "type": "uint160"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "internalType": "int256",
          "name": "amount0",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1",
          "type": "int256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token0",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token1",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "writeObservation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60e06040523480156200001157600080fd5b506040516200253738038062002537833981016040819052620000349162000083565b606092831b6001600160601b03199081166080529190921b1660a05260e81b6001600160e81b03191660c052620000d6565b80516001600160a01b03811681146200007e57600080fd5b919050565b60008060006060848603121562000098578283fd5b620000a38462000066565b9250620000b36020850162000066565b9150604084015162ffffff81168114620000cb578182fd5b809150509250925092565b60805160601c60a05160601c60c05160e81c61241b6200011c600039600061032801526000818161030101526103bd01526000818160ee0152610465015261241b6000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633850c7bd1161008c578063bc8fcb8311610066578063bc8fcb83146102e1578063c9e20170146102e9578063d21220a7146102fc578063ddca3f4314610323576100cf565b80633850c7bd146101e05780633d718da014610287578063883bdbfd146102c0576100cf565b80630df601f3146100d45780630dfe1681146100e9578063128acb081461012d5780631a68650214610155578063252c09d71461018057806332148f67146101cd575b600080fd5b6100e76100e2366004611dea565b61035e565b005b6101107f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61014061013b366004611cb1565b61038e565b60408051928352602083019190915201610124565b600054610168906001600160801b031681565b6040516001600160801b039091168152602001610124565b61019361018e366004611e65565b6104ee565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091169183019190915215156060820152608001610124565b6100e76101db366004611e43565b610533565b6201000054610236906001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b604080516001600160a01b03909816885260029690960b602088015261ffff94851695870195909552918316606086015291909116608084015260ff1660a0830152151560c082015260e001610124565b6100e7610295366004611e1c565b600080546fffffffffffffffffffffffffffffffff19166001600160801b0392909216919091179055565b6102d36102ce366004611d5f565b6105cd565b604051610124929190611ea1565b6100e761077e565b6100e76102f7366004611dea565b6109ef565b6101107f000000000000000000000000000000000000000000000000000000000000000081565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff9091168152602001610124565b6103688282610bb0565b6201000080546001600160a01b0319166001600160a01b03929092169190911790555050565b600080861561043f5760405163a9059cbb60e01b81526001600160a01b038981166004830152606460248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b15801561040157600080fd5b505af1158015610415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104399190611dce565b506104e3565b60405163a9059cbb60e01b81526001600160a01b038981166004830152606460248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b1580156104a957600080fd5b505af11580156104bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e19190611dce565b505b965096945050505050565b60018161ffff81106104ff57600080fd5b015463ffffffff81169150600160201b810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b6201000054600160d81b900461ffff16805b8261ffff168161ffff1610156105a7576001808261ffff1661ffff811061057c57634e487b7160e01b600052603260045260246000fd5b01805463ffffffff191663ffffffff929092169190911790558061059f816122e6565b915050610545565b505062010000805461ffff909216600160d81b0261ffff60d81b19909216919091179055565b6060808267ffffffffffffffff8111156105f757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610620578160200160208202803683370190505b5091508267ffffffffffffffff81111561064a57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610673578160200160208202803683370190505b50905060005b83811015610776576106f36001428787858181106106a757634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106bc9190611e7d565b6201000054600054600160a01b820460020b9161ffff600160b81b82048116926001600160801b031691600160c81b900416610be2565b84838151811061071357634e487b7160e01b600052603260045260246000fd5b6020026020010184848151811061073a57634e487b7160e01b600052603260045260246000fd5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b8152505050808061076e90612308565b915050610679565b509250929050565b620100005460009060019061ffff600160b81b90910481169081106107b357634e487b7160e01b600052603260045260246000fd5b60408051608081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015290504263ffffffff16816000015163ffffffff16141561082957506109ed565b6201000054600090819061ffff600160c81b82048116600160d81b909204161180156108825750620100005461086c90600190600160c81b900461ffff1661226f565b6201000054600160b81b900461ffff9081169116145b1561089d57506201000054600160d81b900461ffff166108af565b506201000054600160c81b900461ffff165b620100005481906108cc90600160b81b900461ffff166001611fb6565b6108d69190612323565b91506108ff83426201000054600054600160a01b90910460020b906001600160801b0316610de3565b60018361ffff1661ffff811061092557634e487b7160e01b600052603260045260246000fd5b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b02600160581b600160f81b031960069390930b66ffffffffffffff16600160201b026affffffffffffff000000001963ffffffff90971663ffffffff1990951694909417959095169290921716929092179290921617905562010000805461ffff928316600160c81b0261ffff60c81b1993909416600160b81b0261ffff60b81b199091161791909116919091179055505b565b60006109fb8383610bb0565b62010000549091506001600160a01b031615610a435760405162461bcd60e51b8152602060048201526002602482015261414960f01b60448201526064015b60405180910390fd5b6000610a4e82610ec1565b90506040518060800160405280610a624290565b63ffffffff908116825260006020808401829052604080850183905260016060958601819052865181548885015189850151998901511515600160f81b026001600160f81b036001600160a01b039b8c16600160581b02600160581b600160f81b031960069490940b66ffffffffffffff16600160201b026affffffffffffff000000001996909b1663ffffffff19909516949094179490941698909817161716949094178455805160e08101825297909516808852600296870b9188018290529487018290529286018290526080860182905260a086015260c09094019390935262010000805461ffff60e81b1961ffff60d81b1963ffffffff60b81b199690950b62ffffff16600160a01b0262ffffff60a01b196001600160a01b0319909316909417919091169290921793909316600160c81b1791909116600160d81b1716600160f01b1790555050565b600080610bcf6001600160701b0384811690600160c01b9087166111fc565b9050610bda816112b1565b949350505050565b60008063ffffffff8716610c9c576000898661ffff1661ffff8110610c1757634e487b7160e01b600052603260045260246000fd5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a1614610c8857610c85818a8988610de3565b90505b806020015181604001519250925050610dd7565b6000610ca8888a6122c9565b9050600080610cbc8c8c858c8c8c8c611321565b91509150816000015163ffffffff168363ffffffff161415610cee578160200151826040015194509450505050610dd7565b805163ffffffff84811691161415610d16578060200151816040015194509450505050610dd7565b81518151600091610d26916122c9565b8351909150600090610d3890866122c9565b90508063ffffffff168263ffffffff1685602001518560200151610d5c9190612220565b610d669190612036565b610d709190612131565b8460200151610d7f9190611f68565b8263ffffffff168263ffffffff1686604001518660400151610da19190612292565b6001600160a01b0316610db491906121c2565b610dbe919061209a565b8560400151610dcd9190611fdc565b9650965050505050505b97509795505050505050565b6040805160808101825260008082526020820181905291810182905260608101919091528451600090610e1690866122c9565b905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b610e449190612131565b8860200151610e539190611f68565b60060b81526020016000856001600160801b031611610e73576001610e75565b845b610e95906001600160801b031663ffffffff60801b608086901b16612074565b8860400151610ea49190611fdc565b6001600160a01b0316815260016020909101529695505050505050565b60006401000276a36001600160a01b03831610801590610efd575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b610f2d5760405162461bcd60e51b81526020600482015260016024820152602960f91b6044820152606401610a3a565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110610fc857610fbe607f826122b2565b83901c9150610fd9565b610fd381607f6122b2565b83901b91505b60006040610fe86080846121e1565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b8217915050600081693627a301d71055774c8561116b91906120ae565b90506000608061118b6f028f6481ab7f045a5af012a19d003aaa846121e1565b901d9050600060806111ad846fdb2df09e81959a81455e260799a0632f611f27565b901d90508060020b8260020b146111ed57886001600160a01b03166111d182611577565b6001600160a01b031611156111e657816111e8565b805b6111ef565b815b9998505050505050505050565b600080806000198587098587029250828110838203039150508060001415611236576000841161122b57600080fd5b5082900490506112aa565b80841161124257600080fd5b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000600382111561131257508060006112cb60028361209a565b6112d6906001611ffe565b90505b8181101561130c579050806002816112f1818661209a565b6112fb9190611ffe565b611305919061209a565b90506112d9565b5061131c565b811561131c575060015b919050565b604080516080810182526000808252602082018190529181018290526060810191909152604080516080810182526000808252602082018190529181018290526060810191909152888561ffff1661ffff811061138e57634e487b7160e01b600052603260045260246000fd5b60408051608081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff161515606082015292506113f29089908961198b565b1561142a578663ffffffff16826000015163ffffffff16141561141457610dd7565b8161142183898988610de3565b91509150610dd7565b8883611437876001611fb6565b6114419190612323565b61ffff1661ffff811061146457634e487b7160e01b600052603260045260246000fd5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290925061151957604080516080810182528a5463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b6115288883600001518961198b565b61155a5760405162461bcd60e51b815260206004820152600360248201526213d31160ea1b6044820152606401610a3a565b6115678989898887611a5a565b9150915097509795505050505050565b60008060008360020b1261158e578260020b61159b565b8260020b61159b90612379565b90506115aa620d89e719612358565b60020b8111156115e05760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610a3a565b6000600182166115f457600160801b611606565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611645576080611640826ffff97272373d413259a46990580e213a6121c2565b901c90505b600482161561166f57608061166a826ffff2e50f5f656932ef12357cf3c7fdcc6121c2565b901c90505b6008821615611699576080611694826fffe5caca7e10e4e61c3624eaa0941cd06121c2565b901c90505b60108216156116c35760806116be826fffcb9843d60f6159c9db58835c9266446121c2565b901c90505b60208216156116ed5760806116e8826fff973b41fa98c081472e6896dfb254c06121c2565b901c90505b6040821615611717576080611712826fff2ea16466c96a3843ec78b326b528616121c2565b901c90505b608082161561174157608061173c826ffe5dee046a99a2a811c461f1969c30536121c2565b901c90505b61010082161561176c576080611767826ffcbe86c7900a88aedcffc83b479aa3a46121c2565b901c90505b610200821615611797576080611792826ff987a7253ac413176f2b074cf7815e546121c2565b901c90505b6104008216156117c25760806117bd826ff3392b0822b70005940c7a398e4b70f36121c2565b901c90505b6108008216156117ed5760806117e8826fe7159475a2c29b7443b29c7fa6e889d96121c2565b901c90505b611000821615611818576080611813826fd097f3bdfd2022b8845ad8f792aa58256121c2565b901c90505b61200082161561184357608061183e826fa9f746462d870fdf8a65dc1f90e061e56121c2565b901c90505b61400082161561186e576080611869826f70d869a156d2a1b890bb3df62baf32f76121c2565b901c90505b618000821615611899576080611894826f31be135f97d08fd981231505542fcfa66121c2565b901c90505b620100008216156118c55760806118c0826f09aa508b5b7a84e1c677de54f3e99bc96121c2565b901c90505b620200008216156118f05760806118eb826e5d6af8dedb81196699c329225ee6046121c2565b901c90505b6204000082161561191a576080611915826d2216e584f5fa1ea926041bedfe986121c2565b901c90505b6208000082161561194257608061193d826b048a170391f7dc42444e8fa26121c2565b901c90505b60008460020b131561195d5761195a8160001961209a565b90505b61196b600160201b82612344565b1561197757600161197a565b60005b610bda9060ff16602083901c611ffe565b60008363ffffffff168363ffffffff16111580156119b557508363ffffffff168263ffffffff1611155b156119d1578163ffffffff168363ffffffff16111590506112aa565b60008463ffffffff168463ffffffff16116119ff576119fa63ffffffff8516600160201b612016565b611a07565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611611a3e57611a3963ffffffff8516600160201b612016565b611a46565b8363ffffffff165b64ffffffffff169091111595945050505050565b604080516080810182526000808252602082018190529181018290526060810191909152604080516080810182526000808252602082018190529181018290526060810191909152600083611ab0866001611fb6565b611aba9190612323565b61ffff169050600060018561ffff1683611ad49190611ffe565b611ade91906122b2565b905060005b6002611aef8385611ffe565b611af9919061209a565b905089611b0a61ffff881683612344565b61ffff8110611b2957634e487b7160e01b600052603260045260246000fd5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909550611b9a57611b93816001611ffe565b9250611ae3565b8961ffff8716611bab836001611ffe565b611bb59190612344565b61ffff8110611bd457634e487b7160e01b600052603260045260246000fd5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201528551909450600090611c3e908b908b61198b565b9050808015611c575750611c578a8a876000015161198b565b15611c625750611c8d565b80611c7957611c726001836122b2565b9250611c87565b611c84826001611ffe565b93505b50611ae3565b5050509550959350505050565b80356001600160701b038116811461131c57600080fd5b60008060008060008060a08789031215611cc9578182fd5b8635611cd4816123bf565b95506020870135611ce4816123d7565b9450604087013593506060870135611cfb816123bf565b9250608087013567ffffffffffffffff80821115611d17578384fd5b818901915089601f830112611d2a578384fd5b813581811115611d38578485fd5b8a6020828501011115611d49578485fd5b6020830194508093505050509295509295509295565b60008060208385031215611d71578182fd5b823567ffffffffffffffff80821115611d88578384fd5b818501915085601f830112611d9b578384fd5b813581811115611da9578485fd5b8660208083028501011115611dbc578485fd5b60209290920196919550909350505050565b600060208284031215611ddf578081fd5b81516112aa816123d7565b60008060408385031215611dfc578182fd5b611e0583611c9a565b9150611e1360208401611c9a565b90509250929050565b600060208284031215611e2d578081fd5b81356001600160801b03811681146112aa578182fd5b600060208284031215611e54578081fd5b813561ffff811681146112aa578182fd5b600060208284031215611e76578081fd5b5035919050565b600060208284031215611e8e578081fd5b813563ffffffff811681146112aa578182fd5b604080825283519082018190526000906020906060840190828701845b82811015611edd57815160060b84529284019290840190600101611ebe565b50505083810382850152845180825285830191830190845b81811015611f1a5783516001600160a01b031683529284019291840191600101611ef5565b5090979650505050505050565b600080821280156001600160ff1b0384900385131615611f4957611f49612393565b600160ff1b8390038412811615611f6257611f62612393565b50500190565b60008160060b8360060b82821282667fffffffffffff03821381151615611f9157611f91612393565b82667fffffffffffff19038212811615611fad57611fad612393565b50019392505050565b600061ffff808316818516808303821115611fd357611fd3612393565b01949350505050565b60006001600160a01b03828116848216808303821115611fd357611fd3612393565b6000821982111561201157612011612393565b500190565b600064ffffffffff808316818516808303821115611fd357611fd3612393565b60008160060b8360060b8061204d5761204d6123a9565b667fffffffffffff1982146000198214161561206b5761206b612393565b90059392505050565b60006001600160a01b038381168061208e5761208e6123a9565b92169190910492915050565b6000826120a9576120a96123a9565b500490565b60006001600160ff1b03818413828413808216868404861116156120d4576120d4612393565b600160ff1b848712828116878305891216156120f2576120f2612393565b85871292508782058712848416161561210d5761210d612393565b8785058712818416161561212357612123612393565b505050929093029392505050565b60008160060b8360060b667fffffffffffff8382138484138383048511828216161561215f5761215f612393565b667fffffffffffff198685128281168783058712161561218157612181612393565b87871292508582058712848416161561219c5761219c612393565b858505871281841616156121b2576121b2612393565b5050509290910295945050505050565b60008160001904831182151516156121dc576121dc612393565b500290565b60008083128015600160ff1b8501841216156121ff576121ff612393565b6001600160ff1b038401831381161561221a5761221a612393565b50500390565b60008160060b8360060b82811281667fffffffffffff190183128115161561224a5761224a612393565b81667fffffffffffff01831381161561226557612265612393565b5090039392505050565b600061ffff8381169083168181101561228a5761228a612393565b039392505050565b60006001600160a01b038381169083168181101561228a5761228a612393565b6000828210156122c4576122c4612393565b500390565b600063ffffffff8381169083168181101561228a5761228a612393565b600061ffff808316818114156122fe576122fe612393565b6001019392505050565b600060001982141561231c5761231c612393565b5060010190565b600061ffff80841680612338576123386123a9565b92169190910692915050565b600082612353576123536123a9565b500690565b60008160020b627fffff1981141561237257612372612393565b9003919050565b6000600160ff1b82141561238f5761238f612393565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146123d457600080fd5b50565b80151581146123d457600080fdfea2646970667358221220ca1cb122a4c37fb1d36e3cf58a203dda474de8a328014187e9a1ebf16f53351864736f6c63430008020033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633850c7bd1161008c578063bc8fcb8311610066578063bc8fcb83146102e1578063c9e20170146102e9578063d21220a7146102fc578063ddca3f4314610323576100cf565b80633850c7bd146101e05780633d718da014610287578063883bdbfd146102c0576100cf565b80630df601f3146100d45780630dfe1681146100e9578063128acb081461012d5780631a68650214610155578063252c09d71461018057806332148f67146101cd575b600080fd5b6100e76100e2366004611dea565b61035e565b005b6101107f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61014061013b366004611cb1565b61038e565b60408051928352602083019190915201610124565b600054610168906001600160801b031681565b6040516001600160801b039091168152602001610124565b61019361018e366004611e65565b6104ee565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091169183019190915215156060820152608001610124565b6100e76101db366004611e43565b610533565b6201000054610236906001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b604080516001600160a01b03909816885260029690960b602088015261ffff94851695870195909552918316606086015291909116608084015260ff1660a0830152151560c082015260e001610124565b6100e7610295366004611e1c565b600080546fffffffffffffffffffffffffffffffff19166001600160801b0392909216919091179055565b6102d36102ce366004611d5f565b6105cd565b604051610124929190611ea1565b6100e761077e565b6100e76102f7366004611dea565b6109ef565b6101107f000000000000000000000000000000000000000000000000000000000000000081565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff9091168152602001610124565b6103688282610bb0565b6201000080546001600160a01b0319166001600160a01b03929092169190911790555050565b600080861561043f5760405163a9059cbb60e01b81526001600160a01b038981166004830152606460248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b15801561040157600080fd5b505af1158015610415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104399190611dce565b506104e3565b60405163a9059cbb60e01b81526001600160a01b038981166004830152606460248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b1580156104a957600080fd5b505af11580156104bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e19190611dce565b505b965096945050505050565b60018161ffff81106104ff57600080fd5b015463ffffffff81169150600160201b810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b6201000054600160d81b900461ffff16805b8261ffff168161ffff1610156105a7576001808261ffff1661ffff811061057c57634e487b7160e01b600052603260045260246000fd5b01805463ffffffff191663ffffffff929092169190911790558061059f816122e6565b915050610545565b505062010000805461ffff909216600160d81b0261ffff60d81b19909216919091179055565b6060808267ffffffffffffffff8111156105f757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610620578160200160208202803683370190505b5091508267ffffffffffffffff81111561064a57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610673578160200160208202803683370190505b50905060005b83811015610776576106f36001428787858181106106a757634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106bc9190611e7d565b6201000054600054600160a01b820460020b9161ffff600160b81b82048116926001600160801b031691600160c81b900416610be2565b84838151811061071357634e487b7160e01b600052603260045260246000fd5b6020026020010184848151811061073a57634e487b7160e01b600052603260045260246000fd5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b8152505050808061076e90612308565b915050610679565b509250929050565b620100005460009060019061ffff600160b81b90910481169081106107b357634e487b7160e01b600052603260045260246000fd5b60408051608081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015290504263ffffffff16816000015163ffffffff16141561082957506109ed565b6201000054600090819061ffff600160c81b82048116600160d81b909204161180156108825750620100005461086c90600190600160c81b900461ffff1661226f565b6201000054600160b81b900461ffff9081169116145b1561089d57506201000054600160d81b900461ffff166108af565b506201000054600160c81b900461ffff165b620100005481906108cc90600160b81b900461ffff166001611fb6565b6108d69190612323565b91506108ff83426201000054600054600160a01b90910460020b906001600160801b0316610de3565b60018361ffff1661ffff811061092557634e487b7160e01b600052603260045260246000fd5b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b02600160581b600160f81b031960069390930b66ffffffffffffff16600160201b026affffffffffffff000000001963ffffffff90971663ffffffff1990951694909417959095169290921716929092179290921617905562010000805461ffff928316600160c81b0261ffff60c81b1993909416600160b81b0261ffff60b81b199091161791909116919091179055505b565b60006109fb8383610bb0565b62010000549091506001600160a01b031615610a435760405162461bcd60e51b8152602060048201526002602482015261414960f01b60448201526064015b60405180910390fd5b6000610a4e82610ec1565b90506040518060800160405280610a624290565b63ffffffff908116825260006020808401829052604080850183905260016060958601819052865181548885015189850151998901511515600160f81b026001600160f81b036001600160a01b039b8c16600160581b02600160581b600160f81b031960069490940b66ffffffffffffff16600160201b026affffffffffffff000000001996909b1663ffffffff19909516949094179490941698909817161716949094178455805160e08101825297909516808852600296870b9188018290529487018290529286018290526080860182905260a086015260c09094019390935262010000805461ffff60e81b1961ffff60d81b1963ffffffff60b81b199690950b62ffffff16600160a01b0262ffffff60a01b196001600160a01b0319909316909417919091169290921793909316600160c81b1791909116600160d81b1716600160f01b1790555050565b600080610bcf6001600160701b0384811690600160c01b9087166111fc565b9050610bda816112b1565b949350505050565b60008063ffffffff8716610c9c576000898661ffff1661ffff8110610c1757634e487b7160e01b600052603260045260246000fd5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a1614610c8857610c85818a8988610de3565b90505b806020015181604001519250925050610dd7565b6000610ca8888a6122c9565b9050600080610cbc8c8c858c8c8c8c611321565b91509150816000015163ffffffff168363ffffffff161415610cee578160200151826040015194509450505050610dd7565b805163ffffffff84811691161415610d16578060200151816040015194509450505050610dd7565b81518151600091610d26916122c9565b8351909150600090610d3890866122c9565b90508063ffffffff168263ffffffff1685602001518560200151610d5c9190612220565b610d669190612036565b610d709190612131565b8460200151610d7f9190611f68565b8263ffffffff168263ffffffff1686604001518660400151610da19190612292565b6001600160a01b0316610db491906121c2565b610dbe919061209a565b8560400151610dcd9190611fdc565b9650965050505050505b97509795505050505050565b6040805160808101825260008082526020820181905291810182905260608101919091528451600090610e1690866122c9565b905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b610e449190612131565b8860200151610e539190611f68565b60060b81526020016000856001600160801b031611610e73576001610e75565b845b610e95906001600160801b031663ffffffff60801b608086901b16612074565b8860400151610ea49190611fdc565b6001600160a01b0316815260016020909101529695505050505050565b60006401000276a36001600160a01b03831610801590610efd575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b610f2d5760405162461bcd60e51b81526020600482015260016024820152602960f91b6044820152606401610a3a565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110610fc857610fbe607f826122b2565b83901c9150610fd9565b610fd381607f6122b2565b83901b91505b60006040610fe86080846121e1565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b8217915050600081693627a301d71055774c8561116b91906120ae565b90506000608061118b6f028f6481ab7f045a5af012a19d003aaa846121e1565b901d9050600060806111ad846fdb2df09e81959a81455e260799a0632f611f27565b901d90508060020b8260020b146111ed57886001600160a01b03166111d182611577565b6001600160a01b031611156111e657816111e8565b805b6111ef565b815b9998505050505050505050565b600080806000198587098587029250828110838203039150508060001415611236576000841161122b57600080fd5b5082900490506112aa565b80841161124257600080fd5b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b6000600382111561131257508060006112cb60028361209a565b6112d6906001611ffe565b90505b8181101561130c579050806002816112f1818661209a565b6112fb9190611ffe565b611305919061209a565b90506112d9565b5061131c565b811561131c575060015b919050565b604080516080810182526000808252602082018190529181018290526060810191909152604080516080810182526000808252602082018190529181018290526060810191909152888561ffff1661ffff811061138e57634e487b7160e01b600052603260045260246000fd5b60408051608081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff161515606082015292506113f29089908961198b565b1561142a578663ffffffff16826000015163ffffffff16141561141457610dd7565b8161142183898988610de3565b91509150610dd7565b8883611437876001611fb6565b6114419190612323565b61ffff1661ffff811061146457634e487b7160e01b600052603260045260246000fd5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290925061151957604080516080810182528a5463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b6115288883600001518961198b565b61155a5760405162461bcd60e51b815260206004820152600360248201526213d31160ea1b6044820152606401610a3a565b6115678989898887611a5a565b9150915097509795505050505050565b60008060008360020b1261158e578260020b61159b565b8260020b61159b90612379565b90506115aa620d89e719612358565b60020b8111156115e05760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610a3a565b6000600182166115f457600160801b611606565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611645576080611640826ffff97272373d413259a46990580e213a6121c2565b901c90505b600482161561166f57608061166a826ffff2e50f5f656932ef12357cf3c7fdcc6121c2565b901c90505b6008821615611699576080611694826fffe5caca7e10e4e61c3624eaa0941cd06121c2565b901c90505b60108216156116c35760806116be826fffcb9843d60f6159c9db58835c9266446121c2565b901c90505b60208216156116ed5760806116e8826fff973b41fa98c081472e6896dfb254c06121c2565b901c90505b6040821615611717576080611712826fff2ea16466c96a3843ec78b326b528616121c2565b901c90505b608082161561174157608061173c826ffe5dee046a99a2a811c461f1969c30536121c2565b901c90505b61010082161561176c576080611767826ffcbe86c7900a88aedcffc83b479aa3a46121c2565b901c90505b610200821615611797576080611792826ff987a7253ac413176f2b074cf7815e546121c2565b901c90505b6104008216156117c25760806117bd826ff3392b0822b70005940c7a398e4b70f36121c2565b901c90505b6108008216156117ed5760806117e8826fe7159475a2c29b7443b29c7fa6e889d96121c2565b901c90505b611000821615611818576080611813826fd097f3bdfd2022b8845ad8f792aa58256121c2565b901c90505b61200082161561184357608061183e826fa9f746462d870fdf8a65dc1f90e061e56121c2565b901c90505b61400082161561186e576080611869826f70d869a156d2a1b890bb3df62baf32f76121c2565b901c90505b618000821615611899576080611894826f31be135f97d08fd981231505542fcfa66121c2565b901c90505b620100008216156118c55760806118c0826f09aa508b5b7a84e1c677de54f3e99bc96121c2565b901c90505b620200008216156118f05760806118eb826e5d6af8dedb81196699c329225ee6046121c2565b901c90505b6204000082161561191a576080611915826d2216e584f5fa1ea926041bedfe986121c2565b901c90505b6208000082161561194257608061193d826b048a170391f7dc42444e8fa26121c2565b901c90505b60008460020b131561195d5761195a8160001961209a565b90505b61196b600160201b82612344565b1561197757600161197a565b60005b610bda9060ff16602083901c611ffe565b60008363ffffffff168363ffffffff16111580156119b557508363ffffffff168263ffffffff1611155b156119d1578163ffffffff168363ffffffff16111590506112aa565b60008463ffffffff168463ffffffff16116119ff576119fa63ffffffff8516600160201b612016565b611a07565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611611a3e57611a3963ffffffff8516600160201b612016565b611a46565b8363ffffffff165b64ffffffffff169091111595945050505050565b604080516080810182526000808252602082018190529181018290526060810191909152604080516080810182526000808252602082018190529181018290526060810191909152600083611ab0866001611fb6565b611aba9190612323565b61ffff169050600060018561ffff1683611ad49190611ffe565b611ade91906122b2565b905060005b6002611aef8385611ffe565b611af9919061209a565b905089611b0a61ffff881683612344565b61ffff8110611b2957634e487b7160e01b600052603260045260246000fd5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909550611b9a57611b93816001611ffe565b9250611ae3565b8961ffff8716611bab836001611ffe565b611bb59190612344565b61ffff8110611bd457634e487b7160e01b600052603260045260246000fd5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201528551909450600090611c3e908b908b61198b565b9050808015611c575750611c578a8a876000015161198b565b15611c625750611c8d565b80611c7957611c726001836122b2565b9250611c87565b611c84826001611ffe565b93505b50611ae3565b5050509550959350505050565b80356001600160701b038116811461131c57600080fd5b60008060008060008060a08789031215611cc9578182fd5b8635611cd4816123bf565b95506020870135611ce4816123d7565b9450604087013593506060870135611cfb816123bf565b9250608087013567ffffffffffffffff80821115611d17578384fd5b818901915089601f830112611d2a578384fd5b813581811115611d38578485fd5b8a6020828501011115611d49578485fd5b6020830194508093505050509295509295509295565b60008060208385031215611d71578182fd5b823567ffffffffffffffff80821115611d88578384fd5b818501915085601f830112611d9b578384fd5b813581811115611da9578485fd5b8660208083028501011115611dbc578485fd5b60209290920196919550909350505050565b600060208284031215611ddf578081fd5b81516112aa816123d7565b60008060408385031215611dfc578182fd5b611e0583611c9a565b9150611e1360208401611c9a565b90509250929050565b600060208284031215611e2d578081fd5b81356001600160801b03811681146112aa578182fd5b600060208284031215611e54578081fd5b813561ffff811681146112aa578182fd5b600060208284031215611e76578081fd5b5035919050565b600060208284031215611e8e578081fd5b813563ffffffff811681146112aa578182fd5b604080825283519082018190526000906020906060840190828701845b82811015611edd57815160060b84529284019290840190600101611ebe565b50505083810382850152845180825285830191830190845b81811015611f1a5783516001600160a01b031683529284019291840191600101611ef5565b5090979650505050505050565b600080821280156001600160ff1b0384900385131615611f4957611f49612393565b600160ff1b8390038412811615611f6257611f62612393565b50500190565b60008160060b8360060b82821282667fffffffffffff03821381151615611f9157611f91612393565b82667fffffffffffff19038212811615611fad57611fad612393565b50019392505050565b600061ffff808316818516808303821115611fd357611fd3612393565b01949350505050565b60006001600160a01b03828116848216808303821115611fd357611fd3612393565b6000821982111561201157612011612393565b500190565b600064ffffffffff808316818516808303821115611fd357611fd3612393565b60008160060b8360060b8061204d5761204d6123a9565b667fffffffffffff1982146000198214161561206b5761206b612393565b90059392505050565b60006001600160a01b038381168061208e5761208e6123a9565b92169190910492915050565b6000826120a9576120a96123a9565b500490565b60006001600160ff1b03818413828413808216868404861116156120d4576120d4612393565b600160ff1b848712828116878305891216156120f2576120f2612393565b85871292508782058712848416161561210d5761210d612393565b8785058712818416161561212357612123612393565b505050929093029392505050565b60008160060b8360060b667fffffffffffff8382138484138383048511828216161561215f5761215f612393565b667fffffffffffff198685128281168783058712161561218157612181612393565b87871292508582058712848416161561219c5761219c612393565b858505871281841616156121b2576121b2612393565b5050509290910295945050505050565b60008160001904831182151516156121dc576121dc612393565b500290565b60008083128015600160ff1b8501841216156121ff576121ff612393565b6001600160ff1b038401831381161561221a5761221a612393565b50500390565b60008160060b8360060b82811281667fffffffffffff190183128115161561224a5761224a612393565b81667fffffffffffff01831381161561226557612265612393565b5090039392505050565b600061ffff8381169083168181101561228a5761228a612393565b039392505050565b60006001600160a01b038381169083168181101561228a5761228a612393565b6000828210156122c4576122c4612393565b500390565b600063ffffffff8381169083168181101561228a5761228a612393565b600061ffff808316818114156122fe576122fe612393565b6001019392505050565b600060001982141561231c5761231c612393565b5060010190565b600061ffff80841680612338576123386123a9565b92169190910692915050565b600082612353576123536123a9565b500690565b60008160020b627fffff1981141561237257612372612393565b9003919050565b6000600160ff1b82141561238f5761238f612393565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146123d457600080fd5b50565b80151581146123d457600080fdfea2646970667358221220ca1cb122a4c37fb1d36e3cf58a203dda474de8a328014187e9a1ebf16f53351864736f6c63430008020033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
