[ { "inputs": [], "name": "AlreadyRedeemed", "type": "error" }, { "inputs": [], "name": "BondIsLocked", "type": "error" }, { "inputs": [], "name": "CanNotRedeemYet", "type": "error" }, { "inputs": [], "name": "CooldownCanNotBeActivated", "type": "error" }, { "inputs": [], "name": "CooldownCanNotBeActivatedNotOwner", "type": "error" }, { "inputs": [], "name": "InterestLengthDistinctMaturityLength", "type": "error" }, { "inputs": [], "name": "InterestLengthLesserOrEqualZero", "type": "error" }, { "inputs": [], "name": "InterestMustBeGreaterThanZero", "type": "error" }, { "inputs": [], "name": "InterestParametersIsGreaterThanMaxParameters", "type": "error" }, { "inputs": [], "name": "MaturityInputMustBeGreaterThanFirstMaturity", "type": "error" }, { "inputs": [], "name": "MissingRole", "type": "error" }, { "inputs": [], "name": "MultiplierIndexLesserOrEqualZero", "type": "error" }, { "inputs": [], "name": "NonExistentToken", "type": "error" }, { "inputs": [], "name": "NotEnoughCollateral", "type": "error" }, { "inputs": [], "name": "PrincipalIsLesserOrEqualZero", "type": "error" }, { "inputs": [], "name": "UnorderedMaturities", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddressManager", "type": "address" } ], "name": "AccessManagerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "beacon", "type": "address" } ], "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "mintingDate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "principal", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "interest", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "imageCID", "type": "string" }, { "indexed": false, "internalType": "string", "name": "bondTokenURI", "type": "string" } ], "name": "BondIssued", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "redeemer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "redeemDate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "withdrawn", "type": "uint256" } ], "name": "BondRedeemed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "collateralAmount", "type": "uint256" } ], "name": "CollateralAssigned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "destination", "type": "address" } ], "name": "CollateralExcessRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "collateralMultiplier", "type": "uint256" } ], "name": "CollateralMultiplierUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "collateralAmount", "type": "uint256" } ], "name": "CollateralReleased", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "cooldown", "type": "uint256" } ], "name": "CooldownSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "cooldown", "type": "uint256" } ], "name": "CooldownStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "interests", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "maturities", "type": "uint256[]" } ], "name": "InterestParametersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "totalBorrowed", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "destination", "type": "address" } ], "name": "LiquidityRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "totalBorrowed", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "destination", "type": "address" } ], "name": "LiquidityReturned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "MaxInterestParametersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "COOLDOWN", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "activateCooldown", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "bonds", "outputs": [ { "internalType": "uint256", "name": "mintingDate", "type": "uint256" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "internalType": "uint256", "name": "principal", "type": "uint256" }, { "internalType": "uint256", "name": "interest", "type": "uint256" }, { "internalType": "bool", "name": "redeemed", "type": "bool" }, { "internalType": "string", "name": "imageCID", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "beneficiary", "type": "address" }, { "internalType": "uint256", "name": "maturity", "type": "uint256" }, { "internalType": "uint256", "name": "principal", "type": "uint256" }, { "internalType": "string", "name": "imageCID", "type": "string" } ], "name": "buyBond", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "collateralMultiplier", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "collateralTokenAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "collaterals", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "cooldowns", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maturity", "type": "uint256" } ], "name": "getInterestForMaturity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_principalToken", "type": "address" }, { "internalType": "address", "name": "_collateralToken", "type": "address" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" } ], "internalType": "struct ERC20NFTBond.NFTParams", "name": "_nftParams", "type": "tuple" }, { "internalType": "address", "name": "_accessManager", "type": "address" }, { "internalType": "uint256[]", "name": "_interests", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "_maturities", "type": "uint256[]" }, { "internalType": "uint256", "name": "_cooldownSeconds", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "interests", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "maturities", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxParametersLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "principalTokenAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "redeemBond", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "destination", "type": "address" } ], "name": "removeExcessOfCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "destination", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "requestLiquidity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "returnLiquidity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newManager", "type": "address" } ], "name": "setAccessManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "multiplierIndex", "type": "uint256" } ], "name": "setCollateralMultiplier", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "cooldown", "type": "uint256" } ], "name": "setCooldown", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_interests", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "_maturities", "type": "uint256[]" } ], "name": "setInterestParameters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "setMaxInterestParams", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBorrowed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalCollateralizedAmount", "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": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" } ]
60a0604052306080523480156200001557600080fd5b50600054610100900460ff1615808015620000375750600054600160ff909116105b8062000067575062000054306200014160201b620018ce1760201c565b15801562000067575060005460ff166001145b620000cf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000f3576000805461ff0019166101001790555b80156200013a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5062000150565b6001600160a01b03163b151590565b608051615f506200018860003960008181610c0f01528181610c4f01528181610ddf01528181610e1f0152610fc30152615f506000f3fe6080604052600436106102935760003560e01c80636352211e1161015a578063a22cb465116100c1578063b88d4fde1161007a578063b88d4fde146107be578063c87b56dd146107de578063c9580804146107fe578063e066d7be1461081e578063e985e9c51461083e578063fab7364f1461088757600080fd5b8063a22cb46514610708578063a2724a4d14610728578063a3aca8d71461073f578063a6a5fe701461075e578063aa097f151461077e578063b0bce8361461079e57600080fd5b80638456cb59116101135780638456cb5914610659578063928c91d51461066e57806395d89b411461068e57806399a49fa3146106a35780639b37042e146106ba5780639d6fac6f146106da57600080fd5b80636352211e146105a357806363ba5972146105c357806368d9c707146105e35780636d9dd2011461060357806370a08231146106225780637124f1981461064257600080fd5b80633f4ba83a116101fe5780634f1ef286116101b75780634f1ef286146104f05780634f6ccce7146105035780634fc3f41a1461052357806352d1902d146105435780635c975abb146105585780635f1c17c01461057157600080fd5b80633f4ba83a1461045157806342842e0e1461046657806342966c681461048657806344104627146104a65780634c19386c146104b95780634e26aef0146104d057600080fd5b806318160ddd1161025057806318160ddd1461038e578063221e03d1146103a357806323b872dd146103c357806324c1173b146103e35780632f745c59146104115780633659cfe61461043157600080fd5b806301ffc9a714610298578063042a2077146102cd57806306fdde03146102fb578063081812fc1461031d578063095ea7b31461035557806313a3778414610377575b600080fd5b3480156102a457600080fd5b506102b86102b3366004614f5c565b6108a7565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102ed6102e8366004614f79565b6108b8565b6040519081526020016102c4565b34801561030757600080fd5b506103106108c3565b6040516102c49190614fea565b34801561032957600080fd5b5061033d610338366004614f79565b610955565b6040516001600160a01b0390911681526020016102c4565b34801561036157600080fd5b50610375610370366004615019565b61097c565b005b34801561038357600080fd5b506102ed6101f95481565b34801561039a57600080fd5b506099546102ed565b3480156103af57600080fd5b506103756103be366004614f79565b610a96565b3480156103cf57600080fd5b506103756103de366004615043565b610b3d565b3480156103ef57600080fd5b506102ed6103fe366004614f79565b6102606020526000908152604090205481565b34801561041d57600080fd5b506102ed61042c366004615019565b610b6f565b34801561043d57600080fd5b5061037561044c36600461507f565b610c05565b34801561045d57600080fd5b50610375610ce4565b34801561047257600080fd5b50610375610481366004615043565b610d34565b34801561049257600080fd5b506103756104a1366004614f79565b610d4f565b6102ed6104b4366004614f79565b610d7d565b3480156104c557600080fd5b506102ed6102925481565b3480156104dc57600080fd5b506103756104eb366004614f79565b610d9b565b6103756104fe366004615146565b610dd5565b34801561050f57600080fd5b506102ed61051e366004614f79565b610ea5565b34801561052f57600080fd5b5061037561053e366004614f79565b610f38565b34801561054f57600080fd5b506102ed610fb6565b34801561056457600080fd5b506102c45460ff166102b8565b34801561057d57600080fd5b5061059161058c366004614f79565b611069565b6040516102c496959493929190615194565b3480156105af57600080fd5b5061033d6105be366004614f79565b61112f565b3480156105cf57600080fd5b506103756105de36600461507f565b61118f565b3480156105ef57600080fd5b506103756105fe36600461521f565b6112a8565b34801561060f57600080fd5b5061025d546001600160a01b031661033d565b34801561062e57600080fd5b506102ed61063d36600461507f565b611303565b34801561064e57600080fd5b506102ed61025f5481565b34801561066557600080fd5b50610375611389565b34801561067a57600080fd5b506102ed610689366004614f79565b6113d9565b34801561069a57600080fd5b506103106113fb565b3480156106af57600080fd5b506102ed61025e5481565b3480156106c657600080fd5b506103756106d536600461528b565b61140a565b3480156106e657600080fd5b506102ed6106f5366004614f79565b61027a6020526000908152604090205481565b34801561071457600080fd5b50610375610723366004615370565b61151b565b34801561073457600080fd5b506102ed6102795481565b34801561074b57600080fd5b50610327546001600160a01b031661033d565b34801561076a57600080fd5b506102ed610779366004615019565b611526565b34801561078a57600080fd5b506102ed610799366004614f79565b611550565b3480156107aa57600080fd5b506102ed6107b93660046153a7565b611561565b3480156107ca57600080fd5b506103756107d936600461541c565b611582565b3480156107ea57600080fd5b506103106107f9366004614f79565b6115ba565b34801561080a57600080fd5b5061037561081936600461507f565b611706565b34801561082a57600080fd5b50610375610839366004614f79565b61177b565b34801561084a57600080fd5b506102b8610859366004615478565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b34801561089357600080fd5b506102ed6108a2366004614f79565b61181a565b60006108b2826118dd565b92915050565b60006108b282611902565b6060606580546108d2906154ab565b80601f01602080910402602001604051908101604052809291908181526020018280546108fe906154ab565b801561094b5780601f106109205761010080835404028352916020019161094b565b820191906000526020600020905b81548152906001019060200180831161092e57829003601f168201915b5050505050905090565b60006109608261192f565b506000908152606960205260409020546001600160a01b031690565b60006109878261112f565b9050806001600160a01b0316836001600160a01b0316036109f95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610a155750610a158133610859565b610a875760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016109f0565b610a91838361198e565b505050565b7fffbea09aa6ccdb51b9246608f93ddcb03ccbf4f8da455f76d2de9b16aa0c3b0f610ac181336119fc565b610ade57604051634a11ac9160e11b815260040160405180910390fd5b60008211610aff5760405163061608fb60e21b815260040160405180910390fd5b61025e8290556040518281527f33fcf02cfde4d18783a9298b81728011eb2804b07211acca921806dd910554e9906020015b60405180910390a15050565b610b48335b82611a73565b610b645760405162461bcd60e51b81526004016109f0906154df565b610a91838383611af1565b6000610b7a83611303565b8210610bdc5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016109f0565b506001600160a01b03919091166000908152609760209081526040808320938352929052205490565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c4d5760405162461bcd60e51b81526004016109f09061552c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c96600080516020615e74833981519152546001600160a01b031690565b6001600160a01b031614610cbc5760405162461bcd60e51b81526004016109f090615578565b610cc581611c62565b60408051600080825260208201909252610ce191839190611caa565b50565b7f539440820030c4994db4e31b6b800deafd503688728f932addfe7a410515c14c610d0f81336119fc565b610d2c57604051634a11ac9160e11b815260040160405180910390fd5b610ce1611e15565b610a9183838360405180602001604052806000815250611582565b610d5833610b42565b610d745760405162461bcd60e51b81526004016109f0906154df565b610ce181611e1f565b6000610d8882611e28565b50610d9282611e7d565b50506102925490565b33610da58261112f565b6001600160a01b031614610dcc57604051637f1931cb60e01b815260040160405180910390fd5b610ce181611e96565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e1d5760405162461bcd60e51b81526004016109f09061552c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e66600080516020615e74833981519152546001600160a01b031690565b6001600160a01b031614610e8c5760405162461bcd60e51b81526004016109f090615578565b610e9582611c62565b610ea182826001611caa565b5050565b6000610eb060995490565b8210610f135760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016109f0565b60998281548110610f2657610f266155c4565b90600052602060002001549050919050565b7ffc54e6ccad2eef99c77c71464491bd5fa0c8dfd9b46734c27388826c08b632b6610f6381336119fc565b610f8057604051634a11ac9160e11b815260040160405180910390fd5b6102798290556040518281527ff4f81c8df394c367119ef9185e49924fbc14f33668d8c0fe5a767cc822858ae290602001610b31565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110565760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016109f0565b50600080516020615e7483398151915290565b61022b60205260009081526040902080546001820154600283015460038401546004850154600586018054959694959394929360ff90921692916110ac906154ab565b80601f01602080910402602001604051908101604052809291908181526020018280546110d8906154ab565b80156111255780601f106110fa57610100808354040283529160200191611125565b820191906000526020600020905b81548152906001019060200180831161110857829003601f168201915b5050505050905086565b6000818152606760205260408120546001600160a01b0316806108b25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016109f0565b7fffbea09aa6ccdb51b9246608f93ddcb03ccbf4f8da455f76d2de9b16aa0c3b0f6111ba81336119fc565b6111d757604051634a11ac9160e11b815260040160405180910390fd5b61025f5461025d546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015611226573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124a91906155da565b6112549190615609565b61025d5490915061126f906001600160a01b03168483612036565b6040516001600160a01b038416907f510b59e824b7f92bc078d2b00466c73c8ce23ab07b38d4e252ccf3dbc403b13a90600090a2505050565b7fdb444f04a7bba67ab27c39f659b1329f776358e660a1985afdd1881c5172d50c6112d381336119fc565b6112f057604051634a11ac9160e11b815260040160405180910390fd5b6112fc85858585612099565b5050505050565b60006001600160a01b03821661136d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016109f0565b506001600160a01b031660009081526068602052604090205490565b7f539440820030c4994db4e31b6b800deafd503688728f932addfe7a410515c14c6113b481336119fc565b6113d157604051634a11ac9160e11b815260040160405180910390fd5b610ce16121d8565b6101f881815481106113ea57600080fd5b600091825260209091200154905081565b6060606680546108d2906154ab565b600054610100900460ff161580801561142a5750600054600160ff909116105b806114445750303b158015611444575060005460ff166001145b6114605760405162461bcd60e51b81526004016109f090615620565b6000805460ff191660011790558015611483576000805461ff0019166101001790555b61032780546001600160a01b03808d166001600160a01b0319928316179092556103288054928c16929091169190911790556114db6114c2898061566e565b6114cf60208c018c61566e565b8d8c8c8c8c8c8c6121e0565b801561150f576000805461ff001916905560405160018152600080516020615ed48339815191529060200160405180910390a15b50505050505050505050565b610ea13383836122c2565b6000611530612390565b61153a83836123d7565b61154483836123ef565b50506102925492915050565b6101f781815481106113ea57600080fd5b600061156b612390565b61157785858585612498565b90505b949350505050565b61158c3383611a73565b6115a85760405162461bcd60e51b81526004016109f0906154df565b6115b4848484846124db565b50505050565b6000818152606760205260409020546060906001600160a01b03166115f257604051634a1850bf60e11b815260040160405180910390fd5b600082815261022b60209081526040808320815160c0810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460ff161515608083015260058101805460a084019190611656906154ab565b80601f0160208091040260200160405190810160405280929190818152602001828054611682906154ab565b80156116cf5780601f106116a4576101008083540402835291602001916116cf565b820191906000526020600020905b8154815290600101906020018083116116b257829003601f168201915b50505050508152505090508060a00151516000146116f7576116f08361250e565b9392505050565b6116f083612833565b50919050565b600061171281336119fc565b61172f57604051634a11ac9160e11b815260040160405180910390fd5b61019180546001600160a01b0319166001600160a01b0384169081179091556040517fa5bc17e575e3b53b23d0e93e121a5a66d1de4d5edb4dfde6027b14d79b7f2b9c90600090a25050565b7fdb444f04a7bba67ab27c39f659b1329f776358e660a1985afdd1881c5172d50c6117a681336119fc565b6117c357604051634a11ac9160e11b815260040160405180910390fd5b600082116117e4576040516310f6a8b760e11b815260040160405180910390fd5b6101f98290556040518281527f7b63f4ec6021f2c51474ff321e4a01fb4464f2f4b23e36848374cb98c5fc20c690602001610b31565b60006101f8600081548110611831576118316155c4565b906000526020600020015482101561185c57604051634223180f60e01b815260040160405180910390fd5b6101f75460009061186f90600190615609565b90505b6101f88181548110611886576118866155c4565b906000526020600020015483106118be576101f781815481106118ab576118ab6155c4565b9060005260206000200154915050919050565b6118c7816156b5565b9050611872565b6001600160a01b03163b151590565b60006001600160e01b0319821663780e9d6360e01b14806108b257506108b28261283e565b60008061190e8361288e565b9050600061191b8461112f565b90506119288483836129f7565b5092915050565b6000818152606760205260409020546001600160a01b0316610ce15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016109f0565b600081815260696020526040902080546001600160a01b0319166001600160a01b03841690811790915581906119c38261112f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61019154604051632474521560e21b8152600481018490526001600160a01b03838116602483015260009216906391d1485490604401602060405180830381865afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f091906156cc565b600080611a7f8361112f565b9050806001600160a01b0316846001600160a01b03161480611ac657506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b8061157a5750836001600160a01b0316611adf84610955565b6001600160a01b031614949350505050565b826001600160a01b0316611b048261112f565b6001600160a01b031614611b2a5760405162461bcd60e51b81526004016109f0906156e9565b6001600160a01b038216611b8c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109f0565b611b998383836001612cb3565b826001600160a01b0316611bac8261112f565b6001600160a01b031614611bd25760405162461bcd60e51b81526004016109f0906156e9565b600081815260696020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260688552838620805460001901905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b7fa615a8afb6fffcb8c6809ac0997b5c9c12b8cc97651150f14c8f6203168cff4c611c8d81336119fc565b610ea157604051634a11ac9160e11b815260040160405180910390fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611cdd57610a9183612cbf565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611d37575060408051601f3d908101601f19168201909252611d34918101906155da565b60015b611d9a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016109f0565b600080516020615e748339815191528114611e095760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016109f0565b50610a91838383612d5b565b611e1d612d80565b565b610ce181612dd3565b60008161029254611e399190615609565b61029281905560405190815233907f821f69b649b4ff849458de484066b9e25fe68c53f7f0a55d306f848ea293278b9060200160405180910390a250506102925490565b61032754610ce1906001600160a01b0316333084612e13565b600081815261022b60209081526040808320815160c0810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460ff161515608083015260058101805460a084019190611efa906154ab565b80601f0160208091040260200160405190810160405280929190818152602001828054611f26906154ab565b8015611f735780601f10611f4857610100808354040283529160200191611f73565b820191906000526020600020905b815481529060010190602001808311611f5657829003601f168201915b50505091909252505050600083815261027a6020526040902054909150151580611fad5750805160208201514291611faa9161572e565b10155b80611fbc5750611fbc82612e4b565b15611fda57604051638b0b7e7360e01b815260040160405180910390fd5b61027954611fe8904261572e565b600083815261027a60205260409081902091909155517f486938a17cdff5c87b3072bb5062576f69eaa4622ec7857a2cfbdcdbfc37758590610b319084904290918252602082015260400190565b6040516001600160a01b038316602482015260448101829052610a9190849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612e8c565b826120b75760405163b98dccc560e01b815260040160405180910390fd5b6101f9548311156120db5760405163e7c8d64d60e01b815260040160405180910390fd5b8281146120fb5760405163598fde5160e01b815260040160405180910390fd5b60005b838110156121785780156121685782828281811061211e5761211e6155c4565b9050602002013583836001846121349190615609565b818110612143576121436155c4565b90506020020135106121685760405163967a4a7d60e01b815260040160405180910390fd5b61217181615746565b90506120fe565b506121866101f78585614e38565b506121946101f88383614e38565b507f91aa66ebbdff56917c78b5c120f6d06478db9de6e2a1937fa036d4cfc670b3806101f76101f86040516121ca92919061579f565b60405180910390a150505050565b611e1d612f5e565b600054610100900460ff16158080156122005750600054600160ff909116105b8061221a5750303b15801561221a575060005460ff166001145b6122365760405162461bcd60e51b81526004016109f090615620565b6000805460ff191660011790558015612259576000805461ff0019166101001790555b6122668c8c8c8c8b612f9c565b61227388878787876130ed565b6122808287878787613194565b80156122b4576000805461ff001916905560405160018152600080516020615ed48339815191529060200160405180910390a15b505050505050505050505050565b816001600160a01b0316836001600160a01b0316036123235760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109f0565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6102c45460ff1615611e1d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016109f0565b61032754610ea1906001600160a01b03168383612036565b60007facf51390d5668c4ea7251f9c38e251ee71b47dfd0caa814f297de9e0bac5e51a61241c81336119fc565b61243957604051634a11ac9160e11b815260040160405180910390fd5b8261029254612448919061572e565b6102928190556040519081526001600160a01b038516907fac432273479238f0f38c0d1ad7690a74d1d7b4e6ffbf41b56427b234900c5b419060200160405180910390a250506102925492915050565b60006124a585858561321f565b60006124c08660405180602001604052806000815250613238565b90506124ce8186868661326a565b6115778686868487613315565b6124e6848484611af1565b6124f28484848461337f565b6115b45760405162461bcd60e51b81526004016109f0906157c4565b6060600061022b60008481526020019081526020016000206040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582018054612584906154ab565b80601f01602080910402602001604051908101604052809291908181526020018280546125b0906154ab565b80156125fd5780601f106125d2576101008083540402835291602001916125fd565b820191906000526020600020905b8154815290600101906020018083116125e057829003601f168201915b505050505081525050905060006126138461347d565b6040516020016126239190615832565b60408051601f1981840301815282825260a085015183830183526009845268141c9a5b98da5c185b60ba1b602085015291850151909261268e9161266a9060126000613511565b60405160200161267a919061586f565b60405160208183030381529060405261370b565b6126e56040518060400160405280600a81526020016910dbdb1b185d195c985b60b21b8152506126d56012600061025e548a604001516126ce9190615897565b9190613511565b60405160200161267a91906158b6565b6127366040518060400160405280600381526020016241505960e81b81525061273160026001662386f26fc100008b606001516301e133806127279190615897565b6126ce91906158f6565b61370b565b612786604051806040016040528060088152602001674d6174757269747960c01b8152506127766002600062278d008c6020015160646127279190615897565b60405160200161267a919061590a565b6127db6040518060400160405280601781526020017f4d6174757269747920556e69782054696d657374616d700000000000000000008152506127318a602001518b600001516127d6919061572e565b61347d565b6040516020016127f19796959493929190615935565b604051602081830303815290604052905061280b81613737565b60405160200161281b9190615abd565b60405160208183030381529060405292505050919050565b60606108b28261388a565b60006001600160e01b031982166380ac58cd60e01b148061286f57506001600160e01b03198216635b5e139f60e01b145b806108b257506301ffc9a760e01b6001600160e01b03198316146108b2565b600061289982612e4b565b6128b6576040516335277d6560e01b815260040160405180910390fd5b60006128c183613989565b9050600061022b60008581526020019081526020016000206040518060c0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff16151515158152602001600582018054612937906154ab565b80601f0160208091040260200160405190810160405280929190818152602001828054612963906154ab565b80156129b05780601f10612985576101008083540402835291602001916129b0565b820191906000526020600020905b81548152906001019060200180831161299357829003601f168201915b5050509190925250508151600087815261027a6020526040812054939450926129d99250615609565b90506129ee82604001518360600151836139fc565b95945050505050565b612a02838383613a25565b610327546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015612a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6f91906155da565b1015612c9b5761025e54610327546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015612ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae891906155da565b612af29085615609565b612afc9190615897565b610327546040516370a0823160e01b8152306004820152919250612b849184916001600160a01b0316906370a0823190602401602060405180830381865afa158015612b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7091906155da565b610327546001600160a01b03169190612036565b610328546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015612bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf191906155da565b1015612c8357610328546040516370a0823160e01b8152306004820152612c7e9184916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6a91906155da565b610328546001600160a01b03169190612036565b6115b4565b610328546115b4906001600160a01b03168383612036565b61032754610a91906001600160a01b03168284612036565b6115b484848484613a80565b6001600160a01b0381163b612d2c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016109f0565b600080516020615e7483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612d6483613bad565b600082511180612d715750805b15610a91576115b48383613bed565b612d88613cd8565b6102c4805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b612ddc81613d22565b600081815260c9602052604090208054612df5906154ab565b159050610ce157600081815260c960205260408120610ce191614e83565b6040516001600160a01b03808516602483015283166044820152606481018290526115b49085906323b872dd60e01b90608401612062565b600081815261027a602052604081205415801590612e775750600082815261027a602052604090205442115b15612e8457506001919050565b506000919050565b6000612ee1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613dc59092919063ffffffff16565b805190915015610a915780806020019051810190612eff91906156cc565b610a915760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109f0565b612f66612390565b6102c4805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612db63390565b600054610100900460ff1615808015612fbc5750600054600160ff909116105b80612fd65750303b158015612fd6575060005460ff166001145b612ff25760405162461bcd60e51b81526004016109f090615620565b6000805460ff191660011790558015613015576000805461ff0019166101001790555b61308886868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881529250889150879081908401838280828437600092019190915250613dd492505050565b613090613e05565b613098613e05565b6130a0613e05565b6130a8613e05565b6130b182613e2c565b80156130e5576000805461ff001916905560405160018152600080516020615ed48339815191529060200160405180910390a15b505050505050565b600054610100900460ff161580801561310d5750600054600160ff909116105b806131275750303b158015613127575060005460ff166001145b6131435760405162461bcd60e51b81526004016109f090615620565b6000805460ff191660011790558015613166576000805461ff0019166101001790555b600561025e5561025d80546001600160a01b0319166001600160a01b0388161790556130b185858585613f1d565b600054610100900460ff16158080156131b45750600054600160ff909116105b806131ce5750303b1580156131ce575060005460ff166001145b6131ea5760405162461bcd60e51b81526004016109f090615620565b6000805460ff19166001179055801561320d576000805461ff0019166101001790555b6102798690556130b185858585613f1d565b61032754610a91906001600160a01b0316333084612e13565b6000806132456101c35490565b90506132566101c380546001019055565b6132608482613fd2565b6116f08184613fec565b61327382614086565b61328f5760405162d11df360e61b815260040160405180910390fd5b61329b8484848461411f565b600061025e54836132ac9190615897565b90508061025f546132bd919061572e565b61025f556000858152610260602090815260409182902083905581518781529081018390527f5310a2e5496b1103f5c7f354cfe0b41dd7ff20dbd3c6dd4bf37a603b0a798a8091015b60405180910390a15050505050565b60006133208561181a565b9050600061332d8461250e565b90507f94e81693149d15a623f550e1e116762d93f1ea65d15d63cfee2e34ae4b480525338886428a8a888a8960405161336e99989796959493929190615b02565b60405180910390a150505050505050565b60006001600160a01b0384163b1561347557604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906133c3903390899088908890600401615b71565b6020604051808303816000875af19250505080156133fe575060408051601f3d908101601f191682019092526133fb91810190615bae565b60015b61345b573d80801561342c576040519150601f19603f3d011682016040523d82523d6000602084013e613431565b606091505b5080516000036134535760405162461bcd60e51b81526004016109f0906157c4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061157a565b50600161157a565b6060600061348a83614218565b600101905060008167ffffffffffffffff8111156134aa576134aa61509a565b6040519080825280601f01601f1916602001820160405280156134d4576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846134de575b509392505050565b6060600082613521576000613524565b60015b9050600061353385600a615caf565b9050856000805b82156135995760ff81161561355b578061355381615cbe565b915050613579565b613566600a84615cdd565b15613579578061357581615cbe565b9150505b8161358381615cbe565b92506135929050600a846158f6565b925061353a565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915287151560e082015260ff89166135e98385615cf1565b60ff1610613629576135fb858b6158f6565b81526136078984615cf1565b60ff166040820181905261361c908790615d14565b60ff1660208201526136dc565b6136338284615cf1565b61363e90600a615caf565b613648908b6158f6565b8152898511156136ab5760026080820152613663838a615cf1565b61366e906002615d14565b60ff1660a082018190526136829083615d14565b60ff1660408201819052613697908790615d14565b60ff166020820152600160c08201526136dc565b6136b6826001615d14565b60ff1660408201526136c88984615cf1565b6136d3906001615d14565b60ff1660608201525b8581604001516136ec9190615d14565b60ff1660208201526136fd816142f0565b9a9950505050505050505050565b60608282604051602001613720929190615d39565b604051602081830303815290604052905092915050565b6060815160000361375657505060408051602081019091526000815290565b6000604051806060016040528060408152602001615e946040913990506000600384516002613785919061572e565b61378f91906158f6565b61379a906004615897565b67ffffffffffffffff8111156137b2576137b261509a565b6040519080825280601f01601f1916602001820160405280156137dc576020820181803683370190505b509050600182016020820185865187015b80821015613848576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506137ed565b505060038651066001811461386457600281146138775761387f565b603d6001830353603d600283035361387f565b603d60018303535b509195945050505050565b60606138958261192f565b600082815260c96020526040812080546138ae906154ab565b80601f01602080910402602001604051908101604052809291908181526020018280546138da906154ab565b80156139275780601f106138fc57610100808354040283529160200191613927565b820191906000526020600020905b81548152906001019060200180831161390a57829003601f168201915b505050505090506000613954604080518082019091526007815266697066733a2f2f60c81b602082015290565b90508051600003613966575092915050565b81511561398057808260405160200161281b929190615daa565b61157a84614533565b600080613995836145b5565b6000848152610260602052604090205461025f54919250906139b8908290615609565b61025f5560408051858152602081018390527fd6513284110ca9c03fb9099da6d3e2c1c34761de7886e2185080cc9a91a46307910160405180910390a15092915050565b6000613a1b84613a0c8486615897565b68056bc75e2d6310000061472c565b61157a908561572e565b604080513381526001600160a01b0383166020820152908101849052426060820152608081018390527fb9f061e135a4d6073493df40694c90ade51b25ee5308242df91a6608e0d6dd229060a00160405180910390a1505050565b6001811115613aef5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60648201526084016109f0565b816001600160a01b038516613b4b57613b4681609980546000838152609a60205260408120829055600182018355919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000155565b613b6e565b836001600160a01b0316856001600160a01b031614613b6e57613b6e85826147db565b6001600160a01b038416613b8a57613b8581614878565b6112fc565b846001600160a01b0316846001600160a01b0316146112fc576112fc8482614927565b613bb681612cbf565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b613c555760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016109f0565b600080846001600160a01b031684604051613c709190615dd9565b600060405180830381855af49150503d8060008114613cab576040519150601f19603f3d011682016040523d82523d6000602084013e613cb0565b606091505b50915091506129ee8282604051806060016040528060278152602001615ef46027913961496b565b6102c45460ff16611e1d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016109f0565b6000613d2d8261112f565b9050613d3d816000846001612cb3565b613d468261112f565b600083815260696020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526068845282852080546000190190558785526067909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606061157a8484600085614984565b600054610100900460ff16613dfb5760405162461bcd60e51b81526004016109f090615df5565b610ea18282614a5f565b600054610100900460ff16611e1d5760405162461bcd60e51b81526004016109f090615df5565b600054610100900460ff1615808015613e4c5750600054600160ff909116105b80613e665750303b158015613e66575060005460ff166001145b613e825760405162461bcd60e51b81526004016109f090615620565b6000805460ff191660011790558015613ea5576000805461ff0019166101001790555b61019180546001600160a01b0319166001600160a01b0384169081179091556040517fa5bc17e575e3b53b23d0e93e121a5a66d1de4d5edb4dfde6027b14d79b7f2b9c90600090a28015610ea1576000805461ff001916905560405160018152600080516020615ed483398151915290602001610b31565b600054610100900460ff1615808015613f3d5750600054600160ff909116105b80613f575750303b158015613f57575060005460ff166001145b613f735760405162461bcd60e51b81526004016109f090615620565b6000805460ff191660011790558015613f96576000805461ff0019166101001790555b613fa285858585614aad565b80156112fc576000805461ff001916905560405160018152600080516020615ed483398151915290602001613306565b610ea1828260405180602001604052806000815250614b38565b6000828152606760205260409020546001600160a01b03166140675760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016109f0565b600082815260c9602090815260409091208251610a9192840190614ebd565b600061025e54826140979190615897565b61025f5461025d546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156140e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410891906155da565b6141129190615609565b10612e8457506001919050565b60008211614140576040516392a8036f60e01b815260040160405180910390fd5b6101f8600081548110614155576141556155c4565b906000526020600020015483101561418057604051634223180f60e01b815260040160405180910390fd5b600061418b8461181a565b6040805160c08101825242815260208082018881528284018881526060840186815260006080860181815260a087018b81528e835261022b8752979091208651815593516001850155915160028401555160038301555160048201805460ff191691151591909117905592518051949550919361420e9260058501920190614ebd565b5050505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106142575772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310614283576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106142a157662386f26fc10000830492506010015b6305f5e10083106142b9576305f5e100830492506008015b61271083106142cd57612710830492506004015b606483106142df576064830492506002015b600a83106108b25760010192915050565b60606000826020015160ff1667ffffffffffffffff8111156143145761431461509a565b6040519080825280601f01601f19166020018201604052801561433e576020820181803683370190505b5090508260e001511561438757602560f81b816001835161435f9190615609565b8151811061436f5761436f6155c4565b60200101906001600160f81b031916908160001a9053505b8260c00151156143f057600360fc1b816000815181106143a9576143a96155c4565b60200101906001600160f81b031916908160001a905350601760f91b816001815181106143d8576143d86155c4565b60200101906001600160f81b031916908160001a9053505b608083015160ff165b8360a0015160ff1681101561444857603060f81b82828151811061441f5761441f6155c4565b60200101906001600160f81b031916908160001a9053508061444081615746565b9150506143f9565b505b8251156108b2576000836060015160ff161180156144755750826060015160ff16836040015160ff16145b156144be57601760f91b8184604001805161448f90615e40565b60ff1690819052815181106144a6576144a66155c4565b60200101906001600160f81b031916908160001a9053505b82516144cc90600a90615cdd565b6144d790603061572e565b60f81b818460400180516144ea90615e40565b60ff169081905281518110614501576145016155c4565b60200101906001600160f81b031916908160001a905350600a8360000181815161452b91906158f6565b90525061444a565b606061453e8261192f565b6000614564604080518082019091526007815266697066733a2f2f60c81b602082015290565b9050600081511161458457604051806020016040528060008152506116f0565b8061458e84614b6b565b60405160200161459f929190615daa565b6040516020818303038152906040529392505050565b600081815261022b60209081526040808320815160c0810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460ff16151560808301526005810180548493929160a084019161461c906154ab565b80601f0160208091040260200160405190810160405280929190818152602001828054614648906154ab565b80156146955780601f1061466a57610100808354040283529160200191614695565b820191906000526020600020905b81548152906001019060200180831161467857829003601f168201915b505050505081525050905042816000015182602001516146b5919061572e565b106146d357604051631074e9ab60e31b815260040160405180910390fd5b8060800151156146f6576040516306d3830f60e21b815260040160405180910390fd5b600083815261022b60209081526040808320600401805460ff1916600117905583015160608401519184015161157a92906139fc565b60008080600019858709858702925082811083820303915050806000036147665783828161475c5761475c6158e0565b04925050506116f0565b80841161477257600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600060016147e884611303565b6147f29190615609565b600083815260986020526040902054909150808214614845576001600160a01b03841660009081526097602090815260408083208584528252808320548484528184208190558352609890915290208190555b5060009182526098602090815260408084208490556001600160a01b039094168352609781528383209183525290812055565b60995460009061488a90600190615609565b6000838152609a6020526040812054609980549394509092849081106148b2576148b26155c4565b9060005260206000200154905080609983815481106148d3576148d36155c4565b6000918252602080832090910192909255828152609a9091526040808220849055858252812055609980548061490b5761490b615e5d565b6001900381819060005260206000200160009055905550505050565b600061493283611303565b6001600160a01b039093166000908152609760209081526040808320868452825280832085905593825260989052919091209190915550565b6060831561497a5750816116f0565b6116f08383614bfc565b6060824710156149e55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109f0565b600080866001600160a01b03168587604051614a019190615dd9565b60006040518083038185875af1925050503d8060008114614a3e576040519150601f19603f3d011682016040523d82523d6000602084013e614a43565b606091505b5091509150614a5487838387614c26565b979650505050505050565b600054610100900460ff16614a865760405162461bcd60e51b81526004016109f090615df5565b8151614a99906065906020850190614ebd565b508051610a91906066906020840190614ebd565b600054610100900460ff1615808015614acd5750600054600160ff909116105b80614ae75750303b158015614ae7575060005460ff166001145b614b035760405162461bcd60e51b81526004016109f090615620565b6000805460ff191660011790558015614b26576000805461ff0019166101001790555b60046101f955613fa285858585612099565b614b428383614c9f565b614b4f600084848461337f565b610a915760405162461bcd60e51b81526004016109f0906157c4565b60606000614b7883614218565b600101905060008167ffffffffffffffff811115614b9857614b9861509a565b6040519080825280601f01601f191660200182016040528015614bc2576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450841561350957614bcc565b815115614c0c5781518083602001fd5b8060405162461bcd60e51b81526004016109f09190614fea565b60608315614c95578251600003614c8e576001600160a01b0385163b614c8e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109f0565b508161157a565b61157a8383614bfc565b6001600160a01b038216614cf55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109f0565b6000818152606760205260409020546001600160a01b031615614d5a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109f0565b614d68600083836001612cb3565b6000818152606760205260409020546001600160a01b031615614dcd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109f0565b6001600160a01b038216600081815260686020908152604080832080546001019055848352606790915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054828255906000526020600020908101928215614e73579160200282015b82811115614e73578235825591602001919060010190614e58565b50614e7f929150614f31565b5090565b508054614e8f906154ab565b6000825580601f10614e9f575050565b601f016020900490600052602060002090810190610ce19190614f31565b828054614ec9906154ab565b90600052602060002090601f016020900481019282614eeb5760008555614e73565b82601f10614f0457805160ff1916838001178555614e73565b82800160010185558215614e73579182015b82811115614e73578251825591602001919060010190614f16565b5b80821115614e7f5760008155600101614f32565b6001600160e01b031981168114610ce157600080fd5b600060208284031215614f6e57600080fd5b81356116f081614f46565b600060208284031215614f8b57600080fd5b5035919050565b60005b83811015614fad578181015183820152602001614f95565b838111156115b45750506000910152565b60008151808452614fd6816020860160208601614f92565b601f01601f19169290920160200192915050565b6020815260006116f06020830184614fbe565b80356001600160a01b038116811461501457600080fd5b919050565b6000806040838503121561502c57600080fd5b61503583614ffd565b946020939093013593505050565b60008060006060848603121561505857600080fd5b61506184614ffd565b925061506f60208501614ffd565b9150604084013590509250925092565b60006020828403121561509157600080fd5b6116f082614ffd565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156150cb576150cb61509a565b604051601f8501601f19908116603f011681019082821181831017156150f3576150f361509a565b8160405280935085815286868601111561510c57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261513757600080fd5b6116f0838335602085016150b0565b6000806040838503121561515957600080fd5b61516283614ffd565b9150602083013567ffffffffffffffff81111561517e57600080fd5b61518a85828601615126565b9150509250929050565b868152856020820152846040820152836060820152821515608082015260c060a082015260006151c760c0830184614fbe565b98975050505050505050565b60008083601f8401126151e557600080fd5b50813567ffffffffffffffff8111156151fd57600080fd5b6020830191508360208260051b850101111561521857600080fd5b9250929050565b6000806000806040858703121561523557600080fd5b843567ffffffffffffffff8082111561524d57600080fd5b615259888389016151d3565b9096509450602087013591508082111561527257600080fd5b5061527f878288016151d3565b95989497509550505050565b600080600080600080600080600060e08a8c0312156152a957600080fd5b6152b28a614ffd565b98506152c060208b01614ffd565b975060408a013567ffffffffffffffff808211156152dd57600080fd5b908b01906040828e0312156152f157600080fd5b81985061530060608d01614ffd565b975060808c013591508082111561531657600080fd5b6153228d838e016151d3565b909750955060a08c013591508082111561533b57600080fd5b506153488c828d016151d3565b9a9d999c50979a9699959894979660c00135949350505050565b8015158114610ce157600080fd5b6000806040838503121561538357600080fd5b61538c83614ffd565b9150602083013561539c81615362565b809150509250929050565b600080600080608085870312156153bd57600080fd5b6153c685614ffd565b93506020850135925060408501359150606085013567ffffffffffffffff8111156153f057600080fd5b8501601f8101871361540157600080fd5b615410878235602084016150b0565b91505092959194509250565b6000806000806080858703121561543257600080fd5b61543b85614ffd565b935061544960208601614ffd565b925060408501359150606085013567ffffffffffffffff81111561546c57600080fd5b61541087828801615126565b6000806040838503121561548b57600080fd5b61549483614ffd565b91506154a260208401614ffd565b90509250929050565b600181811c908216806154bf57607f821691505b60208210810361170057634e487b7160e01b600052602260045260246000fd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156155ec57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561561b5761561b6155f3565b500390565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000808335601e1984360301811261568557600080fd5b83018035915067ffffffffffffffff8211156156a057600080fd5b60200191503681900382131561521857600080fd5b6000816156c4576156c46155f3565b506000190190565b6000602082840312156156de57600080fd5b81516116f081615362565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60008219821115615741576157416155f3565b500190565b600060018201615758576157586155f3565b5060010190565b6000815480845260208085019450836000528060002060005b8381101561579457815487529582019560019182019101615778565b509495945050505050565b6040815260006157b2604083018561575f565b82810360208401526129ee818561575f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008151615828818560208601614f92565b9290920192915050565b744d696e696d696365205969656c6420426f6e64202360581b815260008251615862816015850160208701614f92565b9190910160150192915050565b60008251615881818460208701614f92565b63081554d160e21b920191825250600401919050565b60008160001904831182151516156158b1576158b16155f3565b500290565b600082516158c8818460208701614f92565b650408ae8d0d2f60d31b920191825250600601919050565b634e487b7160e01b600052601260045260246000fd5b600082615905576159056158e0565b500490565b6000825161591c818460208701614f92565b66204d6f6e74687360c81b920191825250600701919050565b693d913730b6b2911d101160b11b8152875160009061595b81600a850160208d01614f92565b6201116160ed1b600a918401918201527f226465736372697074696f6e223a20224d696e694d696365205269736b205969600d8201527f656c6420426f6e642066726f6d2045746869634875622e222c20000000000000602d8201526159d7604782017022696d616765223a2022697066733a2f2f60781b9052565b6159e4605882018a615816565b6201116160ed1b81527f2265787465726e616c5f75726c223a202268747470733a2f2f65746869636875600382015266188b98dbdb488b60ca1b60238201526e2261747472696275746573223a205b60881b602a82019081529150615a4c9060390189615816565b600b60fa1b81529050615a626001820188615816565b600b60fa1b81529050615a786001820187615816565b600b60fa1b81529050615a8e6001820186615816565b600b60fa1b81529050615aa46001820185615816565b615d7d60f01b81526002019a9950505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251615af581601d850160208701614f92565b91909101601d0192915050565b600061012060018060a01b03808d168452808c166020850152508960408401528860608401528760808401528660a08401528560c08401528060e0840152615b4c81840186614fbe565b9050828103610100840152615b618185614fbe565b9c9b505050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615ba490830184614fbe565b9695505050505050565b600060208284031215615bc057600080fd5b81516116f081614f46565b600181815b80851115615c06578160001904821115615bec57615bec6155f3565b80851615615bf957918102915b93841c9390800290615bd0565b509250929050565b600082615c1d575060016108b2565b81615c2a575060006108b2565b8160018114615c405760028114615c4a57615c66565b60019150506108b2565b60ff841115615c5b57615c5b6155f3565b50506001821b6108b2565b5060208310610133831016604e8410600b8410161715615c89575081810a6108b2565b615c938383615bcb565b8060001904821115615ca757615ca76155f3565b029392505050565b60006116f060ff841683615c0e565b600060ff821660ff8103615cd457615cd46155f3565b60010192915050565b600082615cec57615cec6158e0565b500690565b600060ff821660ff841680821015615d0b57615d0b6155f3565b90039392505050565b600060ff821660ff84168060ff03821115615d3157615d316155f3565b019392505050565b6e3d913a3930b4ba2fba3cb832911d1160891b81528251600090615d6481600f850160208801614f92565b6a1116113b30b63ab2911d1160a91b600f918401918201528351615d8f81601a840160208801614f92565b61227d60f01b601a9290910191820152601c01949350505050565b60008351615dbc818460208801614f92565b835190830190615dd0818360208801614f92565b01949350505050565b60008251615deb818460208701614f92565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060ff821680615e5357615e536155f3565b6000190192915050565b634e487b7160e01b600052603160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206b3d7bae2659c9edc763f636fff5fb6eda524d17a2f6d9240f498304b671120a64736f6c634300080d0033