@settlemint/solidity-diamond-bond
Version:
Smart contract set to build an enterprise bond usecase in SettleMint
1,391 lines • 100 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "BondFacet",
"sourceName": "contracts/facets/BondFacet.sol",
"abi": [
{
"inputs": [],
"name": "BondAlreadyInitialized",
"type": "error"
},
{
"inputs": [],
"name": "BondAlreadyIssued",
"type": "error"
},
{
"inputs": [],
"name": "BondHasNotBeenIssued",
"type": "error"
},
{
"inputs": [],
"name": "CampaignAlreadyPaused",
"type": "error"
},
{
"inputs": [],
"name": "CampaignIsClosed",
"type": "error"
},
{
"inputs": [],
"name": "CampaignIsPaused",
"type": "error"
},
{
"inputs": [],
"name": "CampaignNotPaused",
"type": "error"
},
{
"inputs": [],
"name": "CannotReserveAfterCampaignEnd",
"type": "error"
},
{
"inputs": [],
"name": "CannotReserveBeforeSignupDate",
"type": "error"
},
{
"inputs": [],
"name": "CapitalAmortizationFreePeriodDurationIsNotAMultpleOfThree",
"type": "error"
},
{
"inputs": [],
"name": "CapitalAmortizationFreePeriodDurationIsNotAMultpleOfTwelve",
"type": "error"
},
{
"inputs": [],
"name": "DivideByZero",
"type": "error"
},
{
"inputs": [],
"name": "DurationIsNotAMultpleOfThree",
"type": "error"
},
{
"inputs": [],
"name": "DurationIsNotAMultpleOfTwelve",
"type": "error"
},
{
"inputs": [],
"name": "ExceedingMaxAmountPerInvestor",
"type": "error"
},
{
"inputs": [],
"name": "GracePeriodDurationIsNotAMultpleOfThree",
"type": "error"
},
{
"inputs": [],
"name": "GracePeriodDurationIsNotAMultpleOfTwelve",
"type": "error"
},
{
"inputs": [],
"name": "NoMoreBondsToBuy",
"type": "error"
},
{
"inputs": [],
"name": "OldAccountDoesNotHaveEnoughBonds",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "x",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "y",
"type": "uint256"
}
],
"name": "PRBMath_MulDiv18_Overflow",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "x",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "y",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "denominator",
"type": "uint256"
}
],
"name": "PRBMath_MulDiv_Overflow",
"type": "error"
},
{
"inputs": [
{
"internalType": "UD60x18",
"name": "x",
"type": "uint256"
}
],
"name": "PRBMath_UD60x18_Exp2_InputTooBig",
"type": "error"
},
{
"inputs": [
{
"internalType": "UD60x18",
"name": "x",
"type": "uint256"
}
],
"name": "PRBMath_UD60x18_Log_InputTooSmall",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "balloonRateNum",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "balloonRateDen",
"type": "uint256"
}
],
"name": "BalloonRateSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "coupure",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "interestNum",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "interestDen",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "withholdingTaxNum",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "withholdingTaxDen",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "issuer",
"type": "address"
}
],
"name": "BondInitializedPart1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "periodicInterestRate",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "netReturn",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "periodicity",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "duration",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "methodOfRepayment",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "maxSupply",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "formOfFinancing",
"type": "uint256"
}
],
"name": "BondInitializedPart2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "issuedAmount",
"type": "uint256"
}
],
"name": "BondIssued",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "coupure",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "interestNum",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "interestDen",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "withholdingTaxNum",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "withholdingTaxDen",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "issuer",
"type": "address"
}
],
"name": "BondParametersEditedPart1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "periodicInterestRate",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "netReturn",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "periodicity",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "duration",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "methodOfRepayment",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "maxSupply",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "formOfFinancing",
"type": "uint256"
}
],
"name": "BondParametersEditedPart2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "bondTransferId",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "oldAccount",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newAccount",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "BondTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "bondPurchaseId",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "holder",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "BondsWithdrawn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
}
],
"name": "CampaignPaused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "startDate",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "endDate",
"type": "uint256"
}
],
"name": "CampaignStartAndEndDateSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
}
],
"name": "CampaignUnpaused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "capitalAmortizationFreePeriodDuration",
"type": "uint256"
}
],
"name": "CapitalAmortizationFreePeriodSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "capitalClaimId",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "capitalAmount",
"type": "uint256"
}
],
"name": "CapitalClaimAmountSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "couponDates",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "remainingCapital",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "capitalRepayments",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "grossCouponRates",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "netCouponRates",
"type": "uint256[]"
}
],
"name": "CouponsComputed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "gracePeriodDuration",
"type": "uint256"
}
],
"name": "GracePeriodSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "investorsCount",
"type": "uint256"
}
],
"name": "InvestorsCountChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "issueDate",
"type": "uint256"
}
],
"name": "IssueDateSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "minAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "maxAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "maxAmountPerInvestor",
"type": "uint256"
}
],
"name": "MinAndMaxAmountSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "periodicInterest",
"type": "uint256"
}
],
"name": "PeriodicInterestRateSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "reservedAmount",
"type": "uint256"
}
],
"name": "ReservedAmountChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "revocationsCount",
"type": "uint256"
}
],
"name": "RevocationsCountChanged",
"type": "event"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "__bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignMinAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignMaxAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignStartDate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__expectedIssueDate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__coupure",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__interestNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__interestDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__withholdingTaxNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__withholdingTaxDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__balloonRateNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__balloonRateDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__duration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__capitalAmortizationDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__gracePeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__maxAmountPerInvestor",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__periodicity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__formOfFinancing",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__methodOfRepayment",
"type": "uint256"
},
{
"internalType": "address",
"name": "__issuer",
"type": "address"
}
],
"internalType": "struct BondInitParams.BondInit",
"name": "bi",
"type": "tuple"
}
],
"name": "editBondParameters",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getSelectors",
"outputs": [
{
"internalType": "bytes4[]",
"name": "",
"type": "bytes4[]"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "getSelectorsOwnership",
"outputs": [
{
"internalType": "bytes4[]",
"name": "",
"type": "bytes4[]"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "__bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignMinAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignMaxAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignStartDate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__expectedIssueDate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__coupure",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__interestNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__interestDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__withholdingTaxNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__withholdingTaxDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__balloonRateNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__balloonRateDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__duration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__capitalAmortizationDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__gracePeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__maxAmountPerInvestor",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__periodicity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__formOfFinancing",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__methodOfRepayment",
"type": "uint256"
},
{
"internalType": "address",
"name": "__issuer",
"type": "address"
}
],
"internalType": "struct BondInitParams.BondInit",
"name": "bi",
"type": "tuple"
}
],
"name": "initializeBond",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "initializeOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_issueDate",
"type": "uint256"
}
],
"name": "issueBond",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155BatchReceived",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
}
],
"name": "pauseCampaign",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_bondPurchaseId",
"type": "string"
},
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_buyer",
"type": "address"
}
],
"name": "rescindReservation",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_bondPurchaseId",
"type": "string"
},
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_bondAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_buyer",
"type": "address"
}
],
"name": "reserve",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_balloonRateNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_balloonRateDen",
"type": "uint256"
}
],
"name": "setBalloonRate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_duration",
"type": "uint256"
}
],
"name": "setCapitalAmortizationFreeDuration",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_currencyAddress",
"type": "address"
}
],
"name": "setCurrencyAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_duration",
"type": "uint256"
}
],
"name": "setGracePeriodDuration",
"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": [
{
"internalType": "string",
"name": "_bondTransferId",
"type": "string"
},
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_old",
"type": "address"
},
{
"internalType": "address",
"name": "_new",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "transferBond",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
}
],
"name": "unpauseCampaign",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_bondPurchaseId",
"type": "string"
},
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "address",
"name": "holder",
"type": "address"
}
],
"name": "withdrawBondsPurchased",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60808060405234601557614274908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146117b65750806325830db3146115805780632dcb118e1461153457806343a19a65146114895780634b503f0b146112e557806360332e891461116857806368aea41b146110e6578063796b89ec146110a85780638c5f36bb1461100c5780638da5cb5b14610fd85780638dea1f4714610cae578063906b131a14610a455780639226537e14610834578063b4105004146107c0578063bc197c8114610727578063de99347a14610675578063e3adc7ee146103e7578063ee5b280a14610399578063f23a6e611461033e578063f2fde38b146102785763f844a31c14610105575f80fd5b346102755761011336611926565b61013460018060a01b035f51602061421f5f395f51905f5254163314611b61565b61013d82611cac565b9160016018840155601b830160ff815460201c166102665761015f8383612675565b61016882612aeb565b5050815464ff000000001916640100000000179091555060258301805463ff00000019166301000000179055601183015460179093018381558454909385916001600160a01b0316803b156102625760405163731133e960e01b8152306004820152602481018590526044810192909252608060648301525f60848301528290829060a490829084905af180156102575761023e575b50509154604080519384526020840192909252908201527fb5c3204064d2ac62821e92f17e7e2c1e9971c89f07fa01b6dab37145db86dc5590606090a180f35b8161024891611809565b61025357835f6101fe565b8380fd5b6040513d84823e3d90fd5b8280fd5b636f65570160e11b8552600485fd5b80fd5b50346102755760203660031901126102755761029261189f565b5f51602061421f5f395f51905f5254336001600160a01b03821614916102b783611b61565b6001600160a01b03169182156102ed576102d090611b61565b6001600160a01b031916175f51602061421f5f395f51905f525580f35b60405162461bcd60e51b8152602060048201526024808201527f4e6577206f776e65722063616e6e6f7420626520746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b50346102755760a03660031901126102755761035861189f565b506103616118cb565b506084356001600160401b03811161039557610381903690600401611aa2565b505060405163f23a6e6160e01b8152602090f35b5080fd5b5034610275577f8a7a5c9c34210b39b0dd6c746e4824f7af2a84c059d4dcbc168a2036d26df99060406103cb36611926565b80600f6103d784611cac565b015582519182526020820152a180f35b5034610275576103f6366118e1565b919061040181611cac565b60ff601b82015460201c16156106665761041e6024820184611acf565b549061042e600582015483611bbb565b600154604051636eb1769f60e11b81526001600160a01b0388811660048301523060248301529091169190602081604481865afa90811561065b578991610621575b50906104c892610484826020941015611bce565b60268501546040516323b872dd60e01b81526001600160a01b038b8116600483015290911660248201526044810192909252909283919082908b9082906064820190565b03925af18015610616576104e39188916105e7575b50611c43565b855486906001600160a01b0316803b156103955760405163731133e960e01b81526001600160a01b03881660048201526024810186905260448101859052608060648201525f6084820152908290829060a490829084905af18015610257576105c6575b507f99c110e7b335cff55cab2cfe92e319ad78396f17234debbb5860886aa0244cca6105a58686868a60228860018060a01b0383165f520160205260405f20600160ff19825416179055604051948594608086526080860190611c88565b60208501939093526001600160a01b0316604084015260608301520390a180f35b816105d5919695949396611809565b6105e357909192855f610547565b8580fd5b610609915060203d60201161060f575b6106018183611809565b810190611c2b565b5f6104dd565b503d6105f7565b6040513d89823e3d90fd5b9190506020823d602011610653575b8161063d60209383611809565b8101031261064f5790516104c8610470565b5f80fd5b3d9150610630565b6040513d8b823e3d90fd5b630189aad160e71b8552600485fd5b50346102755760203660031901126102755760043561069381611cac565b601b81019081549060ff8260181c16610718576002810154421190811591610708575b506106f95763ff000000191663010000001790556040519081527fab1902ee37c92d1a78dda53814d64b815e7e3ee287d60843a3dbd6954e3206b490602090a180f35b63ebd7e12960e01b8452600484fd5b905060034291015411155f6106b6565b632e75fea560e11b8552600485fd5b50346102755760a03660031901126102755761074161189f565b5061074a6118cb565b506044356001600160401b0381116103955761076a903690600401611a72565b50506064356001600160401b0381116103955761078b903690600401611a72565b50506084356001600160401b038111610395576107ac903690600401611aa2565b505060405163bc197c8160e01b8152602090f35b50346102755780600319360112610275576108306040516107e2608082611809565b600381526060366020830137638da5cb5b60e01b6107ff82611b16565b5263f2fde38b60e01b61081182611b23565b52638c5f36bb60e01b61082382611b33565b526040519182918261193c565b0390f35b5034610275576108433661197f565b61084d8151611cac565b60ff601b82015460201c16610a3657907f182cb671939e46d1345c30b51134e41ef7782a2113747a93b4dc3c31b91ea81e610a309261088b83611e5d565b825160028201546003830154604080519384526020840192909252908201527f05b741eb5649daedcc851ef6f057b1bf89b49d12357d31c478c425b6eb1ce9c590606090a182518154600183015460128401546040805194855260208501939093529183015260608201527f1ada3075f8dc673c9de9ba7c0b8e81065d996d1faa99feb6d0a648c8b7a1516d90608090a1825160a08085015160c08087015160e0808901516101008a01516101208b01516102608c0151604080519a8b5260208b01989098529689019490945260608801919091526080870152938501526001600160a01b03909116908301527fc64d8be5e3585a2141489e772ad1096418b37137a76298a309a5f1095f95f1ca91a18251610a176008830154926007810154906102008701516101808801516102408901519160ff6025601086015495015460081c16946109d986611b43565b6040519889988994919260e0969399989794919961010087019a8752602087015260408601526060850152608084015260a083015260c08201520152565b0390a1610a2a8151608083015190612675565b51612aeb565b50505080f35b636f65570160e11b8352600483fd5b5034610275576080366003190112610275576004356001600160401b03811161039557610a76903690600401611859565b9060243560443592610a866118b5565b9260ff601b610a9485611cac565b015460181c16610c9f57610aa783611cac565b906010820154946011830196875496878082115f14610c9657610ac991611afc565b905b81811115610c8e5750955b60028401544210610c7f5760038401544211610c71578615610c6257602384019260018060a01b0383165f5283602052610b148860405f2054611b09565b601286015410610c53576001600160a01b0383165f9081526020859052604090205415610bb1575b5060409460247f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f979560209a958a95610b7887610b9d97611b09565b885560018060a01b03165f528b52875f20610b94868254611b09565b90550190611acf565b5554825191825285820152a1604051908152f35b6014850180549160018301809311610c3f5750879560209a958a95610b7887610b9d977ff865af89149aa92dd957b447226842542090f013d1c80f4f66f6eb3ea79f8e9160407f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f9f819f9a8060249b5582519182526020820152a1975050509550959a509597505094610b3c565b634e487b7160e01b81526011600452602490fd5b6315a1589160e11b8152600490fd5b6303f7614f60e51b8352600483fd5b62c32ed760e41b8352600483fd5b633cad284b60e21b8352600483fd5b905095610ad6565b50508290610acb565b63a6a992df60e01b8152600490fd5b503461064f5760a036600319011261064f576004356001600160401b03811161064f57610cdf903690600401611859565b6024356044356001600160a01b03811680820361064f57610cfe6118b5565b9060843592610d2460018060a01b035f51602061421f5f395f51905f5254163314611b61565b610d2d85611cac565b60ff601b82015460201c1615610fc9575f54604051627eeac760e11b8152600481018590526024810188905290602090829060449082906001600160a01b03165afa8015610f405786915f91610f94575b5010610f85576005610d9291015485611bbb565b600154604051636eb1769f60e11b81526001600160a01b03868116600483015230602483015290911690602081604481855afa908115610f40575f91610f4b575b5090610e2793610de884602095941015611bce565b6040516323b872dd60e01b81526001600160a01b03808916600483015290911660248201526044810192909252909283919082905f9082906064820190565b03925af18015610f4057610e41915f916105e75750611c43565b5f546001600160a01b031691823b1561064f575f809160c460405180948193637921219560e11b835287600484015260018060a01b0316978860248401528a604484015289606484015260a060848401528160a48401525af18015610f4057610efe575b5091610ee393917f38db1382a58023a1d5d8aaab1581199c9b7d9ed33223c18beeaab57924aff20f959360405195869560a0875260a0870190611c88565b9360208601526040850152606084015260808301520390a180f35b7f38db1382a58023a1d5d8aaab1581199c9b7d9ed33223c18beeaab57924aff20f959391965091610f335f610ee39694611809565b5f96919395509193610ea5565b6040513d5f823e3d90fd5b929190506020833d602011610f7d575b81610f6860209383611809565b8101031261064f579151909190610e27610dd3565b3d9150610f5b565b6348efb0c560e11b5f5260045ffd5b9150506020813d602011610fc1575b81610fb060209383611809565b8101031261064f578590515f610d7e565b3d9150610fa3565b630189aad160e71b5f5260045ffd5b3461064f575f36600319011261064f575f51602061421f5f395f51905f52546040516001600160a01b039091168152602090f35b3461064f57602036600319011261064f5761102561189f565b5f51602061421f5f395f51905f52546001600160a01b031661106f575f51602061421f5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055005b60405162461bcd60e51b815260206004820152601160248201527013dddb995c88185b1c9958591e481cd95d607a1b6044820152606490fd5b3461064f57602036600319011261064f576001600160a01b036110c961189f565b166bffffffffffffffffffffffff60a01b60015416176001555f80f35b3461064f57606036600319011261064f577f9cc9725ee02d8f0a4d8b30054405939f4d872cc6a5c2d677e02f5bd87e5dea2a60243560043561116360443561112d83611cac565b600a670de0b6b3a764000061114284886136df565b04910155604051938493846040919493926060820195825260208201520152565b0390a1005b3461064f576111763661197f565b306bffffffffffffffffffffffff60a01b5f5416175f556111978151611cac565b90601b820160ff815460101c166112d6576112d4927fb42ebd0ad22561f77328ee457d5ba2a08a7c2847ff88c663cca9dcc8c53dc086916111d784611e5d565b805462ff0000191662010000179055600154602582018054640100000000600160c01b031916602092831b640100000000600160c01b03161790819055845160a08087015160c08089015160e0808b01516101008c01516101208d01516102608e0151604080519a8b529b8a01979097529988019390935260608701526080860191909152928401959095526001600160a01b0316938201939093529092917ff5d1b3af18a6e549e23801b7a43bec54699badce37e0f7e96e0a4ebb65143d7491a1610a178451916008810154936007820154916102008801516101808901519060ff60106102408c01519401549460081c16946109d986611b43565b005b6371001f5d60e11b5f5260045ffd5b3461064f575f36600319011261064f576040516102006113058183611809565b600f8252601f19013660208301376360332e8960e01b61132482611b16565b52631e5ae27b60e21b61133682611b23565b5263491329bf60e11b61134882611b33565b52805160031015611475576368aea41b60e01b6080820152805160041015611475576316e588c760e11b60a08201528051600510156114755763772d940560e11b60c082015280516006101561147557634835898d60e11b60e082015280516007101561147557636f4c9a3d60e11b610100820152805160081015611475576343a19a6560e01b610120820152805160091015611475576325830db360e01b6101408201528051600a101561147557638dea1f4760e01b6101608201528051600b1015611475576371d6e3f760e11b6101808201528051600c101561147557633e1128c760e21b6101a08201528051600d10156114755763f23a6e6160e01b6101c08201528051600e10156114755763bc197c8160e01b6101e0820152604051908190610830908261193c565b634e487b7160e01b5f52603260045260245ffd5b3461064f57602036600319011261064f576004356114a681611cac565b601b81019182549160ff8360181c1615611525576002810154421190811591611515575b50611506577f11aa0bd3fb4d9c5622c703f91610a74140a4f88a7ebc7b4faaeaf52e3cb7aa949260209263ff00000019169055604051908152a1005b63ebd7e12960e01b5f5260045ffd5b90506003429101541115846114ca565b636428884d60e11b5f5260045ffd5b3461064f577f091a72ed52432e53c748925ef46b36a19f93cb874539b387d4f3b1f92aa33e11604061156536611926565b80600e61157184611cac565b015582519182526020820152a1005b3461064f5761158e366118e1565b919061159981611cac565b6011810190815460248201956115af8787611acf565b54821061177157602383019160018060a01b0382165f528260205260405f20546115d98989611acf565b541161171e576115f4906115ed8989611acf565b5490611afc565b84556116008787611acf565b5460018060a01b0382165f528260205261161f60405f20918254611afc565b905560018060a01b03165f5260205260405f2054156116d0575b60150193845490600182018092116116bc57855f6116a06040979388947f499925bc28b60b5b11b1841f8f51318fa4484237122fb618e76c3195b37d9eb8967f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f9b55611acf565b55548151908582526020820152a15482519182526020820152a1005b634e487b7160e01b5f52601160045260245ffd5b601481019081545f1981019081116116bc576040817ff865af89149aa92dd957b447226842542090f013d1c80f4f66f6eb3ea79f8e9192601595558151908782526020820152a19050611639565b60405162461bcd60e51b815260206004820152602560248201527f556e646572666c6f773a20726573657276656420616d6f756e74206279206164604482015264647265737360d81b6064820152608490fd5b60405162461bcd60e51b815260206004820152601a60248201527f556e646572666c6f773a20726573657276656420616d6f756e740000000000006044820152606490fd5b3461064f57602036600319011261064f576004359063ffffffff60e01b821680920361064f57602091630271189760e51b81149081156117f8575b5015158152f35b6301ffc9a760e01b149050836117f1565b90601f801991011681019081106001600160401b0382111761182a57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161182a57601f01601f191660200190565b81601f8201121561064f578035906118708261183e565b9261187e6040519485611809565b8284526020838301011161064f57815f926020809301838601378301015290565b600435906001600160a01b038216820361064f57565b606435906001600160a01b038216820361064f57565b602435906001600160a01b038216820361064f57565b606060031982011261064f57600435906001600160401b03821161064f5761190b91600401611859565b90602435906044356001600160a01b038116810361064f5790565b604090600319011261064f576004359060243590565b60206040818301928281528451809452019201905f5b81811061195f5750505090565b82516001600160e01b031916845260209384019390920191600101611952565b61028090600319011261064f5760405161028081018181106001600160401b0382111761182a57604090815260043582526024356020830152604435908201526064356060820152608435608082015260a43560a082015260c43560c082015260e43560e082015261010435610100820152610124356101208201526101443561014082015261016435610160820152610184356101808201526101a4356101a08201526101c4356101c08201526101e4356101e0820152610204356102008201526102243561022082015261024435610240820152610264356001600160a01b038116810361064f5761026082015290565b9181601f8401121561064f578235916001600160401b03831161064f576020808501948460051b01011161064f57565b9181601f8401121561064f578235916001600160401b03831161064f576020838186019501011161064f57565b6040518151909260209284929081908501845e82019081520301902090565b5f198101919082116116bc57565b919082039182116116bc57565b919082018092116116bc57565b8051156114755760200190565b8051600110156114755760400190565b8051600210156114755760600190565b60021115611b4d57565b634e487b7160e01b5f52602160045260245ffd5b15611b6857565b60405162461bcd60e51b815260206004820152602560248201527f4f6e6c7920746865206f776e65722063616e2063616c6c20746869732066756e60448201526431ba34b7b760d91b6064820152608490fd5b818102929181159184041417156116bc57565b15611bd557565b60405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608490fd5b9081602091031261064f5751801515810361064f5790565b15611c4a57565b60405162461bcd60e51b8152602060048201526016602482015275115490cc8c0e881d1c985b9cd9995c8819985a5b195960521b6044820152606490fd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b5f818072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b811015611e37575b50806d04ee2d6d415b85acef8100000000600a921015611e1c575b662386f26fc10000811015611e08575b6305f5e100811015611df7575b612710811015611de8575b6064811015611dda575b1015611dd2575b6001810191600a6021611d4d611d378661183e565b95611d456040519788611809565b80875261183e565b602086019490601f19013686378501015b5f1901916f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353048015611d8c57600a9091611d5e565b5050611dcc602c604051809360208201956b1cdd1bdc9859d94b989bdb9960a21b87525180918484015e81015f838201520301601f198101835282611809565b51902090565b600101611d22565b606460029104920191611d1b565b61271060049104920191611d11565b6305f5e10060089104920191611d06565b662386f26fc1000060109104920191611cf9565b6d04ee2d6d415b85acef810000000060209104920191611ce9565b6040925072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b90049050600a611cce565b905f611e698351611cac565b6102608401516026820180546001600160a01b0319166001600160a01b039290921691909117905560a084018051600583015560e08501805190939290156125b757610200860192868451155f1461258957610180600c9101510661257a5786905b6101c08201908151612463575b6101a08301918251612390575b60c0840197611ef789518251906136df565b9060068701918255610100860191825191611f196101208901938451906136df565b60098a0155670de0b6b3a7640000611f4660408a0151809c60018d019d8e5560208c01518d5551906136df565b0460108a015560606101e08901519860128b01998a55610180810151600d8c015501519b8c9b624f1a008d60028d019e8f55019d8e81116116bc578e10612325578a90600382019e8f558051155f146122775750602501805460ff191690555050805460088901555b6102408d01805160010361223c57508551156122055760258801805462ff00001916620300001790555b8551600e8901558351600f8901556101408d01948d86519081151590816121f6575b50612183575b505061217e98957f9cc9725ee02d8f0a4d8b30054405939f4d872cc6a5c2d677e02f5bd87e5dea2a89967f05b741eb5649daedcc851ef6f057b1bf89b49d12357d31c478c425b6eb1ce9c59e9f9a6040612159986120ea7f1ada3075f8dc673c9de9ba7c0b8e81065d996d1faa99feb6d0a648c8b7a1516d9d996120e46120de7f091a72ed52432e53c748925ef46b36a19f93cb874539b387d4f3b1f92aa33e119b869b601b7f8a7a5c9c34210b39b0dd6c746e4824f7af2a84c059d4dcbc168a2036d26df990990161ff001981541690555493519051906136df565b82614143565b90611afc565b60078c01558d51905182519182526020820152a18a5190516101608c0151855192835260208301919091526040820152606090a18851905182519182526020820152a1855192549354905490604051948594859094939260609260808301968352602083015260408201520152565b0390a15191549254604051938493846040919493926060820195825260208201520152565b0390a1565b8e6121956101608201928351906136df565b600a8c015551908751905191303b15610253576040516368aea41b60e01b8152600481019190915260248101919091526044810191909152818160648183305af180156102575715612001576121ec828092611809565b6102755780612001565b6101609150015115158f611ffb565b8351156122245760258801805462ff0000191662040000179055611fd9565b60258801805462ff0000191662010000179055611fd9565b8051612256575060258801805462ff000019169055611fd9565b5160011901611fd95760258801805462ff0000191662020000179055611fd9565b80516001036122cf5750602501805460ff19166001179055815190516122c5926122c0926122b0926122a891611b09565b9051906136df565b6703782dace9d900005b9061349f565b611aee565b6008890155611faf565b519091906002146122e3575b505050611faf565b612318926122a861230a9260256122c09501600260ff198254161790558251905190611b09565b6701280f39a34855556122ba565b60088901555