{
  "_format": "hh-sol-artifact-1",
  "contractName": "SwapLibrary",
  "sourceName": "contracts/SwapLibrary.sol",
  "abi": [
    {
      "inputs": [],
      "name": "AllowanceShouldGoBackToZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AtLeastOneRoute",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CurveRouterCantBeZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidLength",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidProtocol",
      "type": "error"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address[11]",
              "name": "route",
              "type": "address[11]"
            },
            {
              "internalType": "uint256[5][5]",
              "name": "swapParams",
              "type": "uint256[5][5]"
            },
            {
              "internalType": "address[5]",
              "name": "pools",
              "type": "address[5]"
            }
          ],
          "internalType": "struct CurveRoutes.CurveRoute",
          "name": "route",
          "type": "tuple"
        }
      ],
      "name": "InvalidRoute",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MaxSlippageCannotBeZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "received",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        }
      ],
      "name": "ReceivedLessThanAcceptable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "RouteNotFound",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "spent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountInMax",
          "type": "uint256"
        }
      ],
      "name": "SpentMoreThanAcceptable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "nSwaps",
          "type": "uint8"
        }
      ],
      "name": "TooManySwaps",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UniswapFeeTierCannotBeZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UniswapRouterCannotBeZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum SwapLibrary.SwapProtocol",
              "name": "protocol",
              "type": "SwapLibrary.SwapProtocol"
            },
            {
              "internalType": "uint256",
              "name": "maxSlippage",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "customParams",
              "type": "bytes"
            }
          ],
          "internalType": "struct SwapLibrary.SwapConfig",
          "name": "swapConfig",
          "type": "tuple"
        }
      ],
      "name": "validate",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x611d23610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c8063581e517d146100505780637756691514610082578063b2fca32c146100a2575b600080fd5b81801561005c57600080fd5b5061007061006b3660046116d1565b6100b7565b60405190815260200160405180910390f35b81801561008e57600080fd5b5061007061009d3660046116d1565b610131565b6100b56100b0366004611745565b610197565b005b600060016100c86020880188611798565b60028111156100d9576100d9611782565b036100f2576100eb86868686866102e1565b9050610128565b60026101016020880188611798565b600281111561011257610112611782565b03610124576100eb868686868661052a565b5060005b95945050505050565b600060016101426020880188611798565b600281111561015357610153611782565b03610165576100eb86868686866106ee565b60026101746020880188611798565b600281111561018557610185611782565b03610124576100eb868686868661093e565b80602001356000036101bc57604051633b3a5b4760e21b815260040160405180910390fd5b60016101cb6020830183611798565b60028111156101dc576101dc611782565b036102565760006101f060408301836117b9565b8101906101fd9190611807565b60208101519091506001600160a01b031661022b5760405163e35d3f9360e01b815260040160405180910390fd5b805162ffffff166000036102525760405163c087296d60e01b815260040160405180910390fd5b5050565b60026102656020830183611798565b600281111561027657610276611782565b036102c8576102c561028b60408301836117b9565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b2e92505050565b50565b6040516301fc71f560e21b815260040160405180910390fd5b6000806102f160408801886117b9565b8101906102fe9190611807565b90506000610313858960200135898988610d77565b602083015160405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291925088169063095ea7b3906044016020604051808303816000875af115801561036b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038f9190611883565b506000604051806101000160405280896001600160a01b03168152602001886001600160a01b03168152602001846000015162ffffff168152602001306001600160a01b0316815260200142815260200187815260200183815260200160006001600160a01b03168152509050600083602001516001600160a01b031663db3e2198836040518263ffffffff1660e01b815260040161042e919061191a565b6020604051808303816000875af115801561044d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104719190611929565b602085015160405163095ea7b360e01b81526001600160a01b039182166004820152600060248201529192508a169063095ea7b3906044016020604051808303816000875af11580156104c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ec9190611883565b508281111561051d57604051634641f9e160e01b815260048101829052602481018490526044015b60405180910390fd5b9998505050505050505050565b6000808061057c61053e60408a018a6117b9565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92508a9150610ddb9050565b915091506000610593868a602001358a8a89610d77565b60405163095ea7b360e01b81526001600160a01b038581166004830152602482018390529192509089169063095ea7b3906044016020604051808303816000875af11580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190611883565b506000805b871580159061061e5750600281105b1561066c5760008061063187878c610f27565b9150915061063f8a83611038565b610649908b611958565b9950610655818561196b565b9350505080806106649061197e565b91505061060f565b5060405163095ea7b360e01b81526001600160a01b038581166004830152600060248301528a169063095ea7b3906044016020604051808303816000875af11580156106bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e09190611883565b509998505050505050505050565b6000806106fe60408801886117b9565b81019061070b9190611807565b9050600061072085896020013589898861104d565b602083015160405163095ea7b360e01b81526001600160a01b0391821660048201526024810188905291925088169063095ea7b3906044016020604051808303816000875af1158015610777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079b9190611883565b506000604051806101000160405280896001600160a01b03168152602001886001600160a01b03168152602001846000015162ffffff168152602001306001600160a01b0316815260200142815260200187815260200183815260200160006001600160a01b03168152509050600083602001516001600160a01b031663414bf389836040518263ffffffff1660e01b815260040161083a919061191a565b6020604051808303816000875af1158015610859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087d9190611929565b6020850151604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529192508a169063dd62ed3e90604401602060405180830381865afa1580156108d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f59190611929565b1561091357604051630511d53d60e41b815260040160405180910390fd5b8281101561051d57604051634209aa3160e11b81526004810182905260248101849052604401610514565b6000808061095261053e60408a018a6117b9565b915091506000610969868a602001358a8a8961104d565b60405163095ea7b360e01b81526001600160a01b038581166004830152602482018990529192509089169063095ea7b3906044016020604051808303816000875af11580156109bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e09190611883565b5081516020830151604080850151905163c872a3c560e01b81526001600160a01b0387169363c872a3c593610a2293919290918c918891903090600401611a3c565b6020604051808303816000875af1158015610a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a659190611929565b604051636eb1769f60e11b81523060048201526001600160a01b0385811660248301529195509089169063dd62ed3e90604401602060405180830381865afa158015610ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad99190611929565b15610af757604051630511d53d60e41b815260040160405180910390fd5b80841015610b2257604051634209aa3160e11b81526004810185905260248101829052604401610514565b50505095945050505050565b6000610b3a8282611081565b90506001600160a01b038116610b635760405163e368363760e01b815260040160405180910390fd5b6000610b7a610b7360148361196b565b84906110e6565b90508060ff16600003610ba0576040516301ec987f60e31b815260040160405180910390fd5b60006001610baf60148361196b565b610bb9919061196b565b905060005b8260ff16811015610d4f57600080610bd68785611142565b9150915060005b8260ff16811015610c80578151600090610bf8836002611a92565b600b8110610c0857610c08611aa9565b60200201516001600160a01b03161480610c5857508151600090610c2d836002611a92565b610c3890600161196b565b600b8110610c4857610c48611aa9565b60200201516001600160a01b0316145b15610c785781604051635875b11160e01b81526004016105149190611abf565b600101610bdd565b508051600090610c91846002611b24565b60ff16600b8110610ca457610ca4611aa9565b60200201516001600160a01b031603610cd25780604051635875b11160e01b81526004016105149190611abf565b60058260ff1614158015610d1057508051600090610cef84611441565b600b8110610cff57610cff611aa9565b60200201516001600160a01b031614155b15610d305780604051635875b11160e01b81526004016105149190611abf565b610d3982611462565b610d43908561196b565b93505050600101610bbe565b5080845114610d715760405163251f56a160e21b815260040160405180910390fd5b50505050565b6000610d82846114c0565b610dc7610d9787670de0b6b3a764000061196b565b670de0b6b3a7640000610dc086670de0b6b3a7640000610db68a6114c0565b610dc0908e611a92565b919061153a565b610dd19190611b56565b9695505050505050565b6000610de5611608565b610df0856000611081565b91506000610e09610e0260148361196b565b87906110e6565b905060006001610e1a60148361196b565b610e24919061196b565b905060005b8260ff16811015610ef2576000610e4089846110e6565b90506001600160a01b038816610e61610e5a60018661196b565b8b90611081565b6001600160a01b0316148015610eb857506001600160a01b038716610ead610e8d60ff84166014611a92565b610e98906002611a92565b610ea360018761196b565b610e5a919061196b565b6001600160a01b0316145b15610ed457610ec78984611142565b9550610f1f945050505050565b610edd81611462565b610ee7908461196b565b925050600101610e29565b50604051638c9aec7b60e01b81526001600160a01b03808816600483015286166024820152604401610514565b935093915050565b81516020830151604080850151905163c07b535360e01b815260009384936001600160a01b0389169363c07b535393610f669392918991600401611b78565b602060405180830381865afa158015610f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa79190611929565b84516020860151604080880151905163c872a3c560e01b81529394506001600160a01b0389169363c872a3c593610feb939092909187916000913090600401611a3c565b6020604051808303816000875af115801561100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102e9190611929565b9150935093915050565b60008282188284100282185b90505b92915050565b6000611058836114c0565b610dc761106d87670de0b6b3a7640000611958565b84611077886114c0565b610dc0908b611a92565b600061108e82601461196b565b835110156110d65760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610514565b500160200151600160601b900490565b60006110f382600161196b565b835110156111395760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610514565b50016001015190565b600061114c611608565b61115684846110e6565b915060058260ff16111561118257604051635b030b5960e11b815260ff83166004820152602401610514565b60005b61118e83611441565b8110156111ed576111bf6111a3601483611a92565b6111ae60018761196b565b6111b8919061196b565b8690611081565b825182600b81106111d2576111d2611aa9565b6001600160a01b039092166020929092020152600101611185565b5060146111f983611441565b6112039190611a92565b61120e90600161196b565b611218908461196b565b925060005b8260ff168110156113bc57611252611236600183611a92565b611241906005611a92565b61124b908661196b565b86906110e6565b60ff168260200151826005811061126b5761126b611aa9565b60200201515261129f61127f600183611a92565b61128a906005611a92565b611294908661196b565b61124b90600161196b565b60ff16826020015182600581106112b8576112b8611aa9565b6020020151600160200201526112f26112d2600183611a92565b6112dd906005611a92565b6112e7908661196b565b61124b90600261196b565b60ff168260200151826005811061130b5761130b611aa9565b602002015160400152611342611322600183611a92565b61132d906005611a92565b611337908661196b565b61124b90600361196b565b60ff168260200151826005811061135b5761135b611aa9565b602002015160600152611392611372600183611a92565b61137d906005611a92565b611387908661196b565b61124b90600461196b565b60ff16826020015182600581106113ab576113ab611aa9565b60200201516080015260010161121d565b506113cb600160ff8416611a92565b6113d6906005611a92565b6113e0908461196b565b925060005b8260ff16811015611439576114086113fe601483611a92565b6111b8908661196b565b8260400151826005811061141e5761141e611aa9565b6001600160a01b0390921660209290920201526001016113e5565b509250929050565b600061144e826002611b24565b611459906001611baa565b60ff1692915050565b6000611472601460ff8416611a92565b600161147f846005611b24565b60ff1661148c9190611a92565b601461149785611441565b6114a19190611a92565b6114ac90600161196b565b6114b6919061196b565b611047919061196b565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115249190611bc3565b61152f906012611be6565b61104790600a611cde565b60008383028160001985870982811083820303915050806000036115715783828161156757611567611b40565b04925050506115ef565b8084116115885761158860038515026011186115f6565b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b634e487b71600052806020526024601cfd5b604051806060016040528061161b61163a565b8152602001611628611659565b8152602001611635611686565b905290565b604051806101600160405280600b906020820280368337509192915050565b6040518060a001604052806005905b611670611686565b8152602001906001900390816116685790505090565b6040518060a001604052806005906020820280368337509192915050565b6000606082840312156116b657600080fd5b50919050565b6001600160a01b03811681146102c557600080fd5b600080600080600060a086880312156116e957600080fd5b853567ffffffffffffffff81111561170057600080fd5b61170c888289016116a4565b955050602086013561171d816116bc565b9350604086013561172d816116bc565b94979396509394606081013594506080013592915050565b60006020828403121561175757600080fd5b813567ffffffffffffffff81111561176e57600080fd5b61177a848285016116a4565b949350505050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156117aa57600080fd5b8135600381106115ef57600080fd5b6000808335601e198436030181126117d057600080fd5b83018035915067ffffffffffffffff8211156117eb57600080fd5b60200191503681900382131561180057600080fd5b9250929050565b6000604082840312801561181a57600080fd5b600090506040516040810181811067ffffffffffffffff8211171561184d57634e487b7160e01b83526041600452602483fd5b604052833562ffffff81168114611862578283fd5b815260208401359150611874826116bc565b60208101919091529392505050565b60006020828403121561189557600080fd5b815180151581146115ef57600080fd5b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015191821690840152506080810151608083015260a081015160a083015260c081015160c083015260e081015161191560e08401826001600160a01b03169052565b505050565b610100810161104782846118a5565b60006020828403121561193b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561104757611047611942565b8082018082111561104757611047611942565b60006001820161199057611990611942565b5060010190565b8060005b600b811015610d715781516001600160a01b031684526020938401939091019060010161199b565b8060005b6005811015610d71578151600085815b60058110156119f65783518252602093840193909101906001016119d7565b50505060a0949094019350602091909101906001016119c7565b8060005b6005811015610d715781516001600160a01b0316845260209384019390910190600101611a14565b6105808101611a4b8289611997565b611a596101608301886119c3565b85610480830152846104a0830152611a756104c0830185611a10565b6001600160a01b0392909216610560919091015295945050505050565b808202811582820484141761104757611047611942565b634e487b7160e01b600052603260045260246000fd5b81516105208201908260005b600b811015611af35782516001600160a01b0316825260209283019290910190600101611acb565b5050506020830151611b096101608401826119c3565b506040830151611b1d610480840182611a10565b5092915050565b60ff8181168382160290811690818114611b1d57611b1d611942565b634e487b7160e01b600052601260045260246000fd5b600082611b7357634e487b7160e01b600052601260045260246000fd5b500490565b6105408101611b878287611997565b611b956101608301866119c3565b836104808301526101286104a0830184611a10565b60ff818116838216019081111561104757611047611942565b600060208284031215611bd557600080fd5b815160ff811681146115ef57600080fd5b60ff828116828216039081111561104757611047611942565b6001815b6001841115610f1f57808504811115611c1e57611c1e611942565b6001841615611c2c57908102905b60019390931c928002611c03565b600082611c4957506001611047565b81611c5657506000611047565b8160018114611c6c5760028114611c7657611c92565b6001915050611047565b60ff841115611c8757611c87611942565b50506001821b611047565b5060208310610133831016604e8410600b8410161715611cb5575081810a611047565b611cc26000198484611bff565b8060001904821115611cd657611cd6611942565b029392505050565b600061104460ff841683611c3a56fea26469706673582212203cfd9958529acddcddb32bf0ee9e785109530e511517b02fe9fc4d32a63c652164736f6c634300081c0033",
  "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c8063581e517d146100505780637756691514610082578063b2fca32c146100a2575b600080fd5b81801561005c57600080fd5b5061007061006b3660046116d1565b6100b7565b60405190815260200160405180910390f35b81801561008e57600080fd5b5061007061009d3660046116d1565b610131565b6100b56100b0366004611745565b610197565b005b600060016100c86020880188611798565b60028111156100d9576100d9611782565b036100f2576100eb86868686866102e1565b9050610128565b60026101016020880188611798565b600281111561011257610112611782565b03610124576100eb868686868661052a565b5060005b95945050505050565b600060016101426020880188611798565b600281111561015357610153611782565b03610165576100eb86868686866106ee565b60026101746020880188611798565b600281111561018557610185611782565b03610124576100eb868686868661093e565b80602001356000036101bc57604051633b3a5b4760e21b815260040160405180910390fd5b60016101cb6020830183611798565b60028111156101dc576101dc611782565b036102565760006101f060408301836117b9565b8101906101fd9190611807565b60208101519091506001600160a01b031661022b5760405163e35d3f9360e01b815260040160405180910390fd5b805162ffffff166000036102525760405163c087296d60e01b815260040160405180910390fd5b5050565b60026102656020830183611798565b600281111561027657610276611782565b036102c8576102c561028b60408301836117b9565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b2e92505050565b50565b6040516301fc71f560e21b815260040160405180910390fd5b6000806102f160408801886117b9565b8101906102fe9190611807565b90506000610313858960200135898988610d77565b602083015160405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291925088169063095ea7b3906044016020604051808303816000875af115801561036b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038f9190611883565b506000604051806101000160405280896001600160a01b03168152602001886001600160a01b03168152602001846000015162ffffff168152602001306001600160a01b0316815260200142815260200187815260200183815260200160006001600160a01b03168152509050600083602001516001600160a01b031663db3e2198836040518263ffffffff1660e01b815260040161042e919061191a565b6020604051808303816000875af115801561044d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104719190611929565b602085015160405163095ea7b360e01b81526001600160a01b039182166004820152600060248201529192508a169063095ea7b3906044016020604051808303816000875af11580156104c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ec9190611883565b508281111561051d57604051634641f9e160e01b815260048101829052602481018490526044015b60405180910390fd5b9998505050505050505050565b6000808061057c61053e60408a018a6117b9565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92508a9150610ddb9050565b915091506000610593868a602001358a8a89610d77565b60405163095ea7b360e01b81526001600160a01b038581166004830152602482018390529192509089169063095ea7b3906044016020604051808303816000875af11580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190611883565b506000805b871580159061061e5750600281105b1561066c5760008061063187878c610f27565b9150915061063f8a83611038565b610649908b611958565b9950610655818561196b565b9350505080806106649061197e565b91505061060f565b5060405163095ea7b360e01b81526001600160a01b038581166004830152600060248301528a169063095ea7b3906044016020604051808303816000875af11580156106bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e09190611883565b509998505050505050505050565b6000806106fe60408801886117b9565b81019061070b9190611807565b9050600061072085896020013589898861104d565b602083015160405163095ea7b360e01b81526001600160a01b0391821660048201526024810188905291925088169063095ea7b3906044016020604051808303816000875af1158015610777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079b9190611883565b506000604051806101000160405280896001600160a01b03168152602001886001600160a01b03168152602001846000015162ffffff168152602001306001600160a01b0316815260200142815260200187815260200183815260200160006001600160a01b03168152509050600083602001516001600160a01b031663414bf389836040518263ffffffff1660e01b815260040161083a919061191a565b6020604051808303816000875af1158015610859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087d9190611929565b6020850151604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529192508a169063dd62ed3e90604401602060405180830381865afa1580156108d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f59190611929565b1561091357604051630511d53d60e41b815260040160405180910390fd5b8281101561051d57604051634209aa3160e11b81526004810182905260248101849052604401610514565b6000808061095261053e60408a018a6117b9565b915091506000610969868a602001358a8a8961104d565b60405163095ea7b360e01b81526001600160a01b038581166004830152602482018990529192509089169063095ea7b3906044016020604051808303816000875af11580156109bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e09190611883565b5081516020830151604080850151905163c872a3c560e01b81526001600160a01b0387169363c872a3c593610a2293919290918c918891903090600401611a3c565b6020604051808303816000875af1158015610a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a659190611929565b604051636eb1769f60e11b81523060048201526001600160a01b0385811660248301529195509089169063dd62ed3e90604401602060405180830381865afa158015610ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad99190611929565b15610af757604051630511d53d60e41b815260040160405180910390fd5b80841015610b2257604051634209aa3160e11b81526004810185905260248101829052604401610514565b50505095945050505050565b6000610b3a8282611081565b90506001600160a01b038116610b635760405163e368363760e01b815260040160405180910390fd5b6000610b7a610b7360148361196b565b84906110e6565b90508060ff16600003610ba0576040516301ec987f60e31b815260040160405180910390fd5b60006001610baf60148361196b565b610bb9919061196b565b905060005b8260ff16811015610d4f57600080610bd68785611142565b9150915060005b8260ff16811015610c80578151600090610bf8836002611a92565b600b8110610c0857610c08611aa9565b60200201516001600160a01b03161480610c5857508151600090610c2d836002611a92565b610c3890600161196b565b600b8110610c4857610c48611aa9565b60200201516001600160a01b0316145b15610c785781604051635875b11160e01b81526004016105149190611abf565b600101610bdd565b508051600090610c91846002611b24565b60ff16600b8110610ca457610ca4611aa9565b60200201516001600160a01b031603610cd25780604051635875b11160e01b81526004016105149190611abf565b60058260ff1614158015610d1057508051600090610cef84611441565b600b8110610cff57610cff611aa9565b60200201516001600160a01b031614155b15610d305780604051635875b11160e01b81526004016105149190611abf565b610d3982611462565b610d43908561196b565b93505050600101610bbe565b5080845114610d715760405163251f56a160e21b815260040160405180910390fd5b50505050565b6000610d82846114c0565b610dc7610d9787670de0b6b3a764000061196b565b670de0b6b3a7640000610dc086670de0b6b3a7640000610db68a6114c0565b610dc0908e611a92565b919061153a565b610dd19190611b56565b9695505050505050565b6000610de5611608565b610df0856000611081565b91506000610e09610e0260148361196b565b87906110e6565b905060006001610e1a60148361196b565b610e24919061196b565b905060005b8260ff16811015610ef2576000610e4089846110e6565b90506001600160a01b038816610e61610e5a60018661196b565b8b90611081565b6001600160a01b0316148015610eb857506001600160a01b038716610ead610e8d60ff84166014611a92565b610e98906002611a92565b610ea360018761196b565b610e5a919061196b565b6001600160a01b0316145b15610ed457610ec78984611142565b9550610f1f945050505050565b610edd81611462565b610ee7908461196b565b925050600101610e29565b50604051638c9aec7b60e01b81526001600160a01b03808816600483015286166024820152604401610514565b935093915050565b81516020830151604080850151905163c07b535360e01b815260009384936001600160a01b0389169363c07b535393610f669392918991600401611b78565b602060405180830381865afa158015610f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa79190611929565b84516020860151604080880151905163c872a3c560e01b81529394506001600160a01b0389169363c872a3c593610feb939092909187916000913090600401611a3c565b6020604051808303816000875af115801561100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102e9190611929565b9150935093915050565b60008282188284100282185b90505b92915050565b6000611058836114c0565b610dc761106d87670de0b6b3a7640000611958565b84611077886114c0565b610dc0908b611a92565b600061108e82601461196b565b835110156110d65760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610514565b500160200151600160601b900490565b60006110f382600161196b565b835110156111395760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610514565b50016001015190565b600061114c611608565b61115684846110e6565b915060058260ff16111561118257604051635b030b5960e11b815260ff83166004820152602401610514565b60005b61118e83611441565b8110156111ed576111bf6111a3601483611a92565b6111ae60018761196b565b6111b8919061196b565b8690611081565b825182600b81106111d2576111d2611aa9565b6001600160a01b039092166020929092020152600101611185565b5060146111f983611441565b6112039190611a92565b61120e90600161196b565b611218908461196b565b925060005b8260ff168110156113bc57611252611236600183611a92565b611241906005611a92565b61124b908661196b565b86906110e6565b60ff168260200151826005811061126b5761126b611aa9565b60200201515261129f61127f600183611a92565b61128a906005611a92565b611294908661196b565b61124b90600161196b565b60ff16826020015182600581106112b8576112b8611aa9565b6020020151600160200201526112f26112d2600183611a92565b6112dd906005611a92565b6112e7908661196b565b61124b90600261196b565b60ff168260200151826005811061130b5761130b611aa9565b602002015160400152611342611322600183611a92565b61132d906005611a92565b611337908661196b565b61124b90600361196b565b60ff168260200151826005811061135b5761135b611aa9565b602002015160600152611392611372600183611a92565b61137d906005611a92565b611387908661196b565b61124b90600461196b565b60ff16826020015182600581106113ab576113ab611aa9565b60200201516080015260010161121d565b506113cb600160ff8416611a92565b6113d6906005611a92565b6113e0908461196b565b925060005b8260ff16811015611439576114086113fe601483611a92565b6111b8908661196b565b8260400151826005811061141e5761141e611aa9565b6001600160a01b0390921660209290920201526001016113e5565b509250929050565b600061144e826002611b24565b611459906001611baa565b60ff1692915050565b6000611472601460ff8416611a92565b600161147f846005611b24565b60ff1661148c9190611a92565b601461149785611441565b6114a19190611a92565b6114ac90600161196b565b6114b6919061196b565b611047919061196b565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115249190611bc3565b61152f906012611be6565b61104790600a611cde565b60008383028160001985870982811083820303915050806000036115715783828161156757611567611b40565b04925050506115ef565b8084116115885761158860038515026011186115f6565b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b634e487b71600052806020526024601cfd5b604051806060016040528061161b61163a565b8152602001611628611659565b8152602001611635611686565b905290565b604051806101600160405280600b906020820280368337509192915050565b6040518060a001604052806005905b611670611686565b8152602001906001900390816116685790505090565b6040518060a001604052806005906020820280368337509192915050565b6000606082840312156116b657600080fd5b50919050565b6001600160a01b03811681146102c557600080fd5b600080600080600060a086880312156116e957600080fd5b853567ffffffffffffffff81111561170057600080fd5b61170c888289016116a4565b955050602086013561171d816116bc565b9350604086013561172d816116bc565b94979396509394606081013594506080013592915050565b60006020828403121561175757600080fd5b813567ffffffffffffffff81111561176e57600080fd5b61177a848285016116a4565b949350505050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156117aa57600080fd5b8135600381106115ef57600080fd5b6000808335601e198436030181126117d057600080fd5b83018035915067ffffffffffffffff8211156117eb57600080fd5b60200191503681900382131561180057600080fd5b9250929050565b6000604082840312801561181a57600080fd5b600090506040516040810181811067ffffffffffffffff8211171561184d57634e487b7160e01b83526041600452602483fd5b604052833562ffffff81168114611862578283fd5b815260208401359150611874826116bc565b60208101919091529392505050565b60006020828403121561189557600080fd5b815180151581146115ef57600080fd5b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015191821690840152506080810151608083015260a081015160a083015260c081015160c083015260e081015161191560e08401826001600160a01b03169052565b505050565b610100810161104782846118a5565b60006020828403121561193b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561104757611047611942565b8082018082111561104757611047611942565b60006001820161199057611990611942565b5060010190565b8060005b600b811015610d715781516001600160a01b031684526020938401939091019060010161199b565b8060005b6005811015610d71578151600085815b60058110156119f65783518252602093840193909101906001016119d7565b50505060a0949094019350602091909101906001016119c7565b8060005b6005811015610d715781516001600160a01b0316845260209384019390910190600101611a14565b6105808101611a4b8289611997565b611a596101608301886119c3565b85610480830152846104a0830152611a756104c0830185611a10565b6001600160a01b0392909216610560919091015295945050505050565b808202811582820484141761104757611047611942565b634e487b7160e01b600052603260045260246000fd5b81516105208201908260005b600b811015611af35782516001600160a01b0316825260209283019290910190600101611acb565b5050506020830151611b096101608401826119c3565b506040830151611b1d610480840182611a10565b5092915050565b60ff8181168382160290811690818114611b1d57611b1d611942565b634e487b7160e01b600052601260045260246000fd5b600082611b7357634e487b7160e01b600052601260045260246000fd5b500490565b6105408101611b878287611997565b611b956101608301866119c3565b836104808301526101286104a0830184611a10565b60ff818116838216019081111561104757611047611942565b600060208284031215611bd557600080fd5b815160ff811681146115ef57600080fd5b60ff828116828216039081111561104757611047611942565b6001815b6001841115610f1f57808504811115611c1e57611c1e611942565b6001841615611c2c57908102905b60019390931c928002611c03565b600082611c4957506001611047565b81611c5657506000611047565b8160018114611c6c5760028114611c7657611c92565b6001915050611047565b60ff841115611c8757611c87611942565b50506001821b611047565b5060208310610133831016604e8410600b8410161715611cb5575081810a611047565b611cc26000198484611bff565b8060001904821115611cd657611cd6611942565b029392505050565b600061104460ff841683611c3a56fea26469706673582212203cfd9958529acddcddb32bf0ee9e785109530e511517b02fe9fc4d32a63c652164736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
