[ { "inputs": [ { "internalType": "contract IBentoBoxV1", "name": "bentoBox_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "accruedAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeFraction", "type": "uint256" }, { "indexed": false, "internalType": "uint64", "name": "rate", "type": "uint64" }, { "indexed": false, "internalType": "uint256", "name": "utilization", "type": "uint256" } ], "name": "LogAccrue", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "share", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "fraction", "type": "uint256" } ], "name": "LogAddAsset", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "share", "type": "uint256" } ], "name": "LogAddCollateral", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "part", "type": "uint256" } ], "name": "LogBorrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "rate", "type": "uint256" } ], "name": "LogExchangeRate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newFeeTo", "type": "address" } ], "name": "LogFeeTo", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "share", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "fraction", "type": "uint256" } ], "name": "LogRemoveAsset", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "share", "type": "uint256" } ], "name": "LogRemoveCollateral", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "part", "type": "uint256" } ], "name": "LogRepay", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "feeTo", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "feesEarnedFraction", "type": "uint256" } ], "name": "LogWithdrawFees", "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": true, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accrue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "accrueInfo", "outputs": [ { "internalType": "uint64", "name": "interestPerSecond", "type": "uint64" }, { "internalType": "uint64", "name": "lastAccrued", "type": "uint64" }, { "internalType": "uint128", "name": "feesEarnedFraction", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bool", "name": "skim", "type": "bool" }, { "internalType": "uint256", "name": "share", "type": "uint256" } ], "name": "addAsset", "outputs": [ { "internalType": "uint256", "name": "fraction", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bool", "name": "skim", "type": "bool" }, { "internalType": "uint256", "name": "share", "type": "uint256" } ], "name": "addCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bentoBox", "outputs": [ { "internalType": "contract IBentoBoxV1", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "borrow", "outputs": [ { "internalType": "uint256", "name": "part", "type": "uint256" }, { "internalType": "uint256", "name": "share", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "collateral", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8[]", "name": "actions", "type": "uint8[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes[]", "name": "datas", "type": "bytes[]" } ], "name": "cook", "outputs": [ { "internalType": "uint256", "name": "value1", "type": "uint256" }, { "internalType": "uint256", "name": "value2", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exchangeRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeTo", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "init", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "users", "type": "address[]" }, { "internalType": "uint256[]", "name": "maxBorrowParts", "type": "uint256[]" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "contract ISwapper", "name": "swapper", "type": "address" }, { "internalType": "bool", "name": "open", "type": "bool" } ], "name": "liquidate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "masterContract", "outputs": [ { "internalType": "contract KashiPair", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "oracle", "outputs": [ { "internalType": "contract IOracle", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "oracleData", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner_", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "fraction", "type": "uint256" } ], "name": "removeAsset", "outputs": [ { "internalType": "uint256", "name": "share", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "share", "type": "uint256" } ], "name": "removeCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bool", "name": "skim", "type": "bool" }, { "internalType": "uint256", "name": "part", "type": "uint256" } ], "name": "repay", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newFeeTo", "type": "address" } ], "name": "setFeeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ISwapper", "name": "swapper", "type": "address" }, { "internalType": "bool", "name": "enable", "type": "bool" } ], "name": "setSwapper", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ISwapper", "name": "", "type": "address" } ], "name": "swappers", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAsset", "outputs": [ { "internalType": "uint128", "name": "elastic", "type": "uint128" }, { "internalType": "uint128", "name": "base", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBorrow", "outputs": [ { "internalType": "uint128", "name": "elastic", "type": "uint128" }, { "internalType": "uint128", "name": "base", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalCollateralShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" }, { "internalType": "bool", "name": "direct", "type": "bool" }, { "internalType": "bool", "name": "renounce", "type": "bool" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateExchangeRate", "outputs": [ { "internalType": "bool", "name": "updated", "type": "bool" }, { "internalType": "uint256", "name": "rate", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userBorrowPart", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userCollateralShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdrawFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101006040523480156200001257600080fd5b50604051620060e2380380620060e28339810160408190526200003591620000fe565b4660a08190526200004681620000a8565b60805250600380546001600160a01b031916339081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606091821b1660c05230901b60e0526200014d565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692188230604051602001620000e1939291906200012e565b604051602081830303815290604052805190602001209050919050565b60006020828403121562000110578081fd5b81516001600160a01b038116811462000127578182fd5b9392505050565b92835260208301919091526001600160a01b0316604082015260600190565b60805160a05160c05160601c60e05160601c615ebe6200022460003980610c905280611e40528061213952806127f0525080611350528061151852806115f0528061176352806119085280611a375280611d975280611efb528061202b52806120f352806122bb528061240452806125685280612c535280613192528061329a528061334a528061353252806135e052806137da5280613ac95280613c185280613d415280613ebc5280613f72528061404e52806141d352806144ce52806145555250806139115250806139465250615ebe6000f3fe6080604052600436106102025760003560e01c8063017e7e581461020757806302ce728f1461023257806306fdde0314610255578063078dfbe714610277578063095ea7b31461029957806315294c40146102c657806318160ddd146102f35780631b51e940146103085780631c9e379b146103285780632317ef671461034857806323b872dd14610368578063313ce567146103885780633644e515146103aa57806338d52e0f146103bf5780633ba0b9a9146103d45780633f2617cb146103e9578063473e3ce714610409578063476343ee1461041e57806348e4163e146104335780634b8a3529146104535780634ddf47d4146104815780634e71e0c814610494578063656f3d64146104a95780636b2ace87146104bc57806370a08231146104d157806374645ff3146104f157806376ee101b146105065780637dc0d1d0146105265780637ecebe001461053b5780638285ef401461055b578063860ffea11461057e578063876467f81461059e5780638cad7fbe146105be5780638da5cb5b146105de57806395d89b41146105f3578063a9059cbb14610608578063b27c0e7414610628578063cd446e221461064c578063d505accf14610661578063d8dfeb4514610681578063dd62ed3e14610696578063e30c3978146106b6578063f46901ed146106cb578063f8ba4cff146106eb578063f9557ccb14610700575b600080fd5b34801561021357600080fd5b5061021c610715565b6040516102299190615491565b60405180910390f35b34801561023e57600080fd5b50610247610724565b6040516102299291906154e9565b34801561026157600080fd5b5061026a610801565b6040516102299190615573565b34801561028357600080fd5b50610297610292366004614cfa565b6108d9565b005b3480156102a557600080fd5b506102b96102b4366004614d73565b6109b7565b60405161022991906154de565b3480156102d257600080fd5b506102e66102e1366004614d44565b610a10565b60405161022991906154f9565b3480156102ff57600080fd5b506102e6610a2d565b34801561031457600080fd5b506102e6610323366004614d44565b610a43565b34801561033457600080fd5b506102e6610343366004614ae3565b610a58565b34801561035457600080fd5b506102e6610363366004614d73565b610a6a565b34801561037457600080fd5b506102b9610383366004614c4a565b610a85565b34801561039457600080fd5b5061039d610bed565b6040516102299190615c6c565b3480156103b657600080fd5b506102e6610c0a565b3480156103cb57600080fd5b5061021c610c14565b3480156103e057600080fd5b506102e6610c23565b3480156103f557600080fd5b506102976104043660046151a0565b610c29565b34801561041557600080fd5b506102e6610c7e565b34801561042a57600080fd5b50610297610c84565b34801561043f57600080fd5b506102e661044e366004614ae3565b610df4565b34801561045f57600080fd5b5061047361046e366004614d73565b610e06565b604051610229929190615c1c565b61029761048f366004614f55565b610e54565b3480156104a057600080fd5b50610297610f4c565b6104736104b7366004614e43565b610fc8565b3480156104c857600080fd5b5061021c611906565b3480156104dd57600080fd5b506102e66104ec366004614ae3565b61192a565b3480156104fd57600080fd5b5061026a61193c565b34801561051257600080fd5b50610297610521366004614d9e565b6119ca565b34801561053257600080fd5b5061021c6124b2565b34801561054757600080fd5b506102e6610556366004614ae3565b6124c1565b34801561056757600080fd5b506105706124d3565b604051610229929190615c02565b34801561058a57600080fd5b50610297610599366004614d44565b6124ed565b3480156105aa57600080fd5b506102976105b9366004614d73565b6125ce565b3480156105ca57600080fd5b506102b96105d9366004614ae3565b61260e565b3480156105ea57600080fd5b5061021c612623565b3480156105ff57600080fd5b5061026a612632565b34801561061457600080fd5b506102b9610623366004614d73565b6126f6565b34801561063457600080fd5b5061063d6127c1565b60405161022993929190615c40565b34801561065857600080fd5b5061021c6127ee565b34801561066d57600080fd5b5061029761067c366004614c8a565b612812565b34801561068d57600080fd5b5061021c6129a1565b3480156106a257600080fd5b506102e66106b1366004614c12565b6129b0565b3480156106c257600080fd5b5061021c6129cd565b3480156106d757600080fd5b506102976106e6366004614ae3565b6129dc565b3480156106f757600080fd5b50610297612a50565b34801561070c57600080fd5b50610570612fed565b6005546001600160a01b031681565b60095460405163d6d7d52560e01b815260009182916001600160a01b039091169063d6d7d5259061075a90600a90600401615586565b6040805180830381600087803b15801561077357600080fd5b505af1158015610787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ab9190614ef4565b909250905081156107f85760108190556040517f9f9192b5edb17356c524e08d9e025c8e2f6307e6ea52fb7968faa3081f51c3c8906107eb9083906154f9565b60405180910390a16107fd565b506010545b9091565b600754606090610819906001600160a01b0316613007565b60085461082e906001600160a01b0316613007565b60095460405163355a219b60e21b81526001600160a01b039091169063d568866c9061085f90600a90600401615586565b60006040518083038186803b15801561087757600080fd5b505afa15801561088b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108b3919081019061522f565b6040516020016108c5939291906153a7565b604051602081830303815290604052905090565b6003546001600160a01b0316331461090c5760405162461bcd60e51b815260040161090390615a0e565b60405180910390fd5b8115610996576001600160a01b0383161515806109265750805b6109425760405162461bcd60e51b81526004016109039061585e565b6003546040516001600160a01b03808616921690600080516020615e0983398151915290600090a3600380546001600160a01b0385166001600160a01b0319918216179091556004805490911690556109b2565b600480546001600160a01b0319166001600160a01b0385161790555b505050565b3360008181526001602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020615e49833981519152906109fe9086906154f9565b60405180910390a35060015b92915050565b6000610a1a612a50565b610a258484846130cc565b949350505050565b600c54600160801b90046001600160801b031690565b6000610a4d612a50565b610a258484846132f3565b600e6020526000908152604090205481565b6000610a74612a50565b610a7e838361358c565b9392505050565b60008115610baa576001600160a01b03841660009081526020819052604090205482811015610ac65760405162461bcd60e51b815260040161090390615ad8565b836001600160a01b0316856001600160a01b031614610ba8576001600160a01b03851660009081526001602090815260408083203384529091529020546000198114610b555783811015610b2c5760405162461bcd60e51b815260040161090390615952565b6001600160a01b0386166000908152600160209081526040808320338452909152902084820390555b6001600160a01b038516610b7b5760405162461bcd60e51b8152600401610903906157fa565b506001600160a01b0380861660009081526020819052604080822086850390559186168152208054840190555b505b826001600160a01b0316846001600160a01b0316600080516020615e2983398151915284604051610bdb91906154f9565b60405180910390a35060019392505050565b600854600090610c05906001600160a01b0316613853565b905090565b6000610c0561390c565b6008546001600160a01b031681565b60105481565b6003546001600160a01b03163314610c535760405162461bcd60e51b815260040161090390615a0e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600b5481565b610c8c612a50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce757600080fd5b505afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f9190614aff565b6011546001600160a01b038216600090815260208190526040902054919250600160801b90046001600160801b031690610d59908261396c565b6001600160a01b038316600081815260208190526040808220939093559151909190600080516020615e2983398151915290610d969085906154f9565b60405180910390a3601180546001600160801b031690556040516001600160a01b038316907fbe641c3ffc44b2d6c184f023fa4ed7bda4b6ffa71e03b3c98ae0c776da1f17e790610de89084906154f9565b60405180910390a25050565b600f6020526000908152604090205481565b600080610e11612a50565b610e1b848461398f565b8092508193505050610e31336000601054613c92565b610e4d5760405162461bcd60e51b8152600401610903906159db565b9250929050565b6007546001600160a01b031615610e7d5760405162461bcd60e51b8152600401610903906157c3565b610e89818301836150da565b601481905560138290556012839055835160079060009060089082906009908290610ebb90600a9060208d0190614916565b5081546001600160a01b039b8c1661010092830a908102908d02199091161790915582549a8a1691810a918202918a0219909a161790558154988716970a968702968602199097169590951790955550506007541615159150610f3290505760405162461bcd60e51b815260040161090390615925565b5050601180546001600160401b0319166312e687c0179055565b6004546001600160a01b0316338114610f775760405162461bcd60e51b815260040161090390615a43565b6003546040516001600160a01b03808416921690600080516020615e0983398151915290600090a3600380546001600160a01b039092166001600160a01b0319928316179055600480549091169055565b600080610fd3614990565b60005b888110156118c85760008a8a83818110610fec57fe5b905060200201602081019061100191906152de565b905082602001511580156110185750600a8160ff16105b1561102d57611025612a50565b600160208401525b60ff8116600a141561108757600080600089898681811061104a57fe5b905060200281019061105c9190615c7a565b8101906110699190615209565b92509250925061107f8282610599868c8c613e0d565b5050506118bf565b60ff8116600114156110e85760008060008989868181106110a457fe5b90506020028101906110b69190615c7a565b8101906110c39190615209565b9250925092506110de82826110d9868c8c613e0d565b6132f3565b97505050506118bf565b60ff81166002141561114857600080600089898681811061110557fe5b90506020028101906111179190615c7a565b8101906111249190615209565b92509250925061113f828261113a868c8c613e0d565b6130cc565b505050506118bf565b60ff8116600314156111a35760008088888581811061116357fe5b90506020028101906111759190615c7a565b81019061118291906151e5565b9150915061119a81611195848a8a613e0d565b61358c565b965050506118bf565b60ff811660041415611200576000808888858181106111be57fe5b90506020028101906111d09190615c7a565b8101906111dd91906151e5565b915091506111f5816111f0848a8a613e0d565b613e35565b5050600183526118bf565b60ff8116600514156112635760008088888581811061121b57fe5b905060200281019061122d9190615c7a565b81019061123a91906151e5565b915091506112528161124d848a8a613e0d565b61398f565b6001875290975095506118bf915050565b60ff8116600b141561130257600080600089898681811061128057fe5b90506020028101906112929190615c7a565b81019061129f9190614f21565b9250925092506000806112b0610724565b915091508415806112be5750815b80156112c957508381115b80156112dc57508215806112dc57508281115b6112f85760405162461bcd60e51b815260040161090390615ba0565b50505050506118bf565b60ff8116601814156113e1576000806000806000808c8c8981811061132357fe5b90506020028101906113359190615c7a565b8101906113429190614b1b565b9550955095509550955095507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c0a47c938787878787876040518763ffffffff1660e01b81526004016113a4969594939291906154a5565b600060405180830381600087803b1580156113be57600080fd5b505af11580156113d2573d6000803e3d6000fd5b505050505050505050506118bf565b60ff8116601414156114695761145f8787848181106113fc57fe5b905060200281019061140e9190615c7a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c915086905081811061145157fe5b905060200201358787613f31565b90955093506118bf565b60ff8116601514156114d45761145f87878481811061148457fe5b90506020028101906114969190615c7a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508992508891506140279050565b60ff8116601614156115ac5760008060008989868181106114f157fe5b90506020028101906115039190615c7a565b8101906115109190614c4a565b9250925092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f18d03cc843385611553868e8e613e0d565b6040518563ffffffff1660e01b8152600401611572949392919061562a565b600060405180830381600087803b15801561158c57600080fd5b505af11580156115a0573d6000803e3d6000fd5b505050505050506118bf565b60ff8116601714156116405760006060808989868181106115c957fe5b90506020028101906115db9190615c7a565b8101906115e89190615008565b9250925092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630fca8843843385856040518563ffffffff1660e01b81526004016115729493929190615688565b60ff8116601e141561171a57606060006116c28b8b8681811061165f57fe5b905060200201358a8a8781811061167257fe5b90506020028101906116849190615c7a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508b91506141159050565b915091508060ff16600114156116ed57818060200190518101906116e691906152a3565b9650611713565b8060ff1660021415611713578180602001905181019061170d91906152bb565b90975095505b50506118bf565b60ff81166006141561184257600087878481811061173457fe5b90506020028101906117469190615c7a565b81019061175391906151cd565b6008549091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163da5139ca91166117ca61179a858b8b613e0d565b60408051808201909152600d546001600160801b038082168352600160801b9091041660208201529060016142cb565b60016040518463ffffffff1660e01b81526004016117ea9392919061574d565b60206040518083038186803b15801561180257600080fd5b505afa158015611816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183a91906152a3565b9550506118bf565b60ff8116600714156118bf57600087878481811061185c57fe5b905060200281019061186e9190615c7a565b81019061187b91906151cd565b90506118bb61188b828888613e0d565b60408051808201909152600d546001600160801b038082168352600160801b909104166020820152906000614364565b9550505b50600101610fd6565b508051156118fa576118de336000601054613c92565b6118fa5760405162461bcd60e51b8152600401610903906159db565b50965096945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006020819052908152604090205481565b600a805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119c25780601f10611997576101008083540402835291602001916119c2565b820191906000526020600020905b8154815290600101906020018083116119a557829003601f168201915b505050505081565b60006119d4610724565b9150506119df612a50565b60008060006119ec614990565b5060408051808201909152600d546001600160801b038082168352600160801b909104166020820152611a1d614990565b600754604051634ffe34db60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692634ffe34db92611a70929190911690600401615491565b604080518083038186803b158015611a8757600080fd5b505afa158015611a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abf9190615261565b905060005b8c811015611ccd5760008e8e83818110611ada57fe5b9050602002016020810190611aef9190614ae3565b9050611afc818a8a613c92565b611cc4576001600160a01b0381166000908152600f6020526040812054808f8f86818110611b2657fe5b9050602002013511611b4a578e8e85818110611b3e57fe5b90506020020135611b4c565b805b9150611b5881836143dd565b6001600160a01b0384166000908152600f60205260408120919091559050611b818683836142cb565b90506000611bc7670de0b6b3a7640000620186a002611bb58d611baf6012548761440090919063ffffffff16565b90614400565b81611bbc57fe5b889190046000614364565b6001600160a01b0385166000908152600e6020526040902054909150611bed90826143dd565b6001600160a01b038086166000908152600e60205260409020919091558d1615611c17578c611c19565b8d5b6001600160a01b0316846001600160a01b0316600080516020615de983398151915283604051611c4991906154f9565b60405180910390a36001600160a01b03808516908e1615611c6a578d611c6c565b335b6001600160a01b0316600080516020615dc98339815191528486604051611c94929190615c1c565b60405180910390a3611ca68a8261396c565b9950611cb2898361396c565b9850611cbe888461396c565b97505050505b50600101611ac4565b5083611ceb5760405162461bcd60e51b81526004016109039061582a565b611d08611cf785614437565b83516001600160801b031690614464565b6001600160801b03168252611d33611d1f84614437565b60208401516001600160801b031690614464565b6001600160801b03908116602084018190528351600d80546001600160801b03191691841691909117909216600160801b909102179055600b54611d7790866143dd565b600b55600854604051636d289ce560e11b81526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263da5139ca92611dd2921690899060019060040161574d565b60206040518083038186803b158015611dea57600080fd5b505afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2291906152a3565b9050876122ae57604051634656bfdf60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638cad7fbe90611e75908c90600401615491565b60206040518083038186803b158015611e8d57600080fd5b505afa158015611ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec59190614ed8565b611ee15760405162461bcd60e51b815260040161090390615b3a565b600754604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92611f3a92919091169030908e908c9060040161562a565b600060405180830381600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b50506007546008546040516371a1ff0960e11b81526001600160a01b03808f16955063e343fe129450611fa8938116921690309087908d90600401615654565b6040805180830381600087803b158015611fc157600080fd5b505af1158015611fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff991906152bb565b5050600c54600854604051633de222bb60e21b81526000926120bc926001600160801b03909116916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f7888aec926120669291909116903090600401615610565b60206040518083038186803b15801561207e57600080fd5b505afa158015612092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b691906152a3565b906143dd565b905060006120ca82846143dd565b90506000620186a06120e76013548461440090919063ffffffff16565b816120ee57fe5b0490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f18d03cc600860009054906101000a90046001600160a01b0316307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561219057600080fd5b505afa1580156121a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c89190614aff565b856040518563ffffffff1660e01b81526004016121e8949392919061562a565b600060405180830381600087803b15801561220257600080fd5b505af1158015612216573d6000803e3d6000fd5b5050505061224a61223861223383866143dd90919063ffffffff16565b614437565b600c546001600160801b031690614493565b600c80546001600160801b0319166001600160801b0392909216919091179055306001600160a01b038d16600080516020615da983398151915261228e85856143dd565b600060405161229e929190615c1c565b60405180910390a35050506124a2565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163f18d03cc919081169030908d16156122f6578c6122f8565b8d5b8a6040518563ffffffff1660e01b8152600401612318949392919061562a565b600060405180830381600087803b15801561233257600080fd5b505af1158015612346573d6000803e3d6000fd5b505050506001600160a01b038916156123ea576007546008546040516371a1ff0960e11b81526001600160a01b03808d169363e343fe129361239693918316921690339087908d90600401615654565b6040805180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e791906152bb565b50505b600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc9261244392919091169033903090879060040161562a565b600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b5050505061248161223882614437565b600c80546001600160801b0319166001600160801b03929092169190911790555b5050505050505050505050505050565b6009546001600160a01b031681565b60026020526000908152604090205481565b600d546001600160801b0380821691600160801b90041682565b6001600160a01b0383166000908152600e6020526040902054612510908261396c565b6001600160a01b0384166000908152600e6020526040902055600b54612536818361396c565b600b55600754612551906001600160a01b03168383866144c2565b836001600160a01b0316836125665733612588565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167f9ed03113de523cebfe5e49d5f8e12894b1c0d42ce805990461726444c90eab87846040516125c091906154f9565b60405180910390a350505050565b6125d6612a50565b6125e08282613e35565b6125ee336000601054613c92565b61260a5760405162461bcd60e51b8152600401610903906159db565b5050565b60066020526000908152604090205460ff1681565b6003546001600160a01b031681565b60075460609061264a906001600160a01b03166145c9565b60085461265f906001600160a01b03166145c9565b60095460405163634ce26b60e11b81526001600160a01b039091169063c699c4d69061269090600a90600401615586565b60006040518083038186803b1580156126a857600080fd5b505afa1580156126bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126e4919081019061522f565b6040516020016108c593929190615424565b6000811561279057336000908152602081905260409020548281101561272e5760405162461bcd60e51b815260040161090390615ad8565b336001600160a01b0385161461278e576001600160a01b0384166127645760405162461bcd60e51b8152600401610903906157fa565b3360009081526020819052604080822085840390556001600160a01b038616825290208054840190555b505b826001600160a01b0316336001600160a01b0316600080516020615e29833981519152846040516109fe91906154f9565b6011546001600160401b0380821691600160401b810490911690600160801b90046001600160801b031683565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0387166128385760405162461bcd60e51b815260040161090390615a78565b8342106128575760405162461bcd60e51b8152600401610903906159b3565b6001600160a01b03871660008181526002602090815260409182902080546001818101909255925190926128d5926128ba927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928e928e928e92918e9101615502565b60405160208183030381529060405280519060200120614610565b858585604051600081526020016040526040516128f59493929190615555565b6020604051602081039080840390855afa158015612917573d6000803e3d6000fd5b505050602060405103516001600160a01b0316146129475760405162461bcd60e51b815260040161090390615bd0565b6001600160a01b038088166000818152600160209081526040808320948b16808452949091529081902088905551600080516020615e49833981519152906129909089906154f9565b60405180910390a350505050505050565b6007546001600160a01b031681565b600160209081526000928352604080842090915290825290205481565b6004546001600160a01b031681565b6003546001600160a01b03163314612a065760405162461bcd60e51b815260040161090390615a0e565b600580546001600160a01b0319166001600160a01b0383169081179091556040517fcf1d3f17e521c635e0d20b8acba94ba170afc041d0546d46dafa09d3c9c19eb390600090a250565b612a586149a7565b50604080516060810182526011546001600160401b038082168352600160401b82041660208301819052600160801b9091046001600160801b03169282019290925290420380612aa9575050612feb565b6001600160401b0342166020830152612ac0614990565b5060408051808201909152600d546001600160801b038082168352600160801b9091041660208201819052612b9e5782516001600160401b03166312e687c014612b38576312e687c0808452604051600080516020615e6983398151915291612b2f9160009182918290615770565b60405180910390a15b505080516011805460208401516040909401516001600160401b03199091166001600160401b0393841617600160401b600160801b031916600160401b9390941692909202929092176001600160801b03908116600160801b9190921602179055612feb565b600080612ba9614990565b5060408051808201909152600c546001600160801b038082168352600160801b9091048116602083015286518551670de0b6b3a764000092612bfb928992611baf9216906001600160401b0316614400565b81612c0257fe5b049250612c22612c1184614437565b85516001600160801b031690614493565b6001600160801b03168085526008548251604051630acc462360e31b8152600093612ce39390926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693635662311893612c8d93921691908890600401615721565b60206040518083038186803b158015612ca557600080fd5b505afa158015612cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdd91906152a3565b9061396c565b90506000620186a0612d006013548761440090919063ffffffff16565b81612d0757fe5b04905081612d2b84602001516001600160801b03168361440090919063ffffffff16565b81612d3257fe5b049350612d55612d4185614437565b60408a01516001600160801b031690614493565b6001600160801b03166040890152612d83612d6f85614437565b60208501516001600160801b031690614493565b600c80546001600160801b03908116600160801b9382168402179091558751600d805460208b01516001600160801b031990911692841692831784169316909302919091179091556000908390612de290670de0b6b3a7640000614400565b81612de957fe5b0490506709b6e64a8ec60000811015612ea75760006709b6e64a8ec60000612e1d670de0b6b3a7640000611baf83866143dd565b81612e2457fe5b0490506000612e50612e3a8b611baf8580614400565b6b0a9456c7acbaf3a129576cd1602b1b9061396c565b8b519091508190612e79906001600160401b03166b0a9456c7acbaf3a129576cd1602b1b614400565b81612e8057fe5b046001600160401b0316808c526304b9a1f01115612ea0576304b9a1f08b525b5050612f56565b670b1a2bc2ec500000811115612f565760006702c68af0bb140000612ee0670de0b6b3a7640000611baf85670b1a2bc2ec5000006143dd565b81612ee757fe5b0490506000612efd612e3a8b611baf8580614400565b8b519091506000906b0a9456c7acbaf3a129576cd1602b1b90612f29906001600160401b031684614400565b81612f3057fe5b0490506449d4824600811115612f4857506449d48246005b6001600160401b03168b5250505b8851604051600080516020615e6983398151915291612f7a91899189918690615770565b60405180910390a1505086516011805460208a01516040909a01516001600160401b03199091166001600160401b0393841617600160401b600160801b031916600160401b93909a1692909202989098176001600160801b03908116600160801b9190921602179096555050505050505b565b600c546001600160801b0380821691600160801b90041682565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b179052905160609160009183916001600160a01b0386169161304e9190615342565b600060405180830381855afa9150503d8060008114613089576040519150601f19603f3d011682016040523d82523d6000602084013e61308e565b606091505b5091509150816130b957604051806040016040528060038152602001623f3f3f60e81b8152506130c2565b6130c281614665565b925050505b919050565b60408051808201909152600d546001600160801b038082168352600160801b909104166020820152600090613103908360016147ca565b8151600d80546020948501516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556001600160a01b0386166000908152600f90925260409091205490915061316190836143dd565b6001600160a01b038086166000908152600f6020526040808220939093556008549251636d289ce560e11b815290927f000000000000000000000000000000000000000000000000000000000000000083169263da5139ca926131cf9290911690869060019060040161574d565b60206040518083038186803b1580156131e757600080fd5b505afa1580156131fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061321f91906152a3565b600c546008549192506001600160801b031690613247906001600160a01b03168383886144c2565b61326361325383614437565b6001600160801b03831690614493565b600c80546001600160801b0319166001600160801b03929092169190911790556001600160a01b0386168561329857336132ba565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b0316600080516020615dc983398151915285876040516132e2929190615c1c565b60405180910390a350509392505050565b60006132fd614990565b50604080518082018252600c546001600160801b03808216808452600160801b90920481166020840152600854600d549451636d289ce560e11b8152939492936000936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169463da5139ca94613386949216921690600190600401615721565b60206040518083038186803b15801561339e57600080fd5b505afa1580156133b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d691906152a3565b83516001600160801b03160190508015613418578061340b84602001516001600160801b03168761440090919063ffffffff16565b8161341257fe5b0461341a565b845b93506103e861343f61342b86614437565b60208601516001600160801b031690614493565b6001600160801b0316101561345a5760009350505050610a7e565b61346583868661483f565b8051600c80546020938401516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556001600160a01b03881660009081529081905260409020546134be908561396c565b6001600160a01b038816600081815260208190526040808220939093559151909190600080516020615e29833981519152906134fb9088906154f9565b60405180910390a360085461351b906001600160a01b03168684896144c2565b866001600160a01b0316866135305733613552565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b0316600080516020615da9833981519152878760405161357a929190615c1c565b60405180910390a35050509392505050565b6000613596614990565b50604080518082018252600c546001600160801b038082168352600160801b90910481166020830152600854600d549351636d289ce560e11b815292936000936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169463da5139ca9461361d94921692911690600190600401615721565b60206040518083038186803b15801561363557600080fd5b505afa158015613649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061366d91906152a3565b825160208401516001600160801b03918216929092019250166136908583614400565b8161369757fe5b3360009081526020819052604090205491900493506136b690856143dd565b33600081815260208190526040808220939093559151600080516020615e29833981519152906136e79088906154f9565b60405180910390a36136fb611cf784614437565b6001600160801b03168252613712611d1f85614437565b6001600160801b0316602083018190526103e811156137435760405162461bcd60e51b815260040161090390615aaa565b8151600c805460208501516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556040516001600160a01b0386169033907f6e853a5fd6b51d773691f542ebac8513c9992a51380d4c342031056a64114228906137b89087908990615c1c565b60405180910390a3600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc9261381992919091169030908a90899060040161562a565b600060405180830381600087803b15801561383357600080fd5b505af1158015613847573d6000803e3d6000fd5b50505050505092915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916060916001600160a01b0386169161389a9190615342565b600060405180830381855afa9150503d80600081146138d5576040519150601f19603f3d011682016040523d82523d6000602084013e6138da565b606091505b50915091508180156138ed575080516020145b6138f85760126130c2565b808060200190518101906130c291906152fa565b6000467f000000000000000000000000000000000000000000000000000000000000000081146139445761393f81614880565b613966565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b81810181811015610a0a5760405162461bcd60e51b8152600401610903906158f3565b60008061399a610724565b50506000620186a06139b76014548661440090919063ffffffff16565b816139be57fe5b0490506139fe6139ce858361396c565b60408051808201909152600d546001600160801b038082168352600160801b9091041660208201529060016148b7565b8151600d80546020948501516001600160801b03908116600160801b029381166001600160801b03199092169190911716919091179055336000908152600f909252604090912054909350613a53908461396c565b336000818152600f6020526040908190209290925590516001600160a01b03871691907f3a5151e57d3bc9798e7853034ac52293d1a0e12a2b44725e75b03b21f86477a690613aa790889086908990615c2a565b60405180910390a3600854604051636d289ce560e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263da5139ca92613b07929190911690889060009060040161574d565b60206040518083038186803b158015613b1f57600080fd5b505afa158015613b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b5791906152a3565b9150613b61614990565b5060408051808201909152600c546001600160801b038082168352600160801b90910416602082018190526103e81115613bad5760405162461bcd60e51b815260040161090390615aaa565b613bca613bb984614437565b82516001600160801b031690614464565b6001600160801b03908116808352600c805460208501518416600160801b026001600160801b0319909116909217909216179055600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92613c5792919091169030908b90899060040161562a565b600060405180830381600087803b158015613c7157600080fd5b505af1158015613c85573d6000803e3d6000fd5b5050505050509250929050565b6001600160a01b0383166000908152600f602052604081205480613cba576001915050610a7e565b6001600160a01b0385166000908152600e602052604090205480613ce357600092505050610a7e565b613ceb614990565b5060408051808201909152600d546001600160801b03808216808452600160801b909204166020830181905290613d29908790611baf908790614400565b81613d3057fe5b600754919004906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163566231189116613d908a613d7b57620124f8613d80565b62012cc85b611baf886509184e72a000614400565b60006040518463ffffffff1660e01b8152600401613db09392919061574d565b60206040518083038186803b158015613dc857600080fd5b505afa158015613ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e0091906152a3565b1015979650505050505050565b600080841215613e2d576000198414613e265781613e28565b825b610a25565b509192915050565b336000908152600e6020526040902054613e4f90826143dd565b336000908152600e6020526040902055600b54613e6c90826143dd565b600b556040516001600160a01b038316903390600080516020615de983398151915290613e9a9085906154f9565b60405180910390a3600754604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92613efb92919091169030908790879060040161562a565b600060405180830381600087803b158015613f1557600080fd5b505af1158015613f29573d6000803e3d6000fd5b505050505050565b60008060008060008089806020019051810190613f4e9190614fc1565b9350935093509350613f61828989613e0d565b9150613f6e818989613e0d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302b9446c8a86338787876040518763ffffffff1660e01b8152600401613fc5959493929190615654565b60408051808303818588803b158015613fdd57600080fd5b505af1158015613ff1573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061401691906152bb565b955095505050505094509492505050565b600080600080600080888060200190518101906140449190614fc1565b93509350935093507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166397da6d30853386614089878e8e613e0d565b614094878f8f613e0d565b6040518663ffffffff1660e01b81526004016140b4959493929190615654565b6040805180830381600087803b1580156140cd57600080fd5b505af11580156140e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410591906152bb565b9550955050505050935093915050565b606060008060606000806000898060200190518101906141359190614b88565b9450945094509450945082801561414a575081155b1561417857838960405160200161416292919061535e565b60405160208183030381529060405293506141d1565b821580156141835750815b1561419b57838860405160200161416292919061535e565b8280156141a55750815b156141d1578389896040516020016141bf93929190615380565b60405160208183030381529060405293505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415801561421c57506001600160a01b0385163014155b6142385760405162461bcd60e51b815260040161090390615984565b60006060866001600160a01b03168d876040516142559190615342565b60006040518083038185875af1925050503d8060008114614292576040519150601f19603f3d011682016040523d82523d6000602084013e614297565b606091505b5091509150816142b95760405162461bcd60e51b81526004016109039061588d565b9c919b50909950505050505050505050565b600083602001516001600160801b0316600014156142ea575081610a7e565b602084015184516001600160801b039182169161430991869116614400565b8161431057fe5b04905081801561435457508284600001516001600160801b031661434a86602001516001600160801b03168461440090919063ffffffff16565b8161435157fe5b04105b15610a7e57610a2581600161396c565b82516000906001600160801b031661437d575081610a7e565b835160208501516001600160801b039182169161439c91869116614400565b816143a357fe5b04905081801561435457508284602001516001600160801b031661434a86600001516001600160801b03168461440090919063ffffffff16565b80820382811115610a0a5760405162461bcd60e51b815260040161090390615794565b600081158061441b5750508082028282828161441857fe5b04145b610a0a5760405162461bcd60e51b815260040161090390615b6e565b60006001600160801b038211156144605760405162461bcd60e51b8152600401610903906158bd565b5090565b8082036001600160801b038084169082161115610a0a5760405162461bcd60e51b815260040161090390615794565b8181016001600160801b038083169082161015610a0a5760405162461bcd60e51b8152600401610903906158f3565b801561453e5761451a827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f7888aec87306040518363ffffffff1660e01b8152600401612066929190615610565b8311156145395760405162461bcd60e51b815260040161090390615b08565b6145c3565b604051633c6340f360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc9061459090879033903090899060040161562a565b600060405180830381600087803b1580156145aa57600080fd5b505af11580156145be573d6000803e3d6000fd5b505050505b50505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b179052905160609160009183916001600160a01b0386169161304e9190615342565b600060405180604001604052806002815260200161190160f01b81525061463561390c565b8360405160200161464893929190615380565b604051602081830303815290604052805190602001209050919050565b6060604082511061468b5781806020019051810190614684919061522f565b90506130c7565b8151602014156147aa5760005b60208160ff161080156146c75750828160ff16815181106146b557fe5b01602001516001600160f81b03191615155b156146d457600101614698565b60608160ff166001600160401b03811180156146ef57600080fd5b506040519080825280601f01601f19166020018201604052801561471a576020820181803683370190505b509050600091505b60208260ff161080156147515750838260ff168151811061473f57fe5b01602001516001600160f81b03191615155b156147a157838260ff168151811061476557fe5b602001015160f81c60f81b818360ff168151811061477f57fe5b60200101906001600160f81b031916908160001a905350600190910190614722565b91506130c79050565b506040805180820190915260038152623f3f3f60e81b60208201526130c7565b6147d2614990565b60006147df8585856142cb565b90506147fe6147ed82614437565b86516001600160801b031690614464565b6001600160801b0316855261482961481585614437565b60208701516001600160801b031690614464565b6001600160801b03166020860152939492505050565b614847614990565b614853612c1184614437565b6001600160801b0316845261486a61342b83614437565b6001600160801b03166020850152509192915050565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218823060405160200161464893929190615536565b6148bf614990565b60006148cc858585614364565b90506148eb6148da85614437565b86516001600160801b031690614493565b6001600160801b0316855261482961490282614437565b60208701516001600160801b031690614493565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061495757805160ff1916838001178555614984565b82800160010185558215614984579182015b82811115614984578251825591602001919060010190614969565b506144609291506149c7565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b5b8082111561446057600081556001016149c8565b8035610a0a81615d5e565b60008083601f8401126149f8578182fd5b5081356001600160401b03811115614a0e578182fd5b6020830191508360208083028501011115610e4d57600080fd5b600082601f830112614a38578081fd5b8135614a4b614a4682615ce4565b615cbe565b818152915060208083019084810181840286018201871015614a6c57600080fd5b60005b84811015614a8b57813584529282019290820190600101614a6f565b505050505092915050565b600082601f830112614aa6578081fd5b8151614ab4614a4682615d03565b9150808252836020828501011115614acb57600080fd5b614adc816020840160208601615d32565b5092915050565b600060208284031215614af4578081fd5b8135610a7e81615d5e565b600060208284031215614b10578081fd5b8151610a7e81615d5e565b60008060008060008060c08789031215614b33578182fd5b8635614b3e81615d5e565b95506020870135614b4e81615d5e565b94506040870135614b5e81615d76565b93506060870135614b6e81615d99565b9598949750929560808101359460a0909101359350915050565b600080600080600060a08688031215614b9f578283fd5b8551614baa81615d5e565b60208701519095506001600160401b03811115614bc5578384fd5b614bd188828901614a96565b9450506040860151614be281615d76565b6060870151909350614bf381615d76565b6080870151909250614c0481615d99565b809150509295509295909350565b60008060408385031215614c24578182fd5b8235614c2f81615d5e565b91506020830135614c3f81615d5e565b809150509250929050565b600080600060608486031215614c5e578081fd5b8335614c6981615d5e565b92506020840135614c7981615d5e565b929592945050506040919091013590565b600080600080600080600060e0888a031215614ca4578485fd5b8735614caf81615d5e565b96506020880135614cbf81615d5e565b955060408801359450606088013593506080880135614cdd81615d99565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215614d0e578081fd5b8335614d1981615d5e565b92506020840135614d2981615d76565b91506040840135614d3981615d76565b809150509250925092565b600080600060608486031215614d58578081fd5b8335614d6381615d5e565b92506020840135614c7981615d76565b60008060408385031215614d85578182fd5b8235614d9081615d5e565b946020939093013593505050565b600080600080600080600060a0888a031215614db8578081fd5b87356001600160401b0380821115614dce578283fd5b614dda8b838c016149e7565b909950975060208a0135915080821115614df2578283fd5b50614dff8a828b016149e7565b9096509450506040880135614e1381615d5e565b92506060880135614e2381615d5e565b91506080880135614e3381615d76565b8091505092959891949750929550565b60008060008060008060608789031215614e5b578384fd5b86356001600160401b0380821115614e71578586fd5b614e7d8a838b016149e7565b90985096506020890135915080821115614e95578586fd5b614ea18a838b016149e7565b90965094506040890135915080821115614eb9578384fd5b50614ec689828a016149e7565b979a9699509497509295939492505050565b600060208284031215614ee9578081fd5b8151610a7e81615d76565b60008060408385031215614f06578182fd5b8251614f1181615d76565b6020939093015192949293505050565b600080600060608486031215614f35578081fd5b8335614f4081615d76565b95602085013595506040909401359392505050565b60008060208385031215614f67578182fd5b82356001600160401b0380821115614f7d578384fd5b818501915085601f830112614f90578384fd5b813581811115614f9e578485fd5b866020828501011115614faf578485fd5b60209290920196919550909350505050565b60008060008060808587031215614fd6578182fd5b8451614fe181615d5e565b6020860151909450614ff281615d5e565b6040860151606090960151949790965092505050565b60008060006060848603121561501c578081fd5b833561502781615d5e565b92506020848101356001600160401b0380821115615043578384fd5b818701915087601f830112615056578384fd5b8135615064614a4682615ce4565b81815284810190848601868402860187018c1015615080578788fd5b8795505b838610156150aa576150968c826149dc565b835260019590950194918601918601615084565b509650505060408701359250808311156150c2578384fd5b50506150d086828701614a28565b9150509250925092565b600080600080600080600060e0888a0312156150f4578081fd5b87356150ff81615d5e565b9650602088013561510f81615d5e565b9550604088013561511f81615d5e565b945060608801356001600160401b03811115615139578182fd5b8801601f81018a13615149578182fd5b8035615157614a4682615d03565b8181528b602083850101111561516b578384fd5b8160208401602083013790810160200192909252509598949750929560808101359460a0820135945060c09091013592509050565b600080604083850312156151b2578182fd5b82356151bd81615d5e565b91506020830135614c3f81615d76565b6000602082840312156151de578081fd5b5035919050565b600080604083850312156151f7578182fd5b823591506020830135614c3f81615d5e565b60008060006060848603121561521d578081fd5b833592506020840135614d2981615d5e565b600060208284031215615240578081fd5b81516001600160401b03811115615255578182fd5b610a2584828501614a96565b600060408284031215615272578081fd5b61527c6040615cbe565b825161528781615d84565b8152602083015161529781615d84565b60208201529392505050565b6000602082840312156152b4578081fd5b5051919050565b600080604083850312156152cd578182fd5b505080516020909101519092909150565b6000602082840312156152ef578081fd5b8135610a7e81615d99565b60006020828403121561530b578081fd5b8151610a7e81615d99565b6000815180845261532e816020860160208601615d32565b601f01601f19169290920160200192915050565b60008251615354818460208701615d32565b9190910192915050565b60008351615370818460208801615d32565b9190910191825250602001919050565b60008451615392818460208901615d32565b91909101928352506020820152604001919050565b600071025b0b9b4349026b2b234bab6902934b9b5960751b825284516153d4816012850160208901615d32565b602f60f81b60129184019182015284516153f5816013840160208901615d32565b602d60f81b601392909101918201528351615417816014840160208801615d32565b0160140195945050505050565b6000616b6d60f01b82528451615441816002850160208901615d32565b602f60f81b6002918401918201528451615462816003840160208901615d32565b602d60f81b600392909101918201528351615484816004840160208801615d32565b0160040195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152949095166020850152911515604084015260ff166060830152608082015260a081019190915260c00190565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b92835260208301919091526001600160a01b0316604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610a7e6020830184615316565b600060208083018184528285546001808216600081146155ad57600181146155cb57615603565b60028304607f16855260ff1983166040890152606088019350615603565b600283048086526155db8a615d26565b885b828110156155f95781548b8201604001529084019088016155dd565b8a01604001955050505b5091979650505050505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b60006080820160018060a01b0380881684526020818816818601526080604086015282875180855260a0870191508289019450855b818110156156db5785518516835294830194918301916001016156bd565b50508581036060870152865180825290820193509150808601845b83811015615712578151855293820193908201906001016156f6565b50929998505050505050505050565b6001600160a01b039390931683526001600160801b039190911660208301521515604082015260600190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b93845260208401929092526001600160401b03166040830152606082015260800190565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252601e908201527f4b61736869506169723a20616c726561647920696e697469616c697a65640000604082015260600190565b60208082526016908201527545524332303a206e6f207a65726f206164647265737360501b604082015260600190565b6020808252601a908201527912d85cda1a54185a5c8e88185b1b08185c99481cdbdb1d995b9d60321b604082015260600190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526016908201527512d85cda1a54185a5c8e8818d85b1b0819985a5b195960521b604082015260600190565b6020808252601c908201527b426f72696e674d6174683a2075696e74313238204f766572666c6f7760201b604082015260600190565b602080825260189082015277426f72696e674d6174683a20416464204f766572666c6f7760401b604082015260600190565b60208082526013908201527225b0b9b434a830b4b91d103130b2103830b4b960691b604082015260600190565b60208082526018908201527745524332303a20616c6c6f77616e636520746f6f206c6f7760401b604082015260600190565b60208082526015908201527412d85cda1a54185a5c8e8818d85b89dd0818d85b1b605a1b604082015260600190565b6020808252600e908201526d115490cc8c0e88115e1c1a5c995960921b604082015260600190565b60208082526019908201527812d85cda1a54185a5c8e881d5cd95c881a5b9cdbdb1d995b9d603a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b602080825260189082015277045524332303a204f776e65722063616e6e6f7420626520360441b604082015260600190565b6020808252601490820152734b617368693a2062656c6f77206d696e696d756d60601b604082015260600190565b60208082526016908201527545524332303a2062616c616e636520746f6f206c6f7760501b604082015260600190565b602080825260189082015277096c2e6d0d2a0c2d2e47440a6d6d2da40e8dede40daeac6d60431b604082015260600190565b6020808252601a908201527925b0b9b434a830b4b91d1024b73b30b634b21039bbb0b83832b960311b604082015260600190565b602080825260189082015277426f72696e674d6174683a204d756c204f766572666c6f7760401b604082015260600190565b6020808252601690820152754b61736869506169723a2072617465206e6f74206f6b60501b604082015260600190565b60208082526018908201527745524332303a20496e76616c6964205369676e617475726560401b604082015260600190565b6001600160801b0392831681529116602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b6001600160401b0393841681529190921660208201526001600160801b03909116604082015260600190565b60ff91909116815260200190565b6000808335601e19843603018112615c90578283fd5b8301803591506001600160401b03821115615ca9578283fd5b602001915036819003821315610e4d57600080fd5b6040518181016001600160401b0381118282101715615cdc57600080fd5b604052919050565b60006001600160401b03821115615cf9578081fd5b5060209081020190565b60006001600160401b03821115615d18578081fd5b50601f01601f191660200190565b60009081526020902090565b60005b83811015615d4d578181015183820152602001615d35565b838111156145c35750506000910152565b6001600160a01b0381168114615d7357600080fd5b50565b8015158114615d7357600080fd5b6001600160801b0381168114615d7357600080fd5b60ff81168114615d7357600080fdfe30a8c4f9ab5af7e1309ca87c32377d1a83366c5990472dbf9d262450eae14e38c8e512d8f188ca059984b5853d2bf653da902696b8512785b182b2c813789a6e8ad4d3ff00da092c7ad9a573ea4f5f6a3dffc6712dc06d3f78f49b862297c4028be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92533af5ce86e8438eff54589f85332916444457dfa8685493fbd579b809097026ba26469706673582212206a930e74a339fbf5642ea3e9b1c1d8e5a2131ad4f1fb3d3593bd73dc07b2629264736f6c634300060c00330000000000000000000000007dc2a2c42d407c75b857c67fd20f517ab3c9b844