{
  "_format": "hh-sol-artifact-1",
  "contractName": "AxelarDVNAdapterFeeLib",
  "sourceName": "contracts/uln/dvn/adapters/axelar/AxelarDVNAdapterFeeLib.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        }
      ],
      "name": "AxelarDVNAdapter_EidNotSupported",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "actual",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "requested",
          "type": "uint256"
        }
      ],
      "name": "AxelarDVNAdapter_InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AxelarDVNAdapter_OptionsUnsupported",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "Transfer_NativeFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Transfer_ToAddressIsZero",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "gas",
              "type": "uint64"
            },
            {
              "internalType": "uint128",
              "name": "floorMarginUSD",
              "type": "uint128"
            }
          ],
          "indexed": false,
          "internalType": "struct IAxelarDVNAdapterFeeLib.DstConfigParam[]",
          "name": "params",
          "type": "tuple[]"
        }
      ],
      "name": "DstConfigSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "gasService",
          "type": "address"
        }
      ],
      "name": "GasServiceSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "multiplierBps",
          "type": "uint16"
        }
      ],
      "name": "NativeGasFeeMultiplierBpsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "priceFeed",
          "type": "address"
        }
      ],
      "name": "PriceFeedSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokenWithdrawn",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }
      ],
      "name": "dstConfig",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "gas",
          "type": "uint64"
        },
        {
          "internalType": "uint128",
          "name": "floorMarginUSD",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "dvn",
      "outputs": [
        {
          "internalType": "contract IAxelarDVNAdapter",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gasService",
      "outputs": [
        {
          "internalType": "contract IAxelarGasService",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "confirmations",
              "type": "uint64"
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "defaultMultiplierBps",
              "type": "uint16"
            }
          ],
          "internalType": "struct IAxelarDVNAdapterFeeLib.Param",
          "name": "_param",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "string",
              "name": "chainName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "peer",
              "type": "string"
            },
            {
              "internalType": "uint16",
              "name": "multiplierBps",
              "type": "uint16"
            },
            {
              "internalType": "uint256",
              "name": "nativeGasFee",
              "type": "uint256"
            }
          ],
          "internalType": "struct IAxelarDVNAdapter.DstConfig",
          "name": "_dstConfig",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "_options",
          "type": "bytes"
        }
      ],
      "name": "getFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "confirmations",
              "type": "uint64"
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "defaultMultiplierBps",
              "type": "uint16"
            }
          ],
          "internalType": "struct IAxelarDVNAdapterFeeLib.Param",
          "name": "_param",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "string",
              "name": "chainName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "peer",
              "type": "string"
            },
            {
              "internalType": "uint16",
              "name": "multiplierBps",
              "type": "uint16"
            },
            {
              "internalType": "uint256",
              "name": "nativeGasFee",
              "type": "uint256"
            }
          ],
          "internalType": "struct IAxelarDVNAdapter.DstConfig",
          "name": "_dstConfig",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_options",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "_sendLib",
          "type": "address"
        }
      ],
      "name": "getFeeOnSend",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_gasService",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_dvn",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_nativeGasFeeMultiplierBps",
          "type": "uint16"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nativeGasFeeMultiplierBps",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "priceFeed",
      "outputs": [
        {
          "internalType": "contract ILayerZeroPriceFeed",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "gas",
              "type": "uint64"
            },
            {
              "internalType": "uint128",
              "name": "floorMarginUSD",
              "type": "uint128"
            }
          ],
          "internalType": "struct IAxelarDVNAdapterFeeLib.DstConfigParam[]",
          "name": "_param",
          "type": "tuple[]"
        }
      ],
      "name": "setDstConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_gasService",
          "type": "address"
        }
      ],
      "name": "setGasService",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_multiplierBps",
          "type": "uint16"
        }
      ],
      "name": "setNativeGasFeeMultiplierBps",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_priceFeed",
          "type": "address"
        }
      ],
      "name": "setPriceFeed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50611cc9806100206000396000f3fe6080604052600436106100f75760003560e01c80638596f3631161008a578063d135ca9311610059578063d135ca9314610352578063dfdd8b9014610373578063f0b81bb414610393578063f2fde38b146103b357600080fd5b80638596f363146102515780638da5cb5b146102715780639e9449651461029c578063b44966801461032457600080fd5b806371a6fbfe116100c657806371a6fbfe146101c4578063724e78da146101e4578063741bef1a146102045780637ebef5291461023157600080fd5b806301e336671461010357806317b00e7d146101255780636a22d8cc14610182578063715018a6146101af57600080fd5b366100fe57005b600080fd5b34801561010f57600080fd5b5061012361011e36600461155c565b6103d3565b005b34801561013157600080fd5b506065546101589062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018e57600080fd5b506066546101589073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101bb57600080fd5b50610123610443565b3480156101d057600080fd5b506101236101df3660046115aa565b610457565b3480156101f057600080fd5b506101236101ff3660046115cc565b6104c7565b34801561021057600080fd5b506067546101589073ffffffffffffffffffffffffffffffffffffffff1681565b34801561023d57600080fd5b5061012361024c3660046115e7565b610542565b34801561025d57600080fd5b5061012361026c36600461162a565b610826565b34801561027d57600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610158565b3480156102a857600080fd5b506102f36102b73660046116b3565b60686020526000908152604090205467ffffffffffffffff8116906801000000000000000090046fffffffffffffffffffffffffffffffff1682565b6040805167ffffffffffffffff90931683526fffffffffffffffffffffffffffffffff909116602083015201610179565b34801561033057600080fd5b5060655461033f9061ffff1681565b60405161ffff9091168152602001610179565b61036561036036600461175e565b610974565b604051908152602001610179565b34801561037f57600080fd5b5061012361038e3660046115cc565b610bb7565b34801561039f57600080fd5b506103656103ae36600461189f565b610c32565b3480156103bf57600080fd5b506101236103ce3660046115cc565b610cbb565b6103db610d72565b6103e6838383610df3565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56209060600160405180910390a1505050565b61044b610d72565b6104556000610e28565b565b61045f610d72565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83169081179091556040519081527f9cdcd7ab8980314cc1c51bbe119a035a775ddb353b9b897287d010d00f4bb01c906020015b60405180910390a150565b6104cf610d72565b606780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f40d8738b990e6ff9a2f56f11247e657a1e7070472260b020a4fc3ab1844787bd906020016104bc565b600061056c7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81166105c55773ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103556105e7565b3373ffffffffffffffffffffffffffffffffffffffff8216146105e757600080fd5b600054610100900460ff16158080156106075750600054600160ff909116105b806106215750303b158015610621575060005460ff166001145b6106b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561071057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610718610e9f565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691909117909155606580547fffffffffffffffffffff000000000000000000000000000000000000000000001662010000928716929092027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169190911761ffff8516179055801561081f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b61082e610d72565b60005b81811015610936573683838381811061084c5761084c611917565b90506060020190506040518060400160405280826020016020810190610872919061195e565b67ffffffffffffffff1681526020016108916060840160408501611999565b6fffffffffffffffffffffffffffffffff169052606860006108b660208501856116b3565b63ffffffff1681526020808201929092526040016000208251815493909201516fffffffffffffffffffffffffffffffff1668010000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931667ffffffffffffffff9092169190911791909117905550600101610831565b507f4bc47f7ad04f6122b687e6997c1313863ab8340f575aedbf8c2496fa5274861b82826040516109689291906119b4565b60405180910390a15050565b600085606001356000036109ca5761098f60208801886116b3565b6040517ff0951e9700000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024016106a9565b8215610a02576040517f26cbb93300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a2f610a1560608801604089016115aa565b610a2560808a0160608b016115aa565b8860600135610f3e565b90506000610a408760600135610f70565b90504781811015610b1e576065546040517f1271241700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526201000090920490911690631271241790602401600060405180830381600087803b158015610abf57600080fd5b505af1158015610ad3573d6000803e3d6000fd5b5050505047905081811015610b1e576040517f576cbba300000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016106a9565b60665473ffffffffffffffffffffffffffffffffffffffff16630c93e3bb8333610b488c80611a3d565b610b5560208f018f611a3d565b8e306040518963ffffffff1660e01b8152600401610b799796959493929190611b59565b6000604051808303818588803b158015610b9257600080fd5b505af1158015610ba6573d6000803e3d6000fd5b505050505050509695505050505050565b610bbf610d72565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f83650e857191635cdf372edf115c49497fa8a7db67978cab532ffa395405803a906020016104bc565b60008360600135600003610c4d5761098f60208601866116b3565b8115610c85576040517f26cbb93300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cb2610c9860608601604087016115aa565b610ca860808801606089016115aa565b8660600135610f3e565b95945050505050565b610cc3610d72565b73ffffffffffffffffffffffffffffffffffffffff8116610d66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106a9565b610d6f81610e28565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a9565b73ffffffffffffffffffffffffffffffffffffffff8316610e1d57610e188282610f98565b505050565b610e1883838361109e565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106a9565b61045561110c565b60008061ffff851615610f515784610f53565b835b61ffff169050612710610f668285611bc9565b610cb29190611c07565b60655460009061271090610f889061ffff1684611bc9565b610f929190611c07565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8216610fe5576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461103f576040519150601f19603f3d011682016040523d82523d6000602084013e611044565b606091505b5050905080610e18576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016106a9565b73ffffffffffffffffffffffffffffffffffffffff82166110eb576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e1873ffffffffffffffffffffffffffffffffffffffff841683836111ac565b600054610100900460ff166111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106a9565b61045533610e28565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610e1892869291600091611277918516908490611324565b90508051600014806112985750808060200190518101906112989190611c42565b610e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106a9565b6060611333848460008561133b565b949350505050565b6060824710156113cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106a9565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516113f69190611c64565b60006040518083038185875af1925050503d8060008114611433576040519150601f19603f3d011682016040523d82523d6000602084013e611438565b606091505b509150915061144987838387611454565b979650505050505050565b606083156114ea5782516000036114e35773ffffffffffffffffffffffffffffffffffffffff85163b6114e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a9565b5081611333565b61133383838151156114ff5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a99190611c80565b803573ffffffffffffffffffffffffffffffffffffffff8116811461155757600080fd5b919050565b60008060006060848603121561157157600080fd5b61157a84611533565b925061158860208501611533565b9150604084013590509250925092565b803561ffff8116811461155757600080fd5b6000602082840312156115bc57600080fd5b6115c582611598565b9392505050565b6000602082840312156115de57600080fd5b6115c582611533565b6000806000606084860312156115fc57600080fd5b61160584611533565b925061161360208501611533565b915061162160408501611598565b90509250925092565b6000806020838503121561163d57600080fd5b823567ffffffffffffffff8082111561165557600080fd5b818501915085601f83011261166957600080fd5b81358181111561167857600080fd5b86602060608302850101111561168d57600080fd5b60209290920196919550909350505050565b803563ffffffff8116811461155757600080fd5b6000602082840312156116c557600080fd5b6115c58261169f565b6000608082840312156116e057600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083601f84011261172757600080fd5b50813567ffffffffffffffff81111561173f57600080fd5b60208301915083602082850101111561175757600080fd5b9250929050565b600080600080600080610100878903121561177857600080fd5b61178288886116ce565b9550608087013567ffffffffffffffff8082111561179f57600080fd5b6117ab8a838b016116ce565b965060a08901359150808211156117c157600080fd5b818901915089601f8301126117d557600080fd5b8135818111156117e7576117e76116e6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561182d5761182d6116e6565b816040528281528c602084870101111561184657600080fd5b8260208601602083013760006020848301015280985050505060c089013591508082111561187357600080fd5b5061188089828a01611715565b9094509250611893905060e08801611533565b90509295509295509295565b60008060008060c085870312156118b557600080fd5b6118bf86866116ce565b9350608085013567ffffffffffffffff808211156118dc57600080fd5b6118e8888389016116ce565b945060a08701359150808211156118fe57600080fd5b5061190b87828801611715565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b803567ffffffffffffffff8116811461155757600080fd5b60006020828403121561197057600080fd5b6115c582611946565b80356fffffffffffffffffffffffffffffffff8116811461155757600080fd5b6000602082840312156119ab57600080fd5b6115c582611979565b6020808252818101839052600090604080840186845b87811015611a305763ffffffff6119e08361169f565b16835267ffffffffffffffff6119f7868401611946565b16858401526fffffffffffffffffffffffffffffffff611a18858401611979565b168385015260609283019291909101906001016119ca565b5090979650505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611a7257600080fd5b83018035915067ffffffffffffffff821115611a8d57600080fd5b60200191503681900382131561175757600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60005b83811015611b06578181015183820152602001611aee565b50506000910152565b60008151808452611b27816020860160208601611aeb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600073ffffffffffffffffffffffffffffffffffffffff808a16835260a06020840152611b8a60a08401898b611aa2565b8381036040850152611b9d81888a611aa2565b90508381036060850152611bb18187611b0f565b92505080841660808401525098975050505050505050565b8082028115828204841417610f92577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082611c3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611c5457600080fd5b815180151581146115c557600080fd5b60008251611c76818460208701611aeb565b9190910192915050565b6020815260006115c56020830184611b0f56fea2646970667358221220341084d743be51f24cd3f62bb4e7cd712d16ef0eead90b2b1e85d7884e3e5f2264736f6c63430008160033",
  "deployedBytecode": "0x6080604052600436106100f75760003560e01c80638596f3631161008a578063d135ca9311610059578063d135ca9314610352578063dfdd8b9014610373578063f0b81bb414610393578063f2fde38b146103b357600080fd5b80638596f363146102515780638da5cb5b146102715780639e9449651461029c578063b44966801461032457600080fd5b806371a6fbfe116100c657806371a6fbfe146101c4578063724e78da146101e4578063741bef1a146102045780637ebef5291461023157600080fd5b806301e336671461010357806317b00e7d146101255780636a22d8cc14610182578063715018a6146101af57600080fd5b366100fe57005b600080fd5b34801561010f57600080fd5b5061012361011e36600461155c565b6103d3565b005b34801561013157600080fd5b506065546101589062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018e57600080fd5b506066546101589073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101bb57600080fd5b50610123610443565b3480156101d057600080fd5b506101236101df3660046115aa565b610457565b3480156101f057600080fd5b506101236101ff3660046115cc565b6104c7565b34801561021057600080fd5b506067546101589073ffffffffffffffffffffffffffffffffffffffff1681565b34801561023d57600080fd5b5061012361024c3660046115e7565b610542565b34801561025d57600080fd5b5061012361026c36600461162a565b610826565b34801561027d57600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610158565b3480156102a857600080fd5b506102f36102b73660046116b3565b60686020526000908152604090205467ffffffffffffffff8116906801000000000000000090046fffffffffffffffffffffffffffffffff1682565b6040805167ffffffffffffffff90931683526fffffffffffffffffffffffffffffffff909116602083015201610179565b34801561033057600080fd5b5060655461033f9061ffff1681565b60405161ffff9091168152602001610179565b61036561036036600461175e565b610974565b604051908152602001610179565b34801561037f57600080fd5b5061012361038e3660046115cc565b610bb7565b34801561039f57600080fd5b506103656103ae36600461189f565b610c32565b3480156103bf57600080fd5b506101236103ce3660046115cc565b610cbb565b6103db610d72565b6103e6838383610df3565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56209060600160405180910390a1505050565b61044b610d72565b6104556000610e28565b565b61045f610d72565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83169081179091556040519081527f9cdcd7ab8980314cc1c51bbe119a035a775ddb353b9b897287d010d00f4bb01c906020015b60405180910390a150565b6104cf610d72565b606780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f40d8738b990e6ff9a2f56f11247e657a1e7070472260b020a4fc3ab1844787bd906020016104bc565b600061056c7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81166105c55773ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103556105e7565b3373ffffffffffffffffffffffffffffffffffffffff8216146105e757600080fd5b600054610100900460ff16158080156106075750600054600160ff909116105b806106215750303b158015610621575060005460ff166001145b6106b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561071057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610718610e9f565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691909117909155606580547fffffffffffffffffffff000000000000000000000000000000000000000000001662010000928716929092027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169190911761ffff8516179055801561081f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b61082e610d72565b60005b81811015610936573683838381811061084c5761084c611917565b90506060020190506040518060400160405280826020016020810190610872919061195e565b67ffffffffffffffff1681526020016108916060840160408501611999565b6fffffffffffffffffffffffffffffffff169052606860006108b660208501856116b3565b63ffffffff1681526020808201929092526040016000208251815493909201516fffffffffffffffffffffffffffffffff1668010000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931667ffffffffffffffff9092169190911791909117905550600101610831565b507f4bc47f7ad04f6122b687e6997c1313863ab8340f575aedbf8c2496fa5274861b82826040516109689291906119b4565b60405180910390a15050565b600085606001356000036109ca5761098f60208801886116b3565b6040517ff0951e9700000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024016106a9565b8215610a02576040517f26cbb93300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a2f610a1560608801604089016115aa565b610a2560808a0160608b016115aa565b8860600135610f3e565b90506000610a408760600135610f70565b90504781811015610b1e576065546040517f1271241700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526201000090920490911690631271241790602401600060405180830381600087803b158015610abf57600080fd5b505af1158015610ad3573d6000803e3d6000fd5b5050505047905081811015610b1e576040517f576cbba300000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016106a9565b60665473ffffffffffffffffffffffffffffffffffffffff16630c93e3bb8333610b488c80611a3d565b610b5560208f018f611a3d565b8e306040518963ffffffff1660e01b8152600401610b799796959493929190611b59565b6000604051808303818588803b158015610b9257600080fd5b505af1158015610ba6573d6000803e3d6000fd5b505050505050509695505050505050565b610bbf610d72565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f83650e857191635cdf372edf115c49497fa8a7db67978cab532ffa395405803a906020016104bc565b60008360600135600003610c4d5761098f60208601866116b3565b8115610c85576040517f26cbb93300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cb2610c9860608601604087016115aa565b610ca860808801606089016115aa565b8660600135610f3e565b95945050505050565b610cc3610d72565b73ffffffffffffffffffffffffffffffffffffffff8116610d66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106a9565b610d6f81610e28565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a9565b73ffffffffffffffffffffffffffffffffffffffff8316610e1d57610e188282610f98565b505050565b610e1883838361109e565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106a9565b61045561110c565b60008061ffff851615610f515784610f53565b835b61ffff169050612710610f668285611bc9565b610cb29190611c07565b60655460009061271090610f889061ffff1684611bc9565b610f929190611c07565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8216610fe5576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461103f576040519150601f19603f3d011682016040523d82523d6000602084013e611044565b606091505b5050905080610e18576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016106a9565b73ffffffffffffffffffffffffffffffffffffffff82166110eb576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e1873ffffffffffffffffffffffffffffffffffffffff841683836111ac565b600054610100900460ff166111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106a9565b61045533610e28565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610e1892869291600091611277918516908490611324565b90508051600014806112985750808060200190518101906112989190611c42565b610e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106a9565b6060611333848460008561133b565b949350505050565b6060824710156113cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106a9565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516113f69190611c64565b60006040518083038185875af1925050503d8060008114611433576040519150601f19603f3d011682016040523d82523d6000602084013e611438565b606091505b509150915061144987838387611454565b979650505050505050565b606083156114ea5782516000036114e35773ffffffffffffffffffffffffffffffffffffffff85163b6114e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a9565b5081611333565b61133383838151156114ff5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a99190611c80565b803573ffffffffffffffffffffffffffffffffffffffff8116811461155757600080fd5b919050565b60008060006060848603121561157157600080fd5b61157a84611533565b925061158860208501611533565b9150604084013590509250925092565b803561ffff8116811461155757600080fd5b6000602082840312156115bc57600080fd5b6115c582611598565b9392505050565b6000602082840312156115de57600080fd5b6115c582611533565b6000806000606084860312156115fc57600080fd5b61160584611533565b925061161360208501611533565b915061162160408501611598565b90509250925092565b6000806020838503121561163d57600080fd5b823567ffffffffffffffff8082111561165557600080fd5b818501915085601f83011261166957600080fd5b81358181111561167857600080fd5b86602060608302850101111561168d57600080fd5b60209290920196919550909350505050565b803563ffffffff8116811461155757600080fd5b6000602082840312156116c557600080fd5b6115c58261169f565b6000608082840312156116e057600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083601f84011261172757600080fd5b50813567ffffffffffffffff81111561173f57600080fd5b60208301915083602082850101111561175757600080fd5b9250929050565b600080600080600080610100878903121561177857600080fd5b61178288886116ce565b9550608087013567ffffffffffffffff8082111561179f57600080fd5b6117ab8a838b016116ce565b965060a08901359150808211156117c157600080fd5b818901915089601f8301126117d557600080fd5b8135818111156117e7576117e76116e6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561182d5761182d6116e6565b816040528281528c602084870101111561184657600080fd5b8260208601602083013760006020848301015280985050505060c089013591508082111561187357600080fd5b5061188089828a01611715565b9094509250611893905060e08801611533565b90509295509295509295565b60008060008060c085870312156118b557600080fd5b6118bf86866116ce565b9350608085013567ffffffffffffffff808211156118dc57600080fd5b6118e8888389016116ce565b945060a08701359150808211156118fe57600080fd5b5061190b87828801611715565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b803567ffffffffffffffff8116811461155757600080fd5b60006020828403121561197057600080fd5b6115c582611946565b80356fffffffffffffffffffffffffffffffff8116811461155757600080fd5b6000602082840312156119ab57600080fd5b6115c582611979565b6020808252818101839052600090604080840186845b87811015611a305763ffffffff6119e08361169f565b16835267ffffffffffffffff6119f7868401611946565b16858401526fffffffffffffffffffffffffffffffff611a18858401611979565b168385015260609283019291909101906001016119ca565b5090979650505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611a7257600080fd5b83018035915067ffffffffffffffff821115611a8d57600080fd5b60200191503681900382131561175757600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60005b83811015611b06578181015183820152602001611aee565b50506000910152565b60008151808452611b27816020860160208601611aeb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600073ffffffffffffffffffffffffffffffffffffffff808a16835260a06020840152611b8a60a08401898b611aa2565b8381036040850152611b9d81888a611aa2565b90508381036060850152611bb18187611b0f565b92505080841660808401525098975050505050505050565b8082028115828204841417610f92577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082611c3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611c5457600080fd5b815180151581146115c557600080fd5b60008251611c76818460208701611aeb565b9190910192915050565b6020815260006115c56020830184611b0f56fea2646970667358221220341084d743be51f24cd3f62bb4e7cd712d16ef0eead90b2b1e85d7884e3e5f2264736f6c63430008160033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
