{
  "_format": "hh-sol-artifact-1",
  "contractName": "TestAlgebraCallee",
  "sourceName": "contracts/test/TestAlgebraCallee.sol",
  "abi": [
    {
      "inputs": [],
      "name": "tickOutOfRange",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee1",
          "type": "uint256"
        }
      ],
      "name": "FlashCallback",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0Owed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1Owed",
          "type": "uint256"
        }
      ],
      "name": "MintCallback",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0Owed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1Owed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "resultLiquidity",
          "type": "uint256"
        }
      ],
      "name": "MintResult",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amount0Delta",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amount1Delta",
          "type": "int256"
        }
      ],
      "name": "SwapCallback",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "fee0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "fee1",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "algebraFlashCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount0Owed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1Owed",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "algebraMintCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "amount0Delta",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1Delta",
          "type": "int256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "algebraSwapCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "pay0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "pay1",
          "type": "uint256"
        }
      ],
      "name": "flash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        }
      ],
      "name": "getPriceAtTick",
      "outputs": [
        {
          "internalType": "uint160",
          "name": "sqrtPrice",
          "type": "uint160"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "bottomTick",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "topTick",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0Owed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1Owed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "resultLiquidity",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount1Out",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "limitSqrtPrice",
          "type": "uint160"
        }
      ],
      "name": "swap0ForExact1",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount0Out",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "limitSqrtPrice",
          "type": "uint160"
        }
      ],
      "name": "swap1ForExact0",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount0In",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "limitSqrtPrice",
          "type": "uint160"
        }
      ],
      "name": "swapExact0For1",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount0In",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "limitSqrtPrice",
          "type": "uint160"
        }
      ],
      "name": "swapExact0For1SupportingFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount1In",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "limitSqrtPrice",
          "type": "uint160"
        }
      ],
      "name": "swapExact1For0",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount1In",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "limitSqrtPrice",
          "type": "uint160"
        }
      ],
      "name": "swapExact1For0SupportingFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "price",
          "type": "uint160"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "swapToHigherSqrtPrice",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "price",
          "type": "uint160"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "swapToLowerSqrtPrice",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506117c8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639ca2f8c61161008c578063acc36a2b11610066578063acc36a2b1461044c578063bac7bf7814610488578063e2be9109146104c4578063f603482c1461050057600080fd5b80639ca2f8c61461035c5780639e77b80514610398578063a60b0d3c146103d057600080fd5b80633dd657c5116100c85780633dd657c5146101ed57806358b56631146102695780636dfc0ddb146102a55780637b4f5327146102e157600080fd5b8063034b0f8f146100ef5780632c8958f6146101395780632ec20bf9146101b5575b600080fd5b610137600480360360c081101561010557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a0013561053c565b005b6101376004803603606081101561014f57600080fd5b81359160208101359181019060608101604082013564010000000081111561017657600080fd5b82018360208201111561018857600080fd5b803590602001918460018302840111640100000000831117156101aa57600080fd5b50909250905061065d565b610137600480360360608110156101cb57600080fd5b506001600160a01b03813581169160208101358216916040909101351661086f565b6101376004803603606081101561020357600080fd5b81359160208101359181019060608101604082013564010000000081111561022a57600080fd5b82018360208201111561023c57600080fd5b8035906020019184600183028401116401000000008311171561025e57600080fd5b509092509050610995565b6101376004803603608081101561027f57600080fd5b506001600160a01b03813581169160208101359160408201358116916060013516610b9c565b610137600480360360808110156102bb57600080fd5b506001600160a01b03813581169160208101359160408201358116916060013516610cd4565b61033e600480360360a08110156102f757600080fd5b5080356001600160a01b03908116916020810135909116906040810135600290810b91606081013590910b90608001356fffffffffffffffffffffffffffffffff16610ddd565b60408051938452602084019290925282820152519081900360600190f35b61037c6004803603602081101561037257600080fd5b503560020b610f90565b604080516001600160a01b039092168252519081900360200190f35b610137600480360360608110156103ae57600080fd5b506001600160a01b038135811691602081013582169160409091013516610fa1565b610137600480360360608110156103e657600080fd5b81359160208101359181019060608101604082013564010000000081111561040d57600080fd5b82018360208201111561041f57600080fd5b8035906020019184600183028401116401000000008311171561044157600080fd5b50909250905061105c565b6101376004803603608081101561046257600080fd5b506001600160a01b03813581169160208101359160408201358116916060013516611276565b6101376004803603608081101561049e57600080fd5b506001600160a01b0381358116916020810135916040820135811691606001351661131b565b610137600480360360808110156104da57600080fd5b506001600160a01b038135811691602081013591604082013581169160600135166113da565b6101376004803603608081101561051657600080fd5b506001600160a01b0381358116916020810135916040820135811691606001351661148e565b856001600160a01b031663490e6cbc86868633878760405160200180846001600160a01b0316815260200183815260200182815260200193505050506040516020818303038152906040526040518563ffffffff1660e01b815260040180856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156105ee5781810151838201526020016105d6565b50505050905090810190601f16801561061b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561063d57600080fd5b505af1158015610651573d6000803e3d6000fd5b50505050505050505050565b60008282602081101561066f57600080fd5b506040805187815260208101879052815192356001600160a01b031693507fd48241df4a75e663b29e55f9506b31f77ed0f48cfe7e7612d1163144995dc1ca929081900390910190a1600085131561079357336001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ff573d6000803e3d6000fd5b505050506040513d602081101561071557600080fd5b5051604080516323b872dd60e01b81526001600160a01b03848116600483015233602483015260448201899052915191909216916323b872dd91606480830192602092919082900301816000875af1158015610775573d6000803e3d6000fd5b505050506040513d602081101561078b57600080fd5b506108689050565b600084131561085057336001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107da573d6000803e3d6000fd5b505050506040513d60208110156107f057600080fd5b5051604080516323b872dd60e01b81526001600160a01b03848116600483015233602483015260448201889052915191909216916323b872dd91606480830192602092919082900301816000875af1158015610775573d6000803e3d6000fd5b8415801561085c575083155b610868576108686117a5565b5050505050565b826001600160a01b031663128acb088260016001600160ff1b03863360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561092b578181015183820152602001610913565b50505050905090810190601f1680156109585780820380516001836020036101000a031916815260200191505b50965050505050505060408051808303816000875af115801561097f573d6000803e3d6000fd5b505050506040513d604081101561086857600080fd5b6000828260208110156109a757600080fd5b50356001600160a01b031690508415610a8757336001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f8573d6000803e3d6000fd5b505050506040513d6020811015610a0e57600080fd5b5051604080516323b872dd60e01b81526001600160a01b03848116600483015233602483015260448201899052915191909216916323b872dd91606480830192602092919082900301816000875af1158015610a6e573d6000803e3d6000fd5b505050506040513d6020811015610a8457600080fd5b50505b8315610b5a57336001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610acb573d6000803e3d6000fd5b505050506040513d6020811015610ae157600080fd5b5051604080516323b872dd60e01b81526001600160a01b03848116600483015233602483015260448201889052915191909216916323b872dd91606480830192602092919082900301816000875af1158015610b41573d6000803e3d6000fd5b505050506040513d6020811015610b5757600080fd5b50505b604080518681526020810186905281517fa0968be00566083701c9ef671c169d7fb05ac8907de4ca17185de74ccbb694d4929181900390910190a15050505050565b836001600160a01b0316639e4e02273384600087863360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c61578181015183820152602001610c49565b50505050905090810190601f168015610c8e5780820380516001836020036101000a031916815260200191505b5097505050505050505060408051808303816000875af1158015610cb6573d6000803e3d6000fd5b505050506040513d6040811015610ccc57600080fd5b505050505050565b836001600160a01b031663128acb0883600186853360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610d89578181015183820152602001610d71565b50505050905090810190601f168015610db65780820380516001836020036101000a031916815260200191505b50965050505050505060408051808303816000875af1158015610cb6573d6000803e3d6000fd5b6000806000876001600160a01b031663aafe29c033898989893360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b031681526020018560020b81526020018460020b8152602001836fffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610eb3578181015183820152602001610e9b565b50505050905090810190601f168015610ee05780820380516001836020036101000a031916815260200191505b509750505050505050506060604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d6060811015610f1f57600080fd5b50805160208083015160409384015184518481529283018290526fffffffffffffffffffffffffffffffff16828501819052935192965094509192507fe6f6d49dd9278ee75517145a401566440c7245213758f9caf1618c642feec23e9181900360600190a1955095509592505050565b6000610f9b826114a9565b92915050565b826001600160a01b031663128acb088260006001600160ff1b03863360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360008381101561092b578181015183820152602001610913565b604080518581526020810185905281517f2b0391b4fa408cfe47abd1977d72985695b2e5ebd3175f55be25f2c68c5df21b929181900390910190a16000806000848460608110156110ac57600080fd5b506001600160a01b03813516935060208101359250604001359050811561119a57336001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110b573d6000803e3d6000fd5b505050506040513d602081101561112157600080fd5b5051604080516323b872dd60e01b81526001600160a01b03868116600483015233602483015260448201869052915191909216916323b872dd91606480830192602092919082900301816000875af1158015611181573d6000803e3d6000fd5b505050506040513d602081101561119757600080fd5b50505b801561126d57336001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111de573d6000803e3d6000fd5b505050506040513d60208110156111f457600080fd5b5051604080516323b872dd60e01b81526001600160a01b03868116600483015233602483015260448201859052915191909216916323b872dd91606480830192602092919082900301816000875af1158015611254573d6000803e3d6000fd5b505050506040513d602081101561126a57600080fd5b50505b50505050505050565b6040805133602080830182905283518084038201815283850194859052639e4e022760e01b909452604483018281526001600160a01b03878116606486015260016084860181905260a486018a905287821660c487015260c060e4870190815287516101048801528751928c1697639e4e0227978b9693958d958c95939491939192610124019185019080838360008315610c61578181015183820152602001610c49565b836001600160a01b031663128acb0883600161133687611791565b600003853360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b03168152602001806020018281038252838181518152602001915080519060200190808383600083811015610d89578181015183820152602001610d71565b836001600160a01b031663128acb0883600086853360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b03168152602001806020018281038252838181518152602001915080519060200190808383600083811015610d89578181015183820152602001610d71565b836001600160a01b031663128acb0883600061133687611791565b6000600282900b60171d62ffffff818401821816620d89e88111156114e157604051633c10250f60e01b815260040160405180910390fd5b700100000000000000000000000000000000600182161561150f57506ffffcb933bd6fad37aa2d162d1a5940015b600282161561152e576ffff97272373d413259a46990580e213a0260801c5b600482161561154d576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561156c576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561158b576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156115aa576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156115c9576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156115e8576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611608576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611628576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611648576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611668576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611688576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156116a8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156116c8576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156116e8576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611709576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611729576e5d6af8dedb81196699c329225ee6040260801c5b62040000821061176f5762040000821615611752576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561176f576b048a170391f7dc42444e8fa20260801c5b60008560020b131561178057600019045b63ffffffff0160201c949350505050565b8060008112156117a057600080fd5b919050565b634e487b7160e01b600052600160045260246000fdfea164736f6c6343000814000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639ca2f8c61161008c578063acc36a2b11610066578063acc36a2b1461044c578063bac7bf7814610488578063e2be9109146104c4578063f603482c1461050057600080fd5b80639ca2f8c61461035c5780639e77b80514610398578063a60b0d3c146103d057600080fd5b80633dd657c5116100c85780633dd657c5146101ed57806358b56631146102695780636dfc0ddb146102a55780637b4f5327146102e157600080fd5b8063034b0f8f146100ef5780632c8958f6146101395780632ec20bf9146101b5575b600080fd5b610137600480360360c081101561010557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a0013561053c565b005b6101376004803603606081101561014f57600080fd5b81359160208101359181019060608101604082013564010000000081111561017657600080fd5b82018360208201111561018857600080fd5b803590602001918460018302840111640100000000831117156101aa57600080fd5b50909250905061065d565b610137600480360360608110156101cb57600080fd5b506001600160a01b03813581169160208101358216916040909101351661086f565b6101376004803603606081101561020357600080fd5b81359160208101359181019060608101604082013564010000000081111561022a57600080fd5b82018360208201111561023c57600080fd5b8035906020019184600183028401116401000000008311171561025e57600080fd5b509092509050610995565b6101376004803603608081101561027f57600080fd5b506001600160a01b03813581169160208101359160408201358116916060013516610b9c565b610137600480360360808110156102bb57600080fd5b506001600160a01b03813581169160208101359160408201358116916060013516610cd4565b61033e600480360360a08110156102f757600080fd5b5080356001600160a01b03908116916020810135909116906040810135600290810b91606081013590910b90608001356fffffffffffffffffffffffffffffffff16610ddd565b60408051938452602084019290925282820152519081900360600190f35b61037c6004803603602081101561037257600080fd5b503560020b610f90565b604080516001600160a01b039092168252519081900360200190f35b610137600480360360608110156103ae57600080fd5b506001600160a01b038135811691602081013582169160409091013516610fa1565b610137600480360360608110156103e657600080fd5b81359160208101359181019060608101604082013564010000000081111561040d57600080fd5b82018360208201111561041f57600080fd5b8035906020019184600183028401116401000000008311171561044157600080fd5b50909250905061105c565b6101376004803603608081101561046257600080fd5b506001600160a01b03813581169160208101359160408201358116916060013516611276565b6101376004803603608081101561049e57600080fd5b506001600160a01b0381358116916020810135916040820135811691606001351661131b565b610137600480360360808110156104da57600080fd5b506001600160a01b038135811691602081013591604082013581169160600135166113da565b6101376004803603608081101561051657600080fd5b506001600160a01b0381358116916020810135916040820135811691606001351661148e565b856001600160a01b031663490e6cbc86868633878760405160200180846001600160a01b0316815260200183815260200182815260200193505050506040516020818303038152906040526040518563ffffffff1660e01b815260040180856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156105ee5781810151838201526020016105d6565b50505050905090810190601f16801561061b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561063d57600080fd5b505af1158015610651573d6000803e3d6000fd5b50505050505050505050565b60008282602081101561066f57600080fd5b506040805187815260208101879052815192356001600160a01b031693507fd48241df4a75e663b29e55f9506b31f77ed0f48cfe7e7612d1163144995dc1ca929081900390910190a1600085131561079357336001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ff573d6000803e3d6000fd5b505050506040513d602081101561071557600080fd5b5051604080516323b872dd60e01b81526001600160a01b03848116600483015233602483015260448201899052915191909216916323b872dd91606480830192602092919082900301816000875af1158015610775573d6000803e3d6000fd5b505050506040513d602081101561078b57600080fd5b506108689050565b600084131561085057336001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107da573d6000803e3d6000fd5b505050506040513d60208110156107f057600080fd5b5051604080516323b872dd60e01b81526001600160a01b03848116600483015233602483015260448201889052915191909216916323b872dd91606480830192602092919082900301816000875af1158015610775573d6000803e3d6000fd5b8415801561085c575083155b610868576108686117a5565b5050505050565b826001600160a01b031663128acb088260016001600160ff1b03863360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561092b578181015183820152602001610913565b50505050905090810190601f1680156109585780820380516001836020036101000a031916815260200191505b50965050505050505060408051808303816000875af115801561097f573d6000803e3d6000fd5b505050506040513d604081101561086857600080fd5b6000828260208110156109a757600080fd5b50356001600160a01b031690508415610a8757336001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f8573d6000803e3d6000fd5b505050506040513d6020811015610a0e57600080fd5b5051604080516323b872dd60e01b81526001600160a01b03848116600483015233602483015260448201899052915191909216916323b872dd91606480830192602092919082900301816000875af1158015610a6e573d6000803e3d6000fd5b505050506040513d6020811015610a8457600080fd5b50505b8315610b5a57336001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610acb573d6000803e3d6000fd5b505050506040513d6020811015610ae157600080fd5b5051604080516323b872dd60e01b81526001600160a01b03848116600483015233602483015260448201889052915191909216916323b872dd91606480830192602092919082900301816000875af1158015610b41573d6000803e3d6000fd5b505050506040513d6020811015610b5757600080fd5b50505b604080518681526020810186905281517fa0968be00566083701c9ef671c169d7fb05ac8907de4ca17185de74ccbb694d4929181900390910190a15050505050565b836001600160a01b0316639e4e02273384600087863360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c61578181015183820152602001610c49565b50505050905090810190601f168015610c8e5780820380516001836020036101000a031916815260200191505b5097505050505050505060408051808303816000875af1158015610cb6573d6000803e3d6000fd5b505050506040513d6040811015610ccc57600080fd5b505050505050565b836001600160a01b031663128acb0883600186853360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610d89578181015183820152602001610d71565b50505050905090810190601f168015610db65780820380516001836020036101000a031916815260200191505b50965050505050505060408051808303816000875af1158015610cb6573d6000803e3d6000fd5b6000806000876001600160a01b031663aafe29c033898989893360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b031681526020018560020b81526020018460020b8152602001836fffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610eb3578181015183820152602001610e9b565b50505050905090810190601f168015610ee05780820380516001836020036101000a031916815260200191505b509750505050505050506060604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d6060811015610f1f57600080fd5b50805160208083015160409384015184518481529283018290526fffffffffffffffffffffffffffffffff16828501819052935192965094509192507fe6f6d49dd9278ee75517145a401566440c7245213758f9caf1618c642feec23e9181900360600190a1955095509592505050565b6000610f9b826114a9565b92915050565b826001600160a01b031663128acb088260006001600160ff1b03863360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360008381101561092b578181015183820152602001610913565b604080518581526020810185905281517f2b0391b4fa408cfe47abd1977d72985695b2e5ebd3175f55be25f2c68c5df21b929181900390910190a16000806000848460608110156110ac57600080fd5b506001600160a01b03813516935060208101359250604001359050811561119a57336001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110b573d6000803e3d6000fd5b505050506040513d602081101561112157600080fd5b5051604080516323b872dd60e01b81526001600160a01b03868116600483015233602483015260448201869052915191909216916323b872dd91606480830192602092919082900301816000875af1158015611181573d6000803e3d6000fd5b505050506040513d602081101561119757600080fd5b50505b801561126d57336001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111de573d6000803e3d6000fd5b505050506040513d60208110156111f457600080fd5b5051604080516323b872dd60e01b81526001600160a01b03868116600483015233602483015260448201859052915191909216916323b872dd91606480830192602092919082900301816000875af1158015611254573d6000803e3d6000fd5b505050506040513d602081101561126a57600080fd5b50505b50505050505050565b6040805133602080830182905283518084038201815283850194859052639e4e022760e01b909452604483018281526001600160a01b03878116606486015260016084860181905260a486018a905287821660c487015260c060e4870190815287516101048801528751928c1697639e4e0227978b9693958d958c95939491939192610124019185019080838360008315610c61578181015183820152602001610c49565b836001600160a01b031663128acb0883600161133687611791565b600003853360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b03168152602001806020018281038252838181518152602001915080519060200190808383600083811015610d89578181015183820152602001610d71565b836001600160a01b031663128acb0883600086853360405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b03168152602001806020018281038252838181518152602001915080519060200190808383600083811015610d89578181015183820152602001610d71565b836001600160a01b031663128acb0883600061133687611791565b6000600282900b60171d62ffffff818401821816620d89e88111156114e157604051633c10250f60e01b815260040160405180910390fd5b700100000000000000000000000000000000600182161561150f57506ffffcb933bd6fad37aa2d162d1a5940015b600282161561152e576ffff97272373d413259a46990580e213a0260801c5b600482161561154d576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561156c576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561158b576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156115aa576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156115c9576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156115e8576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611608576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611628576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611648576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611668576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611688576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156116a8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156116c8576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156116e8576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611709576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611729576e5d6af8dedb81196699c329225ee6040260801c5b62040000821061176f5762040000821615611752576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561176f576b048a170391f7dc42444e8fa20260801c5b60008560020b131561178057600019045b63ffffffff0160201c949350505050565b8060008112156117a057600080fd5b919050565b634e487b7160e01b600052600160045260246000fdfea164736f6c6343000814000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
