UNPKG

@settlemint/solidity-diamond-bond

Version:

Smart contract set to build an enterprise bond usecase in SettleMint

1,391 lines 114 kB
{ "_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": "0x60808060405234601557615061908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a714611fd25750806325830db314611d225780632dcb118e14611ce457806343a19a6514611c125780634b503f0b146118f757806360332e891461170457806368aea41b14611686578063796b89ec1461162a5780638c5f36bb146114f65780638da5cb5b146114a35780638dea1f4714611071578063906b131a14610d435780639226537e14610ae8578063b410500414610a29578063bc197c8114610975578063de99347a14610876578063e3adc7ee14610511578063ee5b280a146104c3578063f23a6e611461044f578063f2fde38b146103125763f844a31c1461010857600080fd5b3461030f57610116366121ca565b61015873ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5416331461249e565b61016182612669565b9160016018840155601b830160ff815460201c166102e757610183838361326e565b61018c82613751565b5050506401000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff8254161790556025830163010000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff825416179055836017601185015494019380855573ffffffffffffffffffffffffffffffffffffffff825416803b156102e3576040517f731133e900000000000000000000000000000000000000000000000000000000815230600482015260248101859052604481019290925260806064830152600060848301528290829060a490829084905af180156102d8576102bf575b50509154604080519384526020840192909252908201527fb5c3204064d2ac62821e92f17e7e2c1e9971c89f07fa01b6dab37145db86dc559080606081015b0390a180f35b816102c991612072565b6102d457833861027a565b8380fd5b6040513d84823e3d90fd5b8280fd5b6004857fdecaae02000000000000000000000000000000000000000000000000000000008152fd5b80fd5b503461030f57602060031936011261030f5761032c61210e565b7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c549073ffffffffffffffffffffffffffffffffffffffff8083163314916103738361249e565b169182156103cc576103a57fffffffffffffffffffffffff00000000000000000000000000000000000000009261249e565b16177f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5580f35b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4e6577206f776e65722063616e6e6f7420626520746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b503461030f5760a060031936011261030f5761046961210e565b50610472612154565b5060843567ffffffffffffffff81116104bf57610493903690600401612385565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b5080fd5b503461030f577f8a7a5c9c34210b39b0dd6c746e4824f7af2a84c059d4dcbc168a2036d26df99060406104f5366121ca565b80600f61050184612669565b015582519182526020820152a180f35b503461030f5761052036612177565b919061052b81612669565b9260ff601b85015460201c161561084e5761054960248501846123d6565b5490610559600586015483612529565b6001546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301523060248301529091169190602081604481865afa908115610843578991610808575b5090610650926105d582602094101561253c565b73ffffffffffffffffffffffffffffffffffffffff60268a0154168a6040518096819582947f23b872dd0000000000000000000000000000000000000000000000000000000084528a6004850173ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b03925af180156107fd5761066b9188916107ce575b506125df565b8573ffffffffffffffffffffffffffffffffffffffff815416803b156104bf578160405180927f731133e90000000000000000000000000000000000000000000000000000000082528183816106fa8a8c8b600485019173ffffffffffffffffffffffffffffffffffffffff60a094921683526020830152604082015260806060820152600060808201520190565b03925af180156102d8576107ad575b507f99c110e7b335cff55cab2cfe92e319ad78396f17234debbb5860886aa0244cca61079686868673ffffffffffffffffffffffffffffffffffffffff8760228d83831660005201602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055604051958695608087526080870190612644565b93602086015216604084015260608301520390a180f35b816107bc919695949396612072565b6107ca579091928538610709565b8580fd5b6107f0915060203d6020116107f6575b6107e88183612072565b8101906125c7565b38610665565b503d6107de565b6040513d89823e3d90fd5b9190506020823d60201161083b575b8161082460209383612072565b810103126108365790516106506105c1565b600080fd5b3d9150610817565b6040513d8b823e3d90fd5b6004857fc4d56880000000000000000000000000000000000000000000000000000000008152fd5b503461030f57602060031936011261030f5760043561089481612669565b601b81019081549060ff8260181c1661094d57600281015442119081159161093d575b50610915577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1663010000001790556040519081527fab1902ee37c92d1a78dda53814d64b815e7e3ee287d60843a3dbd6954e3206b490602090a180f35b6004847febd7e129000000000000000000000000000000000000000000000000000000008152fd5b90506003429101541115386108b7565b6004857f5cebfd4a000000000000000000000000000000000000000000000000000000008152fd5b503461030f5760a060031936011261030f5761098f61210e565b50610998612154565b5060443567ffffffffffffffff81116104bf576109b9903690600401612354565b505060643567ffffffffffffffff81116104bf576109db903690600401612354565b505060843567ffffffffffffffff81116104bf576109fd903690600401612385565b505060206040517fbc197c81000000000000000000000000000000000000000000000000000000008152f35b503461030f578060031936011261030f57610ae4604051610a4b608082612072565b6003815260603660208301377f8da5cb5b00000000000000000000000000000000000000000000000000000000610a818261243b565b527ff2fde38b00000000000000000000000000000000000000000000000000000000610aac8261245e565b527f8c5f36bb00000000000000000000000000000000000000000000000000000000610ad78261246e565b52604051918291826121e0565b0390f35b503461030f57610af73661223c565b610b018151612669565b60ff601b82015460201c16610d1b57907f182cb671939e46d1345c30b51134e41ef7782a2113747a93b4dc3c31b91ea81e610d1592610b3f8361284a565b825160028201546003830154604080519384526020840192909252908201527f05b741eb5649daedcc851ef6f057b1bf89b49d12357d31c478c425b6eb1ce9c590606090a182518154600183015460128401546040805194855260208501939093529183015260608201527f1ada3075f8dc673c9de9ba7c0b8e81065d996d1faa99feb6d0a648c8b7a1516d90608090a17fc64d8be5e3585a2141489e772ad1096418b37137a76298a309a5f1095f95f1ca835160a085015190610c7d60c087015160e08801516101008901516101208a01519173ffffffffffffffffffffffffffffffffffffffff6102608c015116936040519788978895919360c0959198979373ffffffffffffffffffffffffffffffffffffffff9560e089019a8952602089015260408801526060870152608086015260a085015216910152565b0390a18251610cfc6008830154926007810154906102008701516101808801516102408901519160ff6025601086015495015460081c1694610cbe8661247e565b6040519889988994919260e0969399989794919961010087019a8752602087015260408601526060850152608084015260a083015260c08201520152565b0390a1610d0f815160808301519061326e565b51613751565b50505080f35b6004837fdecaae02000000000000000000000000000000000000000000000000000000008152fd5b503461030f57608060031936011261030f5760043567ffffffffffffffff81116104bf57610d759036906004016120c7565b9060243560443592610d85612131565b9260ff601b610d9385612669565b015460181c1661104957610da683612669565b9060108201549460118301968754968780821160001461104057610dc991612421565b905b818111156110385750955b600284015442106110105760038401544211610fe8578615610fc057602384019273ffffffffffffffffffffffffffffffffffffffff831660005283602052610e248860406000205461242e565b601286015410610f985773ffffffffffffffffffffffffffffffffffffffff83166000528360205260406000205415610edd575b5060409460247f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f979560209a9573ffffffffffffffffffffffffffffffffffffffff8b96610ea988610ec99861242e565b8955166000528b5287600020610ec086825461242e565b905501906123d6565b5554825191825285820152a1604051908152f35b6014850180549160018301809311610f845750879560209a9573ffffffffffffffffffffffffffffffffffffffff8b96610ea988610ec9987ff865af89149aa92dd957b447226842542090f013d1c80f4f66f6eb3ea79f8e917f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f9f60409f9a906040918060249c5582519182526020820152a198505050965050959a509597505094610e58565b80634e487b7160e01b602492526011600452fd5b807f2b42b1220000000000000000000000000000000000000000000000000000000060049252fd5b6004837f7eec29e0000000000000000000000000000000000000000000000000000000008152fd5b6004837f0c32ed70000000000000000000000000000000000000000000000000000000008152fd5b6004837ff2b4a12c000000000000000000000000000000000000000000000000000000008152fd5b905095610dd6565b50508290610dcb565b807fa6a992df0000000000000000000000000000000000000000000000000000000060049252fd5b503461030f5760a060031936011261030f5760043567ffffffffffffffff81116104bf576110a39036906004016120c7565b60243560443573ffffffffffffffffffffffffffffffffffffffff811680820361149f576110cf612131565b906084359261111673ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5416331461249e565b61111f85612669565b60ff601b82015460201c1615611477576044602073ffffffffffffffffffffffffffffffffffffffff8a5416604051928380927efdd58e0000000000000000000000000000000000000000000000000000000082528860048301528b60248301525afa80156108435786918a9161143e575b50106114165760056111a591015485612529565b6001546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015230602483015290911690602081604481855afa90811561140b578a916113cd575b5090611281936112218460209594101561253c565b8a6040518096819582947f23b872dd0000000000000000000000000000000000000000000000000000000084528b6004850173ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b03925af180156107fd5761129b9188916107ce57506125df565b8573ffffffffffffffffffffffffffffffffffffffff81541692833b156104bf5773ffffffffffffffffffffffffffffffffffffffff60c4839260405194859384927ff242432a00000000000000000000000000000000000000000000000000000000845288600485015216978860248401528a604484015289606484015260a060848401528160a48401525af180156107fd5761138d575b509161137293917f38db1382a58023a1d5d8aaab1581199c9b7d9ed33223c18beeaab57924aff20f959360405195869560a0875260a0870190612644565b9360208601526040850152606084015260808301520390a180f35b91866113c17f38db1382a58023a1d5d8aaab1581199c9b7d9ed33223c18beeaab57924aff20f979593986113729795612072565b96919395509193611334565b929190506020833d602011611403575b816113ea60209383612072565b810103126113ff57915190919061128161120c565b8980fd5b3d91506113dd565b6040513d8c823e3d90fd5b6004887f91df618a000000000000000000000000000000000000000000000000000000008152fd5b9150506020813d60201161146f575b8161145a60209383612072565b8101031261146b5785905138611191565b8880fd5b3d915061144d565b6004887fc4d56880000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b503461030f578060031936011261030f57602073ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5416604051908152f35b503461030f57602060031936011261030f5761151061210e565b73ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c54166115cc5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000007f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5416177f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5580f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f776e657220616c7265616479207365740000000000000000000000000000006044820152fd5b503461030f57602060031936011261030f5773ffffffffffffffffffffffffffffffffffffffff61165961210e565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015580f35b503461030f57606060031936011261030f577f9cc9725ee02d8f0a4d8b30054405939f4d872cc6a5c2d677e02f5bd87e5dea2a6024356004356102b96044356116ce83612669565b600a670de0b6b3a76400006116e3848861445a565b04910155604051938493846040919493926060820195825260208201520152565b503461030f576117133661223c565b307fffffffffffffffffffffffff00000000000000000000000000000000000000008354161782556117458151612669565b601b810160ff815460101c166118cf5782917fb42ebd0ad22561f77328ee457d5ba2a08a7c2847ff88c663cca9dcc8c53dc08691611785610d159561284a565b6201000062ff0000198254161790556001549060258101917fffffffffffffffff0000000000000000000000000000000000000000ffffffff77ffffffffffffffffffffffffffffffffffffffff0000000084549260201b169116178092557ff5d1b3af18a6e549e23801b7a43bec54699badce37e0f7e96e0a4ebb65143d74845160a08601519061189160c088015160e08901516101008a01516101208b01519173ffffffffffffffffffffffffffffffffffffffff6102608d015116936040519788978895919360c0959198979373ffffffffffffffffffffffffffffffffffffffff9560e089019a8952602089015260408801526060870152608086015260a085015216910152565b0390a1610cfc8451916008810154936007820154916102008801516101808901519060ff60106102408c01519401549460081c1694610cbe8661247e565b6004847fe2003eba000000000000000000000000000000000000000000000000000000008152fd5b503461030f578060031936011261030f5760405190601f1961020061191c8185612072565b600f8452013660208401377f60332e89000000000000000000000000000000000000000000000000000000006119518361243b565b527f796b89ec0000000000000000000000000000000000000000000000000000000061197c8361245e565b527f9226537e000000000000000000000000000000000000000000000000000000006119a78361246e565b52815160031015611bfe577f68aea41b000000000000000000000000000000000000000000000000000000006080830152815160041015611bfe577f2dcb118e0000000000000000000000000000000000000000000000000000000060a0830152815160051015611bfe577fee5b280a0000000000000000000000000000000000000000000000000000000060c0830152815160061015611bfe577f906b131a0000000000000000000000000000000000000000000000000000000060e0830152815160071015611bfe577fde99347a00000000000000000000000000000000000000000000000000000000610100830152815160081015611bfe577f43a19a6500000000000000000000000000000000000000000000000000000000610120830152815160091015611bfe577f25830db3000000000000000000000000000000000000000000000000000000006101408301528151600a1015611bfe577f8dea1f47000000000000000000000000000000000000000000000000000000006101608301528151600b1015611bfe577fe3adc7ee000000000000000000000000000000000000000000000000000000006101808301528151600c1015611bfe577ff844a31c000000000000000000000000000000000000000000000000000000006101a08301528151600d1015611bfe577ff23a6e61000000000000000000000000000000000000000000000000000000006101c08301528151600e1015611bfe577fbc197c81000000000000000000000000000000000000000000000000000000006101e083015260405180610ae484826121e0565b80634e487b7160e01b602492526032600452fd5b503461030f57602060031936011261030f57600435611c3081612669565b601b81019081549060ff8260181c1615611cbc576002810154421190811591611cac575b50610915577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1690556040519081527f11aa0bd3fb4d9c5622c703f91610a74140a4f88a7ebc7b4faaeaf52e3cb7aa9490602090a180f35b9050600342910154111538611c54565b6004857fc851109a000000000000000000000000000000000000000000000000000000008152fd5b503461030f577f091a72ed52432e53c748925ef46b36a19f93cb874539b387d4f3b1f92aa33e116040611d16366121ca565b80600e61050184612669565b503461030f57611d3136612177565b9091611d3c83612669565b9160118301928354916024820192611d5484866123d6565b548110611f7457602383019173ffffffffffffffffffffffffffffffffffffffff81168952826020526040892054611d8c86886123d6565b5411611ef057611dbc73ffffffffffffffffffffffffffffffffffffffff92611db587896123d6565b5490612421565b8755611dc885876123d6565b548282168a5283602052611de160408b20918254612421565b9055168752602052604086205415611e8c575b60150191825460018101809111611e78578387611e5b604097957f499925bc28b60b5b11b1841f8f51318fa4484237122fb618e76c3195b37d9eb89589957f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f9b99556123d6565b55548151908582526020820152a15482519182526020820152a180f35b602487634e487b7160e01b81526011600452fd5b601481018054906000198201918211611edc57604082601594937ff865af89149aa92dd957b447226842542090f013d1c80f4f66f6eb3ea79f8e9193558151908982526020820152a19050611df4565b602488634e487b7160e01b81526011600452fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f556e646572666c6f773a20726573657276656420616d6f756e7420627920616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f556e646572666c6f773a20726573657276656420616d6f756e740000000000006044820152fd5b9050346104bf5760206003193601126104bf576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036102e357602092507f4e2312e0000000000000000000000000000000000000000000000000000000008114908115612048575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438612041565b90601f601f19910116810190811067ffffffffffffffff82111761209557604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff811161209557601f01601f191660200190565b81601f82011215610836578035906120de826120ab565b926120ec6040519485612072565b8284526020838301011161083657816000926020809301838601378301015290565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361083657565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361083657565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361083657565b6060600319820112610836576004359067ffffffffffffffff8211610836576121a2916004016120c7565b906024359060443573ffffffffffffffffffffffffffffffffffffffff811681036108365790565b6003196040910112610836576004359060243590565b602060408183019282815284518094520192019060005b8181106122045750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016121f7565b600319610280910112610836576040516000610280820167ffffffffffffffff811183821017612340576040526004358252602435602083015260443560408301526064356060830152608435608083015260a43560a083015260c43560c083015260e43560e083015261010435610100830152610124356101208301526101443561014083015261016435610160830152610184356101808301526101a4356101a08301526101c4356101c08301526101e4356101e0830152610204356102008301526102243561022083015261024435610240830152610264359073fffff