[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "reason", "type": "string" } ], "name": "AddressScreenContractUpdated", "type": "event" }, { "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": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "assetTokenAmount", "type": "uint256" } ], "name": "Claim", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" } ], "name": "FundingCommitmentRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "proceed", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "date", "type": "uint256" } ], "name": "FundingCommitmentUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "newDate", "type": "uint64" }, { "indexed": false, "internalType": "string", "name": "reason", "type": "string" } ], "name": "MaturityDateUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "docNameHash", "type": "bytes32" }, { "indexed": false, "internalType": "string", "name": "docName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "uri", "type": "string" }, { "indexed": false, "internalType": "bytes32", "name": "docHashSha256", "type": "bytes32" } ], "name": "NewDocumentAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "proceed", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "date", "type": "uint256" } ], "name": "NewFundingCommitmentAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [], "name": "Redeemed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "proceed", "type": "uint256" } ], "name": "SettleBondPurchase", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assetTokenAmount", "type": "uint256" } ], "name": "Sweep", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": false, "internalType": "address", "name": "otherTokenAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "otherTokenAmount", "type": "uint256" } ], "name": "SweepOther", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "BOND_TYPE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "string", "name": "docName", "type": "string" }, { "internalType": "bytes32", "name": "docHashSha256", "type": "bytes32" }, { "internalType": "string", "name": "uri", "type": "string" } ], "internalType": "struct PV01SinglePaymentBondV1.DocumentSpec", "name": "documentSpec", "type": "tuple" } ], "name": "addDocument", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "string", "name": "docName", "type": "string" }, { "internalType": "bytes32", "name": "docHashSha256", "type": "bytes32" }, { "internalType": "string", "name": "uri", "type": "string" } ], "internalType": "struct PV01SinglePaymentBondV1.DocumentSpec[]", "name": "documentSpecs", "type": "tuple[]" } ], "name": "addDocuments", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "address_", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "proceed", "type": "uint256" }, { "internalType": "uint256", "name": "date", "type": "uint256" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentInternal", "name": "fundingCommitmentInternal", "type": "tuple" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentExternal", "name": "fundingCommitment", "type": "tuple" } ], "name": "addFundingCommitment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "address_", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "proceed", "type": "uint256" }, { "internalType": "uint256", "name": "date", "type": "uint256" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentInternal", "name": "fundingCommitmentInternal", "type": "tuple" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentExternal[]", "name": "fundingCommitments_", "type": "tuple[]" } ], "name": "addFundingCommitments", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "address_", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "proceed", "type": "uint256" }, { "internalType": "uint256", "name": "date", "type": "uint256" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentInternal", "name": "fundingCommitmentInternal", "type": "tuple" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentExternal[]", "name": "fundingCommitments_", "type": "tuple[]" }, { "components": [ { "internalType": "string", "name": "docName", "type": "string" }, { "internalType": "bytes32", "name": "docHashSha256", "type": "bytes32" }, { "internalType": "string", "name": "uri", "type": "string" } ], "internalType": "struct PV01SinglePaymentBondV1.DocumentSpec[]", "name": "documentSpecs_", "type": "tuple[]" } ], "name": "addFundingCommitmentsAndDocuments", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "addressScreen", "outputs": [ { "internalType": "contract IAddressScreen", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "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": "assetToken", "outputs": [ { "internalType": "contract IERC20Standard", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "assetTokenDecimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bondIssuer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claim", "outputs": [ { "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "assetTokenAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "collateralId", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAllDocumentNames", "outputs": [ { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAllDocuments", "outputs": [ { "components": [ { "internalType": "string", "name": "docName", "type": "string" }, { "internalType": "bytes32", "name": "docNameHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "docHashSha256", "type": "bytes32" }, { "internalType": "uint256", "name": "lastModified", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "internalType": "struct PV01SinglePaymentBondV1.DocumentDetail[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAllFundingCommitment", "outputs": [ { "components": [ { "internalType": "address", "name": "address_", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "proceed", "type": "uint256" }, { "internalType": "uint256", "name": "date", "type": "uint256" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentInternal", "name": "fundingCommitmentInternal", "type": "tuple" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentExternal[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAmountToRepay", "outputs": [ { "internalType": "uint256", "name": "assetTokenAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "docName", "type": "string" } ], "name": "getDocument", "outputs": [ { "components": [ { "internalType": "string", "name": "docName", "type": "string" }, { "internalType": "bytes32", "name": "docNameHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "docHashSha256", "type": "bytes32" }, { "internalType": "uint256", "name": "lastModified", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "internalType": "struct PV01SinglePaymentBondV1.DocumentDetail", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "bondTokenAmount_", "type": "uint256" } ], "name": "getFinalAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user_", "type": "address" } ], "name": "getFinalAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress", "type": "address" } ], "name": "getFundingCommitment", "outputs": [ { "components": [ { "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "proceed", "type": "uint256" }, { "internalType": "uint256", "name": "date", "type": "uint256" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentInternal", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFundingCommitmentInvestors", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSweepDate", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "components": [ { "internalType": "address", "name": "address_", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "proceed", "type": "uint256" }, { "internalType": "uint256", "name": "date", "type": "uint256" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentInternal", "name": "fundingCommitmentInternal", "type": "tuple" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentExternal[]", "name": "fundingCommitments_", "type": "tuple[]" }, { "internalType": "address", "name": "assetTokenAddress_", "type": "address" }, { "internalType": "uint64", "name": "interestRateFraction_", "type": "uint64" }, { "internalType": "uint64", "name": "maturityDate_", "type": "uint64" }, { "internalType": "address", "name": "bondIssuer_", "type": "address" }, { "internalType": "address", "name": "addressScreen_", "type": "address" }, { "internalType": "uint64", "name": "sweepDate_", "type": "uint64" }, { "internalType": "address", "name": "owner_", "type": "address" }, { "internalType": "string", "name": "collateralId_", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "interestRateFraction", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isRepaidInFull", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maturityDate", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "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": [ { "internalType": "address", "name": "userAddress", "type": "address" } ], "name": "removeFundingCommitment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "userAddresses", "type": "address[]" } ], "name": "removeFundingCommitments", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAddress", "type": "address" }, { "internalType": "string", "name": "reason", "type": "string" } ], "name": "setAddressScreenContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "newDate", "type": "uint64" }, { "internalType": "string", "name": "reason", "type": "string" } ], "name": "setMaturityDate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "settleBondPurchase", "outputs": [ { "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "proceed", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sweep", "outputs": [ { "internalType": "uint256", "name": "transferAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sweepDelaySecondsFromMaturityDate", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "otherTokenAddress", "type": "address" } ], "name": "sweepOther", "outputs": [ { "internalType": "uint256", "name": "transferAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "address_", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "proceed", "type": "uint256" }, { "internalType": "uint256", "name": "date", "type": "uint256" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentInternal", "name": "fundingCommitmentInternal", "type": "tuple" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentExternal", "name": "fundingCommitment", "type": "tuple" } ], "name": "updateFundingCommitment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "address_", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "bondTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "proceed", "type": "uint256" }, { "internalType": "uint256", "name": "date", "type": "uint256" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentInternal", "name": "fundingCommitmentInternal", "type": "tuple" } ], "internalType": "struct PV01SinglePaymentBondV1.FundingCommitmentExternal[]", "name": "fundingCommitments_", "type": "tuple[]" } ], "name": "updateFundingCommitments", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b614fff80620000f46000396000f3fe6080604052600436106103535760003560e01c806366e2d55a116101c65780639fa5f50b116100f7578063e0cc476e11610095578063eec0f42e1161006f578063eec0f42e14610a61578063f2fde38b14610a76578063fbf99afd14610a96578063ffa1ad7414610ab657600080fd5b8063e0cc476e14610a0c578063e5efe61614610a2c578063e7f0287314610a4157600080fd5b8063a9059cbb116100d1578063a9059cbb14610985578063d2d9cab6146109a5578063d59624b4146109c5578063dd62ed3e146109ec57600080fd5b80639fa5f50b1461092e578063a457c2d714610950578063a6efb9301461097057600080fd5b80637ccb6a64116101645780638da5cb5b1161013e5780638da5cb5b146108b457806395d89b41146108d25780639c8c8c1f146108e75780639f4c87fb1461090e57600080fd5b80637ccb6a641461084b5780638456cb591461087857806385ceca451461088d57600080fd5b8063729256eb116101a0578063729256eb146107d65780637581e377146107f65780637714d5601461080b5780637b4855211461082b57600080fd5b806366e2d55a1461076b57806370a082311461078b578063715018a6146107c157600080fd5b806335faa416116102a05780634b3745b51161023e5780635c975abb116102185780635c975abb146106f35780635dde8ff61461070b57806363d1fd031461072b578063657adde61461074b57600080fd5b80634b3745b5146106875780634e71d92d146106a75780635970abb7146106d157600080fd5b80633f4ba83a1161027a5780633f4ba83a146105f8578063412aabef1461060d57806342966c681461063a578063482975b31461065a57600080fd5b806335faa4161461059b57806339509351146105b05780633aad01b9146105d057600080fd5b80631b5c0d141161030d57806323b872dd116102e757806323b872dd14610521578063251cbde514610541578063313ce5671461056357806332f3ad4a1461057b57600080fd5b80631b5c0d14146104bf5780631e6fb8de146104df5780632114810b146104ff57600080fd5b8062b190d9146103be57806306fdde03146103ef578063095ea7b3146104115780631083f761146104415780631198fc6e1461047e57806318160ddd146104a057600080fd5b366103b95760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f742073656e64204574686572206469726563746c7920746f20746860448201526a1a5cc818dbdb9d1c9858dd60aa1b60648201526084015b60405180910390fd5b600080fd5b3480156103ca57600080fd5b5060cf546103d89060ff1681565b60405160ff90911681526020015b60405180910390f35b3480156103fb57600080fd5b50610404610acb565b6040516103e6919061424c565b34801561041d57600080fd5b5061043161042c36600461427b565b610b5d565b60405190151581526020016103e6565b34801561044d57600080fd5b5060cf546104669061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016103e6565b34801561048a57600080fd5b5061049e6104993660046142f0565b610b77565b005b3480156104ac57600080fd5b506099545b6040519081526020016103e6565b3480156104cb57600080fd5b5060d054610466906001600160a01b031681565b3480156104eb57600080fd5b5061049e6104fa366004614375565b610bc8565b34801561050b57600080fd5b50610514610cf5565b6040516103e691906143e0565b34801561052d57600080fd5b5061043161053c366004614456565b610e31565b34801561054d57600080fd5b50610556610e57565b6040516103e69190614492565b34801561056f57600080fd5b5060cf5460ff166103d8565b34801561058757600080fd5b5061049e6105963660046144f4565b611061565b3480156105a757600080fd5b506104b1611075565b3480156105bc57600080fd5b506104316105cb36600461427b565b611226565b3480156105dc57600080fd5b506104b17014da5b99db1954185e5b595b9d109bdb99607a1b81565b34801561060457600080fd5b5061049e611248565b34801561061957600080fd5b5061062d61062836600461450c565b61125a565b6040516103e69190614527565b34801561064657600080fd5b5061049e610655366004614548565b6112c0565b34801561066657600080fd5b5061066f6113c9565b6040516001600160401b0390911681526020016103e6565b34801561069357600080fd5b5061049e6106a23660046144f4565b6113fc565b3480156106b357600080fd5b506106bc611416565b604080519283526020830191909152016103e6565b3480156106dd57600080fd5b506106e661164b565b6040516103e69190614561565b3480156106ff57600080fd5b5060335460ff16610431565b34801561071757600080fd5b506104b1610726366004614548565b611657565b34801561073757600080fd5b506104b161074636600461450c565b611678565b34801561075757600080fd5b5061049e6107663660046145a2565b6116ae565b34801561077757600080fd5b506104b161078636600461450c565b61172c565b34801561079757600080fd5b506104b16107a636600461450c565b6001600160a01b031660009081526097602052604090205490565b3480156107cd57600080fd5b5061049e6118bb565b3480156107e257600080fd5b5060d154610466906001600160a01b031681565b34801561080257600080fd5b506104b16118cd565b34801561081757600080fd5b5061049e61082636600461450c565b611976565b34801561083757600080fd5b5061049e6108463660046145d7565b611987565b34801561085757600080fd5b5061086b610866366004614652565b61199b565b6040516103e691906146dc565b34801561088457600080fd5b5061049e611b62565b34801561089957600080fd5b5060d05461066f90600160a01b90046001600160401b031681565b3480156108c057600080fd5b506065546001600160a01b0316610466565b3480156108de57600080fd5b50610404611b72565b3480156108f357600080fd5b5060d15461066f90600160a01b90046001600160401b031681565b34801561091a57600080fd5b5061049e6109293660046145a2565b611b81565b34801561093a57600080fd5b50610943611bbd565b6040516103e691906146ef565b34801561095c57600080fd5b5061043161096b36600461427b565b611df3565b34801561097c57600080fd5b50610431611e79565b34801561099157600080fd5b506104316109a036600461427b565b611f34565b3480156109b157600080fd5b5061049e6109c036600461475b565b611f42565b3480156109d157600080fd5b5060cf5461066f90600160a81b90046001600160401b031681565b3480156109f857600080fd5b506104b1610a073660046147ad565b61200c565b348015610a1857600080fd5b5061049e610a273660046142f0565b612037565b348015610a3857600080fd5b506106bc6120c1565b348015610a4d57600080fd5b5061049e610a5c3660046149d0565b612299565b348015610a6d57600080fd5b5061040461288b565b348015610a8257600080fd5b5061049e610a9136600461450c565b612919565b348015610aa257600080fd5b5061049e610ab1366004614af7565b61298f565b348015610ac257600080fd5b506103d8600181565b6060609a8054610ada90614b15565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0690614b15565b8015610b535780601f10610b2857610100808354040283529160200191610b53565b820191906000526020600020905b815481529060010190602001808311610b3657829003601f168201915b5050505050905090565b600033610b6b8185856129d7565b60019150505b92915050565b610b7f612afb565b8060005b81811015610bc257610bba848483818110610ba057610ba0614b49565b9050602002016020810190610bb5919061450c565b612b55565b600101610b83565b50505050565b610bd0612afb565b828181151580610be05750600081115b610c525760405162461bcd60e51b815260206004820152603e60248201527f4d7573742070726f76696465206569746865722066756e64696e6720636f6d6d60448201527f69746d656e74732c206f7220646f63756d656e74732c206f7220626f7468000060648201526084016103b0565b8115610c9d5760005b82811015610c9b57610c93878783818110610c7857610c78614b49565b905060800201803603810190610c8e9190614b5f565b612bcd565b600101610c5b565b505b8015610ced5760005b81811015610ceb57610ce3858583818110610cc357610cc3614b49565b9050602002810190610cd59190614b7b565b610cde90614b9b565b612cab565b600101610ca6565b505b505050505050565b60606000610d0360ca612e93565b9050600081516001600160401b03811115610d2057610d206147e0565b604051908082528060200260200182016040528015610d5957816020015b610d466141b0565b815260200190600190039081610d3e5790505b50905060005b8251811015610e2a576040518060400160405280848381518110610d8557610d85614b49565b60200260200101516001600160a01b0316815260200160c96000868581518110610db157610db1614b49565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050815250828281518110610e1757610e17614b49565b6020908102919091010152600101610d5f565b5092915050565b600033610e3f858285612ea0565b610e4a858585612f14565b60019150505b9392505050565b60606000610e6560cd6130ca565b90506000816001600160401b03811115610e8157610e816147e0565b604051908082528060200260200182016040528015610eb457816020015b6060815260200190600190039081610e9f5790505b50905060005b82811015610e2a576000610ecf60cd836130d4565b9050600060cc60008381526020019081526020016000206040518060a0016040529081600082018054610f0190614b15565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2d90614b15565b8015610f7a5780601f10610f4f57610100808354040283529160200191610f7a565b820191906000526020600020905b815481529060010190602001808311610f5d57829003601f168201915b50505050508152602001600182015481526020016002820154815260200160038201548152602001600482018054610fb190614b15565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdd90614b15565b801561102a5780601f10610fff5761010080835404028352916020019161102a565b820191906000526020600020905b81548152906001019060200180831161100d57829003601f168201915b5050505050815250509050806000015184848151811061104c5761104c614b49565b60209081029190910101525050600101610eba565b611069612afb565b611072816130e0565b50565b600061107f612afb565b60d15460cf546110a9916001600160401b03600160a01b909104811691600160a81b900416614c27565b6001600160401b03164210156111015760405162461bcd60e51b815260206004820152601960248201527f53776565702064617465206e6f7420796574207061737365640000000000000060448201526064016103b0565b60cf546040516370a0823160e01b81523060048201526101009091046001600160a01b0316906370a0823190602401602060405180830381865afa15801561114d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111719190614c52565b9050600081116111bf5760405162461bcd60e51b815260206004820152601960248201527805468657265206973206e6f7468696e6720746f20737765657603c1b60448201526064016103b0565b60d15460cf546111e1916001600160a01b03610100909204821691168361318e565b60d1546040518281526001600160a01b03909116907fab2246061d7b0dd3631d037e3f6da75782ae489eeb9f6af878a4b25df9b07c779060200160405180910390a290565b600033610b6b818585611239838361200c565b6112439190614c6b565b6129d7565b611250612afb565b6112586131f1565b565b61127e60405180606001604052806000815260200160008152602001600081525090565b506001600160a01b0316600090815260c96020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915290565b6112c8613243565b60d05460405163386ec69760e11b81523360048201526001600160a01b03909116906370dd8d2e90602401602060405180830381865afa158015611310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113349190614c83565b6113505760405162461bcd60e51b81526004016103b090614ca5565b336000908152609760205260409020548111156113bf5760405162461bcd60e51b815260206004820152602760248201527f496e73756666696369656e7420626f6e6420746f6b656e732068656c642062796044820152661039b2b73232b960c91b60648201526084016103b0565b6110723382613289565b60d15460cf546000916113f7916001600160401b03600160a01b909204821691600160a81b90910416614c27565b905090565b611404612afb565b611072610c8e36839003830183614b5f565b600080611421613243565b60d05460405163386ec69760e11b81523360048201526001600160a01b03909116906370dd8d2e90602401602060405180830381865afa158015611469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148d9190614c83565b6114a95760405162461bcd60e51b81526004016103b090614ca5565b336000908152609760205260409020549150600082116115045760405162461bcd60e51b81526020600482015260166024820152754e6f20626f6e6420746f6b656e20746f20636c61696d60501b60448201526064016103b0565b61150c611e79565b6115915760405162461bcd60e51b815260206004820152604a60248201527f54686520636f6e747261637420646f6573206e6f74206861766520746865206660448201527f756c6c20616d6f756e74206f66206d6f6e657920746f2072657061792065766560648201526972796f6e65206261636b60b01b608482015260a4016103b0565b61159b3383613289565b60d0546115b9908390600160a01b90046001600160401b03166133c9565b60cf549091506115d89061010090046001600160a01b0316338361318e565b604080518381526020810183905233917f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf7910160405180910390a2609954600003611647576040517fb8cac300e37f03ad332e581dea21b2f0b84eaaadc184a295fef71e81f44a741390600090a15b9091565b60606113f760ca612e93565b60d054600090610b71908390600160a01b90046001600160401b03166133c9565b6001600160a01b038116600090815260976020526040812054610b71905b60d054600160a01b90046001600160401b03166133c9565b6116b6612afb565b80806117045760405162461bcd60e51b815260206004820152601f60248201527f4e6f2046756e64696e6720636f6d6d69746d656e74732070726f76696465640060448201526064016103b0565b60005b81811015610bc257611724848483818110610c7857610c78614b49565b600101611707565b6000611736612afb565b60cf546001600160a01b036101009091048116908316036117995760405162461bcd60e51b815260206004820181905260248201527f557365207377656570282920746f20737765657020617373657420746f6b656e60448201526064016103b0565b6040516370a0823160e01b815230600482015282906001600160a01b038216906370a0823190602401602060405180830381865afa1580156117df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118039190614c52565b9150600082116118515760405162461bcd60e51b815260206004820152601960248201527805468657265206973206e6f7468696e6720746f20737765657603c1b60448201526064016103b0565b60d15461186b906001600160a01b0383811691168461318e565b60d154604080516001600160a01b03868116825260208201869052909216917f7eef782e27863dcde0ba4b385fe67691a3ac617c6474c4283a0459c5c7dbb0d3910160405180910390a250919050565b6118c3612afb565b61125860006133df565b6000806118dc61169660995490565b60cf546040516370a0823160e01b81523060048201529192506000916101009091046001600160a01b0316906370a0823190602401602060405180830381865afa15801561192e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119529190614c52565b90508082111561196d576119668183614ce9565b9250505090565b60009250505090565b61197e612afb565b61107281612b55565b61198f612afb565b611072610cde82614b9b565b6119d36040518060a0016040528060608152602001600080191681526020016000801916815260200160008152602001606081525090565b600083836040516020016119e8929190614d00565b60408051601f198184030181528282528051602091820120600081815260cc9092529082902060a08401909252815490935082908290611a2790614b15565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5390614b15565b8015611aa05780601f10611a7557610100808354040283529160200191611aa0565b820191906000526020600020905b815481529060010190602001808311611a8357829003601f168201915b50505050508152602001600182015481526020016002820154815260200160038201548152602001600482018054611ad790614b15565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0390614b15565b8015611b505780601f10611b2557610100808354040283529160200191611b50565b820191906000526020600020905b815481529060010190602001808311611b3357829003601f168201915b50505050508152505091505092915050565b611b6a612afb565b611258613431565b6060609b8054610ada90614b15565b611b89612afb565b8060005b81811015610bc257611bb5848483818110611baa57611baa614b49565b9050608002016130e0565b600101611b8d565b60606000611bcb60cd6130ca565b90506000816001600160401b03811115611be757611be76147e0565b604051908082528060200260200182016040528015611c5057816020015b611c3d6040518060a0016040528060608152602001600080191681526020016000801916815260200160008152602001606081525090565b815260200190600190039081611c055790505b50905060005b82811015610e2a576000611c6b60cd836130d4565b905060cc60008281526020019081526020016000206040518060a0016040529081600082018054611c9b90614b15565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc790614b15565b8015611d145780601f10611ce957610100808354040283529160200191611d14565b820191906000526020600020905b815481529060010190602001808311611cf757829003601f168201915b50505050508152602001600182015481526020016002820154815260200160038201548152602001600482018054611d4b90614b15565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7790614b15565b8015611dc45780601f10611d9957610100808354040283529160200191611dc4565b820191906000526020600020905b815481529060010190602001808311611da757829003601f168201915b505050505081525050838381518110611ddf57611ddf614b49565b602090810291909101015250600101611c56565b60003381611e01828661200c565b905083811015611e615760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103b0565b611e6e82868684036129d7565b506001949350505050565b600080611e8560995490565b90508015611f235760d054611eab908290600160a01b90046001600160401b03166133c9565b60cf546040516370a0823160e01b81523060048201526101009091046001600160a01b0316906370a0823190602401602060405180830381865afa158015611ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1b9190614c52565b101591505090565b611f2d60ca6130ca565b1592915050565b600033610b6b818585612f14565b611f4a612afb565b611f5460ca6130ca565b15611fc75760405162461bcd60e51b815260206004820152603e60248201527f43616e6e6f74206368616e6765206d617475726974792064617465206966206660448201527f756e64696e6720636f6d6d69746d656e7473206172652070726573656e74000060648201526084016103b0565b6120078383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061346e92505050565b505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b61203f612afb565b80806120995760405162461bcd60e51b815260206004820152602360248201527f4e6f20646f63756d656e742073706563696669636174696f6e732070726f766960448201526219195960ea1b60648201526084016103b0565b60005b81811015610bc2576120b9848483818110610cc357610cc3614b49565b60010161209c565b6000806120cc613243565b505033600090815260c96020526040902080546001909101548161212a5760405162461bcd60e51b8152602060048201526015602482015274139bc8199d5b991a5b99c818dbdb5b5a5d1b595b9d605a1b60448201526064016103b0565b33600090815260c960205260409020600201544281101561219c5760405162461bcd60e51b815260206004820152602660248201527f46756e64696e6720636f6d6d69746d656e74206461746520616c7265616479206044820152651c185cdcd95960d21b60648201526084016103b0565b6121a96201518082614ce9565b42116122035760405162461bcd60e51b815260206004820152602360248201527f54696d656f757420706572696f6420686173206e6f742066696e6973686564206044820152621e595d60ea1b60648201526084016103b0565b61220e60ca336135cb565b5033600081815260c960205260408120818155600181018290556002015560d15460cf5461224f926101009091046001600160a01b039081169216856135e0565b6122593384613618565b604080518481526020810184905233917ffd662195fdc19d980c7dcf817d3b95753a240c44e6f28bdb68db628e7917e1d1910160405180910390a2509091565b600054610100900460ff16158080156122b95750600054600160ff909116105b806122d35750303b1580156122d3575060005460ff166001145b6123365760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103b0565b6000805460ff191660011790558015612359576000805461ff0019166101001790555b6001600160a01b0386166123b95760405162461bcd60e51b815260206004820152602160248201527f626f6e644973737565722063616e6e6f742062652061646472657373207a65726044820152606f60f81b60648201526084016103b0565b866001600160401b0316846001600160401b0316116124265760405162461bcd60e51b8152602060048201526024808201527f737765657044617465206d757374206265206166746572206d617475726974796044820152634461746560e01b60648201526084016103b0565b6001600160a01b03831661247c5760405162461bcd60e51b815260206004820152601c60248201527f4f776e65722063616e6e6f742062652061646472657373207a65726f0000000060448201526064016103b0565b8b516000036124cd5760405162461bcd60e51b815260206004820152601b60248201527f6e616d652063616e6e6f7420626520656d70747920737472696e67000000000060448201526064016103b0565b8a5160000361251e5760405162461bcd60e51b815260206004820152601d60248201527f73796d626f6c2063616e6e6f7420626520656d70747920737472696e6700000060448201526064016103b0565b6001600160a01b0389166125855760405162461bcd60e51b815260206004820152602860248201527f6173736574546f6b656e416464726573732063616e6e6f742062652061646472604482015267657373207a65726f60c01b60648201526084016103b0565b6001600160a01b0389163b6125e85760405162461bcd60e51b815260206004820152602360248201527f6173736574546f6b656e41646472657373206973206e6f74206120636f6e74726044820152621858dd60ea1b60648201526084016103b0565b6125f28c8c6136e6565b6125fb836133df565b60d180546001600160a01b0319166001600160a01b038881169190911790915560cf8054610100600160a81b0319166101008c8416810291909117918290556040805163313ce56760e01b81529051919092049092169163313ce567916004808201926020929091908290030181865afa15801561267d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a19190614d10565b60cf805460ff191660ff9290921691909117905560d0805467ffffffffffffffff60a01b1916600160a01b6001600160401b038b160217905560408051808201909152600a815269496e697469616c697a6560b01b602082015261270690889061346e565b60cf5461272390600160a81b90046001600160401b031685614d33565b60d1805467ffffffffffffffff60a01b1916600160a01b6001600160401b03938416810291909117918290556203f480910490911610156127c55760405162461bcd60e51b815260206004820152603660248201527f53776565702064617465206d757374206265206174206c6561737420332064616044820152757973206166746572206d61747572697479206461746560501b60648201526084016103b0565b6127f1856040518060400160405280600a815260200169496e697469616c697a6560b01b815250613717565b895160005b81811015612828576128208c828151811061281357612813614b49565b6020026020010151612bcd565b6001016127f6565b5060d26128358482614da1565b5050801561287d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60d2805461289890614b15565b80601f01602080910402602001604051908101604052809291908181526020018280546128c490614b15565b80156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081565b612921612afb565b6001600160a01b0381166129865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b0565b611072816133df565b612997612afb565b6120078383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061371792505050565b6001600160a01b038316612a395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103b0565b6001600160a01b038216612a9a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103b0565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6065546001600160a01b031633146112585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b0565b612b6060ca826135cb565b612b7c5760405162461bcd60e51b81526004016103b090614e60565b6001600160a01b038116600081815260c9602052604080822082815560018101839055600201829055517fc986c3650ab16434650c0af000519e97662aa6dccfda3f26e097be9ced48fec89190a250565b8051612bdb9060ca906138de565b612c415760405162461bcd60e51b815260206004820152603160248201527f46756e64696e6720636f6d6d69746d656e7420616c726561647920657869737460448201527020666f722074686973206164647265737360781b60648201526084016103b0565b612c4a816138f3565b8051602080830151805181830151604092830151835192835293820152908101919091526001600160a01b03909116907f48f686ba2e9a54fc00f6affc5b7808a564f4cd6c94930da1a9e1fb8da61ea2ed906060015b60405180910390a250565b80518051612cf35760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420646f63756d656e74206e616d6560581b60448201526064016103b0565b600082604001515111612d365760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69642055524960a81b60448201526064016103b0565b600081604051602001612d499190614ebd565b60408051601f1981840301815291905280516020909101209050612d6e60cd82613a4e565b612dcb5760405162461bcd60e51b815260206004820152602860248201527f446f63756d656e7420616c72656164792065786973747320666f72207468697360448201526720646f634e616d6560c01b60648201526084016103b0565b6040805160a08101825283815260208082018490528581015182840152426060830152858301516080830152600084815260cc9091529190912081518190612e139082614da1565b5060208201516001820155604082015160028201556060820151600382015560808201516004820190612e469082614da1565b50905050807f4ccc126ecd4449882f78adae0dc7e1c577449c6adfa2d0a79e690b16c4bb2fdf8385604001518660200151604051612e8693929190614ecf565b60405180910390a2505050565b60606000610e5083613a5a565b6000612eac848461200c565b90506000198114610bc25781811015612f075760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103b0565b610bc284848484036129d7565b6001600160a01b038316612f785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103b0565b6001600160a01b038216612fda5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103b0565b612fe5838383613ab6565b6001600160a01b0383166000908152609760205260409020548181101561305d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103b0565b6001600160a01b0380851660008181526097602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906130bd9086815260200190565b60405180910390a3610bc2565b6000610b71825490565b6000610e508383613d30565b6130f86130f0602083018361450c565b60ca90613d5a565b6131145760405162461bcd60e51b81526004016103b090614e60565b61312b61312636839003830183614b5f565b6138f3565b613138602082018261450c565b6040805160208481013582528483013590820152606080850135928201929092526001600160a01b0392909216917f9f155b36ea539d36a6a420aebe2c7ec7797145b5452b00fa3da45acda83482649101612ca0565b6040516001600160a01b03831660248201526044810182905261200790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613d7c565b6131f9613e4e565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60335460ff16156112585760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016103b0565b6001600160a01b0382166132e95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103b0565b6132f582600083613ab6565b6001600160a01b038216600090815260976020526040902054818110156133695760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103b0565b6001600160a01b03831660008181526097602090815260408083208686039055609980548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60006133d58383613e97565b610e509084614c6b565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b613439613243565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586132263390565b42826001600160401b0316116134d15760405162461bcd60e51b815260206004820152602260248201527f6d6174757269747944617465206d75737420626520696e207468652066757475604482015261726560f01b60648201526084016103b0565b60cf546001600160401b03600160a81b9091048116908316036135685760405162461bcd60e51b815260206004820152604360248201527f4e6577206d617475726974792064617465206d7573742062652064696666657260448201527f656e742066726f6d20746865206578697374696e67206d61747572697479206460648201526261746560e81b608482015260a4016103b0565b60cf805467ffffffffffffffff60a81b1916600160a81b6001600160401b038516021790556040517f8c1f2258cf15d05175bb39023acd191b9f438f5b08f9ef1d67ed107332a03333906135bf9084908490614f05565b60405180910390a15050565b6000610e50836001600160a01b038416613eb6565b6040516001600160a01b0380851660248301528316604482015260648101829052610bc29085906323b872dd60e01b906084016131ba565b6001600160a01b03821661366e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103b0565b61367a60008383613ab6565b806099600082825461368c9190614c6b565b90915550506001600160a01b0382166000818152609760209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b5050565b600054610100900460ff1661370d5760405162461bcd60e51b81526004016103b090614f27565b6136e28282613fa9565b6001600160a01b0382166137835760405162461bcd60e51b815260206004820152602d60248201527f416464726573732073637265656e20616464726573732063616e6e6f7420626560448201526c2061646472657373207a65726f60981b60648201526084016103b0565b6001600160a01b0382163b6137da5760405162461bcd60e51b815260206004820181905260248201527f416464726573732073637265656e206973206e6f74206120636f6e747261637460448201526064016103b0565b60d0546001600160a01b03908116908316036138845760405162461bcd60e51b815260206004820152605760248201527f4e657720616464726573732073637265656e20636f6e7472616374206d75737460448201527f20626520646966666572656e742066726f6d20746865206578697374696e672060648201527f616464726573732073637265656e20636f6e7472616374000000000000000000608482015260a4016103b0565b60d080546001600160a01b0319166001600160a01b0384169081179091556040517f8d71a1b9b2a596f7a3176794f3f146a0bf13e760c18698e3ffe425614030077e906138d290849061424c565b60405180910390a25050565b6000610e50836001600160a01b038416613fe9565b6020810151516139535760405162461bcd60e51b815260206004820152602560248201527f426f6e6420546f6b656e20416d6f756e74206d757374206265206d6f72652074604482015264068616e20360dc1b60648201526084016103b0565b6000816020015160200151116139ab5760405162461bcd60e51b815260206004820152601b60248201527f50726f63656564206d757374206265206d6f7265207468616e2030000000000060448201526064016103b0565b60cf54602082015160400151600160a81b9091046001600160401b031611613a155760405162461bcd60e51b815260206004820181905260248201527f44617465206d757374206265206265666f7265206d617475726974794461746560448201526064016103b0565b60208082015191516001600160a01b0316600090815260c982526040908190208351815591830151600183015590910151600290910155565b6000610e508383613fe9565b606081600001805480602002602001604051908101604052809291908181526020018280548015613aaa57602002820191906000526020600020905b815481526020019060010190808311613a96575b50505050509050919050565b613abe613243565b60d054604051636f1095c760e01b81526001600160a01b03858116600483015290911690636f1095c790602401602060405180830381865afa158015613b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2c9190614c83565b15613b875760405162461bcd60e51b815260206004820152602560248201527f546f6b656e2073656e646572206d757374206e6f74206265206f6e2064656e79604482015264081b1a5cdd60da1b60648201526084016103b0565b60d054604051636f1095c760e01b81526001600160a01b03848116600483015290911690636f1095c790602401602060405180830381865afa158015613bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf59190614c83565b15613c525760405162461bcd60e51b815260206004820152602760248201527f546f6b656e207265636569766572206d757374206e6f74206265206f6e2064656044820152661b9e481b1a5cdd60ca1b60648201526084016103b0565b60d0546001600160a01b0316636f1095c7336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccc9190614c83565b156120075760405162461bcd60e51b815260206004820152602e60248201527f5472616e73616374696f6e20696e69746961746f72206d757374206e6f74206260448201526d19481bdb8819195b9e481b1a5cdd60921b60648201526084016103b0565b6000826000018281548110613d4757613d47614b49565b9060005260206000200154905092915050565b6001600160a01b03811660009081526001830160205260408120541515610e50565b6000613dd1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166140389092919063ffffffff16565b8051909150156120075780806020019051810190613def9190614c83565b6120075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103b0565b60335460ff166112585760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016103b0565b6000670de0b6b3a7640000613eac8385614f72565b610e509190614f91565b60008181526001830160205260408120548015613f9f576000613eda600183614ce9565b8554909150600090613eee90600190614ce9565b9050818114613f53576000866000018281548110613f0e57613f0e614b49565b9060005260206000200154905080876000018481548110613f3157613f31614b49565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6457613f64614fb3565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b71565b6000915050610b71565b600054610100900460ff16613fd05760405162461bcd60e51b81526004016103b090614f27565b609a613fdc8382614da1565b50609b6120078282614da1565b600081815260018301602052604081205461403057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b71565b506000610b71565b6060614047848460008561404f565b949350505050565b6060824710156140b05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103b0565b843b6140fe5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103b0565b600080866001600160a01b0316858760405161411a9190614ebd565b60006040518083038185875af1925050503d8060008114614157576040519150601f19603f3d011682016040523d82523d6000602084013e61415c565b606091505b509150915061416c828286614177565b979650505050505050565b60608315614186575081610e50565b8251156141965782518084602001fd5b8160405162461bcd60e51b81526004016103b0919061424c565b604051806040016040528060006001600160a01b031681526020016141ef60405180606001604052806000815260200160008152602001600081525090565b905290565b60005b8381101561420f5781810151838201526020016141f7565b83811115610bc25750506000910152565b600081518084526142388160208601602086016141f4565b601f01601f19169290920160200192915050565b602081526000610e506020830184614220565b80356001600160a01b038116811461427657600080fd5b919050565b6000806040838503121561428e57600080fd5b6142978361425f565b946020939093013593505050565b60008083601f8401126142b757600080fd5b5081356001600160401b038111156142ce57600080fd5b6020830191508360208260051b85010111156142e957600080fd5b9250929050565b6000806020838503121561430357600080fd5b82356001600160401b0381111561431957600080fd5b614325858286016142a5565b90969095509350505050565b60008083601f84011261434357600080fd5b5081356001600160401b0381111561435a57600080fd5b6020830191508360208260071b85010111156142e957600080fd5b6000806000806040858703121561438b57600080fd5b84356001600160401b03808211156143a257600080fd5b6143ae88838901614331565b909650945060208701359150808211156143c757600080fd5b506143d4878288016142a5565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b8181101561444a57835180516001600160a01b03168452850151614436868501828051825260208082015190830152604090810151910152565b5092840192608092909201916001016143fc565b50909695505050505050565b60008060006060848603121561446b57600080fd5b6144748461425f565b92506144826020850161425f565b9150604084013590509250925092565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156144e757603f198886030184526144d5858351614220565b945092850192908501906001016144b9565b5092979650505050505050565b60006080828403121561450657600080fd5b50919050565b60006020828403121561451e57600080fd5b610e508261425f565b81518152602080830151908201526040808301519082015260608101610b71565b60006020828403121561455a57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561444a5783516001600160a01b03168352928401929184019160010161457d565b600080602083850312156145b557600080fd5b82356001600160401b038111156145cb57600080fd5b61432585828601614331565b6000602082840312156145e957600080fd5b81356001600160401b038111156145ff57600080fd5b820160608185031215610e5057600080fd5b60008083601f84011261462357600080fd5b5081356001600160401b0381111561463a57600080fd5b6020830191508360208285010111156142e957600080fd5b6000806020838503121561466557600080fd5b82356001600160401b0381111561467b57600080fd5b61432585828601614611565b6000815160a0845261469c60a0850182614220565b9050602083015160208501526040830151604085015260608301516060850152608083015184820360808601526146d38282614220565b95945050505050565b602081526000610e506020830184614687565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156144e757603f19888603018452614732858351614687565b94509285019290850190600101614716565b80356001600160401b038116811461427657600080fd5b60008060006040848603121561477057600080fd5b61477984614744565b925060208401356001600160401b0381111561479457600080fd5b6147a086828701614611565b9497909650939450505050565b600080604083850312156147c057600080fd5b6147c98361425f565b91506147d76020840161425f565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614818576148186147e0565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614846576148466147e0565b604052919050565b600082601f83011261485f57600080fd5b81356001600160401b03811115614878576148786147e0565b61488b601f8201601f191660200161481e565b8181528460208386010111156148a057600080fd5b816020850160208301376000918101602001919091529392505050565b600081830360808112156148d057600080fd5b604051604081018181106001600160401b03821117156148f2576148f26147e0565b6040529150816149018461425f565b81526060601f198301121561491557600080fd5b61491d6147f6565b9150602084013582526040840135602083015260608401356040830152816020820152505092915050565b600082601f83011261495957600080fd5b813560206001600160401b03821115614974576149746147e0565b614982818360051b0161481e565b82815260079290921b840181019181810190868411156149a157600080fd5b8286015b848110156149c5576149b788826148bd565b8352918301916080016149a5565b509695505050505050565b60008060008060008060008060008060006101608c8e0312156149f257600080fd5b6001600160401b03808d351115614a0857600080fd5b614a158e8e358f0161484e565b9b508060208e01351115614a2857600080fd5b614a388e60208f01358f0161484e565b9a508060408e01351115614a4b57600080fd5b614a5b8e60408f01358f01614948565b9950614a6960608e0161425f565b9850614a7760808e01614744565b9750614a8560a08e01614744565b9650614a9360c08e0161425f565b9550614aa160e08e0161425f565b9450614ab06101008e01614744565b9350614abf6101208e0161425f565b9250806101408e01351115614ad357600080fd5b50614ae58d6101408e01358e0161484e565b90509295989b509295989b9093969950565b600080600060408486031215614b0c57600080fd5b6147798461425f565b600181811c90821680614b2957607f821691505b60208210810361450657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060808284031215614b7157600080fd5b610e5083836148bd565b60008235605e19833603018112614b9157600080fd5b9190910192915050565b600060608236031215614bad57600080fd5b614bb56147f6565b82356001600160401b0380821115614bcc57600080fd5b614bd83683870161484e565b8352602085013560208401526040850135915080821115614bf857600080fd5b50614c053682860161484e565b60408301525092915050565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614c4957614c49614c11565b01949350505050565b600060208284031215614c6457600080fd5b5051919050565b60008219821115614c7e57614c7e614c11565b500190565b600060208284031215614c9557600080fd5b81518015158114610e5057600080fd5b60208082526024908201527f5468652063616c6c6572206d75737420626520696e2074686520616c6c6f77206040820152631b1a5cdd60e21b606082015260800190565b600082821015614cfb57614cfb614c11565b500390565b8183823760009101908152919050565b600060208284031215614d2257600080fd5b815160ff81168114610e5057600080fd5b60006001600160401b0383811690831681811015614d5357614d53614c11565b039392505050565b601f82111561200757600081815260208120601f850160051c81016020861015614d825750805b601f850160051c820191505b81811015610ced57828155600101614d8e565b81516001600160401b03811115614dba57614dba6147e0565b614dce81614dc88454614b15565b84614d5b565b602080601f831160018114614e035760008415614deb5750858301515b600019600386901b1c1916600185901b178555610ced565b600085815260208120601f198616915b82811015614e3257888601518255948401946001909101908401614e13565b5085821015614e505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252603a908201527f46756e64696e6720636f6d6d69746d656e7420646f6573206e6f7420616c726560408201527f61647920657869737420666f7220746869732061646472657373000000000000606082015260800190565b60008251614b918184602087016141f4565b606081526000614ee26060830186614220565b8281036020840152614ef48186614220565b915050826040830152949350505050565b6001600160401b03831681526040602082015260006140476040830184614220565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000816000190483118215151615614f8c57614f8c614c11565b500290565b600082614fae57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fdfea264697066735822122022cb8223aa1566657b8c4bd05fccd5e9bc8f800fcd65840b24c457ea11d8307964736f6c634300080f0033