@settlemint/solidity-diamond-bond
Version:
Smart contract set to build an enterprise bond usecase in SettleMint
1 lines • 214 kB
JSON
{"abi":[{"type":"function","name":"editBondParameters","inputs":[{"name":"bi","type":"tuple","internalType":"struct BondInitParams.BondInit","components":[{"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":"uint256"},{"name":"__issuer","type":"address","internalType":"address"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getSelectors","inputs":[],"outputs":[{"name":"","type":"bytes4[]","internalType":"bytes4[]"}],"stateMutability":"pure"},{"type":"function","name":"getSelectorsOwnership","inputs":[],"outputs":[{"name":"","type":"bytes4[]","internalType":"bytes4[]"}],"stateMutability":"pure"},{"type":"function","name":"initializeBond","inputs":[{"name":"bi","type":"tuple","internalType":"struct BondInitParams.BondInit","components":[{"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":"uint256"},{"name":"__issuer","type":"address","internalType":"address"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initializeOwner","inputs":[{"name":"_newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"issueBond","inputs":[{"name":"_bondId","type":"uint256","internalType":"uint256"},{"name":"_issueDate","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"onERC1155BatchReceived","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"onERC1155Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pauseCampaign","inputs":[{"name":"_bondId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rescindReservation","inputs":[{"name":"_bondPurchaseId","type":"string","internalType":"string"},{"name":"_bondId","type":"uint256","internalType":"uint256"},{"name":"_buyer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reserve","inputs":[{"name":"_bondPurchaseId","type":"string","internalType":"string"},{"name":"_bondId","type":"uint256","internalType":"uint256"},{"name":"_bondAmount","type":"uint256","internalType":"uint256"},{"name":"_buyer","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"setBalloonRate","inputs":[{"name":"_bondId","type":"uint256","internalType":"uint256"},{"name":"_balloonRateNum","type":"uint256","internalType":"uint256"},{"name":"_balloonRateDen","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setCapitalAmortizationFreeDuration","inputs":[{"name":"_bondId","type":"uint256","internalType":"uint256"},{"name":"_duration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setCurrencyAddress","inputs":[{"name":"_currencyAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setGracePeriodDuration","inputs":[{"name":"_bondId","type":"uint256","internalType":"uint256"},{"name":"_duration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transferBond","inputs":[{"name":"_bondTransferId","type":"string","internalType":"string"},{"name":"_bondId","type":"uint256","internalType":"uint256"},{"name":"_old","type":"address","internalType":"address"},{"name":"_new","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"_newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unpauseCampaign","inputs":[{"name":"_bondId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawBondsPurchased","inputs":[{"name":"_bondPurchaseId","type":"string","internalType":"string"},{"name":"_bondId","type":"uint256","internalType":"uint256"},{"name":"holder","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"BalloonRateSet","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"balloonRateNum","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"balloonRateDen","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BondInitializedPart1","inputs":[{"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":"uint256"},{"name":"issuer","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BondInitializedPart2","inputs":[{"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","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BondIssued","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"issuedAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BondParametersEditedPart1","inputs":[{"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":"uint256"},{"name":"issuer","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BondParametersEditedPart2","inputs":[{"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","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BondTransferred","inputs":[{"name":"bondTransferId","type":"string","indexed":false,"internalType":"string"},{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"oldAccount","type":"address","indexed":false,"internalType":"address"},{"name":"newAccount","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BondsWithdrawn","inputs":[{"name":"bondPurchaseId","type":"string","indexed":false,"internalType":"string"},{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"holder","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CampaignPaused","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CampaignStartAndEndDateSet","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"startDate","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"endDate","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CampaignUnpaused","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CapitalAmortizationFreePeriodSet","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"capitalAmortizationFreePeriodDuration","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CapitalClaimAmountSet","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"capitalClaimId","type":"string","indexed":false,"internalType":"string"},{"name":"capitalAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CouponsComputed","inputs":[{"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[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"GracePeriodSet","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"gracePeriodDuration","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"InvestorsCountChanged","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"investorsCount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"IssueDateSet","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"issueDate","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"MinAndMaxAmountSet","inputs":[{"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","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PeriodicInterestRateSet","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"periodicInterest","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ReservedAmountChanged","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"reservedAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RevocationsCountChanged","inputs":[{"name":"bondId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"revocationsCount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"BondAlreadyInitialized","inputs":[]},{"type":"error","name":"BondAlreadyIssued","inputs":[]},{"type":"error","name":"BondHasNotBeenIssued","inputs":[]},{"type":"error","name":"CampaignAlreadyPaused","inputs":[]},{"type":"error","name":"CampaignIsClosed","inputs":[]},{"type":"error","name":"CampaignIsPaused","inputs":[]},{"type":"error","name":"CampaignNotPaused","inputs":[]},{"type":"error","name":"CannotReserveAfterCampaignEnd","inputs":[]},{"type":"error","name":"CannotReserveBeforeSignupDate","inputs":[]},{"type":"error","name":"CapitalAmortizationFreePeriodDurationIsNotAMultpleOfThree","inputs":[]},{"type":"error","name":"CapitalAmortizationFreePeriodDurationIsNotAMultpleOfTwelve","inputs":[]},{"type":"error","name":"DivideByZero","inputs":[]},{"type":"error","name":"DurationIsNotAMultpleOfThree","inputs":[]},{"type":"error","name":"DurationIsNotAMultpleOfTwelve","inputs":[]},{"type":"error","name":"ExceedingMaxAmountPerInvestor","inputs":[]},{"type":"error","name":"GracePeriodDurationIsNotAMultpleOfThree","inputs":[]},{"type":"error","name":"GracePeriodDurationIsNotAMultpleOfTwelve","inputs":[]},{"type":"error","name":"NoMoreBondsToBuy","inputs":[]},{"type":"error","name":"OldAccountDoesNotHaveEnoughBonds","inputs":[]},{"type":"error","name":"PRBMath_MulDiv18_Overflow","inputs":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"PRBMath_MulDiv_Overflow","inputs":[{"name":"x","type":"uint256","internalType":"uint256"},{"name":"y","type":"uint256","internalType":"uint256"},{"name":"denominator","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"PRBMath_UD60x18_Exp2_InputTooBig","inputs":[{"name":"x","type":"uint256","internalType":"UD60x18"}]},{"type":"error","name":"PRBMath_UD60x18_Log_InputTooSmall","inputs":[{"name":"x","type":"uint256","internalType":"UD60x18"}]}],"bytecode":{"object":"0x60808060405234601557614faa908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a71461201e5750806325830db314611d6e5780632dcb118e14611d2257806343a19a6514611c2a5780634b503f0b146118f657806360332e891461170257806368aea41b14611680578063796b89ec146116245780638c5f36bb146114f05780638da5cb5b1461149e5780638dea1f4714611076578063906b131a14610d365780639226537e14610adb578063b410500414610a1c578063bc197c8114610968578063de99347a14610869578063e3adc7ee14610508578063ee5b280a146104ba578063f23a6e6114610446578063f2fde38b146103095763f844a31c14610105575f80fd5b34610306576101133661222a565b61015573ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c541633146124a5565b61015e82612670565b9160016018840155601b830160ff815460201c166102de576101808383613261565b61018982613713565b5050506401000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff8254161790556025830163010000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff825416179055836017601185015494019380855573ffffffffffffffffffffffffffffffffffffffff825416803b156102da576040517f731133e9000000000000000000000000000000000000000000000000000000008152306004820152602481018590526044810192909252608060648301525f60848301528290829060a490829084905af180156102cf576102b6575b50509154604080519384526020840192909252908201527fb5c3204064d2ac62821e92f17e7e2c1e9971c89f07fa01b6dab37145db86dc5590606090a180f35b816102c0916120bc565b6102cb57835f610276565b8380fd5b6040513d84823e3d90fd5b8280fd5b6004857fdecaae02000000000000000000000000000000000000000000000000000000008152fd5b80fd5b50346103065760206003193601126103065761032361216e565b7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c549073ffffffffffffffffffffffffffffffffffffffff80831633149161036a836124a5565b169182156103c35761039c7fffffffffffffffffffffffff0000000000000000000000000000000000000000926124a5565b16177f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5580f35b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4e6577206f776e65722063616e6e6f7420626520746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b50346103065760a06003193601126103065761046061216e565b506104696121b4565b5060843567ffffffffffffffff81116104b65761048a9036906004016123cc565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b5080fd5b5034610306577f8a7a5c9c34210b39b0dd6c746e4824f7af2a84c059d4dcbc168a2036d26df99060406104ec3661222a565b80600f6104f884612670565b015582519182526020820152a180f35b503461030657610517366121d7565b919061052281612670565b9260ff601b85015460201c16156108415761054060248501846123fa565b5490610550600586015483612530565b6001546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301523060248301529091169190602081604481865afa9081156108365789916107fc575b5090610647926105cc826020941015612543565b73ffffffffffffffffffffffffffffffffffffffff60268a0154168a6040518096819582947f23b872dd0000000000000000000000000000000000000000000000000000000084528a6004850173ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b03925af180156107f1576106629188916107c2575b506125e6565b8573ffffffffffffffffffffffffffffffffffffffff815416803b156104b6578160405180927f731133e90000000000000000000000000000000000000000000000000000000082528183816106f08a8c8b600485019173ffffffffffffffffffffffffffffffffffffffff60a0949216835260208301526040820152608060608201525f60808201520190565b03925af180156102cf576107a1575b507f99c110e7b335cff55cab2cfe92e319ad78396f17234debbb5860886aa0244cca61078a86868673ffffffffffffffffffffffffffffffffffffffff8760228d8383165f520160205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905560405195869560808752608087019061264b565b93602086015216604084015260608301520390a180f35b816107b09196959493966120bc565b6107be57909192855f6106ff565b8580fd5b6107e4915060203d6020116107ea575b6107dc81836120bc565b8101906125ce565b5f61065c565b503d6107d2565b6040513d89823e3d90fd5b9190506020823d60201161082e575b81610818602093836120bc565b8101031261082a5790516106476105b8565b5f80fd5b3d915061080b565b6040513d8b823e3d90fd5b6004857fc4d56880000000000000000000000000000000000000000000000000000000008152fd5b50346103065760206003193601126103065760043561088781612670565b601b81019081549060ff8260181c16610940576002810154421190811591610930575b50610908577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1663010000001790556040519081527fab1902ee37c92d1a78dda53814d64b815e7e3ee287d60843a3dbd6954e3206b490602090a180f35b6004847febd7e129000000000000000000000000000000000000000000000000000000008152fd5b905060034291015411155f6108aa565b6004857f5cebfd4a000000000000000000000000000000000000000000000000000000008152fd5b50346103065760a06003193601126103065761098261216e565b5061098b6121b4565b5060443567ffffffffffffffff81116104b6576109ac90369060040161239b565b505060643567ffffffffffffffff81116104b6576109ce90369060040161239b565b505060843567ffffffffffffffff81116104b6576109f09036906004016123cc565b505060206040517fbc197c81000000000000000000000000000000000000000000000000000000008152f35b5034610306578060031936011261030657610ad7604051610a3e6080826120bc565b6003815260603660208301377f8da5cb5b00000000000000000000000000000000000000000000000000000000610a7482612441565b527ff2fde38b00000000000000000000000000000000000000000000000000000000610a9f8261244e565b527f8c5f36bb00000000000000000000000000000000000000000000000000000000610aca8261245e565b5260405191829182612240565b0390f35b503461030657610aea3661229b565b610af48151612670565b60ff601b82015460201c16610d0e57907f182cb671939e46d1345c30b51134e41ef7782a2113747a93b4dc3c31b91ea81e610d0892610b328361284b565b825160028201546003830154604080519384526020840192909252908201527f05b741eb5649daedcc851ef6f057b1bf89b49d12357d31c478c425b6eb1ce9c590606090a182518154600183015460128401546040805194855260208501939093529183015260608201527f1ada3075f8dc673c9de9ba7c0b8e81065d996d1faa99feb6d0a648c8b7a1516d90608090a17fc64d8be5e3585a2141489e772ad1096418b37137a76298a309a5f1095f95f1ca835160a085015190610c7060c087015160e08801516101008901516101208a01519173ffffffffffffffffffffffffffffffffffffffff6102608c015116936040519788978895919360c0959198979373ffffffffffffffffffffffffffffffffffffffff9560e089019a8952602089015260408801526060870152608086015260a085015216910152565b0390a18251610cef6008830154926007810154906102008701516101808801516102408901519160ff6025601086015495015460081c1694610cb18661246e565b6040519889988994919260e0969399989794919961010087019a8752602087015260408601526060850152608084015260a083015260c08201520152565b0390a1610d028151608083015190613261565b51613713565b50505080f35b6004837fdecaae02000000000000000000000000000000000000000000000000000000008152fd5b50346103065760806003193601126103065760043567ffffffffffffffff81116104b657610d68903690600401612128565b9060243560443592610d78612191565b9260ff601b610d8685612670565b015460181c1661104e57610d9983612670565b906010820154946011830196875496878082115f1461104557610dbb91612427565b905b8181111561103d5750955b600284015442106110155760038401544211610fed578615610fc557602384019273ffffffffffffffffffffffffffffffffffffffff83165f5283602052610e148860405f2054612434565b601286015410610f9d5773ffffffffffffffffffffffffffffffffffffffff83165f528360205260405f205415610ec9575b5060409460247f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f979560209a9573ffffffffffffffffffffffffffffffffffffffff8b96610e9788610eb598612434565b8955165f528b52875f20610eac868254612434565b905501906123fa565b5554825191825285820152a1604051908152f35b6014850180549160018301809311610f705750879560209a9573ffffffffffffffffffffffffffffffffffffffff8b96610e9788610eb5987ff865af89149aa92dd957b447226842542090f013d1c80f4f66f6eb3ea79f8e917f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f9f60409f9a906040918060249c5582519182526020820152a198505050965050959a509597505094610e46565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b807f2b42b1220000000000000000000000000000000000000000000000000000000060049252fd5b6004837f7eec29e0000000000000000000000000000000000000000000000000000000008152fd5b6004837f0c32ed70000000000000000000000000000000000000000000000000000000008152fd5b6004837ff2b4a12c000000000000000000000000000000000000000000000000000000008152fd5b905095610dc8565b50508290610dbd565b807fa6a992df0000000000000000000000000000000000000000000000000000000060049252fd5b503461082a5760a060031936011261082a5760043567ffffffffffffffff811161082a576110a8903690600401612128565b60243560443573ffffffffffffffffffffffffffffffffffffffff811680820361082a576110d4612191565b906084359261111b73ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c541633146124a5565b61112485612670565b60ff601b82015460201c1615611476576044602073ffffffffffffffffffffffffffffffffffffffff5f5416604051928380927efdd58e0000000000000000000000000000000000000000000000000000000082528860048301528b60248301525afa80156113d45786915f91611441575b50106114195760056111aa91015485612530565b6001546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015230602483015290911690602081604481855afa9081156113d4575f916113df575b50906112869361122684602095941015612543565b5f6040518096819582947f23b872dd0000000000000000000000000000000000000000000000000000000084528b6004850173ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b03925af180156113d4576112a0915f916107c257506125e6565b73ffffffffffffffffffffffffffffffffffffffff5f541691823b1561082a575f73ffffffffffffffffffffffffffffffffffffffff60c4829360405194859384927ff242432a00000000000000000000000000000000000000000000000000000000845288600485015216978860248401528a604484015289606484015260a060848401528160a48401525af180156113d457611392575b509161137793917f38db1382a58023a1d5d8aaab1581199c9b7d9ed33223c18beeaab57924aff20f959360405195869560a0875260a087019061264b565b9360208601526040850152606084015260808301520390a180f35b7f38db1382a58023a1d5d8aaab1581199c9b7d9ed33223c18beeaab57924aff20f9593919650916113c75f61137796946120bc565b5f96919395509193611339565b6040513d5f823e3d90fd5b929190506020833d602011611411575b816113fc602093836120bc565b8101031261082a579151909190611286611211565b3d91506113ef565b7f91df618a000000000000000000000000000000000000000000000000000000005f5260045ffd5b9150506020813d60201161146e575b8161145d602093836120bc565b8101031261082a578590515f611196565b3d9150611450565b7fc4d56880000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461082a575f60031936011261082a57602073ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5416604051908152f35b3461082a57602060031936011261082a5761150961216e565b73ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c54166115c65773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000007f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5416177f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c555f80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f776e657220616c7265616479207365740000000000000000000000000000006044820152fd5b3461082a57602060031936011261082a5773ffffffffffffffffffffffffffffffffffffffff61165261216e565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f80f35b3461082a57606060031936011261082a577f9cc9725ee02d8f0a4d8b30054405939f4d872cc6a5c2d677e02f5bd87e5dea2a6024356004356116fd6044356116c783612670565b600a670de0b6b3a76400006116dc84886143b0565b04910155604051938493846040919493926060820195825260208201520152565b0390a1005b3461082a576117103661229b565b307fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f556117428151612670565b90601b820160ff815460101c166118ce576118cc927fb42ebd0ad22561f77328ee457d5ba2a08a7c2847ff88c663cca9dcc8c53dc086916117828461284b565b6201000062ff0000198254161790556001549060258101917fffffffffffffffff0000000000000000000000000000000000000000ffffffff77ffffffffffffffffffffffffffffffffffffffff0000000084549260201b169116178092557ff5d1b3af18a6e549e23801b7a43bec54699badce37e0f7e96e0a4ebb65143d74845160a08601519061188e60c088015160e08901516101008a01516101208b01519173ffffffffffffffffffffffffffffffffffffffff6102608d015116936040519788978895919360c0959198979373ffffffffffffffffffffffffffffffffffffffff9560e089019a8952602089015260408801526060870152608086015260a085015216910152565b0390a1610cef8451916008810154936007820154916102008801516101808901519060ff60106102408c01519401549460081c1694610cb18661246e565b005b7fe2003eba000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461082a575f60031936011261082a57604051601f1961020061191981846120bc565b600f8352013660208301377f60332e890000000000000000000000000000000000000000000000000000000061194e82612441565b527f796b89ec000000000000000000000000000000000000000000000000000000006119798261244e565b527f9226537e000000000000000000000000000000000000000000000000000000006119a48261245e565b52805160031015611bfd577f68aea41b000000000000000000000000000000000000000000000000000000006080820152805160041015611bfd577f2dcb118e0000000000000000000000000000000000000000000000000000000060a0820152805160051015611bfd577fee5b280a0000000000000000000000000000000000000000000000000000000060c0820152805160061015611bfd577f906b131a0000000000000000000000000000000000000000000000000000000060e0820152805160071015611bfd577fde99347a00000000000000000000000000000000000000000000000000000000610100820152805160081015611bfd577f43a19a6500000000000000000000000000000000000000000000000000000000610120820152805160091015611bfd577f25830db3000000000000000000000000000000000000000000000000000000006101408201528051600a1015611bfd577f8dea1f47000000000000000000000000000000000000000000000000000000006101608201528051600b1015611bfd577fe3adc7ee000000000000000000000000000000000000000000000000000000006101808201528051600c1015611bfd577ff844a31c000000000000000000000000000000000000000000000000000000006101a08201528051600d1015611bfd577ff23a6e61000000000000000000000000000000000000000000000000000000006101c08201528051600e1015611bfd57807fbc197c81000000000000000000000000000000000000000000000000000000006101e0610ad793015260405191829182612240565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3461082a57602060031936011261082a57600435611c4781612670565b601b81019182549160ff8360181c1615611cfa576002810154421190811591611cea575b50611cc2577f11aa0bd3fb4d9c5622c703f91610a74140a4f88a7ebc7b4faaeaf52e3cb7aa94927fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff602093169055604051908152a1005b7febd7e129000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050600342910154111584611c6b565b7fc851109a000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461082a577f091a72ed52432e53c748925ef46b36a19f93cb874539b387d4f3b1f92aa33e116040611d533661222a565b80600e611d5f84612670565b015582519182526020820152a1005b3461082a57611d7c366121d7565b9190611d8781612670565b60118101908154946024820195611d9e87876123fa565b548110611fc057602383019173ffffffffffffffffffffffffffffffffffffffff81165f528260205260405f2054611dd689896123fa565b5411611f3c57611e0673ffffffffffffffffffffffffffffffffffffffff92611dff8a8a6123fa565b5490612427565b8555611e1288886123fa565b548282165f5283602052611e2b60405f20918254612427565b9055165f5260205260405f205415611eee575b6015019384549060018201809211611ec157855f611ea56040979388947f499925bc28b60b5b11b1841f8f51318fa4484237122fb618e76c3195b37d9eb8967f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f9b556123fa565b55548151908582526020820152a15482519182526020820152a1005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b601481019081545f198101908111611ec1576040817ff865af89149aa92dd957b447226842542090f013d1c80f4f66f6eb3ea79f8e9192601595558151908782526020820152a19050611e3e565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f556e646572666c6f773a20726573657276656420616d6f756e7420627920616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f556e646572666c6f773a20726573657276656420616d6f756e740000000000006044820152fd5b3461082a57602060031936011261082a57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361082a57817f4e2312e00000000000000000000000000000000000000000000000000000000060209314908115612092575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150148361208b565b90601f601f19910116810190811067ffffffffffffffff8211176120df57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116120df57601f01601f191660200190565b81601f8201121561082a5780359061213f8261210c565b9261214d60405194856120bc565b8284526020838301011161082a57815f926020809301838601378301015290565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361082a57565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361082a57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361082a57565b606060031982011261082a576004359067ffffffffffffffff821161082a5761220291600401612128565b906024359060443573ffffffffffffffffffffffffffffffffffffffff8116810361082a5790565b600319604091011261082a576004359060243590565b60206040818301928281528451809452019201905f5b8181106122635750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101612256565b60031961028091011261082a57604051610280810181811067ffffffffffffffff8211176120df576040526004358152602435602082015260443560408201526064356060820152608435608082015260a43560a082015260c43560c082015260e43560e082015261010435610100820152610124356101208201526101443561014082015261016435610160820152610184356101808201526101a4356101a08201526101c4356101c08201526101e4356101e08201526102043561020082015261022435610220820152610244356102408201526102643573ffffffffffffffffffffffffffffffffffffffff8116810361082a5761026082015290565b9181601f8401121561082a5782359167ffffffffffffffff831161082a576020808501948460051b01011161082a57565b9181601f8401121561082a5782359167ffffffffffffffff831161082a576020838186019501011161082a57565b6040518151909260209284929081908501845e82019081520301902090565b905f198201918211611ec157565b91908203918211611ec157565b91908201809211611ec157565b805115611bfd5760200190565b805160011015611bfd5760400190565b805160021015611bfd5760600190565b6002111561247857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b156124ac57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4f6e6c7920746865206f776e65722063616e2063616c6c20746869732066756e60448201527f6374696f6e0000000000000000000000000000000000000000000000000000006064820152fd5b81810292918115918404141715611ec157565b1561254a57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152fd5b9081602091031261082a5751801515810361082a5790565b156125ed57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f45524332303a207472616e73666572206661696c6564000000000000000000006044820152fd5b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b5f81807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000811015612820575b50806d04ee2d6d415b85acef8100000000600a921015612805575b662386f26fc100008110156127f1575b6305f5e1008110156127e0575b6127108110156127d1575b60648110156127c3575b10156127bb575b6001810191600a5f1960216127186127028761210c565b9661271060405198896120bc565b80885261210c565b94601f196020880196013687378601015b01917f30313233343536373839616263646566000000000000000000000000000000008282061a8353048015612764575f19600a9192612729565b50506127b5602c604051809360208201957f73746f726167652e626f6e64000000000000000000000000000000000000000087525180918484015e81015f838201520301601f1981018352826120bc565b51902090565b6001016126eb565b6064600291049201916126e4565b612710600491049201916126da565b6305f5e100600891049201916126cf565b662386f26fc10000601091049201916126c2565b6d04ee2d6d415b85acef8100000000602091049201916126b2565b604092507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000090049050600a612697565b905f6128578351612670565b9073ffffffffffffffffffffffffffffffffffffffff6102608501511673ffffffffffffffffffffffffffffffffffffffff6026840191167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560a084018051600584015560e085019283511561318257610200860192868451155f1461313b57610180600c910151066131135786905b6101c08201908151612f97575b6101a08301918251612e79575b60c084019761291989518251906143b0565b906006870191825561010086019182519161293b6101208901938451906143b0565b60098a0155670de0b6b3a764000061296860408a0151809c60018d019d8e5560208c01518d5551906143b0565b0460108a015560606101e08901519860128b01998a55610180810151600d8c015501519b8c9b624f1a008d60028d019e8f55019d8e8111611ec1578e10612df5578a90600382019e8f558051155f14612d0b575060250180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050805460088901555b6102408d018051600103612cb25750855115612c7b57602588016203000062ff0000198254161790555b8551600e8901558351600f8901556101408d01948d8651908115159081612c6c575b50612be0575b5050612bdb98957f9cc9725ee02d8f0a4d8b30054405939f4d872cc6a5c2d677e02f5bd87e5dea2a89967f05b741eb5649daedcc851ef6f057b1bf89b49d12357d31c478c425b6eb1ce9c59e9f9a6040612bb698612b477f1ada3075f8dc673c9de9ba7c0b8e81065d996d1faa99feb6d0a648c8b7a1516d9d99612b41612b3b7f091a72ed52432e53c748925ef46b36a19f93cb874539b387d4f3b1f92aa33e119b869b601b7f8a7a5c9c34210b39b0dd6c746e4824f7af2a84c059d4dcbc168a2036d26df99099017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff81541690555493519051906143b0565b82614e80565b90612427565b60078c01558d51905182519182526020820152a18a5190516101608c0151855192835260208301919091526040820152606090a18851905182519182526020820152a1855192549354905490604051948594859094939260609260808301968352602083015260408201520152565b0390a15191549254604051938493846040919493926060820195825260208201520152565b0390a1565b8e612bf26101608201928351906143b0565b600a8c015551908751905191303b156102cb576040517f68aea41b000000000000000000000000000000000000000000000000000000008152600481019190915260248101919091526044810191909152818160648183305af180156102cf5715612a4157612c628280926120bc565b6103065780612a41565b6101609150015115158f612a3b565b835115612c9a57602588016204000062ff000019825416179055612a19565b602588016201000062ff000019825416179055612a19565b8051612ccc57506025880162ff0000198154169055612a19565b517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612a1957602588016202000062ff000019825416179055612a19565b8051600103612d815750612d7792612d5a612d72936025612d62940160017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790558251905190612434565b9051906143b0565b6703782dace9d900005b906140c8565b612419565b60088901556129ef565b51909190600214612d95575b5050506129ef565b612de892612d5a612dda926025612d72950160027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790558251905190612434565b6701280f39a3485555612d6c565b60088901555f8881612d8d565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f54696d657374616d702073686f756c64206265206561726c696572206f72206560448201527f7175616c20746f207468652063757272656e742074696d657374616d700000006064820152fd5b909796959493928551155f14612f4b57508151600c900615612ebd576004887fbebd2292000000000000000000000000000000000000000000000000000000008152fd5b889791929394959697518351303b156102cb57604051917f2dcb118e00000000000000000000000000000000000000000000000000000000835260048301526024820152828160448183305af18015612f4057908a94939291612f21575b50612907565b8280949550612f32919392936120bc565b6104b657908892915f612f1b565b6040513d85823e3d90fd5b9293949596979060018751036129075782519198979695949350906003900615612ebd576004887f4f80c6ed000000000000000000000000000000000000000000000000000000008152fd5b9695949392918451155f1461305657508051600c900615612fda576004877fdcbd8c00000000000000000000000000000000000000000000000000000000008152fd5b90919293949587518251303b156102da57604051917fee5b280a00000000000000000000000000000000000000000000000000000000835260048301526024820152818160448183305af180156102cf57908993929161303b575b506128fa565b8180939450613049916120bc565b610306579087915f613035565b91929394959660018651036128fa578151909796959493925060039006156130a0576004877f07010901000000000000000000000000000000000000000000000000000000008152fd5b879691929394959651918151303b1561082a57604051937fee5b280a000000000000000000000000000000000000000000000000000000008552600485015260248401525f8360448183305af19283156113d457899361310057506128fa565b61310c91505f906120bc565b5f5f613035565b7f0d38e32c000000000000000000000000000000000000000000000000000000005f5260045ffd5b9060018551036128ed579061018060039101510661315a5786906128ed565b7fecfbd8cf000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f1de42a90000000000000000000000000000000000000000000000000000000005f5260045ffd5b8181106131b5575050565b5f81556001016131aa565b80545f8255806131ce575050565b6131e1915f5260205f20908101906131aa565b565b8054821015611bfd575f5260205f2001905f90565b8054680100000000000000008110156120df5761321a916001820181556131e3565b5f1982549160031b1b19169055565b8054680100000000000000008110156120df5761324b916001820181556131e3565b5f19829392549160031b92831b921b1916179055565b9061326b82612670565b600160ff601b83015460201c161515146136b45762015180820462010bd981019062010bd982125f8212908015821691151617611ec1576226496501905f62253d8c83129112908015821691151617611ec1578060021b600481058203611ec15762023ab19005908162023ab1029062023ab182058303611ec15760038201915f600384129112908015821691151617611ec157600461330c920590614f5c565b9060018201600181125f8412908015821691151617611ec15780610fa00290610fa0820503611ec15762164b09613351910592600461334a85614f49565b0590614f5c565b91601f8301925f601f85129112908015821691151617611ec15782605002605081058403611ec15761098f9005928361098f029061098f82058503611ec157605061339d920590614f5c565b92600b81059060028101905f600283129112908015821691151617611ec15781600c02600c81058303611ec1576133d391614f5c565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf8101908113600116611ec15780606402906064820503611ec1576134219261341c91614f2e565b614f2e565b602584019160ff835416600381101561247857806136945750600c600d86015404935b5f9483601d880194613455866131c0565b602189019788545f8a5580613674575b505f5b8481106134b157505050505050505050509181604092600b7f6d7086ab13fbd1583240e1b6e62b23416e3945f952373732fc183a2a407e462d95015582519182526020820152a1565b60ff895416600381101561247857600281036135ca575090918161359157509050600c850661358a5760018201808311611ec157905b60018601808711611ec157600c9006908115613581575b61351261350c8784866141c4565b89613229565b5f198501858111611ec157811461356c575b895490680100000000000000008210156120df5760018201808c55821015611bfd576001918b5f5260205f208160051c019060ff60f883549260031b161b1916905501613468565b6135778683856141c4565b600c8c0155613524565b600c91506134fe565b81906134e7565b600c83066135c45760018101809111611ec157915b60018101809111611ec157600c900690816134fe57600c91506134fe565b916135a6565b6001810361364e5750908161361457509050600a851061360d5760018201808311611ec157905b60038601808711611ec157600c9006908115613581575b6134fe565b81906135f1565b600a81101561363c575b60038101809111611ec157600c9006908161360857600c91506134fe565b9160018101809111611ec1579161361e565b6134fe579182613663575050819085906134fe565b60018101809111611ec157916134fe565b61368e908a5f52601f60205f20910160051c8101906131aa565b5f613465565b6001036136a9576003600d8601540493613444565b600d85015493613444565b7fdecaae02000000000000000000000000000000000000000000000000000000005f5260045ffd5b90602082549182815201915f5260205f20905f5b8181106136fd5750505090565b82548452602090930192600192830192016136f0565b61371c81612670565b90600160ff601b84015460201c161515146136b4575f600583015460ff602585015416600381101561247857806140a85750600c600d85015404915b613764601c86016131c0565b613770601e86016131c0565b61377c601f86016131c0565b613788602086016131c0565b613794601f86016131f8565b6137a5600586015460208701613229565b6137b1601c86016131f8565b6137bd601e86016131f8565b600585015460168601555f905b8382106138e557505050506138b76138b0917f2f3e3b3aaadf1f165fa7d634278fa8ee54a0548dbf8fc62a1d301da8f6aa6298604060088601548151908482526020820152a17f1cd0ec0194cd0b5111bf7154d1801ab3549a822fcff5ac188bcaa7f310aa11de601d85019160405190815260c06020820152806138a161389061387f61386e61385d60c08601896136dc565b858103604087015260208c016136dc565b8481036060860152601f8b016136dc565b8381036080850152601c8a016136dc565b82810360a0840152601e89016136dc565b0390a1604051928380926136dc565b03826120bc565b91601e6138e26040516138d1816138b081601c89016136dc565b936138b060405180948193016136dc565b90565b602586015491600660ff8460101c16101591826124785760ff8460101c16155f14613f2857505f925b61391c8560088a0154614e80565b90670de0b6b3a7640000820291808304670de0b6b3a76400001490151715611ec1578160098a0154670de0b6b3a764000003670de0b6b3a76400008111611ec15761396691614e80565b936124785760ff8160101c16155f146139fd5750855f19810111611ec1576001926139bc6139d3925f19890185105f146139df576139a6601f8c016131f8565b6139b38860208d01613229565b601c8b01613229565b6139c981601e8b01613229565b6016890154612434565b601688015501906137ca565b6139eb60208c016131f8565b6139f888601f8d01613229565b6139b3565b91949091601081901c60ff16600203613aa6575084613a5f576001926139bc602096936139f884613a568d613a4d670de0b6b3a7640000613a456139d39a600a850154614e80565b048094612427565b9b8c9101613229565b601f8d01613229565b9390855f19810111611ec1576001926139bc6139d3925f19890185145f14613a8d576139eb60208c016131f8565b613a9a8860208d01613229565b6139f8601f8c016131f8565b91949093929091601081901c60ff16600103613b3d5750909192855f19810111611ec157875f198701841015613b065750600192916139bc613aeb866139d394612427565b96613af98860208d01613229565b6139f887601f8d01613229565b916139bc6139d392966139f8613b2d87602088613b278260019c9b016131f8565b016131e3565b90549060031b1c601f8d01613229565b600360ff8260101c16145f14613c61575090919260ff602589015416600381101590816124785780159182613c4e575b8215613c29575b8215613c04575b505015613bec57855f19810111611ec157875f198701841015613bc85750600192916139bc613bad866139d394612427565b96613bbb87601f8d01613229565b6139f88860208d01613229565b946139d39150916139bc84936139f8613b2d60019760205f9b613b278282016131f8565b93600192916139bc6139d392613bbb601f8c016131f8565b9091506124785760021480613c1b575b5f80613b7b565b50600e880154831015613c14565b505f91506001811480613c3d575b91613b74565b506003600e8b015404851015613c37565b9150600c600e8b01540485101591613b6d565b600460ff8260101c16145f14613d49575090919260ff602589015416600381101590816124785780159182613d36575b8215613d11575b8215613cec575b505015613cd157855f19810111611ec157875f198701841015613bc85750600192916139bc613bad866139d394612427565b9350506001906139d35f6139bc5f91613bbb601f8c016131f8565b9091506124785760021480613d03575b5f80613c9f565b50600f880154831015613cfc565b505f91506001811480613d25575b91613c98565b506003600f8b015404851015613d1f565b9150600c600f8b01540485101591613c91565b600560ff8260101c1614613d6a575b506139d3906139bc60019495966139b3565b600360ff829693959616101590816124785760ff8116159182613f15575b8215613eed575b8215613ec5575b505015613eab575f198601868111611ec1578490831015613e7657613dba91612427565b93613dc884601f8a01613229565b613dd58560208a01613229565b60ff602589015416926003841015806124785784159081613e64575b8115613e41575b8115613e1c575b5060019450613e12575b90949392613d58565b505f905080613e09565b90506124785760026001941480613e34575b5f613dff565b50600f8901548310613e2e565b50505f6001851480613e54575b90613df8565b506003600f8b0154048410613e4e565b9050600c600f8b015404841090613df1565b50505f93613e86602089016131f8565b613ea6613e968360208b016131e3565b90549060031b1c601f8a01613229565b613dd5565b93613eb8601f89016131f8565b613ea68560208a01613229565b9091506124785760ff1660021480613edf575b5f80613d96565b50600e880154821015613ed8565b505f915060ff811660011480613f04575b91613d8f565b5060036