diff --git a/artifacts/ConsensusRegistry.json b/artifacts/ConsensusRegistry.json index 92b0e9e..4c13d8f 100644 --- a/artifacts/ConsensusRegistry.json +++ b/artifacts/ConsensusRegistry.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"genesisConfig_","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]},{"name":"initialValidators_","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]},{"name":"blsPubkeys_","type":"bytes[]","internalType":"bytes[]"},{"name":"proofsOfPossession","type":"tuple[]","internalType":"struct IStakeManager.ProofOfPossession[]","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"owner_","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"SYSTEM_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"activate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allocateIssuance","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"applyIncentives","inputs":[{"name":"rewardInfos","type":"tuple[]","internalType":"struct RewardInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"consensusHeaderCount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applySlashes","inputs":[{"name":"slashes","type":"tuple[]","internalType":"struct Slash[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"approve","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"beginExit","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burn","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancelStakeVersionChange","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimRefund","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimStakeRewards","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimableRefunds","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"concludeEpoch","inputs":[{"name":"newCommittee","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"delegateStake","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"proofOfPossession","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"validatorEIP712Signature","type":"bytes","internalType":"bytes"},{"name":"deadline","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"delegationDigest","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"delegator","type":"address","internalType":"address"},{"name":"deadline","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"epochInfo","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"futureEpochInfo","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"getApproved","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getBalanceBreakdown","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBlsPubkey","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getCommitteeBlsPubkeys","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"view"},{"type":"function","name":"getCommitteeValidators","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpoch","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochInfo","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentStakeConfig","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentStakeVersion","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"getEligibleValidatorCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochInfo","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getNextCommitteeSize","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"getPendingVersionChanges","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRewards","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidator","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getValidators","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getValidatorsInfo","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"increaseNonce","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isApprovedForAll","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isDelegated","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isRetired","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isValidator","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"issuance","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address payable"}],"stateMutability":"view"},{"type":"function","name":"issuanceWithdrawal","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"migrateValidatorSets","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"ownerOf","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestStakeVersionChange","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"targetVersion","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setApprovalForAll","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setNextCommitteeSize","inputs":[{"name":"newSize","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTopUpAuthorityRequired","inputs":[{"name":"required","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValidatorRegion","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"region","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"proofOfPossession","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"stakeConfig","inputs":[{"name":"version","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"tokenByIndex","inputs":[{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"tokenOfOwnerByIndex","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"tokenURI","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"topUpAuthorityRequired","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"topUpSlashedStake","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferFrom","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"undistributedIssuance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unstake","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"acceptRewardShortfall","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeStakeVersion","inputs":[{"name":"newConfig","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"nonpayable"},{"type":"function","name":"validators","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"versionChangeRequests","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"targetVersion","type":"uint8","internalType":"uint8"},{"name":"requestEpoch","type":"uint32","internalType":"uint32"},{"name":"funder","type":"address","internalType":"address"},{"name":"escrow","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"DelegationNonceIncreased","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"nonce","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"NewEpoch","inputs":[{"name":"epoch","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"NextCommitteeSizeUpdated","inputs":[{"name":"oldSize","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"newSize","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"numActiveValidators","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RefundClaimed","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RefundQueued","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RewardsClaimed","inputs":[{"name":"claimant","type":"address","indexed":true,"internalType":"address"},{"name":"rewards","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StakeVersionAuthored","inputs":[{"name":"version","type":"uint8","indexed":true,"internalType":"uint8"},{"name":"stakeAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"epochIssuance","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"epochDuration","type":"uint32","indexed":false,"internalType":"uint32"}],"anonymous":false},{"type":"event","name":"StakeVersionChangeCanceled","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StakeVersionChangeRequested","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"targetVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"requestEpoch","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"escrow","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TopUpAuthorityRequirementUpdated","inputs":[{"name":"required","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ValidatorActivated","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorExited","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorPendingActivation","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorPendingExit","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorRegionUpdated","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"region","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"ValidatorRetired","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorSetsMigrated","inputs":[{"name":"eligibleValidatorCount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorSlashed","inputs":[{"name":"slash","type":"tuple","indexed":false,"internalType":"struct Slash","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"ValidatorStakeToppedUp","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorStakeVersionUpgraded","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"oldVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"newVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"oldStakeAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newStakeAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorStaked","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"error","name":"AlreadyDefined","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"BlsPubkeyNotFound","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"CommitteeRequirement","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"DelegationExpired","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DuplicateBLSPubkey","inputs":[]},{"type":"error","name":"ERC721EnumerableForbiddenBatchMint","inputs":[]},{"type":"error","name":"ERC721IncorrectOwner","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InsufficientApproval","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOperator","inputs":[{"name":"operator","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721NonexistentToken","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721OutOfBoundsIndex","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"GenesisArityMismatch","inputs":[]},{"type":"error","name":"IneligibleUnstake","inputs":[{"name":"validator","type":"tuple","internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}]},{"type":"error","name":"InsufficientRewards","inputs":[{"name":"withdrawAmount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidBLSPubkey","inputs":[]},{"type":"error","name":"InvalidCommitteeSize","inputs":[{"name":"minCommitteeSize","type":"uint256","internalType":"uint256"},{"name":"providedCommitteeSize","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidDeficitAmount","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidDuration","inputs":[{"name":"duration","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"InvalidEpoch","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"InvalidProofOfPossession","inputs":[{"name":"proof","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]}]},{"type":"error","name":"InvalidStakeAmount","inputs":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStakeVersion","inputs":[{"name":"currentVersion","type":"uint8","internalType":"uint8"},{"name":"targetVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidStatus","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}]},{"type":"error","name":"InvalidSupply","inputs":[]},{"type":"error","name":"InvalidTokenId","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidValidatorAddress","inputs":[]},{"type":"error","name":"IssuanceTransferFailed","inputs":[]},{"type":"error","name":"LowLevelCallFailure","inputs":[{"name":"err","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"NoClaimableRefund","inputs":[]},{"type":"error","name":"NoPendingVersionChange","inputs":[]},{"type":"error","name":"NotRecipient","inputs":[{"name":"recipient","type":"address","internalType":"address"}]},{"type":"error","name":"NotTransferable","inputs":[]},{"type":"error","name":"NotValidator","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"OnlySystemCall","inputs":[{"name":"invalidCaller","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"Reentrancy","inputs":[]},{"type":"error","name":"RequiresConsensusNFT","inputs":[]},{"type":"error","name":"StakeNotSlashed","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"StringsInsufficientHexLength","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"TopUpAuthorityRequired","inputs":[]}],"bytecode":{"object":"0x610120604052348015610010575f5ffd5b50604051619ffd380380619ffd83398101604081905261002f91611558565b806040518060400160405280600c81526020016b10dbdb9cd95b9cdd5cd3919560a21b8152506040518060400160405280600481526020016310d3919560e21b8152508181815f908161008291906116cf565b50600161008f82826116cf565b505030608052504660a0526060806100ef604080518082018252601481527f54656c636f696e205374616b654d616e61676572000000000000000000000000602080830191909152825180840190935260018352603160f81b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152938401929092529082015246606082015230608082015260a09020610100525050600d805461ff001916905550506001600160a01b03811661018d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61019681610847565b50835115806101a757508251845114155b806101b457508151845114155b156101d257604051633aa3e03360e01b815260040160405180910390fd5b846060015163ffffffff165f0361020a576060850151604051630c6e911360e41b815263ffffffff9091166004820152602401610184565b5f808052600a602090815286517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3558601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e45560408601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e55560608601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e6805463ffffffff191663ffffffff9092169190911790558451600d805461ffff60d81b1916600160d81b61ffff909316929092029190911790555b600281116103b1575f601182600481106103025761030261178d565b6003020160028101805460608a0151600160401b600160801b03199091166801000000000000000063ffffffff8781169190910263ffffffff60601b1916919091176c01000000000000000000000000919092160217905560408801516001820155905081601d816004811061037a5761037a61178d565b6003020160020160086101000a81548163ffffffff021916908363ffffffff16021790555050806103aa906117b5565b90506102e6565b505f5b8451811015610837575f8582815181106103d0576103d061178d565b602002602001015190505f6104218584815181106103f0576103f061178d565b6020026020010151835f015188868151811061040e5761040e61178d565b60200260200101516108a260201b60201c565b82519091506001600160a01b03161580610445575081516001600160a01b03908116145b156104635760405163713ce51160e01b815260040160405180910390fd5b602082015163ffffffff161561049a576020820151604051634fadd4d360e11b815263ffffffff9091166004820152602401610184565b604082015163ffffffff16156104d1576040808301519051634fadd4d360e11b815263ffffffff9091166004820152602401610184565b6003826060015160068111156104e9576104e96117cd565b1461050d578160600151604051633ba7bf8960e11b81526004016101849190611801565b608082015115610533576005604051633ba7bf8960e11b81526004016101849190611801565b60a082015160ff16156105645760a082015160405163222d164360e21b815260ff9091166004820152602401610184565b5f5b6002811161061a57601181600481106105815761058161178d565b84516003919091029190910180546001810182555f91825260209091200180546001600160a01b0319166001600160a01b03909216919091179055601d81600481106105cf576105cf61178d565b84516003919091029190910180546001810182555f91825260209091200180546001600160a01b0319166001600160a01b03909216919091179055610613816117b5565b9050610566565b5085838151811061062d5761062d61178d565b60209081029190910181015183516001600160a01b03165f908152602990925260409091209061065d90826116cf565b5081516001600160a01b039081165f908152600f602090815260409182902085518154928701519387015163ffffffff908116600160c01b0263ffffffff60c01b1991909516600160a01b026001600160c01b0319909416919095161791909117928316821781556060850151859391929091839160ff60e01b191664ffffffffff60c01b1990911617600160e01b8360068111156106fe576106fe6117cd565b02179055506080820151815460a084015160c09094015160ff908116600160f81b026001600160f81b0391909516600160f01b0260ff60f01b19931515600160e81b029390931661ffff60e81b19909216919091179190911716919091179055815160035f52602a602052610794907f4adfa5efd78af8432c8ff812ed4c3d89e016f048361846e090e1a7c770f3157690610a3e565b50875182516001600160a01b039081165f908152600b60209081526040808320949094558551858352601090915292902080546001600160a01b0319169290911691909117905581516107f6906107f1816001600160a01b031690565b610a5b565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b82604051610825919061180f565b60405180910390a150506001016103b4565b50509151602b55506119bf915050565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f81516060146108c5576040516333a234f960e11b815260040160405180910390fd5b5f825f815181106108d8576108d861178d565b016020015160f81c90506080811615806108f457506040811615155b15610912576040516333a234f960e11b815260040160405180910390fd5b5f61091d8486610ac1565b86516040519192505f91829161b1519163a65ebb2560e01b91610946918a9088906024016118b7565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516109849190611910565b5f60405180830381855afa9150503d805f81146109bc576040519150601f19603f3d011682016040523d82523d5f602084013e6109c1565b606091505b50915091508115806109d557508051602014155b156109f557806040516306fe67db60e31b8152600401610184919061191b565b80806020019051810190610a09919061192d565b610a28578760405163a865bb3560e01b81526004016101849190611946565b610a328688610b11565b98975050505050505050565b5f610a52836001600160a01b038416610b9d565b90505b92915050565b6001600160a01b038216610a8457604051633250574960e11b81525f6004820152602401610184565b5f610a90838383610be9565b90506001600160a01b03811615610abc576040516339e3563760e11b81525f6004820152602401610184565b505050565b60608251606014610ae5576040516333a234f960e11b815260040160405180910390fd5b604051610afa905f9085908590602001611960565b604051602081830303815290604052905092915050565b604080516020848101516001600160fd1b031682528483015181830152606080860151838501529091205f8181526010909252919020546001600160a01b031615610b6f57604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b5f818152600183016020526040812054610be257508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a55565b505f610a55565b5f80610bf6858585610cbc565b90506001600160a01b038116610c5257610c4d84600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b610c75565b846001600160a01b0316816001600160a01b031614610c7557610c758185610dae565b6001600160a01b038516610c9157610c8c84610e2b565b610cb4565b846001600160a01b0316816001600160a01b031614610cb457610cb48585610ed2565b949350505050565b5f828152600260205260408120546001600160a01b0390811690831615610ce857610ce8818486610f20565b6001600160a01b03811615610d2257610d035f858180610f84565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610d50576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f610db8836110a6565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314610e0d575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90610e3c90600190611998565b5f8381526009602052604081205460088054939450909284908110610e6357610e6361178d565b905f5260205f20015490508060088381548110610e8257610e8261178d565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480610eb957610eb96119ab565b600190038181905f5260205f20015f9055905550505050565b5f6001610ede846110a6565b610ee89190611998565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b610f2b8383836110eb565b610abc576001600160a01b038316610f5957604051637e27328960e01b815260048101829052602401610184565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610184565b8080610f9857506001600160a01b03821615155b15611077575f610fa78461116b565b90506001600160a01b03831615801590610fd35750826001600160a01b0316816001600160a01b031614155b801561100457506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b1561102d5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610184565b81156110755783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b0382166110d0576040516322718ad960e21b81525f6004820152602401610184565b506001600160a01b03165f9081526003602052604090205490565b5f6001600160a01b03831615801590610cb45750826001600160a01b0316846001600160a01b0316148061114357506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b80610cb45750505f908152600460205260409020546001600160a01b03908116911614919050565b5f818152600260205260408120546001600160a01b031680610a5557604051637e27328960e01b815260048101849052602401610184565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b03811182821017156111d9576111d96111a3565b60405290565b604051602081016001600160401b03811182821017156111d9576111d96111a3565b604051608081016001600160401b03811182821017156111d9576111d96111a3565b604051601f8201601f191681016001600160401b038111828210171561124b5761124b6111a3565b604052919050565b805163ffffffff81168114611266575f5ffd5b919050565b5f6001600160401b03821115611283576112836111a3565b5060051b60200190565b80516001600160a01b0381168114611266575f5ffd5b80518015158114611266575f5ffd5b805160ff81168114611266575f5ffd5b5f82601f8301126112d1575f5ffd5b81516112e46112df8261126b565b611223565b80828252602082019150602060e08402860101925085831115611305575f5ffd5b602085015b838110156113af5760e08188031215611321575f5ffd5b6113296111b7565b6113328261128d565b815261134060208301611253565b602082015261135160408301611253565b6040820152606082015160078110611367575f5ffd5b6060820152611378608083016112a3565b608082015261138960a083016112b2565b60a082015261139a60c083016112b2565b60c0820152835260209092019160e00161130a565b5095945050505050565b5f82601f8301126113c8575f5ffd5b81516001600160401b038111156113e1576113e16111a3565b6113f4601f8201601f1916602001611223565b818152846020838601011115611408575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f830112611433575f5ffd5b81516114416112df8261126b565b8082825260208201915060208360051b860101925085831115611462575f5ffd5b602085015b838110156113af5780516001600160401b03811115611484575f5ffd5b611493886020838a01016113b9565b84525060209283019201611467565b5f82601f8301126114b1575f5ffd5b81516114bf6112df8261126b565b8082825260208201915060208360051b8601019250858311156114e0575f5ffd5b602085015b838110156113af5780516001600160401b03811115611502575f5ffd5b86016020818903601f19011215611517575f5ffd5b61151f6111df565b60208201516001600160401b03811115611537575f5ffd5b6115468a6020838601016113b9565b825250845250602092830192016114e5565b5f5f5f5f5f85870361010081121561156e575f5ffd5b608081121561157b575f5ffd5b50611584611201565b8651815260208088015190820152604080880151908201526115a860608801611253565b606082015260808701519095506001600160401b038111156115c8575f5ffd5b6115d4888289016112c2565b60a088015190955090506001600160401b038111156115f1575f5ffd5b6115fd88828901611424565b60c088015190945090506001600160401b0381111561161a575f5ffd5b611626888289016114a2565b92505061163560e0870161128d565b90509295509295909350565b600181811c9082168061165557607f821691505b60208210810361167357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610abc5782821115610abc57805f5260205f20601f840160051c60208510156116a457505f5b90810190601f840160051c035f5b818110156116c7575f838201556001016116b2565b505050505050565b81516001600160401b038111156116e8576116e86111a3565b6116fc816116f68454611641565b84611679565b6020601f82116001811461172e575f83156117175750848201515b5f19600385901b1c1916600184901b178455611786565b5f84815260208120601f198516915b8281101561175d578785015182556020948501946001909201910161173d565b508482101561177a57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016117c6576117c66117a1565b5060010190565b634e487b7160e01b5f52602160045260245ffd5b600781106117fd57634e487b7160e01b5f52602160045260245ffd5b9052565b60208101610a5582846117e1565b5f60e08201905060018060a01b03835116825263ffffffff602084015116602083015263ffffffff6040840151166040830152606083015161185460608401826117e1565b5060808301511515608083015260ff60a08401511660a083015260c083015161188260c084018260ff169052565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b606081525f6118c96060830186611889565b82810360208401526118db8186611889565b905082810360408401526118ef8185611889565b9695505050505050565b5f81518060208401855e5f93019283525090919050565b5f610a5282846118f9565b602081525f610a526020830184611889565b5f6020828403121561193d575f5ffd5b610a52826112a3565b602081525f8251602080840152610cb46040840182611889565b6001600160e81b0319841681525f61197b60038301856118f9565b60609390931b6001600160601b0319168352505060140192915050565b81810381811115610a5557610a556117a1565b634e487b7160e01b5f52603160045260245ffd5b60805160a05160c05160e051610100516186016119fc5f395f6143ee01525f6144a801525f61448201525f61443201525f61440f01526186015ff3fe608060405260043610610436575f3560e01c8063673983311161022b578063a71954ec11610129578063c05df7ac116100b3578063eb8535c211610078578063eb8535c214610d7f578063f062476814610dac578063f2fde38b14610dcb578063f66a25a414610dea578063fa52c7d814610e09575f5ffd5b8063c05df7ac14610cfb578063c53a029214610d1a578063c87b56dd14610d2e578063e5a2282714610d4d578063e985e9c514610d60575f5ffd5b8063b5545a3c116100f9578063b5545a3c14610bf7578063b88d4fde14610c0b578063b97dd9e214610c2a578063babc394f14610c5b578063bd3e759414610c6f575f5ffd5b8063a71954ec14610b91578063a7c5e70114610bb0578063aaffd27014610bc4578063ad6cfb8614610bd8575f5ffd5b80637d06fdf8116101b55780638cc05eda1161017a5780638cc05eda14610af55780638da5cb5b14610b2157806395d89b4114610b44578063a0201be514610b58578063a22cb46514610b77575f5ffd5b80637d06fdf814610a2e5780638456cb5914610a7b57806384b0196e14610a8f578063863623bb14610ab657806389afcb4414610ad6575f5ffd5b80636d3c6275116101fb5780636d3c62751461099e57806370a08231146109bd578063715018a6146109dc57806379ee54f7146109f05780637b55a30014610a0f575f5ffd5b8063673983311461090e5780636a627842146109345780636a926591146109535780636ae9942c14610972575f5ffd5b80632a8e33d7116103385780633f4ba83a116102c257806358e88dbb1161028757806358e88dbb1461087c57806359ca93b6146108955780635c975abb146108b457806362fcde4b146108d05780636352211e146108ef575f5ffd5b80633f4ba83a146107ec57806342842e0e1461080057806343201d301461081f57806343401a00146108325780634f6ccce71461085d575f5ffd5b80633434735f116103085780633434735f14610724578063355811a71461073e578063374ed18c146107465780633894228e146107725780633e28391d146107cd575f5ffd5b80632a8e33d7146106b45780632b9f4985146106d35780632f745c59146106f25780632fb0d02514610711575f5ffd5b80630f15f4c0116103c45780631904bb2e116103895780631904bb2e1461061a5780632228dfa01461064657806323a404301461065a57806323b872dd1461066e5780632870259d14610688575f5ffd5b80630f15f4c0146105865780630f4346fa1461059a578063127ce8e8146105b957806315b5709a146105cc57806318160ddd14610606575f5ffd5b806306fdde031161040a57806306fdde03146104de5780630752e017146104f2578063081812fc14610511578063095ea7b3146105485780630a36cdef14610567575f5ffd5b80628d6acd1461043a57806301ffc9a71461046257806302ae337b14610491578063059b916c146104b2575b5f5ffd5b348015610445575f5ffd5b5061044f600e5481565b6040519081526020015b60405180910390f35b34801561046d575f5ffd5b5061048161047c366004616fc3565b610e94565b6040519015158152602001610459565b34801561049c575f5ffd5b506104b06104ab366004617025565b610ebe565b005b3480156104bd575f5ffd5b506104d16104cc366004617079565b611050565b60405161045991906170c0565b3480156104e9575f5ffd5b506104d1611121565b3480156104fd575f5ffd5b506104b061050c3660046170d2565b6111b0565b34801561051c575f5ffd5b5061053061052b3660046170d2565b611218565b6040516001600160a01b039091168152602001610459565b348015610553575f5ffd5b506104b06105623660046170e9565b61123f565b348015610572575f5ffd5b506104b0610581366004617025565b611258565b348015610591575f5ffd5b506104b061152c565b3480156105a5575f5ffd5b506104b06105b4366004617079565b611575565b6104b06105c736600461724e565b6116bc565b3480156105d7575f5ffd5b506105eb6105e6366004617079565b611955565b60408051938452602084019290925290820152606001610459565b348015610611575f5ffd5b5060085461044f565b348015610625575f5ffd5b50610639610634366004617079565b6119bb565b604051610459919061739d565b348015610651575f5ffd5b506104b0611a9e565b348015610665575f5ffd5b5061044f611b5e565b348015610679575f5ffd5b506104b06105623660046173ab565b348015610693575f5ffd5b506106a76106a23660046173e5565b611b6d565b6040516104599190617403565b3480156106bf575f5ffd5b506104b06106ce36600461745d565b611ceb565b3480156106de575f5ffd5b506104b06106ed366004617079565b611d3b565b3480156106fd575f5ffd5b5061044f61070c3660046170e9565b611e00565b6104b061071f366004617478565b611e63565b34801561072f575f5ffd5b506105306002600160a01b0381565b6104b0611ee9565b348015610751575f5ffd5b506107656107603660046174f0565b611f64565b604051610459919061754e565b34801561077d575f5ffd5b5061079161078c3660046170d2565b6121f9565b604080519586526001600160401b03909416602086015263ffffffff9283169385019390935216606083015260ff16608082015260a001610459565b3480156107d8575f5ffd5b506104816107e7366004617079565b61224d565b3480156107f7575f5ffd5b506104b0612273565b34801561080b575f5ffd5b506104b061081a3660046173ab565b612285565b6104b061082d366004617079565b61229f565b34801561083d575f5ffd5b5061044f61084c366004617079565b602f6020525f908152604090205481565b348015610868575f5ffd5b5061044f6108773660046170d2565b612598565b348015610887575f5ffd5b506030546104819060ff1681565b3480156108a0575f5ffd5b506107916108af3660046170d2565b6125ed565b3480156108bf575f5ffd5b50600d54610100900460ff16610481565b3480156108db575f5ffd5b506104b06108ea3660046175bf565b6125fc565b3480156108fa575f5ffd5b506105306109093660046170d2565b612703565b348015610919575f5ffd5b5061092261270d565b60405160ff9091168152602001610459565b34801561093f575f5ffd5b506104b061094e366004617079565b61271f565b34801561095e575f5ffd5b5061048161096d3660046175e0565b61277d565b34801561097d575f5ffd5b5061099161098c3660046174f0565b612818565b6040516104599190617612565b3480156109a9575f5ffd5b506104816109b8366004617079565b61296c565b3480156109c8575f5ffd5b5061044f6109d7366004617079565b6129f0565b3480156109e7575f5ffd5b506104b0612a35565b3480156109fb575f5ffd5b5061044f610a0a366004617079565b612a46565b348015610a1a575f5ffd5b506104b0610a29366004617675565b612a88565b348015610a39575f5ffd5b50610a42612bfd565b604051610459919081518152602080830151908201526040808301519082015260609182015163ffffffff169181019190915260800190565b348015610a86575f5ffd5b506104b0612c7a565b348015610a9a575f5ffd5b50610aa3612c8a565b60405161045997969594939291906176e4565b348015610ac1575f5ffd5b506105305f5160206180a85f395f51905f5281565b348015610ae1575f5ffd5b506104b0610af0366004617079565b612cf1565b348015610b00575f5ffd5b50610b14610b0f3660046173e5565b612da1565b604051610459919061777a565b348015610b2c575f5ffd5b50600d546201000090046001600160a01b0316610530565b348015610b4f575f5ffd5b506104d1612db5565b348015610b63575f5ffd5b506106a7610b723660046174f0565b612dc4565b348015610b82575f5ffd5b506104b061056236600461778c565b348015610b9c575f5ffd5b50610a42610bab3660046177d1565b612e7d565b348015610bbb575f5ffd5b50610b14612ef7565b348015610bcf575f5ffd5b506104b0612f03565b348015610be3575f5ffd5b5061044f610bf23660046177ea565b613173565b348015610c02575f5ffd5b506104b0613254565b348015610c16575f5ffd5b506104b0610c2536600461784b565b61336d565b348015610c35575f5ffd5b50600d54600160b01b900463ffffffff1660405163ffffffff9091168152602001610459565b348015610c66575f5ffd5b50610765613385565b348015610c7a575f5ffd5b50610cc4610c89366004617079565b602e6020525f90815260409020805460019091015460ff821691610100810463ffffffff1691600160281b9091046001600160a01b03169084565b6040805160ff909516855263ffffffff90931660208501526001600160a01b03909116918301919091526060820152608001610459565b348015610d06575f5ffd5b50610922610d153660046178ae565b613492565b348015610d25575f5ffd5b506104b06135b1565b348015610d39575f5ffd5b506104d1610d483660046170d2565b613646565b6104b0610d5b3660046178c7565b6136b6565b348015610d6b575f5ffd5b50610481610d7a3660046178f8565b613b9b565b348015610d8a575f5ffd5b50600d54600160d81b900461ffff1660405161ffff9091168152602001610459565b348015610db7575f5ffd5b506104b0610dc63660046178c7565b613bc8565b348015610dd6575f5ffd5b506104b0610de5366004617079565b613c48565b348015610df5575f5ffd5b506104b0610e0436600461778c565b613c82565b348015610e14575f5ffd5b50610e81610e23366004617079565b600f6020525f90815260409020546001600160a01b0381169063ffffffff600160a01b8204811691600160c01b81049091169060ff600160e01b8204811691600160e81b8104821691600160f01b8204811691600160f81b90041687565b6040516104599796959493929190617920565b5f6001600160e01b0319821663780e9d6360e01b1480610eb85750610eb882613d6d565b92915050565b336002600160a01b0314610eec57604051637eb3357160e01b81523360048201526024015b60405180910390fd5b5f5b8181101561104b5736838383818110610f0957610f09617973565b6040029190910191505f9050610f226020830183617079565b90506001600160a01b0381161580610f4257506001600160a01b03818116145b15610f4e575050611043565b610f5e6109b86020840184617079565b15610f6a575050611043565b60208201803590600b905f90610f809086617079565b6001600160a01b03166001600160a01b031681526020019081526020015f20541115610ff45760208201803590600b905f90610fbc9086617079565b6001600160a01b03166001600160a01b031681526020019081526020015f205f828254610fe9919061799b565b909155506110099050565b6110096110046020840184617079565b613dbc565b7f11a09f9b32440d896abff7453bf53f8b26ffcb18dae4dca227f7a76e2acc3a648260405161103891906179ae565b60405180910390a150505b600101610eee565b505050565b6001600160a01b0381165f90815260296020526040812080546060929190611077906179d7565b80601f01602080910402602001604051908101604052809291908181526020018280546110a3906179d7565b80156110ee5780601f106110c5576101008083540402835291602001916110ee565b820191905f5260205f20905b8154815290600101906020018083116110d157829003601f168201915b5050505050905080515f03610eb857604051635f7ba20d60e11b81526001600160a01b0384166004820152602401610ee3565b60605f805461112f906179d7565b80601f016020809104026020016040519081016040528092919081815260200182805461115b906179d7565b80156111a65780601f1061117d576101008083540402835291602001916111a6565b820191905f5260205f20905b81548152906001019060200180831161118957829003601f168201915b5050505050905090565b6111b8613eea565b604051627b8a6760e11b8152600481018290523360248201525f5160206180a85f395f51905f529062f714ce906044015f604051808303815f87803b1580156111ff575f5ffd5b505af1158015611211573d5f5f3e3d5ffd5b5050505050565b5f61122282613f1e565b505f828152600460205260409020546001600160a01b0316610eb8565b60405163dc8d8db760e01b815260040160405180910390fd5b336002600160a01b031461128157604051637eb3357160e01b8152336004820152602401610ee3565b5f80826001600160401b0381111561129b5761129b61714e565b6040519080825280602002602001820160405280156112c4578160200160208202803683370190505b5090505f5b8381101561142d57368585838181106112e4576112e4617973565b905060400201905080602001355f036112fd5750611425565b5f61130b6020830183617079565b90506001600160a01b038116158061132b57506001600160a01b03818116145b15611337575050611425565b6113476109b86020840184617079565b15611353575050611425565b5f600f816113646020860186617079565b6001600160a01b0316815260208082019290925260409081015f90812054600160f01b900460ff16808252600a8452918120549193509091600b9082906113ad90880188617079565b6001600160a01b03166001600160a01b031681526020019081526020015f205490505f8282106113dd57826113df565b815b90505f6113f0602088013583617a0f565b90506113fc818b617a26565b99508089898151811061141157611411617973565b602002602001018181525050505050505050505b6001016112c9565b50815f0361143b5750505050565b5f611444613385565b6020015190505f600e54826114599190617a26565b90505f5f5b86811015611514575f8686838151811061147a5761147a617973565b60200260200101518561148d9190617a0f565b6114979190617a4d565b9050801561150b5780600b5f8b8b868181106114b5576114b5617973565b6114cb9260206040909202019081019150617079565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546114f89190617a26565b9091555061150890508184617a26565b92505b5060010161145e565b5061151f818361799b565b600e5550505050505b5050565b611534613f56565b61153d33613f7f565b50611549336001613fed565b335f908152600f60205260409020600d54611572908290600160b01b900463ffffffff16614053565b50565b61157d613f56565b3068929eee149b4bd21268540361159b5763ab143c065f526004601cfd5b3068929eee149b4bd21268556115b0816140b8565b506001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b900490951691850191909152600101546060840152900361162857604051636c4da32160e11b815260040160405180910390fd5b6001600160a01b0382165f908152602e6020526040812080546001600160c81b03191681556001015561165c602c83614119565b506060810151156116795761167981604001518260600151614134565b6040516001600160a01b038316907fc3b65b615a42c44083fae01d75939ba9640ffd6023e130bfc06092d992560d1f905f90a2503868929eee149b4bd212685550565b6116c4613f56565b5f61170586868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061421592505050565b90505f611710613385565b60a0015190505f61172134836143b1565b905061172c87613f7f565b50611737875f613fed565b6001600160a01b0387165f908152600c60205260409020600201546001600160401b03600160a81b9091041661177c600d546001600160a01b03620100009091041690565b6001600160a01b0316336001600160a01b03161461185157844211156117b8576040516304adae2760e21b815260048101869052602401610ee3565b5f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b973858a3387868b6040516020016117f69796959493929190617a60565b6040516020818303038152906040528051906020012090505f611818826143ec565b90506118268a828b8b614502565b61184e57604051633b4f6e2b60e21b81526001600160a01b038b166004820152602401610ee3565b50505b6040518060a00160405280858152602001896001600160a01b03168152602001336001600160a01b031681526020018460ff1681526020018260016118969190617aa7565b6001600160401b039081169091526001600160a01b038a81165f908152600c602090815260409182902085518155908501516001820180546001600160a01b03191691851691909117905590840151600290910180546060860151608090960151929093166001600160a81b031990931692909217600160a01b60ff909516949094029390931767ffffffffffffffff60a81b1916600160a81b93909216929092021790556119488b8b8a86866145d5565b5050505050505050505050565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a909252822054829182918261199487836147b1565b6001600160a01b03979097165f908152600b60205260409020549791969550909350505050565b6119c3616f73565b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff166119f5576119f383613f7f565b505b6040805160e08101825282546001600160a01b038116825263ffffffff600160a01b820481166020840152600160c01b82041692820192909252908290606083019060ff600160e01b909104166006811115611a5357611a536172fd565b6006811115611a6457611a646172fd565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101529392505050565b611aa6613f56565b611aaf33613f7f565b505f611aba602b5490565b600d549091505f90601190600160d01b900460ff1660048110611adf57611adf617973565b60030201549050611af082826147ea565b611afb336003613fed565b335f908152600f60205260409020600d54815463ffffffff600160b01b909204821691600160a01b90910416811015611b4f57604051634fadd4d360e11b815263ffffffff82166004820152602401610ee3565b611b5882614827565b50505050565b5f611b68602b5490565b905090565b6060611b7882614879565b5f611b82836148c9565b90505f81516001600160401b03811115611b9e57611b9e61714e565b604051908082528060200260200182016040528015611bd757816020015b611bc4616f73565b815260200190600190039081611bbc5790505b5090505f5b8251811015611ce357600f5f848381518110611bfa57611bfa617973565b6020908102919091018101516001600160a01b0390811683528282019390935260409182015f20825160e0810184528154948516815263ffffffff600160a01b8604811693820193909352600160c01b85049092169282019290925291606083019060ff600160e01b909104166006811115611c7857611c786172fd565b6006811115611c8957611c896172fd565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101528251839083908110611cd057611cd0617973565b6020908102919091010152600101611bdc565b509392505050565b611cf3613eea565b6030805460ff19168215159081179091556040519081527f52ad987b0fca51d9a6d5e0bbc656d0e3f616cff09727bf584c3275def38c4f54906020015b60405180910390a150565b611d43613f56565b3068929eee149b4bd212685403611d615763ab143c065f526004601cfd5b3068929eee149b4bd21268555f611d77826140b8565b6001600160a01b0383165f908152600f6020526040812054919250600160f01b90910460ff1690611da98484846148fb565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051611de691815260200190565b60405180910390a25050503868929eee149b4bd212685550565b5f611e0a836129f0565b8210611e3b5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610ee3565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b611e6b613f56565b611eab813385858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061421592505050565b505f611eb5613385565b60a0015190505f611ec634836143b1565b9050611ed133613f7f565b50611edc335f613fed565b61121185853385856145d5565b611ef1613eea565b6040515f905f5160206180a85f395f51905f529034908381818185875af1925050503d805f8114611f3d576040519150601f19603f3d011682016040523d82523d5f602084013e611f42565b606091505b505090508061157257604051630b567ce360e31b815260040160405180910390fd5b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d54600160b01b900463ffffffff16611fb0816002617ac6565b63ffffffff168363ffffffff161180611ff0575060038163ffffffff1610158015611ff05750611fe1600382617ae2565b63ffffffff168363ffffffff16105b1561201657604051634fadd4d360e11b815263ffffffff84166004820152602401610ee3565b600d54600160d01b900460ff1663ffffffff8281169085161115612135575f6120408584846149a9565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561209957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161207b575b505050918352505060018201546020808301919091526002928301546001600160401b03811660408085019190915263ffffffff600160401b830481166060860152600160601b8304811660808087019190915260ff600160801b909404841660a096870152600d549093165f818152600a86529290922095860154938701939093526003909401549091169084015282015295945050505050565b612140848383614a33565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561219957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161217b575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152949350505050565b60118160048110612208575f80fd5b6003020160018101546002909101549091506001600160401b03811690600160401b810463ffffffff90811691600160601b810490911690600160801b900460ff1685565b6001600160a01b038082165f908152600c60205260408120600201549091161515610eb8565b61227b613eea565b612283614ad4565b565b61104b83838360405180602001604052805f81525061336d565b6122a7613f56565b6122b081613f7f565b50600d546201000090046001600160a01b03166001600160a01b0316336001600160a01b0316146123585760305460ff16156122ff57604051630a06fea760e01b815260040160405180910390fd5b5f61230982614b27565b9050336001600160a01b0383161480159061232d5750336001600160a01b03821614155b156123565760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b505b6001600160a01b0381165f908152600f6020526040902054600160e01b900460ff16600181600681111561238e5761238e6172fd565b141580156123ae575060028160068111156123ab576123ab6172fd565b14155b80156123cc575060038160068111156123c9576123c96172fd565b14155b156123ec5780604051633ba7bf8960e11b8152600401610ee39190617afe565b6001600160a01b0382165f818152600f6020908152604080832054600160f01b900460ff16808452600a835281842054948452600b9092529091205490919081811061246657604051630ea9c27360e01b81526001600160a01b03861660048201526024810182905260ff84166044820152606401610ee3565b5f612471828461799b565b90508034146124ad576040516315de715960e21b81526001600160a01b038716600482015234602482015260ff85166044820152606401610ee3565b6001600160a01b0386165f908152600b6020526040812080548392906124d4908490617a26565b90915550506040515f905f5160206180a85f395f51905f529034908381818185875af1925050503d805f8114612525576040519150601f19603f3d011682016040523d82523d5f602084013e61252a565b606091505b505090508061254c57604051630b567ce360e31b815260040160405180910390fd5b866001600160a01b03167fe27d5554eb05db70d1fa64400b6d5aee0f805adfbc7c9c3785743c9a287db8378360405161258791815260200190565b60405180910390a250505050505050565b5f6125a260085490565b82106125ca5760405163295f44f760e21b81525f600482015260248101839052604401610ee3565b600882815481106125dd576125dd617973565b905f5260205f2001549050919050565b601d8160048110612208575f80fd5b612604613eea565b8061ffff165f0361265757600d54601190600160d01b900460ff166004811061262f5761262f617973565b6003020154604051635700689f60e11b815260048101919091525f6024820152604401610ee3565b5f612661602b5490565b9050808261ffff16111561269557604051635700689f60e11b81526004810182905261ffff83166024820152604401610ee3565b600d805461ffff848116600160d81b81810261ffff60d81b1985161790945560408051949093049091168084526020840191909152908201839052907f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505050565b5f610eb882613f1e565b5f612716613385565b60a00151905090565b612727613eea565b612730816129f0565b15158061274157506127418161296c565b1561276a57604051639fb0877960e01b81526001600160a01b0382166004820152602401610ee3565b611572816001600160a01b038116614b56565b5f6060821461278d57505f610eb8565b5f6127cc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614bb792505050565b5f818152601060205260409020549091506001600160a01b0316806127f5575f92505050610eb8565b6127fe8161296c565b1561280d575f92505050610eb8565b506001949350505050565b60605f61282483611f64565b5f015190505f81516001600160401b038111156128435761284361714e565b60405190808252806020026020018201604052801561287657816020015b60608152602001906001900390816128615790505b5090505f5b8151811015611ce35760295f84838151811061289957612899617973565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2080546128cb906179d7565b80601f01602080910402602001604051908101604052809291908181526020018280546128f7906179d7565b80156129425780601f1061291957610100808354040283529160200191612942565b820191905f5260205f20905b81548152906001019060200180831161292557829003601f168201915b505050505082828151811061295957612959617973565b602090810291909101015260010161287b565b5f61297f6001600160a01b038316614be5565b1561298b57505f919050565b5f6001600160a01b0383165f908152600f6020526040902054600160e01b900460ff1660068111156129bf576129bf6172fd565b036129cb57505f919050565b506001600160a01b03165f908152600f6020526040902054600160e81b900460ff1690565b5f6001600160a01b038216612a1a576040516322718ad960e21b81525f6004820152602401610ee3565b506001600160a01b03165f9081526003602052604090205490565b612a3d613eea565b6122835f614c38565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a909252822054612a8084826147b1565b949350505050565b336002600160a01b0314612ab157604051637eb3357160e01b8152336004820152602401610ee3565b612abb8282614c93565b612ac3614d6b565b600d54600160d81b900461ffff168114612b0757600d54604051635700689f60e11b8152600160d81b90910461ffff16600482015260248101829052604401610ee3565b5f5f5f5f612b468686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506151a692505050565b9350935093509350612b59868686615540565b612b6b612b65602b5490565b866147ea565b7fd1a5032a9ae65ebe520eba7974025750af3d884b6ab6047dad04dcf7006ab3856040518060c00160405280838152602001858152602001436001612bb09190617a26565b6001600160401b0316815263ffffffff80881660208301528516604080830191909152600d5460ff1660609092019190915251612bed919061754e565b60405180910390a1505050505050565b612c2a60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b50600d5460ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b612c82613eea565b612283615781565b600f60f81b6060805f808083612cdf60408051808201825260148152732a32b631b7b4b71029ba30b5b2a6b0b730b3b2b960611b602080830191909152825180840190935260018352603160f81b9083015291565b97989097965046955030945091925090565b612cf9613eea565b612d028161296c565b15612d23576006604051633ba7bf8960e11b8152600401610ee39190617afe565b612d2c81613f7f565b505f6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff166006811115612d6157612d616172fd565b03612d98576001600160a01b0381165f908152600f60205260409020612d86906157c0565b6115726001600160a01b03821661581e565b61157281613dbc565b6060612dac82614879565b610eb8826148c9565b60606001805461112f906179d7565b60605f612dd083611f64565b5f015190505f81516001600160401b03811115612def57612def61714e565b604051908082528060200260200182016040528015612e2857816020015b612e15616f73565b815260200190600190039081612e0d5790505b5090505f5b8151811015611ce357612e58838281518110612e4b57612e4b617973565b60200260200101516119bb565b828281518110612e6a57612e6a617973565b6020908102919091010152600101612e2d565b612eaa60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b5060ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b6060611b68602c615856565b336002600160a01b0314612f2c57604051637eb3357160e01b8152336004820152602401610ee3565b5f612f3660085490565b90505f5f5b82811015613135575f612f5061090983612598565b6001600160a01b0381165f90815260296020526040812080549293509091612f77906179d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa3906179d7565b8015612fee5780601f10612fc557610100808354040283529160200191612fee565b820191905f5260205f20905b815481529060010190602001808311612fd157829003601f168201915b5050505050905080516060036130625780516020808301919091205f9081526010918290526040812080546001600160a01b031916905583919061303184614bb7565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff16156130925750505061312d565b8054600160e01b900460ff165f8160068111156130b1576130b16172fd565b14806130ce575060068160068111156130cc576130cc6172fd565b145b156130dc575050505061312d565b61310d84602a5f8460068111156130f5576130f56172fd565b60ff16815260208101919091526040015f2090615862565b5061311781615876565b156131285761312586617b0c565b95505b505050505b600101612f3b565b50602b8190556040518181527fa5fe2e69fcd48b9dbe563588b5da97937ef9046641db65c59b8d49a20d75bdcc906020015b60405180910390a15050565b5f61317d84613f7f565b5084516060146131a0576040516333a234f960e11b815260040160405180910390fd5b5f6131a9613385565b60a001516001600160a01b0386165f908152600c6020526040812060020154919250600160a81b9091046001600160401b0316906131e688614bb7565b90505f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b97382898987878b6040516020016132269796959493929190617a60565b604051602081830303815290604052805190602001209050613247816143ec565b9998505050505050505050565b61325c613f56565b3068929eee149b4bd21268540361327a5763ab143c065f526004601cfd5b3068929eee149b4bd2126855335f908152602f6020526040812054908190036132b65760405163183dfd8b60e21b815260040160405180910390fd5b335f818152602f602052604080822082905551634875485760e11b8152600481019290925260248201525f5160206180a85f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015613311575f5ffd5b505af1158015613323573d5f5f3e3d5ffd5b50506040518481523393507f358fe4192934d3bf28ae181feda1f4bd08ca67f5e2fad55582cce5eb67304ae99250602001905060405180910390a2503868929eee149b4bd2126855565b61337884848461123f565b611b5833858585856158c9565b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d546133dc90600160b01b810463ffffffff16908190600160d01b900460ff16614a33565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561343557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613417575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152919050565b5f61349b613eea565b6134a3613f56565b6134b360808301606084016174f0565b63ffffffff165f036134f1576134cf60808301606084016174f0565b604051630c6e911360e41b815263ffffffff9091166004820152602401610ee3565b600d80545f919082906135069060ff16617b24565b825460ff8083166101009490940a848102910219909116179092555f908152600a60205260409020909150839061353d8282617b42565b505060ff81167fe99633c5fc9a4b39f3a3d7835a821420f9d4d6c5bfa62be2fcf1fde156115eeb8435602086013560408701356135806080890160608a016174f0565b6040805194855260208501939093529183015263ffffffff16606082015260800160405180910390a290505b919050565b6135ba33613f7f565b50335f908152600c6020526040812060020180546015906135ea90600160a81b90046001600160401b0316617b85565b82546001600160401b038083166101009490940a8481029102199091161790925560405190815290915033907f2372996d0929efe8a23b6f30910b8047be7f973b1bfa8bf5ef6dbe702521591f9060200160405180910390a250565b606061365182613f1e565b505f61368c61365f846159f0565b613667615a9e565b604051602001613678929190617bbd565b604051602081830303815290604052615ae8565b90508060405160200161369f9190617cac565b604051602081830303815290604052915050919050565b6136be613f56565b3068929eee149b4bd2126854036136dc5763ab143c065f526004601cfd5b3068929eee149b4bd21268555f6136f2836140b8565b6001600160a01b0384165f908152600f60205260409020805491925090600160e01b900460ff16600181600681111561372d5761372d6172fd565b1415801561374d5750600281600681111561374a5761374a6172fd565b14155b801561376b57506003816006811115613768576137686172fd565b14155b1561378b5780604051633ba7bf8960e11b8152600401610ee39190617afe565b815460ff600160f01b9091048116908516811015806137b25750600d5460ff908116908616115b156137dd57604051633abb443b60e21b815260ff808316600483015286166024820152604401610ee3565b60ff8082165f908152600a602052604080822054928816825281205490828211613807575f613811565b613811838361799b565b90508034146138355760405163222d164360e21b8152346004820152602401610ee3565b6001856006811115613849576138496172fd565b03613966578015613886576001600160a01b0389165f908152600b60205260408120805483929061387b908490617a26565b9091555061389a9050565b8282101561389a5761389a89888585615b0e565b855460ff60f01b1916600160f01b60ff8a16021786556001600160a01b03808a165f908152600c60205260409020600201541615613903576001600160a01b0389165f908152600c60205260409020600201805460ff60a01b1916600160a01b60ff8b16021790555b6040805160ff80871682528a166020820152908101849052606081018390526001600160a01b038a16907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a250505050505050613b8b565b5f602e5f8b6001600160a01b03166001600160a01b031681526020019081526020015f206040518060800160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160059054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481525050905060405180608001604052808a60ff168152602001600d60169054906101000a900463ffffffff1663ffffffff168152602001336001600160a01b0316815260200183815250602e5f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548163ffffffff021916908363ffffffff1602179055506040820151815f0160056101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160010155905050613b088a602c61586290919063ffffffff16565b50606081015115613b2557613b2581604001518260600151614134565b600d546040805160ff8c168152600160b01b90920463ffffffff16602083015281018390526001600160a01b038b16907fdffa95238a907cf8b6360a883f195928a82c8d7746dfe6fca84936929024a9d59060600160405180910390a250505050505050505b3868929eee149b4bd21268555050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b613bd0613eea565b613bd982613f7f565b506001600160a01b0382165f818152600f602090815260409182902080546001600160f81b0316600160f81b60ff87169081029190911790915591519182527ffa96cc66d1772e5646f86e374867e4e32b5b448b2aadb331568e34c2d063e45591015b60405180910390a25050565b613c50613eea565b6001600160a01b038116613c7957604051631e4fbdf760e01b81525f6004820152602401610ee3565b61157281614c38565b613c8a613f56565b3068929eee149b4bd212685403613ca85763ab143c065f526004601cfd5b3068929eee149b4bd21268555f613cbe836140b8565b6001600160a01b0384165f908152600f60205260409020909150613ce181615c7a565b613d00578060405163c11d33f760e01b8152600401610ee39190617cdd565b613d09816157c0565b5f613d15858486615d13565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051613d5291815260200190565b60405180910390a25050503868929eee149b4bd21268555050565b5f6001600160e01b031982166380ac58cd60e01b1480613d9d57506001600160e01b03198216635b5e139f60e01b145b80610eb857506301ffc9a760e01b6001600160e01b0319831614610eb8565b6001600160a01b0381165f908152600f602052604090208054602b54600160e01b90910460ff1690613ded82615876565b15613e0057613dfd60018261799b565b90505b613e0a8482615ef5565b5f613e1485611955565b506001600160a01b0387165f908152600b60205260408082208290555191935091505f5160206180a85f395f51905f529083908381818185875af1925050503d805f8114613e7d576040519150601f19603f3d011682016040523d82523d5f602084013e613e82565b606091505b5050905080613ea457604051630b567ce360e31b815260040160405180910390fd5b600d54613ebf908690600160b01b900463ffffffff1661602e565b613ec8856157c0565b5f613ed287614b27565b9050613ee087826001615d13565b5050505050505050565b600d546001600160a01b03620100009091041633146122835760405163118cdaa760e01b8152336004820152602401610ee3565b5f818152600260205260408120546001600160a01b031680610eb857604051637e27328960e01b815260048101849052602401610ee3565b600d54610100900460ff16156122835760405163d93c066560e01b815260040160405180910390fd5b5f6001600160a01b038216613f9381614be5565b613fb35760405163ed15e6cf60e01b815260048101829052602401610ee3565b826001600160a01b0316613fc682612703565b6001600160a01b031614610eb8576040516330fa89ab60e11b815260040160405180910390fd5b6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff16816006811115614021576140216172fd565b816006811115614033576140336172fd565b1461104b5780604051633ba7bf8960e11b8152600401610ee39190617afe565b61405e816001617ac6565b825463ffffffff91909116600160a01b0263ffffffff60a01b19909116178255614089826002616085565b7f44f68a196beb8e3ae6b6afe9504db62c81b4e511e987a263b4f1a9bc49c90762826040516131679190617cdd565b5f6140c282613f7f565b506140cc82614b27565b9050336001600160a01b038316148015906140f05750336001600160a01b03821614155b156135ac5760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b5f61412d836001600160a01b0384166161b4565b9392505050565b805f0361413f575050565b604051634875485760e11b81526001600160a01b03831660048201525f60248201525f5160206180a85f395f51905f52906390ea90ae90620186a09084906044015f604051808303818589803b158015614197575f5ffd5b5088f194505050505080156141aa575060015b611528576001600160a01b0382165f908152602f6020526040812080548392906141d5908490617a26565b90915550506040518181526001600160a01b038316907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb097321590602001613c3c565b5f8151606014614238576040516333a234f960e11b815260040160405180910390fd5b5f825f8151811061424b5761424b617973565b016020015160f81c905060808116158061426757506040811615155b15614285576040516333a234f960e11b815260040160405180910390fd5b5f614290848661629e565b86516040519192505f91829161b1519163a65ebb2560e01b916142b9918a908890602401617d4f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516142f79190617d87565b5f60405180830381855afa9150503d805f811461432f576040519150601f19603f3d011682016040523d82523d5f602084013e614334565b606091505b509150915081158061434857508051602014155b1561436857806040516306fe67db60e31b8152600401610ee391906170c0565b8080602001905181019061437c9190617d92565b61439b578760405163a865bb3560e01b8152600401610ee39190617dad565b6143a586886162ee565b98975050505050505050565b60ff81165f908152600a602052604081205483146143e55760405163222d164360e21b815260048101849052602401610ee3565b5090919050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f00000000000000000000000000000000000000000000000000000000000000004614166144df5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b6719010000000000005f5280601a5281603a52604260182090505f603a52919050565b5f6001600160a01b03851615612a8057604051853b614592578260408114614532576041811461455957506145cc565b60208581013560ff81901c601b0190915285356040526001600160ff1b031660605261456a565b60408501355f1a6020526040856040375b50845f526020600160805f60015afa5180871860601b3d119250505f606052806040526145cc565b631626ba7e60e01b80825285600483015260248201604081528460448401528486606485013760208160648701858b5afa90519091141691505b50949350505050565b6001600160a01b038381165f818152600f602081815260408084208054825160e08101845287815263ffffffff81860181815294820188815260608301898152608084018a905260ff8e811660a0860152600160f81b86041660c085018190529a909952969095528051935195518516600160c01b0263ffffffff60c01b1996909516600160a01b026001600160c01b031990921693909816929092179190911792831682178155925193949391839160ff60e01b191664ffffffffff60c01b1990911617600160e01b8360068111156146b1576146b16172fd565b02179055506080820151815460a084015160c09094015161ffff60e81b19909116600160e81b9215159290920260ff60f01b191691909117600160f01b60ff94851602176001600160f81b0316600160f81b93909116929092029190911790556001600160a01b0384165f908152600f60205260409020614733816001616085565b6001600160a01b0385165f908152602960205260409020614755878983617e1d565b506001600160a01b0385165f908152600b602052604090819020849055517f9d9bab592843361c508cec6cc23820609c04fe07a621d03bf04b7520759d3641906147a0908390617cdd565b60405180910390a150505050505050565b6001600160a01b0382165f908152600b6020526040812054818382116147d7575f6147e1565b6147e1848361799b565b95945050505050565b8115806147f5575080155b806147ff57508181115b1561152857604051635700689f60e11b81526004810183905260248101829052604401610ee3565b614832816004616085565b805463ffffffff60c01b191663ffffffff60c01b1781556040517f170cba9e80cc0d156bc6ed689fa1d09ee788e1000c092512ef8698454b2081ee90611d30908390617cdd565b5f81600681111561488c5761488c6172fd565b14806148a9575060068160068111156148a7576148a76172fd565b145b156115725780604051633ba7bf8960e11b8152600401610ee39190617afe565b6060610eb8602a5f8460068111156148e3576148e36172fd565b60ff1660ff1681526020019081526020015f20615856565b5f5f614907858461635e565b6001600160a01b0386165f908152600b602052604081208054929350839290919061493390849061799b565b9091555050604051634875485760e11b81526001600160a01b0385166004820152602481018290525f5160206180a85f395f51905f52906390ea90ae906044015f604051808303815f87803b15801561498a575f5ffd5b505af115801561499c573d5f5f3e3d5ffd5b5092979650505050505050565b5f806004836149b88688617ae2565b6149c29190617ed6565b6149cc9190617eef565b90505f601d8260ff16600481106149e5576149e5617973565b6003020190508563ffffffff168160020160089054906101000a900463ffffffff1663ffffffff16146147e157604051634fadd4d360e11b815263ffffffff87166004820152602401610ee3565b5f80614a3f8585617ae2565b90505f600482614a4f8683617ed6565b614a599190617f10565b614a639190617eef565b90505f60118260ff1660048110614a7c57614a7c617973565b6003020190508663ffffffff168160020160089054906101000a900463ffffffff1663ffffffff1614614aca57604051634fadd4d360e11b815263ffffffff88166004820152602401610ee3565b9695505050505050565b614adc6163be565b600d805461ff00191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038082165f908152600c60205260408120600281015491929091168061412d57509192915050565b6001600160a01b038216614b7f57604051633250574960e11b81525f6004820152602401610ee3565b5f614b8b83835f6163e6565b90506001600160a01b0381161561104b576040516339e3563760e11b81525f6004820152602401610ee3565b604080516020838101516001600160fd1b031682528284015190820152606092830151918101919091522090565b5f811580614bfa57506001600160a01b038210155b15614c1b5760405163ed15e6cf60e01b815260048101839052602401610ee3565b505f908152600260205260409020546001600160a01b0316151590565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60015b8181101561104b57828282818110614cb057614cb0617973565b9050602002016020810190614cc59190617079565b6001600160a01b03168383614cdb60018561799b565b818110614cea57614cea617973565b9050602002016020810190614cff9190617079565b6001600160a01b031610614d63578282614d1a60018461799b565b818110614d2957614d29617973565b9050602002016020810190614d3e9190617079565b60405163836e3a7d60e01b81526001600160a01b039091166004820152602401610ee3565b600101614c96565b5f614d76602c615856565b600d54909150600160b01b900463ffffffff165f805b835181101561512c575f848281518110614da857614da8617973565b6020908102919091018101516001600160a01b038082165f908152602e84526040908190208151608081018352815460ff811680835263ffffffff61010083041697830197909752600160281b900490931691830191909152600101546060820152909250901580614e3857506001600160a01b0382165f908152600f6020526040902054600160e81b900460ff165b15614e4d57614e46826164b1565b5050615124565b6001600160a01b0382165f908152600f60209081526040808320805460ff600160f01b9091048116808652600a909452828520548651909116855291909320548181108015614eb7575060018560200151614ea89190617ac6565b63ffffffff168963ffffffff16105b15614ec757505050505050615124565b6001600160a01b0386165f908152602e6020526040812080546001600160c81b031916815560010155614efb602c87614119565b505f82821115614f3c5760608601516001600160a01b0388165f908152600b602052604081208054909190614f31908490617a26565b9091555061504d9050565b5f614f47838561799b565b6001600160a01b0389165f908152600b6020526040902054909150848110614f7157819250614f86565b83811115614f8657614f83848261799b565b92505b8215615034576001600160a01b0389165f908152600b602052604081208054859290614fb390849061799b565b909155505f9050614fc38a614b27565b6001600160a01b0381165f908152602f6020526040812080549293508692909190614fef908490617a26565b90915550506040518481526001600160a01b038216907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732159060200160405180910390a2505b61503e838361799b565b615048908c617a26565b9a5050505b8551855460ff909116600160f01b0260ff60f01b199091161785556001600160a01b038781165f908152600c602052604090206002015416156150c35785516001600160a01b0388165f908152600c60205260409020600201805460ff909216600160a01b0260ff60a01b199092169190911790555b85516040805160ff808816825290921660208301528101849052606081018390526001600160a01b038816907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a2505050505050505b600101614d8c565b50801561104b576040515f905f5160206180a85f395f51905f529083908381818185875af1925050503d805f811461517f576040519150601f19603f3d011682016040523d82523d5f602084013e615184565b606091505b5050905080611b5857604051630b567ce360e31b815260040160405180910390fd5b600d545f9081908190606090600160d01b900460ff168260046151ca836001617ed6565b6151d49190617eef565b600d805460ff60d01b1916600160d01b60ff841602178082559192505f9160169061520b90600160b01b900463ffffffff16617f29565b91906101000a81548163ffffffff021916908363ffffffff160217905590505f601d8360ff166004811061524157615241617973565b6003020190505f615250612bfd565b90506040518060c00160405280838054806020026020016040519081016040528092919081815260200182805480156152b057602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311615292575b50505091835250506040808401516020830152016152cf436001617aa7565b6001600160401b0316815263ffffffff80861660208301526060808501519091166040830152600d5460ff908116919092015260119086166004811061531757615317617973565b600302015f820151815f01908161532e9190617f44565b50602082015160018201556040820151600291820180546060850151608086015160a0909601516001600160401b039094166001600160601b031990921691909117600160401b63ffffffff928316021764ffffffffff60601b1916600160601b919095160260ff60801b191693909317600160801b60ff90921691909102179091555f906004906153c1908790617ed6565b6153cb9190617eef565b90506040518060c001604052808c81526020015f81526020015f6001600160401b031681526020018560026154009190617ac6565b63ffffffff1681525f60208201819052604090910152601d60ff83166004811061542c5761542c617973565b600302015f820151815f0190816154439190617f44565b50602082810151600183015560408084015160029093018054606080870151608088015160a09098015160ff16600160801b0260ff60801b1963ffffffff998a16600160601b021664ffffffffff60601b1999909216600160401b026001600160601b03199094166001600160401b039098169790971792909217969096161793909317909255848201519285015186548351818402810184019094528084528894939192889291839183018282801561552457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311615506575b5050505050905099509950995099505050505050509193509193565b5f61554b60026148c9565b90505f5b81518110156155a9575f600f5f84848151811061556e5761556e617973565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2090506155a0816165d3565b5060010161554f565b505f6155b560046148c9565b600d54909150600160d01b900460ff165f60046155d3836001617ed6565b6155dd9190617eef565b90505f7fbd0b8371ed11e4a5f6acd1f1a0d78b3f7e6ab3473c6396c9f28027132562600c8660405160200161562992919091825260e01b6001600160e01b031916602082015260240190565b6040516020818303038152906040528051906020012090506156b860118460ff166004811061565a5761565a617973565b600302018054604080516020808402820181019092528281529291908301828280156156ad57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161568f575b50505050508261660d565b6156d1601d8360ff166004811061565a5761565a617973565b61570e8888808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525085925061660d915050565b5f5b8451811015615776575f85828151811061572c5761572c617973565b60200260200101519050615740818461665d565b1561574b575061576e565b6001600160a01b0381165f908152600f6020526040902061576c908961602e565b505b600101615710565b505050505050505050565b615789613f56565b600d805461ff0019166101001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614b0a3390565b6157cb816006616085565b805460ff60e81b198116600160e81b1782556157ef906001600160a01b03166164b1565b7ffab16134cb74fff6e7d137bf93f6b2ab4c1c61cbe53dad2c8cb57744353bd39b81604051611d309190617cdd565b5f61582a5f835f6163e6565b90506001600160a01b03811661152857604051637e27328960e01b815260048101839052602401610ee3565b60605f61412d8361667a565b5f61412d836001600160a01b0384166166d3565b5f600382600681111561588b5761588b6172fd565b14806158a8575060048260068111156158a6576158a66172fd565b145b80610eb8575060028260068111156158c2576158c26172fd565b1492915050565b6001600160a01b0383163b1561121157604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061590b908890889087908790600401617fc8565b6020604051808303815f875af1925050508015615945575060408051601f3d908101601f1916820190925261594291810190617ffa565b60015b6159ac573d808015615972576040519150601f19603f3d011682016040523d82523d5f602084013e615977565b606091505b5080515f036159a457604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b146159e857604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b505050505050565b60605f6159fc8361671f565b6028602282012090915060601c60295b6001811115615a9557600782600f16118015615a4157506060838281518110615a3757615a37617973565b016020015160f81c115b15615a7e57602060f81b838281518110615a5d57615a5d617973565b0160200180516001600160f81b0319908116909218909116905f82901a9053505b60049190911c90615a8e81618015565b9050615a0c565b50909392505050565b6060615ac46040518061052001604052806104ed81526020016180c86104ed9139615ae8565b604051602001615ad4919061802a565b604051602081830303815290604052905090565b6060610eb8826040518060600160405280604081526020016185b5604091396001616735565b5f615b19828461799b565b6001600160a01b0386165f908152600b6020526040812054919250848210615b42575081615b57565b83821115615b5757615b54848361799b565b90505b8015615bf4576001600160a01b0387165f908152600b602052604081208054839290615b8490849061799b565b9091555050604051634875485760e11b81526001600160a01b03871660048201525f60248201525f5160206180a85f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615bdc575f5ffd5b505af1158015615bee573d5f5f3e3d5ffd5b50505050505b5f615bff828561799b565b90508015613ee0576040515f905f5160206180a85f395f51905f529083908381818185875af1925050503d805f8114615c53576040519150601f19603f3d011682016040523d82523d5f602084013e615c58565b606091505b505090508061577657604051630b567ce360e31b815260040160405180910390fd5b80545f90600160e01b900460ff166001816006811115615c9c57615c9c6172fd565b03615caa5750600192915050565b82545f90615cc690600160c01b900463ffffffff166001617ac6565b90506005826006811115615cdc57615cdc6172fd565b148015615cfb5750600d5463ffffffff808316600160b01b9092041610155b15615d0a575060019392505050565b505f9392505050565b5f615d266001600160a01b03851661581e565b6008545f03615d48576040516315ae672760e01b815260040160405180910390fd5b6001600160a01b0384165f908152600c602052604081208181556001810180546001600160a01b031916905560020180546001600160e81b03191690558080615d9087611955565b925092509250825f03615da85782935050505061412d565b6001600160a01b0387165f908152600b60205260408120819055828410615dd0575081615e4d565b50825f5f5160206180a85f395f51905f52615deb838661799b565b6040515f81818185875af1925050503d805f8114615e24576040519150601f19603f3d011682016040523d82523d5f602084013e615e29565b606091505b5050905080615e4b57604051630b567ce360e31b815260040160405180910390fd5b505b858015615e6757505f5160206180a85f395f51905f523182115b15615e7e575f5160206180a85f395f51905f523191505b604051634875485760e11b81526001600160a01b0388166004820152602481018390525f5160206180a85f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615ed2575f5ffd5b505af1158015615ee4573d5f5f3e3d5ffd5b505050505081816143a59190617a26565b600d54600160b01b810463ffffffff1690600160d01b900460ff165f615f1c838084614a33565b9050615f2881866168af565b508054615f3585826147ea565b5f615f41856001617ac6565b90505f615f4f8287876149a9565b9050615f5b81896168af565b5080549250615f6a87846147ea565b5f615f76876002617ac6565b90505f615f848289896149a9565b9050615f90818b6168af565b5080549450615f9f89866147ea565b600d54600160d81b900461ffff1689101561602257600d805461ffff8b8116600160d81b90810261ffff60d81b1984161793849055604080519382900483168085529190940490911660208301529181018b90527f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505b50505050505050505050565b616039826005616085565b815463ffffffff60c01b1916600160c01b63ffffffff8316021782556040517f727bfc4079207401298f48a3f1a92c9b40d83e086fe5b584a7b0644fdbdb56ee90613167908490617cdd565b81546001600160a01b03811690600160e01b900460ff166160cd82602a5f8460068111156160b5576160b56172fd565b60ff16815260208101919091526040015f2090614119565b505f8360068111156160e1576160e16172fd565b14158015616101575060068360068111156160fe576160fe6172fd565b14155b156161215761611f82602a5f8660068111156130f5576130f56172fd565b505b5f61612b82615876565b90505f61613785615876565b9050818015616144575080155b1561616057602b5f815461615790618015565b90915550616183565b8115801561616b5750805b1561618357602b5f815461617e90617b0c565b909155505b85548590879060ff60e01b1916600160e01b8360068111156161a7576161a76172fd565b0217905550505050505050565b5f818152600183016020526040812054801561628e575f6161d660018361799b565b85549091505f906161e99060019061799b565b9050808214616248575f865f01828154811061620757616207617973565b905f5260205f200154905080875f01848154811061622757616227617973565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806162595761625961805b565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610eb8565b5f915050610eb8565b5092915050565b606082516060146162c2576040516333a234f960e11b815260040160405180910390fd5b6040516162d7905f908590859060200161806f565b604051602081830303815290604052905092915050565b5f6162f883614bb7565b5f818152601060205260409020549091506001600160a01b03161561633057604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b60ff81165f908152600a60205260408120548161637b85836147b1565b905080158061639d575060ff84165f908152600a602052604090206001015481105b15612a8057604051633737b70960e11b815260048101829052602401610ee3565b600d54610100900460ff1661228357604051638dfc202b60e01b815260040160405180910390fd5b5f5f6163f38585856169b4565b90506001600160a01b03811661644f5761644a84600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b616472565b846001600160a01b0316816001600160a01b031614616472576164728185616aa6565b6001600160a01b03851661648e5761648984616b23565b612a80565b846001600160a01b0316816001600160a01b031614612a8057612a808585616bca565b6001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b900490951691850191909152600101546060840152900361651a5761104b602c83614119565b6001600160a01b0382165f908152602e6020526040812080546001600160c81b03191681556001015561654e602c83614119565b506060810151156115285760608101516040808301516001600160a01b03165f908152602f6020529081208054909190616589908490617a26565b9250508190555080604001516001600160a01b03167f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732158260600151604051613c3c91815260200190565b6165de816003616085565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b81604051611d309190617cdd565b5f5b825181101561104b57616655600161664f61664c86858151811061663557616635617973565b602002602001015186616c1890919063ffffffff16565b90565b90616c32565b60010161660f565b6001600160a01b0382165f9081526020829052604081205c61412d565b6060815f018054806020026020016040519081016040528092919081815260200182805480156166c757602002820191905f5260205f20905b8154815260200190600101908083116166b3575b50505050509050919050565b5f81815260018301602052604081205461671857508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610eb8565b505f610eb8565b6060610eb86001600160a01b0383166014616c39565b606083515f03616753575060408051602081019091525f815261412d565b5f82616783576003855160046167699190617a0f565b616774906002617a26565b61677e9190617a4d565b6167a8565b6003855160026167939190617a26565b61679d9190617a4d565b6167a8906004617a0f565b90505f816001600160401b038111156167c3576167c361714e565b6040519080825280601f01601f1916602001820160405280156167ed576020820181803683370190505b509050600185016020820187885189016020810180515f82525b82841015616862576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450616807565b9052505085156168a3576003885106600181146168865760028114616899576168a1565b603d6001830353603d60028303536168a1565b603d60018303535b505b50909695505050505050565b81545f90815b818110156169aa57836001600160a01b03168582815481106168d9576168d9617973565b5f918252602090912001546001600160a01b0316036169a257846168fe60018461799b565b8154811061690e5761690e617973565b905f5260205f20015f9054906101000a90046001600160a01b031685828154811061693b5761693b617973565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550848054806169765761697661805b565b5f8281526020902081015f1990810180546001600160a01b03191690550190555060019150610eb89050565b6001016168b5565b505f949350505050565b5f828152600260205260408120546001600160a01b03908116908316156169e0576169e0818486616daa565b6001600160a01b03811615616a1a576169fb5f855f5f616e0e565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615616a48576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f616ab0836129f0565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314616b05575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90616b349060019061799b565b5f8381526009602052604081205460088054939450909284908110616b5b57616b5b617973565b905f5260205f20015490508060088381548110616b7a57616b7a617973565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480616bb157616bb161805b565b600190038181905f5260205f20015f9055905550505050565b5f6001616bd6846129f0565b616be0919061799b565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03165f9081526020919091526040902090565b80825d5050565b6060825f616c48846002617a0f565b616c53906002617a26565b6001600160401b03811115616c6a57616c6a61714e565b6040519080825280601f01601f191660200182016040528015616c94576020820181803683370190505b509050600360fc1b815f81518110616cae57616cae617973565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110616cdc57616cdc617973565b60200101906001600160f81b03191690815f1a9053505f616cfe856002617a0f565b616d09906001617a26565b90505b6001811115616d80576f181899199a1a9b1b9c1cb0b131b232b360811b83600f1660108110616d3d57616d3d617973565b1a60f81b828281518110616d5357616d53617973565b60200101906001600160f81b03191690815f1a90535060049290921c91616d7981618015565b9050616d0c565b508115612a805760405163e22e27eb60e01b81526004810186905260248101859052604401610ee3565b616db5838383616f12565b61104b576001600160a01b038316616de357604051637e27328960e01b815260048101829052602401610ee3565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610ee3565b8080616e2257506001600160a01b03821615155b15616ee3575f616e3184613f1e565b90506001600160a01b03831615801590616e5d5750826001600160a01b0316816001600160a01b031614155b8015616e705750616e6e8184613b9b565b155b15616e995760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610ee3565b8115616ee15783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b03831615801590612a805750826001600160a01b0316846001600160a01b03161480616f4b5750616f4b8484613b9b565b80612a805750505f908152600460205260409020546001600160a01b03908116911614919050565b6040805160e0810182525f8082526020820181905291810182905290606082019081525f602082018190526040820181905260609091015290565b6001600160e01b031981168114611572575f5ffd5b5f60208284031215616fd3575f5ffd5b813561412d81616fae565b5f5f83601f840112616fee575f5ffd5b5081356001600160401b03811115617004575f5ffd5b6020830191508360208260061b850101111561701e575f5ffd5b9250929050565b5f5f60208385031215617036575f5ffd5b82356001600160401b0381111561704b575f5ffd5b61705785828601616fde565b90969095509350505050565b80356001600160a01b03811681146135ac575f5ffd5b5f60208284031215617089575f5ffd5b61412d82617063565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61412d6020830184617092565b5f602082840312156170e2575f5ffd5b5035919050565b5f5f604083850312156170fa575f5ffd5b61710383617063565b946020939093013593505050565b5f5f83601f840112617121575f5ffd5b5081356001600160401b03811115617137575f5ffd5b60208301915083602082850101111561701e575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112617171575f5ffd5b81356001600160401b0381111561718a5761718a61714e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156171b8576171b861714e565b6040528181528382016020018510156171cf575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156171fb575f5ffd5b604051602081016001600160401b038111828210171561721d5761721d61714e565b60405290508082356001600160401b03811115617238575f5ffd5b61724485828601617162565b8252505092915050565b5f5f5f5f5f5f5f60a0888a031215617264575f5ffd5b87356001600160401b03811115617279575f5ffd5b6172858a828b01617111565b90985096505060208801356001600160401b038111156172a3575f5ffd5b6172af8a828b016171eb565b9550506172be60408901617063565b935060608801356001600160401b038111156172d8575f5ffd5b6172e48a828b01617111565b989b979a50959894979596608090950135949350505050565b634e487b7160e01b5f52602160045260245ffd5b6007811061732d57634e487b7160e01b5f52602160045260245ffd5b9052565b60018060a01b03815116825263ffffffff602082015116602083015263ffffffff6040820151166040830152606081015161736f6060840182617311565b5060808101511515608083015260ff60a08201511660a083015260c081015161104b60c084018260ff169052565b60e08101610eb88284617331565b5f5f5f606084860312156173bd575f5ffd5b6173c684617063565b92506173d460208501617063565b929592945050506040919091013590565b5f602082840312156173f5575f5ffd5b81356007811061412d575f5ffd5b602080825282518282018190525f918401906040840190835b818110156174455761742f838551617331565b6020939093019260e0929092019160010161741c565b509095945050505050565b8015158114611572575f5ffd5b5f6020828403121561746d575f5ffd5b813561412d81617450565b5f5f5f6040848603121561748a575f5ffd5b83356001600160401b0381111561749f575f5ffd5b6174ab86828701617111565b90945092505060208401356001600160401b038111156174c9575f5ffd5b6174d5868287016171eb565b9150509250925092565b63ffffffff81168114611572575f5ffd5b5f60208284031215617500575f5ffd5b813561412d816174df565b5f8151808452602084019350602083015f5b828110156175445781516001600160a01b031686526020958601959091019060010161751d565b5093949350505050565b602081525f825160c0602084015261756960e084018261750b565b9050602084015160408401526001600160401b03604085015116606084015263ffffffff606085015116608084015263ffffffff60808501511660a084015260ff60a08501511660c08401528091505092915050565b5f602082840312156175cf575f5ffd5b813561ffff8116811461412d575f5ffd5b5f5f602083850312156175f1575f5ffd5b82356001600160401b03811115617606575f5ffd5b61705785828601617111565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561766957603f19878603018452617654858351617092565b94506020938401939190910190600101617638565b50929695505050505050565b5f5f60208385031215617686575f5ffd5b82356001600160401b0381111561769b575f5ffd5b8301601f810185136176ab575f5ffd5b80356001600160401b038111156176c0575f5ffd5b8560208260051b84010111156176d4575f5ffd5b6020919091019590945092505050565b60ff60f81b8816815260e060208201525f61770260e0830189617092565b82810360408401526177148189617092565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561776957835183526020938401939092019160010161774b565b50909b9a5050505050505050505050565b602081525f61412d602083018461750b565b5f5f6040838503121561779d575f5ffd5b6177a683617063565b915060208301356177b681617450565b809150509250929050565b803560ff811681146135ac575f5ffd5b5f602082840312156177e1575f5ffd5b61412d826177c1565b5f5f5f5f608085870312156177fd575f5ffd5b84356001600160401b03811115617812575f5ffd5b61781e87828801617162565b94505061782d60208601617063565b925061783b60408601617063565b9396929550929360600135925050565b5f5f5f5f6080858703121561785e575f5ffd5b61786785617063565b935061787560208601617063565b92506040850135915060608501356001600160401b03811115617896575f5ffd5b6178a287828801617162565b91505092959194509250565b5f60808284031280156178bf575f5ffd5b509092915050565b5f5f604083850312156178d8575f5ffd5b6178e183617063565b91506178ef602084016177c1565b90509250929050565b5f5f60408385031215617909575f5ffd5b61791283617063565b91506178ef60208401617063565b6001600160a01b038816815263ffffffff87811660208301528616604082015260e081016179516060830187617311565b931515608082015260ff92831660a0820152911660c090910152949350505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610eb857610eb8617987565b604081016001600160a01b036179c384617063565b168252602092830135929091019190915290565b600181811c908216806179eb57607f821691505b602082108103617a0957634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610eb857610eb8617987565b80820180821115610eb857610eb8617987565b634e487b7160e01b5f52601260045260245ffd5b5f82617a5b57617a5b617a39565b500490565b96875260208701959095526001600160a01b03938416604087015291909216606085015260ff90911660808401526001600160401b031660a083015260c082015260e00190565b6001600160401b038181168382160190811115610eb857610eb8617987565b63ffffffff8181168382160190811115610eb857610eb8617987565b63ffffffff8281168282160390811115610eb857610eb8617987565b60208101610eb88284617311565b5f60018201617b1d57617b1d617987565b5060010190565b5f60ff821660ff8103617b3957617b39617987565b60010192915050565b813581556020820135600182015560408201356002820155600381016060830135617b6c816174df565b815463ffffffff191663ffffffff919091161790555050565b5f6001600160401b0382166001600160401b038103617b3957617b39617987565b5f81518060208401855e5f93019283525090919050565b7f7b226e616d65223a202254656c636f696e2d4e6574776f726b20436f6e73656e8152651cdd5cd3919560d21b60208201525f617bfd6026830185617ba6565b7f222c20226465736372697074696f6e223a2022455243373231204e465420776881527f6f7365206f776e657273686970206c656467657220726570726573656e74732060208201527f746865207065726d697373696f6e65642077686974656c69737420666f72207660408201527530b634b230ba37b9399116101134b6b0b3b2911d101160511b6060820152617c986076820185617ba6565b61227d60f01b815260020195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f61412d601d830184617ba6565b81546001600160a01b038116825263ffffffff60a082901c8116602084015260c082901c16604083015260e0820190617d1f6060840160ff8360e01c16617311565b617d336080840160ff8360e81c1615159052565b60f081901c60ff1660a084015260f881901c60c0840152616297565b606081525f617d616060830186617092565b8281036020840152617d738186617092565b90508281036040840152614aca8185617092565b5f61412d8284617ba6565b5f60208284031215617da2575f5ffd5b815161412d81617450565b602081525f8251602080840152612a806040840182617092565b5f5b8281101561104b575f82820155600101617dc9565b601f82111561104b578282111561104b57805f5260205f20601f840160051c6020851015617e0957505f5b61121181601f860160051c03828401617dc7565b6001600160401b03831115617e3457617e3461714e565b617e4883617e4283546179d7565b83617dde565b5f601f841160018114617e79575f8515617e625750838201355b5f19600387901b1c1916600186901b178355611211565b5f83815260208120601f198716915b82811015617ea85786850135825560209485019460019092019101617e88565b5086821015617ec4575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60ff8181168382160190811115610eb857610eb8617987565b5f60ff831680617f0157617f01617a39565b8060ff84160691505092915050565b60ff8281168282160390811115610eb857610eb8617987565b5f63ffffffff821663ffffffff8103617b3957617b39617987565b81516001600160401b03811115617f5d57617f5d61714e565b600160401b811115617f7157617f7161714e565b815481835580821015617f9557825f528160205f2001617f9383830382617dc7565b505b5060208301825f5260205f205f5b838110156159e85782516001600160a01b031682820155602090920191600101617fa3565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614aca90830184617092565b5f6020828403121561800a575f5ffd5b815161412d81616fae565b5f8161802357618023617987565b505f190190565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081525f61412d601a830184617ba6565b634e487b7160e01b5f52603160045260245ffd5b6001600160e81b0319841681525f61808a6003830185617ba6565b60609390931b6001600160601b031916835250506014019291505056fe00000000000000000000000007a07a07a07a07a07a07a07a07a07a07a07a07a03c7376672077696474683d22373922206865696768743d223830222076696577426f783d22302030203739203830222066696c6c3d226e6f6e652220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e203c6d61736b2069643d226d61736b305f3834395f3334313722207374796c653d226d61736b2d747970653a616c70686122206d61736b556e6974733d227573657253706163654f6e5573652220783d22302220793d2230222077696474683d22373922206865696768743d223830223e203c726563742077696474683d2237382e30303522206865696768743d223830222066696c6c3d2223433443344334222f3e203c2f6d61736b3e203c67206d61736b3d2275726c28236d61736b305f3834395f3334313729223e203c7265637420783d2231372e393534362220793d2231382e33353435222077696474683d2234322e3239343322206865696768743d2234332e32393138222066696c6c3d227768697465222f3e203c7061746820643d224d37342e323336392032312e393839324337362e363930382032342e303331352037382e323338392032382e323537372037372e363937392033312e333733334c37322e343136362036312e333235334337312e3836362036342e343437352036382e393539322036372e383739382036352e393632392036382e393631324c33372e313934372037392e333334344333342e313938342038302e343135372032392e373432312037392e363239392032372e323936342037372e3538394c332e3831312035382e3030323143312e33353730382035352e39353938202d302e31393233382035312e3734313720302e3335383134382034382e363139354c352e36333935312031382e3636373443362e31393030342031352e3534353220392e30393638372031322e313132392031322e303933322031312e303331364c34302e3835393920302e3636363435334334332e38353632202d302e3431343835372034382e3331323520302e3337303930392035302e3735383320322e343131384c37342e323336392032312e393839325a4d34392e373634352033352e343336394c35302e393336342032392e333531334c33392e393531372032392e333638374c34312e3531362032312e333432344c33372e393538332032312e333432344333372e393538332032312e333432342033342e363332382032372e323930312032372e333030362033302e323031394c32362e323839392033352e343530334c33312e303933362033352e34364333312e303933362033352e34362032392e343637342034332e303032392032382e393331362034352e373835344332372e353637372035322e383638322033302e393830362035372e383933392033362e323238312035372e383933394333382e383630362035372e383933392034312e3831372035372e383933392034352e303937322035372e383933394c34362e363532342035312e313636364334362e323734322035312e313636362034332e383031332035312e313636362033392e323333362035312e313636364333352e393336342035312e313636362033362e313039392034392e333138392033362e373433312034362e303330354c33382e373833382033352e343333334c34392e373634352033352e343336395a222066696c6c3d2223313443384646222f3e203c2f673e203c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa164736f6c6343000823000a","sourceMap":"1293:74740:55:-:0;;;71253:4143;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;71496:6;2968:78:57;;;;;;;;;;;;;-1:-1:-1;;;2968:78:57;;;;;;;;;;;;;;;;-1:-1:-1;;;2968:78:57;;;3029:4;3035:6;1454:5:27;1446;:13;;;;;;:::i;:::-;-1:-1:-1;1469:7:27;:17;1479:7;1469;:17;:::i;:::-;-1:-1:-1;;3066:4:50;3028:45;;-1:-1:-1;3100:13:50;3083:30;;3124:18;;3240:23;13086:36:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13086:36:57;;;;;12973:156;3240:23:50;3340:22;;;;;;;3454:25;;;;;;;;;3489:26;;;;3525:32;;;;3737:4;3731:11;;3802:16;3792:27;;3843:12;;;3836:30;;;;3890:12;;;3883:33;3954:9;3947:4;3940:12;;3933:31;4002:9;3995:4;3988:12;;3981:31;4055:4;4042:18;;4093:34;;-1:-1:-1;;1231:7:39;:15;;-1:-1:-1;;1231:15:39;;;-1:-1:-1;;;;;;;1273:26:20;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:20;;1350:1;1322:31;;;10549:51:71;10522:18;;1322:31:20;;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;71580:25:55;;:30;;:81:::2;;;71643:11;:18;71614;:25;:47;;71580:81;:155;;;;71710:18;:25;71681:18;:25;:54;;71580:155;71563:237;;;71767:22;;-1:-1:-1::0;;;71767:22:55::2;;;;;;;;;;;71563:237;71851:14;:28;;;:33;;71883:1;71851:33:::0;71847:91:::2;;71909:28;::::0;::::2;::::0;71893:45:::2;::::0;-1:-1:-1;;;71893:45:55;;10785:10:71;10773:23;;;71893:45:55::2;::::0;::::2;10755:42:71::0;10728:18;;71893:45:55::2;10611:192:71::0;71847:91:55::2;71948:11;::::0;;;:8:::2;:11;::::0;;;:28;;:11;:28;;::::2;::::0;;;:11;:28;::::2;::::0;;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;71948:28:55::2;;::::0;;::::2;::::0;;;::::2;::::0;;72134:25;;72107:17:::2;:53:::0;;-1:-1:-1;;;;72107:53:55::2;-1:-1:-1::0;;;72107:53:55::2;::::0;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;72415:312:::2;72436:1;72431;:6;72415:312;;72458:23;72484:9;72494:1;72484:12;;;;;;;:::i;:::-;;;;72510:13;::::0;::::2;:25:::0;;72571:28:::2;::::0;::::2;::::0;-1:-1:-1;;;;;;;;72549:50:55;;;72510:25;::::2;::::0;;::::2;::::0;;;::::2;-1:-1:-1::0;;;;72549:50:55;;;;;;;;;::::2;;;::::0;;72635:28:::2;::::0;::::2;::::0;-1:-1:-1;72613:19:55;::::2;:50:::0;72484:12;-1:-1:-1;72510:25:55;72678:15:::2;72510:25:::0;72678:18:::2;::::0;::::2;;;;;:::i;:::-;;;;:26;;;:38;;;;;;;;;;;;;;;;;;72444:283;72439:3;;;;:::i;:::-;;;72415:312;;;;72776:9;72771:2487;72791:18;:25;72787:1;:29;72771:2487;;;72837:37;72877:18;72896:1;72877:21;;;;;;;;:::i;:::-;;;;;;;72837:61;;72912:21;72952:98;72977:18;72996:1;72977:21;;;;;;;;:::i;:::-;;;;;;;73000:16;:33;;;73035:11;73047:1;73035:14;;;;;;;;:::i;:::-;;;;;;;72952:24;;;:98;;:::i;:::-;73333:33:::0;;72912:138;;-1:-1:-1;;;;;;73333:49:55::2;::::0;;:136:::2;;-1:-1:-1::0;73414:33:55;;-1:-1:-1;;;;;73406:63:55;;::::2;;73333:136;73312:237;;;73509:25;;-1:-1:-1::0;;;73509:25:55::2;;;;;;;;;;;73312:237;73566:32;::::0;::::2;::::0;:45:::2;;::::0;73562:137:::2;;73651:32;::::0;::::2;::::0;73638:46:::2;::::0;-1:-1:-1;;;73638:46:55;;10785:10:71;10773:23;;;73638:46:55::2;::::0;::::2;10755:42:71::0;10728:18;;73638:46:55::2;10611:192:71::0;73562:137:55::2;73716:26;::::0;::::2;::::0;:39:::2;;::::0;73712:125:::2;;73795:26;::::0;;::::2;::::0;73782:40;;-1:-1:-1;;;73782:40:55;;10785:10:71;10773:23;;;73782:40:55::2;::::0;::::2;10755:42:71::0;10728:18;;73782:40:55::2;10611:192:71::0;73712:125:55::2;73888:22;73854:16;:30;;;:56;;;;;;;;:::i;:::-;;73850:147;;73951:16;:30;;;73937:45;;-1:-1:-1::0;;;73937:45:55::2;;;;;;;;:::i;73850:147::-;74014:26;::::0;::::2;::::0;:35:::2;74010:118;;74090:22;74076:37;;-1:-1:-1::0;;;74076:37:55::2;;;;;;;;:::i;74010:118::-;74145:29;::::0;::::2;::::0;:34:::2;;::::0;74141:129:::2;;74225:29;::::0;::::2;::::0;74206:49:::2;::::0;-1:-1:-1;;;74206:49:55;;12072:4:71;12060:17;;;74206:49:55::2;::::0;::::2;12042:36:71::0;12015:18;;74206:49:55::2;11898:186:71::0;74141:129:55::2;74359:9;74354:210;74375:1;74370;:6;74354:210;;74401:9;74411:1;74401:12;;;;;;;:::i;:::-;74429:33:::0;;74401:12:::2;::::0;;;::::2;::::0;;;::::2;:62:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;74401:62:55;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;;;;74401:62:55::2;-1:-1:-1::0;;;;;74401:62:55;;::::2;::::0;;;::::2;::::0;;74481:15:::2;74497:1:::0;74481:18:::2;::::0;::::2;;;;;:::i;:::-;74515:33:::0;;74481:18:::2;::::0;;;::::2;::::0;;;::::2;:68:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;74481:68:55;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;;;;74481:68:55::2;-1:-1:-1::0;;;;;74481:68:55;;::::2;::::0;;;::::2;::::0;;74378:3:::2;::::0;::::2;:::i;:::-;;;74354:210;;;;74626:11;74638:1;74626:14;;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;;;;;74589:33;;-1:-1:-1;;;;;74578:45:55::2;;::::0;;;:10:::2;:45:::0;;;;;;;;:62:::2;::::0;:45;:62:::2;:::i;:::-;-1:-1:-1::0;74665:33:55;;-1:-1:-1;;;;;74654:45:55;;::::2;;::::0;;;:10:::2;:45;::::0;;;;;;;;:64;;;;;;::::2;::::0;;;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;;74654:64:55::2;-1:-1:-1::0;;;;74654:64:55;;;::::2;-1:-1:-1::0;;;74654:64:55::2;-1:-1:-1::0;;;;;;74654:64:55;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;74702:16;;74654:45;;:64;;:45;;-1:-1:-1;;;;74654:64:55;-1:-1:-1;;;;74654:64:55;;;;-1:-1:-1;;;74654:64:55;::::2;::::0;::::2;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;74654:64:55::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;;74654:64:55::2;-1:-1:-1::0;;;;;74654:64:55;;;::::2;-1:-1:-1::0;;;74654:64:55::2;-1:-1:-1::0;;;;74654:64:55;::::2;;-1:-1:-1::0;;;74654:64:55::2;::::0;;;;-1:-1:-1;;;;74654:64:55;;;;;;;;;;::::2;;::::0;;;::::2;::::0;;74880:33;;74851:22:::2;-1:-1:-1::0;74831:44:55;:13:::2;:44;::::0;:83:::2;::::0;:44;;:48:::2;:83::i;:::-;-1:-1:-1::0;74974:26:55;;74937:33;;-1:-1:-1;;;;;74928:43:55;;::::2;74974:26;74928:43:::0;;;:8:::2;:43;::::0;;;;;;;:72;;;;75056:33;;75014:39;;;:24:::2;:39:::0;;;;;;:75;;-1:-1:-1;;;;;;75014:75:55::2;::::0;;;::::2;::::0;;;::::2;::::0;;75109:33;;75103:88:::2;::::0;75144:46:::2;75109:33:::0;-1:-1:-1;;;;;12706:32:57;;12617:128;75144:46:55::2;75103:5;:88::i;:::-;75211:36;75230:16;75211:36;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;72818:3:55::2;;72771:2487;;;-1:-1:-1::0;;75364:25:55;;75339:22:::2;:50:::0;-1:-1:-1;1293:74740:55;;-1:-1:-1;;1293:74740:55;2912:187:20;3004:6;;;-1:-1:-1;;;;;3020:17:20;;;3004:6;3020:17;;;-1:-1:-1;;;;;;3020:17:20;;;;;;3052:40;;3004:6;;;;;;;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;46241:2694:55:-;46437:7;46464:9;:16;46484:2;46464:22;46460:53;;46495:18;;-1:-1:-1;;;46495:18:55;;;;;;;;;;;46460:53;47339:11;47359:9;47369:1;47359:12;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;47394:4:55;47386:12;;:17;;:38;;-1:-1:-1;47415:4:55;47407:12;;:17;;47386:38;47382:69;;;47433:18;;-1:-1:-1;;;47433:18:55;;;;;;;;;;;47382:69;47917:23;47943:53;47968:9;47979:16;47943:24;:53::i;:::-;48612:15;;48562:89;;47917:79;;-1:-1:-1;48491:7:55;;;;572:42:59;;-1:-1:-1;;;48585:25:55;48562:89;;48629:9;;47917:79;;48562:89;;;:::i;:::-;;;;-1:-1:-1;;48562:89:55;;;;;;;;;;;;;;-1:-1:-1;;;;;48562:89:55;-1:-1:-1;;;;;;48562:89:55;;;;;;;;;;48523:138;;;;48562:89;48523:138;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48490:171;;;;48676:2;48675:3;:26;;;;48682:6;:13;48699:2;48682:19;;48675:26;48671:66;;;48730:6;48710:27;;-1:-1:-1;;;48710:27:55;;;;;;;;:::i;48671:66::-;48763:6;48752:26;;;;;;;;;;;;:::i;:::-;48747:71;;48812:5;48787:31;;-1:-1:-1;;;48787:31:55;;;;;;;;:::i;48747:71::-;48884:44;48900:9;48911:16;48884:15;:44::i;:::-;48877:51;46241:2694;-1:-1:-1;;;;;;;;46241:2694:55:o;8289:150:49:-;8359:4;8382:50;8387:3;-1:-1:-1;;;;;8407:23:49;;8382:4;:50::i;:::-;8375:57;;8289:150;;;;;:::o;9978:327:27:-;-1:-1:-1;;;;;10045:16:27;;10041:87;;10084:33;;-1:-1:-1;;;10084:33:27;;10114:1;10084:33;;;10549:51:71;10522:18;;10084:33:27;10403:203:71;10041:87:27;10137:21;10161:32;10169:2;10173:7;10137:21;10161:7;:32::i;:::-;10137:56;-1:-1:-1;;;;;;10207:27:27;;;10203:96;;10257:31;;-1:-1:-1;;;10257:31:27;;10285:1;10257:31;;;10549:51:71;10522:18;;10257:31:27;10403:203:71;10203:96:27;10031:274;9978:327;;:::o;45299:595:55:-;45449:12;45763:6;:13;45780:2;45763:19;45759:50;;45791:18;;-1:-1:-1;;;45791:18:55;;;;;;;;;;;45759:50;45826:61;;;;44872:8;;45862:6;;45870:16;;45826:61;;;:::i;:::-;;;;;;;;;;;;;45819:68;;45299:595;;;;:::o;49045:363::-;50313:4;50307:11;;50172:4;50156:21;;;50351:10;-1:-1:-1;;;;;50347:83:55;50331:100;;50477:14;;;50471:21;50451:18;;;50444:49;50539:14;;;;50533:21;50513:18;;;50506:49;50574:24;;;-1:-1:-1;49220:39:55;;;:24;:39;;;;;;;-1:-1:-1;;;;;49220:39:55;:53;49216:86;;49282:20;;-1:-1:-1;;;49282:20:55;;;;;;;;;;;49216:86;49312:39;;;;:24;:39;;;;;:58;;-1:-1:-1;;;;;49312:58:55;;-1:-1:-1;;;;;;49312:58:55;;;;;;49045:363;;;;:::o;2241:406:49:-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:49;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:49;2618:12;;2518:625:30;2613:7;;2656:32;2670:2;2674:7;2683:4;2656:13;:32::i;:::-;2632:56;-1:-1:-1;;;;;;2703:27:30;;2699:210;;2746:40;2778:7;3949:10;:17;;3922:24;;;;:15;:24;;;;;:44;;;3976:24;;;;;;;;;;;;3846:161;2746:40;2699:210;;;2824:2;-1:-1:-1;;;;;2807:19:30;:13;-1:-1:-1;;;;;2807:19:30;;2803:106;;2842:56;2875:13;2890:7;2842:32;:56::i;:::-;-1:-1:-1;;;;;2922:16:30;;2918:188;;2954:45;2991:7;2954:36;:45::i;:::-;2918:188;;;3037:2;-1:-1:-1;;;;;3020:19:30;:13;-1:-1:-1;;;;;3020:19:30;;3016:90;;3055:40;3083:2;3087:7;3055:27;:40::i;:::-;3123:13;2518:625;-1:-1:-1;;;;2518:625:30:o;8861:795:27:-;8947:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;;;9058:18;;;9054:86;;9092:37;9109:4;9115;9121:7;9092:16;:37::i;:::-;-1:-1:-1;;;;;9184:18:27;;;9180:256;;9300:48;9317:1;9321:7;9317:1;;9300:8;:48::i;:::-;-1:-1:-1;;;;;9391:15:27;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9391:20:27;;;9180:256;-1:-1:-1;;;;;9450:16:27;;;9446:107;;-1:-1:-1;;;;;9510:13:27;;;;;;:9;:13;;;;;:18;;9527:1;9510:18;;;9446:107;9563:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9563:21:27;-1:-1:-1;;;;;9563:21:27;;;;;;;;;9600:27;;9563:16;;9600:27;;;;;;;9645:4;8861:795;-1:-1:-1;;;;8861:795:27:o;4624:1055:30:-;4886:22;4911:15;4921:4;4911:9;:15::i;:::-;4936:18;4957:26;;;:17;:26;;;;;;;;;-1:-1:-1;;;;;5058:18:30;;;;:12;:18;;;;;;4886:40;;-1:-1:-1;4957:26:30;5180:28;;;5176:325;;5224:19;5246:35;;;;;;;;;;;;5296:31;;;;;;:45;;;5413:30;;:17;:30;;;;;:43;;;5176:325;5594:26;;;;:17;:26;;;;;;;;5587:33;;;5637:35;;;;-1:-1:-1;5637:35:30;;5630:42;-1:-1:-1;4624:1055:30:o;5967:1061::-;6241:10;:17;6216:22;;6241:21;;6261:1;;6241:21;:::i;:::-;6272:18;6293:24;;;:15;:24;;;;;;6661:10;:26;;6216:46;;-1:-1:-1;6293:24:30;;6216:46;;6661:26;;;;;;:::i;:::-;;;;;;;;;6639:48;;6723:11;6698:10;6709;6698:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6802:28;;;:15;:28;;;;;;;:41;;;6971:24;;;;;6964:31;7005:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6038:990;;;5967:1061;:::o;3437:214::-;3521:14;3554:1;3538:13;3548:2;3538:9;:13::i;:::-;:17;;;;:::i;:::-;-1:-1:-1;;;;;3565:16:30;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3609:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3437:214:30:o;7105:368:27:-;7217:38;7231:5;7238:7;7247;7217:13;:38::i;:::-;7212:255;;-1:-1:-1;;;;;7275:19:27;;7271:186;;7321:31;;-1:-1:-1;;;7321:31:27;;;;;17159:25:71;;;17132:18;;7321:31:27;17013:177:71;7271:186:27;7398:44;;-1:-1:-1;;;7398:44:27;;-1:-1:-1;;;;;17387:32:71;;7398:44:27;;;17369:51:71;17436:18;;;17429:34;;;17342:18;;7398:44:27;17195:274:71;14794:662:27;14954:9;:31;;;-1:-1:-1;;;;;;14967:18:27;;;;14954:31;14950:460;;;15001:13;15017:22;15031:7;15017:13;:22::i;:::-;15001:38;-1:-1:-1;;;;;;15167:18:27;;;;;;:35;;;15198:4;-1:-1:-1;;;;;15189:13:27;:5;-1:-1:-1;;;;;15189:13:27;;;15167:35;:69;;;;-1:-1:-1;;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;15206:30;15167:69;15163:142;;;15263:27;;-1:-1:-1;;;15263:27:27;;-1:-1:-1;;;;;10567:32:71;;15263:27:27;;;10549:51:71;10522:18;;15263:27:27;10403:203:71;15163:142:27;15323:9;15319:81;;;15377:7;15373:2;-1:-1:-1;;;;;15357:28:27;15366:5;-1:-1:-1;;;;;15357:28:27;;;;;;;;;;;15319:81;14987:423;14950:460;-1:-1:-1;;15420:24:27;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15420:29:27;-1:-1:-1;;;;;15420:29:27;;;;;;;;;;14794:662::o;1919:208::-;1982:7;-1:-1:-1;;;;;2005:19:27;;2001:87;;2047:30;;-1:-1:-1;;;2047:30:27;;2074:1;2047:30;;;10549:51:71;10522:18;;2047:30:27;10403:203:71;2001:87:27;-1:-1:-1;;;;;;2104:16:27;;;;;:9;:16;;;;;;;1919:208::o;6401:272::-;6504:4;-1:-1:-1;;;;;6539:21:27;;;;;;:127;;;6586:7;-1:-1:-1;;;;;6577:16:27;:5;-1:-1:-1;;;;;6577:16:27;;:52;;;-1:-1:-1;;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;6597:32;6577:88;;;-1:-1:-1;;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;;;6633:32;;;;6520:146;-1:-1:-1;6401:272:27:o;16212:241::-;16275:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;16337:88;;16383:31;;-1:-1:-1;;;16383:31:27;;;;;17159:25:71;;;17132:18;;16383:31:27;17013:177:71;14:127;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:253;218:2;212:9;260:4;248:17;;-1:-1:-1;;;;;280:34:71;;316:22;;;277:62;274:88;;;342:18;;:::i;:::-;378:2;371:22;146:253;:::o;404:::-;476:2;470:9;518:4;506:17;;-1:-1:-1;;;;;538:34:71;;574:22;;;535:62;532:88;;;600:18;;:::i;662:253::-;734:2;728:9;776:4;764:17;;-1:-1:-1;;;;;796:34:71;;832:22;;;793:62;790:88;;;858:18;;:::i;920:275::-;991:2;985:9;1056:2;1037:13;;-1:-1:-1;;1033:27:71;1021:40;;-1:-1:-1;;;;;1076:34:71;;1112:22;;;1073:62;1070:88;;;1138:18;;:::i;:::-;1174:2;1167:22;920:275;;-1:-1:-1;920:275:71:o;1200:167::-;1278:13;;1331:10;1320:22;;1310:33;;1300:61;;1357:1;1354;1347:12;1300:61;1200:167;;;:::o;1372:196::-;1445:4;-1:-1:-1;;;;;1467:30:71;;1464:56;;;1500:18;;:::i;:::-;-1:-1:-1;1545:1:71;1541:14;1557:4;1537:25;;1372:196::o;1573:177::-;1652:13;;-1:-1:-1;;;;;1694:31:71;;1684:42;;1674:70;;1740:1;1737;1730:12;1755:164;1831:13;;1880;;1873:21;1863:32;;1853:60;;1909:1;1906;1899:12;1924:160;2001:13;;2054:4;2043:16;;2033:27;;2023:55;;2074:1;2071;2064:12;2089:1404;2167:5;2220:3;2213:4;2205:6;2201:17;2197:27;2187:55;;2238:1;2235;2228:12;2187:55;2271:6;2265:13;2298:77;2314:60;2367:6;2314:60;:::i;:::-;2298:77;:::i;:::-;2399:3;2423:6;2418:3;2411:19;2455:4;2450:3;2446:14;2439:21;;2519:4;2511;2503:6;2499:17;2491:6;2487:30;2483:41;2469:55;;2547:3;2539:6;2536:15;2533:35;;;2564:1;2561;2554:12;2533:35;2600:4;2592:6;2588:17;2614:848;2630:6;2625:3;2622:15;2614:848;;;2708:4;2702:3;2697;2693:13;2689:24;2686:44;;;2726:1;2723;2716:12;2686:44;2756:22;;:::i;:::-;2805:34;2835:3;2805:34;:::i;:::-;2798:5;2791:49;2878:44;2916:4;2911:3;2907:14;2878:44;:::i;:::-;2871:4;2864:5;2860:16;2853:70;2959:42;2997:2;2992:3;2988:12;2959:42;:::i;:::-;2954:2;2947:5;2943:14;2936:66;3045:2;3040:3;3036:12;3030:19;3084:1;3075:7;3072:14;3062:42;;3100:1;3097;3090:12;3062:42;3135:2;3124:14;;3117:31;3185:41;3221:3;3212:13;;3185:41;:::i;:::-;3179:3;3172:5;3168:15;3161:66;3264:42;3301:3;3296;3292:13;3264:42;:::i;:::-;3258:3;3251:5;3247:15;3240:67;3344:42;3381:3;3376;3372:13;3344:42;:::i;:::-;3338:3;3327:15;;3320:67;3400:18;;3447:4;3438:14;;;;2656:4;2647:14;2614:848;;;-1:-1:-1;3480:7:71;2089:1404;-1:-1:-1;;;;;2089:1404:71:o;3498:555::-;3551:5;3604:3;3597:4;3589:6;3585:17;3581:27;3571:55;;3622:1;3619;3612:12;3571:55;3649:13;;-1:-1:-1;;;;;3674:30:71;;3671:56;;;3707:18;;:::i;:::-;3751:59;3798:2;3775:17;;-1:-1:-1;;3771:31:71;3804:4;3767:42;3751:59;:::i;:::-;3835:6;3826:7;3819:23;3889:3;3882:4;3873:6;3865;3861:19;3857:30;3854:39;3851:59;;;3906:1;3903;3896:12;3851:59;3964:6;3957:4;3949:6;3945:17;3938:4;3929:7;3925:18;3919:52;4020:1;3991:20;;;4013:4;3987:31;3980:42;;;;3995:7;3498:555;-1:-1:-1;;;3498:555:71:o;4058:846::-;4121:5;4174:3;4167:4;4159:6;4155:17;4151:27;4141:55;;4192:1;4189;4182:12;4141:55;4225:6;4219:13;4252:77;4268:60;4321:6;4268:60;:::i;4252:77::-;4353:3;4377:6;4372:3;4365:19;4409:4;4404:3;4400:14;4393:21;;4470:4;4460:6;4457:1;4453:14;4445:6;4441:27;4437:38;4423:52;;4498:3;4490:6;4487:15;4484:35;;;4515:1;4512;4505:12;4484:35;4551:4;4543:6;4539:17;4565:308;4581:6;4576:3;4573:15;4565:308;;;4656:10;;-1:-1:-1;;;;;4682:35:71;;4679:55;;;4730:1;4727;4720:12;4679:55;4759:69;4824:3;4817:4;4803:11;4795:6;4791:24;4787:35;4759:69;:::i;:::-;4747:82;;-1:-1:-1;4858:4:71;4849:14;;;;4598;4565:308;;4909:1170;4991:5;5044:3;5037:4;5029:6;5025:17;5021:27;5011:55;;5062:1;5059;5052:12;5011:55;5095:6;5089:13;5122:77;5138:60;5191:6;5138:60;:::i;5122:77::-;5223:3;5247:6;5242:3;5235:19;5279:4;5274:3;5270:14;5263:21;;5340:4;5330:6;5327:1;5323:14;5315:6;5311:27;5307:38;5293:52;;5368:3;5360:6;5357:15;5354:35;;;5385:1;5382;5375:12;5354:35;5421:4;5413:6;5409:17;5435:613;5451:6;5446:3;5443:15;5435:613;;;5526:10;;-1:-1:-1;;;;;5552:35:71;;5549:55;;;5600:1;5597;5590:12;5549:55;5627:24;;5699:4;5675:12;;;-1:-1:-1;;5671:26:71;5667:37;5664:57;;;5717:1;5714;5707:12;5664:57;5747:22;;:::i;:::-;5812:4;5804:13;;5798:20;-1:-1:-1;;;;;5834:32:71;;5831:52;;;5879:1;5876;5869:12;5831:52;5910:62;5968:3;5961:4;5950:8;5946:2;5942:17;5938:28;5910:62;:::i;:::-;5896:77;;-1:-1:-1;5986:18:71;;-1:-1:-1;6033:4:71;6024:14;;;;5468;5435:613;;6084:1631;6372:6;6380;6388;6396;6404;6448:9;6439:7;6435:23;6478:3;6474:2;6470:12;6467:32;;;6495:1;6492;6485:12;6467:32;6519:4;6515:2;6511:13;6508:33;;;6537:1;6534;6527:12;6508:33;;6563:22;;:::i;:::-;6630:16;;6655:22;;6743:2;6728:18;;;6722:25;6763:14;;;6756:31;6853:2;6838:18;;;6832:25;6873:14;;;6866:31;6929:48;6973:2;6958:18;;6929:48;:::i;:::-;6924:2;6913:14;;6906:72;7046:4;7031:20;;7025:27;6917:5;;-1:-1:-1;;;;;;7064:30:71;;7061:50;;;7107:1;7104;7097:12;7061:50;7130:85;7207:7;7198:6;7187:9;7183:22;7130:85;:::i;:::-;7261:3;7246:19;;7240:26;7120:95;;-1:-1:-1;7240:26:71;-1:-1:-1;;;;;;7278:32:71;;7275:52;;;7323:1;7320;7313:12;7275:52;7346:72;7410:7;7399:8;7388:9;7384:24;7346:72;:::i;:::-;7464:3;7449:19;;7443:26;7336:82;;-1:-1:-1;7443:26:71;-1:-1:-1;;;;;;7481:32:71;;7478:52;;;7526:1;7523;7516:12;7478:52;7549:91;7632:7;7621:8;7610:9;7606:24;7549:91;:::i;:::-;7539:101;;;7659:50;7704:3;7693:9;7689:19;7659:50;:::i;:::-;7649:60;;6084:1631;;;;;;;;:::o;7720:380::-;7799:1;7795:12;;;;7842;;;7863:61;;7917:4;7909:6;7905:17;7895:27;;7863:61;7970:2;7962:6;7959:14;7939:18;7936:38;7933:161;;8016:10;8011:3;8007:20;8004:1;7997:31;8051:4;8048:1;8041:15;8079:4;8076:1;8069:15;7933:161;;7720:380;;;:::o;8231:692::-;8333:2;8328:3;8325:11;8322:595;;;8370:10;8365:3;8362:19;8359:548;;;8422:5;8419:1;8412:16;8470:4;8467:1;8457:18;8535:2;8523:10;8519:19;8516:1;8512:27;8574:4;8562:10;8559:20;8556:45;;;-1:-1:-1;8598:1:71;8556:45;8637:23;;;;8707:2;8698:12;;8695:1;8691:20;8687:39;8752:1;8770:123;8784:2;8781:1;8778:9;8770:123;;;8873:1;8852:19;;;8845:30;8802:1;8795:9;8770:123;;;8774:3;;;8231:692;;;:::o;9099:1299::-;9219:10;;-1:-1:-1;;;;;9241:30:71;;9238:56;;;9274:18;;:::i;:::-;9303:97;9393:6;9353:38;9385:4;9379:11;9353:38;:::i;:::-;9347:4;9303:97;:::i;:::-;9449:4;9480:2;9469:14;;9497:1;9492:649;;;;10185:1;10202:6;10199:89;;;-1:-1:-1;10254:19:71;;;10248:26;10199:89;-1:-1:-1;;9056:1:71;9052:11;;;9048:24;9044:29;9034:40;9080:1;9076:11;;;9031:57;10301:81;;9462:930;;9492:649;8178:1;8171:14;;;8215:4;8202:18;;-1:-1:-1;;9528:20:71;;;9646:222;9660:7;9657:1;9654:14;9646:222;;;9742:19;;;9736:26;9721:42;;9849:4;9834:20;;;;9802:1;9790:14;;;;9676:12;9646:222;;;9650:3;9896:6;9887:7;9884:19;9881:201;;;9957:19;;;9951:26;-1:-1:-1;;10040:1:71;10036:14;;;10052:3;10032:24;10028:37;10024:42;10009:58;9994:74;;9881:201;;;10128:1;10119:6;10116:1;10112:14;10108:22;10102:4;10095:36;9462:930;;;;9099:1299;;:::o;10808:127::-;10869:10;10864:3;10860:20;10857:1;10850:31;10900:4;10897:1;10890:15;10924:4;10921:1;10914:15;10940:127;11001:10;10996:3;10992:20;10989:1;10982:31;11032:4;11029:1;11022:15;11056:4;11053:1;11046:15;11072:135;11111:3;11132:17;;;11129:43;;11152:18;;:::i;:::-;-1:-1:-1;11199:1:71;11188:13;;11072:135::o;11212:127::-;11273:10;11268:3;11264:20;11261:1;11254:31;11304:4;11301:1;11294:15;11328:4;11325:1;11318:15;11344:243;11431:1;11424:5;11421:12;11411:143;;11476:10;11471:3;11467:20;11464:1;11457:31;11511:4;11508:1;11501:15;11539:4;11536:1;11529:15;11411:143;11563:18;;11344:243::o;11592:221::-;11745:2;11730:18;;11757:50;11734:9;11789:6;11757:50;:::i;13391:835::-;13547:4;13589:3;13578:9;13574:19;13566:27;;13656:1;13652;13647:3;13643:11;13639:19;13630:6;13624:13;13620:39;13609:9;13602:58;13728:10;13720:4;13712:6;13708:17;13702:24;13698:41;13691:4;13680:9;13676:20;13669:71;13808:10;13800:4;13792:6;13788:17;13782:24;13778:41;13771:4;13760:9;13756:20;13749:71;13867:4;13859:6;13855:17;13849:24;13882:67;13943:4;13932:9;13928:20;13914:12;13882:67;:::i;:::-;;14019:4;14011:6;14007:17;14001:24;13994:32;13987:40;13980:4;13969:9;13965:20;13958:70;14096:4;14088;14080:6;14076:17;14070:24;14066:35;14059:4;14048:9;14044:20;14037:65;14151:4;14143:6;14139:17;14133:24;14166:54;14214:4;14203:9;14199:20;14183:14;11885:4;11874:16;11862:29;;11818:75;14166:54;;13391:835;;;;:::o;14231:299::-;14283:3;14321:5;14315:12;14348:6;14343:3;14336:19;14404:6;14397:4;14390:5;14386:16;14379:4;14374:3;14370:14;14364:47;14456:1;14449:4;14440:6;14435:3;14431:16;14427:27;14420:38;14519:4;14512:2;14508:7;14503:2;14495:6;14491:15;14487:29;14482:3;14478:39;14474:50;14467:57;;;14231:299;;;;:::o;14535:570::-;14774:2;14763:9;14756:21;14737:4;14800:55;14851:2;14840:9;14836:18;14828:6;14800:55;:::i;:::-;14903:9;14895:6;14891:22;14886:2;14875:9;14871:18;14864:50;14937:43;14973:6;14965;14937:43;:::i;:::-;14923:57;;15028:9;15020:6;15016:22;15011:2;15000:9;14996:18;14989:50;15056:43;15092:6;15084;15056:43;:::i;:::-;15048:51;14535:570;-1:-1:-1;;;;;;14535:570:71:o;15110:211::-;15151:3;15189:5;15183:12;15233:6;15226:4;15219:5;15215:16;15210:3;15204:36;15295:1;15259:16;;15284:13;;;-1:-1:-1;15259:16:71;;15110:211;-1:-1:-1;15110:211:71:o;15326:189::-;15455:3;15480:29;15505:3;15497:6;15480:29;:::i;15520:228::-;15667:2;15656:9;15649:21;15630:4;15687:55;15738:2;15727:9;15723:18;15715:6;15687:55;:::i;15753:202::-;15820:6;15873:2;15861:9;15852:7;15848:23;15844:32;15841:52;;;15889:1;15886;15879:12;15841:52;15912:37;15939:9;15912:37;:::i;15960:369::-;16161:2;16150:9;16143:21;16124:4;16199:6;16193:13;16242:2;16237;16226:9;16222:18;16215:30;16262:61;16319:2;16308:9;16304:18;16290:12;16262:61;:::i;16334:409::-;-1:-1:-1;;;;;;16547:31:71;;16535:44;;16517:3;16601:37;16635:1;16626:11;;16618:6;16601:37;:::i;:::-;16694:2;16665:15;;;;-1:-1:-1;;;;;;16661:45:71;16647:60;;-1:-1:-1;;16734:2:71;16723:14;;16334:409;-1:-1:-1;;16334:409:71:o;16748:128::-;16815:9;;;16836:11;;;16833:37;;;16850:18;;:::i;16881:127::-;16942:10;16937:3;16933:20;16930:1;16923:31;16973:4;16970:1;16963:15;16997:4;16994:1;16987:15;17195:274;1293:74740:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610436575f3560e01c8063673983311161022b578063a71954ec11610129578063c05df7ac116100b3578063eb8535c211610078578063eb8535c214610d7f578063f062476814610dac578063f2fde38b14610dcb578063f66a25a414610dea578063fa52c7d814610e09575f5ffd5b8063c05df7ac14610cfb578063c53a029214610d1a578063c87b56dd14610d2e578063e5a2282714610d4d578063e985e9c514610d60575f5ffd5b8063b5545a3c116100f9578063b5545a3c14610bf7578063b88d4fde14610c0b578063b97dd9e214610c2a578063babc394f14610c5b578063bd3e759414610c6f575f5ffd5b8063a71954ec14610b91578063a7c5e70114610bb0578063aaffd27014610bc4578063ad6cfb8614610bd8575f5ffd5b80637d06fdf8116101b55780638cc05eda1161017a5780638cc05eda14610af55780638da5cb5b14610b2157806395d89b4114610b44578063a0201be514610b58578063a22cb46514610b77575f5ffd5b80637d06fdf814610a2e5780638456cb5914610a7b57806384b0196e14610a8f578063863623bb14610ab657806389afcb4414610ad6575f5ffd5b80636d3c6275116101fb5780636d3c62751461099e57806370a08231146109bd578063715018a6146109dc57806379ee54f7146109f05780637b55a30014610a0f575f5ffd5b8063673983311461090e5780636a627842146109345780636a926591146109535780636ae9942c14610972575f5ffd5b80632a8e33d7116103385780633f4ba83a116102c257806358e88dbb1161028757806358e88dbb1461087c57806359ca93b6146108955780635c975abb146108b457806362fcde4b146108d05780636352211e146108ef575f5ffd5b80633f4ba83a146107ec57806342842e0e1461080057806343201d301461081f57806343401a00146108325780634f6ccce71461085d575f5ffd5b80633434735f116103085780633434735f14610724578063355811a71461073e578063374ed18c146107465780633894228e146107725780633e28391d146107cd575f5ffd5b80632a8e33d7146106b45780632b9f4985146106d35780632f745c59146106f25780632fb0d02514610711575f5ffd5b80630f15f4c0116103c45780631904bb2e116103895780631904bb2e1461061a5780632228dfa01461064657806323a404301461065a57806323b872dd1461066e5780632870259d14610688575f5ffd5b80630f15f4c0146105865780630f4346fa1461059a578063127ce8e8146105b957806315b5709a146105cc57806318160ddd14610606575f5ffd5b806306fdde031161040a57806306fdde03146104de5780630752e017146104f2578063081812fc14610511578063095ea7b3146105485780630a36cdef14610567575f5ffd5b80628d6acd1461043a57806301ffc9a71461046257806302ae337b14610491578063059b916c146104b2575b5f5ffd5b348015610445575f5ffd5b5061044f600e5481565b6040519081526020015b60405180910390f35b34801561046d575f5ffd5b5061048161047c366004616fc3565b610e94565b6040519015158152602001610459565b34801561049c575f5ffd5b506104b06104ab366004617025565b610ebe565b005b3480156104bd575f5ffd5b506104d16104cc366004617079565b611050565b60405161045991906170c0565b3480156104e9575f5ffd5b506104d1611121565b3480156104fd575f5ffd5b506104b061050c3660046170d2565b6111b0565b34801561051c575f5ffd5b5061053061052b3660046170d2565b611218565b6040516001600160a01b039091168152602001610459565b348015610553575f5ffd5b506104b06105623660046170e9565b61123f565b348015610572575f5ffd5b506104b0610581366004617025565b611258565b348015610591575f5ffd5b506104b061152c565b3480156105a5575f5ffd5b506104b06105b4366004617079565b611575565b6104b06105c736600461724e565b6116bc565b3480156105d7575f5ffd5b506105eb6105e6366004617079565b611955565b60408051938452602084019290925290820152606001610459565b348015610611575f5ffd5b5060085461044f565b348015610625575f5ffd5b50610639610634366004617079565b6119bb565b604051610459919061739d565b348015610651575f5ffd5b506104b0611a9e565b348015610665575f5ffd5b5061044f611b5e565b348015610679575f5ffd5b506104b06105623660046173ab565b348015610693575f5ffd5b506106a76106a23660046173e5565b611b6d565b6040516104599190617403565b3480156106bf575f5ffd5b506104b06106ce36600461745d565b611ceb565b3480156106de575f5ffd5b506104b06106ed366004617079565b611d3b565b3480156106fd575f5ffd5b5061044f61070c3660046170e9565b611e00565b6104b061071f366004617478565b611e63565b34801561072f575f5ffd5b506105306002600160a01b0381565b6104b0611ee9565b348015610751575f5ffd5b506107656107603660046174f0565b611f64565b604051610459919061754e565b34801561077d575f5ffd5b5061079161078c3660046170d2565b6121f9565b604080519586526001600160401b03909416602086015263ffffffff9283169385019390935216606083015260ff16608082015260a001610459565b3480156107d8575f5ffd5b506104816107e7366004617079565b61224d565b3480156107f7575f5ffd5b506104b0612273565b34801561080b575f5ffd5b506104b061081a3660046173ab565b612285565b6104b061082d366004617079565b61229f565b34801561083d575f5ffd5b5061044f61084c366004617079565b602f6020525f908152604090205481565b348015610868575f5ffd5b5061044f6108773660046170d2565b612598565b348015610887575f5ffd5b506030546104819060ff1681565b3480156108a0575f5ffd5b506107916108af3660046170d2565b6125ed565b3480156108bf575f5ffd5b50600d54610100900460ff16610481565b3480156108db575f5ffd5b506104b06108ea3660046175bf565b6125fc565b3480156108fa575f5ffd5b506105306109093660046170d2565b612703565b348015610919575f5ffd5b5061092261270d565b60405160ff9091168152602001610459565b34801561093f575f5ffd5b506104b061094e366004617079565b61271f565b34801561095e575f5ffd5b5061048161096d3660046175e0565b61277d565b34801561097d575f5ffd5b5061099161098c3660046174f0565b612818565b6040516104599190617612565b3480156109a9575f5ffd5b506104816109b8366004617079565b61296c565b3480156109c8575f5ffd5b5061044f6109d7366004617079565b6129f0565b3480156109e7575f5ffd5b506104b0612a35565b3480156109fb575f5ffd5b5061044f610a0a366004617079565b612a46565b348015610a1a575f5ffd5b506104b0610a29366004617675565b612a88565b348015610a39575f5ffd5b50610a42612bfd565b604051610459919081518152602080830151908201526040808301519082015260609182015163ffffffff169181019190915260800190565b348015610a86575f5ffd5b506104b0612c7a565b348015610a9a575f5ffd5b50610aa3612c8a565b60405161045997969594939291906176e4565b348015610ac1575f5ffd5b506105305f5160206180a85f395f51905f5281565b348015610ae1575f5ffd5b506104b0610af0366004617079565b612cf1565b348015610b00575f5ffd5b50610b14610b0f3660046173e5565b612da1565b604051610459919061777a565b348015610b2c575f5ffd5b50600d546201000090046001600160a01b0316610530565b348015610b4f575f5ffd5b506104d1612db5565b348015610b63575f5ffd5b506106a7610b723660046174f0565b612dc4565b348015610b82575f5ffd5b506104b061056236600461778c565b348015610b9c575f5ffd5b50610a42610bab3660046177d1565b612e7d565b348015610bbb575f5ffd5b50610b14612ef7565b348015610bcf575f5ffd5b506104b0612f03565b348015610be3575f5ffd5b5061044f610bf23660046177ea565b613173565b348015610c02575f5ffd5b506104b0613254565b348015610c16575f5ffd5b506104b0610c2536600461784b565b61336d565b348015610c35575f5ffd5b50600d54600160b01b900463ffffffff1660405163ffffffff9091168152602001610459565b348015610c66575f5ffd5b50610765613385565b348015610c7a575f5ffd5b50610cc4610c89366004617079565b602e6020525f90815260409020805460019091015460ff821691610100810463ffffffff1691600160281b9091046001600160a01b03169084565b6040805160ff909516855263ffffffff90931660208501526001600160a01b03909116918301919091526060820152608001610459565b348015610d06575f5ffd5b50610922610d153660046178ae565b613492565b348015610d25575f5ffd5b506104b06135b1565b348015610d39575f5ffd5b506104d1610d483660046170d2565b613646565b6104b0610d5b3660046178c7565b6136b6565b348015610d6b575f5ffd5b50610481610d7a3660046178f8565b613b9b565b348015610d8a575f5ffd5b50600d54600160d81b900461ffff1660405161ffff9091168152602001610459565b348015610db7575f5ffd5b506104b0610dc63660046178c7565b613bc8565b348015610dd6575f5ffd5b506104b0610de5366004617079565b613c48565b348015610df5575f5ffd5b506104b0610e0436600461778c565b613c82565b348015610e14575f5ffd5b50610e81610e23366004617079565b600f6020525f90815260409020546001600160a01b0381169063ffffffff600160a01b8204811691600160c01b81049091169060ff600160e01b8204811691600160e81b8104821691600160f01b8204811691600160f81b90041687565b6040516104599796959493929190617920565b5f6001600160e01b0319821663780e9d6360e01b1480610eb85750610eb882613d6d565b92915050565b336002600160a01b0314610eec57604051637eb3357160e01b81523360048201526024015b60405180910390fd5b5f5b8181101561104b5736838383818110610f0957610f09617973565b6040029190910191505f9050610f226020830183617079565b90506001600160a01b0381161580610f4257506001600160a01b03818116145b15610f4e575050611043565b610f5e6109b86020840184617079565b15610f6a575050611043565b60208201803590600b905f90610f809086617079565b6001600160a01b03166001600160a01b031681526020019081526020015f20541115610ff45760208201803590600b905f90610fbc9086617079565b6001600160a01b03166001600160a01b031681526020019081526020015f205f828254610fe9919061799b565b909155506110099050565b6110096110046020840184617079565b613dbc565b7f11a09f9b32440d896abff7453bf53f8b26ffcb18dae4dca227f7a76e2acc3a648260405161103891906179ae565b60405180910390a150505b600101610eee565b505050565b6001600160a01b0381165f90815260296020526040812080546060929190611077906179d7565b80601f01602080910402602001604051908101604052809291908181526020018280546110a3906179d7565b80156110ee5780601f106110c5576101008083540402835291602001916110ee565b820191905f5260205f20905b8154815290600101906020018083116110d157829003601f168201915b5050505050905080515f03610eb857604051635f7ba20d60e11b81526001600160a01b0384166004820152602401610ee3565b60605f805461112f906179d7565b80601f016020809104026020016040519081016040528092919081815260200182805461115b906179d7565b80156111a65780601f1061117d576101008083540402835291602001916111a6565b820191905f5260205f20905b81548152906001019060200180831161118957829003601f168201915b5050505050905090565b6111b8613eea565b604051627b8a6760e11b8152600481018290523360248201525f5160206180a85f395f51905f529062f714ce906044015f604051808303815f87803b1580156111ff575f5ffd5b505af1158015611211573d5f5f3e3d5ffd5b5050505050565b5f61122282613f1e565b505f828152600460205260409020546001600160a01b0316610eb8565b60405163dc8d8db760e01b815260040160405180910390fd5b336002600160a01b031461128157604051637eb3357160e01b8152336004820152602401610ee3565b5f80826001600160401b0381111561129b5761129b61714e565b6040519080825280602002602001820160405280156112c4578160200160208202803683370190505b5090505f5b8381101561142d57368585838181106112e4576112e4617973565b905060400201905080602001355f036112fd5750611425565b5f61130b6020830183617079565b90506001600160a01b038116158061132b57506001600160a01b03818116145b15611337575050611425565b6113476109b86020840184617079565b15611353575050611425565b5f600f816113646020860186617079565b6001600160a01b0316815260208082019290925260409081015f90812054600160f01b900460ff16808252600a8452918120549193509091600b9082906113ad90880188617079565b6001600160a01b03166001600160a01b031681526020019081526020015f205490505f8282106113dd57826113df565b815b90505f6113f0602088013583617a0f565b90506113fc818b617a26565b99508089898151811061141157611411617973565b602002602001018181525050505050505050505b6001016112c9565b50815f0361143b5750505050565b5f611444613385565b6020015190505f600e54826114599190617a26565b90505f5f5b86811015611514575f8686838151811061147a5761147a617973565b60200260200101518561148d9190617a0f565b6114979190617a4d565b9050801561150b5780600b5f8b8b868181106114b5576114b5617973565b6114cb9260206040909202019081019150617079565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546114f89190617a26565b9091555061150890508184617a26565b92505b5060010161145e565b5061151f818361799b565b600e5550505050505b5050565b611534613f56565b61153d33613f7f565b50611549336001613fed565b335f908152600f60205260409020600d54611572908290600160b01b900463ffffffff16614053565b50565b61157d613f56565b3068929eee149b4bd21268540361159b5763ab143c065f526004601cfd5b3068929eee149b4bd21268556115b0816140b8565b506001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b900490951691850191909152600101546060840152900361162857604051636c4da32160e11b815260040160405180910390fd5b6001600160a01b0382165f908152602e6020526040812080546001600160c81b03191681556001015561165c602c83614119565b506060810151156116795761167981604001518260600151614134565b6040516001600160a01b038316907fc3b65b615a42c44083fae01d75939ba9640ffd6023e130bfc06092d992560d1f905f90a2503868929eee149b4bd212685550565b6116c4613f56565b5f61170586868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061421592505050565b90505f611710613385565b60a0015190505f61172134836143b1565b905061172c87613f7f565b50611737875f613fed565b6001600160a01b0387165f908152600c60205260409020600201546001600160401b03600160a81b9091041661177c600d546001600160a01b03620100009091041690565b6001600160a01b0316336001600160a01b03161461185157844211156117b8576040516304adae2760e21b815260048101869052602401610ee3565b5f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b973858a3387868b6040516020016117f69796959493929190617a60565b6040516020818303038152906040528051906020012090505f611818826143ec565b90506118268a828b8b614502565b61184e57604051633b4f6e2b60e21b81526001600160a01b038b166004820152602401610ee3565b50505b6040518060a00160405280858152602001896001600160a01b03168152602001336001600160a01b031681526020018460ff1681526020018260016118969190617aa7565b6001600160401b039081169091526001600160a01b038a81165f908152600c602090815260409182902085518155908501516001820180546001600160a01b03191691851691909117905590840151600290910180546060860151608090960151929093166001600160a81b031990931692909217600160a01b60ff909516949094029390931767ffffffffffffffff60a81b1916600160a81b93909216929092021790556119488b8b8a86866145d5565b5050505050505050505050565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a909252822054829182918261199487836147b1565b6001600160a01b03979097165f908152600b60205260409020549791969550909350505050565b6119c3616f73565b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff166119f5576119f383613f7f565b505b6040805160e08101825282546001600160a01b038116825263ffffffff600160a01b820481166020840152600160c01b82041692820192909252908290606083019060ff600160e01b909104166006811115611a5357611a536172fd565b6006811115611a6457611a646172fd565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101529392505050565b611aa6613f56565b611aaf33613f7f565b505f611aba602b5490565b600d549091505f90601190600160d01b900460ff1660048110611adf57611adf617973565b60030201549050611af082826147ea565b611afb336003613fed565b335f908152600f60205260409020600d54815463ffffffff600160b01b909204821691600160a01b90910416811015611b4f57604051634fadd4d360e11b815263ffffffff82166004820152602401610ee3565b611b5882614827565b50505050565b5f611b68602b5490565b905090565b6060611b7882614879565b5f611b82836148c9565b90505f81516001600160401b03811115611b9e57611b9e61714e565b604051908082528060200260200182016040528015611bd757816020015b611bc4616f73565b815260200190600190039081611bbc5790505b5090505f5b8251811015611ce357600f5f848381518110611bfa57611bfa617973565b6020908102919091018101516001600160a01b0390811683528282019390935260409182015f20825160e0810184528154948516815263ffffffff600160a01b8604811693820193909352600160c01b85049092169282019290925291606083019060ff600160e01b909104166006811115611c7857611c786172fd565b6006811115611c8957611c896172fd565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101528251839083908110611cd057611cd0617973565b6020908102919091010152600101611bdc565b509392505050565b611cf3613eea565b6030805460ff19168215159081179091556040519081527f52ad987b0fca51d9a6d5e0bbc656d0e3f616cff09727bf584c3275def38c4f54906020015b60405180910390a150565b611d43613f56565b3068929eee149b4bd212685403611d615763ab143c065f526004601cfd5b3068929eee149b4bd21268555f611d77826140b8565b6001600160a01b0383165f908152600f6020526040812054919250600160f01b90910460ff1690611da98484846148fb565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051611de691815260200190565b60405180910390a25050503868929eee149b4bd212685550565b5f611e0a836129f0565b8210611e3b5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610ee3565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b611e6b613f56565b611eab813385858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061421592505050565b505f611eb5613385565b60a0015190505f611ec634836143b1565b9050611ed133613f7f565b50611edc335f613fed565b61121185853385856145d5565b611ef1613eea565b6040515f905f5160206180a85f395f51905f529034908381818185875af1925050503d805f8114611f3d576040519150601f19603f3d011682016040523d82523d5f602084013e611f42565b606091505b505090508061157257604051630b567ce360e31b815260040160405180910390fd5b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d54600160b01b900463ffffffff16611fb0816002617ac6565b63ffffffff168363ffffffff161180611ff0575060038163ffffffff1610158015611ff05750611fe1600382617ae2565b63ffffffff168363ffffffff16105b1561201657604051634fadd4d360e11b815263ffffffff84166004820152602401610ee3565b600d54600160d01b900460ff1663ffffffff8281169085161115612135575f6120408584846149a9565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561209957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161207b575b505050918352505060018201546020808301919091526002928301546001600160401b03811660408085019190915263ffffffff600160401b830481166060860152600160601b8304811660808087019190915260ff600160801b909404841660a096870152600d549093165f818152600a86529290922095860154938701939093526003909401549091169084015282015295945050505050565b612140848383614a33565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561219957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161217b575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152949350505050565b60118160048110612208575f80fd5b6003020160018101546002909101549091506001600160401b03811690600160401b810463ffffffff90811691600160601b810490911690600160801b900460ff1685565b6001600160a01b038082165f908152600c60205260408120600201549091161515610eb8565b61227b613eea565b612283614ad4565b565b61104b83838360405180602001604052805f81525061336d565b6122a7613f56565b6122b081613f7f565b50600d546201000090046001600160a01b03166001600160a01b0316336001600160a01b0316146123585760305460ff16156122ff57604051630a06fea760e01b815260040160405180910390fd5b5f61230982614b27565b9050336001600160a01b0383161480159061232d5750336001600160a01b03821614155b156123565760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b505b6001600160a01b0381165f908152600f6020526040902054600160e01b900460ff16600181600681111561238e5761238e6172fd565b141580156123ae575060028160068111156123ab576123ab6172fd565b14155b80156123cc575060038160068111156123c9576123c96172fd565b14155b156123ec5780604051633ba7bf8960e11b8152600401610ee39190617afe565b6001600160a01b0382165f818152600f6020908152604080832054600160f01b900460ff16808452600a835281842054948452600b9092529091205490919081811061246657604051630ea9c27360e01b81526001600160a01b03861660048201526024810182905260ff84166044820152606401610ee3565b5f612471828461799b565b90508034146124ad576040516315de715960e21b81526001600160a01b038716600482015234602482015260ff85166044820152606401610ee3565b6001600160a01b0386165f908152600b6020526040812080548392906124d4908490617a26565b90915550506040515f905f5160206180a85f395f51905f529034908381818185875af1925050503d805f8114612525576040519150601f19603f3d011682016040523d82523d5f602084013e61252a565b606091505b505090508061254c57604051630b567ce360e31b815260040160405180910390fd5b866001600160a01b03167fe27d5554eb05db70d1fa64400b6d5aee0f805adfbc7c9c3785743c9a287db8378360405161258791815260200190565b60405180910390a250505050505050565b5f6125a260085490565b82106125ca5760405163295f44f760e21b81525f600482015260248101839052604401610ee3565b600882815481106125dd576125dd617973565b905f5260205f2001549050919050565b601d8160048110612208575f80fd5b612604613eea565b8061ffff165f0361265757600d54601190600160d01b900460ff166004811061262f5761262f617973565b6003020154604051635700689f60e11b815260048101919091525f6024820152604401610ee3565b5f612661602b5490565b9050808261ffff16111561269557604051635700689f60e11b81526004810182905261ffff83166024820152604401610ee3565b600d805461ffff848116600160d81b81810261ffff60d81b1985161790945560408051949093049091168084526020840191909152908201839052907f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505050565b5f610eb882613f1e565b5f612716613385565b60a00151905090565b612727613eea565b612730816129f0565b15158061274157506127418161296c565b1561276a57604051639fb0877960e01b81526001600160a01b0382166004820152602401610ee3565b611572816001600160a01b038116614b56565b5f6060821461278d57505f610eb8565b5f6127cc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614bb792505050565b5f818152601060205260409020549091506001600160a01b0316806127f5575f92505050610eb8565b6127fe8161296c565b1561280d575f92505050610eb8565b506001949350505050565b60605f61282483611f64565b5f015190505f81516001600160401b038111156128435761284361714e565b60405190808252806020026020018201604052801561287657816020015b60608152602001906001900390816128615790505b5090505f5b8151811015611ce35760295f84838151811061289957612899617973565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2080546128cb906179d7565b80601f01602080910402602001604051908101604052809291908181526020018280546128f7906179d7565b80156129425780601f1061291957610100808354040283529160200191612942565b820191905f5260205f20905b81548152906001019060200180831161292557829003601f168201915b505050505082828151811061295957612959617973565b602090810291909101015260010161287b565b5f61297f6001600160a01b038316614be5565b1561298b57505f919050565b5f6001600160a01b0383165f908152600f6020526040902054600160e01b900460ff1660068111156129bf576129bf6172fd565b036129cb57505f919050565b506001600160a01b03165f908152600f6020526040902054600160e81b900460ff1690565b5f6001600160a01b038216612a1a576040516322718ad960e21b81525f6004820152602401610ee3565b506001600160a01b03165f9081526003602052604090205490565b612a3d613eea565b6122835f614c38565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a909252822054612a8084826147b1565b949350505050565b336002600160a01b0314612ab157604051637eb3357160e01b8152336004820152602401610ee3565b612abb8282614c93565b612ac3614d6b565b600d54600160d81b900461ffff168114612b0757600d54604051635700689f60e11b8152600160d81b90910461ffff16600482015260248101829052604401610ee3565b5f5f5f5f612b468686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506151a692505050565b9350935093509350612b59868686615540565b612b6b612b65602b5490565b866147ea565b7fd1a5032a9ae65ebe520eba7974025750af3d884b6ab6047dad04dcf7006ab3856040518060c00160405280838152602001858152602001436001612bb09190617a26565b6001600160401b0316815263ffffffff80881660208301528516604080830191909152600d5460ff1660609092019190915251612bed919061754e565b60405180910390a1505050505050565b612c2a60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b50600d5460ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b612c82613eea565b612283615781565b600f60f81b6060805f808083612cdf60408051808201825260148152732a32b631b7b4b71029ba30b5b2a6b0b730b3b2b960611b602080830191909152825180840190935260018352603160f81b9083015291565b97989097965046955030945091925090565b612cf9613eea565b612d028161296c565b15612d23576006604051633ba7bf8960e11b8152600401610ee39190617afe565b612d2c81613f7f565b505f6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff166006811115612d6157612d616172fd565b03612d98576001600160a01b0381165f908152600f60205260409020612d86906157c0565b6115726001600160a01b03821661581e565b61157281613dbc565b6060612dac82614879565b610eb8826148c9565b60606001805461112f906179d7565b60605f612dd083611f64565b5f015190505f81516001600160401b03811115612def57612def61714e565b604051908082528060200260200182016040528015612e2857816020015b612e15616f73565b815260200190600190039081612e0d5790505b5090505f5b8151811015611ce357612e58838281518110612e4b57612e4b617973565b60200260200101516119bb565b828281518110612e6a57612e6a617973565b6020908102919091010152600101612e2d565b612eaa60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b5060ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b6060611b68602c615856565b336002600160a01b0314612f2c57604051637eb3357160e01b8152336004820152602401610ee3565b5f612f3660085490565b90505f5f5b82811015613135575f612f5061090983612598565b6001600160a01b0381165f90815260296020526040812080549293509091612f77906179d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa3906179d7565b8015612fee5780601f10612fc557610100808354040283529160200191612fee565b820191905f5260205f20905b815481529060010190602001808311612fd157829003601f168201915b5050505050905080516060036130625780516020808301919091205f9081526010918290526040812080546001600160a01b031916905583919061303184614bb7565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff16156130925750505061312d565b8054600160e01b900460ff165f8160068111156130b1576130b16172fd565b14806130ce575060068160068111156130cc576130cc6172fd565b145b156130dc575050505061312d565b61310d84602a5f8460068111156130f5576130f56172fd565b60ff16815260208101919091526040015f2090615862565b5061311781615876565b156131285761312586617b0c565b95505b505050505b600101612f3b565b50602b8190556040518181527fa5fe2e69fcd48b9dbe563588b5da97937ef9046641db65c59b8d49a20d75bdcc906020015b60405180910390a15050565b5f61317d84613f7f565b5084516060146131a0576040516333a234f960e11b815260040160405180910390fd5b5f6131a9613385565b60a001516001600160a01b0386165f908152600c6020526040812060020154919250600160a81b9091046001600160401b0316906131e688614bb7565b90505f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b97382898987878b6040516020016132269796959493929190617a60565b604051602081830303815290604052805190602001209050613247816143ec565b9998505050505050505050565b61325c613f56565b3068929eee149b4bd21268540361327a5763ab143c065f526004601cfd5b3068929eee149b4bd2126855335f908152602f6020526040812054908190036132b65760405163183dfd8b60e21b815260040160405180910390fd5b335f818152602f602052604080822082905551634875485760e11b8152600481019290925260248201525f5160206180a85f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015613311575f5ffd5b505af1158015613323573d5f5f3e3d5ffd5b50506040518481523393507f358fe4192934d3bf28ae181feda1f4bd08ca67f5e2fad55582cce5eb67304ae99250602001905060405180910390a2503868929eee149b4bd2126855565b61337884848461123f565b611b5833858585856158c9565b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d546133dc90600160b01b810463ffffffff16908190600160d01b900460ff16614a33565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561343557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613417575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152919050565b5f61349b613eea565b6134a3613f56565b6134b360808301606084016174f0565b63ffffffff165f036134f1576134cf60808301606084016174f0565b604051630c6e911360e41b815263ffffffff9091166004820152602401610ee3565b600d80545f919082906135069060ff16617b24565b825460ff8083166101009490940a848102910219909116179092555f908152600a60205260409020909150839061353d8282617b42565b505060ff81167fe99633c5fc9a4b39f3a3d7835a821420f9d4d6c5bfa62be2fcf1fde156115eeb8435602086013560408701356135806080890160608a016174f0565b6040805194855260208501939093529183015263ffffffff16606082015260800160405180910390a290505b919050565b6135ba33613f7f565b50335f908152600c6020526040812060020180546015906135ea90600160a81b90046001600160401b0316617b85565b82546001600160401b038083166101009490940a8481029102199091161790925560405190815290915033907f2372996d0929efe8a23b6f30910b8047be7f973b1bfa8bf5ef6dbe702521591f9060200160405180910390a250565b606061365182613f1e565b505f61368c61365f846159f0565b613667615a9e565b604051602001613678929190617bbd565b604051602081830303815290604052615ae8565b90508060405160200161369f9190617cac565b604051602081830303815290604052915050919050565b6136be613f56565b3068929eee149b4bd2126854036136dc5763ab143c065f526004601cfd5b3068929eee149b4bd21268555f6136f2836140b8565b6001600160a01b0384165f908152600f60205260409020805491925090600160e01b900460ff16600181600681111561372d5761372d6172fd565b1415801561374d5750600281600681111561374a5761374a6172fd565b14155b801561376b57506003816006811115613768576137686172fd565b14155b1561378b5780604051633ba7bf8960e11b8152600401610ee39190617afe565b815460ff600160f01b9091048116908516811015806137b25750600d5460ff908116908616115b156137dd57604051633abb443b60e21b815260ff808316600483015286166024820152604401610ee3565b60ff8082165f908152600a602052604080822054928816825281205490828211613807575f613811565b613811838361799b565b90508034146138355760405163222d164360e21b8152346004820152602401610ee3565b6001856006811115613849576138496172fd565b03613966578015613886576001600160a01b0389165f908152600b60205260408120805483929061387b908490617a26565b9091555061389a9050565b8282101561389a5761389a89888585615b0e565b855460ff60f01b1916600160f01b60ff8a16021786556001600160a01b03808a165f908152600c60205260409020600201541615613903576001600160a01b0389165f908152600c60205260409020600201805460ff60a01b1916600160a01b60ff8b16021790555b6040805160ff80871682528a166020820152908101849052606081018390526001600160a01b038a16907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a250505050505050613b8b565b5f602e5f8b6001600160a01b03166001600160a01b031681526020019081526020015f206040518060800160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160059054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481525050905060405180608001604052808a60ff168152602001600d60169054906101000a900463ffffffff1663ffffffff168152602001336001600160a01b0316815260200183815250602e5f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548163ffffffff021916908363ffffffff1602179055506040820151815f0160056101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160010155905050613b088a602c61586290919063ffffffff16565b50606081015115613b2557613b2581604001518260600151614134565b600d546040805160ff8c168152600160b01b90920463ffffffff16602083015281018390526001600160a01b038b16907fdffa95238a907cf8b6360a883f195928a82c8d7746dfe6fca84936929024a9d59060600160405180910390a250505050505050505b3868929eee149b4bd21268555050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b613bd0613eea565b613bd982613f7f565b506001600160a01b0382165f818152600f602090815260409182902080546001600160f81b0316600160f81b60ff87169081029190911790915591519182527ffa96cc66d1772e5646f86e374867e4e32b5b448b2aadb331568e34c2d063e45591015b60405180910390a25050565b613c50613eea565b6001600160a01b038116613c7957604051631e4fbdf760e01b81525f6004820152602401610ee3565b61157281614c38565b613c8a613f56565b3068929eee149b4bd212685403613ca85763ab143c065f526004601cfd5b3068929eee149b4bd21268555f613cbe836140b8565b6001600160a01b0384165f908152600f60205260409020909150613ce181615c7a565b613d00578060405163c11d33f760e01b8152600401610ee39190617cdd565b613d09816157c0565b5f613d15858486615d13565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051613d5291815260200190565b60405180910390a25050503868929eee149b4bd21268555050565b5f6001600160e01b031982166380ac58cd60e01b1480613d9d57506001600160e01b03198216635b5e139f60e01b145b80610eb857506301ffc9a760e01b6001600160e01b0319831614610eb8565b6001600160a01b0381165f908152600f602052604090208054602b54600160e01b90910460ff1690613ded82615876565b15613e0057613dfd60018261799b565b90505b613e0a8482615ef5565b5f613e1485611955565b506001600160a01b0387165f908152600b60205260408082208290555191935091505f5160206180a85f395f51905f529083908381818185875af1925050503d805f8114613e7d576040519150601f19603f3d011682016040523d82523d5f602084013e613e82565b606091505b5050905080613ea457604051630b567ce360e31b815260040160405180910390fd5b600d54613ebf908690600160b01b900463ffffffff1661602e565b613ec8856157c0565b5f613ed287614b27565b9050613ee087826001615d13565b5050505050505050565b600d546001600160a01b03620100009091041633146122835760405163118cdaa760e01b8152336004820152602401610ee3565b5f818152600260205260408120546001600160a01b031680610eb857604051637e27328960e01b815260048101849052602401610ee3565b600d54610100900460ff16156122835760405163d93c066560e01b815260040160405180910390fd5b5f6001600160a01b038216613f9381614be5565b613fb35760405163ed15e6cf60e01b815260048101829052602401610ee3565b826001600160a01b0316613fc682612703565b6001600160a01b031614610eb8576040516330fa89ab60e11b815260040160405180910390fd5b6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff16816006811115614021576140216172fd565b816006811115614033576140336172fd565b1461104b5780604051633ba7bf8960e11b8152600401610ee39190617afe565b61405e816001617ac6565b825463ffffffff91909116600160a01b0263ffffffff60a01b19909116178255614089826002616085565b7f44f68a196beb8e3ae6b6afe9504db62c81b4e511e987a263b4f1a9bc49c90762826040516131679190617cdd565b5f6140c282613f7f565b506140cc82614b27565b9050336001600160a01b038316148015906140f05750336001600160a01b03821614155b156135ac5760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b5f61412d836001600160a01b0384166161b4565b9392505050565b805f0361413f575050565b604051634875485760e11b81526001600160a01b03831660048201525f60248201525f5160206180a85f395f51905f52906390ea90ae90620186a09084906044015f604051808303818589803b158015614197575f5ffd5b5088f194505050505080156141aa575060015b611528576001600160a01b0382165f908152602f6020526040812080548392906141d5908490617a26565b90915550506040518181526001600160a01b038316907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb097321590602001613c3c565b5f8151606014614238576040516333a234f960e11b815260040160405180910390fd5b5f825f8151811061424b5761424b617973565b016020015160f81c905060808116158061426757506040811615155b15614285576040516333a234f960e11b815260040160405180910390fd5b5f614290848661629e565b86516040519192505f91829161b1519163a65ebb2560e01b916142b9918a908890602401617d4f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516142f79190617d87565b5f60405180830381855afa9150503d805f811461432f576040519150601f19603f3d011682016040523d82523d5f602084013e614334565b606091505b509150915081158061434857508051602014155b1561436857806040516306fe67db60e31b8152600401610ee391906170c0565b8080602001905181019061437c9190617d92565b61439b578760405163a865bb3560e01b8152600401610ee39190617dad565b6143a586886162ee565b98975050505050505050565b60ff81165f908152600a602052604081205483146143e55760405163222d164360e21b815260048101849052602401610ee3565b5090919050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f00000000000000000000000000000000000000000000000000000000000000004614166144df5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b6719010000000000005f5280601a5281603a52604260182090505f603a52919050565b5f6001600160a01b03851615612a8057604051853b614592578260408114614532576041811461455957506145cc565b60208581013560ff81901c601b0190915285356040526001600160ff1b031660605261456a565b60408501355f1a6020526040856040375b50845f526020600160805f60015afa5180871860601b3d119250505f606052806040526145cc565b631626ba7e60e01b80825285600483015260248201604081528460448401528486606485013760208160648701858b5afa90519091141691505b50949350505050565b6001600160a01b038381165f818152600f602081815260408084208054825160e08101845287815263ffffffff81860181815294820188815260608301898152608084018a905260ff8e811660a0860152600160f81b86041660c085018190529a909952969095528051935195518516600160c01b0263ffffffff60c01b1996909516600160a01b026001600160c01b031990921693909816929092179190911792831682178155925193949391839160ff60e01b191664ffffffffff60c01b1990911617600160e01b8360068111156146b1576146b16172fd565b02179055506080820151815460a084015160c09094015161ffff60e81b19909116600160e81b9215159290920260ff60f01b191691909117600160f01b60ff94851602176001600160f81b0316600160f81b93909116929092029190911790556001600160a01b0384165f908152600f60205260409020614733816001616085565b6001600160a01b0385165f908152602960205260409020614755878983617e1d565b506001600160a01b0385165f908152600b602052604090819020849055517f9d9bab592843361c508cec6cc23820609c04fe07a621d03bf04b7520759d3641906147a0908390617cdd565b60405180910390a150505050505050565b6001600160a01b0382165f908152600b6020526040812054818382116147d7575f6147e1565b6147e1848361799b565b95945050505050565b8115806147f5575080155b806147ff57508181115b1561152857604051635700689f60e11b81526004810183905260248101829052604401610ee3565b614832816004616085565b805463ffffffff60c01b191663ffffffff60c01b1781556040517f170cba9e80cc0d156bc6ed689fa1d09ee788e1000c092512ef8698454b2081ee90611d30908390617cdd565b5f81600681111561488c5761488c6172fd565b14806148a9575060068160068111156148a7576148a76172fd565b145b156115725780604051633ba7bf8960e11b8152600401610ee39190617afe565b6060610eb8602a5f8460068111156148e3576148e36172fd565b60ff1660ff1681526020019081526020015f20615856565b5f5f614907858461635e565b6001600160a01b0386165f908152600b602052604081208054929350839290919061493390849061799b565b9091555050604051634875485760e11b81526001600160a01b0385166004820152602481018290525f5160206180a85f395f51905f52906390ea90ae906044015f604051808303815f87803b15801561498a575f5ffd5b505af115801561499c573d5f5f3e3d5ffd5b5092979650505050505050565b5f806004836149b88688617ae2565b6149c29190617ed6565b6149cc9190617eef565b90505f601d8260ff16600481106149e5576149e5617973565b6003020190508563ffffffff168160020160089054906101000a900463ffffffff1663ffffffff16146147e157604051634fadd4d360e11b815263ffffffff87166004820152602401610ee3565b5f80614a3f8585617ae2565b90505f600482614a4f8683617ed6565b614a599190617f10565b614a639190617eef565b90505f60118260ff1660048110614a7c57614a7c617973565b6003020190508663ffffffff168160020160089054906101000a900463ffffffff1663ffffffff1614614aca57604051634fadd4d360e11b815263ffffffff88166004820152602401610ee3565b9695505050505050565b614adc6163be565b600d805461ff00191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038082165f908152600c60205260408120600281015491929091168061412d57509192915050565b6001600160a01b038216614b7f57604051633250574960e11b81525f6004820152602401610ee3565b5f614b8b83835f6163e6565b90506001600160a01b0381161561104b576040516339e3563760e11b81525f6004820152602401610ee3565b604080516020838101516001600160fd1b031682528284015190820152606092830151918101919091522090565b5f811580614bfa57506001600160a01b038210155b15614c1b5760405163ed15e6cf60e01b815260048101839052602401610ee3565b505f908152600260205260409020546001600160a01b0316151590565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60015b8181101561104b57828282818110614cb057614cb0617973565b9050602002016020810190614cc59190617079565b6001600160a01b03168383614cdb60018561799b565b818110614cea57614cea617973565b9050602002016020810190614cff9190617079565b6001600160a01b031610614d63578282614d1a60018461799b565b818110614d2957614d29617973565b9050602002016020810190614d3e9190617079565b60405163836e3a7d60e01b81526001600160a01b039091166004820152602401610ee3565b600101614c96565b5f614d76602c615856565b600d54909150600160b01b900463ffffffff165f805b835181101561512c575f848281518110614da857614da8617973565b6020908102919091018101516001600160a01b038082165f908152602e84526040908190208151608081018352815460ff811680835263ffffffff61010083041697830197909752600160281b900490931691830191909152600101546060820152909250901580614e3857506001600160a01b0382165f908152600f6020526040902054600160e81b900460ff165b15614e4d57614e46826164b1565b5050615124565b6001600160a01b0382165f908152600f60209081526040808320805460ff600160f01b9091048116808652600a909452828520548651909116855291909320548181108015614eb7575060018560200151614ea89190617ac6565b63ffffffff168963ffffffff16105b15614ec757505050505050615124565b6001600160a01b0386165f908152602e6020526040812080546001600160c81b031916815560010155614efb602c87614119565b505f82821115614f3c5760608601516001600160a01b0388165f908152600b602052604081208054909190614f31908490617a26565b9091555061504d9050565b5f614f47838561799b565b6001600160a01b0389165f908152600b6020526040902054909150848110614f7157819250614f86565b83811115614f8657614f83848261799b565b92505b8215615034576001600160a01b0389165f908152600b602052604081208054859290614fb390849061799b565b909155505f9050614fc38a614b27565b6001600160a01b0381165f908152602f6020526040812080549293508692909190614fef908490617a26565b90915550506040518481526001600160a01b038216907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732159060200160405180910390a2505b61503e838361799b565b615048908c617a26565b9a5050505b8551855460ff909116600160f01b0260ff60f01b199091161785556001600160a01b038781165f908152600c602052604090206002015416156150c35785516001600160a01b0388165f908152600c60205260409020600201805460ff909216600160a01b0260ff60a01b199092169190911790555b85516040805160ff808816825290921660208301528101849052606081018390526001600160a01b038816907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a2505050505050505b600101614d8c565b50801561104b576040515f905f5160206180a85f395f51905f529083908381818185875af1925050503d805f811461517f576040519150601f19603f3d011682016040523d82523d5f602084013e615184565b606091505b5050905080611b5857604051630b567ce360e31b815260040160405180910390fd5b600d545f9081908190606090600160d01b900460ff168260046151ca836001617ed6565b6151d49190617eef565b600d805460ff60d01b1916600160d01b60ff841602178082559192505f9160169061520b90600160b01b900463ffffffff16617f29565b91906101000a81548163ffffffff021916908363ffffffff160217905590505f601d8360ff166004811061524157615241617973565b6003020190505f615250612bfd565b90506040518060c00160405280838054806020026020016040519081016040528092919081815260200182805480156152b057602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311615292575b50505091835250506040808401516020830152016152cf436001617aa7565b6001600160401b0316815263ffffffff80861660208301526060808501519091166040830152600d5460ff908116919092015260119086166004811061531757615317617973565b600302015f820151815f01908161532e9190617f44565b50602082015160018201556040820151600291820180546060850151608086015160a0909601516001600160401b039094166001600160601b031990921691909117600160401b63ffffffff928316021764ffffffffff60601b1916600160601b919095160260ff60801b191693909317600160801b60ff90921691909102179091555f906004906153c1908790617ed6565b6153cb9190617eef565b90506040518060c001604052808c81526020015f81526020015f6001600160401b031681526020018560026154009190617ac6565b63ffffffff1681525f60208201819052604090910152601d60ff83166004811061542c5761542c617973565b600302015f820151815f0190816154439190617f44565b50602082810151600183015560408084015160029093018054606080870151608088015160a09098015160ff16600160801b0260ff60801b1963ffffffff998a16600160601b021664ffffffffff60601b1999909216600160401b026001600160601b03199094166001600160401b039098169790971792909217969096161793909317909255848201519285015186548351818402810184019094528084528894939192889291839183018282801561552457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311615506575b5050505050905099509950995099505050505050509193509193565b5f61554b60026148c9565b90505f5b81518110156155a9575f600f5f84848151811061556e5761556e617973565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2090506155a0816165d3565b5060010161554f565b505f6155b560046148c9565b600d54909150600160d01b900460ff165f60046155d3836001617ed6565b6155dd9190617eef565b90505f7fbd0b8371ed11e4a5f6acd1f1a0d78b3f7e6ab3473c6396c9f28027132562600c8660405160200161562992919091825260e01b6001600160e01b031916602082015260240190565b6040516020818303038152906040528051906020012090506156b860118460ff166004811061565a5761565a617973565b600302018054604080516020808402820181019092528281529291908301828280156156ad57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161568f575b50505050508261660d565b6156d1601d8360ff166004811061565a5761565a617973565b61570e8888808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525085925061660d915050565b5f5b8451811015615776575f85828151811061572c5761572c617973565b60200260200101519050615740818461665d565b1561574b575061576e565b6001600160a01b0381165f908152600f6020526040902061576c908961602e565b505b600101615710565b505050505050505050565b615789613f56565b600d805461ff0019166101001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614b0a3390565b6157cb816006616085565b805460ff60e81b198116600160e81b1782556157ef906001600160a01b03166164b1565b7ffab16134cb74fff6e7d137bf93f6b2ab4c1c61cbe53dad2c8cb57744353bd39b81604051611d309190617cdd565b5f61582a5f835f6163e6565b90506001600160a01b03811661152857604051637e27328960e01b815260048101839052602401610ee3565b60605f61412d8361667a565b5f61412d836001600160a01b0384166166d3565b5f600382600681111561588b5761588b6172fd565b14806158a8575060048260068111156158a6576158a66172fd565b145b80610eb8575060028260068111156158c2576158c26172fd565b1492915050565b6001600160a01b0383163b1561121157604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061590b908890889087908790600401617fc8565b6020604051808303815f875af1925050508015615945575060408051601f3d908101601f1916820190925261594291810190617ffa565b60015b6159ac573d808015615972576040519150601f19603f3d011682016040523d82523d5f602084013e615977565b606091505b5080515f036159a457604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b146159e857604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b505050505050565b60605f6159fc8361671f565b6028602282012090915060601c60295b6001811115615a9557600782600f16118015615a4157506060838281518110615a3757615a37617973565b016020015160f81c115b15615a7e57602060f81b838281518110615a5d57615a5d617973565b0160200180516001600160f81b0319908116909218909116905f82901a9053505b60049190911c90615a8e81618015565b9050615a0c565b50909392505050565b6060615ac46040518061052001604052806104ed81526020016180c86104ed9139615ae8565b604051602001615ad4919061802a565b604051602081830303815290604052905090565b6060610eb8826040518060600160405280604081526020016185b5604091396001616735565b5f615b19828461799b565b6001600160a01b0386165f908152600b6020526040812054919250848210615b42575081615b57565b83821115615b5757615b54848361799b565b90505b8015615bf4576001600160a01b0387165f908152600b602052604081208054839290615b8490849061799b565b9091555050604051634875485760e11b81526001600160a01b03871660048201525f60248201525f5160206180a85f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615bdc575f5ffd5b505af1158015615bee573d5f5f3e3d5ffd5b50505050505b5f615bff828561799b565b90508015613ee0576040515f905f5160206180a85f395f51905f529083908381818185875af1925050503d805f8114615c53576040519150601f19603f3d011682016040523d82523d5f602084013e615c58565b606091505b505090508061577657604051630b567ce360e31b815260040160405180910390fd5b80545f90600160e01b900460ff166001816006811115615c9c57615c9c6172fd565b03615caa5750600192915050565b82545f90615cc690600160c01b900463ffffffff166001617ac6565b90506005826006811115615cdc57615cdc6172fd565b148015615cfb5750600d5463ffffffff808316600160b01b9092041610155b15615d0a575060019392505050565b505f9392505050565b5f615d266001600160a01b03851661581e565b6008545f03615d48576040516315ae672760e01b815260040160405180910390fd5b6001600160a01b0384165f908152600c602052604081208181556001810180546001600160a01b031916905560020180546001600160e81b03191690558080615d9087611955565b925092509250825f03615da85782935050505061412d565b6001600160a01b0387165f908152600b60205260408120819055828410615dd0575081615e4d565b50825f5f5160206180a85f395f51905f52615deb838661799b565b6040515f81818185875af1925050503d805f8114615e24576040519150601f19603f3d011682016040523d82523d5f602084013e615e29565b606091505b5050905080615e4b57604051630b567ce360e31b815260040160405180910390fd5b505b858015615e6757505f5160206180a85f395f51905f523182115b15615e7e575f5160206180a85f395f51905f523191505b604051634875485760e11b81526001600160a01b0388166004820152602481018390525f5160206180a85f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615ed2575f5ffd5b505af1158015615ee4573d5f5f3e3d5ffd5b505050505081816143a59190617a26565b600d54600160b01b810463ffffffff1690600160d01b900460ff165f615f1c838084614a33565b9050615f2881866168af565b508054615f3585826147ea565b5f615f41856001617ac6565b90505f615f4f8287876149a9565b9050615f5b81896168af565b5080549250615f6a87846147ea565b5f615f76876002617ac6565b90505f615f848289896149a9565b9050615f90818b6168af565b5080549450615f9f89866147ea565b600d54600160d81b900461ffff1689101561602257600d805461ffff8b8116600160d81b90810261ffff60d81b1984161793849055604080519382900483168085529190940490911660208301529181018b90527f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505b50505050505050505050565b616039826005616085565b815463ffffffff60c01b1916600160c01b63ffffffff8316021782556040517f727bfc4079207401298f48a3f1a92c9b40d83e086fe5b584a7b0644fdbdb56ee90613167908490617cdd565b81546001600160a01b03811690600160e01b900460ff166160cd82602a5f8460068111156160b5576160b56172fd565b60ff16815260208101919091526040015f2090614119565b505f8360068111156160e1576160e16172fd565b14158015616101575060068360068111156160fe576160fe6172fd565b14155b156161215761611f82602a5f8660068111156130f5576130f56172fd565b505b5f61612b82615876565b90505f61613785615876565b9050818015616144575080155b1561616057602b5f815461615790618015565b90915550616183565b8115801561616b5750805b1561618357602b5f815461617e90617b0c565b909155505b85548590879060ff60e01b1916600160e01b8360068111156161a7576161a76172fd565b0217905550505050505050565b5f818152600183016020526040812054801561628e575f6161d660018361799b565b85549091505f906161e99060019061799b565b9050808214616248575f865f01828154811061620757616207617973565b905f5260205f200154905080875f01848154811061622757616227617973565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806162595761625961805b565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610eb8565b5f915050610eb8565b5092915050565b606082516060146162c2576040516333a234f960e11b815260040160405180910390fd5b6040516162d7905f908590859060200161806f565b604051602081830303815290604052905092915050565b5f6162f883614bb7565b5f818152601060205260409020549091506001600160a01b03161561633057604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b60ff81165f908152600a60205260408120548161637b85836147b1565b905080158061639d575060ff84165f908152600a602052604090206001015481105b15612a8057604051633737b70960e11b815260048101829052602401610ee3565b600d54610100900460ff1661228357604051638dfc202b60e01b815260040160405180910390fd5b5f5f6163f38585856169b4565b90506001600160a01b03811661644f5761644a84600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b616472565b846001600160a01b0316816001600160a01b031614616472576164728185616aa6565b6001600160a01b03851661648e5761648984616b23565b612a80565b846001600160a01b0316816001600160a01b031614612a8057612a808585616bca565b6001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b900490951691850191909152600101546060840152900361651a5761104b602c83614119565b6001600160a01b0382165f908152602e6020526040812080546001600160c81b03191681556001015561654e602c83614119565b506060810151156115285760608101516040808301516001600160a01b03165f908152602f6020529081208054909190616589908490617a26565b9250508190555080604001516001600160a01b03167f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732158260600151604051613c3c91815260200190565b6165de816003616085565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b81604051611d309190617cdd565b5f5b825181101561104b57616655600161664f61664c86858151811061663557616635617973565b602002602001015186616c1890919063ffffffff16565b90565b90616c32565b60010161660f565b6001600160a01b0382165f9081526020829052604081205c61412d565b6060815f018054806020026020016040519081016040528092919081815260200182805480156166c757602002820191905f5260205f20905b8154815260200190600101908083116166b3575b50505050509050919050565b5f81815260018301602052604081205461671857508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610eb8565b505f610eb8565b6060610eb86001600160a01b0383166014616c39565b606083515f03616753575060408051602081019091525f815261412d565b5f82616783576003855160046167699190617a0f565b616774906002617a26565b61677e9190617a4d565b6167a8565b6003855160026167939190617a26565b61679d9190617a4d565b6167a8906004617a0f565b90505f816001600160401b038111156167c3576167c361714e565b6040519080825280601f01601f1916602001820160405280156167ed576020820181803683370190505b509050600185016020820187885189016020810180515f82525b82841015616862576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450616807565b9052505085156168a3576003885106600181146168865760028114616899576168a1565b603d6001830353603d60028303536168a1565b603d60018303535b505b50909695505050505050565b81545f90815b818110156169aa57836001600160a01b03168582815481106168d9576168d9617973565b5f918252602090912001546001600160a01b0316036169a257846168fe60018461799b565b8154811061690e5761690e617973565b905f5260205f20015f9054906101000a90046001600160a01b031685828154811061693b5761693b617973565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550848054806169765761697661805b565b5f8281526020902081015f1990810180546001600160a01b03191690550190555060019150610eb89050565b6001016168b5565b505f949350505050565b5f828152600260205260408120546001600160a01b03908116908316156169e0576169e0818486616daa565b6001600160a01b03811615616a1a576169fb5f855f5f616e0e565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615616a48576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f616ab0836129f0565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314616b05575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90616b349060019061799b565b5f8381526009602052604081205460088054939450909284908110616b5b57616b5b617973565b905f5260205f20015490508060088381548110616b7a57616b7a617973565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480616bb157616bb161805b565b600190038181905f5260205f20015f9055905550505050565b5f6001616bd6846129f0565b616be0919061799b565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03165f9081526020919091526040902090565b80825d5050565b6060825f616c48846002617a0f565b616c53906002617a26565b6001600160401b03811115616c6a57616c6a61714e565b6040519080825280601f01601f191660200182016040528015616c94576020820181803683370190505b509050600360fc1b815f81518110616cae57616cae617973565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110616cdc57616cdc617973565b60200101906001600160f81b03191690815f1a9053505f616cfe856002617a0f565b616d09906001617a26565b90505b6001811115616d80576f181899199a1a9b1b9c1cb0b131b232b360811b83600f1660108110616d3d57616d3d617973565b1a60f81b828281518110616d5357616d53617973565b60200101906001600160f81b03191690815f1a90535060049290921c91616d7981618015565b9050616d0c565b508115612a805760405163e22e27eb60e01b81526004810186905260248101859052604401610ee3565b616db5838383616f12565b61104b576001600160a01b038316616de357604051637e27328960e01b815260048101829052602401610ee3565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610ee3565b8080616e2257506001600160a01b03821615155b15616ee3575f616e3184613f1e565b90506001600160a01b03831615801590616e5d5750826001600160a01b0316816001600160a01b031614155b8015616e705750616e6e8184613b9b565b155b15616e995760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610ee3565b8115616ee15783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b03831615801590612a805750826001600160a01b0316846001600160a01b03161480616f4b5750616f4b8484613b9b565b80612a805750505f908152600460205260409020546001600160a01b03908116911614919050565b6040805160e0810182525f8082526020820181905291810182905290606082019081525f602082018190526040820181905260609091015290565b6001600160e01b031981168114611572575f5ffd5b5f60208284031215616fd3575f5ffd5b813561412d81616fae565b5f5f83601f840112616fee575f5ffd5b5081356001600160401b03811115617004575f5ffd5b6020830191508360208260061b850101111561701e575f5ffd5b9250929050565b5f5f60208385031215617036575f5ffd5b82356001600160401b0381111561704b575f5ffd5b61705785828601616fde565b90969095509350505050565b80356001600160a01b03811681146135ac575f5ffd5b5f60208284031215617089575f5ffd5b61412d82617063565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61412d6020830184617092565b5f602082840312156170e2575f5ffd5b5035919050565b5f5f604083850312156170fa575f5ffd5b61710383617063565b946020939093013593505050565b5f5f83601f840112617121575f5ffd5b5081356001600160401b03811115617137575f5ffd5b60208301915083602082850101111561701e575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112617171575f5ffd5b81356001600160401b0381111561718a5761718a61714e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156171b8576171b861714e565b6040528181528382016020018510156171cf575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156171fb575f5ffd5b604051602081016001600160401b038111828210171561721d5761721d61714e565b60405290508082356001600160401b03811115617238575f5ffd5b61724485828601617162565b8252505092915050565b5f5f5f5f5f5f5f60a0888a031215617264575f5ffd5b87356001600160401b03811115617279575f5ffd5b6172858a828b01617111565b90985096505060208801356001600160401b038111156172a3575f5ffd5b6172af8a828b016171eb565b9550506172be60408901617063565b935060608801356001600160401b038111156172d8575f5ffd5b6172e48a828b01617111565b989b979a50959894979596608090950135949350505050565b634e487b7160e01b5f52602160045260245ffd5b6007811061732d57634e487b7160e01b5f52602160045260245ffd5b9052565b60018060a01b03815116825263ffffffff602082015116602083015263ffffffff6040820151166040830152606081015161736f6060840182617311565b5060808101511515608083015260ff60a08201511660a083015260c081015161104b60c084018260ff169052565b60e08101610eb88284617331565b5f5f5f606084860312156173bd575f5ffd5b6173c684617063565b92506173d460208501617063565b929592945050506040919091013590565b5f602082840312156173f5575f5ffd5b81356007811061412d575f5ffd5b602080825282518282018190525f918401906040840190835b818110156174455761742f838551617331565b6020939093019260e0929092019160010161741c565b509095945050505050565b8015158114611572575f5ffd5b5f6020828403121561746d575f5ffd5b813561412d81617450565b5f5f5f6040848603121561748a575f5ffd5b83356001600160401b0381111561749f575f5ffd5b6174ab86828701617111565b90945092505060208401356001600160401b038111156174c9575f5ffd5b6174d5868287016171eb565b9150509250925092565b63ffffffff81168114611572575f5ffd5b5f60208284031215617500575f5ffd5b813561412d816174df565b5f8151808452602084019350602083015f5b828110156175445781516001600160a01b031686526020958601959091019060010161751d565b5093949350505050565b602081525f825160c0602084015261756960e084018261750b565b9050602084015160408401526001600160401b03604085015116606084015263ffffffff606085015116608084015263ffffffff60808501511660a084015260ff60a08501511660c08401528091505092915050565b5f602082840312156175cf575f5ffd5b813561ffff8116811461412d575f5ffd5b5f5f602083850312156175f1575f5ffd5b82356001600160401b03811115617606575f5ffd5b61705785828601617111565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561766957603f19878603018452617654858351617092565b94506020938401939190910190600101617638565b50929695505050505050565b5f5f60208385031215617686575f5ffd5b82356001600160401b0381111561769b575f5ffd5b8301601f810185136176ab575f5ffd5b80356001600160401b038111156176c0575f5ffd5b8560208260051b84010111156176d4575f5ffd5b6020919091019590945092505050565b60ff60f81b8816815260e060208201525f61770260e0830189617092565b82810360408401526177148189617092565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561776957835183526020938401939092019160010161774b565b50909b9a5050505050505050505050565b602081525f61412d602083018461750b565b5f5f6040838503121561779d575f5ffd5b6177a683617063565b915060208301356177b681617450565b809150509250929050565b803560ff811681146135ac575f5ffd5b5f602082840312156177e1575f5ffd5b61412d826177c1565b5f5f5f5f608085870312156177fd575f5ffd5b84356001600160401b03811115617812575f5ffd5b61781e87828801617162565b94505061782d60208601617063565b925061783b60408601617063565b9396929550929360600135925050565b5f5f5f5f6080858703121561785e575f5ffd5b61786785617063565b935061787560208601617063565b92506040850135915060608501356001600160401b03811115617896575f5ffd5b6178a287828801617162565b91505092959194509250565b5f60808284031280156178bf575f5ffd5b509092915050565b5f5f604083850312156178d8575f5ffd5b6178e183617063565b91506178ef602084016177c1565b90509250929050565b5f5f60408385031215617909575f5ffd5b61791283617063565b91506178ef60208401617063565b6001600160a01b038816815263ffffffff87811660208301528616604082015260e081016179516060830187617311565b931515608082015260ff92831660a0820152911660c090910152949350505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610eb857610eb8617987565b604081016001600160a01b036179c384617063565b168252602092830135929091019190915290565b600181811c908216806179eb57607f821691505b602082108103617a0957634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610eb857610eb8617987565b80820180821115610eb857610eb8617987565b634e487b7160e01b5f52601260045260245ffd5b5f82617a5b57617a5b617a39565b500490565b96875260208701959095526001600160a01b03938416604087015291909216606085015260ff90911660808401526001600160401b031660a083015260c082015260e00190565b6001600160401b038181168382160190811115610eb857610eb8617987565b63ffffffff8181168382160190811115610eb857610eb8617987565b63ffffffff8281168282160390811115610eb857610eb8617987565b60208101610eb88284617311565b5f60018201617b1d57617b1d617987565b5060010190565b5f60ff821660ff8103617b3957617b39617987565b60010192915050565b813581556020820135600182015560408201356002820155600381016060830135617b6c816174df565b815463ffffffff191663ffffffff919091161790555050565b5f6001600160401b0382166001600160401b038103617b3957617b39617987565b5f81518060208401855e5f93019283525090919050565b7f7b226e616d65223a202254656c636f696e2d4e6574776f726b20436f6e73656e8152651cdd5cd3919560d21b60208201525f617bfd6026830185617ba6565b7f222c20226465736372697074696f6e223a2022455243373231204e465420776881527f6f7365206f776e657273686970206c656467657220726570726573656e74732060208201527f746865207065726d697373696f6e65642077686974656c69737420666f72207660408201527530b634b230ba37b9399116101134b6b0b3b2911d101160511b6060820152617c986076820185617ba6565b61227d60f01b815260020195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f61412d601d830184617ba6565b81546001600160a01b038116825263ffffffff60a082901c8116602084015260c082901c16604083015260e0820190617d1f6060840160ff8360e01c16617311565b617d336080840160ff8360e81c1615159052565b60f081901c60ff1660a084015260f881901c60c0840152616297565b606081525f617d616060830186617092565b8281036020840152617d738186617092565b90508281036040840152614aca8185617092565b5f61412d8284617ba6565b5f60208284031215617da2575f5ffd5b815161412d81617450565b602081525f8251602080840152612a806040840182617092565b5f5b8281101561104b575f82820155600101617dc9565b601f82111561104b578282111561104b57805f5260205f20601f840160051c6020851015617e0957505f5b61121181601f860160051c03828401617dc7565b6001600160401b03831115617e3457617e3461714e565b617e4883617e4283546179d7565b83617dde565b5f601f841160018114617e79575f8515617e625750838201355b5f19600387901b1c1916600186901b178355611211565b5f83815260208120601f198716915b82811015617ea85786850135825560209485019460019092019101617e88565b5086821015617ec4575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60ff8181168382160190811115610eb857610eb8617987565b5f60ff831680617f0157617f01617a39565b8060ff84160691505092915050565b60ff8281168282160390811115610eb857610eb8617987565b5f63ffffffff821663ffffffff8103617b3957617b39617987565b81516001600160401b03811115617f5d57617f5d61714e565b600160401b811115617f7157617f7161714e565b815481835580821015617f9557825f528160205f2001617f9383830382617dc7565b505b5060208301825f5260205f205f5b838110156159e85782516001600160a01b031682820155602090920191600101617fa3565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614aca90830184617092565b5f6020828403121561800a575f5ffd5b815161412d81616fae565b5f8161802357618023617987565b505f190190565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081525f61412d601a830184617ba6565b634e487b7160e01b5f52603160045260245ffd5b6001600160e81b0319841681525f61808a6003830185617ba6565b60609390931b6001600160601b031916835250506014019291505056fe00000000000000000000000007a07a07a07a07a07a07a07a07a07a07a07a07a03c7376672077696474683d22373922206865696768743d223830222076696577426f783d22302030203739203830222066696c6c3d226e6f6e652220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e203c6d61736b2069643d226d61736b305f3834395f3334313722207374796c653d226d61736b2d747970653a616c70686122206d61736b556e6974733d227573657253706163654f6e5573652220783d22302220793d2230222077696474683d22373922206865696768743d223830223e203c726563742077696474683d2237382e30303522206865696768743d223830222066696c6c3d2223433443344334222f3e203c2f6d61736b3e203c67206d61736b3d2275726c28236d61736b305f3834395f3334313729223e203c7265637420783d2231372e393534362220793d2231382e33353435222077696474683d2234322e3239343322206865696768743d2234332e32393138222066696c6c3d227768697465222f3e203c7061746820643d224d37342e323336392032312e393839324337362e363930382032342e303331352037382e323338392032382e323537372037372e363937392033312e333733334c37322e343136362036312e333235334337312e3836362036342e343437352036382e393539322036372e383739382036352e393632392036382e393631324c33372e313934372037392e333334344333342e313938342038302e343135372032392e373432312037392e363239392032372e323936342037372e3538394c332e3831312035382e3030323143312e33353730382035352e39353938202d302e31393233382035312e3734313720302e3335383134382034382e363139354c352e36333935312031382e3636373443362e31393030342031352e3534353220392e30393638372031322e313132392031322e303933322031312e303331364c34302e3835393920302e3636363435334334332e38353632202d302e3431343835372034382e3331323520302e3337303930392035302e3735383320322e343131384c37342e323336392032312e393839325a4d34392e373634352033352e343336394c35302e393336342032392e333531334c33392e393531372032392e333638374c34312e3531362032312e333432344c33372e393538332032312e333432344333372e393538332032312e333432342033342e363332382032372e323930312032372e333030362033302e323031394c32362e323839392033352e343530334c33312e303933362033352e34364333312e303933362033352e34362032392e343637342034332e303032392032382e393331362034352e373835344332372e353637372035322e383638322033302e393830362035372e383933392033362e323238312035372e383933394333382e383630362035372e383933392034312e3831372035372e383933392034352e303937322035372e383933394c34362e363532342035312e313636364334362e323734322035312e313636362034332e383031332035312e313636362033392e323333362035312e313636364333352e393336342035312e313636362033362e313039392034392e333138392033362e373433312034362e303330354c33382e373833382033352e343333334c34392e373634352033352e343336395a222066696c6c3d2223313443384646222f3e203c2f673e203c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa164736f6c6343000823000a","sourceMap":"1293:74740:55:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1705:36;;;;;;;;;;;;;;;;;;;160:25:71;;;148:2;133:18;1705:36:55;;;;;;;;1435:222:30;;;;;;;;;;-1:-1:-1;1435:222:30;;;;;:::i;:::-;;:::i;:::-;;;843:14:71;;836:22;818:41;;806:2;791:18;1435:222:30;678:187:71;10046:1354:55;;;;;;;;;;-1:-1:-1;10046:1354:55;;;;;:::i;:::-;;:::i;:::-;;22886:249;;;;;;;;;;-1:-1:-1;22886:249:55;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2364:89:27:-;;;;;;;;;;;;;:::i;43919:136:55:-;;;;;;;;;;-1:-1:-1;43919:136:55;;;;;:::i;:::-;;:::i;3496:154:27:-;;;;;;;;;;-1:-1:-1;3496:154:27;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3241:32:71;;;3223:51;;3211:2;3196:18;3496:154:27;3077:203:71;6688:194:57;;;;;;;;;;-1:-1:-1;6688:194:57;;;;;:::i;:::-;;:::i;7203:2798:55:-;;;;;;;;;;-1:-1:-1;7203:2798:55;;;;;:::i;:::-;;:::i;32720:500::-;;;;;;;;;;;;;:::i;37389:644::-;;;;;;;;;;-1:-1:-1;37389:644:55;;;;;:::i;:::-;;:::i;28299:1914::-;;;;;;:::i;:::-;;:::i;25800:481::-;;;;;;;;;;-1:-1:-1;25800:481:55;;;;;:::i;:::-;;:::i;:::-;;;;7248:25:71;;;7304:2;7289:18;;7282:34;;;;7332:18;;;7325:34;7236:2;7221:18;25800:481:55;7046:319:71;2062:102:30;;;;;;;;;;-1:-1:-1;2140:10:30;:17;2062:102;;23584:397:55;;;;;;;;;;-1:-1:-1;23584:397:55;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40515:866::-;;;;;;;;;;;;;:::i;19288:118::-;;;;;;;;;;;;;:::i;6344:239:57:-;;;;;;;;;;-1:-1:-1;6344:239:57;;;;;:::i;21962:401:55:-;;;;;;;;;;-1:-1:-1;21962:401:55;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44100:185::-;;;;;;;;;;-1:-1:-1;44100:185:55;;;;;:::i;:::-;;:::i;33894:393::-;;;;;;;;;;-1:-1:-1;33894:393:55;;;;;:::i;:::-;;:::i;1736:255:30:-;;;;;;;;;;-1:-1:-1;1736:255:30;;;;;:::i;:::-;;:::i;27383:877:55:-;;;;;;:::i;:::-;;:::i;453:92:58:-;;;;;;;;;;;;-1:-1:-1;;;;;453:92:58;;43656:224:55;;;:::i;20563:1137::-;;;;;;;;;;-1:-1:-1;20563:1137:55;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1870:29::-;;;;;;;;;;-1:-1:-1;1870:29:55;;;;;:::i;:::-;;:::i;:::-;;;;13097:25:71;;;-1:-1:-1;;;;;13158:31:71;;;13153:2;13138:18;;13131:59;13238:10;13226:23;;;13206:18;;;13199:51;;;;13286:23;13281:2;13266:18;;13259:51;13359:4;13347:17;13341:3;13326:19;;13319:46;13084:3;13069:19;1870:29:55;12848:523:71;24778:130:55;;;;;;;;;;-1:-1:-1;24778:130:55;;;;;:::i;:::-;;:::i;70681:65::-;;;;;;;;;;;;;:::i;4786:132:27:-;;;;;;;;;;-1:-1:-1;4786:132:27;;;;;:::i;:::-;;:::i;30513:2162:55:-;;;;;;:::i;:::-;;:::i;3831:51::-;;;;;;;;;;-1:-1:-1;3831:51:55;;;;;:::i;:::-;;;;;;;;;;;;;;2236:226:30;;;;;;;;;;-1:-1:-1;2236:226:30;;;;;:::i;:::-;;:::i;4058:34:55:-;;;;;;;;;;-1:-1:-1;4058:34:55;;;;;;;;1905:35;;;;;;;;;;-1:-1:-1;1905:35:55;;;;;:::i;:::-;;:::i;1850:84:39:-;;;;;;;;;;-1:-1:-1;1920:7:39;;;;;;;1850:84;;18390:570:55;;;;;;;;;;-1:-1:-1;18390:570:55;;;;;:::i;:::-;;:::i;2184:118:27:-;;;;;;;;;;-1:-1:-1;2184:118:27;;;;;:::i;:::-;;:::i;19870:311:55:-;;;;;;;;;;;;;:::i;:::-;;;13825:4:71;13813:17;;;13795:36;;13783:2;13768:18;19870:311:55;13653:184:71;42410:405:55;;;;;;;;;;-1:-1:-1;42410:405:55;;;;;:::i;:::-;;:::i;24026:707::-;;;;;;;;;;-1:-1:-1;24026:707:55;;;;;:::i;:::-;;:::i;23180:359::-;;;;;;;;;;-1:-1:-1;23180:359:55;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24953:477::-;;;;;;;;;;-1:-1:-1;24953:477:55;;;;;:::i;:::-;;:::i;1919:208:27:-;;;;;;;;;;-1:-1:-1;1919:208:27;;;;;:::i;:::-;;:::i;2293:101:20:-;;;;;;;;;;;;;:::i;25469:292:55:-;;;;;;;;;;-1:-1:-1;25469:292:55;;;;;:::i;:::-;;:::i;5523:1635::-;;;;;;;;;;-1:-1:-1;5523:1635:55;;;;;:::i;:::-;;:::i;4261:272:57:-;;;;;;;;;;;;;:::i;:::-;;;;;;15880:13:71;;15862:32;;15950:4;15938:17;;;15932:24;15910:20;;;15903:54;16013:4;16001:17;;;15995:24;15973:20;;;15966:54;16080:4;16068:17;;;16062:24;16088:10;16058:41;16036:20;;;16029:71;;;;15849:3;15834:19;;15655:451;70444:61:55;;;;;;;;;;;;;:::i;11383:596:50:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;1198:94:57:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1198:94:57;;42854:763:55;;;;;;;;;;-1:-1:-1;42854:763:55;;;;;:::i;:::-;;:::i;21745:172::-;;;;;;;;;;-1:-1:-1;21745:172:55;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1638:85:20:-;;;;;;;;;;-1:-1:-1;1710:6:20;;;;;-1:-1:-1;;;;;1710:6:20;1638:85;;2517:93:27;;;;;;;;;;;;;:::i;22408:433:55:-;;;;;;;;;;-1:-1:-1;22408:433:55;;;;;:::i;:::-;;:::i;6987:208:57:-;;;;;;;;;;-1:-1:-1;6987:208:57;;;;;:::i;4095:126::-;;;;;;;;;;-1:-1:-1;4095:126:57;;;;;:::i;:::-;;:::i;38683:131:55:-;;;;;;;;;;;;;:::i;16822:1216::-;;;;;;;;;;;;;:::i;26321:972::-;;;;;;;;;;-1:-1:-1;26321:972:55;;;;;:::i;:::-;;:::i;38073:516::-;;;;;;;;;;;;;:::i;4984:233:27:-;;;;;;;;;;-1:-1:-1;4984:233:27;;;;;:::i;:::-;;:::i;20226:92:55:-;;;;;;;;;;-1:-1:-1;20299:12:55;;-1:-1:-1;;;20299:12:55;;;;20226:92;;20042:10:71;20030:23;;;20012:42;;20000:2;19985:18;20226:92:55;19868:192:71;20363:155:55;;;;;;;;;;;;;:::i;3559:74::-;;;;;;;;;;-1:-1:-1;3559:74:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3559:74:55;;;-1:-1:-1;;;;;3559:74:55;;;;;;;;20320:4:71;20308:17;;;20290:36;;20374:10;20362:23;;;20357:2;20342:18;;20335:51;-1:-1:-1;;;;;20422:32:71;;;20402:18;;;20395:60;;;;20486:2;20471:18;;20464:34;20277:3;20262:19;3559:74:55;20065:439:71;75436:595:55;;;;;;;;;;-1:-1:-1;75436:595:55;;;;;:::i;:::-;;:::i;30253:215::-;;;;;;;;;;;;;:::i;7251:672:57:-;;;;;;;;;;-1:-1:-1;7251:672:57;;;;;:::i;:::-;;:::i;34327:3022:55:-;;;;;;:::i;:::-;;:::i;3927:153:27:-;;;;;;;;;;-1:-1:-1;3927:153:27;;;;;:::i;:::-;;:::i;19005:104:55:-;;;;;;;;;;-1:-1:-1;19085:17:55;;-1:-1:-1;;;19085:17:55;;;;19005:104;;21450:6:71;21438:19;;;21420:38;;21408:2;21393:18;19005:104:55;21276:188:71;18083:262:55;;;;;;;;;;-1:-1:-1;18083:262:55;;;;;:::i;:::-;;:::i;2543:215:20:-;;;;;;;;;;-1:-1:-1;2543:215:20;;;;;:::i;:::-;;:::i;41420:904:55:-;;;;;;;;;;-1:-1:-1;41420:904:55;;;;;:::i;:::-;;:::i;1747:51::-;;;;;;;;;;-1:-1:-1;1747:51:55;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1747:51:55;;;;-1:-1:-1;;;1747:51:55;;;;;-1:-1:-1;;;1747:51:55;;;;;;;-1:-1:-1;;;1747:51:55;;;;;-1:-1:-1;;;1747:51:55;;;;;-1:-1:-1;;;1747:51:55;;;;;-1:-1:-1;;;1747:51:55;;;;;;;;;;;;;;;;;;:::i;1435:222:30:-;1537:4;-1:-1:-1;;;;;;1560:50:30;;-1:-1:-1;;;1560:50:30;;:90;;;1614:36;1638:11;1614:23;:36::i;:::-;1553:97;1435:222;-1:-1:-1;;1435:222:30:o;10046:1354:55:-;592:10:58;-1:-1:-1;;;;;592:28:58;588:67;;629:26;;-1:-1:-1;;;629:26:58;;644:10;629:26;;;3223:51:71;3196:18;;629:26:58;;;;;;;;588:67;10142:9:55::1;10137:1257;10153:18:::0;;::::1;10137:1257;;;10192:20;10215:7;;10223:1;10215:10;;;;;;;:::i;:::-;;;::::0;;;::::1;::::0;-1:-1:-1;10464:15:55::1;::::0;-1:-1:-1;10490:22:55::1;;::::0;::::1;10215:10:::0;10490:22:::1;:::i;:::-;10464:49:::0;-1:-1:-1;;;;;;10531:12:55;::::1;::::0;;:44:::1;;-1:-1:-1::0;;;;;;10547:28:55;;::::1;;10531:44;10527:58;;;10577:8;;;;10527:58;10770:33;10780:22;;::::0;::::1;:5:::0;:22:::1;:::i;10770:33::-;10766:47;;;10805:8;;;;10766:47;10867:12;::::0;::::1;::::0;::::1;::::0;10832:8:::1;::::0;:32:::1;::::0;10841:22:::1;::::0;10867:5;10841:22:::1;:::i;:::-;-1:-1:-1::0;;;;;10832:32:55::1;-1:-1:-1::0;;;;;10832:32:55::1;;;;;;;;;;;;;:47;10828:513;;;11173:12;::::0;::::1;::::0;::::1;::::0;11137:8:::1;::::0;:32:::1;::::0;11146:22:::1;::::0;11173:5;11146:22:::1;:::i;:::-;-1:-1:-1::0;;;;;11137:32:55::1;-1:-1:-1::0;;;;;11137:32:55::1;;;;;;;;;;;;;:48;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;10828:513:55::1;::::0;-1:-1:-1;10828:513:55::1;;11288:38;11303:22;;::::0;::::1;:5:::0;:22:::1;:::i;:::-;11288:14;:38::i;:::-;11360:23;11377:5;11360:23;;;;;;:::i;:::-;;;;;;;;10178:1216;;10137:1257;10173:3;;10137:1257;;;;10046:1354:::0;;:::o;22886:249::-;-1:-1:-1;;;;;23001:28:55;;22979:19;23001:28;;;:10;:28;;;;;22979:50;;22955:12;;22979:19;23001:28;22979:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23043:6;:13;23060:1;23043:18;23039:66;;23070:35;;-1:-1:-1;;;23070:35:55;;-1:-1:-1;;;;;3241:32:71;;23070:35:55;;;3223:51:71;3196:18;;23070:35:55;3077:203:71;2364:89:27;2409:13;2441:5;2434:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2364:89;:::o;43919:136:55:-;1531:13:20;:11;:13::i;:::-;44001:47:55::1;::::0;-1:-1:-1;;;44001:47:55;;::::1;::::0;::::1;23555:25:71::0;;;44037:10:55::1;23596:18:71::0;;;23589:60;-1:-1:-1;;;;;;;;;;;1249:42:57;44001:27:55::1;::::0;23528:18:71;;44001:47:55::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43919:136:::0;:::o;3496:154:27:-;3563:7;3582:22;3596:7;3582:13;:22::i;:::-;-1:-1:-1;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;3622:21;5963:127;6688:194:57;6858:17;;-1:-1:-1;;;6858:17:57;;;;;;;;;;;7203:2798:55;592:10:58;-1:-1:-1;;;;;592:28:58;588:67;;629:26;;-1:-1:-1;;;629:26:58;;644:10;629:26;;;3223:51:71;3196:18;;629:26:58;3077:203:71;588:67:58;7391:19:55::1;::::0;7461:11;-1:-1:-1;;;;;7447:33:55;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;7447:33:55::1;;7420:60;;7495:9;7490:1531;7506:22:::0;;::::1;7490:1531;;;7549:26;7578:11;;7590:1;7578:14;;;;;;;:::i;:::-;;;;;;7549:43;;7610:6;:27;;;7641:1;7610:32:::0;7606:46:::1;;7644:8;;;7606:46;7891:16;7918:23;;::::0;::::1;:6:::0;:23:::1;:::i;:::-;7891:51:::0;-1:-1:-1;;;;;;7960:13:55;::::1;::::0;;:46:::1;;-1:-1:-1::0;;;;;;7977:29:55;;::::1;;7960:46;7956:60;;;8008:8;;;;7956:60;8201:34;8211:23;;::::0;::::1;:6:::0;:23:::1;:::i;8201:34::-;8197:48;;;8237:8;;;;8197:48;8260:21;8284:10;8260:21:::0;8295:23:::1;;::::0;::::1;:6:::0;:23:::1;:::i;:::-;-1:-1:-1::0;;;;;8284:35:55::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;8284:35:55;;;:48;-1:-1:-1;;;8284:48:55;::::1;;;8672:25:::0;;;:8:::1;:25:::0;;;;;:37;8284:48;;-1:-1:-1;8672:37:55;;8741:8:::1;::::0;-1:-1:-1;;8750:23:55::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;8741:33:55::1;-1:-1:-1::0;;;;;8741:33:55::1;;;;;;;;;;;;;8723:51;;8788:19;8820:18;8810:7;:28;:59;;8851:18;8810:59;;;8841:7;8810:59;8788:81:::0;-1:-1:-1;8883:14:55::1;8900:41;8914:27;::::0;::::1;;8788:81:::0;8900:41:::1;:::i;:::-;8883:58:::0;-1:-1:-1;8956:21:55::1;8883:58:::0;8956:21;::::1;:::i;:::-;;;9004:6;8991:7;8999:1;8991:10;;;;;;;;:::i;:::-;;;;;;:19;;;::::0;::::1;7535:1486;;;;;;;7490:1531;7530:3;;7490:1531;;;;9035:11;9050:1;9035:16:::0;9031:29:::1;;9053:7;;7203:2798:::0;;:::o;9031:29::-:1;9152:21;9176;:19;:21::i;:::-;:35;;;9152:59;;9221:34;9274:21;;9258:13;:37;;;;:::i;:::-;9221:74;;9379:25;9419:9;9414:442;9430:22:::0;;::::1;9414:442;;;9590:20;9657:11;9643:7;9651:1;9643:10;;;;;;;;:::i;:::-;;;;;;;9614:26;:39;;;;:::i;:::-;9613:55;;;;:::i;:::-;9590:78:::0;-1:-1:-1;9687:16:55;;9683:163:::1;;9768:12;9723:8;:41;9732:11;;9744:1;9732:14;;;;;;;:::i;:::-;:31;::::0;::::1;:14;::::0;;::::1;;:31:::0;;::::1;::::0;-1:-1:-1;9732:31:55::1;:::i;:::-;-1:-1:-1::0;;;;;9723:41:55::1;-1:-1:-1::0;;;;;9723:41:55::1;;;;;;;;;;;;;:57;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;9798:33:55::1;::::0;-1:-1:-1;9819:12:55;9798:33;::::1;:::i;:::-;;;9683:163;-1:-1:-1::0;9454:3:55::1;;9414:442;;;-1:-1:-1::0;9948:46:55::1;9977:17:::0;9948:26;:46:::1;:::i;:::-;9924:21;:70:::0;-1:-1:-1;;;;;665:1:58::1;7203:2798:55::0;;:::o;32720:500::-;1474:19:39;:17;:19::i;:::-;32872:35:55::1;32896:10;32872:23;:35::i;:::-;;32963:57;32985:10;32997:22;32963:21;:57::i;:::-;33076:10;33031:31;33065:22:::0;;;:10:::1;:22;::::0;;;;33200:12:::1;::::0;33172:41:::1;::::0;33065:22;;-1:-1:-1;;;33200:12:55;::::1;;;33172:16;:41::i;:::-;32772:448;32720:500::o:0;37389:644::-;1474:19:39;:17;:19::i;:::-;1635:9:53::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;37570:39:55::2;37592:16;37570:21;:39::i;:::-;-1:-1:-1::0;;;;;;37663:39:55;;::::2;37620:40;37663:39:::0;;;:21:::2;:39;::::0;;;;;;;37620:82;;::::2;::::0;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;::::2;;::::0;::::2;;::::0;;::::2;::::0;;;;-1:-1:-1;;;37620:82:55;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;;;;;37716:26;;37712:63:::2;;37751:24;;-1:-1:-1::0;;;37751:24:55::2;;;;;;;;;;;37712:63;-1:-1:-1::0;;;;;37793:39:55;::::2;;::::0;;;:21:::2;:39;::::0;;;;37786:46;;-1:-1:-1;;;;;;37786:46:55;;;;::::2;::::0;37842::::2;:21;37815:16:::0;37842:28:::2;:46::i;:::-;-1:-1:-1::0;37902:14:55::2;::::0;::::2;::::0;:18;37898:68:::2;;37922:44;37935:7;:14;;;37951:7;:14;;;37922:12;:44::i;:::-;37982;::::0;-1:-1:-1;;;;;37982:44:55;::::2;::::0;::::2;::::0;;;::::2;37494:539;1937:10:53::1;1913:22;1906:42;37389:644:55::0;:::o;28299:1914::-;1474:19:39;:17;:19::i;:::-;28719:21:55::1;28743:72;28768:17;28787:16;28805:9;;28743:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28743:24:55::1;::::0;-1:-1:-1;;;28743:72:55:i:1;:::-;28719:96;;28936:22;28961:21;:19;:21::i;:::-;:34;;;28936:59;;29005:16;29024:45;29041:9;29052:16;29024;:45::i;:::-;29005:64;;29079:41;29103:16;29079:23;:41::i;:::-;;29182:66;29204:16;29222:25;29182:21;:66::i;:::-;-1:-1:-1::0;;;;;29273:29:55;::::1;29258:12;29273:29:::0;;;:11:::1;:29;::::0;;;;:35:::1;;::::0;-1:-1:-1;;;;;;;;29273:35:55;;::::1;;29417:7;1710:6:20::0;;-1:-1:-1;;;;;1710:6:20;;;;;;1638:85;29417:7:55::1;-1:-1:-1::0;;;;;29403:21:55::1;:10;-1:-1:-1::0;;;;;29403:21:55::1;;29399:589;;29462:8;29444:15;:26;29440:66;;;29479:27;::::0;-1:-1:-1;;;29479:27:55;;::::1;::::0;::::1;160:25:71::0;;;133:18;;29479:27:55::1;14:177:71::0;29440:66:55::1;29520:18;1417:156:57;29621:13:55;29636:16;29654:10;29666:16;29684:5;29691:8;29568:149;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29541:190;;;;;;29520:211;;29745:14;29762:26;29777:10;29762:14;:26::i;:::-;29745:43;;29807:99;29855:16;29873:6;29881:24;;29807:47;:99::i;:::-;29802:176;;29933:30;::::0;-1:-1:-1;;;29933:30:55;;-1:-1:-1;;;;;3241:32:71;;29933:30:55::1;::::0;::::1;3223:51:71::0;3196:18;;29933:30:55::1;3077:203:71::0;29802:176:55::1;29426:562;;29399:589;30042:84;;;;;;;;30053:13;30042:84;;;;30068:16;-1:-1:-1::0;;;;;30042:84:55::1;;;;;30086:10;-1:-1:-1::0;;;;;30042:84:55::1;;;;;30098:16;30042:84;;;;;;30116:5;30124:1;30116:9;;;;:::i;:::-;-1:-1:-1::0;;;;;30042:84:55;;::::1;::::0;;;-1:-1:-1;;;;;29998:29:55;;::::1;;::::0;;;:11:::1;:29;::::0;;;;;;;;:128;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;29998:128:55::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;29998:128:55;;;;;;;-1:-1:-1;;;29998:128:55::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;29998:128:55::1;-1:-1:-1::0;;;29998:128:55;;;::::1;::::0;;;::::1;;::::0;;30136:70:::1;30150:9:::0;;29998:29;30179:16;30197:8;30136:13:::1;:70::i;:::-;28599:1614;;;;28299:1914:::0;;;;;;;:::o;25800:481::-;-1:-1:-1;;;;;25947:28:55;;25885:7;25947:28;;;:10;:28;;;;;;;;:41;-1:-1:-1;;;25947:41:55;;;;26027:26;;;:8;:26;;;;;:38;25885:7;;;;;26093:49;25947:28;26027:38;26093:11;:49::i;:::-;-1:-1:-1;;;;;26181:26:55;;;;26152;26181;;;:8;:26;;;;;;;26246:18;;;-1:-1:-1;25800:481:55;;-1:-1:-1;;;;25800:481:55:o;23584:397::-;23653:20;;:::i;:::-;-1:-1:-1;;;;;23714:28:55;;23685:26;23714:28;;;:10;:28;;;;;23836:14;;-1:-1:-1;;;23836:14:55;;;;23831:122;;23901:41;23925:16;23901:23;:41::i;:::-;;23831:122;23963:11;;;;;;;;;;-1:-1:-1;;;;;23963:11:55;;;;;-1:-1:-1;;;23963:11:55;;;;;;;;-1:-1:-1;;;23963:11:55;;;;;;;;;;;23970:4;;23963:11;;;;;-1:-1:-1;;;23963:11:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;23963:11:55;;;;;;;;;;-1:-1:-1;;;23963:11:55;;;;;;;;-1:-1:-1;;;23963:11:55;;;;;;;;;;23584:397;-1:-1:-1;;;23584:397:55:o;40515:866::-;1474:19:39;:17;:19::i;:::-;40668:35:55::1;40692:10;40668:23;:35::i;:::-;;40760:17;40780:25;19801:22:::0;;;19717:113;40780:25:::1;40849:12;::::0;40760:45;;-1:-1:-1;40815:21:55::1;::::0;40839:9:::1;::::0;-1:-1:-1;;;40849:12:55;::::1;;;40839:23;::::0;::::1;;;;;:::i;:::-;;;;:40:::0;;-1:-1:-1;40889:45:55::1;40909:9:::0;40839:40;40889:19:::1;:45::i;:::-;41028:57;41050:10;41062:22;41028:21;:57::i;:::-;41140:10;41095:31;41129:22:::0;;;:10:::1;:22;::::0;;;;41178:12:::1;::::0;41214:25;;41178:12:::1;-1:-1:-1::0;;;41178:12:55;;::::1;::::0;::::1;::::0;-1:-1:-1;;;41214:25:55;;::::1;;41204:35:::0;::::1;41200:94;;;41262:21;::::0;-1:-1:-1;;;41262:21:55;;20042:10:71;20030:23;;41262:21:55::1;::::0;::::1;20012:42:71::0;19985:18;;41262:21:55::1;19868:192:71::0;41200:94:55::1;41353:21;41364:9;41353:10;:21::i;:::-;40568:813;;;;40515:866::o:0;19288:118::-;19348:7;19374:25;19801:22;;;19717:113;19374:25;19367:32;;19288:118;:::o;21962:401::-;22034:22;22068:29;22090:6;22068:21;:29::i;:::-;22108:22;22133;22148:6;22133:14;:22::i;:::-;22108:47;;22165:28;22216:5;:12;-1:-1:-1;;;;;22196:33:55;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22165:64;;22244:9;22239:95;22259:5;:12;22255:1;:16;22239:95;;;22303:10;:20;22314:5;22320:1;22314:8;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;22303:20:55;;;;;;;;;;;;;;;;-1:-1:-1;22303:20:55;22292:31;;;;;;;;;;;;;;;-1:-1:-1;;;22292:31:55;;;;;;;;;;;-1:-1:-1;;;22292:31:55;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22292:31:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;22292:31:55;;;;;;;;;;-1:-1:-1;;;22292:31:55;;;;;;;;-1:-1:-1;;;22292:31:55;;;;;;;;;:8;;:5;;22298:1;;22292:8;;;;;;:::i;:::-;;;;;;;;;;:31;22273:3;;22239:95;;;-1:-1:-1;22351:5:55;21962:401;-1:-1:-1;;;21962:401:55:o;44100:185::-;1531:13:20;:11;:13::i;:::-;44188:22:55::1;:33:::0;;-1:-1:-1;;44188:33:55::1;::::0;::::1;;::::0;;::::1;::::0;;;44236:42:::1;::::0;818:41:71;;;44236:42:55::1;::::0;806:2:71;791:18;44236:42:55::1;;;;;;;;44100:185:::0;:::o;33894:393::-;1474:19:39;:17;:19::i;:::-;1635:9:53::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;34002:17:55::2;34022:39;34044:16;34022:21;:39::i;:::-;-1:-1:-1::0;;;;;34096:28:55;::::2;34071:22;34096:28:::0;;;:10:::2;:28;::::0;;;;:41;34002:59;;-1:-1:-1;;;;34096:41:55;;::::2;;;::::0;34165:65:::2;34096:28:::0;34002:59;34096:41;34165:18:::2;:65::i;:::-;34147:83;;34261:9;-1:-1:-1::0;;;;;34246:34:55::2;;34272:7;34246:34;;;;160:25:71::0;;148:2;133:18;;14:177;34246:34:55::2;;;;;;;;33992:295;;;1937:10:53::1;1913:22;1906:42;33894:393:55::0;:::o;1736:255:30:-;1824:7;1856:16;1866:5;1856:9;:16::i;:::-;1847:5;:25;1843:99;;1895:36;;-1:-1:-1;;;1895:36:30;;-1:-1:-1;;;;;25302:32:71;;1895:36:30;;;25284:51:71;25351:18;;;25344:34;;;25257:18;;1895:36:30;25110:274:71;1843:99:30;-1:-1:-1;;;;;;1958:19:30;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1736:255::o;27383:877:55:-;1474:19:39;:17;:19::i;:::-;27660:66:55::1;27685:17;27704:10;27716:9;;27660:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27660:24:55::1;::::0;-1:-1:-1;;;27660:66:55:i:1;:::-;;27835:22;27860:21;:19;:21::i;:::-;:34;;;27835:59;;27904:16;27923:45;27940:9;27951:16;27923;:45::i;:::-;27904:64;;27978:35;28002:10;27978:23;:35::i;:::-;;28071:60;28093:10;28105:25;28071:21;:60::i;:::-;28189:64;28203:9;;28214:10;28226:16;28244:8;28189:13;:64::i;43656:224::-:0;1531:13:20;:11;:13::i;:::-;43742:37:55::1;::::0;43731:6:::1;::::0;-1:-1:-1;;;;;;;;;;;1249:42:57;43764:9:55::1;::::0;43731:6;43742:37;43731:6;43742:37;43764:9;1249:42:57;43742:37:55::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43730:49;;;43839:1;43834:39;;43849:24;;-1:-1:-1::0;;;43849:24:55::1;;;;;;;;;;;20563:1137:::0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20665:12:55;;-1:-1:-1;;;20665:12:55;;;;20699:11;20665:12;20709:1;20699:11;:::i;:::-;20691:19;;:5;:19;;;:60;;;;20726:1;20715:7;:12;;;;:35;;;;-1:-1:-1;20739:11:55;20749:1;20739:7;:11;:::i;:::-;20731:19;;:5;:19;;;20715:35;20687:117;;;20774:19;;-1:-1:-1;;;20774:19:55;;20042:10:71;20030:23;;20774:19:55;;;20012:42:71;19985:18;;20774:19:55;19868:192:71;20687:117:55;20837:12;;-1:-1:-1;;;20837:12:55;;;;20863:15;;;;;;;;20859:835;;;21245:23;21271:51;21291:5;21298:7;21307:14;21271:19;:51::i;:::-;21245:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21245:77:55;;;;;;;;;;;;;;;;-1:-1:-1;;;21245:77:55;;;-1:-1:-1;;21245:77:55;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21245:77:55;;;;;;;;;;;-1:-1:-1;;;21245:77:55;;;;;;;;-1:-1:-1;;;21245:77:55;;;;;;;;;;;;;-1:-1:-1;;;21245:77:55;;;;;;;;;;21380:12;;;;;-1:-1:-1;21371:22:55;;;:8;:22;;;;;;21430:26;;;;21407:20;;;:49;;;;21493:26;;;;;;;;21470:20;;;:49;21533:19;;:34;21245:77;20563:1137;-1:-1:-1;;;;;20563:1137:55:o;20859:835::-;21632:51;21652:5;21659:7;21668:14;21632:19;:51::i;:::-;21625:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21625:58:55;;;;;;;;;;;;;;;;-1:-1:-1;;;21625:58:55;;;-1:-1:-1;;21625:58:55;;;;;;;;;;;;;-1:-1:-1;;;;;21625:58:55;;;;;;;-1:-1:-1;;;21625:58:55;;;;;;;;-1:-1:-1;;;21625:58:55;;;;;;;;-1:-1:-1;;;21625:58:55;;;;;;;;;;20563:1137;-1:-1:-1;;;;20563:1137:55:o;1870:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1870:29:55;;;-1:-1:-1;;;1870:29:55;;;;;;;-1:-1:-1;;;1870:29:55;;;;;;-1:-1:-1;;;1870:29:55;;;;;:::o;24778:130::-;-1:-1:-1;;;;;11617:29:57;;;24848:4:55;11617:29:57;;;:11;:29;;;;;:39;;;24848:4:55;;11617:39:57;:53;;24871:30:55;11523:154:57;70681:65:55;1531:13:20;:11;:13::i;:::-;70729:10:55::1;:8;:10::i;:::-;70681:65::o:0;4786:132:27:-;4872:39;4889:4;4895:2;4899:7;4872:39;;;;;;;;;;;;:16;:39::i;30513:2162:55:-;1474:19:39;:17;:19::i;:::-;30726:41:55::1;30750:16;30726:23;:41::i;:::-;-1:-1:-1::0;1710:6:20;;;;;-1:-1:-1;;;;;1710:6:20;-1:-1:-1;;;;;30936:21:55::1;:10;-1:-1:-1::0;;;;;30936:21:55::1;;30932:283;;30977:22;::::0;::::1;;30973:59;;;31008:24;;-1:-1:-1::0;;;31008:24:55::1;;;;;;;;;;;30973:59;31046:17;31066:31;31080:16;31066:13;:31::i;:::-;31046:51:::0;-1:-1:-1;31115:10:55::1;-1:-1:-1::0;;;;;31115:30:55;::::1;;::::0;::::1;::::0;:57:::1;;-1:-1:-1::0;31149:10:55::1;-1:-1:-1::0;;;;;31149:23:55;::::1;;;31115:57;31111:93;;;31181:23;::::0;-1:-1:-1;;;31181:23:55;;-1:-1:-1;;;;;3241:32:71;;31181:23:55::1;::::0;::::1;3223:51:71::0;3196:18;;31181:23:55::1;3077:203:71::0;31111:93:55::1;30959:256;30932:283;-1:-1:-1::0;;;;;31332:28:55;::::1;31307:22;31332:28:::0;;;:10:::1;:28;::::0;;;;:42;-1:-1:-1;;;31332:42:55;::::1;;;31411:22;31401:6;:32;;;;;;;;:::i;:::-;;;:79;;;;-1:-1:-1::0;31447:33:55::1;31437:6;:43;;;;;;;;:::i;:::-;;;31401:79;:131;;;;-1:-1:-1::0;31510:22:55::1;31500:6;:32;;;;;;;;:::i;:::-;;;31401:131;31384:212;;;31578:6;31564:21;;-1:-1:-1::0;;;31564:21:55::1;;;;;;;;:::i;31384:212::-;-1:-1:-1::0;;;;;31631:28:55;::::1;31606:22;31631:28:::0;;;:10:::1;:28;::::0;;;;;;;:41;-1:-1:-1;;;31631:41:55;::::1;;;31704:26:::0;;;:8:::1;:26:::0;;;;;:38;31777:26;;;:8:::1;:26:::0;;;;;;;31631:41;;31704:38;31817:29;;::::1;31813:134;;31869:67;::::0;-1:-1:-1;;;31869:67:55;;-1:-1:-1;;;;;26388:32:71;;31869:67:55::1;::::0;::::1;26370:51:71::0;26437:18;;;26430:34;;;26512:4;26500:17;;26480:18;;;26473:45;26343:18;;31869:67:55::1;26172:352:71::0;31813:134:55::1;31957:15;31975:28;31989:14:::0;31975:11;:28:::1;:::i;:::-;31957:46;;32030:7;32017:9;:20;32013:125;;32060:67;::::0;-1:-1:-1;;;32060:67:55;;-1:-1:-1;;;;;26388:32:71;;32060:67:55::1;::::0;::::1;26370:51:71::0;32099:9:55::1;26437:18:71::0;;;26430:34;26512:4;26500:17;;26480:18;;;26473:45;26343:18;;32060:67:55::1;26172:352:71::0;32013:125:55::1;-1:-1:-1::0;;;;;32148:26:55;::::1;;::::0;;;:8:::1;:26;::::0;;;;:37;;32178:7;;32148:26;:37:::1;::::0;32178:7;;32148:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;32472:37:55::1;::::0;32461:6:::1;::::0;-1:-1:-1;;;;;;;;;;;1249:42:57;32494:9:55::1;::::0;32461:6;32472:37;32461:6;32472:37;32494:9;1249:42:57;32472:37:55::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32460:49;;;32569:1;32564:39;;32579:24;;-1:-1:-1::0;;;32579:24:55::1;;;;;;;;;;;32564:39;32642:16;-1:-1:-1::0;;;;;32619:49:55::1;;32660:7;32619:49;;;;160:25:71::0;;148:2;133:18;;14:177;32619:49:55::1;;;;;;;;30606:2069;;;;;;30513:2162:::0;:::o;2236:226:30:-;2302:7;2334:13;2140:10;:17;;2062:102;2334:13;2325:5;:22;2321:101;;2370:41;;-1:-1:-1;;;2370:41:30;;2401:1;2370:41;;;25284:51:71;25351:18;;;25344:34;;;25257:18;;2370:41:30;25110:274:71;2321:101:30;2438:10;2449:5;2438:17;;;;;;;;:::i;:::-;;;;;;;;;2431:24;;2236:226;;;:::o;1905:35:55:-;;;;;;;;;;;18390:570;1531:13:20;:11;:13::i;:::-;18469:7:55::1;:12;;18480:1;18469:12:::0;18465:115:::1;;18535:12;::::0;18525:9:::1;::::0;-1:-1:-1;;;18535:12:55;::::1;;;18525:23;::::0;::::1;;;;;:::i;:::-;;;;:40:::0;18504:65:::1;::::0;-1:-1:-1;;;18504:65:55;;::::1;::::0;::::1;26711:25:71::0;;;;18525:33:55::1;26752:18:71::0;;;26745:34;26684:18;;18504:65:55::1;26529:256:71::0;18465:115:55::1;18646:16;18665:25;19801:22:::0;;;19717:113;18665:25:::1;18646:44;;18714:8;18704:7;:18;;;18700:104;;;18745:48;::::0;-1:-1:-1;;;18745:48:55;;::::1;::::0;::::1;26711:25:71::0;;;18776:16:55::1;::::0;::::1;26752:18:71::0;;;26745:34;26684:18;;18745:48:55::1;26529:256:71::0;18700:104:55::1;18831:17;::::0;;::::1;18858:27:::0;;::::1;-1:-1:-1::0;;;18858:27:55;;::::1;-1:-1:-1::0;;;;18858:27:55;::::1;;::::0;;;18901:52:::1;::::0;;18831:17;;;::::1;::::0;;::::1;27241:38:71::0;;;27310:2;27295:18;;27288:47;;;;27351:18;;;27344:34;;;18831:17:55;18901:52:::1;::::0;27229:2:71;27214:18;18901:52:55::1;;;;;;;18455:505;;18390:570:::0;:::o;2184:118:27:-;2247:7;2273:22;2287:7;2273:13;:22::i;19870:311:55:-;19934:5;20140:21;:19;:21::i;:::-;:34;;;20133:41;;19870:311;:::o;42410:405::-;1531:13:20;:11;:13::i;:::-;42581:27:55::1;42591:16;42581:9;:27::i;:::-;:32:::0;::::1;::::0;:63:::1;;;42617:27;42627:16;42617:9;:27::i;:::-;42577:133;;;42667:32;::::0;-1:-1:-1;;;42667:32:55;;-1:-1:-1;;;;;3241:32:71;;42667::55::1;::::0;::::1;3223:51:71::0;3196:18;;42667:32:55::1;3077:203:71::0;42577:133:55::1;42754:54;42760:16:::0;-1:-1:-1;;;;;12706:32:57;;42754:5:55::1;:54::i;24026:707::-:0;24094:4;24191:2;24171:22;;24167:40;;-1:-1:-1;24202:5:55;24195:12;;24167:40;24308:21;24332:20;24342:9;;24332:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24332:9:55;;-1:-1:-1;;;24332:20:55:i;:::-;24362:24;24389:39;;;:24;:39;;;;;;24308:44;;-1:-1:-1;;;;;;24389:39:55;;24494:48;;24537:5;24530:12;;;;;;24494:48;24663:27;24673:16;24663:9;:27::i;:::-;24659:45;;;24699:5;24692:12;;;;;;24659:45;-1:-1:-1;24722:4:55;;24026:707;-1:-1:-1;;;;24026:707:55:o;23180:359::-;23247:14;23273:26;23302:19;23315:5;23302:12;:19::i;:::-;:29;;;23273:58;;23341:22;23378:9;:16;-1:-1:-1;;;;;23366:29:55;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23341:54;;23410:9;23405:103;23425:7;:14;23421:1;:18;23405:103;;;23473:10;:24;23484:9;23494:1;23484:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23473:24:55;-1:-1:-1;;;;;23473:24:55;;;;;;;;;;;;23460:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;23468:1;23460:10;;;;;;;;:::i;:::-;;;;;;;;;;:37;23441:3;;23405:103;;24953:477;25019:4;25039:38;-1:-1:-1;;;;;12706:32:57;;25039:7:55;:38::i;:::-;25035:333;;;-1:-1:-1;25156:5:55;;24953:477;-1:-1:-1;24953:477:55:o;25035:333::-;25228:25;-1:-1:-1;;;;;25182:28:55;;;;;;:10;:28;;;;;:42;-1:-1:-1;;;25182:42:55;;;;:71;;;;;;;;:::i;:::-;;25178:190;;-1:-1:-1;25352:5:55;;24953:477;-1:-1:-1;24953:477:55:o;25178:190::-;-1:-1:-1;;;;;;25385:28:55;;;;;:10;:28;;;;;:38;-1:-1:-1;;;25385:38:55;;;;;24953:477::o;1919:208:27:-;1982:7;-1:-1:-1;;;;;2005:19:27;;2001:87;;2047:30;;-1:-1:-1;;;2047:30:27;;2074:1;2047:30;;;3223:51:71;3196:18;;2047:30:27;3077:203:71;2001:87:27;-1:-1:-1;;;;;;2104:16:27;;;;;:9;:16;;;;;;;1919:208::o;2293:101:20:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;25469:292:55:-:0;-1:-1:-1;;;;;25585:28:55;;25545:7;25585:28;;;:10;:28;;;;;;;;:41;-1:-1:-1;;;25585:41:55;;;;25659:22;;;:8;:22;;;;;:34;25711:43;25585:28;25659:34;25711:11;:43::i;:::-;25704:50;25469:292;-1:-1:-1;;;;25469:292:55:o;5523:1635::-;592:10:58;-1:-1:-1;;;;;592:28:58;588:67;;629:26;;-1:-1:-1;;;629:26:58;;644:10;629:26;;;3223:51:71;3196:18;;629:26:58;3077:203:71;588:67:58;5667:29:55::1;5683:12;;5667:15;:29::i;:::-;6142:27;:25;:27::i;:::-;6473:17;::::0;-1:-1:-1;;;6473:17:55;::::1;;;6450:40:::0;::::1;6446:138;;6534:17;::::0;6513:60:::1;::::0;-1:-1:-1;;;6513:60:55;;-1:-1:-1;;;6534:17:55;;::::1;;;6513:60;::::0;::::1;27562:38:71::0;27616:18;;;27609:34;;;27535:18;;6513:60:55::1;27389:260:71::0;6446:138:55::1;6653:15;6670:21;6693:15;6710:34;6760:30;6777:12;;6760:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;6760:16:55::1;::::0;-1:-1:-1;;;6760:30:55:i:1;:::-;6652:138;;;;;;;;6800:45;6822:12;;6836:8;6800:21;:45::i;:::-;6933:67;6953:25;19801:22:::0;;;19717:113;6953:25:::1;6980:12:::0;6933:19:::1;:67::i;:::-;7016:135;7038:103;;;;;;;;7048:17;7038:103;;;;7067:13;7038:103;;;;7089:12;7104:1;7089:16;;;;:::i;:::-;-1:-1:-1::0;;;;;7038:103:55::1;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;;;;;;7128:12:::1;::::0;::::1;;7038:103:::0;;;;;;;;7016:135;::::1;::::0;;::::1;:::i;:::-;;;;;;;;5612:1546;;;;5523:1635:::0;;:::o;4261:272:57:-;4315:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4315:18:57;-1:-1:-1;4513:12:57;;;;4504:22;;;;:8;:22;;;;;;;;;4497:29;;;;;;;;;;;4513:12;4497:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4261:272::o;70444:61:55:-;1531:13:20;:11;:13::i;:::-;70490:8:55::1;:6;:8::i;11383:596:50:-:0;-1:-1:-1;;;11508:18:50;;11481:13;;;11508:18;11779:23;13086:36:57;;;;;;;;;;;-1:-1:-1;;;13086:36:57;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13086:36:57;;;;;12973:156;11779:23:50;11383:596;;11761:41;;;-1:-1:-1;11822:13:50;;-1:-1:-1;11873:4:50;;-1:-1:-1;11383:596:50;;-1:-1:-1;11383:596:50;:::o;42854:763:55:-;1531:13:20;:11;:13::i;:::-;42936:27:55::1;42946:16;42936:9;:27::i;:::-;42932:74;;;42986:19;42972:34;;-1:-1:-1::0;;;42972:34:55::1;;;;;;;;:::i;42932:74::-;43116:41;43140:16;43116:23;:41::i;:::-;-1:-1:-1::0;43218:25:55::1;-1:-1:-1::0;;;;;43172:28:55;::::1;;::::0;;;:10:::1;:28;::::0;;;;:42;-1:-1:-1;;;43172:42:55;::::1;;;:71;::::0;::::1;;;;;;:::i;:::-;::::0;43168:443:::1;;-1:-1:-1::0;;;;;43376:28:55;::::1;;::::0;;;:10:::1;:28;::::0;;;;43368:37:::1;::::0;:7:::1;:37::i;:::-;43419:36;-1:-1:-1::0;;;;;12706:32:57;;43419:5:55::1;:36::i;43168:443::-;43568:32;43583:16;43568:14;:32::i;21745:172::-:0;21813:16;21841:29;21863:6;21841:21;:29::i;:::-;21888:22;21903:6;21888:14;:22::i;2517:93:27:-;2564:13;2596:7;2589:14;;;;;:::i;22408:433:55:-;22475:22;22509:26;22538:19;22551:5;22538:12;:19::i;:::-;:29;;;22509:58;;22577:42;22642:9;:16;-1:-1:-1;;;;;22622:37:55;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22577:82;;22674:9;22669:129;22689:19;:26;22685:1;:30;22669:129;;;22761:26;22774:9;22784:1;22774:12;;;;;;;;:::i;:::-;;;;;;;22761;:26::i;:::-;22736:19;22756:1;22736:22;;;;;;;;:::i;:::-;;;;;;;;;;:51;22717:3;;22669:129;;4095:126:57;4160:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4160:18:57;-1:-1:-1;4197:17:57;;;;;;:8;:17;;;;;;;;;4190:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4095:126::o;38683:131:55:-;38742:16;38777:30;:21;:28;:30::i;16822:1216::-;592:10:58;-1:-1:-1;;;;;592:28:58;588:67;;629:26;;-1:-1:-1;;;629:26:58;;644:10;629:26;;;3223:51:71;3196:18;;629:26:58;3077:203:71;588:67:58;16888:14:55::1;16905:13;2140:10:30::0;:17;;2062:102;16905:13:55::1;16888:30;;16928:16;16959:9;16954:988;16974:6;16970:1;:10;16954:988;;;17001:24;17028;17036:15;17049:1;17036:12;:15::i;17028:24::-;-1:-1:-1::0;;;;;17277:28:55;::::1;17252:22;17277:28:::0;;;:10:::1;:28;::::0;;;;17252:53;;17001:51;;-1:-1:-1;17252:22:55;;:53:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17323:9;:16;17343:2;17323:22:::0;17319:197:::1;;17397:20:::0;;::::1;::::0;;::::1;::::0;;;;17372:46:::1;::::0;;;:24:::1;:46:::0;;;;;;;17365:53;;-1:-1:-1;;;;;;17365:53:55::1;::::0;;17485:16;;17372:24;17461:20:::1;17407:9:::0;17461::::1;:20::i;:::-;17436:46;;;;;;;;;;;;:65;;;;;-1:-1:-1::0;;;;;17436:65:55::1;;;;;-1:-1:-1::0;;;;;17436:65:55::1;;;;;;17319:197;-1:-1:-1::0;;;;;17564:28:55;::::1;17530:31;17564:28:::0;;;:10:::1;:28;::::0;;;;17610:19;;-1:-1:-1;;;17610:19:55;::::1;;;17606:33;;;17631:8;;;;;17606:33;17679:23:::0;;-1:-1:-1;;;17679:23:55;::::1;;;17654:22;17720:6;:35;;;;;;;;:::i;:::-;;:68;;;-1:-1:-1::0;17769:19:55::1;17759:6;:29;;;;;;;;:::i;:::-;;17720:68;17716:82;;;17790:8;;;;;;17716:82;17813:50;17846:16;17813:13;:28;17833:6;17827:13;;;;;;;;:::i;:::-;17813:28;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;17813:28:55;;:32:::1;:50::i;:::-;;17881:38;17912:6;17881:30;:38::i;:::-;17877:54;;;17921:10;::::0;::::1;:::i;:::-;;;17877:54;16987:955;;;;16954:988;16982:3;;16954:988;;;-1:-1:-1::0;17952:22:55::1;:33:::0;;;18000:31:::1;::::0;160:25:71;;;18000:31:55::1;::::0;148:2:71;133:18;18000:31:55::1;;;;;;;;16878:1160;;16822:1216::o:0;26321:972::-;26536:7;26559:41;26583:16;26559:23;:41::i;:::-;;26814:9;:16;26834:2;26814:22;26810:53;;26845:18;;-1:-1:-1;;;26845:18:55;;;;;;;;;;;26810:53;26873:18;26894:21;:19;:21::i;:::-;:34;;;-1:-1:-1;;;;;26953:29:55;;26938:12;26953:29;;;:11;:29;;;;;:35;;;26894:34;;-1:-1:-1;;;;26953:35:55;;;-1:-1:-1;;;;;26953:35:55;;27022:20;27032:9;27022;:20::i;:::-;26998:44;;27052:18;1417:156:57;27145:13:55;27160:16;27178:9;27189:12;27203:5;27210:8;27096:136;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27073:169;;;;;;27052:190;;27260:26;27275:10;27260:14;:26::i;:::-;27253:33;26321:972;-1:-1:-1;;;;;;;;;26321:972:55:o;38073:516::-;1474:19:39;:17;:19::i;:::-;1635:9:53::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41:::0;38185:10:55::2;38151:14;38168:28:::0;;;:16:::2;:28;::::0;;;;;;38210:11;;;38206:43:::2;;38230:19;;-1:-1:-1::0;;;38230:19:55::2;;;;;;;;;;;38206:43;38276:10;38290:1;38259:28:::0;;;:16:::2;:28;::::0;;;;;:32;;;38461:72;-1:-1:-1;;;38461:72:55;;::::2;::::0;::::2;25284:51:71::0;;;;25351:18;;;25344:34;-1:-1:-1;;;;;;;;;;;1249:42:57;38461:40:55::2;::::0;38510:6;;25257:18:71;;38461:72:55::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;38549:33:55::2;::::0;160:25:71;;;38563:10:55::2;::::0;-1:-1:-1;38549:33:55::2;::::0;-1:-1:-1;148:2:71;133:18;;-1:-1:-1;38549:33:55::2;;;;;;;38141:448;1937:10:53::1;1913:22;1906:42;38073:516:55:o:0;4984:233:27:-;5097:31;5110:4;5116:2;5120:7;5097:12;:31::i;:::-;5138:72;735:10:36;5186:4:27;5192:2;5196:7;5205:4;5138:33;:72::i;20363:155:55:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20470:12:55;;20450:61;;-1:-1:-1;;;20470:12:55;;;;;;;-1:-1:-1;;;20498:12:55;;;;20450:19;:61::i;:::-;20443:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20443:68:55;;;;;;;;;;;;;;;;-1:-1:-1;;;20443:68:55;;;-1:-1:-1;;20443:68:55;;;;;;;;;;;;;-1:-1:-1;;;;;20443:68:55;;;;;;;-1:-1:-1;;;20443:68:55;;;;;;;;-1:-1:-1;;;20443:68:55;;;;;;;;-1:-1:-1;;;20443:68:55;;;;;;;;;;20363:155;-1:-1:-1;20363:155:55:o;75436:595::-;75588:5;1531:13:20;:11;:13::i;:::-;1474:19:39::1;:17;:19::i;:::-;75613:23:55::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;:28;;75640:1;75613:28:::0;75609:81:::2;;75666:23;::::0;;;::::2;::::0;::::2;;:::i;:::-;75650:40;::::0;-1:-1:-1;;;75650:40:55;;20042:10:71;20030:23;;;75650:40:55::2;::::0;::::2;20012:42:71::0;19985:18;;75650:40:55::2;19868:192:71::0;75609:81:55::2;75722:12;75720:14:::0;;75701:16:::2;::::0;75722:12;75701:16;;75720:14:::2;::::0;::::2;;;:::i;:::-;::::0;;::::2;::::0;;::::2;;::::0;;;::::2;::::0;;::::2;::::0;::::2;;::::0;;::::2;;::::0;;;-1:-1:-1;75744:20:55;;;:8:::2;:20;::::0;;;;75720:14;;-1:-1:-1;75767:9:55;;75744:32:::2;75767:9:::0;75744:20;:32:::2;:::i;:::-;-1:-1:-1::0;;75792:204:55::2;::::0;::::2;;75850:21:::0;::::2;75885:27;::::0;::::2;;75926:23;::::0;::::2;;75963;::::0;;;::::2;::::0;::::2;;:::i;:::-;75792:204;::::0;;29186:25:71;;;29242:2;29227:18;;29220:34;;;;29270:18;;;29263:34;29345:10;29333:23;29328:2;29313:18;;29306:51;29173:3;29158:19;75792:204:55::2;;;;;;;76014:10:::0;-1:-1:-1;1503:1:39::2;75436:595:55::0;;;:::o;30253:215::-;30306:35;30330:10;30306:23;:35::i;:::-;-1:-1:-1;30383:10:55;30351:15;30371:23;;;:11;:23;;;;;:29;;30369:31;;30371:29;;30369:31;;-1:-1:-1;;;30369:31:55;;-1:-1:-1;;;;;30369:31:55;;:::i;:::-;;;-1:-1:-1;;;;;30369:31:55;;;;;;;;;;;;;;;;;;;;;30415:46;;29721:50:71;;;30369:31:55;;-1:-1:-1;30440:10:55;;30415:46;;29709:2:71;29694:18;30415:46:55;;;;;;;30296:172;30253:215::o;7251:672:57:-;7324:13;7349:22;7363:7;7349:13;:22::i;:::-;;7382:18;7403:443;7550:54;7594:7;7550:27;:54::i;:::-;7768:10;:8;:10::i;:::-;7453:369;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7403:13;:443::i;:::-;7382:464;;7911:4;7864:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;7857:59;;;7251:672;;;:::o;34327:3022:55:-;1474:19:39;:17;:19::i;:::-;1635:9:53::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;34607:17:55::2;34627:39;34649:16;34627:21;:39::i;:::-;-1:-1:-1::0;;;;;34781:28:55;::::2;34747:31;34781:28:::0;;;:10:::2;:28;::::0;;;;34844:23;;34607:59;;-1:-1:-1;34781:28:55;-1:-1:-1;;;34844:23:55;::::2;;;34904:22;34894:6;:32;;;;;;;;:::i;:::-;;;:79;;;;-1:-1:-1::0;34940:33:55::2;34930:6;:43;;;;;;;;:::i;:::-;;;34894:79;:131;;;;-1:-1:-1::0;35003:22:55::2;34993:6;:32;;;;;;;;:::i;:::-;;;34894:131;34877:212;;;35071:6;35057:21;;-1:-1:-1::0;;;35057:21:55::2;;;;;;;;:::i;34877:212::-;35190:22:::0;;::::2;-1:-1:-1::0;;;35190:22:55;;::::2;::::0;::::2;::::0;35226:27;::::2;::::0;-1:-1:-1;35226:27:55::2;::::0;:59:::2;;-1:-1:-1::0;35273:12:55::2;::::0;::::2;::::0;;::::2;35257:28:::0;;::::2;;35226:59;35222:143;;;35308:46;::::0;-1:-1:-1;;;35308:46:55;;31649:4:71;31637:17;;;35308:46:55::2;::::0;::::2;31619:36:71::0;31691:17;;31671:18;;;31664:45;31592:18;;35308:46:55::2;31453:262:71::0;35222:143:55::2;35493:20;::::0;;::::2;35468:22;35493:20:::0;;;:8:::2;:20;::::0;;;;;:32;35560:23;;::::2;::::0;;;;:35;;35623:31;;::::2;:69;;35691:1;35623:69;;;35657:31;35674:14:::0;35657;:31:::2;:::i;:::-;35605:87;;35719:7;35706:9;:20;35702:62;;35735:29;::::0;-1:-1:-1;;;35735:29:55;;35754:9:::2;35735:29;::::0;::::2;160:25:71::0;133:18;;35735:29:55::2;14:177:71::0;35702:62:55::2;35976:22;35966:6;:32;;;;;;;;:::i;:::-;::::0;35962:679:::2;;36018:11:::0;;36014:244:::2;;-1:-1:-1::0;;;;;36049:26:55;::::2;;::::0;;;:8:::2;:26;::::0;;;;:37;;36079:7;;36049:26;:37:::2;::::0;36079:7;;36049:37:::2;:::i;:::-;::::0;;;-1:-1:-1;36014:244:55::2;::::0;-1:-1:-1;36014:244:55::2;;36128:14;36111;:31;36107:151;;;36162:81;36183:16;36201:9;36212:14;36228;36162:20;:81::i;:::-;36272:38:::0;;-1:-1:-1;;;;36272:38:55::2;-1:-1:-1::0;;;36272:38:55::2;::::0;::::2;;;::::0;;-1:-1:-1;;;;;11617:29:57;;;-1:-1:-1;11617:29:57;;;:11;:29;;;;;:39;;;;:53;36324:131:55::2;;-1:-1:-1::0;;;;;36378:29:55;::::2;;::::0;;;:11:::2;:29;::::0;;;;:46:::2;;:62:::0;;-1:-1:-1;;;;36378:62:55::2;-1:-1:-1::0;;;36378:62:55::2;::::0;::::2;;;::::0;;36324:131:::2;36474:136;::::0;;31973:4:71;31961:17;;;31943:36;;32015:17;;32010:2;31995:18;;31988:45;32049:18;;;32042:34;;;32107:2;32092:18;;32085:34;;;-1:-1:-1;;;;;36474:136:55;::::2;::::0;::::2;::::0;31930:3:71;31915:19;36474:136:55::2;;;;;;;36624:7;;;;;;;;;35962:679;36899:38;36940:21;:39;36962:16;-1:-1:-1::0;;;;;36940:39:55::2;-1:-1:-1::0;;;;;36940:39:55::2;;;;;;;;;;;;36899:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;36899:80:55::2;-1:-1:-1::0;;;;;36899:80:55::2;-1:-1:-1::0;;;;;36899:80:55::2;;;;;;;;;;;::::0;::::2;;;37043:75;;;;;;;;37069:13;37043:75;;;;;;37084:12;;;;;;;;;;;37043:75;;;;;;37098:10;-1:-1:-1::0;;;;;37043:75:55::2;;;;;37110:7;37043:75;;::::0;36989:21:::2;:39;37011:16;-1:-1:-1::0;;;;;36989:39:55::2;-1:-1:-1::0;;;;;36989:39:55::2;;;;;;;;;;;;:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;36989:129:55::2;;;;;-1:-1:-1::0;;;;;36989:129:55::2;;;;;;;;;;;;;;;;;37128:43;37154:16;37128:21;:25;;:43;;;;:::i;:::-;-1:-1:-1::0;37185:12:55::2;::::0;::::2;::::0;:16;37181:62:::2;;37203:40;37216:5;:12;;;37230:5;:12;;;37203;:40::i;:::-;37320:12;::::0;37259:83:::2;::::0;;32356:4:71;32344:17;;32326:36;;-1:-1:-1;;;37320:12:55;;::::2;;;32393:2:71::0;32378:18;;32371:51;32438:18;;32431:34;;;-1:-1:-1;;;;;37259:83:55;::::2;::::0;::::2;::::0;32314:2:71;32299:18;37259:83:55::2;;;;;;;34528:2821;;;;;;;;1829:1:53;1937:10:::1;1913:22;1906:42;34327:3022:55::0;;:::o;3927:153:27:-;-1:-1:-1;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3927:153::o;18083:262:55:-;1531:13:20;:11;:13::i;:::-;18180:41:55::1;18204:16;18180:23;:41::i;:::-;-1:-1:-1::0;;;;;;18231:28:55;::::1;;::::0;;;:10:::1;:28;::::0;;;;;;;;:44;;-1:-1:-1;;;;;18231:44:55::1;-1:-1:-1::0;;;18231:44:55::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18290:48;;13795:36:71;;;18290:48:55::1;::::0;13768:18:71;18290:48:55::1;;;;;;;;18083:262:::0;;:::o;2543:215:20:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:20;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:20;;2700:1:::1;2672:31;::::0;::::1;3223:51:71::0;3196:18;;2672:31:20::1;3077:203:71::0;2623:91:20::1;2723:28;2742:8;2723:18;:28::i;41420:904:55:-:0;1474:19:39;:17;:19::i;:::-;1635:9:53::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;41645:17:55::2;41665:39;41687:16;41665:21;:39::i;:::-;-1:-1:-1::0;;;;;41749:28:55;::::2;41715:31;41749:28:::0;;;:10:::2;:28;::::0;;;;41645:59;;-1:-1:-1;41885:30:55::2;41749:28:::0;41885:19:::2;:30::i;:::-;41880:72;;41942:9;41924:28;;-1:-1:-1::0;;;41924:28:55::2;;;;;;;;:::i;41880:72::-;42033:18;42041:9;42033:7;:18::i;:::-;42173:23;42199:60;42208:16;42226:9;42237:21;42199:8;:60::i;:::-;42173:86;;42290:9;-1:-1:-1::0;;;;;42275:42:55::2;;42301:15;42275:42;;;;160:25:71::0;;148:2;133:18;;14:177;42275:42:55::2;;;;;;;;41536:788;;;1937:10:53::1;1913:22;1906:42;41420:904:55::0;;:::o;1560:300:27:-;1662:4;-1:-1:-1;;;;;;1697:40:27;;-1:-1:-1;;;1697:40:27;;:104;;-1:-1:-1;;;;;;;1753:48:27;;-1:-1:-1;;;1753:48:27;1697:104;:156;;;-1:-1:-1;;;;;;;;;;862:40:44;;;1817:36:27;763:146:44;61678:1491:55;-1:-1:-1;;;;;61781:28:55;;61747:31;61781:28;;;:10;:28;;;;;61844:23;;19801:22;;-1:-1:-1;;;61844:23:55;;;;;;62136:38;61844:23;62136:30;:38::i;:::-;62132:98;;;62204:15;62218:1;62204:11;:15;:::i;:::-;62190:29;;62132:98;62239:51;62260:16;62278:11;62239:20;:51::i;:::-;62330:23;62358:37;62378:16;62358:19;:37::i;:::-;-1:-1:-1;;;;;;62539:26:55;;62568:1;62539:26;;;:8;:26;;;;;;:30;;;62776:43;62327:68;;-1:-1:-1;62568:1:55;-1:-1:-1;;;;;;;;;;;;1249:42:57;62327:68:55;;62568:1;62776:43;62568:1;62776:43;62327:68;1249:42:57;62776:43:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62764:55;;;62879:1;62874:39;;62889:24;;-1:-1:-1;;;62889:24:55;;;;;;;;;;;62874:39;63007:12;;62990:30;;62996:9;;-1:-1:-1;;;63007:12:55;;;;62990:5;:30::i;:::-;63030:18;63038:9;63030:7;:18::i;:::-;63058:17;63078:31;63092:16;63078:13;:31::i;:::-;63058:51;;63119:43;63128:16;63146:9;63157:4;63119:8;:43::i;:::-;;61737:1432;;;;;;61678:1491;:::o;1796:162:20:-;1710:6;;-1:-1:-1;;;;;1710:6:20;;;;;735:10:36;1855:23:20;1851:101;;1901:40;;-1:-1:-1;;;1901:40:20;;735:10:36;1901:40:20;;;3223:51:71;3196:18;;1901:40:20;3077:203:71;16212:241:27;16275:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;16337:88;;16383:31;;-1:-1:-1;;;16383:31:27;;;;;160:25:71;;;133:18;;16383:31:27;14:177:71;2002:128:39;1920:7;;;;;;;2063:61;;;2098:15;;-1:-1:-1;;;2098:15:39;;;;;;;;;;;12287:324:57;12369:7;-1:-1:-1;;;;;12706:32:57;;12450:16;12706:32;12450:7;:16::i;:::-;12445:53;;12475:23;;-1:-1:-1;;;12475:23:57;;;;;160:25:71;;;133:18;;12475:23:57;14:177:71;12445:53:57;12532:16;-1:-1:-1;;;;;12512:36:57;:16;12520:7;12512;:16::i;:::-;-1:-1:-1;;;;;12512:36:57;;12508:71;;12557:22;;-1:-1:-1;;;12557:22:57;;;;;;;;;;;67088:254:55;-1:-1:-1;;;;;67225:28:55;;67200:22;67225:28;;;:10;:28;;;;;:42;-1:-1:-1;;;67225:42:55;;;;67291:14;67281:24;;;;;;;;:::i;:::-;:6;:24;;;;;;;;:::i;:::-;;67277:58;;67328:6;67314:21;;-1:-1:-1;;;67314:21:55;;;;;;;;:::i;51770:255::-;51890:9;:5;51898:1;51890:9;:::i;:::-;51862:37;;;;;;;-1:-1:-1;;;51862:37:55;-1:-1:-1;;;;51862:37:55;;;;;;51909:56;51862:9;51931:33;51909:10;:56::i;:::-;51981:37;52008:9;51981:37;;;;;;:::i;33543:312::-;33622:17;33651:41;33675:16;33651:23;:41::i;:::-;;33714:31;33728:16;33714:13;:31::i;:::-;33702:43;-1:-1:-1;33759:10:55;-1:-1:-1;;;;;33759:30:55;;;;;;:57;;-1:-1:-1;33793:10:55;-1:-1:-1;;;;;33793:23:55;;;;33759:57;33755:93;;;33825:23;;-1:-1:-1;;;33825:23:55;;-1:-1:-1;;;;;3241:32:71;;33825:23:55;;;3223:51:71;3196:18;;33825:23:55;3077:203:71;8607:156:49;8680:4;8703:53;8711:3;-1:-1:-1;;;;;8731:23:49;;8703:7;:53::i;:::-;8696:60;8607:156;-1:-1:-1;;;8607:156:49:o;55409:412:55:-;55489:6;55499:1;55489:11;55485:24;;55409:412;;:::o;55485:24::-;55522:94;;-1:-1:-1;;;55522:94:55;;-1:-1:-1;;;;;25302:32:71;;55522:94:55;;;25284:51:71;55614:1:55;25351:18:71;;;25344:34;-1:-1:-1;;;;;;;;;;;1249:42:57;55522:40:55;;5030:7;;55571:6;;25257:18:71;;55522:94:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55518:297;;-1:-1:-1;;;;;55717:27:55;;;;;;:16;:27;;;;;:37;;55748:6;;55717:27;:37;;55748:6;;55717:37;:::i;:::-;;;;-1:-1:-1;;55773:31:55;;160:25:71;;;-1:-1:-1;;;;;55773:31:55;;;;;148:2:71;133:18;55773:31:55;14:177:71;46241:2694:55;46437:7;46464:9;:16;46484:2;46464:22;46460:53;;46495:18;;-1:-1:-1;;;46495:18:55;;;;;;;;;;;46460:53;47339:11;47359:9;47369:1;47359:12;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;47394:4:55;47386:12;;:17;;:38;;-1:-1:-1;47415:4:55;47407:12;;:17;;47386:38;47382:69;;;47433:18;;-1:-1:-1;;;47433:18:55;;;;;;;;;;;47382:69;47917:23;47943:53;47968:9;47979:16;47943:24;:53::i;:::-;48612:15;;48562:89;;47917:79;;-1:-1:-1;48491:7:55;;;;572:42:59;;-1:-1:-1;;;48585:25:55;48562:89;;48629:9;;47917:79;;48562:89;;;:::i;:::-;;;;-1:-1:-1;;48562:89:55;;;;;;;;;;;;;;-1:-1:-1;;;;;48562:89:55;-1:-1:-1;;;;;;48562:89:55;;;;;;;;;;48523:138;;;;48562:89;48523:138;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48490:171;;;;48676:2;48675:3;:26;;;;48682:6;:13;48699:2;48682:19;;48675:26;48671:66;;;48730:6;48710:27;;-1:-1:-1;;;48710:27:55;;;;;;;;:::i;48671:66::-;48763:6;48752:26;;;;;;;;;;;;:::i;:::-;48747:71;;48812:5;48787:31;;-1:-1:-1;;;48787:31:55;;;;;;;;:::i;48747:71::-;48884:44;48900:9;48911:16;48884:15;:44::i;:::-;48877:51;46241:2694;-1:-1:-1;;;;;;;;46241:2694:55:o;10956:216:57:-;11070:17;;;11038:7;11070:17;;;:8;:17;;;;;:29;11061:38;;11057:76;;11108:25;;-1:-1:-1;;;11108:25:57;;;;;160::71;;;133:18;;11108:25:57;14:177:71;11057:76:57;-1:-1:-1;11159:5:57;;10956:216;-1:-1:-1;10956:216:57:o;6666:885:50:-;6975:22;13508:11;13649:9;13646:25;13463:14;13619:9;13616:28;13612:60;7011:73;;-1:-1:-1;12939:4:50;12933:11;;13000:16;12990:27;;12777:15;13044:4;13037:12;;13030:31;12820:18;13095:12;;;13088:33;;;;13155:9;13148:4;13141:12;;13134:31;13199:9;13192:4;13185:12;;13178:31;13248:4;13235:18;;7011:73;7218:18;7212:4;7205:32;7284:6;7278:4;7271:20;7348:10;7342:4;7335:24;7424:4;7418;7408:21;7398:31;;7533:1;7527:4;7520:15;6666:885;;;:::o;4225:2099:54:-;4365:12;-1:-1:-1;;;;;4397:20:54;;4393:40;4419:14;4393:40;4524:4;4518:11;4594:6;4582:19;4572:1072;;4632:16;4674:2;4669:317;;;;5012:2;5007:208;;;;5246:5;;;4669:317;4748:4;4726:27;;;4713:41;4800:3;4796:12;;;4810:2;4792:21;4779:35;;;4860:30;;4854:4;4847:44;-1:-1:-1;;;;;4937:18:54;4931:4;4924:32;4669:317;;5007:208;5097:4;5079:16;5075:27;5062:41;5059:1;5054:50;5048:4;5041:64;5175:4;5157:16;5151:4;5138:42;4625:628;;5287:4;5281;5274:18;5375:4;5369;5363;5357;5354:1;5347:5;5336:44;5330:51;5454:9;5446:6;5442:22;5438:2;5434:31;5416:16;5413:53;5402:64;;;5500:1;5494:4;5487:15;5562:1;5556:4;5549:15;5621:5;;4572:1072;5679:10;5674:3;5670:20;5717:1;5714;5707:12;5816:4;5809;5806:1;5802:12;5795:26;5854:4;5851:1;5847:12;5886:4;5883:1;5876:15;5979:16;5972:4;5969:1;5965:12;5958:38;6104:16;6086;6079:4;6076:1;6072:12;6059:62;6210:4;6207:1;6200:4;6182:16;6178:27;6175:1;6167:6;6160:5;6149:66;6250:8;;6247:15;;;6243:29;;-1:-1:-1;4542:1766:54;4546:2;4225:2099;;;;;;:::o;50767:902:55:-;-1:-1:-1;;;;;51176:28:55;;;51161:12;51176:28;;;:10;:28;;;;;;;;:35;;51252:135;;;;;;;;;;4242:16;51252:135;;;;;;;;;;;;;;;;;;;;;;;;51176:35;51252:135;;;;;;;-1:-1:-1;;;51176:35:55;;;51252:135;;;;;;51221:28;;;;;;;;:166;;;;;;;;-1:-1:-1;;;51221:166:55;-1:-1:-1;;;;51221:166:55;;;;-1:-1:-1;;;51221:166:55;-1:-1:-1;;;;;;51221:166:55;;;;;;;;;;;;;;;;;;;;;;;;51176:35;;51252:135;51221:166;51176:28;;-1:-1:-1;;;;51221:166:55;-1:-1:-1;;;;51221:166:55;;;;-1:-1:-1;;;51221:166:55;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;51221:166:55;;;;;;;;;;;;;;;-1:-1:-1;;;;51221:166:55;;;-1:-1:-1;;;51221:166:55;;;;;;;-1:-1:-1;;;;51221:166:55;;;;;-1:-1:-1;;;51221:166:55;;;;;;-1:-1:-1;;;;;51221:166:55;-1:-1:-1;;;51221:166:55;;;;;;;;;;;;;;-1:-1:-1;;;;;51434:28:55;;-1:-1:-1;51434:28:55;;;:10;:28;;;;;51472:48;51434:28;-1:-1:-1;51472:10:55;:48::i;:::-;-1:-1:-1;;;;;51530:28:55;;;;;;:10;:28;;;;;:40;51561:9;;51530:28;:40;:::i;:::-;-1:-1:-1;;;;;;51580:26:55;;;;;;:8;:26;;;;;;;:37;;;51633:29;;;;;51649:12;;51633:29;:::i;:::-;;;;;;;;50939:730;;50767:902;;;;;:::o;11178:274:57:-;-1:-1:-1;;;;;11315:26:57;;11278:7;11315:26;;;:8;:26;;;;;;11278:7;11369:22;;;:51;;11419:1;11369:51;;;11394:22;11404:12;11394:7;:22;:::i;:::-;11351:69;11178:274;-1:-1:-1;;;;;11178:274:57:o;66708::55:-;66813:20;;;:42;;-1:-1:-1;66837:18:55;;66813:42;:77;;;;66875:15;66859:13;:31;66813:77;66809:167;;;66913:52;;-1:-1:-1;;;66913:52:55;;;;;26711:25:71;;;26752:18;;;26745:34;;;26684:18;;66913:52:55;26529:256:71;52485:221:55;52557:50;52568:9;52579:27;52557:10;:50::i;:::-;52617:35;;-1:-1:-1;;;;52617:35:55;-1:-1:-1;;;52617:35:55;;;52668:31;;;;;;52617:9;;52668:31;:::i;70007:212::-;70100:25;70090:6;:35;;;;;;;;:::i;:::-;;:68;;;-1:-1:-1;70139:19:55;70129:6;:29;;;;;;;;:::i;:::-;;70090:68;70086:127;;;70195:6;70181:21;;-1:-1:-1;;;70181:21:55;;;;;;;;:::i;69643:150::-;69714:16;69749:37;:13;:28;69769:6;69763:13;;;;;;;;:::i;:::-;69749:28;;;;;;;;;;;;;;;:35;:37::i;8153:490:57:-;8330:7;8427:15;8445:49;8459:16;8477;8445:13;:49::i;:::-;-1:-1:-1;;;;;8504:26:57;;;;;;:8;:26;;;;;:37;;8427:67;;-1:-1:-1;8427:67:57;;8504:26;;;:37;;8427:67;;8504:37;:::i;:::-;;;;-1:-1:-1;;8551:60:57;;-1:-1:-1;;;8551:60:57;;-1:-1:-1;;;;;25302:32:71;;8551:60:57;;;25284:51:71;25351:18;;;25344:34;;;-1:-1:-1;;;;;;;;;;;1249:42:57;8551:40;;25257:18:71;;8551:60:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8629:7:57;;8153:490;-1:-1:-1;;;;;;;8153:490:57:o;64963:419:55:-;65122:17;;65222:1;65204:14;65184:16;65193:7;65184:6;:16;:::i;:::-;65178:40;;;;:::i;:::-;65177:46;;;;:::i;:::-;65155:68;;65233:22;65258:15;65274:13;65258:30;;;;;;;;;:::i;:::-;;;;65233:55;;65318:6;65302:22;;:4;:12;;;;;;;;;;;;:22;;;65298:55;;65333:20;;-1:-1:-1;;;65333:20:55;;20042:10:71;20030:23;;65333:20:55;;;20012:42:71;19985:18;;65333:20:55;19868:192:71;65492:550:55;65651:17;;65748:16;65758:6;65748:7;:16;:::i;:::-;65722:43;-1:-1:-1;65840:13:55;65893:1;65722:43;65857:18;65861:14;65893:1;65857:18;:::i;:::-;:32;;;;:::i;:::-;65856:38;;;;:::i;:::-;65840:54;;65905:22;65930:9;65940:7;65930:18;;;;;;;;;:::i;:::-;;;;65905:43;;65978:6;65962:22;;:4;:12;;;;;;;;;;;;:22;;;65958:55;;65993:20;;-1:-1:-1;;;65993:20:55;;20042:10:71;20030:23;;65993:20:55;;;20012:42:71;19985:18;;65993:20:55;19868:192:71;65958:55:55;66031:4;65492:550;-1:-1:-1;;;;;;65492:550:55:o;2710:117:39:-;1721:16;:14;:16::i;:::-;2768:7:::1;:15:::0;;-1:-1:-1;;2768:15:39::1;::::0;;2798:22:::1;735:10:36::0;2807:12:39::1;2798:22;::::0;-1:-1:-1;;;;;3241:32:71;;;3223:51;;3211:2;3196:18;2798:22:39::1;;;;;;;2710:117::o:0;11859:305:57:-;-1:-1:-1;;;;;11982:29:57;;;11931:7;11982:29;;;:11;:29;;;;;12041:20;;;;11931:7;;11982:29;;12041:20;;12071:59;;-1:-1:-1;12114:16:57;;12148:9;-1:-1:-1;;11859:305:57:o;9978:327:27:-;-1:-1:-1;;;;;10045:16:27;;10041:87;;10084:33;;-1:-1:-1;;;10084:33:27;;10114:1;10084:33;;;3223:51:71;3196:18;;10084:33:27;3077:203:71;10041:87:27;10137:21;10161:32;10169:2;10173:7;10190:1;10161:7;:32::i;:::-;10137:56;-1:-1:-1;;;;;;10207:27:27;;;10203:96;;10257:31;;-1:-1:-1;;;10257:31:27;;10285:1;10257:31;;;3223:51:71;3196:18;;10257:31:27;3077:203:71;50033:581:55;50313:4;50307:11;;50172:4;50156:21;;;50351:10;-1:-1:-1;;;;;50347:83:55;50331:100;;50477:14;;;50471:21;50451:18;;;50444:49;50539:14;;;;50533:21;50513:18;;;50506:49;;;;50574:24;;50033:581::o;12751:216:57:-;12816:4;12836:12;;;:44;;-1:-1:-1;;;;;;12852:28:57;;;12836:44;12832:80;;;12889:23;;-1:-1:-1;;;12889:23:57;;;;;160:25:71;;;133:18;;12889:23:57;14:177:71;12832:80:57;-1:-1:-1;12958:1:57;5824:16:27;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;12929:31:57;;;12751:216::o;2912:187:20:-;3004:6;;;-1:-1:-1;;;;;3020:17:20;;;3004:6;3020:17;;;-1:-1:-1;;;;;;3020:17:20;;;;;;3052:40;;3004:6;;;;;;;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;66048:477:55:-;66357:1;66340:179;66360:26;;;66340:179;;;66437:15;;66453:1;66437:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;66411:44:55;:15;;66427:5;66431:1;66427;:5;:::i;:::-;66411:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;66411:44:55;;66407:101;;66485:15;;66501:5;66505:1;66501;:5;:::i;:::-;66485:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;66464:44;;-1:-1:-1;;;66464:44:55;;-1:-1:-1;;;;;3241:32:71;;;66464:44:55;;;3223:51:71;3196:18;;66464:44:55;3077:203:71;66407:101:55;66388:3;;66340:179;;12101:3644;12240:23;12266:30;:21;:28;:30::i;:::-;12328:12;;12240:56;;-1:-1:-1;;;;12328:12:55;;;;12306:19;;12385:3053;12405:6;:13;12401:1;:17;12385:3053;;;12439:24;12466:6;12473:1;12466:9;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;12532:39:55;;;12489:40;12532:39;;;:21;:39;;;;;;;12489:82;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12489:82:55;;;;;;;;;;;;;;;;;;;12466:9;;-1:-1:-1;12489:82:55;12748:26;;:68;;-1:-1:-1;;;;;;12778:28:55;;;;;;:10;:28;;;;;:38;-1:-1:-1;;;12778:38:55;;;;12748:68;12744:176;;;12836:43;12862:16;12836:25;:43::i;:::-;12897:8;;;;12744:176;-1:-1:-1;;;;;12968:28:55;;12934:31;12968:28;;;:10;:28;;;;;;;;13029:22;;;-1:-1:-1;;;13029:22:55;;;;;13090:20;;;:8;:20;;;;;;:32;13170:21;;13161:31;;;;;;;;;:43;13423:31;;;:100;;;;;4688:1;13473:7;:20;;;:50;;;;:::i;:::-;13458:65;;:12;:65;;;13423:100;13419:159;;;13555:8;;;;;;;;13419:159;-1:-1:-1;;;;;13599:39:55;;;;;;:21;:39;;;;;13592:46;;-1:-1:-1;;;;;;13592:46:55;;;;;;13652;:21;13621:16;13652:28;:46::i;:::-;;13713:14;13762;13745;:31;13741:1310;;;14021:14;;;;-1:-1:-1;;;;;13991:26:55;;;;;;:8;:26;;;;;:44;;:26;;;:44;;14021:14;;13991:44;:::i;:::-;;;;-1:-1:-1;13741:1310:55;;-1:-1:-1;13741:1310:55;;14328:15;14346:31;14363:14;14346;:31;:::i;:::-;-1:-1:-1;;;;;14420:26:55;;14395:22;14420:26;;;:8;:26;;;;;;14328:49;;-1:-1:-1;14468:32:55;;;14464:219;;14533:7;14524:16;;14464:219;;;14586:14;14569;:31;14565:118;;;14633:31;14650:14;14633;:31;:::i;:::-;14624:40;;14565:118;14704:10;;14700:283;;-1:-1:-1;;;;;14738:26:55;;;;;;:8;:26;;;;;:36;;14768:6;;14738:26;:36;;14768:6;;14738:36;:::i;:::-;;;;-1:-1:-1;14796:17:55;;-1:-1:-1;14816:31:55;14830:16;14816:13;:31::i;:::-;-1:-1:-1;;;;;14869:27:55;;;;;;:16;:27;;;;;:37;;14796:51;;-1:-1:-1;14900:6:55;;14869:27;;;:37;;14900:6;;14869:37;:::i;:::-;;;;-1:-1:-1;;14933:31:55;;160:25:71;;;-1:-1:-1;;;;;14933:31:55;;;;;148:2:71;133:18;14933:31:55;;;;;;;14716:267;14700:283;15020:16;15030:6;15020:7;:16;:::i;:::-;15000:36;;;;:::i;:::-;;;14056:995;;13741:1310;15090:21;;15065:46;;;;;;-1:-1:-1;;;15065:46:55;-1:-1:-1;;;;15065:46:55;;;;;;-1:-1:-1;;;;;11617:29:57;;;-1:-1:-1;11617:29:57;;;:11;:29;;;;;:39;;;;:53;15125:139:55;;15228:21;;-1:-1:-1;;;;;15179:29:55;;15228:21;15179:29;;;:11;:29;;;;;:46;;:70;;;;;;-1:-1:-1;;;15179:70:55;-1:-1:-1;;;;15179:70:55;;;;;;;;;15125:139;15360:21;;15283:144;;;31973:4:71;31961:17;;;31943:36;;32015:17;;;32010:2;31995:18;;31988:45;32049:18;;32042:34;;;32107:2;32092:18;;32085:34;;;-1:-1:-1;;;;;15283:144:55;;;;;31930:3:71;31915:19;15283:144:55;;;;;;;12425:3013;;;;;;;12385:3053;12420:3;;12385:3053;;;-1:-1:-1;15534:20:55;;15530:209;;15582:44;;15571:6;;-1:-1:-1;;;;;;;;;;;1249:42:57;15604:16:55;;15571:6;15582:44;15571:6;15582:44;15604:16;1249:42:57;15582:44:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15570:56;;;15694:1;15689:39;;15704:24;;-1:-1:-1;;;15704:24:55;;;;;;;;;;;63286:1404;63518:12;;63380:6;;;;;;63405:16;;-1:-1:-1;;;63518:12:55;;;;63380:6;63589:1;63565:20;63518:12;63584:1;63565:20;:::i;:::-;63564:26;;;;:::i;:::-;63642:12;:30;;-1:-1:-1;;;;63642:30:55;-1:-1:-1;;;63642:30:55;;;;;;;;;;-1:-1:-1;;;63702:12:55;;63700:14;;-1:-1:-1;;;63700:14:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;63682:32;;63724:30;63757:15;63773;63757:32;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;63757:42:55;63845:23;:21;:23::i;:::-;63809:59;;63907:215;;;;;;;;63930:12;63907:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;63907:215:55;;;;;;;;;;;;;;;;-1:-1:-1;;;63907:215:55;;;-1:-1:-1;;63956:28:55;;;;;63907:215;;;;;63998:24;64005:12;64021:1;63998:24;:::i;:::-;-1:-1:-1;;;;;63907:215:55;;;;;;;;;;;64058:28;;;;;63907:215;;;;;;;64100:12;;;;;;63907:215;;;;;63878:9;;:26;;;;;;;;;:::i;:::-;;;;:244;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;63878:244:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;63878:244:55;;;-1:-1:-1;;;;;;63878:244:55;;;;;;;-1:-1:-1;;;63878:244:55;;;;;;-1:-1:-1;;;;63878:244:55;-1:-1:-1;;;63878:244:55;;;;;-1:-1:-1;;;;63878:244:55;;;;;-1:-1:-1;;;63878:244:55;;;;;;;;;;;;-1:-1:-1;;64474:1:55;;64451:19;;:15;;:19;:::i;:::-;64450:25;;;;:::i;:::-;64417:58;;64529:52;;;;;;;;64539:15;64529:52;;;;64556:1;64529:52;;;;64559:1;-1:-1:-1;;;;;64529:52:55;;;;;64562:8;64573:1;64562:12;;;;:::i;:::-;64529:52;;;;64576:1;64529:52;;;;;;;;;;;64485:15;64529:52;64485:41;;;;;;;;;:::i;:::-;;;;:96;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;64485:96:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;64485:96:55;-1:-1:-1;;;;64485:96:55;;;;-1:-1:-1;;;64485:96:55;;-1:-1:-1;;;;64485:96:55;;;;-1:-1:-1;;;64485:96:55;-1:-1:-1;;;;;;64485:96:55;;;-1:-1:-1;;;;;64485:96:55;;;;;;;;;;;;;;;;;;;;;;;64610:28;;;;64640;;;;64592:91;;;;;;;;;;;;;;;;;64600:8;;64610:28;64640;;64670:12;;64592:91;64670:12;;64592:91;;64670:12;64592:91;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;64592:91:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63286:1404;;;;;:::o;57644:1684::-;57838:34;57875:49;57890:33;57875:14;:49::i;:::-;57838:86;;57939:9;57934:193;57954:17;:24;57950:1;:28;57934:193;;;57999:39;58041:10;:32;58052:17;58070:1;58052:20;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;58041:32:55;-1:-1:-1;;;;;58041:32:55;;;;;;;;;;;;57999:74;;58088:28;58098:17;58088:9;:28::i;:::-;-1:-1:-1;57980:3:55;;57934:193;;;;58137:28;58168:43;58183:27;58168:14;:43::i;:::-;58249:12;;58137:74;;-1:-1:-1;;;;58249:12:55;;;;58221:25;58324:1;58297:23;58249:12;58319:1;58297:23;:::i;:::-;58296:29;;;;:::i;:::-;58271:54;;58652:20;5193:53;58719:7;58685:42;;;;;;;;38596:19:71;;;38671:3;38649:16;-1:-1:-1;;;;;;38645:43:71;38640:2;38631:12;;38624:65;38714:2;38705:12;;38441:282;58685:42:55;;;;;;;;;;;;;58675:53;;;;;;58652:76;;58738:77;58760:9;58770:19;58760:30;;;;;;;;;:::i;:::-;;;;58738:77;;;;;;;;;;;;;;;;;;;;58760:30;58738:77;;;58760:30;58738:77;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;58738:77:55;;;;;;;;;;;;;;;;;;;;;58802:12;58738:21;:77::i;:::-;58825:80;58847:15;58863:16;58847:33;;;;;;;;;:::i;58825:80::-;58915:52;58937:15;;58915:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58954:12:55;;-1:-1:-1;58915:21:55;;-1:-1:-1;;58915:52:55:i;:::-;58982:9;58977:345;58997:11;:18;58993:1;:22;58977:345;;;59036:24;59063:11;59075:1;59063:14;;;;;;;;:::i;:::-;;;;;;;59036:41;;59193:50;59212:16;59230:12;59193:18;:50::i;:::-;59189:64;;;59245:8;;;59189:64;-1:-1:-1;;;;;59273:28:55;;;;;;:10;:28;;;;;59267:44;;59303:7;59267:5;:44::i;:::-;59022:300;58977:345;59017:3;;58977:345;;;;57736:1592;;;;;57644:1684;;;:::o;2463:115:39:-;1474:19;:17;:19::i;:::-;2522:7:::1;:14:::0;;-1:-1:-1;;2522:14:39::1;;;::::0;;2551:20:::1;2558:12;735:10:36::0;;656:96;53442:658:55;53693:42;53704:9;53715:19;53693:10;:42::i;:::-;53745:26;;-1:-1:-1;;;;53745:26:55;;-1:-1:-1;;;53745:26:55;;;53997:53;;-1:-1:-1;;;;;54023:26:55;53997:25;:53::i;:::-;54066:27;54083:9;54066:27;;;;;;:::i;11510:227:27:-;11561:21;11585:40;11601:1;11605:7;11622:1;11585:7;:40::i;:::-;11561:64;-1:-1:-1;;;;;;11639:27:27;;11635:96;;11689:31;;-1:-1:-1;;;11689:31:27;;;;;160:25:71;;;133:18;;11689:31:27;14:177:71;10243:273:49;10306:16;10334:22;10359:19;10367:3;10359:7;:19::i;8289:150::-;8359:4;8382:50;8387:3;-1:-1:-1;;;;;8407:23:49;;8382:4;:50::i;68491:255:55:-;68578:4;68612:22;68602:6;:32;;;;;;;;:::i;:::-;;:73;;;-1:-1:-1;68648:27:55;68638:6;:37;;;;;;;;:::i;:::-;;68602:73;:136;;;-1:-1:-1;68705:33:55;68695:6;:43;;;;;;;;:::i;:::-;;68594:145;68491:255;-1:-1:-1;;68491:255:55:o;985:924:33:-;-1:-1:-1;;;;;1165:14:33;;;:18;1161:742;;1203:67;;-1:-1:-1;;;1203:67:33;;-1:-1:-1;;;;;1203:36:33;;;;;:67;;1240:8;;1250:4;;1256:7;;1265:4;;1203:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1203:67:33;;;;;;;;-1:-1:-1;;1203:67:33;;;;;;;;;;;;:::i;:::-;;;1199:694;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1560:6;:13;1577:1;1560:18;1556:323;;1664:39;;-1:-1:-1;;;1664:39:33;;-1:-1:-1;;;;;3241:32:71;;1664:39:33;;;3223:51:71;3196:18;;1664:39:33;3077:203:71;1556:323:33;1831:6;1825:13;1816:6;1812:2;1808:15;1801:38;1199:694;-1:-1:-1;;;;;;1317:51:33;;-1:-1:-1;;;1317:51:33;1313:182;;1437:39;;-1:-1:-1;;;1437:39:33;;-1:-1:-1;;;;;3241:32:71;;1437:39:33;;;3223:51:71;3196:18;;1437:39:33;3077:203:71;1313:182:33;1271:238;985:924;;;;;:::o;3297:723:42:-;3363:13;3388:19;3416:17;3428:4;3416:11;:17::i;:::-;3635:2;3628:4;3616:17;;3606:32;3388:46;;-1:-1:-1;3602:2:42;3598:41;3676:2;3659:324;3684:1;3680;:5;3659:324;;;3816:1;3798:9;3810:3;3798:15;:19;:44;;;;;3840:2;3827:6;3834:1;3827:9;;;;;;;;:::i;:::-;;;;;;;3821:21;3798:44;3794:150;;;3925:4;3912:17;;:6;3919:1;3912:9;;;;;;;;:::i;:::-;;;;:17;;-1:-1:-1;;;;;;3912:17:42;;;;;;;;;;;;;;;;;3794:150;3971:1;3957:15;;;;;3687:3;;;:::i;:::-;;;3659:324;;;-1:-1:-1;4006:6:42;;3297:723;-1:-1:-1;;;3297:723:42:o;7929:169:57:-;7989:13;8065:25;8085:3;;;;;;;;;;;;;;;;;8065:13;:25::i;:::-;8021:70;;;;;;;;:::i;:::-;;;;;;;;;;;;;8014:77;;7929:169;:::o;663:124:35:-;721:13;753:27;761:4;767:6;;;;;;;;;;;;;;;;;775:4;753:7;:27::i;39119:1351:55:-;39310:15;39328:31;39345:14;39328;:31;:::i;:::-;-1:-1:-1;;;;;39394:26:55;;39369:22;39394:26;;;:8;:26;;;;;;39310:49;;-1:-1:-1;39464:32:55;;;39460:319;;-1:-1:-1;39575:7:55;39460:319;;;39620:14;39603;:31;39599:180;;;39737:31;39754:14;39737;:31;:::i;:::-;39722:46;;39599:180;39852:16;;39848:245;;-1:-1:-1;;;;;39884:26:55;;;;;;:8;:26;;;;;:42;;39914:12;;39884:26;:42;;39914:12;;39884:42;:::i;:::-;;;;-1:-1:-1;;40005:77:55;;-1:-1:-1;;;40005:77:55;;-1:-1:-1;;;;;25302:32:71;;40005:77:55;;;25284:51:71;40080:1:55;25351:18:71;;;25344:34;-1:-1:-1;;;;;;;;;;;1249:42:57;40005:40:55;;40054:12;;25257:18:71;;40005:77:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39848:245;40193:25;40221:22;40231:12;40221:7;:22;:::i;:::-;40193:50;-1:-1:-1;40257:21:55;;40253:211;;40306:45;;40295:6;;-1:-1:-1;;;;;;;;;;;1249:42:57;40328:17:55;;40295:6;40306:45;40295:6;40306:45;40328:17;1249:42:57;40306:45:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40294:57;;;40419:1;40414:39;;40429:24;;-1:-1:-1;;;40429:24:55;;;;;;;;;;;68858:411;68984:23;;68943:4;;-1:-1:-1;;;68984:23:55;;;;69031:22;69021:6;:32;;;;;;;;:::i;:::-;;69017:49;;-1:-1:-1;69062:4:55;;68858:411;-1:-1:-1;;68858:411:55:o;69017:49::-;69100:19;;69077:20;;69100:23;;-1:-1:-1;;;69100:19:55;;;;69122:1;69100:23;:::i;:::-;69077:46;-1:-1:-1;69147:22:55;69137:6;:32;;;;;;;;:::i;:::-;;:65;;;;-1:-1:-1;69173:12:55;;:29;;;;-1:-1:-1;;;69173:12:55;;;;:29;;69137:65;69133:107;;;-1:-1:-1;69225:4:55;;68858:411;-1:-1:-1;;;68858:411:55:o;69133:107::-;-1:-1:-1;69257:5:55;;68858:411;-1:-1:-1;;;68858:411:55:o;8649:1867:57:-;8820:7;8843:36;-1:-1:-1;;;;;12706:32:57;;43419:5:55::1;:36::i;8843::57:-:0;2140:10:30;:17;8910:1:57;8893:18;8889:46;;8920:15;;-1:-1:-1;;;8920:15:57;;;;;;;;;;;8889:46;-1:-1:-1;;;;;8953:29:57;;;;;;:11;:29;;;;;8946:36;;;;;;;;-1:-1:-1;;;;;;8946:36:57;;;;;;;-1:-1:-1;;;;;;8946:36:57;;;8953:29;;9044:37;8965:16;9044:19;:37::i;:::-;8993:88;;;;;;9207:3;9214:1;9207:8;9203:24;;9224:3;9217:10;;;;;;;9203:24;-1:-1:-1;;;;;9329:26:57;;9358:1;9329:26;;;:8;:26;;;;;:30;;;9401:15;;;9397:582;;-1:-1:-1;9539:8:57;9397:582;;;-1:-1:-1;9688:3:57;9813:6;-1:-1:-1;;;;;;;;;;;9846:14:57;9688:3;9846:8;:14;:::i;:::-;9824:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9812:54;;;9934:1;9929:39;;9944:24;;-1:-1:-1;;;9944:24:57;;;;;;;;;;;9929:39;9564:415;9397:582;10189:21;:51;;;;-1:-1:-1;;;;;;;;;;;;10224:16:57;10214:26;;10189:51;10185:83;;;-1:-1:-1;;;;;;;;;;;10252:16:57;;-1:-1:-1;10185:83:57;10390:81;;-1:-1:-1;;;10390:81:57;;-1:-1:-1;;;;;25302:32:71;;10390:81:57;;;25284:51:71;25351:18;;;25344:34;;;-1:-1:-1;;;;;;;;;;;1249:42:57;10390:40;;10439:10;;25257:18:71;;10390:81:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10502:7;10489:10;:20;;;;:::i;59517:1455:55:-;59630:12;;-1:-1:-1;;;59630:12:55;;;;;-1:-1:-1;;;59680:12:55;;;;59613:14;59739:58;59630:12;;59680;59739:19;:58::i;:::-;:68;-1:-1:-1;59817:42:55;59739:68;59842:16;59817:6;:42::i;:::-;-1:-1:-1;59893:23:55;;59926:47;59946:11;59893:23;59926:19;:47::i;:::-;59984:16;60003:11;:7;60013:1;60003:11;:::i;:::-;59984:30;;60024:31;60058:60;60078:9;60089:7;60098:19;60058;:60::i;:::-;:70;-1:-1:-1;60138:39:55;60058:70;60160:16;60138:6;:39::i;:::-;-1:-1:-1;60203:20:55;;;-1:-1:-1;60233:47:55;60253:11;60203:20;60233:19;:47::i;:::-;60291:22;60316:11;:7;60326:1;60316:11;:::i;:::-;60291:36;;60337:37;60385:66;60405:15;60422:7;60431:19;60385;:66::i;:::-;:76;-1:-1:-1;60471:45:55;60385:76;60499:16;60471:6;:45::i;:::-;-1:-1:-1;60542:26:55;;;-1:-1:-1;60578:47:55;60598:11;60542:26;60578:19;:47::i;:::-;60737:17;;-1:-1:-1;;;60737:17:55;;;;-1:-1:-1;;60733:233:55;;;60801:17;;;;60832:39;;;-1:-1:-1;;;60832:39:55;;;-1:-1:-1;;;;60832:39:55;;;;;;;60890:65;;;60801:17;;;;;;27241:38:71;;;60924:17:55;;;;;;;27310:2:71;27295:18;;27288:47;27351:18;;;27344:34;;;60890:65:55;;27229:2:71;27214:18;60890:65:55;;;;;;;60770:196;60733:233;59603:1369;;;;;;;;59517:1455;;:::o;52953:212::-;53034:45;53045:9;53056:22;53034:10;:45::i;:::-;53089:27;;-1:-1:-1;;;;53089:27:55;-1:-1:-1;;;53089:27:55;;;;;;;53132:26;;;;;;53089:27;;53132:26;:::i;56373:783::-;56486:26;;-1:-1:-1;;;;;56486:26:55;;;-1:-1:-1;;;56550:23:55;;;;56584:44;56486:26;56584:13;56471:12;56550:23;56598:16;;;;;;;;:::i;:::-;56584:31;;;;;;;;;;;;;-1:-1:-1;56584:31:55;;:38;:44::i;:::-;-1:-1:-1;56655:25:55;56642:9;:38;;;;;;;;:::i;:::-;;;:74;;;;-1:-1:-1;56697:19:55;56684:9;:32;;;;;;;;:::i;:::-;;;56642:74;56638:146;;;56732:41;56768:4;56732:13;:31;56752:9;56746:16;;;;;;;;:::i;56732:41::-;;56638:146;56794:16;56813:41;56844:9;56813:30;:41::i;:::-;56794:60;;56864:16;56883:41;56914:9;56883:30;:41::i;:::-;56864:60;;56938:11;:27;;;;;56954:11;56953:12;56938:27;56934:170;;;56983:22;;56981:24;;;;;:::i;:::-;;;;-1:-1:-1;56934:170:55;;;57027:11;57026:12;:27;;;;;57042:11;57026:27;57022:82;;;57071:22;;57069:24;;;;;:::i;:::-;;;;-1:-1:-1;57022:82:55;57114:35;;57140:9;;57114;;-1:-1:-1;;;;57114:35:55;-1:-1:-1;;;57140:9:55;57114:35;;;;;;;;:::i;:::-;;;;;;56461:695;;;;56373:783;;:::o;2815:1368:49:-;2881:4;3010:21;;;:14;;;:21;;;;;;3046:13;;3042:1135;;3413:18;3434:12;3445:1;3434:8;:12;:::i;:::-;3480:18;;3413:33;;-1:-1:-1;3460:17:49;;3480:22;;3501:1;;3480:22;:::i;:::-;3460:42;;3535:9;3521:10;:23;3517:378;;3564:17;3584:3;:11;;3596:9;3584:22;;;;;;;;:::i;:::-;;;;;;;;;3564:42;;3731:9;3705:3;:11;;3717:10;3705:23;;;;;;;;:::i;:::-;;;;;;;;;;;;:35;;;;3844:25;;;:14;;;:25;;;;;:36;;;3517:378;3973:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4076:3;:14;;:21;4091:5;4076:21;;;;;;;;;;;4069:28;;;4119:4;4112:11;;;;;;;3042:1135;4161:5;4154:12;;;;;3042:1135;2887:1296;2815:1368;;;;:::o;45299:595:55:-;45449:12;45763:6;:13;45780:2;45763:19;45759:50;;45791:18;;-1:-1:-1;;;45791:18:55;;;;;;;;;;;45759:50;45826:61;;;;44872:8;;45862:6;;45870:16;;45826:61;;;:::i;:::-;;;;;;;;;;;;;45819:68;;45299:595;;;;:::o;49045:363::-;49137:21;49186:20;49196:9;49186;:20::i;:::-;49271:1;49220:39;;;:24;:39;;;;;;49170:36;;-1:-1:-1;;;;;;49220:39:55;:53;49216:86;;49282:20;;-1:-1:-1;;;49282:20:55;;;;;;;;;;;49216:86;49312:39;;;;:24;:39;;;;;:58;;-1:-1:-1;;;;;49312:58:55;;-1:-1:-1;;;;;;49312:58:55;;;;;;49045:363;;;;:::o;10522:428:57:-;10663:26;;;10621:7;10663:26;;;:8;:26;;;;;:38;10621:7;10729:43;10741:16;10663:38;10729:11;:43::i;:::-;10711:61;-1:-1:-1;10787:12:57;;;:70;;-1:-1:-1;10813:26:57;;;;;;;:8;:26;;;;;:44;;;10803:54;;10787:70;10783:136;;;10880:28;;-1:-1:-1;;;10880:28:57;;;;;160:25:71;;;133:18;;10880:28:57;14:177:71;2202:126:39;1920:7;;;;;;;2260:62;;2296:15;;-1:-1:-1;;;2296:15:39;;;;;;;;;;;2518:625:30;2613:7;2632:21;2656:32;2670:2;2674:7;2683:4;2656:13;:32::i;:::-;2632:56;-1:-1:-1;;;;;;2703:27:30;;2699:210;;2746:40;2778:7;3949:10;:17;;3922:24;;;;:15;:24;;;;;:44;;;3976:24;;;;;;;;;;;;3846:161;2746:40;2699:210;;;2824:2;-1:-1:-1;;;;;2807:19:30;:13;-1:-1:-1;;;;;2807:19:30;;2803:106;;2842:56;2875:13;2890:7;2842:32;:56::i;:::-;-1:-1:-1;;;;;2922:16:30;;2918:188;;2954:45;2991:7;2954:36;:45::i;:::-;2918:188;;;3037:2;-1:-1:-1;;;;;3020:19:30;:13;-1:-1:-1;;;;;3020:19:30;;3016:90;;3055:40;3083:2;3087:7;3055:27;:40::i;54473:641:55:-;-1:-1:-1;;;;;54596:39:55;;;54553:40;54596:39;;;:21;:39;;;;;;;;54553:82;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54553:82:55;;;;;;;;;;;;;;;;;;;54649:26;;54645:179;;54747:46;:21;54776:16;54747:28;:46::i;54645:179::-;-1:-1:-1;;;;;54841:39:55;;;;;;:21;:39;;;;;54834:46;;-1:-1:-1;;;;;;54834:46:55;;;;;;54890;:21;54863:16;54890:28;:46::i;:::-;-1:-1:-1;54950:14:55;;;;:18;54946:162;;55020:14;;;;55001;;;;;-1:-1:-1;;;;;54984:32:55;;;;;:16;:32;;;;;:50;;:32;;;:50;;55020:14;;54984:50;:::i;:::-;;;;;;;;55066:7;:14;;;-1:-1:-1;;;;;55053:44:55;;55082:7;:14;;;55053:44;;;;160:25:71;;148:2;133:18;;14:177;52161:168:55;52232:45;52243:9;52254:22;52232:10;:45::i;:::-;52293:29;52312:9;52293:29;;;;;;:::i;67855:238::-;67959:9;67954:133;67974:9;:16;67970:1;:20;67954:133;;;68011:65;68071:4;68011:52;:40;68038:9;68048:1;68038:12;;;;;;;;:::i;:::-;;;;;;;68011;:26;;:40;;;;:::i;:::-;1766:4:43;1663:115;68011:52:55;:59;;:65::i;:::-;67992:3;;67954:133;;68185:192;-1:-1:-1;;;;;2831:25:40;;68283:4:55;2818:39:40;;;2877:4;2870:18;;;2927:4;2911:21;;3369:11:43;68306:64:55;3243:153:43;5581:109:49;5637:16;5672:3;:11;;5665:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:109;;;:::o;2241:406::-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:49;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:49;2618:12;;2973:148:42;3031:13;3063:51;-1:-1:-1;;;;;3075:22:42;;448:2;3063:11;:51::i;1186:4022:35:-;1283:13;1515:4;:11;1530:1;1515:16;1511:31;;-1:-1:-1;1533:9:35;;;;;;;;;-1:-1:-1;1533:9:35;;;;1511:31;2480:20;2503:11;:69;;2571:1;2552:4;:11;2548:1;:15;;;;:::i;:::-;:19;;2566:1;2548:19;:::i;:::-;2547:25;;;;:::i;:::-;2503:69;;;2542:1;2523:4;:11;2537:1;2523:15;;;;:::i;:::-;2522:21;;;;:::i;:::-;2517:27;;:1;:27;:::i;:::-;2480:92;;2583:20;2617:12;-1:-1:-1;;;;;2606:24:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2606:24:35;;2583:47;;2778:1;2771:5;2767:13;2879:4;2871:6;2867:17;2912:4;2959;2953:11;2947:4;2943:22;3207:4;3199:6;3195:17;3249:8;3243:15;3288:4;3278:8;3271:22;3360:1259;3393:6;3384:7;3381:19;3360:1259;;;3495:1;3486:7;3482:15;3471:26;;3533:7;3527:14;4120:4;4112:5;4108:2;4104:14;4100:25;4090:8;4086:40;4080:47;4069:9;4061:67;4173:1;4162:9;4158:17;4145:30;;4263:4;4255:5;4251:2;4247:14;4243:25;4233:8;4229:40;4223:47;4212:9;4204:67;4316:1;4305:9;4301:17;4288:30;;4405:4;4397:5;4394:1;4390:13;4386:24;4376:8;4372:39;4366:46;4355:9;4347:66;4458:1;4447:9;4443:17;4430:30;;4539:4;4532:5;4528:16;4518:8;4514:31;4508:38;4497:9;4489:58;;4592:1;4581:9;4577:17;4564:30;;3360:1259;;;4680:28;;-1:-1:-1;;4722:446:35;;;;4907:1;4900:4;4894:11;4890:19;4931:1;4926:132;;;;5080:1;5075:79;;;;4883:271;;4926:132;4982:4;4978:1;4967:9;4963:17;4955:32;5035:4;5031:1;5020:9;5016:17;5008:32;4926:132;;5075:79;5131:4;5127:1;5116:9;5112:17;5104:32;4883:271;;4722:446;-1:-1:-1;5195:6:35;;1186:4022;-1:-1:-1;;;;;;1186:4022:35:o;60978:394:55:-;61097:16;;61067:4;;;61123:221;61143:3;61139:1;:7;61123:221;;;61187:16;-1:-1:-1;;;;;61171:32:55;:9;61181:1;61171:12;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;61171:12:55;:32;61167:167;;61238:9;61248:7;61254:1;61248:3;:7;:::i;:::-;61238:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;61238:18:55;61223:9;61233:1;61223:12;;;;;;;;:::i;:::-;;;;;;;;;:33;;;;;-1:-1:-1;;;;;61223:33:55;;;;;-1:-1:-1;;;;;61223:33:55;;;;;;61274:9;:15;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;61274:15:55;;;;;-1:-1:-1;;;;;;61274:15:55;;;;;;-1:-1:-1;61274:15:55;;-1:-1:-1;61308:11:55;;-1:-1:-1;61308:11:55;61167:167;61148:3;;61123:221;;;-1:-1:-1;61360:5:55;;60978:394;-1:-1:-1;;;;60978:394:55:o;8861:795:27:-;8947:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;;;9058:18;;;9054:86;;9092:37;9109:4;9115;9121:7;9092:16;:37::i;:::-;-1:-1:-1;;;;;9184:18:27;;;9180:256;;9300:48;9317:1;9321:7;9338:1;9342:5;9300:8;:48::i;:::-;-1:-1:-1;;;;;9391:15:27;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9391:20:27;;;9180:256;-1:-1:-1;;;;;9450:16:27;;;9446:107;;-1:-1:-1;;;;;9510:13:27;;;;;;:9;:13;;;;;:18;;9527:1;9510:18;;;9446:107;9563:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9563:21:27;-1:-1:-1;;;;;9563:21:27;;;;;;;;;9600:27;;9563:16;;9600:27;;;;;;;9645:4;8861:795;-1:-1:-1;;;;8861:795:27:o;4624:1055:30:-;4886:22;4911:15;4921:4;4911:9;:15::i;:::-;4936:18;4957:26;;;:17;:26;;;;;;;;;-1:-1:-1;;;;;5058:18:30;;;;:12;:18;;;;;;4886:40;;-1:-1:-1;4957:26:30;5180:28;;;5176:325;;5224:19;5246:35;;;;;;;;;;;;5296:31;;;;;;:45;;;5413:30;;:17;:30;;;;;:43;;;5176:325;5594:26;;;;:17;:26;;;;;;;;5587:33;;;5637:35;;;;-1:-1:-1;5637:35:30;;5630:42;-1:-1:-1;4624:1055:30:o;5967:1061::-;6241:10;:17;6216:22;;6241:21;;6261:1;;6241:21;:::i;:::-;6272:18;6293:24;;;:15;:24;;;;;;6661:10;:26;;6216:46;;-1:-1:-1;6293:24:30;;6216:46;;6661:26;;;;;;:::i;:::-;;;;;;;;;6639:48;;6723:11;6698:10;6709;6698:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6802:28;;;:15;:28;;;;;;;:41;;;6971:24;;;;;6964:31;7005:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6038:990;;;5967:1061;:::o;3437:214::-;3521:14;3554:1;3538:13;3548:2;3538:9;:13::i;:::-;:17;;;;:::i;:::-;-1:-1:-1;;;;;3565:16:30;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3609:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3437:214:30:o;2680:268:40:-;-1:-1:-1;;;;;2831:25:40;2753:14;2818:39;;;2877:4;2870:18;;;;2927:4;2911:21;;;2680:268::o;3485:139:43:-;3602:5;3596:4;3589:19;3485:139;;:::o;2289:525:42:-;2364:13;2410:5;2389:18;2457:10;2461:6;2457:1;:10;:::i;:::-;:14;;2470:1;2457:14;:::i;:::-;-1:-1:-1;;;;;2447:25:42;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2447:25:42;;2425:47;;-1:-1:-1;;;2482:6:42;2489:1;2482:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2482:15:42;;;;;;;;;-1:-1:-1;;;2507:6:42;2514:1;2507:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2507:15:42;;;;;;;;-1:-1:-1;2537:9:42;2549:10;2553:6;2549:1;:10;:::i;:::-;:14;;2562:1;2549:14;:::i;:::-;2537:26;;2532:140;2569:1;2565;:5;2532:140;;;-1:-1:-1;;;2614:10:42;2627:3;2614:16;2603:28;;;;;;;:::i;:::-;;;;2591:6;2598:1;2591:9;;;;;;;;:::i;:::-;;;;:40;-1:-1:-1;;;;;2591:40:42;;;;;;;;-1:-1:-1;2660:1:42;2645:16;;;;;2572:3;;;:::i;:::-;;;2532:140;;;-1:-1:-1;2685:15:42;;2681:96;;2723:43;;-1:-1:-1;;;2723:43:42;;;;;26711:25:71;;;26752:18;;;26745:34;;;26684:18;;2723:43:42;26529:256:71;7105:368:27;7217:38;7231:5;7238:7;7247;7217:13;:38::i;:::-;7212:255;;-1:-1:-1;;;;;7275:19:27;;7271:186;;7321:31;;-1:-1:-1;;;7321:31:27;;;;;160:25:71;;;133:18;;7321:31:27;14:177:71;7271:186:27;7398:44;;-1:-1:-1;;;7398:44:27;;-1:-1:-1;;;;;25302:32:71;;7398:44:27;;;25284:51:71;25351:18;;;25344:34;;;25257:18;;7398:44:27;25110:274:71;14794:662:27;14954:9;:31;;;-1:-1:-1;;;;;;14967:18:27;;;;14954:31;14950:460;;;15001:13;15017:22;15031:7;15017:13;:22::i;:::-;15001:38;-1:-1:-1;;;;;;15167:18:27;;;;;;:35;;;15198:4;-1:-1:-1;;;;;15189:13:27;:5;-1:-1:-1;;;;;15189:13:27;;;15167:35;:69;;;;;15207:29;15224:5;15231:4;15207:16;:29::i;:::-;15206:30;15167:69;15163:142;;;15263:27;;-1:-1:-1;;;15263:27:27;;-1:-1:-1;;;;;3241:32:71;;15263:27:27;;;3223:51:71;3196:18;;15263:27:27;3077:203:71;15163:142:27;15323:9;15319:81;;;15377:7;15373:2;-1:-1:-1;;;;;15357:28:27;15366:5;-1:-1:-1;;;;;15357:28:27;;;;;;;;;;;15319:81;14987:423;14950:460;-1:-1:-1;;15420:24:27;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15420:29:27;-1:-1:-1;;;;;15420:29:27;;;;;;;;;;14794:662::o;6401:272::-;6504:4;-1:-1:-1;;;;;6539:21:27;;;;;;:127;;;6586:7;-1:-1:-1;;;;;6577:16:27;:5;-1:-1:-1;;;;;6577:16:27;;:52;;;;6597:32;6614:5;6621:7;6597:16;:32::i;:::-;6577:88;;;-1:-1:-1;;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;;;6633:32;;;;6520:146;-1:-1:-1;6401:272:27:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:131:71:-;-1:-1:-1;;;;;;270:32:71;;260:43;;250:71;;317:1;314;307:12;332:245;390:6;443:2;431:9;422:7;418:23;414:32;411:52;;;459:1;456;449:12;411:52;498:9;485:23;517:30;541:5;517:30;:::i;870:381::-;947:8;957:6;1011:3;1004:4;996:6;992:17;988:27;978:55;;1029:1;1026;1019:12;978:55;-1:-1:-1;1052:20:71;;-1:-1:-1;;;;;1084:30:71;;1081:50;;;1127:1;1124;1117:12;1081:50;1164:4;1156:6;1152:17;1140:29;;1224:3;1217:4;1207:6;1204:1;1200:14;1192:6;1188:27;1184:38;1181:47;1178:67;;;1241:1;1238;1231:12;1178:67;870:381;;;;;:::o;1256:477::-;1368:6;1376;1429:2;1417:9;1408:7;1404:23;1400:32;1397:52;;;1445:1;1442;1435:12;1397:52;1485:9;1472:23;-1:-1:-1;;;;;1510:6:71;1507:30;1504:50;;;1550:1;1547;1540:12;1504:50;1589:84;1665:7;1656:6;1645:9;1641:22;1589:84;:::i;:::-;1692:8;;1563:110;;-1:-1:-1;1256:477:71;-1:-1:-1;;;;1256:477:71:o;1738:173::-;1806:20;;-1:-1:-1;;;;;1855:31:71;;1845:42;;1835:70;;1901:1;1898;1891:12;1916:186;1975:6;2028:2;2016:9;2007:7;2003:23;1999:32;1996:52;;;2044:1;2041;2034:12;1996:52;2067:29;2086:9;2067:29;:::i;2107:288::-;2148:3;2186:5;2180:12;2213:6;2208:3;2201:19;2269:6;2262:4;2255:5;2251:16;2244:4;2239:3;2235:14;2229:47;2321:1;2314:4;2305:6;2300:3;2296:16;2292:27;2285:38;2384:4;2377:2;2373:7;2368:2;2360:6;2356:15;2352:29;2347:3;2343:39;2339:50;2332:57;;;2107:288;;;;:::o;2400:217::-;2547:2;2536:9;2529:21;2510:4;2567:44;2607:2;2596:9;2592:18;2584:6;2567:44;:::i;2846:226::-;2905:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:52;;;2974:1;2971;2964:12;2926:52;-1:-1:-1;3019:23:71;;2846:226;-1:-1:-1;2846:226:71:o;3285:300::-;3353:6;3361;3414:2;3402:9;3393:7;3389:23;3385:32;3382:52;;;3430:1;3427;3420:12;3382:52;3453:29;3472:9;3453:29;:::i;:::-;3443:39;3551:2;3536:18;;;;3523:32;;-1:-1:-1;;;3285:300:71:o;4077:347::-;4128:8;4138:6;4192:3;4185:4;4177:6;4173:17;4169:27;4159:55;;4210:1;4207;4200:12;4159:55;-1:-1:-1;4233:20:71;;-1:-1:-1;;;;;4265:30:71;;4262:50;;;4308:1;4305;4298:12;4262:50;4345:4;4337:6;4333:17;4321:29;;4397:3;4390:4;4381:6;4373;4369:19;4365:30;4362:39;4359:59;;;4414:1;4411;4404:12;4429:127;4490:10;4485:3;4481:20;4478:1;4471:31;4521:4;4518:1;4511:15;4545:4;4542:1;4535:15;4561:745;4603:5;4656:3;4649:4;4641:6;4637:17;4633:27;4623:55;;4674:1;4671;4664:12;4623:55;4714:6;4701:20;-1:-1:-1;;;;;4736:6:71;4733:30;4730:56;;;4766:18;;:::i;:::-;4835:2;4829:9;4927:2;4889:17;;-1:-1:-1;;4885:31:71;;;4918:2;4881:40;4877:54;4865:67;;-1:-1:-1;;;;;4947:34:71;;4983:22;;;4944:62;4941:88;;;5009:18;;:::i;:::-;5045:2;5038:22;5069;;;5110:19;;;5131:4;5106:30;5103:39;-1:-1:-1;5100:59:71;;;5155:1;5152;5145:12;5100:59;5219:6;5212:4;5204:6;5200:17;5193:4;5185:6;5181:17;5168:58;5274:1;5246:19;;;5267:4;5242:30;5235:41;;;;5250:6;4561:745;-1:-1:-1;;;4561:745:71:o;5311:563::-;5375:5;5423:4;5411:9;5406:3;5402:19;5398:30;5395:50;;;5441:1;5438;5431:12;5395:50;5494:2;5488:9;5536:4;5524:17;;-1:-1:-1;;;;;5556:34:71;;5592:22;;;5553:62;5550:88;;;5618:18;;:::i;:::-;5654:2;5647:22;5687:6;-1:-1:-1;5687:6:71;5716:23;;-1:-1:-1;;;;;5751:30:71;;5748:50;;;5794:1;5791;5784:12;5748:50;5822:45;5863:3;5854:6;5843:9;5839:22;5822:45;:::i;:::-;5814:6;5807:61;;;5311:563;;;;:::o;5879:1162::-;6032:6;6040;6048;6056;6064;6072;6080;6133:3;6121:9;6112:7;6108:23;6104:33;6101:53;;;6150:1;6147;6140:12;6101:53;6190:9;6177:23;-1:-1:-1;;;;;6215:6:71;6212:30;6209:50;;;6255:1;6252;6245:12;6209:50;6294:58;6344:7;6335:6;6324:9;6320:22;6294:58;:::i;:::-;6371:8;;-1:-1:-1;6268:84:71;-1:-1:-1;;6459:2:71;6444:18;;6431:32;-1:-1:-1;;;;;6475:32:71;;6472:52;;;6520:1;6517;6510:12;6472:52;6543:70;6605:7;6594:8;6583:9;6579:24;6543:70;:::i;:::-;6533:80;;;6632:38;6666:2;6655:9;6651:18;6632:38;:::i;:::-;6622:48;;6723:2;6712:9;6708:18;6695:32;-1:-1:-1;;;;;6742:8:71;6739:32;6736:52;;;6784:1;6781;6774:12;6736:52;6823:60;6875:7;6864:8;6853:9;6849:24;6823:60;:::i;:::-;5879:1162;;;;-1:-1:-1;5879:1162:71;;;;;;7006:3;6991:19;;;6978:33;;5879:1162;-1:-1:-1;;;;5879:1162:71:o;7469:127::-;7530:10;7525:3;7521:20;7518:1;7511:31;7561:4;7558:1;7551:15;7585:4;7582:1;7575:15;7601:243;7688:1;7681:5;7678:12;7668:143;;7733:10;7728:3;7724:20;7721:1;7714:31;7768:4;7765:1;7758:15;7796:4;7793:1;7786:15;7668:143;7820:18;;7601:243::o;7929:642::-;8043:1;8039;8034:3;8030:11;8026:19;8018:5;8012:12;8008:38;8003:3;7996:51;8108:10;8100:4;8093:5;8089:16;8083:23;8079:40;8072:4;8067:3;8063:14;8056:64;8181:10;8173:4;8166:5;8162:16;8156:23;8152:40;8145:4;8140:3;8136:14;8129:64;8239:4;8232:5;8228:16;8222:23;8254:61;8309:4;8304:3;8300:14;8286:12;8254:61;:::i;:::-;;8378:4;8371:5;8367:16;8361:23;8354:31;8347:39;8340:4;8335:3;8331:14;8324:63;8448:4;8440;8433:5;8429:16;8423:23;8419:34;8412:4;8407:3;8403:14;8396:58;8502:4;8495:5;8491:16;8485:23;8517:48;8559:4;8554:3;8550:14;8534;7916:4;7905:16;7893:29;;7849:75;8576:267;8774:3;8759:19;;8787:50;8763:9;8819:6;8787:50;:::i;8848:374::-;8925:6;8933;8941;8994:2;8982:9;8973:7;8969:23;8965:32;8962:52;;;9010:1;9007;9000:12;8962:52;9033:29;9052:9;9033:29;:::i;:::-;9023:39;;9081:38;9115:2;9104:9;9100:18;9081:38;:::i;:::-;8848:374;;9071:48;;-1:-1:-1;;;9188:2:71;9173:18;;;;9160:32;;8848:374::o;9227:277::-;9307:6;9360:2;9348:9;9339:7;9335:23;9331:32;9328:52;;;9376:1;9373;9366:12;9328:52;9415:9;9402:23;9454:1;9447:5;9444:12;9434:40;;9470:1;9467;9460:12;9509:702;9763:2;9775:21;;;9845:13;;9748:18;;;9867:22;;;9715:4;;9946:15;;;9920:2;9905:18;;;9715:4;9989:196;10003:6;10000:1;9997:13;9989:196;;;10052:51;10099:3;10090:6;10084:13;10052:51;:::i;:::-;10172:2;10160:15;;;;;10132:4;10123:14;;;;;10025:1;10018:9;9989:196;;;-1:-1:-1;10202:3:71;;9509:702;-1:-1:-1;;;;;9509:702:71:o;10216:118::-;10302:5;10295:13;10288:21;10281:5;10278:32;10268:60;;10324:1;10321;10314:12;10339:241;10395:6;10448:2;10436:9;10427:7;10423:23;10419:32;10416:52;;;10464:1;10461;10454:12;10416:52;10503:9;10490:23;10522:28;10544:5;10522:28;:::i;10585:669::-;10700:6;10708;10716;10769:2;10757:9;10748:7;10744:23;10740:32;10737:52;;;10785:1;10782;10775:12;10737:52;10825:9;10812:23;-1:-1:-1;;;;;10850:6:71;10847:30;10844:50;;;10890:1;10887;10880:12;10844:50;10929:58;10979:7;10970:6;10959:9;10955:22;10929:58;:::i;:::-;11006:8;;-1:-1:-1;10903:84:71;-1:-1:-1;;11094:2:71;11079:18;;11066:32;-1:-1:-1;;;;;11110:32:71;;11107:52;;;11155:1;11152;11145:12;11107:52;11178:70;11240:7;11229:8;11218:9;11214:24;11178:70;:::i;:::-;11168:80;;;10585:669;;;;;:::o;11259:121::-;11344:10;11337:5;11333:22;11326:5;11323:33;11313:61;;11370:1;11367;11360:12;11385:245;11443:6;11496:2;11484:9;11475:7;11471:23;11467:32;11464:52;;;11512:1;11509;11502:12;11464:52;11551:9;11538:23;11570:30;11594:5;11570:30;:::i;11635:446::-;11688:3;11726:5;11720:12;11753:6;11748:3;11741:19;11785:4;11780:3;11776:14;11769:21;;11824:4;11817:5;11813:16;11847:1;11857:199;11871:6;11868:1;11865:13;11857:199;;;11936:13;;-1:-1:-1;;;;;11932:39:71;11920:52;;12001:4;11992:14;;;;12029:17;;;;11968:1;11886:9;11857:199;;;-1:-1:-1;12072:3:71;;11635:446;-1:-1:-1;;;;11635:446:71:o;12086:757::-;12271:2;12260:9;12253:21;12234:4;12309:6;12303:13;12352:4;12347:2;12336:9;12332:18;12325:32;12380:63;12438:3;12427:9;12423:19;12409:12;12380:63;:::i;:::-;12366:77;;12497:2;12489:6;12485:15;12479:22;12474:2;12463:9;12459:18;12452:50;-1:-1:-1;;;;;12560:2:71;12552:6;12548:15;12542:22;12538:47;12533:2;12522:9;12518:18;12511:75;12651:10;12645:2;12637:6;12633:15;12627:22;12623:39;12617:3;12606:9;12602:19;12595:68;12729:10;12722:3;12714:6;12710:16;12704:23;12700:40;12694:3;12683:9;12679:19;12672:69;12808:4;12801:3;12793:6;12789:16;12783:23;12779:34;12772:4;12761:9;12757:20;12750:64;12831:6;12823:14;;;12086:757;;;;:::o;13376:272::-;13434:6;13487:2;13475:9;13466:7;13462:23;13458:32;13455:52;;;13503:1;13500;13493:12;13455:52;13542:9;13529:23;13592:6;13585:5;13581:18;13574:5;13571:29;13561:57;;13614:1;13611;13604:12;13842:409;13912:6;13920;13973:2;13961:9;13952:7;13948:23;13944:32;13941:52;;;13989:1;13986;13979:12;13941:52;14029:9;14016:23;-1:-1:-1;;;;;14054:6:71;14051:30;14048:50;;;14094:1;14091;14084:12;14048:50;14133:58;14183:7;14174:6;14163:9;14159:22;14133:58;:::i;14256:779::-;14416:4;14464:2;14453:9;14449:18;14494:2;14483:9;14476:21;14517:6;14552;14546:13;14583:6;14575;14568:22;14621:2;14610:9;14606:18;14599:25;;14683:2;14673:6;14670:1;14666:14;14655:9;14651:30;14647:39;14633:53;;14721:2;14713:6;14709:15;14742:1;14752:254;14766:6;14763:1;14760:13;14752:254;;;14859:2;14855:7;14843:9;14835:6;14831:22;14827:36;14822:3;14815:49;14887:39;14919:6;14910;14904:13;14887:39;:::i;:::-;14877:49;-1:-1:-1;14961:2:71;14984:12;;;;14949:15;;;;;14788:1;14781:9;14752:254;;;-1:-1:-1;15023:6:71;;14256:779;-1:-1:-1;;;;;;14256:779:71:o;15040:610::-;15126:6;15134;15187:2;15175:9;15166:7;15162:23;15158:32;15155:52;;;15203:1;15200;15193:12;15155:52;15243:9;15230:23;-1:-1:-1;;;;;15268:6:71;15265:30;15262:50;;;15308:1;15305;15298:12;15262:50;15331:22;;15384:4;15376:13;;15372:27;-1:-1:-1;15362:55:71;;15413:1;15410;15403:12;15362:55;15453:2;15440:16;-1:-1:-1;;;;;15471:6:71;15468:30;15465:50;;;15511:1;15508;15501:12;15465:50;15564:7;15559:2;15549:6;15546:1;15542:14;15538:2;15534:23;15530:32;15527:45;15524:65;;;15585:1;15582;15575:12;15524:65;15616:2;15608:11;;;;;15638:6;;-1:-1:-1;15040:610:71;-1:-1:-1;;;15040:610:71:o;16111:1236::-;16517:3;16512;16508:13;16500:6;16496:26;16485:9;16478:45;16559:3;16554:2;16543:9;16539:18;16532:31;16459:4;16586:45;16626:3;16615:9;16611:19;16603:6;16586:45;:::i;:::-;16679:9;16671:6;16667:22;16662:2;16651:9;16647:18;16640:50;16713:32;16738:6;16730;16713:32;:::i;:::-;16776:2;16761:18;;16754:34;;;-1:-1:-1;;;;;16825:32:71;;16819:3;16804:19;;16797:61;16845:3;16874:19;;16867:35;;;16939:22;;;16933:3;16918:19;;16911:51;17011:13;;17033:22;;;17083:2;17109:15;;;;-1:-1:-1;17071:15:71;;;;-1:-1:-1;17152:169:71;17166:6;17163:1;17160:13;17152:169;;;17227:13;;17215:26;;17270:2;17296:15;;;;17261:12;;;;17188:1;17181:9;17152:169;;;-1:-1:-1;17338:3:71;;16111:1236;-1:-1:-1;;;;;;;;;;;16111:1236:71:o;17576:261::-;17755:2;17744:9;17737:21;17718:4;17775:56;17827:2;17816:9;17812:18;17804:6;17775:56;:::i;17842:315::-;17907:6;17915;17968:2;17956:9;17947:7;17943:23;17939:32;17936:52;;;17984:1;17981;17974:12;17936:52;18007:29;18026:9;18007:29;:::i;:::-;17997:39;;18086:2;18075:9;18071:18;18058:32;18099:28;18121:5;18099:28;:::i;:::-;18146:5;18136:15;;;17842:315;;;;;:::o;18162:156::-;18228:20;;18288:4;18277:16;;18267:27;;18257:55;;18308:1;18305;18298:12;18323:182;18380:6;18433:2;18421:9;18412:7;18408:23;18404:32;18401:52;;;18449:1;18446;18439:12;18401:52;18472:27;18489:9;18472:27;:::i;18510:583::-;18605:6;18613;18621;18629;18682:3;18670:9;18661:7;18657:23;18653:33;18650:53;;;18699:1;18696;18689:12;18650:53;18739:9;18726:23;-1:-1:-1;;;;;18764:6:71;18761:30;18758:50;;;18804:1;18801;18794:12;18758:50;18827:49;18868:7;18859:6;18848:9;18844:22;18827:49;:::i;:::-;18817:59;;;18895:38;18929:2;18918:9;18914:18;18895:38;:::i;:::-;18885:48;;18952:38;18986:2;18975:9;18971:18;18952:38;:::i;:::-;18510:583;;;;-1:-1:-1;18942:48:71;;19059:2;19044:18;19031:32;;-1:-1:-1;;18510:583:71:o;19280:::-;19375:6;19383;19391;19399;19452:3;19440:9;19431:7;19427:23;19423:33;19420:53;;;19469:1;19466;19459:12;19420:53;19492:29;19511:9;19492:29;:::i;:::-;19482:39;;19540:38;19574:2;19563:9;19559:18;19540:38;:::i;:::-;19530:48;-1:-1:-1;19647:2:71;19632:18;;19619:32;;-1:-1:-1;19726:2:71;19711:18;;19698:32;-1:-1:-1;;;;;19742:30:71;;19739:50;;;19785:1;19782;19775:12;19739:50;19808:49;19849:7;19840:6;19829:9;19825:22;19808:49;:::i;:::-;19798:59;;;19280:583;;;;;;;:::o;20509:236::-;20600:6;20660:3;20648:9;20639:7;20635:23;20631:33;20676:2;20673:22;;;20691:1;20688;20681:12;20673:22;-1:-1:-1;20730:9:71;;20509:236;-1:-1:-1;;20509:236:71:o;20750:256::-;20816:6;20824;20877:2;20865:9;20856:7;20852:23;20848:32;20845:52;;;20893:1;20890;20883:12;20845:52;20916:29;20935:9;20916:29;:::i;:::-;20906:39;;20964:36;20996:2;20985:9;20981:18;20964:36;:::i;:::-;20954:46;;20750:256;;;;;:::o;21011:260::-;21079:6;21087;21140:2;21128:9;21119:7;21115:23;21111:32;21108:52;;;21156:1;21153;21146:12;21108:52;21179:29;21198:9;21179:29;:::i;:::-;21169:39;;21227:38;21261:2;21250:9;21246:18;21227:38;:::i;21469:731::-;-1:-1:-1;;;;;21803:32:71;;21785:51;;21884:10;21872:23;;;21867:2;21852:18;;21845:51;21932:23;;21927:2;21912:18;;21905:51;21772:3;21757:19;;21965:59;22020:2;22005:18;;21997:6;21965:59;:::i;:::-;22068:14;;22061:22;22055:3;22040:19;;22033:51;22133:4;22121:17;;;22115:3;22100:19;;22093:46;22176:17;;22170:3;22155:19;;;22148:46;21469:731;;-1:-1:-1;;;;21469:731:71:o;22205:127::-;22266:10;22261:3;22257:20;22254:1;22247:31;22297:4;22294:1;22287:15;22321:4;22318:1;22311:15;22337:127;22398:10;22393:3;22389:20;22386:1;22379:31;22429:4;22426:1;22419:15;22453:4;22450:1;22443:15;22469:128;22536:9;;;22557:11;;;22554:37;;;22571:18;;:::i;22602:389::-;22786:2;22771:18;;-1:-1:-1;;;;;22820:26:71;22839:6;22820:26;:::i;:::-;22816:52;22798:71;;22935:4;22923:17;;;22910:31;22957:20;;;;22950:35;;;;22602:389;:::o;22996:380::-;23075:1;23071:12;;;;23118;;;23139:61;;23193:4;23185:6;23181:17;23171:27;;23139:61;23246:2;23238:6;23235:14;23215:18;23212:38;23209:161;;23292:10;23287:3;23283:20;23280:1;23273:31;23327:4;23324:1;23317:15;23355:4;23352:1;23345:15;23209:161;;22996:380;;;:::o;23660:168::-;23733:9;;;23764;;23781:15;;;23775:22;;23761:37;23751:71;;23802:18;;:::i;23833:125::-;23898:9;;;23919:10;;;23916:36;;;23932:18;;:::i;23963:127::-;24024:10;24019:3;24015:20;24012:1;24005:31;24055:4;24052:1;24045:15;24079:4;24076:1;24069:15;24095:120;24135:1;24161;24151:35;;24166:18;;:::i;:::-;-1:-1:-1;24200:9:71;;24095:120::o;24220:689::-;24529:25;;;24585:2;24570:18;;24563:34;;;;-1:-1:-1;;;;;24633:32:71;;;24628:2;24613:18;;24606:60;24702:32;;;;24697:2;24682:18;;24675:60;24784:4;24772:17;;;24766:3;24751:19;;24744:46;-1:-1:-1;;;;;24827:31:71;24653:3;24806:19;;24799:60;24890:3;24875:19;;24868:35;24516:3;24501:19;;24220:689::o;24914:191::-;-1:-1:-1;;;;;24982:26:71;;;25010;;;24978:59;;25049:27;;25046:53;;;25079:18;;:::i;25599:167::-;25694:10;25667:18;;;25687;;;25663:43;;25718:19;;25715:45;;;25740:18;;:::i;25771:170::-;25868:10;25861:18;;;25841;;;25837:43;;25892:20;;25889:46;;;25915:18;;:::i;25946:221::-;26099:2;26084:18;;26111:50;26088:9;26143:6;26111:50;:::i;27654:135::-;27693:3;27714:17;;;27711:43;;27734:18;;:::i;:::-;-1:-1:-1;27781:1:71;27770:13;;27654:135::o;28081:175::-;28118:3;28162:4;28155:5;28151:16;28191:4;28182:7;28179:17;28176:43;;28199:18;;:::i;:::-;28248:1;28235:15;;28081:175;-1:-1:-1;;28081:175:71:o;28261:691::-;28445:19;;28473:21;;28563:2;28552:14;;28539:28;28593:1;28583:12;;28576:29;28674:2;28663:14;;28650:28;28704:1;28694:12;;28687:29;28753:1;28743:12;;28803:2;28792:14;;28779:28;28816:32;28779:28;28816:32;:::i;:::-;28883:17;;-1:-1:-1;;28879:39:71;28933:10;28920:24;;;;28876:69;28857:89;;-1:-1:-1;;28261:691:71:o;29368:204::-;29406:3;-1:-1:-1;;;;;29443:5:71;29439:30;-1:-1:-1;;;;;29484:7:71;29481:31;29478:57;;29515:18;;:::i;29782:212::-;29824:3;29862:5;29856:12;29906:6;29899:4;29892:5;29888:16;29883:3;29877:36;29968:1;29932:16;;29957:13;;;-1:-1:-1;29932:16:71;;29782:212;-1:-1:-1;29782:212:71:o;29999:1099::-;30500:66;30495:3;30488:79;-1:-1:-1;;;30592:2:71;30587:3;30583:12;30576:30;30470:3;30625:39;30660:2;30655:3;30651:12;30643:6;30625:39;:::i;:::-;30684:66;30673:78;;30780:34;30775:2;30767:11;;30760:55;30844:34;30839:2;30831:11;;30824:55;-1:-1:-1;;;30903:2:71;30895:11;;30888:76;30986:39;31020:3;31012:12;;31004:6;30986:39;:::i;:::-;-1:-1:-1;;;31034:29:71;;31090:1;31079:13;;29999:1099;-1:-1:-1;;;;;29999:1099:71:o;31103:345::-;31355:31;31350:3;31343:44;31325:3;31403:39;31438:2;31433:3;31429:12;31421:6;31403:39;:::i;32476:789::-;32705:13;;-1:-1:-1;;;;;32745:35:71;;32727:54;;32844:10;32768:3;32823:19;;;32819:36;;32812:4;32797:20;;32790:66;32891:3;32887:19;;;32883:36;32936:4;32921:20;;7423:35;32675:3;32660:19;;;32951:85;33030:4;33019:9;33015:20;33008:4;32996:9;32991:3;32987:19;32983:30;32951:85;:::i;:::-;33045:69;33108:4;33097:9;33093:20;33086:4;33074:9;33069:3;33065:19;33061:30;652:13;645:21;633:34;;582:91;33045:69;33148:3;33144:19;;;33165:4;33140:30;33187:3;33172:19;;7893:29;33222:3;33218:19;;;33254:3;33239:19;;7893:29;33201:58;7849:75;33270:537;33509:2;33498:9;33491:21;33472:4;33535:44;33575:2;33564:9;33560:18;33552:6;33535:44;:::i;:::-;33627:9;33619:6;33615:22;33610:2;33599:9;33595:18;33588:50;33661:32;33686:6;33678;33661:32;:::i;:::-;33647:46;;33741:9;33733:6;33729:22;33724:2;33713:9;33709:18;33702:50;33769:32;33794:6;33786;33769:32;:::i;33812:190::-;33941:3;33966:30;33992:3;33984:6;33966:30;:::i;34007:245::-;34074:6;34127:2;34115:9;34106:7;34102:23;34098:32;34095:52;;;34143:1;34140;34133:12;34095:52;34175:9;34169:16;34194:28;34216:5;34194:28;:::i;34257:358::-;34458:2;34447:9;34440:21;34421:4;34496:6;34490:13;34539:2;34534;34523:9;34519:18;34512:30;34559:50;34605:2;34594:9;34590:18;34576:12;34559:50;:::i;34745:181::-;34826:1;34836:84;34850:9;34847:1;34844:16;34836:84;;;34916:1;34897:17;;;34890:28;34875:1;34868:9;34836:84;;34931:508;35032:2;35027:3;35024:11;35021:412;;;35069:10;35064:3;35061:19;35058:365;;;35121:5;35118:1;35111:16;35169:4;35166:1;35156:18;35234:2;35222:10;35218:19;35215:1;35211:27;35273:4;35261:10;35258:20;35255:45;;;-1:-1:-1;35297:1:71;35255:45;35317:92;35395:12;35389:2;35384:3;35380:12;35377:1;35373:20;35369:39;35354:12;35348:4;35344:23;35317:92;:::i;35615:1194::-;-1:-1:-1;;;;;35732:3:71;35729:27;35726:53;;;35759:18;;:::i;:::-;35788:93;35877:3;35837:38;35869:4;35863:11;35837:38;:::i;:::-;35831:4;35788:93;:::i;:::-;35907:1;35932:2;35927:3;35924:11;35949:1;35944:607;;;;36595:1;36612:3;36609:93;;;-1:-1:-1;36668:19:71;;;36655:33;36609:93;-1:-1:-1;;35572:1:71;35568:11;;;35564:24;35560:29;35550:40;35596:1;35592:11;;;35547:57;36715:78;;35917:886;;35944:607;34692:1;34685:14;;;34729:4;34716:18;;-1:-1:-1;;35980:17:71;;;36094:229;36108:7;36105:1;36102:14;36094:229;;;36197:19;;;36184:33;36169:49;;36304:4;36289:20;;;;36257:1;36245:14;;;;36124:12;36094:229;;;36098:3;36351;36342:7;36339:16;36336:159;;;36475:1;36471:6;36465:3;36459;36456:1;36452:11;36448:21;36444:34;36440:39;36427:9;36422:3;36418:19;36405:33;36401:79;36393:6;36386:95;36336:159;;;36538:1;36532:3;36529:1;36525:11;36521:19;36515:4;36508:33;35917:886;;35615:1194;;;:::o;36814:148::-;36902:4;36881:12;;;36895;;;36877:31;;36920:13;;36917:39;;;36936:18;;:::i;36967:157::-;36997:1;37031:4;37028:1;37024:12;37055:3;37045:37;;37062:18;;:::i;:::-;37114:3;37107:4;37104:1;37100:12;37096:22;37091:27;;;36967:157;;;;:::o;37129:151::-;37219:4;37212:12;;;37198;;;37194:31;;37237:14;;37234:40;;;37254:18;;:::i;37285:188::-;37323:3;37367:10;37360:5;37356:22;37402:10;37393:7;37390:23;37387:49;;37416:18;;:::i;37478:958::-;37628:3;37622:10;-1:-1:-1;;;;;37647:6:71;37644:30;37641:56;;;37677:18;;:::i;:::-;-1:-1:-1;;;37712:6:71;37709:32;37706:58;;;37744:18;;:::i;:::-;37793:3;37787:10;37818:6;37813:3;37806:19;37848:6;37840;37837:18;37834:204;;;37888:3;37885:1;37878:14;37948:6;37941:4;37938:1;37928:18;37924:31;37968:60;38020:6;38012;38008:19;37995:11;37968:60;:::i;:::-;;37834:204;;38070:4;38065:3;38061:14;38094:3;38091:1;38084:14;38132:4;38129:1;38119:18;38155:1;38165:265;38179:6;38176:1;38173:13;38165:265;;;38241:13;;-1:-1:-1;;;;;38307:31:71;38398:12;;;38391:29;38373:4;38361:17;;;;38335:1;38194:9;38165:265;;38728:484;-1:-1:-1;;;;;38959:32:71;;;38941:51;;39028:32;;39023:2;39008:18;;39001:60;39092:2;39077:18;;39070:34;;;39140:3;39135:2;39120:18;;39113:31;;;-1:-1:-1;;39161:45:71;;39186:19;;39178:6;39161:45;:::i;39217:249::-;39286:6;39339:2;39327:9;39318:7;39314:23;39310:32;39307:52;;;39355:1;39352;39345:12;39307:52;39387:9;39381:16;39406:30;39430:5;39406:30;:::i;39471:136::-;39510:3;39538:5;39528:39;;39547:18;;:::i;:::-;-1:-1:-1;;;39583:18:71;;39471:136::o;39612:342::-;39864:28;39859:3;39852:41;39834:3;39909:39;39944:2;39939:3;39935:12;39927:6;39909:39;:::i;39959:127::-;40020:10;40015:3;40011:20;40008:1;40001:31;40051:4;40048:1;40041:15;40075:4;40072:1;40065:15;40091:418;-1:-1:-1;;;;;;40304:31:71;;40292:44;;40274:3;40358:38;40393:1;40384:11;;40376:6;40358:38;:::i;:::-;40427:2;40423:15;;;;-1:-1:-1;;;;;;40419:53:71;40405:68;;-1:-1:-1;;40500:2:71;40489:14;;40091:418;-1:-1:-1;;40091:418:71:o","linkReferences":{},"immutableReferences":{"49115":[{"start":17423,"length":32}],"49117":[{"start":17458,"length":32}],"49119":[{"start":17538,"length":32}],"49121":[{"start":17576,"length":32}],"49123":[{"start":17390,"length":32}]}},"methodIdentifiers":{"SYSTEM_ADDRESS()":"3434735f","activate()":"0f15f4c0","allocateIssuance()":"355811a7","applyIncentives((address,uint256)[])":"0a36cdef","applySlashes((address,uint256)[])":"02ae337b","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","beginExit()":"2228dfa0","burn(address)":"89afcb44","cancelStakeVersionChange(address)":"0f4346fa","claimRefund()":"b5545a3c","claimStakeRewards(address)":"2b9f4985","claimableRefunds(address)":"43401a00","concludeEpoch(address[])":"7b55a300","delegateStake(bytes,(bytes),address,bytes,uint256)":"127ce8e8","delegationDigest(bytes,address,address,uint256)":"ad6cfb86","eip712Domain()":"84b0196e","epochInfo(uint256)":"3894228e","futureEpochInfo(uint256)":"59ca93b6","getApproved(uint256)":"081812fc","getBalanceBreakdown(address)":"15b5709a","getBlsPubkey(address)":"059b916c","getCommitteeBlsPubkeys(uint32)":"6ae9942c","getCommitteeValidators(uint32)":"a0201be5","getCurrentEpoch()":"b97dd9e2","getCurrentEpochInfo()":"babc394f","getCurrentStakeConfig()":"7d06fdf8","getCurrentStakeVersion()":"67398331","getEligibleValidatorCount()":"23a40430","getEpochInfo(uint32)":"374ed18c","getNextCommitteeSize()":"eb8535c2","getPendingVersionChanges()":"a7c5e701","getRewards(address)":"79ee54f7","getValidator(address)":"1904bb2e","getValidators(uint8)":"8cc05eda","getValidatorsInfo(uint8)":"2870259d","increaseNonce()":"c53a0292","isApprovedForAll(address,address)":"e985e9c5","isDelegated(address)":"3e28391d","isRetired(address)":"6d3c6275","isValidator(bytes)":"6a926591","issuance()":"863623bb","issuanceWithdrawal(uint256)":"0752e017","migrateValidatorSets()":"aaffd270","mint(address)":"6a627842","name()":"06fdde03","owner()":"8da5cb5b","ownerOf(uint256)":"6352211e","pause()":"8456cb59","paused()":"5c975abb","renounceOwnership()":"715018a6","requestStakeVersionChange(address,uint8)":"e5a22827","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","setNextCommitteeSize(uint16)":"62fcde4b","setTopUpAuthorityRequired(bool)":"2a8e33d7","setValidatorRegion(address,uint8)":"f0624768","stake(bytes,(bytes))":"2fb0d025","stakeConfig(uint8)":"a71954ec","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenByIndex(uint256)":"4f6ccce7","tokenOfOwnerByIndex(address,uint256)":"2f745c59","tokenURI(uint256)":"c87b56dd","topUpAuthorityRequired()":"58e88dbb","topUpSlashedStake(address)":"43201d30","totalSupply()":"18160ddd","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b","undistributedIssuance()":"008d6acd","unpause()":"3f4ba83a","unstake(address,bool)":"f66a25a4","upgradeStakeVersion((uint256,uint256,uint256,uint32))":"c05df7ac","validators(address)":"fa52c7d8","versionChangeRequests(address)":"bd3e7594"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.35+commit.47b9dedd\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"genesisConfig_\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"initialValidators_\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"blsPubkeys_\",\"type\":\"bytes[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession[]\",\"name\":\"proofsOfPossession\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"AlreadyDefined\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"BlsPubkeyNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"CommitteeRequirement\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"DelegationExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateBLSPubkey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC721EnumerableForbiddenBatchMint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"ERC721OutOfBoundsIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GenesisArityMismatch\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"IneligibleUnstake\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"withdrawAmount\",\"type\":\"uint256\"}],\"name\":\"InsufficientRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBLSPubkey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minCommitteeSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"providedCommitteeSize\",\"type\":\"uint256\"}],\"name\":\"InvalidCommitteeSize\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"name\":\"InvalidDeficitAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"name\":\"InvalidDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"InvalidEpoch\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proof\",\"type\":\"tuple\"}],\"name\":\"InvalidProofOfPossession\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"currentVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeVersion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSupply\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"InvalidTokenId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValidatorAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IssuanceTransferFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"LowLevelCallFailure\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoClaimableRefund\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoPendingVersionChange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"NotRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotTransferable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"NotValidator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invalidCaller\",\"type\":\"address\"}],\"name\":\"OnlySystemCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Reentrancy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RequiresConsensusNFT\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"name\":\"StakeNotSlashed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TopUpAuthorityRequired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"DelegationNonceIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"epoch\",\"type\":\"tuple\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"oldSize\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newSize\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numActiveValidators\",\"type\":\"uint256\"}],\"name\":\"NextCommitteeSizeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RefundClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RefundQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"}],\"name\":\"RewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"name\":\"StakeVersionAuthored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"StakeVersionChangeCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"requestEpoch\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"escrow\",\"type\":\"uint256\"}],\"name\":\"StakeVersionChangeRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"required\",\"type\":\"bool\"}],\"name\":\"TopUpAuthorityRequirementUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorExited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorPendingActivation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorPendingExit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"name\":\"ValidatorRegionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorRetired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eligibleValidatorCount\",\"type\":\"uint256\"}],\"name\":\"ValidatorSetsMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Slash\",\"name\":\"slash\",\"type\":\"tuple\"}],\"name\":\"ValidatorSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ValidatorStakeToppedUp\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"oldVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldStakeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newStakeAmount\",\"type\":\"uint256\"}],\"name\":\"ValidatorStakeVersionUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorStaked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SYSTEM_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allocateIssuance\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"consensusHeaderCount\",\"type\":\"uint256\"}],\"internalType\":\"struct RewardInfo[]\",\"name\":\"rewardInfos\",\"type\":\"tuple[]\"}],\"name\":\"applyIncentives\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Slash[]\",\"name\":\"slashes\",\"type\":\"tuple[]\"}],\"name\":\"applySlashes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"beginExit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"cancelStakeVersionChange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRefund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"claimStakeRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"claimableRefunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newCommittee\",\"type\":\"address[]\"}],\"name\":\"concludeEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proofOfPossession\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"validatorEIP712Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"delegateStake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"delegationDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"epochInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"futureEpochInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getBalanceBreakdown\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getBlsPubkey\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getCommitteeBlsPubkeys\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getCommitteeValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpochInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentStakeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentStakeVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEligibleValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getEpochInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextCommitteeSize\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPendingVersionChanges\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"getValidatorsInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"increaseNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"isDelegated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"isRetired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"issuance\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issuanceWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrateValidatorSets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"}],\"name\":\"requestStakeVersionChange\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newSize\",\"type\":\"uint16\"}],\"name\":\"setNextCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"required\",\"type\":\"bool\"}],\"name\":\"setTopUpAuthorityRequired\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"name\":\"setValidatorRegion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proofOfPossession\",\"type\":\"tuple\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"stakeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"topUpAuthorityRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"topUpSlashedStake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"undistributedIssuance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"acceptRewardShortfall\",\"type\":\"bool\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"upgradeStakeVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"versionChangeRequests\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"requestEpoch\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"funder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"escrow\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Telcoin AssociationHuwonk\",\"details\":\"This contract should be deployed to a predefined system address for use with system calls\",\"errors\":{\"AlreadyDefined(address)\":[{\"params\":{\"validatorAddress\":\"The address that was already defined\"}}],\"BlsPubkeyNotFound(address)\":[{\"details\":\"Covers both the zero-address case and addresses that have never staked (or have been burned/retired and had their pubkey state cleared)\",\"params\":{\"validatorAddress\":\"The address whose BLS pubkey lookup failed\"}}],\"CommitteeRequirement(address)\":[{\"params\":{\"validatorAddress\":\"The address at which the sort invariant was violated\"}}],\"DelegationExpired(uint256)\":[{\"params\":{\"deadline\":\"The unix timestamp past which the signature is no longer valid\"}}],\"ERC721EnumerableForbiddenBatchMint()\":[{\"details\":\"Batch mint is not allowed.\"}],\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721OutOfBoundsIndex(address,uint256)\":[{\"details\":\"An `owner`'s token query was out of bounds for `index`. NOTE: The owner being `address(0)` indicates a global out of bounds index.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"IneligibleUnstake((address,uint32,uint32,uint8,bool,uint8,uint8))\":[{\"details\":\"Validators may unstake only if Staked (pre-activation) or Exited with at least one full epoch elapsed\",\"params\":{\"validator\":\"The full ValidatorInfo of the ineligible validator\"}}],\"InsufficientRewards(uint256)\":[{\"params\":{\"withdrawAmount\":\"The reward amount that was insufficient\"}}],\"InvalidCommitteeSize(uint256,uint256)\":[{\"params\":{\"minCommitteeSize\":\"The minimum acceptable committee size\",\"providedCommitteeSize\":\"The committee size that was rejected\"}}],\"InvalidDeficitAmount(address,uint256,uint8)\":[{\"params\":{\"stakeVersion\":\"The validator's stake version defining the required stake amount\",\"validatorAddress\":\"The validator being topped up\",\"value\":\"The `msg.value` that was provided\"}}],\"InvalidDuration(uint32)\":[{\"params\":{\"duration\":\"The invalid duration value\"}}],\"InvalidEpoch(uint32)\":[{\"params\":{\"epoch\":\"The epoch number that was rejected\"}}],\"InvalidProofOfPossession((bytes))\":[{\"params\":{\"proof\":\"The proof of possession that failed verification\"}}],\"InvalidStakeAmount(uint256)\":[{\"params\":{\"stakeAmount\":\"The invalid stake value that was provided\"}}],\"InvalidStakeVersion(uint8,uint8)\":[{\"details\":\"Target version must be strictly greater than current and not exceed global `stakeVersion`\",\"params\":{\"currentVersion\":\"The validator's current stake version\",\"targetVersion\":\"The requested target version that was rejected\"}}],\"InvalidStatus(uint8)\":[{\"params\":{\"status\":\"The validator's actual status that caused the revert\"}}],\"InvalidTokenId(uint256)\":[{\"params\":{\"tokenId\":\"The invalid token ID\"}}],\"NotRecipient(address)\":[{\"params\":{\"recipient\":\"The expected reward recipient (delegator if delegated, else the validator)\"}}],\"NotValidator(address)\":[{\"params\":{\"validatorAddress\":\"The validator whose signature was invalid\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"Reentrancy()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"StakeNotSlashed(address,uint256,uint8)\":[{\"params\":{\"balance\":\"The validator's current outstanding balance\",\"stakeVersion\":\"The validator's stake version defining the required stake amount\",\"validatorAddress\":\"The validator that is not slashed\"}}],\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"DelegationNonceIncreased(address,uint64)\":{\"params\":{\"nonce\":\"The new delegation nonce\",\"validatorAddress\":\"The validator whose delegation nonce advanced\"}},\"NewEpoch((address[],uint256,uint64,uint32,uint32,uint8))\":{\"params\":{\"epoch\":\"The new epoch's full configuration including committee and block height\"}},\"NextCommitteeSizeUpdated(uint16,uint16,uint256)\":{\"params\":{\"newSize\":\"The updated nextCommitteeSize value\",\"numActiveValidators\":\"The current count of committee-eligible validators\",\"oldSize\":\"The previous nextCommitteeSize value\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RefundClaimed(address,uint256)\":{\"params\":{\"amount\":\"The amount transferred\",\"recipient\":\"The address that received its credit\"}},\"RefundQueued(address,uint256)\":{\"params\":{\"amount\":\"The amount added to the recipient's credit\",\"recipient\":\"The address holding the claimable credit\"}},\"RewardsClaimed(address,uint256)\":{\"params\":{\"claimant\":\"The address that received the funds (validator or its delegator)\",\"rewards\":\"The amount of TEL claimed\"}},\"StakeVersionAuthored(uint8,uint256,uint256,uint256,uint32)\":{\"params\":{\"epochDuration\":\"The version's epoch duration\",\"epochIssuance\":\"The version's total TEL distributed as rewards per epoch\",\"minWithdrawAmount\":\"The version's minimum reward threshold for claims\",\"stakeAmount\":\"The version's required native TEL stake per validator\",\"version\":\"The newly authored version index (the new global `stakeVersion`)\"}},\"StakeVersionChangeCanceled(address)\":{\"params\":{\"validatorAddress\":\"The validator whose pending change was cancelled\"}},\"StakeVersionChangeRequested(address,uint8,uint32,uint256)\":{\"params\":{\"escrow\":\"The exact stake deficit escrowed for an increase; zero otherwise\",\"requestEpoch\":\"The epoch in which the request was recorded\",\"targetVersion\":\"The version to adopt at the boundary flip\",\"validatorAddress\":\"The validator whose version change was requested\"}},\"TopUpAuthorityRequirementUpdated(bool)\":{\"params\":{\"required\":\"The new value of the `topUpAuthorityRequired` flag\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"ValidatorActivated((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The newly activated validator's info\"}},\"ValidatorExited((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The exited validator's info\"}},\"ValidatorPendingActivation((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"details\":\"Activation completes automatically at the start of the next epoch\",\"params\":{\"validator\":\"The validator entering PendingActivation status\"}},\"ValidatorPendingExit((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"details\":\"Exit completes when the validator is no longer required in any future committee\",\"params\":{\"validator\":\"The validator entering PendingExit status\"}},\"ValidatorRegionUpdated(address,uint8)\":{\"params\":{\"region\":\"The new geographic region identifier\",\"validatorAddress\":\"The validator whose region was updated\"}},\"ValidatorRetired((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The retired validator's info\"}},\"ValidatorSetsMigrated(uint256)\":{\"params\":{\"eligibleValidatorCount\":\"The committee-eligible count after the back-fill\"}},\"ValidatorSlashed((address,uint256))\":{\"details\":\"If the slash reduces the balance to zero, the validator is forcibly ejected and retired\",\"params\":{\"slash\":\"The slash details including validator address and penalty amount\"}},\"ValidatorStakeToppedUp(address,uint256)\":{\"params\":{\"amount\":\"The deficit that was provided and consolidated on the Issuance contract\",\"validatorAddress\":\"The validator whose stake was topped up\"}},\"ValidatorStakeVersionUpgraded(address,uint8,uint8,uint256,uint256)\":{\"params\":{\"newStakeAmount\":\"The stakeAmount associated with the new version\",\"newVersion\":\"The validator's new stake version\",\"oldStakeAmount\":\"The stakeAmount associated with the old version\",\"oldVersion\":\"The validator's previous stake version\",\"validatorAddress\":\"The validator whose stake version was upgraded\"}},\"ValidatorStaked((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The newly staked validator's info\"}}},\"kind\":\"dev\",\"methods\":{\"activate()\":{\"details\":\"Self-activation function for validators, gaining `PendingActivation` status and setting next epoch as activation epoch to ensure rewards eligibility only after completing a full epoch\"},\"allocateIssuance()\":{\"details\":\"Permissioned function to allocate TEL for epoch issuance, ie consensus block rewards\"},\"applyIncentives((address,uint256)[])\":{\"details\":\"First boundary system call in the closing block: runs before `applySlashes` so weights reflect pre-slash collateral, and before `concludeEpoch` so weights reflect the versions active during the closing epoch. Entries with sentinel addresses (token ids 0 and type(uint160).max) or retired validators are skipped rather than reverting, so a malformed entry cannot stall the boundary. Issuance distribution is not yet enabled during the pilot; the protocol passes an empty array\"},\"applySlashes((address,uint256)[])\":{\"details\":\"Second boundary system call in the closing block: MUST run before `concludeEpoch` so slashes land on the full old-version collateral ahead of the version-queue settlement, and so the protocol's post-slash committee reads see any ejections. Entries with sentinel addresses or retired validators are skipped rather than reverting. Slashing is not yet enabled during the pilot; the protocol passes an empty array\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"beginExit()\":{\"details\":\"Issues an exit request for a validator to be retired from the `Active` validator set\"},\"burn(address)\":{\"details\":\"In the case of malicious or erroneous node operator behavior, governance can use this function to burn a validator's `ConsensusNFT` and immediately eject from consensus committees if applicableIntended for sparing use; only reverts if burning results in empty committee\",\"params\":{\"from\":\"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`\"}},\"cancelStakeVersionChange(address)\":{\"details\":\"Withdraws a pending stake version change without settling it, returning any escrow to its funder\",\"params\":{\"validatorAddress\":\"The validator whose pending change should be cancelled\"}},\"claimRefund()\":{\"details\":\"Transfers the caller's accumulated refund credit\"},\"claimStakeRewards(address)\":{\"details\":\"Used by rewardees to claim staking rewards\"},\"concludeEpoch(address[])\":{\"details\":\"The protocol sequences the closing block as `applyIncentives`, then `applySlashes`, then this call. That ordering is a security invariant: it lets the protocol assemble `newCommittee` and read `nextCommitteeSize` after slash-to-zero ejections have landed (so this call's committee checks cannot revert against a stale pre-slash view, and an ejected validator is never seated in a future committee), and it makes the version-queue settlement here read post-slash balances. Settlement refunds accrue as `claimRefund` credits rather than transfers, so this call performs no external calls beyond the trusted Issuance consolidation and its cost is storage-bounded regardless of recipient behavior.\",\"params\":{\"newCommittee\":\"The future validator committee for `$.currentEpoch + 3`\"}},\"constructor\":{\"details\":\"Stake for `initialValidators_` is allocated directly to the ConsensusRegistry balance and decremented directly from the TEL precompile within the protocol on the rust sideOnly governance delegation is enabled at genesis\",\"params\":{\"initialValidators_\":\"The initial validator set running Telcoin Network; these validators will comprise the voter committee for the first three epochs, ie `epochInfo[0:2]`\"}},\"delegateStake(bytes,(bytes),address,bytes,uint256)\":{\"details\":\"Accepts delegated stake from a non-validator caller authorized by a validator's EIP712 signature\",\"params\":{\"deadline\":\"Unix timestamp past which `validatorSig` is rejected (ignored for governance calls)\"}},\"delegationDigest(bytes,address,address,uint256)\":{\"params\":{\"deadline\":\"Unix timestamp past which the produced signature must be rejected\"},\"returns\":{\"_0\":\"_ EIP-712 typed struct hash used to enable delegated proof of stake\"}},\"eip712Domain()\":{\"details\":\"See: https://eips.ethereum.org/EIPS/eip-5267\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"getBalanceBreakdown(address)\":{\"details\":\"Returns staking information for the given address\"},\"getBlsPubkey(address)\":{\"details\":\"Fetches the BLS pubkey for a given validator address\"},\"getCommitteeBlsPubkeys(uint32)\":{\"details\":\"Fetches the BLS pubkeys for the committee of a given epoch\"},\"getCommitteeValidators(uint32)\":{\"details\":\"Fetches the committee for a given epoch\"},\"getCurrentEpoch()\":{\"details\":\"Returns the current epoch\"},\"getCurrentEpochInfo()\":{\"details\":\"Returns the current epoch's committee and block height\"},\"getCurrentStakeConfig()\":{\"details\":\"Returns the latest authored stake configuration, which becomes active at the next epoch start\"},\"getCurrentStakeVersion()\":{\"details\":\"Returns the stake version active for the current epoch, ie the version stamped into the epoch's info at its start\"},\"getEpochInfo(uint32)\":{\"details\":\"Returns information about the provided epoch. Only four latest & two future epochs are stored\"},\"getRewards(address)\":{\"details\":\"Fetches the claimable rewards accrued for a given validator address\",\"returns\":{\"_0\":\"_ The validator's claimable rewards, not including the validator's stake\"}},\"getValidator(address)\":{\"details\":\"Fetches the `ValidatorInfo` for a given `validatorAddress == ConsensusNFT tokenId`\"},\"getValidators(uint8)\":{\"details\":\"Returns the addresses of validators in exactly the provided status's set, in the set's current order. Reverts on `Undefined` and `Any` (neither maintains a set).\"},\"getValidatorsInfo(uint8)\":{\"details\":\"Like `getValidators`, but returns the full `ValidatorInfo` for each validator in the set.\"},\"increaseNonce()\":{\"details\":\"Caller must hold a ConsensusNFT; lets a validator revoke a delegation it authorized but no longer wants honored\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"isDelegated(address)\":{\"details\":\"Returns whether a validator's stake was delegated (ie has a delegator)\"},\"isRetired(address)\":{\"details\":\"Returns whether a validator is exited && unstaked, ie \\\"retired\\\"\"},\"isValidator(bytes)\":{\"details\":\"Check if a BLS public key corresponds to an active validator\",\"params\":{\"blsPubkey\":\"The compressed 96-byte BLS public key to check\"},\"returns\":{\"_0\":\"bool True if the validator exists and is not retired, false otherwise\"}},\"issuanceWithdrawal(uint256)\":{\"details\":\"Permissioned function to withdraw TEL from the Issuance contract to the caller\",\"params\":{\"amount\":\"The amount of TEL to withdraw from the Issuance contract\"}},\"migrateValidatorSets()\":{\"details\":\"The storage layout is a clean append (the sets were appended after the pre-existing variables), so `validators[*]` and the ConsensusNFTs survive the code swap untouched; only `validatorSets` / `eligibleValidatorCount` start empty and must be rebuilt before the new read paths (`getValidators` / `getValidatorsInfo` / `concludeEpoch`) work. Walks the ConsensusNFT enumeration and re-derives each set from `currentStatus` (the preserved source of truth), mirroring `_setStatus`: retired, `Undefined`, and `Any` validators carry no set and are skipped. Idempotent - set adds dedupe and the count is recomputed from scratch - so a redundant call (or a call against a freshly seeded genesis) is a no-op. System-gated so the protocol invokes it once during the fork that swaps in this implementation.\"},\"mint(address)\":{\"details\":\"The StakeManager's ERC721 ledger serves a permissioning role over validators, requiring Telcoin governance to approve each node operator and manually issue them a `ConsensusNFT`\",\"params\":{\"to\":\"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`\"}},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"pause()\":{\"details\":\"Emergency function to pause validator and stake management\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"requestStakeVersionChange(address,uint8)\":{\"details\":\"Requests a stake version change for a validator; callable by the validator or its delegator. Only callable for validators with status Staked, PendingActivation, or Active.\",\"params\":{\"targetVersion\":\"The version to adopt (must be strictly greater than current and not exceed the latest authored version)\",\"validatorAddress\":\"The validator whose stake version should change\"}},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setNextCommitteeSize(uint16)\":{\"details\":\"This is managed off-chain and read by the protocol to shuffle n-validators for `concludeEpoch` call.\"},\"setTopUpAuthorityRequired(bool)\":{\"details\":\"Only callable by governance (owner)\"},\"setValidatorRegion(address,uint8)\":{\"params\":{\"region\":\"The GSMA region identifier (uint8; 0=unspecified, 1-8=GSMA regions)\",\"validatorAddress\":\"The address of the validator to update\"}},\"stake(bytes,(bytes))\":{\"details\":\"Accepts the native TEL stake amount from the calling validator, enabling later self-activation\"},\"stakeConfig(uint8)\":{\"details\":\"Returns the queried stake configuration\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenByIndex(uint256)\":{\"details\":\"See {IERC721Enumerable-tokenByIndex}.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"See {IERC721Enumerable-tokenOfOwnerByIndex}.\"},\"topUpSlashedStake(address)\":{\"details\":\"`msg.value` must equal the exact deficit; it is consolidated on the Issuance contract since this contract retains the full stake-backed native TEL when slashes are appliedCallable by governance at any time; by the validator or its delegator only while `topUpAuthorityRequired` is false\",\"params\":{\"validatorAddress\":\"The slashed validator to top up; must be `Staked`, `PendingActivation`, or `Active`\"}},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unpause()\":{\"details\":\"Emergency function to unpause validator and stake management\"},\"unstake(address,bool)\":{\"details\":\"Returns previously staked funds in addition to accrued rewards, if any, to the staker\",\"params\":{\"acceptRewardShortfall\":\"When true, caps the rewards payout at the Issuance contract's available balance and permanently forfeits only the shortfall, so an underfunded reward pool can never block a stake withdrawal; identical to a normal unstake whenever Issuance can cover the rewards\"}},\"upgradeStakeVersion((uint256,uint256,uint256,uint32))\":{\"details\":\"Permissioned function to upgrade stake, withdrawal, and consensus block reward configurations\"}},\"stateVariables\":{\"PENDING_EPOCH\":{\"details\":\"Signals a validator's pending status until activation/exit to correctly apply incentives\"},\"POP_INTENT_PREFIX\":{\"details\":\"The serialized telcoin proof-of-possession intent prefix (`scope=0, version=0, app=0`), which domain-separates PoP messages from other BLS signatures. Mirrors `Intent::telcoin(IntentScope::ProofOfPossession)` in tn-types; the off-chain `pop_message_layout_is_onchain_constructible` test pins it to `0x000000`.\"},\"REFUND_GAS_LIMIT\":{\"details\":\"Gas forwarded with settlement pushes initiated inside `concludeEpoch`. Covers an EOA receive or a multisig fallback-handler dispatch while bounding what a hostile recipient can consume inside the system call; failed pushes fall back to a `claimRefund` credit.\"},\"STAKE_DECREASE_DELAY_EPOCHS\":{\"details\":\"Boundaries a stake-decreasing version change must age before settling. The closing boundary's slashes always land before settlement regardless, so this covers only slashes whose detection lags the offense, by up to this many epochs. Must track the slashing pipeline's worst-case detection latency when programmatic slashing ships.\"},\"_COMMITTEE_TSET\":{\"details\":\"Namespace for the per-epoch transient committee-membership set (see `_markCommitteeMembers`)\"},\"claimableRefunds\":{\"details\":\"Refund credits keyed by recipient, detached from the validator lifecycle: escrow returns and boundary refunds that could not be pushed accumulate here until `claimRefund`\"},\"eligibleValidatorCount\":{\"details\":\"Cached size of the committee-eligible union `{ PendingActivation, Active, PendingExit }`, kept in sync by `_setStatus` so the hot count path (`concludeEpoch` et al.) stays a single SLOAD rather than three set-length reads. Invariant-tested against the eligible set sizes.\"},\"pendingVersionChanges\":{\"details\":\"Queue of in-service stake version changes, settled automatically inside `concludeEpoch`. One entry per validator; `versionChangeRequests[addr].targetVersion == 0` means none pending. Appended at the storage tail: this contract's variables follow all inherited ones in the flattened layout, so growth here preserves every existing slot for in-place upgrades.\"},\"validatorSets\":{\"details\":\"Per-status index of validators, keyed by `ValidatorStatus`. `_setStatus` is the single point that mutates membership, keeping each set in lockstep with `validators[addr].currentStatus`. Only real statuses get members; `Undefined` and `Any` never do. Retiring removes a validator from its set (it should not appear in any status query, exactly as the old scan skipped `isRetired`), but its `validators[addr]` record is retained as a tombstone (`isRetired = true`) that blocks re-joining. Replaces the old O(n) `tokenByIndex` scan: per-status queries are now O(set).\"},\"versionChangeRequests\":{\"details\":\"The queue entries backing `pendingVersionChanges` membership\"}},\"title\":\"ConsensusRegistry\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyDefined(address)\":[{\"notice\":\"Thrown when minting a ConsensusNFT for an address that already holds one or is retired\"}],\"BlsPubkeyNotFound(address)\":[{\"notice\":\"Thrown when no BLS public key is stored for the queried validator address\"}],\"CommitteeRequirement(address)\":[{\"notice\":\"Thrown when the committee array is not sorted in strictly ascending address order\"}],\"DelegationExpired(uint256)\":[{\"notice\":\"Thrown when a delegation signature is submitted after its signed deadline\"}],\"DuplicateBLSPubkey()\":[{\"notice\":\"Thrown when a BLS public key has already been registered to another validator\"}],\"GenesisArityMismatch()\":[{\"notice\":\"Thrown during genesis when initialValidators is empty or its length mismatches proofsOfPossession\"}],\"IneligibleUnstake((address,uint32,uint32,uint8,bool,uint8,uint8))\":[{\"notice\":\"Thrown when a validator attempts to unstake but is ineligible\"}],\"InsufficientRewards(uint256)\":[{\"notice\":\"Thrown when claimable rewards are zero or below the version's minWithdrawAmount\"}],\"InvalidBLSPubkey()\":[{\"notice\":\"Thrown when a registered BLS public key is not a well-formed 96-byte compressed G2 point\"}],\"InvalidCommitteeSize(uint256,uint256)\":[{\"notice\":\"Thrown when a committee size is zero or exceeds the number of eligible validators\"}],\"InvalidDeficitAmount(address,uint256,uint8)\":[{\"notice\":\"Thrown when a top-up's `msg.value` does not exactly match the validator's stake deficit\"}],\"InvalidDuration(uint32)\":[{\"notice\":\"Thrown in upgradeStakeVersion when the new epoch duration is zero\"}],\"InvalidEpoch(uint32)\":[{\"notice\":\"Thrown when a queried epoch is outside the stored range or genesis epoch values are nonzero\"}],\"InvalidProofOfPossession((bytes))\":[{\"notice\":\"Thrown when BLS proof-of-possession signature verification fails\"}],\"InvalidStakeAmount(uint256)\":[{\"notice\":\"Thrown when msg.value does not match the required stake amount for the operation\"}],\"InvalidStakeVersion(uint8,uint8)\":[{\"notice\":\"Thrown when a stake version upgrade targets an invalid version\"}],\"InvalidStatus(uint8)\":[{\"notice\":\"Thrown when a validator's current status does not match the required status for the operation\"}],\"InvalidSupply()\":[{\"notice\":\"Thrown when unstaking would reduce ConsensusNFT totalSupply to zero\"}],\"InvalidTokenId(uint256)\":[{\"notice\":\"Thrown when a token ID is zero, exceeds type(uint160).max, or does not exist\"}],\"InvalidValidatorAddress()\":[{\"notice\":\"Thrown during genesis initialization when a validator has address(0)\"}],\"IssuanceTransferFailed()\":[{\"notice\":\"Thrown when a low-level ETH transfer to the Issuance contract fails\"}],\"LowLevelCallFailure(bytes)\":[{\"notice\":\"Thrown when the BLS precompile staticcall fails or returns an unexpected payload\"}],\"NoClaimableRefund()\":[{\"notice\":\"Thrown when `claimRefund` is called by an address with no claimable refund credit\"}],\"NoPendingVersionChange()\":[{\"notice\":\"Thrown when cancelling a stake version change for a validator with none pending\"}],\"NotRecipient(address)\":[{\"notice\":\"Thrown when the caller is neither the validator nor its delegator\"}],\"NotTransferable()\":[{\"notice\":\"Thrown on transfer, approve, or setApprovalForAll because ConsensusNFTs are soulbound\"}],\"NotValidator(address)\":[{\"notice\":\"Thrown when a delegated-stake EIP-712 signature fails verification\"}],\"RequiresConsensusNFT()\":[{\"notice\":\"Thrown when the provided address does not own the expected ConsensusNFT\"}],\"StakeNotSlashed(address,uint256,uint8)\":[{\"notice\":\"Thrown on top-up attempts for a validator whose balance is not below its stake amount\"}],\"TopUpAuthorityRequired()\":[{\"notice\":\"Thrown when a top-up is attempted by a non-governance caller while top-ups are restricted to the governance top-up authority\"}]},\"events\":{\"DelegationNonceIncreased(address,uint64)\":{\"notice\":\"Emitted when a validator invalidates outstanding delegation signatures by bumping its nonce\"},\"NewEpoch((address[],uint256,uint64,uint32,uint32,uint8))\":{\"notice\":\"Emitted at epoch conclusion when a new epoch begins\"},\"NextCommitteeSizeUpdated(uint16,uint16,uint256)\":{\"notice\":\"Emitted when governance or the protocol adjusts the next epoch's committee size\"},\"RefundClaimed(address,uint256)\":{\"notice\":\"Emitted when an accumulated refund credit is claimed\"},\"RefundQueued(address,uint256)\":{\"notice\":\"Emitted when a refund or escrow return is credited for a later `claimRefund` pull: every boundary settlement refund, escrow returns on retirement, and user-initiated escrow returns whose push failed\"},\"RewardsClaimed(address,uint256)\":{\"notice\":\"Emitted when a stake originator claims accrued rewards or unstakes\"},\"StakeVersionAuthored(uint8,uint256,uint256,uint256,uint32)\":{\"notice\":\"Emitted when governance authors a new global stake-config version, which validators may subsequently adopt via per-validator version changes\"},\"StakeVersionChangeCanceled(address)\":{\"notice\":\"Emitted when a pending stake version change is withdrawn before settlement\"},\"StakeVersionChangeRequested(address,uint8,uint32,uint256)\":{\"notice\":\"Emitted when an in-service validator requests a stake version change, queued for automatic settlement inside `concludeEpoch`\"},\"TopUpAuthorityRequirementUpdated(bool)\":{\"notice\":\"Emitted when governance toggles whether `topUpSlashedStake` is restricted to the governance top-up authority\"},\"ValidatorActivated((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator's activation resolves at epoch conclusion or at genesis\"},\"ValidatorExited((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a pending-exit validator is removed from the active set by the protocol\"},\"ValidatorPendingActivation((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a staked validator self-activates, entering the activation queue\"},\"ValidatorPendingExit((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when an active validator requests exit, entering the exit queue\"},\"ValidatorRegionUpdated(address,uint8)\":{\"notice\":\"Emitted when governance updates a validator's geographic region assignment\"},\"ValidatorRetired((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator is permanently retired and its address can never rejoin\"},\"ValidatorSetsMigrated(uint256)\":{\"notice\":\"Emitted once when `migrateValidatorSets` back-fills the per-status sets during an in-place upgrade from a deployment that predates them\"},\"ValidatorSlashed((address,uint256))\":{\"notice\":\"Emitted for each slash applied to a validator's outstanding balance\"},\"ValidatorStakeToppedUp(address,uint256)\":{\"notice\":\"Emitted when a slashed validator's balance is restored to its version's full stake amount\"},\"ValidatorStakeVersionUpgraded(address,uint8,uint8,uint256,uint256)\":{\"notice\":\"Emitted when a validator's stake version is upgraded in-place\"},\"ValidatorStaked((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator first stakes, entering the Staked lifecycle state\"}},\"kind\":\"user\",\"methods\":{\"activate()\":{\"notice\":\"Caller must own a ConsensusNFT and be `Staked` status, ie staked or delegated\"},\"allocateIssuance()\":{\"notice\":\"Allocated TEL leaves the Issuance contract only as staking issuance rewards or through a governance withdrawal via `issuanceWithdrawal`Only governance may allocate TEL in this manner\"},\"applyIncentives((address,uint256)[])\":{\"notice\":\"Distributes the closing epoch's issuance to stake originators, weighted by initial stake and consensus header count\"},\"applySlashes((address,uint256)[])\":{\"notice\":\"Applies the closing epoch's penalties to outstanding balances, ejecting validators slashed to zero\"},\"approve(address,uint256)\":{\"notice\":\"Wouldn't do anything because transfers are disabled but explicitly disallow anyway\"},\"beginExit()\":{\"notice\":\"Reverts if the exit queue is full, ie if active validator count would drop too low\"},\"cancelStakeVersionChange(address)\":{\"notice\":\"Callable by the validator or its delegator\"},\"claimRefund()\":{\"notice\":\"Credits accrue from boundary settlement refunds, escrow returns on retirement, and user-initiated escrow returns whose push failed; they are detached from the validator lifecycle and survive burns and retirement\"},\"concludeEpoch(address[])\":{\"notice\":\"The final epoch-boundary system call: settles queued stake version changes and rotates the epoch, seating the provided future committee\"},\"delegateStake(bytes,(bytes),address,bytes,uint256)\":{\"notice\":\"`validatorAddress` must be a validator already in possession of a `ConsensusNFT`Ensuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks\"},\"delegationDigest(bytes,address,address,uint256)\":{\"notice\":\"Returns the delegation digest that a validator should sign to accept a delegation\"},\"getBlsPubkey(address)\":{\"notice\":\"Reverts with `BlsPubkeyNotFound` if no pubkey is stored for `validatorAddress` (including the zero-address case)\"},\"getCurrentStakeConfig()\":{\"notice\":\"Not necessarily the epoch-active config: during any epoch in which governance has authored a new version, this differs from `stakeConfig(getCurrentStakeVersion())`\"},\"getCurrentStakeVersion()\":{\"notice\":\"Differs from `getCurrentStakeConfig` during any epoch in which governance has authored a new version, since newly authored versions activate at the next epoch start\"},\"getEligibleValidatorCount()\":{\"notice\":\"Number of committee-eligible validators: the unretired `{ PendingActivation, Active, PendingExit }` set. Derived O(1) from the per-status set sizes.\"},\"getEpochInfo(uint32)\":{\"notice\":\"For future epochs, the config fields (issuance, duration, stake version) are a projection from the latest authored configuration and can change until the epoch is stamped at its start; `blockHeight` is always 0 as it is not yet known\"},\"getNextCommitteeSize()\":{\"notice\":\"Returns the next committee size\"},\"getPendingVersionChanges()\":{\"notice\":\"Returns the validators with a queued stake version change, in set order\"},\"getValidators(uint8)\":{\"notice\":\"Per-status only: the `Active` query no longer folds in `PendingActivation`/`PendingExit`. The committee-eligible pool is the union of the `{ PendingActivation, Active, PendingExit }` queries; the protocol unions those three calls off-chain. `getEligibleValidatorCount()` returns that union's size on-chain.\"},\"increaseNonce()\":{\"notice\":\"Invalidates any outstanding delegation signature for the caller by advancing its nonce\"},\"isRetired(address)\":{\"notice\":\"After retiring, a validator's `tokenId == validatorAddress` cannot be reused\"},\"issuanceWithdrawal(uint256)\":{\"notice\":\"Only governance may withdraw in this manner, eg to recover consolidated slash funds or to reduce a prior issuance allocation\"},\"migrateValidatorSets()\":{\"notice\":\"One-time back-fill of the per-status validator sets, the cached eligible count, and the BLS pubkey reverse index for an in-place upgrade from a deployment that predates them.\"},\"mint(address)\":{\"notice\":\"For each mintee, `tokenId == uint160(to)`Access-gated in ConsensusRegistry to its owner, which is a Telcoin governance address\"},\"pause()\":{\"notice\":\"Does not pause system callable or ConsensusNFT fns. Only accessible by `owner`\"},\"requestStakeVersionChange(address,uint8)\":{\"notice\":\"`Staked` validators settle immediately: they are not in service, are never members of a committee, and can already reclaim their full stake at any time via `unstake`.In-service (PendingActivation/Active) validators are queued instead: the change is applied automatically inside `concludeEpoch` at an epoch boundary, after that boundary's slashes have landed, so no request or settlement timing can move value ahead of a slash. Stake increases settle at the first boundary; stake decreases settle only once `STAKE_DECREASE_DELAY_EPOCHS` further boundaries have passed, covering slashes whose detection lags the offense by up to that many epochs.If the new version requires more stake, `msg.value` must equal the exact deficit; it is escrowed in the queue entry (not in the stake balance) until the boundary flip.If the new version requires less stake, no value moves at request time. At settlement the surplus above the new stake amount, computed from the balance as it stands post-slash, is credited to the reward recipient for `claimRefund` withdrawal; the slashed remainder of the surplus is consolidated on Issuance.A repeat request overwrites the pending entry, returning any prior escrow to its funder and re-stamping the request epoch.If a validator has been slashed and has accrued rewards, settling a lower `stakeAmount` may zero claimable rewards since rewards are derived as `balance - stakeAmount`. The recipient still receives the correct total ETH via the refund. Validators should claim rewards before requesting if they have both accrued rewards and pending slashes.\"},\"setApprovalForAll(address,bool)\":{\"notice\":\"Wouldn't do anything because transfers are disabled but explicitly disallow anyway\"},\"setNextCommitteeSize(uint16)\":{\"notice\":\"Set the internal value for the nextCommitteeSize.Reverts if the newSize is larger than the number of active/pending validators.\"},\"setTopUpAuthorityRequired(bool)\":{\"notice\":\"Toggles whether `topUpSlashedStake` is restricted to the governance top-up authority\"},\"setValidatorRegion(address,uint8)\":{\"notice\":\"Sets the GSMA region identifier for a validator. Only callable by governance (owner).\"},\"stake(bytes,(bytes))\":{\"notice\":\"Caller must already have been issued a `ConsensusNFT` by Telcoin governanceEnsuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks\"},\"tokenURI(uint256)\":{\"notice\":\"Read-only mechanism, not yet live\"},\"topUpAuthorityRequired()\":{\"notice\":\"When true, `topUpSlashedStake` is restricted to governance; when false, validators and their delegators may also restore their own slashed stake\"},\"topUpSlashedStake(address)\":{\"notice\":\"Restores a slashed validator's balance to its version's full stake amount\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Consensus NFTs are soulbound to validators and cannot be transferred unless burned\"},\"unpause()\":{\"notice\":\"Does not affect system callable or ConsensusNFT fns. Only accessible by `owner`\"},\"unstake(address,bool)\":{\"notice\":\"May be used to reverse validator onboarding pre-activation or permanently retire after full exitOnce unstaked and retired, validator addresses cannot be reused\"},\"upgradeStakeVersion((uint256,uint256,uint256,uint32))\":{\"notice\":\"The new version takes effect in the next epoch\"}},\"notice\":\"A Telcoin ContractThis contract manages consensus validator external keys, staking, and committees\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/ConsensusRegistry.sol\":\"ConsensusRegistry\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/=lib/v4-core/node_modules/@ensdomains/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":@uniswap/v4-core/=lib/v4-core/\",\":ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":hardhat/=lib/v4-core/node_modules/hardhat/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":permit2/=lib/v4-periphery/lib/permit2/\",\":safe-contracts/=lib/safe-contracts/\",\":solady/=lib/solady/src/\",\":solmate/=lib/v4-core/lib/solmate/\",\":v4-core/=lib/v4-core/src/\",\":v4-periphery/=lib/v4-periphery/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol\":{\"keccak256\":\"0x5191f783af281c75b7de0f1e3e36cdc6ac5cb2358d929584c4953fd02fa2b5eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3ca2689d95ba45e297e55c8f71112e3ccec701d0087cb5e1c6ecb1b9ce86f00\",\"dweb:/ipfs/QmNQ5xKxJpF9k7AahnmJYvg5XeGSYtRig2Lp2WHmWXyBze\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff\",\"dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0x40399695922383778f9f540a620bec475a2f8e0f08d41f0005682842e28a9855\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://746d295e403931aeb9d6065fd5a0871f43ab5459814a60623611e4b6641a09fd\",\"dweb:/ipfs/QmWrgT8YJrQ9FfD1o3YYArwo57e7MGdpFKuM74qJ4qE34E\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Base64.sol\":{\"keccak256\":\"0xbee2b819e1b4bf569ffc1b1b9d560b4abd6a589575f3093edaab9244de18a0c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e478c0e9bbf3eb8cd3b7784f9b397603e34747f9ffd16571ed1d89ce102de389\",\"dweb:/ipfs/QmZ6zXpwy5xRxx9RkodJmDZSUTeEqPQUanAC5TUoYqW2VR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x8447b57b63810fe2e367c09496a966f143ec0e825d71ddb9fce2506cff84b618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://996cb48f793bf151555045b37138e36b3cdb31d6bc6552d3149285260be00cfb\",\"dweb:/ipfs/QmcLaTTMNVbkMx58xhkp6GeFt4V3GtSyupZuaKG3vYW2Zc\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0x9303ef5a2beb555e52ce56598de205ce07ca8988fc67d073687c06cb8fc973d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8b2e48fb42844c25e6cb38e7cfa1d91dcdc054613fd10f608833dbc677acf889\",\"dweb:/ipfs/QmT4HQxbgpWA3fZnK4dY3eXHNCoyBvpvzNq5k7eSt5mR5t\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f\",\"dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz\"]},\"lib/solady/src/utils/EIP712.sol\":{\"keccak256\":\"0x53ccaa757944900e7423347c3c35ea5a905580f3f075452b8468a501a9c39839\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aa5688d98319fbeb5b3c46330a394e15a0f2c862d651415e183da4179b918351\",\"dweb:/ipfs/QmZZFrFWmUCFL1qkZDVm3oqrDkQfumYnnksF6cpPkAHdtJ\"]},\"lib/solady/src/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xdb28f318ec45197a6c7cc2abebed67d7cb8b965838ef962e3844423256a9ddb8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://873cd46b77a2aeb781e7a0d131e7299151323ed884c330101a51d0727e218d98\",\"dweb:/ipfs/QmddadCjyedztvdSgLZEyKWoRes2SqtpviSjhEbSNrkUoi\"]},\"lib/solady/src/utils/SignatureCheckerLib.sol\":{\"keccak256\":\"0x098c7eb88b3048f227b240e0e5bf1da4a8f7622b30f6d7c06416bfcab3225e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://50c2766f652916c5d6433665fb1c3b2f04c3d9292a35c12e0f8d7c71dd6438cb\",\"dweb:/ipfs/QmWTMwN2RDZUUPg7KkH1qFBjTSh84Zw8bbYwRBCQUtLN2h\"]},\"src/consensus/ConsensusRegistry.sol\":{\"keccak256\":\"0x6aca47012d3ef8384ffa48d266a6a9e7109f6678fb48e459bcc7c0872852d14b\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://445c5adae11f3485687860cf2fb952e13e308296bd8e7201164b05ad2b362742\",\"dweb:/ipfs/QmSSvvit4Fo93sR3YpJELRAQ2ykqycDRWfMg1n5CjdoAj5\"]},\"src/consensus/Issuance.sol\":{\"keccak256\":\"0xdbb33a3ff5e4afa3c5d107051647db33d86e95cd2686c0207fe8602f99a7d14a\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://082e686f08caf3840b309f72b8e480b4ba3d4b90c42c18fb831c1a4b7ecdd727\",\"dweb:/ipfs/QmT37vqjVGk1RsDc3BJCvVNYcLNuP9hTDK9vvsvykZHohG\"]},\"src/consensus/StakeManager.sol\":{\"keccak256\":\"0xcf5975cbdcd1c7ff43352999c09293d26c5e80f633a02776cb7e9d1975b8b2ad\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://7ebbcc772f6298a368d582aa51e156d067e3fe343df1241738a57d02bfca356b\",\"dweb:/ipfs/QmNWxhrKLe7qZc1Kt2WKZh2W4JddxLN87CpdUpS3bp1HHu\"]},\"src/consensus/SystemCallable.sol\":{\"keccak256\":\"0xed0e78873f3f574356c3bd6fcaa8f1869415aec576586530f74a599e3c767ead\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://30b23f67de5abff6a021ff3456fa596585c57a6d09562e2a3ef4cb719b673e28\",\"dweb:/ipfs/QmYRrBUKeSSEXBfrsw4arse3c9jCsuw3hHsHpjJeEqHNwS\"]},\"src/interfaces/IBlsG1.sol\":{\"keccak256\":\"0x950230ff0bed0ae8c0dbef2d22a24fb4114a00c23604619b9dccfd3cbe370ab0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://27432929c7726f7edb4b62981d0ca6bdb5bbada573a835f787556ff442b64c15\",\"dweb:/ipfs/QmSBLDrPL47intGub7yHRC4JRVSyYSW4dSnQMGFQKK7Z8E\"]},\"src/interfaces/IConsensusRegistry.sol\":{\"keccak256\":\"0xd21fdfe6b1f601a70dd9ea80802b6cb92d98a7a751058862544cc1ccf512a6f8\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://993174c548c1d8170e87fa3fe7e33368838492883f053ea17ee765b93ce00255\",\"dweb:/ipfs/QmbdvPt6DhckDw1zp4AznyUqP91hqm5ihyqFUagbJj1Au5\"]},\"src/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x4f3be7ccab5b7562434eea3517e40f6989f8af4f9f66ce1715ce4d418ba5a781\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://0ce0311f5e85dd88780991d1c8ac5d6a268c2f99d068f9199d6565b331c0fd9b\",\"dweb:/ipfs/QmdTJqgWA63FeRP1jFcyx9JpXUAhcJtDCDssr2aav6WPfT\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.35+commit.47b9dedd"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"genesisConfig_","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]},{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"initialValidators_","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]},{"internalType":"bytes[]","name":"blsPubkeys_","type":"bytes[]"},{"internalType":"struct IStakeManager.ProofOfPossession[]","name":"proofsOfPossession","type":"tuple[]","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"AlreadyDefined"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"BlsPubkeyNotFound"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"CommitteeRequirement"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"DelegationExpired"},{"inputs":[],"type":"error","name":"DuplicateBLSPubkey"},{"inputs":[],"type":"error","name":"ERC721EnumerableForbiddenBatchMint"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721IncorrectOwner"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721InsufficientApproval"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC721InvalidApprover"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"type":"error","name":"ERC721InvalidOperator"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721InvalidOwner"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC721InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC721InvalidSender"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721NonexistentToken"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"type":"error","name":"ERC721OutOfBoundsIndex"},{"inputs":[],"type":"error","name":"EnforcedPause"},{"inputs":[],"type":"error","name":"ExpectedPause"},{"inputs":[],"type":"error","name":"GenesisArityMismatch"},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}],"type":"error","name":"IneligibleUnstake"},{"inputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"type":"error","name":"InsufficientRewards"},{"inputs":[],"type":"error","name":"InvalidBLSPubkey"},{"inputs":[{"internalType":"uint256","name":"minCommitteeSize","type":"uint256"},{"internalType":"uint256","name":"providedCommitteeSize","type":"uint256"}],"type":"error","name":"InvalidCommitteeSize"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"type":"error","name":"InvalidDeficitAmount"},{"inputs":[{"internalType":"uint32","name":"duration","type":"uint32"}],"type":"error","name":"InvalidDuration"},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"type":"error","name":"InvalidEpoch"},{"inputs":[{"internalType":"struct IStakeManager.ProofOfPossession","name":"proof","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]}],"type":"error","name":"InvalidProofOfPossession"},{"inputs":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"}],"type":"error","name":"InvalidStakeAmount"},{"inputs":[{"internalType":"uint8","name":"currentVersion","type":"uint8"},{"internalType":"uint8","name":"targetVersion","type":"uint8"}],"type":"error","name":"InvalidStakeVersion"},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"type":"error","name":"InvalidStatus"},{"inputs":[],"type":"error","name":"InvalidSupply"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"InvalidTokenId"},{"inputs":[],"type":"error","name":"InvalidValidatorAddress"},{"inputs":[],"type":"error","name":"IssuanceTransferFailed"},{"inputs":[{"internalType":"bytes","name":"err","type":"bytes"}],"type":"error","name":"LowLevelCallFailure"},{"inputs":[],"type":"error","name":"NoClaimableRefund"},{"inputs":[],"type":"error","name":"NoPendingVersionChange"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"type":"error","name":"NotRecipient"},{"inputs":[],"type":"error","name":"NotTransferable"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"NotValidator"},{"inputs":[{"internalType":"address","name":"invalidCaller","type":"address"}],"type":"error","name":"OnlySystemCall"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"Reentrancy"},{"inputs":[],"type":"error","name":"RequiresConsensusNFT"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"type":"error","name":"StakeNotSlashed"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"StringsInsufficientHexLength"},{"inputs":[],"type":"error","name":"TopUpAuthorityRequired"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"approved","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"operator","type":"address","indexed":true},{"internalType":"bool","name":"approved","type":"bool","indexed":false}],"type":"event","name":"ApprovalForAll","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint64","name":"nonce","type":"uint64","indexed":false}],"type":"event","name":"DelegationNonceIncreased","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"epoch","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"indexed":false}],"type":"event","name":"NewEpoch","anonymous":false},{"inputs":[{"internalType":"uint16","name":"oldSize","type":"uint16","indexed":false},{"internalType":"uint16","name":"newSize","type":"uint16","indexed":false},{"internalType":"uint256","name":"numActiveValidators","type":"uint256","indexed":false}],"type":"event","name":"NextCommitteeSizeUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"RefundClaimed","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"RefundQueued","anonymous":false},{"inputs":[{"internalType":"address","name":"claimant","type":"address","indexed":true},{"internalType":"uint256","name":"rewards","type":"uint256","indexed":false}],"type":"event","name":"RewardsClaimed","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":true},{"internalType":"uint256","name":"stakeAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"epochIssuance","type":"uint256","indexed":false},{"internalType":"uint32","name":"epochDuration","type":"uint32","indexed":false}],"type":"event","name":"StakeVersionAuthored","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true}],"type":"event","name":"StakeVersionChangeCanceled","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"targetVersion","type":"uint8","indexed":false},{"internalType":"uint32","name":"requestEpoch","type":"uint32","indexed":false},{"internalType":"uint256","name":"escrow","type":"uint256","indexed":false}],"type":"event","name":"StakeVersionChangeRequested","anonymous":false},{"inputs":[{"internalType":"bool","name":"required","type":"bool","indexed":false}],"type":"event","name":"TopUpAuthorityRequirementUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorActivated","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorExited","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorPendingActivation","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorPendingExit","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"region","type":"uint8","indexed":false}],"type":"event","name":"ValidatorRegionUpdated","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorRetired","anonymous":false},{"inputs":[{"internalType":"uint256","name":"eligibleValidatorCount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorSetsMigrated","anonymous":false},{"inputs":[{"internalType":"struct Slash","name":"slash","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false}],"type":"event","name":"ValidatorSlashed","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorStakeToppedUp","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"oldVersion","type":"uint8","indexed":false},{"internalType":"uint8","name":"newVersion","type":"uint8","indexed":false},{"internalType":"uint256","name":"oldStakeAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"newStakeAmount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorStakeVersionUpgraded","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorStaked","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"SYSTEM_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"activate"},{"inputs":[],"stateMutability":"payable","type":"function","name":"allocateIssuance"},{"inputs":[{"internalType":"struct RewardInfo[]","name":"rewardInfos","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"consensusHeaderCount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"applyIncentives"},{"inputs":[{"internalType":"struct Slash[]","name":"slashes","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"applySlashes"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"beginExit"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"cancelStakeVersionChange"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"claimRefund"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"claimStakeRewards"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"claimableRefunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address[]","name":"newCommittee","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"concludeEpoch"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"struct IStakeManager.ProofOfPossession","name":"proofOfPossession","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"bytes","name":"validatorEIP712Signature","type":"bytes"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"stateMutability":"payable","type":"function","name":"delegateStake"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"address","name":"delegator","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"stateMutability":"view","type":"function","name":"delegationDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"epochInfo","outputs":[{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"futureEpochInfo","outputs":[{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getBalanceBreakdown","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getBlsPubkey","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getCommitteeBlsPubkeys","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getCommitteeValidators","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentEpoch","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentEpochInfo","outputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentStakeConfig","outputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentStakeVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEligibleValidatorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getEpochInfo","outputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextCommitteeSize","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPendingVersionChanges","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getValidator","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function","name":"getValidators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function","name":"getValidatorsInfo","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"increaseNonce"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"isDelegated","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"isRetired","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"issuance","outputs":[{"internalType":"address payable","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"issuanceWithdrawal"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"migrateValidatorSets"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint8","name":"targetVersion","type":"uint8"}],"stateMutability":"payable","type":"function","name":"requestStakeVersionChange"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setApprovalForAll"},{"inputs":[{"internalType":"uint16","name":"newSize","type":"uint16"}],"stateMutability":"nonpayable","type":"function","name":"setNextCommitteeSize"},{"inputs":[{"internalType":"bool","name":"required","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setTopUpAuthorityRequired"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint8","name":"region","type":"uint8"}],"stateMutability":"nonpayable","type":"function","name":"setValidatorRegion"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"struct IStakeManager.ProofOfPossession","name":"proofOfPossession","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"stake"},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8"}],"stateMutability":"view","type":"function","name":"stakeConfig","outputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"topUpAuthorityRequired","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"payable","type":"function","name":"topUpSlashedStake"},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"undistributedIssuance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"bool","name":"acceptRewardShortfall","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"unstake"},{"inputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"newConfig","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}],"stateMutability":"nonpayable","type":"function","name":"upgradeStakeVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"versionChangeRequests","outputs":[{"internalType":"uint8","name":"targetVersion","type":"uint8"},{"internalType":"uint32","name":"requestEpoch","type":"uint32"},{"internalType":"address","name":"funder","type":"address"},{"internalType":"uint256","name":"escrow","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"activate()":{"details":"Self-activation function for validators, gaining `PendingActivation` status and setting next epoch as activation epoch to ensure rewards eligibility only after completing a full epoch"},"allocateIssuance()":{"details":"Permissioned function to allocate TEL for epoch issuance, ie consensus block rewards"},"applyIncentives((address,uint256)[])":{"details":"First boundary system call in the closing block: runs before `applySlashes` so weights reflect pre-slash collateral, and before `concludeEpoch` so weights reflect the versions active during the closing epoch. Entries with sentinel addresses (token ids 0 and type(uint160).max) or retired validators are skipped rather than reverting, so a malformed entry cannot stall the boundary. Issuance distribution is not yet enabled during the pilot; the protocol passes an empty array"},"applySlashes((address,uint256)[])":{"details":"Second boundary system call in the closing block: MUST run before `concludeEpoch` so slashes land on the full old-version collateral ahead of the version-queue settlement, and so the protocol's post-slash committee reads see any ejections. Entries with sentinel addresses or retired validators are skipped rather than reverting. Slashing is not yet enabled during the pilot; the protocol passes an empty array"},"balanceOf(address)":{"details":"See {IERC721-balanceOf}."},"beginExit()":{"details":"Issues an exit request for a validator to be retired from the `Active` validator set"},"burn(address)":{"details":"In the case of malicious or erroneous node operator behavior, governance can use this function to burn a validator's `ConsensusNFT` and immediately eject from consensus committees if applicableIntended for sparing use; only reverts if burning results in empty committee","params":{"from":"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`"}},"cancelStakeVersionChange(address)":{"details":"Withdraws a pending stake version change without settling it, returning any escrow to its funder","params":{"validatorAddress":"The validator whose pending change should be cancelled"}},"claimRefund()":{"details":"Transfers the caller's accumulated refund credit"},"claimStakeRewards(address)":{"details":"Used by rewardees to claim staking rewards"},"concludeEpoch(address[])":{"details":"The protocol sequences the closing block as `applyIncentives`, then `applySlashes`, then this call. That ordering is a security invariant: it lets the protocol assemble `newCommittee` and read `nextCommitteeSize` after slash-to-zero ejections have landed (so this call's committee checks cannot revert against a stale pre-slash view, and an ejected validator is never seated in a future committee), and it makes the version-queue settlement here read post-slash balances. Settlement refunds accrue as `claimRefund` credits rather than transfers, so this call performs no external calls beyond the trusted Issuance consolidation and its cost is storage-bounded regardless of recipient behavior.","params":{"newCommittee":"The future validator committee for `$.currentEpoch + 3`"}},"constructor":{"details":"Stake for `initialValidators_` is allocated directly to the ConsensusRegistry balance and decremented directly from the TEL precompile within the protocol on the rust sideOnly governance delegation is enabled at genesis","params":{"initialValidators_":"The initial validator set running Telcoin Network; these validators will comprise the voter committee for the first three epochs, ie `epochInfo[0:2]`"}},"delegateStake(bytes,(bytes),address,bytes,uint256)":{"details":"Accepts delegated stake from a non-validator caller authorized by a validator's EIP712 signature","params":{"deadline":"Unix timestamp past which `validatorSig` is rejected (ignored for governance calls)"}},"delegationDigest(bytes,address,address,uint256)":{"params":{"deadline":"Unix timestamp past which the produced signature must be rejected"},"returns":{"_0":"_ EIP-712 typed struct hash used to enable delegated proof of stake"}},"eip712Domain()":{"details":"See: https://eips.ethereum.org/EIPS/eip-5267"},"getApproved(uint256)":{"details":"See {IERC721-getApproved}."},"getBalanceBreakdown(address)":{"details":"Returns staking information for the given address"},"getBlsPubkey(address)":{"details":"Fetches the BLS pubkey for a given validator address"},"getCommitteeBlsPubkeys(uint32)":{"details":"Fetches the BLS pubkeys for the committee of a given epoch"},"getCommitteeValidators(uint32)":{"details":"Fetches the committee for a given epoch"},"getCurrentEpoch()":{"details":"Returns the current epoch"},"getCurrentEpochInfo()":{"details":"Returns the current epoch's committee and block height"},"getCurrentStakeConfig()":{"details":"Returns the latest authored stake configuration, which becomes active at the next epoch start"},"getCurrentStakeVersion()":{"details":"Returns the stake version active for the current epoch, ie the version stamped into the epoch's info at its start"},"getEpochInfo(uint32)":{"details":"Returns information about the provided epoch. Only four latest & two future epochs are stored"},"getRewards(address)":{"details":"Fetches the claimable rewards accrued for a given validator address","returns":{"_0":"_ The validator's claimable rewards, not including the validator's stake"}},"getValidator(address)":{"details":"Fetches the `ValidatorInfo` for a given `validatorAddress == ConsensusNFT tokenId`"},"getValidators(uint8)":{"details":"Returns the addresses of validators in exactly the provided status's set, in the set's current order. Reverts on `Undefined` and `Any` (neither maintains a set)."},"getValidatorsInfo(uint8)":{"details":"Like `getValidators`, but returns the full `ValidatorInfo` for each validator in the set."},"increaseNonce()":{"details":"Caller must hold a ConsensusNFT; lets a validator revoke a delegation it authorized but no longer wants honored"},"isApprovedForAll(address,address)":{"details":"See {IERC721-isApprovedForAll}."},"isDelegated(address)":{"details":"Returns whether a validator's stake was delegated (ie has a delegator)"},"isRetired(address)":{"details":"Returns whether a validator is exited && unstaked, ie \"retired\""},"isValidator(bytes)":{"details":"Check if a BLS public key corresponds to an active validator","params":{"blsPubkey":"The compressed 96-byte BLS public key to check"},"returns":{"_0":"bool True if the validator exists and is not retired, false otherwise"}},"issuanceWithdrawal(uint256)":{"details":"Permissioned function to withdraw TEL from the Issuance contract to the caller","params":{"amount":"The amount of TEL to withdraw from the Issuance contract"}},"migrateValidatorSets()":{"details":"The storage layout is a clean append (the sets were appended after the pre-existing variables), so `validators[*]` and the ConsensusNFTs survive the code swap untouched; only `validatorSets` / `eligibleValidatorCount` start empty and must be rebuilt before the new read paths (`getValidators` / `getValidatorsInfo` / `concludeEpoch`) work. Walks the ConsensusNFT enumeration and re-derives each set from `currentStatus` (the preserved source of truth), mirroring `_setStatus`: retired, `Undefined`, and `Any` validators carry no set and are skipped. Idempotent - set adds dedupe and the count is recomputed from scratch - so a redundant call (or a call against a freshly seeded genesis) is a no-op. System-gated so the protocol invokes it once during the fork that swaps in this implementation."},"mint(address)":{"details":"The StakeManager's ERC721 ledger serves a permissioning role over validators, requiring Telcoin governance to approve each node operator and manually issue them a `ConsensusNFT`","params":{"to":"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`"}},"name()":{"details":"See {IERC721Metadata-name}."},"owner()":{"details":"Returns the address of the current owner."},"ownerOf(uint256)":{"details":"See {IERC721-ownerOf}."},"pause()":{"details":"Emergency function to pause validator and stake management"},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"requestStakeVersionChange(address,uint8)":{"details":"Requests a stake version change for a validator; callable by the validator or its delegator. Only callable for validators with status Staked, PendingActivation, or Active.","params":{"targetVersion":"The version to adopt (must be strictly greater than current and not exceed the latest authored version)","validatorAddress":"The validator whose stake version should change"}},"safeTransferFrom(address,address,uint256)":{"details":"See {IERC721-safeTransferFrom}."},"safeTransferFrom(address,address,uint256,bytes)":{"details":"See {IERC721-safeTransferFrom}."},"setNextCommitteeSize(uint16)":{"details":"This is managed off-chain and read by the protocol to shuffle n-validators for `concludeEpoch` call."},"setTopUpAuthorityRequired(bool)":{"details":"Only callable by governance (owner)"},"setValidatorRegion(address,uint8)":{"params":{"region":"The GSMA region identifier (uint8; 0=unspecified, 1-8=GSMA regions)","validatorAddress":"The address of the validator to update"}},"stake(bytes,(bytes))":{"details":"Accepts the native TEL stake amount from the calling validator, enabling later self-activation"},"stakeConfig(uint8)":{"details":"Returns the queried stake configuration"},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"symbol()":{"details":"See {IERC721Metadata-symbol}."},"tokenByIndex(uint256)":{"details":"See {IERC721Enumerable-tokenByIndex}."},"tokenOfOwnerByIndex(address,uint256)":{"details":"See {IERC721Enumerable-tokenOfOwnerByIndex}."},"topUpSlashedStake(address)":{"details":"`msg.value` must equal the exact deficit; it is consolidated on the Issuance contract since this contract retains the full stake-backed native TEL when slashes are appliedCallable by governance at any time; by the validator or its delegator only while `topUpAuthorityRequired` is false","params":{"validatorAddress":"The slashed validator to top up; must be `Staked`, `PendingActivation`, or `Active`"}},"totalSupply()":{"details":"See {IERC721Enumerable-totalSupply}."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"unpause()":{"details":"Emergency function to unpause validator and stake management"},"unstake(address,bool)":{"details":"Returns previously staked funds in addition to accrued rewards, if any, to the staker","params":{"acceptRewardShortfall":"When true, caps the rewards payout at the Issuance contract's available balance and permanently forfeits only the shortfall, so an underfunded reward pool can never block a stake withdrawal; identical to a normal unstake whenever Issuance can cover the rewards"}},"upgradeStakeVersion((uint256,uint256,uint256,uint32))":{"details":"Permissioned function to upgrade stake, withdrawal, and consensus block reward configurations"}},"version":1},"userdoc":{"kind":"user","methods":{"activate()":{"notice":"Caller must own a ConsensusNFT and be `Staked` status, ie staked or delegated"},"allocateIssuance()":{"notice":"Allocated TEL leaves the Issuance contract only as staking issuance rewards or through a governance withdrawal via `issuanceWithdrawal`Only governance may allocate TEL in this manner"},"applyIncentives((address,uint256)[])":{"notice":"Distributes the closing epoch's issuance to stake originators, weighted by initial stake and consensus header count"},"applySlashes((address,uint256)[])":{"notice":"Applies the closing epoch's penalties to outstanding balances, ejecting validators slashed to zero"},"approve(address,uint256)":{"notice":"Wouldn't do anything because transfers are disabled but explicitly disallow anyway"},"beginExit()":{"notice":"Reverts if the exit queue is full, ie if active validator count would drop too low"},"cancelStakeVersionChange(address)":{"notice":"Callable by the validator or its delegator"},"claimRefund()":{"notice":"Credits accrue from boundary settlement refunds, escrow returns on retirement, and user-initiated escrow returns whose push failed; they are detached from the validator lifecycle and survive burns and retirement"},"concludeEpoch(address[])":{"notice":"The final epoch-boundary system call: settles queued stake version changes and rotates the epoch, seating the provided future committee"},"delegateStake(bytes,(bytes),address,bytes,uint256)":{"notice":"`validatorAddress` must be a validator already in possession of a `ConsensusNFT`Ensuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks"},"delegationDigest(bytes,address,address,uint256)":{"notice":"Returns the delegation digest that a validator should sign to accept a delegation"},"getBlsPubkey(address)":{"notice":"Reverts with `BlsPubkeyNotFound` if no pubkey is stored for `validatorAddress` (including the zero-address case)"},"getCurrentStakeConfig()":{"notice":"Not necessarily the epoch-active config: during any epoch in which governance has authored a new version, this differs from `stakeConfig(getCurrentStakeVersion())`"},"getCurrentStakeVersion()":{"notice":"Differs from `getCurrentStakeConfig` during any epoch in which governance has authored a new version, since newly authored versions activate at the next epoch start"},"getEligibleValidatorCount()":{"notice":"Number of committee-eligible validators: the unretired `{ PendingActivation, Active, PendingExit }` set. Derived O(1) from the per-status set sizes."},"getEpochInfo(uint32)":{"notice":"For future epochs, the config fields (issuance, duration, stake version) are a projection from the latest authored configuration and can change until the epoch is stamped at its start; `blockHeight` is always 0 as it is not yet known"},"getNextCommitteeSize()":{"notice":"Returns the next committee size"},"getPendingVersionChanges()":{"notice":"Returns the validators with a queued stake version change, in set order"},"getValidators(uint8)":{"notice":"Per-status only: the `Active` query no longer folds in `PendingActivation`/`PendingExit`. The committee-eligible pool is the union of the `{ PendingActivation, Active, PendingExit }` queries; the protocol unions those three calls off-chain. `getEligibleValidatorCount()` returns that union's size on-chain."},"increaseNonce()":{"notice":"Invalidates any outstanding delegation signature for the caller by advancing its nonce"},"isRetired(address)":{"notice":"After retiring, a validator's `tokenId == validatorAddress` cannot be reused"},"issuanceWithdrawal(uint256)":{"notice":"Only governance may withdraw in this manner, eg to recover consolidated slash funds or to reduce a prior issuance allocation"},"migrateValidatorSets()":{"notice":"One-time back-fill of the per-status validator sets, the cached eligible count, and the BLS pubkey reverse index for an in-place upgrade from a deployment that predates them."},"mint(address)":{"notice":"For each mintee, `tokenId == uint160(to)`Access-gated in ConsensusRegistry to its owner, which is a Telcoin governance address"},"pause()":{"notice":"Does not pause system callable or ConsensusNFT fns. Only accessible by `owner`"},"requestStakeVersionChange(address,uint8)":{"notice":"`Staked` validators settle immediately: they are not in service, are never members of a committee, and can already reclaim their full stake at any time via `unstake`.In-service (PendingActivation/Active) validators are queued instead: the change is applied automatically inside `concludeEpoch` at an epoch boundary, after that boundary's slashes have landed, so no request or settlement timing can move value ahead of a slash. Stake increases settle at the first boundary; stake decreases settle only once `STAKE_DECREASE_DELAY_EPOCHS` further boundaries have passed, covering slashes whose detection lags the offense by up to that many epochs.If the new version requires more stake, `msg.value` must equal the exact deficit; it is escrowed in the queue entry (not in the stake balance) until the boundary flip.If the new version requires less stake, no value moves at request time. At settlement the surplus above the new stake amount, computed from the balance as it stands post-slash, is credited to the reward recipient for `claimRefund` withdrawal; the slashed remainder of the surplus is consolidated on Issuance.A repeat request overwrites the pending entry, returning any prior escrow to its funder and re-stamping the request epoch.If a validator has been slashed and has accrued rewards, settling a lower `stakeAmount` may zero claimable rewards since rewards are derived as `balance - stakeAmount`. The recipient still receives the correct total ETH via the refund. Validators should claim rewards before requesting if they have both accrued rewards and pending slashes."},"setApprovalForAll(address,bool)":{"notice":"Wouldn't do anything because transfers are disabled but explicitly disallow anyway"},"setNextCommitteeSize(uint16)":{"notice":"Set the internal value for the nextCommitteeSize.Reverts if the newSize is larger than the number of active/pending validators."},"setTopUpAuthorityRequired(bool)":{"notice":"Toggles whether `topUpSlashedStake` is restricted to the governance top-up authority"},"setValidatorRegion(address,uint8)":{"notice":"Sets the GSMA region identifier for a validator. Only callable by governance (owner)."},"stake(bytes,(bytes))":{"notice":"Caller must already have been issued a `ConsensusNFT` by Telcoin governanceEnsuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks"},"tokenURI(uint256)":{"notice":"Read-only mechanism, not yet live"},"topUpAuthorityRequired()":{"notice":"When true, `topUpSlashedStake` is restricted to governance; when false, validators and their delegators may also restore their own slashed stake"},"topUpSlashedStake(address)":{"notice":"Restores a slashed validator's balance to its version's full stake amount"},"transferFrom(address,address,uint256)":{"notice":"Consensus NFTs are soulbound to validators and cannot be transferred unless burned"},"unpause()":{"notice":"Does not affect system callable or ConsensusNFT fns. Only accessible by `owner`"},"unstake(address,bool)":{"notice":"May be used to reverse validator onboarding pre-activation or permanently retire after full exitOnce unstaked and retired, validator addresses cannot be reused"},"upgradeStakeVersion((uint256,uint256,uint256,uint32))":{"notice":"The new version takes effect in the next epoch"}},"version":1}},"settings":{"remappings":["@ensdomains/=lib/v4-core/node_modules/@ensdomains/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","@uniswap/v4-core/=lib/v4-core/","ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-gas-snapshot/=lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","hardhat/=lib/v4-core/node_modules/hardhat/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","permit2/=lib/v4-periphery/lib/permit2/","safe-contracts/=lib/safe-contracts/","solady/=lib/solady/src/","solmate/=lib/v4-core/lib/solmate/","v4-core/=lib/v4-core/src/","v4-periphery/=lib/v4-periphery/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/consensus/ConsensusRegistry.sol":"ConsensusRegistry"},"evmVersion":"prague","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b","urls":["bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b","dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol":{"keccak256":"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a","urls":["bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09","dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261","urls":["bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11","dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol":{"keccak256":"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d","urls":["bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34","dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol":{"keccak256":"0x5191f783af281c75b7de0f1e3e36cdc6ac5cb2358d929584c4953fd02fa2b5eb","urls":["bzz-raw://d3ca2689d95ba45e297e55c8f71112e3ccec701d0087cb5e1c6ecb1b9ce86f00","dweb:/ipfs/QmNQ5xKxJpF9k7AahnmJYvg5XeGSYtRig2Lp2WHmWXyBze"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol":{"keccak256":"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de","urls":["bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff","dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol":{"keccak256":"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1","urls":["bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02","dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol":{"keccak256":"0x40399695922383778f9f540a620bec475a2f8e0f08d41f0005682842e28a9855","urls":["bzz-raw://746d295e403931aeb9d6065fd5a0871f43ab5459814a60623611e4b6641a09fd","dweb:/ipfs/QmWrgT8YJrQ9FfD1o3YYArwo57e7MGdpFKuM74qJ4qE34E"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Base64.sol":{"keccak256":"0xbee2b819e1b4bf569ffc1b1b9d560b4abd6a589575f3093edaab9244de18a0c2","urls":["bzz-raw://e478c0e9bbf3eb8cd3b7784f9b397603e34747f9ffd16571ed1d89ce102de389","dweb:/ipfs/QmZ6zXpwy5xRxx9RkodJmDZSUTeEqPQUanAC5TUoYqW2VR"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol":{"keccak256":"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd","urls":["bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc","dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x8447b57b63810fe2e367c09496a966f143ec0e825d71ddb9fce2506cff84b618","urls":["bzz-raw://996cb48f793bf151555045b37138e36b3cdb31d6bc6552d3149285260be00cfb","dweb:/ipfs/QmcLaTTMNVbkMx58xhkp6GeFt4V3GtSyupZuaKG3vYW2Zc"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c","urls":["bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251","dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol":{"keccak256":"0x9303ef5a2beb555e52ce56598de205ce07ca8988fc67d073687c06cb8fc973d1","urls":["bzz-raw://8b2e48fb42844c25e6cb38e7cfa1d91dcdc054613fd10f608833dbc677acf889","dweb:/ipfs/QmT4HQxbgpWA3fZnK4dY3eXHNCoyBvpvzNq5k7eSt5mR5t"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa","urls":["bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287","dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea","urls":["bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d","dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212","urls":["bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f","dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz"],"license":"MIT"},"lib/solady/src/utils/EIP712.sol":{"keccak256":"0x53ccaa757944900e7423347c3c35ea5a905580f3f075452b8468a501a9c39839","urls":["bzz-raw://aa5688d98319fbeb5b3c46330a394e15a0f2c862d651415e183da4179b918351","dweb:/ipfs/QmZZFrFWmUCFL1qkZDVm3oqrDkQfumYnnksF6cpPkAHdtJ"],"license":"MIT"},"lib/solady/src/utils/ReentrancyGuard.sol":{"keccak256":"0xdb28f318ec45197a6c7cc2abebed67d7cb8b965838ef962e3844423256a9ddb8","urls":["bzz-raw://873cd46b77a2aeb781e7a0d131e7299151323ed884c330101a51d0727e218d98","dweb:/ipfs/QmddadCjyedztvdSgLZEyKWoRes2SqtpviSjhEbSNrkUoi"],"license":"MIT"},"lib/solady/src/utils/SignatureCheckerLib.sol":{"keccak256":"0x098c7eb88b3048f227b240e0e5bf1da4a8f7622b30f6d7c06416bfcab3225e77","urls":["bzz-raw://50c2766f652916c5d6433665fb1c3b2f04c3d9292a35c12e0f8d7c71dd6438cb","dweb:/ipfs/QmWTMwN2RDZUUPg7KkH1qFBjTSh84Zw8bbYwRBCQUtLN2h"],"license":"MIT"},"src/consensus/ConsensusRegistry.sol":{"keccak256":"0x6aca47012d3ef8384ffa48d266a6a9e7109f6678fb48e459bcc7c0872852d14b","urls":["bzz-raw://445c5adae11f3485687860cf2fb952e13e308296bd8e7201164b05ad2b362742","dweb:/ipfs/QmSSvvit4Fo93sR3YpJELRAQ2ykqycDRWfMg1n5CjdoAj5"],"license":"MIT or Apache-2.0"},"src/consensus/Issuance.sol":{"keccak256":"0xdbb33a3ff5e4afa3c5d107051647db33d86e95cd2686c0207fe8602f99a7d14a","urls":["bzz-raw://082e686f08caf3840b309f72b8e480b4ba3d4b90c42c18fb831c1a4b7ecdd727","dweb:/ipfs/QmT37vqjVGk1RsDc3BJCvVNYcLNuP9hTDK9vvsvykZHohG"],"license":"MIT or Apache-2.0"},"src/consensus/StakeManager.sol":{"keccak256":"0xcf5975cbdcd1c7ff43352999c09293d26c5e80f633a02776cb7e9d1975b8b2ad","urls":["bzz-raw://7ebbcc772f6298a368d582aa51e156d067e3fe343df1241738a57d02bfca356b","dweb:/ipfs/QmNWxhrKLe7qZc1Kt2WKZh2W4JddxLN87CpdUpS3bp1HHu"],"license":"MIT or Apache-2.0"},"src/consensus/SystemCallable.sol":{"keccak256":"0xed0e78873f3f574356c3bd6fcaa8f1869415aec576586530f74a599e3c767ead","urls":["bzz-raw://30b23f67de5abff6a021ff3456fa596585c57a6d09562e2a3ef4cb719b673e28","dweb:/ipfs/QmYRrBUKeSSEXBfrsw4arse3c9jCsuw3hHsHpjJeEqHNwS"],"license":"MIT or Apache-2.0"},"src/interfaces/IBlsG1.sol":{"keccak256":"0x950230ff0bed0ae8c0dbef2d22a24fb4114a00c23604619b9dccfd3cbe370ab0","urls":["bzz-raw://27432929c7726f7edb4b62981d0ca6bdb5bbada573a835f787556ff442b64c15","dweb:/ipfs/QmSBLDrPL47intGub7yHRC4JRVSyYSW4dSnQMGFQKK7Z8E"],"license":"MIT"},"src/interfaces/IConsensusRegistry.sol":{"keccak256":"0xd21fdfe6b1f601a70dd9ea80802b6cb92d98a7a751058862544cc1ccf512a6f8","urls":["bzz-raw://993174c548c1d8170e87fa3fe7e33368838492883f053ea17ee765b93ce00255","dweb:/ipfs/QmbdvPt6DhckDw1zp4AznyUqP91hqm5ihyqFUagbJj1Au5"],"license":"MIT or Apache-2.0"},"src/interfaces/IStakeManager.sol":{"keccak256":"0x4f3be7ccab5b7562434eea3517e40f6989f8af4f9f66ce1715ce4d418ba5a781","urls":["bzz-raw://0ce0311f5e85dd88780991d1c8ac5d6a268c2f99d068f9199d6565b331c0fd9b","dweb:/ipfs/QmdTJqgWA63FeRP1jFcyx9JpXUAhcJtDCDssr2aav6WPfT"],"license":"MIT or Apache-2.0"}},"version":1},"id":55} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"genesisConfig_","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]},{"name":"initialValidators_","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]},{"name":"blsPubkeys_","type":"bytes[]","internalType":"bytes[]"},{"name":"proofsOfPossession","type":"tuple[]","internalType":"struct IStakeManager.ProofOfPossession[]","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"owner_","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"SYSTEM_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"activate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allocateIssuance","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"applyIncentives","inputs":[{"name":"rewardInfos","type":"tuple[]","internalType":"struct RewardInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"consensusHeaderCount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applySlashes","inputs":[{"name":"slashes","type":"tuple[]","internalType":"struct Slash[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"approve","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"beginExit","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burn","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancelStakeVersionChange","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimRefund","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimStakeRewards","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimableRefunds","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"concludeEpoch","inputs":[{"name":"newCommittee","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"delegateStake","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"proofOfPossession","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"validatorEIP712Signature","type":"bytes","internalType":"bytes"},{"name":"deadline","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"delegationDigest","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"delegator","type":"address","internalType":"address"},{"name":"deadline","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"epochInfo","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"futureEpochInfo","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"getApproved","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getBalanceBreakdown","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBlsPubkey","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getCommitteeBlsPubkeys","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"view"},{"type":"function","name":"getCommitteeValidators","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpoch","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochInfo","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentStakeConfig","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentStakeVersion","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"getEligibleValidatorCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochInfo","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getNextCommitteeSize","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"getPendingVersionChanges","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRewards","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidator","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getValidators","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getValidatorsInfo","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"increaseNonce","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isApprovedForAll","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isDelegated","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isRetired","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isValidator","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"issuance","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address payable"}],"stateMutability":"view"},{"type":"function","name":"issuanceWithdrawal","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"migrateValidatorSets","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"ownerOf","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestStakeVersionChange","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"targetVersion","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setApprovalForAll","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setNextCommitteeSize","inputs":[{"name":"newSize","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTopUpAuthorityRequired","inputs":[{"name":"required","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValidatorRegion","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"region","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"proofOfPossession","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"stakeConfig","inputs":[{"name":"version","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"tokenByIndex","inputs":[{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"tokenOfOwnerByIndex","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"tokenURI","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"topUpAuthorityRequired","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"topUpSlashedStake","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferFrom","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"undistributedIssuance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unstake","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"acceptRewardShortfall","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeStakeVersion","inputs":[{"name":"newConfig","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"nonpayable"},{"type":"function","name":"validators","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"versionChangeRequests","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"targetVersion","type":"uint8","internalType":"uint8"},{"name":"requestEpoch","type":"uint32","internalType":"uint32"},{"name":"funder","type":"address","internalType":"address"},{"name":"escrow","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"DelegationNonceIncreased","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"nonce","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"NewEpoch","inputs":[{"name":"epoch","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"NextCommitteeSizeUpdated","inputs":[{"name":"oldSize","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"newSize","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"numActiveValidators","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RefundClaimed","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RefundQueued","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RewardsClaimed","inputs":[{"name":"claimant","type":"address","indexed":true,"internalType":"address"},{"name":"rewards","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StakeVersionAuthored","inputs":[{"name":"version","type":"uint8","indexed":true,"internalType":"uint8"},{"name":"stakeAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"epochIssuance","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"epochDuration","type":"uint32","indexed":false,"internalType":"uint32"}],"anonymous":false},{"type":"event","name":"StakeVersionChangeCanceled","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StakeVersionChangeRequested","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"targetVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"requestEpoch","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"escrow","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TopUpAuthorityRequirementUpdated","inputs":[{"name":"required","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ValidatorActivated","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorExited","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorPendingActivation","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorPendingExit","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorRegionUpdated","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"region","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"ValidatorRetired","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorSetsMigrated","inputs":[{"name":"eligibleValidatorCount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorSlashed","inputs":[{"name":"slash","type":"tuple","indexed":false,"internalType":"struct Slash","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"ValidatorStakeToppedUp","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorStakeVersionUpgraded","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"oldVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"newVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"oldStakeAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newStakeAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorStaked","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"error","name":"AlreadyDefined","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"BlsPubkeyNotFound","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"CommitteeRequirement","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"DelegationExpired","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DuplicateBLSPubkey","inputs":[]},{"type":"error","name":"ERC721EnumerableForbiddenBatchMint","inputs":[]},{"type":"error","name":"ERC721IncorrectOwner","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InsufficientApproval","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOperator","inputs":[{"name":"operator","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721NonexistentToken","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721OutOfBoundsIndex","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"GenesisArityMismatch","inputs":[]},{"type":"error","name":"IneligibleUnstake","inputs":[{"name":"validator","type":"tuple","internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}]},{"type":"error","name":"InsufficientRewards","inputs":[{"name":"withdrawAmount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidBLSPubkey","inputs":[]},{"type":"error","name":"InvalidCommitteeSize","inputs":[{"name":"minCommitteeSize","type":"uint256","internalType":"uint256"},{"name":"providedCommitteeSize","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidDeficitAmount","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidDuration","inputs":[{"name":"duration","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"InvalidEpoch","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"InvalidProofOfPossession","inputs":[{"name":"proof","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]}]},{"type":"error","name":"InvalidStakeAmount","inputs":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStakeVersion","inputs":[{"name":"currentVersion","type":"uint8","internalType":"uint8"},{"name":"targetVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidStatus","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}]},{"type":"error","name":"InvalidSupply","inputs":[]},{"type":"error","name":"InvalidTokenId","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidValidatorAddress","inputs":[]},{"type":"error","name":"IssuanceTransferFailed","inputs":[]},{"type":"error","name":"LowLevelCallFailure","inputs":[{"name":"err","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"NoClaimableRefund","inputs":[]},{"type":"error","name":"NoPendingVersionChange","inputs":[]},{"type":"error","name":"NotRecipient","inputs":[{"name":"recipient","type":"address","internalType":"address"}]},{"type":"error","name":"NotTransferable","inputs":[]},{"type":"error","name":"NotValidator","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"OnlySystemCall","inputs":[{"name":"invalidCaller","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"Reentrancy","inputs":[]},{"type":"error","name":"RequiresConsensusNFT","inputs":[]},{"type":"error","name":"StakeNotSlashed","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"StringsInsufficientHexLength","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"TopUpAuthorityRequired","inputs":[]}],"bytecode":{"object":"0x610120604052348015610010575f5ffd5b5060405161a18738038061a18783398101604081905261002f91611558565b806040518060400160405280600c81526020016b10dbdb9cd95b9cdd5cd3919560a21b8152506040518060400160405280600481526020016310d3919560e21b8152508181815f908161008291906116cf565b50600161008f82826116cf565b505030608052504660a0526060806100ef604080518082018252601481527f54656c636f696e205374616b654d616e61676572000000000000000000000000602080830191909152825180840190935260018352603160f81b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152938401929092529082015246606082015230608082015260a09020610100525050600d805461ff001916905550506001600160a01b03811661018d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61019681610847565b50835115806101a757508251845114155b806101b457508151845114155b156101d257604051633aa3e03360e01b815260040160405180910390fd5b846060015163ffffffff165f0361020a576060850151604051630c6e911360e41b815263ffffffff9091166004820152602401610184565b5f808052600a602090815286517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3558601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e45560408601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e55560608601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e6805463ffffffff191663ffffffff9092169190911790558451600d805461ffff60d81b1916600160d81b61ffff909316929092029190911790555b600281116103b1575f601182600481106103025761030261178d565b6003020160028101805460608a0151600160401b600160801b03199091166801000000000000000063ffffffff8781169190910263ffffffff60601b1916919091176c01000000000000000000000000919092160217905560408801516001820155905081601d816004811061037a5761037a61178d565b6003020160020160086101000a81548163ffffffff021916908363ffffffff16021790555050806103aa906117b5565b90506102e6565b505f5b8451811015610837575f8582815181106103d0576103d061178d565b602002602001015190505f6104218584815181106103f0576103f061178d565b6020026020010151835f015188868151811061040e5761040e61178d565b60200260200101516108a260201b60201c565b82519091506001600160a01b03161580610445575081516001600160a01b03908116145b156104635760405163713ce51160e01b815260040160405180910390fd5b602082015163ffffffff161561049a576020820151604051634fadd4d360e11b815263ffffffff9091166004820152602401610184565b604082015163ffffffff16156104d1576040808301519051634fadd4d360e11b815263ffffffff9091166004820152602401610184565b6003826060015160068111156104e9576104e96117cd565b1461050d578160600151604051633ba7bf8960e11b81526004016101849190611801565b608082015115610533576005604051633ba7bf8960e11b81526004016101849190611801565b60a082015160ff16156105645760a082015160405163222d164360e21b815260ff9091166004820152602401610184565b5f5b6002811161061a57601181600481106105815761058161178d565b84516003919091029190910180546001810182555f91825260209091200180546001600160a01b0319166001600160a01b03909216919091179055601d81600481106105cf576105cf61178d565b84516003919091029190910180546001810182555f91825260209091200180546001600160a01b0319166001600160a01b03909216919091179055610613816117b5565b9050610566565b5085838151811061062d5761062d61178d565b60209081029190910181015183516001600160a01b03165f908152602990925260409091209061065d90826116cf565b5081516001600160a01b039081165f908152600f602090815260409182902085518154928701519387015163ffffffff908116600160c01b0263ffffffff60c01b1991909516600160a01b026001600160c01b0319909416919095161791909117928316821781556060850151859391929091839160ff60e01b191664ffffffffff60c01b1990911617600160e01b8360068111156106fe576106fe6117cd565b02179055506080820151815460a084015160c09094015160ff908116600160f81b026001600160f81b0391909516600160f01b0260ff60f01b19931515600160e81b029390931661ffff60e81b19909216919091179190911716919091179055815160035f52602a602052610794907f4adfa5efd78af8432c8ff812ed4c3d89e016f048361846e090e1a7c770f3157690610a3e565b50875182516001600160a01b039081165f908152600b60209081526040808320949094558551858352601090915292902080546001600160a01b0319169290911691909117905581516107f6906107f1816001600160a01b031690565b610a5b565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b82604051610825919061180f565b60405180910390a150506001016103b4565b50509151602b55506119bf915050565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f81516060146108c5576040516333a234f960e11b815260040160405180910390fd5b5f825f815181106108d8576108d861178d565b016020015160f81c90506080811615806108f457506040811615155b15610912576040516333a234f960e11b815260040160405180910390fd5b5f61091d8486610ac1565b86516040519192505f91829161b1519163a65ebb2560e01b91610946918a9088906024016118b7565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516109849190611910565b5f60405180830381855afa9150503d805f81146109bc576040519150601f19603f3d011682016040523d82523d5f602084013e6109c1565b606091505b50915091508115806109d557508051602014155b156109f557806040516306fe67db60e31b8152600401610184919061191b565b80806020019051810190610a09919061192d565b610a28578760405163a865bb3560e01b81526004016101849190611946565b610a328688610b11565b98975050505050505050565b5f610a52836001600160a01b038416610b9d565b90505b92915050565b6001600160a01b038216610a8457604051633250574960e11b81525f6004820152602401610184565b5f610a90838383610be9565b90506001600160a01b03811615610abc576040516339e3563760e11b81525f6004820152602401610184565b505050565b60608251606014610ae5576040516333a234f960e11b815260040160405180910390fd5b604051610afa905f9085908590602001611960565b604051602081830303815290604052905092915050565b604080516020848101516001600160fd1b031682528483015181830152606080860151838501529091205f8181526010909252919020546001600160a01b031615610b6f57604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b5f818152600183016020526040812054610be257508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a55565b505f610a55565b5f80610bf6858585610cbc565b90506001600160a01b038116610c5257610c4d84600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b610c75565b846001600160a01b0316816001600160a01b031614610c7557610c758185610dae565b6001600160a01b038516610c9157610c8c84610e2b565b610cb4565b846001600160a01b0316816001600160a01b031614610cb457610cb48585610ed2565b949350505050565b5f828152600260205260408120546001600160a01b0390811690831615610ce857610ce8818486610f20565b6001600160a01b03811615610d2257610d035f858180610f84565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610d50576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f610db8836110a6565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314610e0d575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90610e3c90600190611998565b5f8381526009602052604081205460088054939450909284908110610e6357610e6361178d565b905f5260205f20015490508060088381548110610e8257610e8261178d565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480610eb957610eb96119ab565b600190038181905f5260205f20015f9055905550505050565b5f6001610ede846110a6565b610ee89190611998565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b610f2b8383836110eb565b610abc576001600160a01b038316610f5957604051637e27328960e01b815260048101829052602401610184565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610184565b8080610f9857506001600160a01b03821615155b15611077575f610fa78461116b565b90506001600160a01b03831615801590610fd35750826001600160a01b0316816001600160a01b031614155b801561100457506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b1561102d5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610184565b81156110755783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b0382166110d0576040516322718ad960e21b81525f6004820152602401610184565b506001600160a01b03165f9081526003602052604090205490565b5f6001600160a01b03831615801590610cb45750826001600160a01b0316846001600160a01b0316148061114357506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b80610cb45750505f908152600460205260409020546001600160a01b03908116911614919050565b5f818152600260205260408120546001600160a01b031680610a5557604051637e27328960e01b815260048101849052602401610184565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b03811182821017156111d9576111d96111a3565b60405290565b604051602081016001600160401b03811182821017156111d9576111d96111a3565b604051608081016001600160401b03811182821017156111d9576111d96111a3565b604051601f8201601f191681016001600160401b038111828210171561124b5761124b6111a3565b604052919050565b805163ffffffff81168114611266575f5ffd5b919050565b5f6001600160401b03821115611283576112836111a3565b5060051b60200190565b80516001600160a01b0381168114611266575f5ffd5b80518015158114611266575f5ffd5b805160ff81168114611266575f5ffd5b5f82601f8301126112d1575f5ffd5b81516112e46112df8261126b565b611223565b80828252602082019150602060e08402860101925085831115611305575f5ffd5b602085015b838110156113af5760e08188031215611321575f5ffd5b6113296111b7565b6113328261128d565b815261134060208301611253565b602082015261135160408301611253565b6040820152606082015160078110611367575f5ffd5b6060820152611378608083016112a3565b608082015261138960a083016112b2565b60a082015261139a60c083016112b2565b60c0820152835260209092019160e00161130a565b5095945050505050565b5f82601f8301126113c8575f5ffd5b81516001600160401b038111156113e1576113e16111a3565b6113f4601f8201601f1916602001611223565b818152846020838601011115611408575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f830112611433575f5ffd5b81516114416112df8261126b565b8082825260208201915060208360051b860101925085831115611462575f5ffd5b602085015b838110156113af5780516001600160401b03811115611484575f5ffd5b611493886020838a01016113b9565b84525060209283019201611467565b5f82601f8301126114b1575f5ffd5b81516114bf6112df8261126b565b8082825260208201915060208360051b8601019250858311156114e0575f5ffd5b602085015b838110156113af5780516001600160401b03811115611502575f5ffd5b86016020818903601f19011215611517575f5ffd5b61151f6111df565b60208201516001600160401b03811115611537575f5ffd5b6115468a6020838601016113b9565b825250845250602092830192016114e5565b5f5f5f5f5f85870361010081121561156e575f5ffd5b608081121561157b575f5ffd5b50611584611201565b8651815260208088015190820152604080880151908201526115a860608801611253565b606082015260808701519095506001600160401b038111156115c8575f5ffd5b6115d4888289016112c2565b60a088015190955090506001600160401b038111156115f1575f5ffd5b6115fd88828901611424565b60c088015190945090506001600160401b0381111561161a575f5ffd5b611626888289016114a2565b92505061163560e0870161128d565b90509295509295909350565b600181811c9082168061165557607f821691505b60208210810361167357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610abc5782821115610abc57805f5260205f20601f840160051c60208510156116a457505f5b90810190601f840160051c035f5b818110156116c7575f838201556001016116b2565b505050505050565b81516001600160401b038111156116e8576116e86111a3565b6116fc816116f68454611641565b84611679565b6020601f82116001811461172e575f83156117175750848201515b5f19600385901b1c1916600184901b178455611786565b5f84815260208120601f198516915b8281101561175d578785015182556020948501946001909201910161173d565b508482101561177a57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016117c6576117c66117a1565b5060010190565b634e487b7160e01b5f52602160045260245ffd5b600781106117fd57634e487b7160e01b5f52602160045260245ffd5b9052565b60208101610a5582846117e1565b5f60e08201905060018060a01b03835116825263ffffffff602084015116602083015263ffffffff6040840151166040830152606083015161185460608401826117e1565b5060808301511515608083015260ff60a08401511660a083015260c083015161188260c084018260ff169052565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b606081525f6118c96060830186611889565b82810360208401526118db8186611889565b905082810360408401526118ef8185611889565b9695505050505050565b5f81518060208401855e5f93019283525090919050565b5f610a5282846118f9565b602081525f610a526020830184611889565b5f6020828403121561193d575f5ffd5b610a52826112a3565b602081525f8251602080840152610cb46040840182611889565b6001600160e81b0319841681525f61197b60038301856118f9565b60609390931b6001600160601b0319168352505060140192915050565b81810381811115610a5557610a556117a1565b634e487b7160e01b5f52603160045260245ffd5b60805160a05160c05160e0516101005161878b6119fc5f395f6143dd01525f61449701525f61447101525f61442101525f6143fe015261878b5ff3fe608060405260043610610436575f3560e01c8063673983311161022b578063a71954ec11610129578063c05df7ac116100b3578063eb8535c211610078578063eb8535c214610d7f578063f062476814610dac578063f2fde38b14610dcb578063f66a25a414610dea578063fa52c7d814610e09575f5ffd5b8063c05df7ac14610cfb578063c53a029214610d1a578063c87b56dd14610d2e578063e5a2282714610d4d578063e985e9c514610d60575f5ffd5b8063b5545a3c116100f9578063b5545a3c14610bf7578063b88d4fde14610c0b578063b97dd9e214610c2a578063babc394f14610c5b578063bd3e759414610c6f575f5ffd5b8063a71954ec14610b91578063a7c5e70114610bb0578063aaffd27014610bc4578063ad6cfb8614610bd8575f5ffd5b80637d06fdf8116101b55780638cc05eda1161017a5780638cc05eda14610af55780638da5cb5b14610b2157806395d89b4114610b44578063a0201be514610b58578063a22cb46514610b77575f5ffd5b80637d06fdf814610a2e5780638456cb5914610a7b57806384b0196e14610a8f578063863623bb14610ab657806389afcb4414610ad6575f5ffd5b80636d3c6275116101fb5780636d3c62751461099e57806370a08231146109bd578063715018a6146109dc57806379ee54f7146109f05780637b55a30014610a0f575f5ffd5b8063673983311461090e5780636a627842146109345780636a926591146109535780636ae9942c14610972575f5ffd5b80632a8e33d7116103385780633f4ba83a116102c257806358e88dbb1161028757806358e88dbb1461087c57806359ca93b6146108955780635c975abb146108b457806362fcde4b146108d05780636352211e146108ef575f5ffd5b80633f4ba83a146107ec57806342842e0e1461080057806343201d301461081f57806343401a00146108325780634f6ccce71461085d575f5ffd5b80633434735f116103085780633434735f14610724578063355811a71461073e578063374ed18c146107465780633894228e146107725780633e28391d146107cd575f5ffd5b80632a8e33d7146106b45780632b9f4985146106d35780632f745c59146106f25780632fb0d02514610711575f5ffd5b80630f15f4c0116103c45780631904bb2e116103895780631904bb2e1461061a5780632228dfa01461064657806323a404301461065a57806323b872dd1461066e5780632870259d14610688575f5ffd5b80630f15f4c0146105865780630f4346fa1461059a578063127ce8e8146105b957806315b5709a146105cc57806318160ddd14610606575f5ffd5b806306fdde031161040a57806306fdde03146104de5780630752e017146104f2578063081812fc14610511578063095ea7b3146105485780630a36cdef14610567575f5ffd5b80628d6acd1461043a57806301ffc9a71461046257806302ae337b14610491578063059b916c146104b2575b5f5ffd5b348015610445575f5ffd5b5061044f600e5481565b6040519081526020015b60405180910390f35b34801561046d575f5ffd5b5061048161047c36600461714d565b610e94565b6040519015158152602001610459565b34801561049c575f5ffd5b506104b06104ab3660046171af565b610ebe565b005b3480156104bd575f5ffd5b506104d16104cc366004617203565b611050565b604051610459919061724a565b3480156104e9575f5ffd5b506104d1611121565b3480156104fd575f5ffd5b506104b061050c36600461725c565b6111b0565b34801561051c575f5ffd5b5061053061052b36600461725c565b611218565b6040516001600160a01b039091168152602001610459565b348015610553575f5ffd5b506104b0610562366004617273565b61123f565b348015610572575f5ffd5b506104b06105813660046171af565b611258565b348015610591575f5ffd5b506104b061152c565b3480156105a5575f5ffd5b506104b06105b4366004617203565b611575565b6104b06105c73660046173d8565b6116bc565b3480156105d7575f5ffd5b506105eb6105e6366004617203565b611955565b60408051938452602084019290925290820152606001610459565b348015610611575f5ffd5b5060085461044f565b348015610625575f5ffd5b50610639610634366004617203565b6119bb565b6040516104599190617527565b348015610651575f5ffd5b506104b0611a9e565b348015610665575f5ffd5b5061044f611b5e565b348015610679575f5ffd5b506104b0610562366004617535565b348015610693575f5ffd5b506106a76106a236600461756f565b611b6d565b604051610459919061758d565b3480156106bf575f5ffd5b506104b06106ce3660046175e7565b611ceb565b3480156106de575f5ffd5b506104b06106ed366004617203565b611d3b565b3480156106fd575f5ffd5b5061044f61070c366004617273565b611e00565b6104b061071f366004617602565b611e63565b34801561072f575f5ffd5b506105306002600160a01b0381565b6104b0611ee9565b348015610751575f5ffd5b5061076561076036600461767a565b611f64565b60405161045991906176d8565b34801561077d575f5ffd5b5061079161078c36600461725c565b6121f9565b604080519586526001600160401b03909416602086015263ffffffff9283169385019390935216606083015260ff16608082015260a001610459565b3480156107d8575f5ffd5b506104816107e7366004617203565b61224d565b3480156107f7575f5ffd5b506104b0612273565b34801561080b575f5ffd5b506104b061081a366004617535565b612285565b6104b061082d366004617203565b61229f565b34801561083d575f5ffd5b5061044f61084c366004617203565b602f6020525f908152604090205481565b348015610868575f5ffd5b5061044f61087736600461725c565b612598565b348015610887575f5ffd5b506030546104819060ff1681565b3480156108a0575f5ffd5b506107916108af36600461725c565b6125ed565b3480156108bf575f5ffd5b50600d54610100900460ff16610481565b3480156108db575f5ffd5b506104b06108ea366004617749565b6125fc565b3480156108fa575f5ffd5b5061053061090936600461725c565b612703565b348015610919575f5ffd5b5061092261270d565b60405160ff9091168152602001610459565b34801561093f575f5ffd5b506104b061094e366004617203565b61271f565b34801561095e575f5ffd5b5061048161096d36600461776a565b61277d565b34801561097d575f5ffd5b5061099161098c36600461767a565b612818565b604051610459919061779c565b3480156109a9575f5ffd5b506104816109b8366004617203565b61296c565b3480156109c8575f5ffd5b5061044f6109d7366004617203565b6129f0565b3480156109e7575f5ffd5b506104b0612a35565b3480156109fb575f5ffd5b5061044f610a0a366004617203565b612a46565b348015610a1a575f5ffd5b506104b0610a293660046177ff565b612a88565b348015610a39575f5ffd5b50610a42612bfd565b604051610459919081518152602080830151908201526040808301519082015260609182015163ffffffff169181019190915260800190565b348015610a86575f5ffd5b506104b0612c7a565b348015610a9a575f5ffd5b50610aa3612c8a565b604051610459979695949392919061786e565b348015610ac1575f5ffd5b506105305f5160206182325f395f51905f5281565b348015610ae1575f5ffd5b506104b0610af0366004617203565b612cf1565b348015610b00575f5ffd5b50610b14610b0f36600461756f565b612da1565b6040516104599190617904565b348015610b2c575f5ffd5b50600d546201000090046001600160a01b0316610530565b348015610b4f575f5ffd5b506104d1612db5565b348015610b63575f5ffd5b506106a7610b7236600461767a565b612dc4565b348015610b82575f5ffd5b506104b0610562366004617916565b348015610b9c575f5ffd5b50610a42610bab36600461795b565b612e7d565b348015610bbb575f5ffd5b50610b14612ef7565b348015610bcf575f5ffd5b506104b0612f03565b348015610be3575f5ffd5b5061044f610bf2366004617974565b613173565b348015610c02575f5ffd5b506104b0613254565b348015610c16575f5ffd5b506104b0610c253660046179d5565b61336d565b348015610c35575f5ffd5b50600d54600160b01b900463ffffffff1660405163ffffffff9091168152602001610459565b348015610c66575f5ffd5b50610765613385565b348015610c7a575f5ffd5b50610cc4610c89366004617203565b602e6020525f90815260409020805460019091015460ff821691610100810463ffffffff1691600160281b9091046001600160a01b03169084565b6040805160ff909516855263ffffffff90931660208501526001600160a01b03909116918301919091526060820152608001610459565b348015610d06575f5ffd5b50610922610d15366004617a38565b613492565b348015610d25575f5ffd5b506104b06135b1565b348015610d39575f5ffd5b506104d1610d4836600461725c565b613646565b6104b0610d5b366004617a51565b6136b6565b348015610d6b575f5ffd5b50610481610d7a366004617a82565b613b9b565b348015610d8a575f5ffd5b50600d54600160d81b900461ffff1660405161ffff9091168152602001610459565b348015610db7575f5ffd5b506104b0610dc6366004617a51565b613bc8565b348015610dd6575f5ffd5b506104b0610de5366004617203565b613c48565b348015610df5575f5ffd5b506104b0610e04366004617916565b613c82565b348015610e14575f5ffd5b50610e81610e23366004617203565b600f6020525f90815260409020546001600160a01b0381169063ffffffff600160a01b8204811691600160c01b81049091169060ff600160e01b8204811691600160e81b8104821691600160f01b8204811691600160f81b90041687565b6040516104599796959493929190617aaa565b5f6001600160e01b0319821663780e9d6360e01b1480610eb85750610eb882613d6d565b92915050565b336002600160a01b0314610eec57604051637eb3357160e01b81523360048201526024015b60405180910390fd5b5f5b8181101561104b5736838383818110610f0957610f09617afd565b6040029190910191505f9050610f226020830183617203565b90506001600160a01b0381161580610f4257506001600160a01b03818116145b15610f4e575050611043565b610f5e6109b86020840184617203565b15610f6a575050611043565b60208201803590600b905f90610f809086617203565b6001600160a01b03166001600160a01b031681526020019081526020015f20541115610ff45760208201803590600b905f90610fbc9086617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205f828254610fe99190617b25565b909155506110099050565b6110096110046020840184617203565b613dbc565b7f11a09f9b32440d896abff7453bf53f8b26ffcb18dae4dca227f7a76e2acc3a64826040516110389190617b38565b60405180910390a150505b600101610eee565b505050565b6001600160a01b0381165f9081526029602052604081208054606092919061107790617b61565b80601f01602080910402602001604051908101604052809291908181526020018280546110a390617b61565b80156110ee5780601f106110c5576101008083540402835291602001916110ee565b820191905f5260205f20905b8154815290600101906020018083116110d157829003601f168201915b5050505050905080515f03610eb857604051635f7ba20d60e11b81526001600160a01b0384166004820152602401610ee3565b60605f805461112f90617b61565b80601f016020809104026020016040519081016040528092919081815260200182805461115b90617b61565b80156111a65780601f1061117d576101008083540402835291602001916111a6565b820191905f5260205f20905b81548152906001019060200180831161118957829003601f168201915b5050505050905090565b6111b8613ed9565b604051627b8a6760e11b8152600481018290523360248201525f5160206182325f395f51905f529062f714ce906044015f604051808303815f87803b1580156111ff575f5ffd5b505af1158015611211573d5f5f3e3d5ffd5b5050505050565b5f61122282613f0d565b505f828152600460205260409020546001600160a01b0316610eb8565b60405163dc8d8db760e01b815260040160405180910390fd5b336002600160a01b031461128157604051637eb3357160e01b8152336004820152602401610ee3565b5f80826001600160401b0381111561129b5761129b6172d8565b6040519080825280602002602001820160405280156112c4578160200160208202803683370190505b5090505f5b8381101561142d57368585838181106112e4576112e4617afd565b905060400201905080602001355f036112fd5750611425565b5f61130b6020830183617203565b90506001600160a01b038116158061132b57506001600160a01b03818116145b15611337575050611425565b6113476109b86020840184617203565b15611353575050611425565b5f600f816113646020860186617203565b6001600160a01b0316815260208082019290925260409081015f90812054600160f01b900460ff16808252600a8452918120549193509091600b9082906113ad90880188617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205490505f8282106113dd57826113df565b815b90505f6113f0602088013583617b99565b90506113fc818b617bb0565b99508089898151811061141157611411617afd565b602002602001018181525050505050505050505b6001016112c9565b50815f0361143b5750505050565b5f611444613385565b6020015190505f600e54826114599190617bb0565b90505f5f5b86811015611514575f8686838151811061147a5761147a617afd565b60200260200101518561148d9190617b99565b6114979190617bd7565b9050801561150b5780600b5f8b8b868181106114b5576114b5617afd565b6114cb9260206040909202019081019150617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546114f89190617bb0565b9091555061150890508184617bb0565b92505b5060010161145e565b5061151f8183617b25565b600e5550505050505b5050565b611534613f45565b61153d33613f6e565b50611549336001613fdc565b335f908152600f60205260409020600d54611572908290600160b01b900463ffffffff16614042565b50565b61157d613f45565b3068929eee149b4bd21268540361159b5763ab143c065f526004601cfd5b3068929eee149b4bd21268556115b0816140a7565b506001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b900490951691850191909152600101546060840152900361162857604051636c4da32160e11b815260040160405180910390fd5b6001600160a01b0382165f908152602e6020526040812080546001600160c81b03191681556001015561165c602c83614108565b506060810151156116795761167981604001518260600151614123565b6040516001600160a01b038316907fc3b65b615a42c44083fae01d75939ba9640ffd6023e130bfc06092d992560d1f905f90a2503868929eee149b4bd212685550565b6116c4613f45565b5f61170586868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061420492505050565b90505f611710613385565b60a0015190505f61172134836143a0565b905061172c87613f6e565b50611737875f613fdc565b6001600160a01b0387165f908152600c60205260409020600201546001600160401b03600160a81b9091041661177c600d546001600160a01b03620100009091041690565b6001600160a01b0316336001600160a01b03161461185157844211156117b8576040516304adae2760e21b815260048101869052602401610ee3565b5f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b973858a3387868b6040516020016117f69796959493929190617bea565b6040516020818303038152906040528051906020012090505f611818826143db565b90506118268a828b8b6144f1565b61184e57604051633b4f6e2b60e21b81526001600160a01b038b166004820152602401610ee3565b50505b6040518060a00160405280858152602001896001600160a01b03168152602001336001600160a01b031681526020018460ff1681526020018260016118969190617c31565b6001600160401b039081169091526001600160a01b038a81165f908152600c602090815260409182902085518155908501516001820180546001600160a01b03191691851691909117905590840151600290910180546060860151608090960151929093166001600160a81b031990931692909217600160a01b60ff909516949094029390931767ffffffffffffffff60a81b1916600160a81b93909216929092021790556119488b8b8a868661453b565b5050505050505050505050565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a90925282205482918291826119948783614717565b6001600160a01b03979097165f908152600b60205260409020549791969550909350505050565b6119c36170fd565b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff166119f5576119f383613f6e565b505b6040805160e08101825282546001600160a01b038116825263ffffffff600160a01b820481166020840152600160c01b82041692820192909252908290606083019060ff600160e01b909104166006811115611a5357611a53617487565b6006811115611a6457611a64617487565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101529392505050565b611aa6613f45565b611aaf33613f6e565b505f611aba602b5490565b600d549091505f90601190600160d01b900460ff1660048110611adf57611adf617afd565b60030201549050611af08282614747565b611afb336003613fdc565b335f908152600f60205260409020600d54815463ffffffff600160b01b909204821691600160a01b90910416811015611b4f57604051634fadd4d360e11b815263ffffffff82166004820152602401610ee3565b611b5882614784565b50505050565b5f611b68602b5490565b905090565b6060611b78826147d6565b5f611b8283614826565b90505f81516001600160401b03811115611b9e57611b9e6172d8565b604051908082528060200260200182016040528015611bd757816020015b611bc46170fd565b815260200190600190039081611bbc5790505b5090505f5b8251811015611ce357600f5f848381518110611bfa57611bfa617afd565b6020908102919091018101516001600160a01b0390811683528282019390935260409182015f20825160e0810184528154948516815263ffffffff600160a01b8604811693820193909352600160c01b85049092169282019290925291606083019060ff600160e01b909104166006811115611c7857611c78617487565b6006811115611c8957611c89617487565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101528251839083908110611cd057611cd0617afd565b6020908102919091010152600101611bdc565b509392505050565b611cf3613ed9565b6030805460ff19168215159081179091556040519081527f52ad987b0fca51d9a6d5e0bbc656d0e3f616cff09727bf584c3275def38c4f54906020015b60405180910390a150565b611d43613f45565b3068929eee149b4bd212685403611d615763ab143c065f526004601cfd5b3068929eee149b4bd21268555f611d77826140a7565b6001600160a01b0383165f908152600f6020526040812054919250600160f01b90910460ff1690611da9848484614858565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051611de691815260200190565b60405180910390a25050503868929eee149b4bd212685550565b5f611e0a836129f0565b8210611e3b5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610ee3565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b611e6b613f45565b611eab813385858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061420492505050565b505f611eb5613385565b60a0015190505f611ec634836143a0565b9050611ed133613f6e565b50611edc335f613fdc565b611211858533858561453b565b611ef1613ed9565b6040515f905f5160206182325f395f51905f529034908381818185875af1925050503d805f8114611f3d576040519150601f19603f3d011682016040523d82523d5f602084013e611f42565b606091505b505090508061157257604051630b567ce360e31b815260040160405180910390fd5b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d54600160b01b900463ffffffff16611fb0816002617c50565b63ffffffff168363ffffffff161180611ff0575060038163ffffffff1610158015611ff05750611fe1600382617c6c565b63ffffffff168363ffffffff16105b1561201657604051634fadd4d360e11b815263ffffffff84166004820152602401610ee3565b600d54600160d01b900460ff1663ffffffff8281169085161115612135575f612040858484614906565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561209957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161207b575b505050918352505060018201546020808301919091526002928301546001600160401b03811660408085019190915263ffffffff600160401b830481166060860152600160601b8304811660808087019190915260ff600160801b909404841660a096870152600d549093165f818152600a86529290922095860154938701939093526003909401549091169084015282015295945050505050565b612140848383614990565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561219957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161217b575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152949350505050565b60118160048110612208575f80fd5b6003020160018101546002909101549091506001600160401b03811690600160401b810463ffffffff90811691600160601b810490911690600160801b900460ff1685565b6001600160a01b038082165f908152600c60205260408120600201549091161515610eb8565b61227b613ed9565b612283614a31565b565b61104b83838360405180602001604052805f81525061336d565b6122a7613f45565b6122b081613f6e565b50600d546201000090046001600160a01b03166001600160a01b0316336001600160a01b0316146123585760305460ff16156122ff57604051630a06fea760e01b815260040160405180910390fd5b5f61230982614a84565b9050336001600160a01b0383161480159061232d5750336001600160a01b03821614155b156123565760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b505b6001600160a01b0381165f908152600f6020526040902054600160e01b900460ff16600181600681111561238e5761238e617487565b141580156123ae575060028160068111156123ab576123ab617487565b14155b80156123cc575060038160068111156123c9576123c9617487565b14155b156123ec5780604051633ba7bf8960e11b8152600401610ee39190617c88565b6001600160a01b0382165f818152600f6020908152604080832054600160f01b900460ff16808452600a835281842054948452600b9092529091205490919081811061246657604051630ea9c27360e01b81526001600160a01b03861660048201526024810182905260ff84166044820152606401610ee3565b5f6124718284617b25565b90508034146124ad576040516315de715960e21b81526001600160a01b038716600482015234602482015260ff85166044820152606401610ee3565b6001600160a01b0386165f908152600b6020526040812080548392906124d4908490617bb0565b90915550506040515f905f5160206182325f395f51905f529034908381818185875af1925050503d805f8114612525576040519150601f19603f3d011682016040523d82523d5f602084013e61252a565b606091505b505090508061254c57604051630b567ce360e31b815260040160405180910390fd5b866001600160a01b03167fe27d5554eb05db70d1fa64400b6d5aee0f805adfbc7c9c3785743c9a287db8378360405161258791815260200190565b60405180910390a250505050505050565b5f6125a260085490565b82106125ca5760405163295f44f760e21b81525f600482015260248101839052604401610ee3565b600882815481106125dd576125dd617afd565b905f5260205f2001549050919050565b601d8160048110612208575f80fd5b612604613ed9565b8061ffff165f0361265757600d54601190600160d01b900460ff166004811061262f5761262f617afd565b6003020154604051635700689f60e11b815260048101919091525f6024820152604401610ee3565b5f612661602b5490565b9050808261ffff16111561269557604051635700689f60e11b81526004810182905261ffff83166024820152604401610ee3565b600d805461ffff848116600160d81b81810261ffff60d81b1985161790945560408051949093049091168084526020840191909152908201839052907f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505050565b5f610eb882613f0d565b5f612716613385565b60a00151905090565b612727613ed9565b612730816129f0565b15158061274157506127418161296c565b1561276a57604051639fb0877960e01b81526001600160a01b0382166004820152602401610ee3565b611572816001600160a01b038116614ab3565b5f6060821461278d57505f610eb8565b5f6127cc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614b1492505050565b5f818152601060205260409020549091506001600160a01b0316806127f5575f92505050610eb8565b6127fe8161296c565b1561280d575f92505050610eb8565b506001949350505050565b60605f61282483611f64565b5f015190505f81516001600160401b03811115612843576128436172d8565b60405190808252806020026020018201604052801561287657816020015b60608152602001906001900390816128615790505b5090505f5b8151811015611ce35760295f84838151811061289957612899617afd565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2080546128cb90617b61565b80601f01602080910402602001604051908101604052809291908181526020018280546128f790617b61565b80156129425780601f1061291957610100808354040283529160200191612942565b820191905f5260205f20905b81548152906001019060200180831161292557829003601f168201915b505050505082828151811061295957612959617afd565b602090810291909101015260010161287b565b5f61297f6001600160a01b038316614b42565b1561298b57505f919050565b5f6001600160a01b0383165f908152600f6020526040902054600160e01b900460ff1660068111156129bf576129bf617487565b036129cb57505f919050565b506001600160a01b03165f908152600f6020526040902054600160e81b900460ff1690565b5f6001600160a01b038216612a1a576040516322718ad960e21b81525f6004820152602401610ee3565b506001600160a01b03165f9081526003602052604090205490565b612a3d613ed9565b6122835f614b95565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a909252822054612a808482614717565b949350505050565b336002600160a01b0314612ab157604051637eb3357160e01b8152336004820152602401610ee3565b612abb8282614bf0565b612ac3614cc8565b600d54600160d81b900461ffff168114612b0757600d54604051635700689f60e11b8152600160d81b90910461ffff16600482015260248101829052604401610ee3565b5f5f5f5f612b468686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061510392505050565b9350935093509350612b5986868661549d565b612b6b612b65602b5490565b86614747565b7fd1a5032a9ae65ebe520eba7974025750af3d884b6ab6047dad04dcf7006ab3856040518060c00160405280838152602001858152602001436001612bb09190617bb0565b6001600160401b0316815263ffffffff80881660208301528516604080830191909152600d5460ff1660609092019190915251612bed91906176d8565b60405180910390a1505050505050565b612c2a60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b50600d5460ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b612c82613ed9565b6122836156de565b600f60f81b6060805f808083612cdf60408051808201825260148152732a32b631b7b4b71029ba30b5b2a6b0b730b3b2b960611b602080830191909152825180840190935260018352603160f81b9083015291565b97989097965046955030945091925090565b612cf9613ed9565b612d028161296c565b15612d23576006604051633ba7bf8960e11b8152600401610ee39190617c88565b612d2c81613f6e565b505f6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff166006811115612d6157612d61617487565b03612d98576001600160a01b0381165f908152600f60205260409020612d869061571d565b6115726001600160a01b03821661577b565b61157281613dbc565b6060612dac826147d6565b610eb882614826565b60606001805461112f90617b61565b60605f612dd083611f64565b5f015190505f81516001600160401b03811115612def57612def6172d8565b604051908082528060200260200182016040528015612e2857816020015b612e156170fd565b815260200190600190039081612e0d5790505b5090505f5b8151811015611ce357612e58838281518110612e4b57612e4b617afd565b60200260200101516119bb565b828281518110612e6a57612e6a617afd565b6020908102919091010152600101612e2d565b612eaa60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b5060ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b6060611b68602c6157b3565b336002600160a01b0314612f2c57604051637eb3357160e01b8152336004820152602401610ee3565b5f612f3660085490565b90505f5f5b82811015613135575f612f5061090983612598565b6001600160a01b0381165f90815260296020526040812080549293509091612f7790617b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa390617b61565b8015612fee5780601f10612fc557610100808354040283529160200191612fee565b820191905f5260205f20905b815481529060010190602001808311612fd157829003601f168201915b5050505050905080516060036130625780516020808301919091205f9081526010918290526040812080546001600160a01b031916905583919061303184614b14565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff16156130925750505061312d565b8054600160e01b900460ff165f8160068111156130b1576130b1617487565b14806130ce575060068160068111156130cc576130cc617487565b145b156130dc575050505061312d565b61310d84602a5f8460068111156130f5576130f5617487565b60ff16815260208101919091526040015f20906157bf565b50613117816157d3565b156131285761312586617c96565b95505b505050505b600101612f3b565b50602b8190556040518181527fa5fe2e69fcd48b9dbe563588b5da97937ef9046641db65c59b8d49a20d75bdcc906020015b60405180910390a15050565b5f61317d84613f6e565b5084516060146131a0576040516333a234f960e11b815260040160405180910390fd5b5f6131a9613385565b60a001516001600160a01b0386165f908152600c6020526040812060020154919250600160a81b9091046001600160401b0316906131e688614b14565b90505f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b97382898987878b6040516020016132269796959493929190617bea565b604051602081830303815290604052805190602001209050613247816143db565b9998505050505050505050565b61325c613f45565b3068929eee149b4bd21268540361327a5763ab143c065f526004601cfd5b3068929eee149b4bd2126855335f908152602f6020526040812054908190036132b65760405163183dfd8b60e21b815260040160405180910390fd5b335f818152602f602052604080822082905551634875485760e11b8152600481019290925260248201525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015613311575f5ffd5b505af1158015613323573d5f5f3e3d5ffd5b50506040518481523393507f358fe4192934d3bf28ae181feda1f4bd08ca67f5e2fad55582cce5eb67304ae99250602001905060405180910390a2503868929eee149b4bd2126855565b61337884848461123f565b611b583385858585615826565b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d546133dc90600160b01b810463ffffffff16908190600160d01b900460ff16614990565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561343557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613417575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152919050565b5f61349b613ed9565b6134a3613f45565b6134b3608083016060840161767a565b63ffffffff165f036134f1576134cf608083016060840161767a565b604051630c6e911360e41b815263ffffffff9091166004820152602401610ee3565b600d80545f919082906135069060ff16617cae565b825460ff8083166101009490940a848102910219909116179092555f908152600a60205260409020909150839061353d8282617ccc565b505060ff81167fe99633c5fc9a4b39f3a3d7835a821420f9d4d6c5bfa62be2fcf1fde156115eeb8435602086013560408701356135806080890160608a0161767a565b6040805194855260208501939093529183015263ffffffff16606082015260800160405180910390a290505b919050565b6135ba33613f6e565b50335f908152600c6020526040812060020180546015906135ea90600160a81b90046001600160401b0316617d0f565b82546001600160401b038083166101009490940a8481029102199091161790925560405190815290915033907f2372996d0929efe8a23b6f30910b8047be7f973b1bfa8bf5ef6dbe702521591f9060200160405180910390a250565b606061365182613f0d565b505f61368c61365f84615945565b6136676159f3565b604051602001613678929190617d47565b604051602081830303815290604052615a3d565b90508060405160200161369f9190617e36565b604051602081830303815290604052915050919050565b6136be613f45565b3068929eee149b4bd2126854036136dc5763ab143c065f526004601cfd5b3068929eee149b4bd21268555f6136f2836140a7565b6001600160a01b0384165f908152600f60205260409020805491925090600160e01b900460ff16600181600681111561372d5761372d617487565b1415801561374d5750600281600681111561374a5761374a617487565b14155b801561376b5750600381600681111561376857613768617487565b14155b1561378b5780604051633ba7bf8960e11b8152600401610ee39190617c88565b815460ff600160f01b9091048116908516811015806137b25750600d5460ff908116908616115b156137dd57604051633abb443b60e21b815260ff808316600483015286166024820152604401610ee3565b60ff8082165f908152600a602052604080822054928816825281205490828211613807575f613811565b6138118383617b25565b90508034146138355760405163222d164360e21b8152346004820152602401610ee3565b600185600681111561384957613849617487565b03613966578015613886576001600160a01b0389165f908152600b60205260408120805483929061387b908490617bb0565b9091555061389a9050565b8282101561389a5761389a89888585615a63565b855460ff60f01b1916600160f01b60ff8a16021786556001600160a01b03808a165f908152600c60205260409020600201541615613903576001600160a01b0389165f908152600c60205260409020600201805460ff60a01b1916600160a01b60ff8b16021790555b6040805160ff80871682528a166020820152908101849052606081018390526001600160a01b038a16907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a250505050505050613b8b565b5f602e5f8b6001600160a01b03166001600160a01b031681526020019081526020015f206040518060800160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160059054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481525050905060405180608001604052808a60ff168152602001600d60169054906101000a900463ffffffff1663ffffffff168152602001336001600160a01b0316815260200183815250602e5f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548163ffffffff021916908363ffffffff1602179055506040820151815f0160056101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160010155905050613b088a602c6157bf90919063ffffffff16565b50606081015115613b2557613b2581604001518260600151614123565b600d546040805160ff8c168152600160b01b90920463ffffffff16602083015281018390526001600160a01b038b16907fdffa95238a907cf8b6360a883f195928a82c8d7746dfe6fca84936929024a9d59060600160405180910390a250505050505050505b3868929eee149b4bd21268555050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b613bd0613ed9565b613bd982613f6e565b506001600160a01b0382165f818152600f602090815260409182902080546001600160f81b0316600160f81b60ff87169081029190911790915591519182527ffa96cc66d1772e5646f86e374867e4e32b5b448b2aadb331568e34c2d063e45591015b60405180910390a25050565b613c50613ed9565b6001600160a01b038116613c7957604051631e4fbdf760e01b81525f6004820152602401610ee3565b61157281614b95565b613c8a613f45565b3068929eee149b4bd212685403613ca85763ab143c065f526004601cfd5b3068929eee149b4bd21268555f613cbe836140a7565b6001600160a01b0384165f908152600f60205260409020909150613ce181615bd9565b613d00578060405163c11d33f760e01b8152600401610ee39190617e67565b613d098161571d565b5f613d15858486615c72565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051613d5291815260200190565b60405180910390a25050503868929eee149b4bd21268555050565b5f6001600160e01b031982166380ac58cd60e01b1480613d9d57506001600160e01b03198216635b5e139f60e01b145b80610eb857506301ffc9a760e01b6001600160e01b0319831614610eb8565b6001600160a01b0381165f908152600f602052604090208054602b54600160e01b90910460ff1690613ded826157d3565b15613e0057613dfd600182617b25565b90505b613e0a8482615ded565b5f613e1485611955565b506001600160a01b0387165f908152600b60205260408082208290555191935091505f5160206182325f395f51905f529083908381818185875af1925050503d805f8114613e7d576040519150601f19603f3d011682016040523d82523d5f602084013e613e82565b606091505b5050905080613ea457604051630b567ce360e31b815260040160405180910390fd5b600d54613ebf908690600160b01b900463ffffffff16615f26565b613ec88561571d565b613ed186615f7d565b505050505050565b600d546001600160a01b03620100009091041633146122835760405163118cdaa760e01b8152336004820152602401610ee3565b5f818152600260205260408120546001600160a01b031680610eb857604051637e27328960e01b815260048101849052602401610ee3565b600d54610100900460ff16156122835760405163d93c066560e01b815260040160405180910390fd5b5f6001600160a01b038216613f8281614b42565b613fa25760405163ed15e6cf60e01b815260048101829052602401610ee3565b826001600160a01b0316613fb582612703565b6001600160a01b031614610eb8576040516330fa89ab60e11b815260040160405180910390fd5b6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff1681600681111561401057614010617487565b81600681111561402257614022617487565b1461104b5780604051633ba7bf8960e11b8152600401610ee39190617c88565b61404d816001617c50565b825463ffffffff91909116600160a01b0263ffffffff60a01b19909116178255614078826002615fef565b7f44f68a196beb8e3ae6b6afe9504db62c81b4e511e987a263b4f1a9bc49c90762826040516131679190617e67565b5f6140b182613f6e565b506140bb82614a84565b9050336001600160a01b038316148015906140df5750336001600160a01b03821614155b156135ac5760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b5f61411c836001600160a01b03841661611e565b9392505050565b805f0361412e575050565b604051634875485760e11b81526001600160a01b03831660048201525f60248201525f5160206182325f395f51905f52906390ea90ae90620186a09084906044015f604051808303818589803b158015614186575f5ffd5b5088f19450505050508015614199575060015b611528576001600160a01b0382165f908152602f6020526040812080548392906141c4908490617bb0565b90915550506040518181526001600160a01b038316907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb097321590602001613c3c565b5f8151606014614227576040516333a234f960e11b815260040160405180910390fd5b5f825f8151811061423a5761423a617afd565b016020015160f81c905060808116158061425657506040811615155b15614274576040516333a234f960e11b815260040160405180910390fd5b5f61427f8486616208565b86516040519192505f91829161b1519163a65ebb2560e01b916142a8918a908890602401617ed9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516142e69190617f11565b5f60405180830381855afa9150503d805f811461431e576040519150601f19603f3d011682016040523d82523d5f602084013e614323565b606091505b509150915081158061433757508051602014155b1561435757806040516306fe67db60e31b8152600401610ee3919061724a565b8080602001905181019061436b9190617f1c565b61438a578760405163a865bb3560e01b8152600401610ee39190617f37565b6143948688616258565b98975050505050505050565b60ff81165f908152600a602052604081205483146143d45760405163222d164360e21b815260048101849052602401610ee3565b5090919050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f00000000000000000000000000000000000000000000000000000000000000004614166144ce5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b6719010000000000005f5280601a5281603a52604260182090505f603a52919050565b5f6144fb856162c8565b1561452657846001600160a01b031661451585858561639b565b6001600160a01b0316149050612a80565b61453285858585616415565b95945050505050565b6001600160a01b038381165f818152600f602081815260408084208054825160e08101845287815263ffffffff81860181815294820188815260608301898152608084018a905260ff8e811660a0860152600160f81b86041660c085018190529a909952969095528051935195518516600160c01b0263ffffffff60c01b1996909516600160a01b026001600160c01b031990921693909816929092179190911792831682178155925193949391839160ff60e01b191664ffffffffff60c01b1990911617600160e01b83600681111561461757614617617487565b02179055506080820151815460a084015160c09094015161ffff60e81b19909116600160e81b9215159290920260ff60f01b191691909117600160f01b60ff94851602176001600160f81b0316600160f81b93909116929092029190911790556001600160a01b0384165f908152600f60205260409020614699816001615fef565b6001600160a01b0385165f9081526029602052604090206146bb878983617fa7565b506001600160a01b0385165f908152600b602052604090819020849055517f9d9bab592843361c508cec6cc23820609c04fe07a621d03bf04b7520759d364190614706908390617e67565b60405180910390a150505050505050565b6001600160a01b0382165f908152600b60205260408120548183821161473d575f614532565b6145328483617b25565b811580614752575080155b8061475c57508181115b1561152857604051635700689f60e11b81526004810183905260248101829052604401610ee3565b61478f816004615fef565b805463ffffffff60c01b191663ffffffff60c01b1781556040517f170cba9e80cc0d156bc6ed689fa1d09ee788e1000c092512ef8698454b2081ee90611d30908390617e67565b5f8160068111156147e9576147e9617487565b14806148065750600681600681111561480457614804617487565b145b156115725780604051633ba7bf8960e11b8152600401610ee39190617c88565b6060610eb8602a5f84600681111561484057614840617487565b60ff1660ff1681526020019081526020015f206157b3565b5f5f61486485846164e8565b6001600160a01b0386165f908152600b6020526040812080549293508392909190614890908490617b25565b9091555050604051634875485760e11b81526001600160a01b0385166004820152602481018290525f5160206182325f395f51905f52906390ea90ae906044015f604051808303815f87803b1580156148e7575f5ffd5b505af11580156148f9573d5f5f3e3d5ffd5b5092979650505050505050565b5f806004836149158688617c6c565b61491f9190618060565b6149299190618079565b90505f601d8260ff166004811061494257614942617afd565b6003020190508563ffffffff168160020160089054906101000a900463ffffffff1663ffffffff161461453257604051634fadd4d360e11b815263ffffffff87166004820152602401610ee3565b5f8061499c8585617c6c565b90505f6004826149ac8683618060565b6149b6919061809a565b6149c09190618079565b90505f60118260ff16600481106149d9576149d9617afd565b6003020190508663ffffffff168160020160089054906101000a900463ffffffff1663ffffffff1614614a2757604051634fadd4d360e11b815263ffffffff88166004820152602401610ee3565b9695505050505050565b614a39616548565b600d805461ff00191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038082165f908152600c60205260408120600281015491929091168061411c57509192915050565b6001600160a01b038216614adc57604051633250574960e11b81525f6004820152602401610ee3565b5f614ae883835f616570565b90506001600160a01b0381161561104b576040516339e3563760e11b81525f6004820152602401610ee3565b604080516020838101516001600160fd1b031682528284015190820152606092830151918101919091522090565b5f811580614b5757506001600160a01b038210155b15614b785760405163ed15e6cf60e01b815260048101839052602401610ee3565b505f908152600260205260409020546001600160a01b0316151590565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60015b8181101561104b57828282818110614c0d57614c0d617afd565b9050602002016020810190614c229190617203565b6001600160a01b03168383614c38600185617b25565b818110614c4757614c47617afd565b9050602002016020810190614c5c9190617203565b6001600160a01b031610614cc0578282614c77600184617b25565b818110614c8657614c86617afd565b9050602002016020810190614c9b9190617203565b60405163836e3a7d60e01b81526001600160a01b039091166004820152602401610ee3565b600101614bf3565b5f614cd3602c6157b3565b600d54909150600160b01b900463ffffffff165f805b8351811015615089575f848281518110614d0557614d05617afd565b6020908102919091018101516001600160a01b038082165f908152602e84526040908190208151608081018352815460ff811680835263ffffffff61010083041697830197909752600160281b900490931691830191909152600101546060820152909250901580614d9557506001600160a01b0382165f908152600f6020526040902054600160e81b900460ff165b15614daa57614da38261663b565b5050615081565b6001600160a01b0382165f908152600f60209081526040808320805460ff600160f01b9091048116808652600a909452828520548651909116855291909320548181108015614e14575060018560200151614e059190617c50565b63ffffffff168963ffffffff16105b15614e2457505050505050615081565b6001600160a01b0386165f908152602e6020526040812080546001600160c81b031916815560010155614e58602c87614108565b505f82821115614e995760608601516001600160a01b0388165f908152600b602052604081208054909190614e8e908490617bb0565b90915550614faa9050565b5f614ea48385617b25565b6001600160a01b0389165f908152600b6020526040902054909150848110614ece57819250614ee3565b83811115614ee357614ee08482617b25565b92505b8215614f91576001600160a01b0389165f908152600b602052604081208054859290614f10908490617b25565b909155505f9050614f208a614a84565b6001600160a01b0381165f908152602f6020526040812080549293508692909190614f4c908490617bb0565b90915550506040518481526001600160a01b038216907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732159060200160405180910390a2505b614f9b8383617b25565b614fa5908c617bb0565b9a5050505b8551855460ff909116600160f01b0260ff60f01b199091161785556001600160a01b038781165f908152600c602052604090206002015416156150205785516001600160a01b0388165f908152600c60205260409020600201805460ff909216600160a01b0260ff60a01b199092169190911790555b85516040805160ff808816825290921660208301528101849052606081018390526001600160a01b038816907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a2505050505050505b600101614ce9565b50801561104b576040515f905f5160206182325f395f51905f529083908381818185875af1925050503d805f81146150dc576040519150601f19603f3d011682016040523d82523d5f602084013e6150e1565b606091505b5050905080611b5857604051630b567ce360e31b815260040160405180910390fd5b600d545f9081908190606090600160d01b900460ff16826004615127836001618060565b6151319190618079565b600d805460ff60d01b1916600160d01b60ff841602178082559192505f9160169061516890600160b01b900463ffffffff166180b3565b91906101000a81548163ffffffff021916908363ffffffff160217905590505f601d8360ff166004811061519e5761519e617afd565b6003020190505f6151ad612bfd565b90506040518060c001604052808380548060200260200160405190810160405280929190818152602001828054801561520d57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116151ef575b505050918352505060408084015160208301520161522c436001617c31565b6001600160401b0316815263ffffffff80861660208301526060808501519091166040830152600d5460ff908116919092015260119086166004811061527457615274617afd565b600302015f820151815f01908161528b91906180ce565b50602082015160018201556040820151600291820180546060850151608086015160a0909601516001600160401b039094166001600160601b031990921691909117600160401b63ffffffff928316021764ffffffffff60601b1916600160601b919095160260ff60801b191693909317600160801b60ff90921691909102179091555f9060049061531e908790618060565b6153289190618079565b90506040518060c001604052808c81526020015f81526020015f6001600160401b0316815260200185600261535d9190617c50565b63ffffffff1681525f60208201819052604090910152601d60ff83166004811061538957615389617afd565b600302015f820151815f0190816153a091906180ce565b50602082810151600183015560408084015160029093018054606080870151608088015160a09098015160ff16600160801b0260ff60801b1963ffffffff998a16600160601b021664ffffffffff60601b1999909216600160401b026001600160601b03199094166001600160401b039098169790971792909217969096161793909317909255848201519285015186548351818402810184019094528084528894939192889291839183018282801561548157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311615463575b5050505050905099509950995099505050505050509193509193565b5f6154a86002614826565b90505f5b8151811015615506575f600f5f8484815181106154cb576154cb617afd565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2090506154fd8161675d565b506001016154ac565b505f6155126004614826565b600d54909150600160d01b900460ff165f6004615530836001618060565b61553a9190618079565b90505f7fbd0b8371ed11e4a5f6acd1f1a0d78b3f7e6ab3473c6396c9f28027132562600c8660405160200161558692919091825260e01b6001600160e01b031916602082015260240190565b60405160208183030381529060405280519060200120905061561560118460ff16600481106155b7576155b7617afd565b6003020180546040805160208084028201810190925282815292919083018282801561560a57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116155ec575b505050505082616797565b61562e601d8360ff16600481106155b7576155b7617afd565b61566b8888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859250616797915050565b5f5b84518110156156d3575f85828151811061568957615689617afd565b6020026020010151905061569d81846167e7565b156156a857506156cb565b6001600160a01b0381165f908152600f602052604090206156c99089615f26565b505b60010161566d565b505050505050505050565b6156e6613f45565b600d805461ff0019166101001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614a673390565b615728816006615fef565b805460ff60e81b198116600160e81b17825561574c906001600160a01b031661663b565b7ffab16134cb74fff6e7d137bf93f6b2ab4c1c61cbe53dad2c8cb57744353bd39b81604051611d309190617e67565b5f6157875f835f616570565b90506001600160a01b03811661152857604051637e27328960e01b815260048101839052602401610ee3565b60605f61411c83616804565b5f61411c836001600160a01b03841661685d565b5f60038260068111156157e8576157e8617487565b14806158055750600482600681111561580357615803617487565b145b80610eb85750600282600681111561581f5761581f617487565b1492915050565b6001600160a01b0383163b1561121157604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290615868908890889087908790600401618152565b6020604051808303815f875af19250505080156158a2575060408051601f3d908101601f1916820190925261589f91810190618184565b60015b615909573d8080156158cf576040519150601f19603f3d011682016040523d82523d5f602084013e6158d4565b606091505b5080515f0361590157604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14613ed157604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b60605f615951836168a9565b6028602282012090915060601c60295b60018111156159ea57600782600f161180156159965750606083828151811061598c5761598c617afd565b016020015160f81c115b156159d357602060f81b8382815181106159b2576159b2617afd565b0160200180516001600160f81b0319908116909218909116905f82901a9053505b60049190911c906159e38161819f565b9050615961565b50909392505050565b6060615a196040518061052001604052806104ed81526020016182526104ed9139615a3d565b604051602001615a2991906181b4565b604051602081830303815290604052905090565b6060610eb88260405180606001604052806040815260200161873f6040913960016168bf565b5f615a6e8284617b25565b6001600160a01b0386165f908152600b6020526040812054919250848210615a97575081615aac565b83821115615aac57615aa98483617b25565b90505b8015615b49576001600160a01b0387165f908152600b602052604081208054839290615ad9908490617b25565b9091555050604051634875485760e11b81526001600160a01b03871660048201525f60248201525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615b31575f5ffd5b505af1158015615b43573d5f5f3e3d5ffd5b50505050505b5f615b548285617b25565b90508015615bcf576040515f905f5160206182325f395f51905f529083908381818185875af1925050503d805f8114615ba8576040519150601f19603f3d011682016040523d82523d5f602084013e615bad565b606091505b50509050806156d357604051630b567ce360e31b815260040160405180910390fd5b5050505050505050565b80545f90600160e01b900460ff166001816006811115615bfb57615bfb617487565b03615c095750600192915050565b82545f90615c2590600160c01b900463ffffffff166001617c50565b90506005826006811115615c3b57615c3b617487565b148015615c5a5750600d5463ffffffff808316600160b01b9092041610155b15615c69575060019392505050565b505f9392505050565b5f615c7c84615f7d565b5f5f5f615c8887611955565b925092509250825f03615ca05782935050505061411c565b6001600160a01b0387165f908152600b60205260408120819055828410615cc8575081615d45565b50825f5f5160206182325f395f51905f52615ce38386617b25565b6040515f81818185875af1925050503d805f8114615d1c576040519150601f19603f3d011682016040523d82523d5f602084013e615d21565b606091505b5050905080615d4357604051630b567ce360e31b815260040160405180910390fd5b505b858015615d5f57505f5160206182325f395f51905f523182115b15615d76575f5160206182325f395f51905f523191505b604051634875485760e11b81526001600160a01b0388166004820152602481018390525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615dca575f5ffd5b505af1158015615ddc573d5f5f3e3d5ffd5b505050505081816143949190617bb0565b600d54600160b01b810463ffffffff1690600160d01b900460ff165f615e14838084614990565b9050615e208186616a39565b508054615e2d8582614747565b5f615e39856001617c50565b90505f615e47828787614906565b9050615e538189616a39565b5080549250615e628784614747565b5f615e6e876002617c50565b90505f615e7c828989614906565b9050615e88818b616a39565b5080549450615e978986614747565b600d54600160d81b900461ffff16891015615f1a57600d805461ffff8b8116600160d81b90810261ffff60d81b1984161793849055604080519382900483168085529190940490911660208301529181018b90527f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505b50505050505050505050565b615f31826005615fef565b815463ffffffff60c01b1916600160c01b63ffffffff8316021782556040517f727bfc4079207401298f48a3f1a92c9b40d83e086fe5b584a7b0644fdbdb56ee90613167908490617e67565b615f8f6001600160a01b03821661577b565b6008545f03615fb1576040516315ae672760e01b815260040160405180910390fd5b6001600160a01b03165f908152600c602052604081209081556001810180546001600160a01b031916905560020180546001600160e81b0319169055565b81546001600160a01b03811690600160e01b900460ff1661603782602a5f84600681111561601f5761601f617487565b60ff16815260208101919091526040015f2090614108565b505f83600681111561604b5761604b617487565b1415801561606b5750600683600681111561606857616068617487565b14155b1561608b5761608982602a5f8660068111156130f5576130f5617487565b505b5f616095826157d3565b90505f6160a1856157d3565b90508180156160ae575080155b156160ca57602b5f81546160c19061819f565b909155506160ed565b811580156160d55750805b156160ed57602b5f81546160e890617c96565b909155505b85548590879060ff60e01b1916600160e01b83600681111561611157616111617487565b0217905550505050505050565b5f81815260018301602052604081205480156161f8575f616140600183617b25565b85549091505f9061615390600190617b25565b90508082146161b2575f865f01828154811061617157616171617afd565b905f5260205f200154905080875f01848154811061619157616191617afd565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806161c3576161c36181e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610eb8565b5f915050610eb8565b5092915050565b6060825160601461622c576040516333a234f960e11b815260040160405180910390fd5b604051616241905f90859085906020016181f9565b604051602081830303815290604052905092915050565b5f61626283614b14565b5f818152601060205260409020549091506001600160a01b03161561629a57604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b5f6017826001600160a01b03163b146162e257505f919050565b5f826001600160a01b0316803b806020016040519081016040528181525f908060200190933c805190915060ef60f81b9082905f9061632357616323617afd565b01602001516001600160f81b03191614801561636657508051600160f81b908290600190811061635557616355617afd565b01602001516001600160f81b031916145b801561411c575080515f908290600290811061638457616384617afd565b01602001516001600160f81b031916149392505050565b5f60405182604081146163b657604181146163dd5750611ce3565b60208581013560ff81901c601b0190915285356040526001600160ff1b03166060526163ee565b60408501355f1a6020526040856040375b50845f526020604060805f60015afa505f6060523d60601851915080604052509392505050565b5f6001600160a01b03851615612a8057604051853b6164a5578260408114616445576041811461646c57506164df565b60208581013560ff81901c601b0190915285356040526001600160ff1b031660605261647d565b60408501355f1a6020526040856040375b50845f526020600160805f60015afa5180871860601b3d119250505f606052806040526164df565b631626ba7e60e01b80825285600483015260248201604081528460448401528486606485013760208160648701858b5afa90519091141691505b50949350505050565b60ff81165f908152600a6020526040812054816165058583614717565b9050801580616527575060ff84165f908152600a602052604090206001015481105b15612a8057604051633737b70960e11b815260048101829052602401610ee3565b600d54610100900460ff1661228357604051638dfc202b60e01b815260040160405180910390fd5b5f5f61657d858585616b3e565b90506001600160a01b0381166165d9576165d484600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6165fc565b846001600160a01b0316816001600160a01b0316146165fc576165fc8185616c30565b6001600160a01b0385166166185761661384616cad565b612a80565b846001600160a01b0316816001600160a01b031614612a8057612a808585616d54565b6001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b90049095169185019190915260010154606084015290036166a45761104b602c83614108565b6001600160a01b0382165f908152602e6020526040812080546001600160c81b0319168155600101556166d8602c83614108565b506060810151156115285760608101516040808301516001600160a01b03165f908152602f6020529081208054909190616713908490617bb0565b9250508190555080604001516001600160a01b03167f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732158260600151604051613c3c91815260200190565b616768816003615fef565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b81604051611d309190617e67565b5f5b825181101561104b576167df60016167d96167d68685815181106167bf576167bf617afd565b602002602001015186616da290919063ffffffff16565b90565b90616dbc565b600101616799565b6001600160a01b0382165f9081526020829052604081205c61411c565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561685157602002820191905f5260205f20905b81548152602001906001019080831161683d575b50505050509050919050565b5f8181526001830160205260408120546168a257508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610eb8565b505f610eb8565b6060610eb86001600160a01b0383166014616dc3565b606083515f036168dd575060408051602081019091525f815261411c565b5f8261690d576003855160046168f39190617b99565b6168fe906002617bb0565b6169089190617bd7565b616932565b60038551600261691d9190617bb0565b6169279190617bd7565b616932906004617b99565b90505f816001600160401b0381111561694d5761694d6172d8565b6040519080825280601f01601f191660200182016040528015616977576020820181803683370190505b509050600185016020820187885189016020810180515f82525b828410156169ec576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450616991565b905250508515616a2d57600388510660018114616a105760028114616a2357616a2b565b603d6001830353603d6002830353616a2b565b603d60018303535b505b50909695505050505050565b81545f90815b81811015616b3457836001600160a01b0316858281548110616a6357616a63617afd565b5f918252602090912001546001600160a01b031603616b2c5784616a88600184617b25565b81548110616a9857616a98617afd565b905f5260205f20015f9054906101000a90046001600160a01b0316858281548110616ac557616ac5617afd565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084805480616b0057616b006181e5565b5f8281526020902081015f1990810180546001600160a01b03191690550190555060019150610eb89050565b600101616a3f565b505f949350505050565b5f828152600260205260408120546001600160a01b0390811690831615616b6a57616b6a818486616f34565b6001600160a01b03811615616ba457616b855f855f5f616f98565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615616bd2576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f616c3a836129f0565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314616c8f575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90616cbe90600190617b25565b5f8381526009602052604081205460088054939450909284908110616ce557616ce5617afd565b905f5260205f20015490508060088381548110616d0457616d04617afd565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480616d3b57616d3b6181e5565b600190038181905f5260205f20015f9055905550505050565b5f6001616d60846129f0565b616d6a9190617b25565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03165f9081526020919091526040902090565b80825d5050565b6060825f616dd2846002617b99565b616ddd906002617bb0565b6001600160401b03811115616df457616df46172d8565b6040519080825280601f01601f191660200182016040528015616e1e576020820181803683370190505b509050600360fc1b815f81518110616e3857616e38617afd565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110616e6657616e66617afd565b60200101906001600160f81b03191690815f1a9053505f616e88856002617b99565b616e93906001617bb0565b90505b6001811115616f0a576f181899199a1a9b1b9c1cb0b131b232b360811b83600f1660108110616ec757616ec7617afd565b1a60f81b828281518110616edd57616edd617afd565b60200101906001600160f81b03191690815f1a90535060049290921c91616f038161819f565b9050616e96565b508115612a805760405163e22e27eb60e01b81526004810186905260248101859052604401610ee3565b616f3f83838361709c565b61104b576001600160a01b038316616f6d57604051637e27328960e01b815260048101829052602401610ee3565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610ee3565b8080616fac57506001600160a01b03821615155b1561706d575f616fbb84613f0d565b90506001600160a01b03831615801590616fe75750826001600160a01b0316816001600160a01b031614155b8015616ffa5750616ff88184613b9b565b155b156170235760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610ee3565b811561706b5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b03831615801590612a805750826001600160a01b0316846001600160a01b031614806170d557506170d58484613b9b565b80612a805750505f908152600460205260409020546001600160a01b03908116911614919050565b6040805160e0810182525f8082526020820181905291810182905290606082019081525f602082018190526040820181905260609091015290565b6001600160e01b031981168114611572575f5ffd5b5f6020828403121561715d575f5ffd5b813561411c81617138565b5f5f83601f840112617178575f5ffd5b5081356001600160401b0381111561718e575f5ffd5b6020830191508360208260061b85010111156171a8575f5ffd5b9250929050565b5f5f602083850312156171c0575f5ffd5b82356001600160401b038111156171d5575f5ffd5b6171e185828601617168565b90969095509350505050565b80356001600160a01b03811681146135ac575f5ffd5b5f60208284031215617213575f5ffd5b61411c826171ed565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61411c602083018461721c565b5f6020828403121561726c575f5ffd5b5035919050565b5f5f60408385031215617284575f5ffd5b61728d836171ed565b946020939093013593505050565b5f5f83601f8401126172ab575f5ffd5b5081356001600160401b038111156172c1575f5ffd5b6020830191508360208285010111156171a8575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126172fb575f5ffd5b81356001600160401b03811115617314576173146172d8565b604051601f8201601f19908116603f011681016001600160401b0381118282101715617342576173426172d8565b604052818152838201602001851015617359575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215617385575f5ffd5b604051602081016001600160401b03811182821017156173a7576173a76172d8565b60405290508082356001600160401b038111156173c2575f5ffd5b6173ce858286016172ec565b8252505092915050565b5f5f5f5f5f5f5f60a0888a0312156173ee575f5ffd5b87356001600160401b03811115617403575f5ffd5b61740f8a828b0161729b565b90985096505060208801356001600160401b0381111561742d575f5ffd5b6174398a828b01617375565b955050617448604089016171ed565b935060608801356001600160401b03811115617462575f5ffd5b61746e8a828b0161729b565b989b979a50959894979596608090950135949350505050565b634e487b7160e01b5f52602160045260245ffd5b600781106174b757634e487b7160e01b5f52602160045260245ffd5b9052565b60018060a01b03815116825263ffffffff602082015116602083015263ffffffff604082015116604083015260608101516174f9606084018261749b565b5060808101511515608083015260ff60a08201511660a083015260c081015161104b60c084018260ff169052565b60e08101610eb882846174bb565b5f5f5f60608486031215617547575f5ffd5b617550846171ed565b925061755e602085016171ed565b929592945050506040919091013590565b5f6020828403121561757f575f5ffd5b81356007811061411c575f5ffd5b602080825282518282018190525f918401906040840190835b818110156175cf576175b98385516174bb565b6020939093019260e092909201916001016175a6565b509095945050505050565b8015158114611572575f5ffd5b5f602082840312156175f7575f5ffd5b813561411c816175da565b5f5f5f60408486031215617614575f5ffd5b83356001600160401b03811115617629575f5ffd5b6176358682870161729b565b90945092505060208401356001600160401b03811115617653575f5ffd5b61765f86828701617375565b9150509250925092565b63ffffffff81168114611572575f5ffd5b5f6020828403121561768a575f5ffd5b813561411c81617669565b5f8151808452602084019350602083015f5b828110156176ce5781516001600160a01b03168652602095860195909101906001016176a7565b5093949350505050565b602081525f825160c060208401526176f360e0840182617695565b9050602084015160408401526001600160401b03604085015116606084015263ffffffff606085015116608084015263ffffffff60808501511660a084015260ff60a08501511660c08401528091505092915050565b5f60208284031215617759575f5ffd5b813561ffff8116811461411c575f5ffd5b5f5f6020838503121561777b575f5ffd5b82356001600160401b03811115617790575f5ffd5b6171e18582860161729b565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156177f357603f198786030184526177de85835161721c565b945060209384019391909101906001016177c2565b50929695505050505050565b5f5f60208385031215617810575f5ffd5b82356001600160401b03811115617825575f5ffd5b8301601f81018513617835575f5ffd5b80356001600160401b0381111561784a575f5ffd5b8560208260051b840101111561785e575f5ffd5b6020919091019590945092505050565b60ff60f81b8816815260e060208201525f61788c60e083018961721c565b828103604084015261789e818961721c565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156178f35783518352602093840193909201916001016178d5565b50909b9a5050505050505050505050565b602081525f61411c6020830184617695565b5f5f60408385031215617927575f5ffd5b617930836171ed565b91506020830135617940816175da565b809150509250929050565b803560ff811681146135ac575f5ffd5b5f6020828403121561796b575f5ffd5b61411c8261794b565b5f5f5f5f60808587031215617987575f5ffd5b84356001600160401b0381111561799c575f5ffd5b6179a8878288016172ec565b9450506179b7602086016171ed565b92506179c5604086016171ed565b9396929550929360600135925050565b5f5f5f5f608085870312156179e8575f5ffd5b6179f1856171ed565b93506179ff602086016171ed565b92506040850135915060608501356001600160401b03811115617a20575f5ffd5b617a2c878288016172ec565b91505092959194509250565b5f6080828403128015617a49575f5ffd5b509092915050565b5f5f60408385031215617a62575f5ffd5b617a6b836171ed565b9150617a796020840161794b565b90509250929050565b5f5f60408385031215617a93575f5ffd5b617a9c836171ed565b9150617a79602084016171ed565b6001600160a01b038816815263ffffffff87811660208301528616604082015260e08101617adb606083018761749b565b931515608082015260ff92831660a0820152911660c090910152949350505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610eb857610eb8617b11565b604081016001600160a01b03617b4d846171ed565b168252602092830135929091019190915290565b600181811c90821680617b7557607f821691505b602082108103617b9357634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610eb857610eb8617b11565b80820180821115610eb857610eb8617b11565b634e487b7160e01b5f52601260045260245ffd5b5f82617be557617be5617bc3565b500490565b96875260208701959095526001600160a01b03938416604087015291909216606085015260ff90911660808401526001600160401b031660a083015260c082015260e00190565b6001600160401b038181168382160190811115610eb857610eb8617b11565b63ffffffff8181168382160190811115610eb857610eb8617b11565b63ffffffff8281168282160390811115610eb857610eb8617b11565b60208101610eb8828461749b565b5f60018201617ca757617ca7617b11565b5060010190565b5f60ff821660ff8103617cc357617cc3617b11565b60010192915050565b813581556020820135600182015560408201356002820155600381016060830135617cf681617669565b815463ffffffff191663ffffffff919091161790555050565b5f6001600160401b0382166001600160401b038103617cc357617cc3617b11565b5f81518060208401855e5f93019283525090919050565b7f7b226e616d65223a202254656c636f696e2d4e6574776f726b20436f6e73656e8152651cdd5cd3919560d21b60208201525f617d876026830185617d30565b7f222c20226465736372697074696f6e223a2022455243373231204e465420776881527f6f7365206f776e657273686970206c656467657220726570726573656e74732060208201527f746865207065726d697373696f6e65642077686974656c69737420666f72207660408201527530b634b230ba37b9399116101134b6b0b3b2911d101160511b6060820152617e226076820185617d30565b61227d60f01b815260020195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f61411c601d830184617d30565b81546001600160a01b038116825263ffffffff60a082901c8116602084015260c082901c16604083015260e0820190617ea96060840160ff8360e01c1661749b565b617ebd6080840160ff8360e81c1615159052565b60f081901c60ff1660a084015260f881901c60c0840152616201565b606081525f617eeb606083018661721c565b8281036020840152617efd818661721c565b90508281036040840152614a27818561721c565b5f61411c8284617d30565b5f60208284031215617f2c575f5ffd5b815161411c816175da565b602081525f8251602080840152612a80604084018261721c565b5f5b8281101561104b575f82820155600101617f53565b601f82111561104b578282111561104b57805f5260205f20601f840160051c6020851015617f9357505f5b61121181601f860160051c03828401617f51565b6001600160401b03831115617fbe57617fbe6172d8565b617fd283617fcc8354617b61565b83617f68565b5f601f841160018114618003575f8515617fec5750838201355b5f19600387901b1c1916600186901b178355611211565b5f83815260208120601f198716915b828110156180325786850135825560209485019460019092019101618012565b508682101561804e575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60ff8181168382160190811115610eb857610eb8617b11565b5f60ff83168061808b5761808b617bc3565b8060ff84160691505092915050565b60ff8281168282160390811115610eb857610eb8617b11565b5f63ffffffff821663ffffffff8103617cc357617cc3617b11565b81516001600160401b038111156180e7576180e76172d8565b600160401b8111156180fb576180fb6172d8565b81548183558082101561811f57825f528160205f200161811d83830382617f51565b505b5060208301825f5260205f205f5b83811015613ed15782516001600160a01b03168282015560209092019160010161812d565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614a279083018461721c565b5f60208284031215618194575f5ffd5b815161411c81617138565b5f816181ad576181ad617b11565b505f190190565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081525f61411c601a830184617d30565b634e487b7160e01b5f52603160045260245ffd5b6001600160e81b0319841681525f6182146003830185617d30565b60609390931b6001600160601b031916835250506014019291505056fe00000000000000000000000007a07a07a07a07a07a07a07a07a07a07a07a07a03c7376672077696474683d22373922206865696768743d223830222076696577426f783d22302030203739203830222066696c6c3d226e6f6e652220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e203c6d61736b2069643d226d61736b305f3834395f3334313722207374796c653d226d61736b2d747970653a616c70686122206d61736b556e6974733d227573657253706163654f6e5573652220783d22302220793d2230222077696474683d22373922206865696768743d223830223e203c726563742077696474683d2237382e30303522206865696768743d223830222066696c6c3d2223433443344334222f3e203c2f6d61736b3e203c67206d61736b3d2275726c28236d61736b305f3834395f3334313729223e203c7265637420783d2231372e393534362220793d2231382e33353435222077696474683d2234322e3239343322206865696768743d2234332e32393138222066696c6c3d227768697465222f3e203c7061746820643d224d37342e323336392032312e393839324337362e363930382032342e303331352037382e323338392032382e323537372037372e363937392033312e333733334c37322e343136362036312e333235334337312e3836362036342e343437352036382e393539322036372e383739382036352e393632392036382e393631324c33372e313934372037392e333334344333342e313938342038302e343135372032392e373432312037392e363239392032372e323936342037372e3538394c332e3831312035382e3030323143312e33353730382035352e39353938202d302e31393233382035312e3734313720302e3335383134382034382e363139354c352e36333935312031382e3636373443362e31393030342031352e3534353220392e30393638372031322e313132392031322e303933322031312e303331364c34302e3835393920302e3636363435334334332e38353632202d302e3431343835372034382e3331323520302e3337303930392035302e3735383320322e343131384c37342e323336392032312e393839325a4d34392e373634352033352e343336394c35302e393336342032392e333531334c33392e393531372032392e333638374c34312e3531362032312e333432344c33372e393538332032312e333432344333372e393538332032312e333432342033342e363332382032372e323930312032372e333030362033302e323031394c32362e323839392033352e343530334c33312e303933362033352e34364333312e303933362033352e34362032392e343637342034332e303032392032382e393331362034352e373835344332372e353637372035322e383638322033302e393830362035372e383933392033362e323238312035372e383933394333382e383630362035372e383933392034312e3831372035372e383933392034352e303937322035372e383933394c34362e363532342035312e313636364334362e323734322035312e313636362034332e383031332035312e313636362033392e323333362035312e313636364333352e393336342035312e313636362033362e313039392034392e333138392033362e373433312034362e303330354c33382e373833382033352e343333334c34392e373634352033352e343336395a222066696c6c3d2223313443384646222f3e203c2f673e203c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa164736f6c6343000823000a","sourceMap":"1341:77521:56:-:0;;;74082:4143;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;74325:6;2968:78:58;;;;;;;;;;;;;-1:-1:-1;;;2968:78:58;;;;;;;;;;;;;;;;-1:-1:-1;;;2968:78:58;;;3029:4;3035:6;1454:5:27;1446;:13;;;;;;:::i;:::-;-1:-1:-1;1469:7:27;:17;1479:7;1469;:17;:::i;:::-;-1:-1:-1;;3066:4:51;3028:45;;-1:-1:-1;3100:13:51;3083:30;;3124:18;;3240:23;13733:36:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13733:36:58;;;;;13620:156;3240:23:51;3340:22;;;;;;;3454:25;;;;;;;;;3489:26;;;;3525:32;;;;3737:4;3731:11;;3802:16;3792:27;;3843:12;;;3836:30;;;;3890:12;;;3883:33;3954:9;3947:4;3940:12;;3933:31;4002:9;3995:4;3988:12;;3981:31;4055:4;4042:18;;4093:34;;-1:-1:-1;;1231:7:39;:15;;-1:-1:-1;;1231:15:39;;;-1:-1:-1;;;;;;;1273:26:20;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:20;;1350:1;1322:31;;;10549:51:73;10522:18;;1322:31:20;;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;74409:25:56;;:30;;:81:::2;;;74472:11;:18;74443;:25;:47;;74409:81;:155;;;;74539:18;:25;74510:18;:25;:54;;74409:155;74392:237;;;74596:22;;-1:-1:-1::0;;;74596:22:56::2;;;;;;;;;;;74392:237;74680:14;:28;;;:33;;74712:1;74680:33:::0;74676:91:::2;;74738:28;::::0;::::2;::::0;74722:45:::2;::::0;-1:-1:-1;;;74722:45:56;;10785:10:73;10773:23;;;74722:45:56::2;::::0;::::2;10755:42:73::0;10728:18;;74722:45:56::2;10611:192:73::0;74676:91:56::2;74777:11;::::0;;;:8:::2;:11;::::0;;;:28;;:11;:28;;::::2;::::0;;;:11;:28;::::2;::::0;;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;74777:28:56::2;;::::0;;::::2;::::0;;;::::2;::::0;;74963:25;;74936:17:::2;:53:::0;;-1:-1:-1;;;;74936:53:56::2;-1:-1:-1::0;;;74936:53:56::2;::::0;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;75244:312:::2;75265:1;75260;:6;75244:312;;75287:23;75313:9;75323:1;75313:12;;;;;;;:::i;:::-;;;;75339:13;::::0;::::2;:25:::0;;75400:28:::2;::::0;::::2;::::0;-1:-1:-1;;;;;;;;75378:50:56;;;75339:25;::::2;::::0;;::::2;::::0;;;::::2;-1:-1:-1::0;;;;75378:50:56;;;;;;;;;::::2;;;::::0;;75464:28:::2;::::0;::::2;::::0;-1:-1:-1;75442:19:56;::::2;:50:::0;75313:12;-1:-1:-1;75339:25:56;75507:15:::2;75339:25:::0;75507:18:::2;::::0;::::2;;;;;:::i;:::-;;;;:26;;;:38;;;;;;;;;;;;;;;;;;75273:283;75268:3;;;;:::i;:::-;;;75244:312;;;;75605:9;75600:2487;75620:18;:25;75616:1;:29;75600:2487;;;75666:37;75706:18;75725:1;75706:21;;;;;;;;:::i;:::-;;;;;;;75666:61;;75741:21;75781:98;75806:18;75825:1;75806:21;;;;;;;;:::i;:::-;;;;;;;75829:16;:33;;;75864:11;75876:1;75864:14;;;;;;;;:::i;:::-;;;;;;;75781:24;;;:98;;:::i;:::-;76162:33:::0;;75741:138;;-1:-1:-1;;;;;;76162:49:56::2;::::0;;:136:::2;;-1:-1:-1::0;76243:33:56;;-1:-1:-1;;;;;76235:63:56;;::::2;;76162:136;76141:237;;;76338:25;;-1:-1:-1::0;;;76338:25:56::2;;;;;;;;;;;76141:237;76395:32;::::0;::::2;::::0;:45:::2;;::::0;76391:137:::2;;76480:32;::::0;::::2;::::0;76467:46:::2;::::0;-1:-1:-1;;;76467:46:56;;10785:10:73;10773:23;;;76467:46:56::2;::::0;::::2;10755:42:73::0;10728:18;;76467:46:56::2;10611:192:73::0;76391:137:56::2;76545:26;::::0;::::2;::::0;:39:::2;;::::0;76541:125:::2;;76624:26;::::0;;::::2;::::0;76611:40;;-1:-1:-1;;;76611:40:56;;10785:10:73;10773:23;;;76611:40:56::2;::::0;::::2;10755:42:73::0;10728:18;;76611:40:56::2;10611:192:73::0;76541:125:56::2;76717:22;76683:16;:30;;;:56;;;;;;;;:::i;:::-;;76679:147;;76780:16;:30;;;76766:45;;-1:-1:-1::0;;;76766:45:56::2;;;;;;;;:::i;76679:147::-;76843:26;::::0;::::2;::::0;:35:::2;76839:118;;76919:22;76905:37;;-1:-1:-1::0;;;76905:37:56::2;;;;;;;;:::i;76839:118::-;76974:29;::::0;::::2;::::0;:34:::2;;::::0;76970:129:::2;;77054:29;::::0;::::2;::::0;77035:49:::2;::::0;-1:-1:-1;;;77035:49:56;;12072:4:73;12060:17;;;77035:49:56::2;::::0;::::2;12042:36:73::0;12015:18;;77035:49:56::2;11898:186:73::0;76970:129:56::2;77188:9;77183:210;77204:1;77199;:6;77183:210;;77230:9;77240:1;77230:12;;;;;;;:::i;:::-;77258:33:::0;;77230:12:::2;::::0;;;::::2;::::0;;;::::2;:62:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;77230:62:56;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;;;;77230:62:56::2;-1:-1:-1::0;;;;;77230:62:56;;::::2;::::0;;;::::2;::::0;;77310:15:::2;77326:1:::0;77310:18:::2;::::0;::::2;;;;;:::i;:::-;77344:33:::0;;77310:18:::2;::::0;;;::::2;::::0;;;::::2;:68:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;77310:68:56;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;;;;77310:68:56::2;-1:-1:-1::0;;;;;77310:68:56;;::::2;::::0;;;::::2;::::0;;77207:3:::2;::::0;::::2;:::i;:::-;;;77183:210;;;;77455:11;77467:1;77455:14;;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;;;;;77418:33;;-1:-1:-1;;;;;77407:45:56::2;;::::0;;;:10:::2;:45:::0;;;;;;;;:62:::2;::::0;:45;:62:::2;:::i;:::-;-1:-1:-1::0;77494:33:56;;-1:-1:-1;;;;;77483:45:56;;::::2;;::::0;;;:10:::2;:45;::::0;;;;;;;;:64;;;;;;::::2;::::0;;;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;;77483:64:56::2;-1:-1:-1::0;;;;77483:64:56;;;::::2;-1:-1:-1::0;;;77483:64:56::2;-1:-1:-1::0;;;;;;77483:64:56;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;77531:16;;77483:45;;:64;;:45;;-1:-1:-1;;;;77483:64:56;-1:-1:-1;;;;77483:64:56;;;;-1:-1:-1;;;77483:64:56;::::2;::::0;::::2;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;77483:64:56::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;;77483:64:56::2;-1:-1:-1::0;;;;;77483:64:56;;;::::2;-1:-1:-1::0;;;77483:64:56::2;-1:-1:-1::0;;;;77483:64:56;::::2;;-1:-1:-1::0;;;77483:64:56::2;::::0;;;;-1:-1:-1;;;;77483:64:56;;;;;;;;;;::::2;;::::0;;;::::2;::::0;;77709:33;;77680:22:::2;-1:-1:-1::0;77660:44:56;:13:::2;:44;::::0;:83:::2;::::0;:44;;:48:::2;:83::i;:::-;-1:-1:-1::0;77803:26:56;;77766:33;;-1:-1:-1;;;;;77757:43:56;;::::2;77803:26;77757:43:::0;;;:8:::2;:43;::::0;;;;;;;:72;;;;77885:33;;77843:39;;;:24:::2;:39:::0;;;;;;:75;;-1:-1:-1;;;;;;77843:75:56::2;::::0;;;::::2;::::0;;;::::2;::::0;;77938:33;;77932:88:::2;::::0;77973:46:::2;77938:33:::0;-1:-1:-1;;;;;13353:32:58;;13264:128;77973:46:56::2;77932:5;:88::i;:::-;78040:36;78059:16;78040:36;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;75647:3:56::2;;75600:2487;;;-1:-1:-1::0;;78193:25:56;;78168:22:::2;:50:::0;-1:-1:-1;1341:77521:56;;-1:-1:-1;;1341:77521:56;2912:187:20;3004:6;;;-1:-1:-1;;;;;3020:17:20;;;3004:6;3020:17;;;-1:-1:-1;;;;;;3020:17:20;;;;;;3052:40;;3004:6;;;;;;;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;46268:2694:56:-;46464:7;46491:9;:16;46511:2;46491:22;46487:53;;46522:18;;-1:-1:-1;;;46522:18:56;;;;;;;;;;;46487:53;47366:11;47386:9;47396:1;47386:12;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;47421:4:56;47413:12;;:17;;:38;;-1:-1:-1;47442:4:56;47434:12;;:17;;47413:38;47409:69;;;47460:18;;-1:-1:-1;;;47460:18:56;;;;;;;;;;;47409:69;47944:23;47970:53;47995:9;48006:16;47970:24;:53::i;:::-;48639:15;;48589:89;;47944:79;;-1:-1:-1;48518:7:56;;;;572:42:60;;-1:-1:-1;;;48612:25:56;48589:89;;48656:9;;47944:79;;48589:89;;;:::i;:::-;;;;-1:-1:-1;;48589:89:56;;;;;;;;;;;;;;-1:-1:-1;;;;;48589:89:56;-1:-1:-1;;;;;;48589:89:56;;;;;;;;;;48550:138;;;;48589:89;48550:138;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48517:171;;;;48703:2;48702:3;:26;;;;48709:6;:13;48726:2;48709:19;;48702:26;48698:66;;;48757:6;48737:27;;-1:-1:-1;;;48737:27:56;;;;;;;;:::i;48698:66::-;48790:6;48779:26;;;;;;;;;;;;:::i;:::-;48774:71;;48839:5;48814:31;;-1:-1:-1;;;48814:31:56;;;;;;;;:::i;48774:71::-;48911:44;48927:9;48938:16;48911:15;:44::i;:::-;48904:51;46268:2694;-1:-1:-1;;;;;;;;46268:2694:56:o;8289:150:49:-;8359:4;8382:50;8387:3;-1:-1:-1;;;;;8407:23:49;;8382:4;:50::i;:::-;8375:57;;8289:150;;;;;:::o;9978:327:27:-;-1:-1:-1;;;;;10045:16:27;;10041:87;;10084:33;;-1:-1:-1;;;10084:33:27;;10114:1;10084:33;;;10549:51:73;10522:18;;10084:33:27;10403:203:73;10041:87:27;10137:21;10161:32;10169:2;10173:7;10137:21;10161:7;:32::i;:::-;10137:56;-1:-1:-1;;;;;;10207:27:27;;;10203:96;;10257:31;;-1:-1:-1;;;10257:31:27;;10285:1;10257:31;;;10549:51:73;10522:18;;10257:31:27;10403:203:73;10203:96:27;10031:274;9978:327;;:::o;45326:595:56:-;45476:12;45790:6;:13;45807:2;45790:19;45786:50;;45818:18;;-1:-1:-1;;;45818:18:56;;;;;;;;;;;45786:50;45853:61;;;;44899:8;;45889:6;;45897:16;;45853:61;;;:::i;:::-;;;;;;;;;;;;;45846:68;;45326:595;;;;:::o;49072:363::-;50340:4;50334:11;;50199:4;50183:21;;;50378:10;-1:-1:-1;;;;;50374:83:56;50358:100;;50504:14;;;50498:21;50478:18;;;50471:49;50566:14;;;;50560:21;50540:18;;;50533:49;50601:24;;;-1:-1:-1;49247:39:56;;;:24;:39;;;;;;;-1:-1:-1;;;;;49247:39:56;:53;49243:86;;49309:20;;-1:-1:-1;;;49309:20:56;;;;;;;;;;;49243:86;49339:39;;;;:24;:39;;;;;:58;;-1:-1:-1;;;;;49339:58:56;;-1:-1:-1;;;;;;49339:58:56;;;;;;49072:363;;;;:::o;2241:406:49:-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:49;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:49;2618:12;;2518:625:30;2613:7;;2656:32;2670:2;2674:7;2683:4;2656:13;:32::i;:::-;2632:56;-1:-1:-1;;;;;;2703:27:30;;2699:210;;2746:40;2778:7;3949:10;:17;;3922:24;;;;:15;:24;;;;;:44;;;3976:24;;;;;;;;;;;;3846:161;2746:40;2699:210;;;2824:2;-1:-1:-1;;;;;2807:19:30;:13;-1:-1:-1;;;;;2807:19:30;;2803:106;;2842:56;2875:13;2890:7;2842:32;:56::i;:::-;-1:-1:-1;;;;;2922:16:30;;2918:188;;2954:45;2991:7;2954:36;:45::i;:::-;2918:188;;;3037:2;-1:-1:-1;;;;;3020:19:30;:13;-1:-1:-1;;;;;3020:19:30;;3016:90;;3055:40;3083:2;3087:7;3055:27;:40::i;:::-;3123:13;2518:625;-1:-1:-1;;;;2518:625:30:o;8861:795:27:-;8947:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;;;9058:18;;;9054:86;;9092:37;9109:4;9115;9121:7;9092:16;:37::i;:::-;-1:-1:-1;;;;;9184:18:27;;;9180:256;;9300:48;9317:1;9321:7;9317:1;;9300:8;:48::i;:::-;-1:-1:-1;;;;;9391:15:27;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9391:20:27;;;9180:256;-1:-1:-1;;;;;9450:16:27;;;9446:107;;-1:-1:-1;;;;;9510:13:27;;;;;;:9;:13;;;;;:18;;9527:1;9510:18;;;9446:107;9563:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9563:21:27;-1:-1:-1;;;;;9563:21:27;;;;;;;;;9600:27;;9563:16;;9600:27;;;;;;;9645:4;8861:795;-1:-1:-1;;;;8861:795:27:o;4624:1055:30:-;4886:22;4911:15;4921:4;4911:9;:15::i;:::-;4936:18;4957:26;;;:17;:26;;;;;;;;;-1:-1:-1;;;;;5058:18:30;;;;:12;:18;;;;;;4886:40;;-1:-1:-1;4957:26:30;5180:28;;;5176:325;;5224:19;5246:35;;;;;;;;;;;;5296:31;;;;;;:45;;;5413:30;;:17;:30;;;;;:43;;;5176:325;5594:26;;;;:17;:26;;;;;;;;5587:33;;;5637:35;;;;-1:-1:-1;5637:35:30;;5630:42;-1:-1:-1;4624:1055:30:o;5967:1061::-;6241:10;:17;6216:22;;6241:21;;6261:1;;6241:21;:::i;:::-;6272:18;6293:24;;;:15;:24;;;;;;6661:10;:26;;6216:46;;-1:-1:-1;6293:24:30;;6216:46;;6661:26;;;;;;:::i;:::-;;;;;;;;;6639:48;;6723:11;6698:10;6709;6698:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6802:28;;;:15;:28;;;;;;;:41;;;6971:24;;;;;6964:31;7005:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6038:990;;;5967:1061;:::o;3437:214::-;3521:14;3554:1;3538:13;3548:2;3538:9;:13::i;:::-;:17;;;;:::i;:::-;-1:-1:-1;;;;;3565:16:30;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3609:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3437:214:30:o;7105:368:27:-;7217:38;7231:5;7238:7;7247;7217:13;:38::i;:::-;7212:255;;-1:-1:-1;;;;;7275:19:27;;7271:186;;7321:31;;-1:-1:-1;;;7321:31:27;;;;;17159:25:73;;;17132:18;;7321:31:27;17013:177:73;7271:186:27;7398:44;;-1:-1:-1;;;7398:44:27;;-1:-1:-1;;;;;17387:32:73;;7398:44:27;;;17369:51:73;17436:18;;;17429:34;;;17342:18;;7398:44:27;17195:274:73;14794:662:27;14954:9;:31;;;-1:-1:-1;;;;;;14967:18:27;;;;14954:31;14950:460;;;15001:13;15017:22;15031:7;15017:13;:22::i;:::-;15001:38;-1:-1:-1;;;;;;15167:18:27;;;;;;:35;;;15198:4;-1:-1:-1;;;;;15189:13:27;:5;-1:-1:-1;;;;;15189:13:27;;;15167:35;:69;;;;-1:-1:-1;;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;15206:30;15167:69;15163:142;;;15263:27;;-1:-1:-1;;;15263:27:27;;-1:-1:-1;;;;;10567:32:73;;15263:27:27;;;10549:51:73;10522:18;;15263:27:27;10403:203:73;15163:142:27;15323:9;15319:81;;;15377:7;15373:2;-1:-1:-1;;;;;15357:28:27;15366:5;-1:-1:-1;;;;;15357:28:27;;;;;;;;;;;15319:81;14987:423;14950:460;-1:-1:-1;;15420:24:27;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15420:29:27;-1:-1:-1;;;;;15420:29:27;;;;;;;;;;14794:662::o;1919:208::-;1982:7;-1:-1:-1;;;;;2005:19:27;;2001:87;;2047:30;;-1:-1:-1;;;2047:30:27;;2074:1;2047:30;;;10549:51:73;10522:18;;2047:30:27;10403:203:73;2001:87:27;-1:-1:-1;;;;;;2104:16:27;;;;;:9;:16;;;;;;;1919:208::o;6401:272::-;6504:4;-1:-1:-1;;;;;6539:21:27;;;;;;:127;;;6586:7;-1:-1:-1;;;;;6577:16:27;:5;-1:-1:-1;;;;;6577:16:27;;:52;;;-1:-1:-1;;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;6597:32;6577:88;;;-1:-1:-1;;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;;;6633:32;;;;6520:146;-1:-1:-1;6401:272:27:o;16212:241::-;16275:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;16337:88;;16383:31;;-1:-1:-1;;;16383:31:27;;;;;17159:25:73;;;17132:18;;16383:31:27;17013:177:73;14:127;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:253;218:2;212:9;260:4;248:17;;-1:-1:-1;;;;;280:34:73;;316:22;;;277:62;274:88;;;342:18;;:::i;:::-;378:2;371:22;146:253;:::o;404:::-;476:2;470:9;518:4;506:17;;-1:-1:-1;;;;;538:34:73;;574:22;;;535:62;532:88;;;600:18;;:::i;662:253::-;734:2;728:9;776:4;764:17;;-1:-1:-1;;;;;796:34:73;;832:22;;;793:62;790:88;;;858:18;;:::i;920:275::-;991:2;985:9;1056:2;1037:13;;-1:-1:-1;;1033:27:73;1021:40;;-1:-1:-1;;;;;1076:34:73;;1112:22;;;1073:62;1070:88;;;1138:18;;:::i;:::-;1174:2;1167:22;920:275;;-1:-1:-1;920:275:73:o;1200:167::-;1278:13;;1331:10;1320:22;;1310:33;;1300:61;;1357:1;1354;1347:12;1300:61;1200:167;;;:::o;1372:196::-;1445:4;-1:-1:-1;;;;;1467:30:73;;1464:56;;;1500:18;;:::i;:::-;-1:-1:-1;1545:1:73;1541:14;1557:4;1537:25;;1372:196::o;1573:177::-;1652:13;;-1:-1:-1;;;;;1694:31:73;;1684:42;;1674:70;;1740:1;1737;1730:12;1755:164;1831:13;;1880;;1873:21;1863:32;;1853:60;;1909:1;1906;1899:12;1924:160;2001:13;;2054:4;2043:16;;2033:27;;2023:55;;2074:1;2071;2064:12;2089:1404;2167:5;2220:3;2213:4;2205:6;2201:17;2197:27;2187:55;;2238:1;2235;2228:12;2187:55;2271:6;2265:13;2298:77;2314:60;2367:6;2314:60;:::i;:::-;2298:77;:::i;:::-;2399:3;2423:6;2418:3;2411:19;2455:4;2450:3;2446:14;2439:21;;2519:4;2511;2503:6;2499:17;2491:6;2487:30;2483:41;2469:55;;2547:3;2539:6;2536:15;2533:35;;;2564:1;2561;2554:12;2533:35;2600:4;2592:6;2588:17;2614:848;2630:6;2625:3;2622:15;2614:848;;;2708:4;2702:3;2697;2693:13;2689:24;2686:44;;;2726:1;2723;2716:12;2686:44;2756:22;;:::i;:::-;2805:34;2835:3;2805:34;:::i;:::-;2798:5;2791:49;2878:44;2916:4;2911:3;2907:14;2878:44;:::i;:::-;2871:4;2864:5;2860:16;2853:70;2959:42;2997:2;2992:3;2988:12;2959:42;:::i;:::-;2954:2;2947:5;2943:14;2936:66;3045:2;3040:3;3036:12;3030:19;3084:1;3075:7;3072:14;3062:42;;3100:1;3097;3090:12;3062:42;3135:2;3124:14;;3117:31;3185:41;3221:3;3212:13;;3185:41;:::i;:::-;3179:3;3172:5;3168:15;3161:66;3264:42;3301:3;3296;3292:13;3264:42;:::i;:::-;3258:3;3251:5;3247:15;3240:67;3344:42;3381:3;3376;3372:13;3344:42;:::i;:::-;3338:3;3327:15;;3320:67;3400:18;;3447:4;3438:14;;;;2656:4;2647:14;2614:848;;;-1:-1:-1;3480:7:73;2089:1404;-1:-1:-1;;;;;2089:1404:73:o;3498:555::-;3551:5;3604:3;3597:4;3589:6;3585:17;3581:27;3571:55;;3622:1;3619;3612:12;3571:55;3649:13;;-1:-1:-1;;;;;3674:30:73;;3671:56;;;3707:18;;:::i;:::-;3751:59;3798:2;3775:17;;-1:-1:-1;;3771:31:73;3804:4;3767:42;3751:59;:::i;:::-;3835:6;3826:7;3819:23;3889:3;3882:4;3873:6;3865;3861:19;3857:30;3854:39;3851:59;;;3906:1;3903;3896:12;3851:59;3964:6;3957:4;3949:6;3945:17;3938:4;3929:7;3925:18;3919:52;4020:1;3991:20;;;4013:4;3987:31;3980:42;;;;3995:7;3498:555;-1:-1:-1;;;3498:555:73:o;4058:846::-;4121:5;4174:3;4167:4;4159:6;4155:17;4151:27;4141:55;;4192:1;4189;4182:12;4141:55;4225:6;4219:13;4252:77;4268:60;4321:6;4268:60;:::i;4252:77::-;4353:3;4377:6;4372:3;4365:19;4409:4;4404:3;4400:14;4393:21;;4470:4;4460:6;4457:1;4453:14;4445:6;4441:27;4437:38;4423:52;;4498:3;4490:6;4487:15;4484:35;;;4515:1;4512;4505:12;4484:35;4551:4;4543:6;4539:17;4565:308;4581:6;4576:3;4573:15;4565:308;;;4656:10;;-1:-1:-1;;;;;4682:35:73;;4679:55;;;4730:1;4727;4720:12;4679:55;4759:69;4824:3;4817:4;4803:11;4795:6;4791:24;4787:35;4759:69;:::i;:::-;4747:82;;-1:-1:-1;4858:4:73;4849:14;;;;4598;4565:308;;4909:1170;4991:5;5044:3;5037:4;5029:6;5025:17;5021:27;5011:55;;5062:1;5059;5052:12;5011:55;5095:6;5089:13;5122:77;5138:60;5191:6;5138:60;:::i;5122:77::-;5223:3;5247:6;5242:3;5235:19;5279:4;5274:3;5270:14;5263:21;;5340:4;5330:6;5327:1;5323:14;5315:6;5311:27;5307:38;5293:52;;5368:3;5360:6;5357:15;5354:35;;;5385:1;5382;5375:12;5354:35;5421:4;5413:6;5409:17;5435:613;5451:6;5446:3;5443:15;5435:613;;;5526:10;;-1:-1:-1;;;;;5552:35:73;;5549:55;;;5600:1;5597;5590:12;5549:55;5627:24;;5699:4;5675:12;;;-1:-1:-1;;5671:26:73;5667:37;5664:57;;;5717:1;5714;5707:12;5664:57;5747:22;;:::i;:::-;5812:4;5804:13;;5798:20;-1:-1:-1;;;;;5834:32:73;;5831:52;;;5879:1;5876;5869:12;5831:52;5910:62;5968:3;5961:4;5950:8;5946:2;5942:17;5938:28;5910:62;:::i;:::-;5896:77;;-1:-1:-1;5986:18:73;;-1:-1:-1;6033:4:73;6024:14;;;;5468;5435:613;;6084:1631;6372:6;6380;6388;6396;6404;6448:9;6439:7;6435:23;6478:3;6474:2;6470:12;6467:32;;;6495:1;6492;6485:12;6467:32;6519:4;6515:2;6511:13;6508:33;;;6537:1;6534;6527:12;6508:33;;6563:22;;:::i;:::-;6630:16;;6655:22;;6743:2;6728:18;;;6722:25;6763:14;;;6756:31;6853:2;6838:18;;;6832:25;6873:14;;;6866:31;6929:48;6973:2;6958:18;;6929:48;:::i;:::-;6924:2;6913:14;;6906:72;7046:4;7031:20;;7025:27;6917:5;;-1:-1:-1;;;;;;7064:30:73;;7061:50;;;7107:1;7104;7097:12;7061:50;7130:85;7207:7;7198:6;7187:9;7183:22;7130:85;:::i;:::-;7261:3;7246:19;;7240:26;7120:95;;-1:-1:-1;7240:26:73;-1:-1:-1;;;;;;7278:32:73;;7275:52;;;7323:1;7320;7313:12;7275:52;7346:72;7410:7;7399:8;7388:9;7384:24;7346:72;:::i;:::-;7464:3;7449:19;;7443:26;7336:82;;-1:-1:-1;7443:26:73;-1:-1:-1;;;;;;7481:32:73;;7478:52;;;7526:1;7523;7516:12;7478:52;7549:91;7632:7;7621:8;7610:9;7606:24;7549:91;:::i;:::-;7539:101;;;7659:50;7704:3;7693:9;7689:19;7659:50;:::i;:::-;7649:60;;6084:1631;;;;;;;;:::o;7720:380::-;7799:1;7795:12;;;;7842;;;7863:61;;7917:4;7909:6;7905:17;7895:27;;7863:61;7970:2;7962:6;7959:14;7939:18;7936:38;7933:161;;8016:10;8011:3;8007:20;8004:1;7997:31;8051:4;8048:1;8041:15;8079:4;8076:1;8069:15;7933:161;;7720:380;;;:::o;8231:692::-;8333:2;8328:3;8325:11;8322:595;;;8370:10;8365:3;8362:19;8359:548;;;8422:5;8419:1;8412:16;8470:4;8467:1;8457:18;8535:2;8523:10;8519:19;8516:1;8512:27;8574:4;8562:10;8559:20;8556:45;;;-1:-1:-1;8598:1:73;8556:45;8637:23;;;;8707:2;8698:12;;8695:1;8691:20;8687:39;8752:1;8770:123;8784:2;8781:1;8778:9;8770:123;;;8873:1;8852:19;;;8845:30;8802:1;8795:9;8770:123;;;8774:3;;;8231:692;;;:::o;9099:1299::-;9219:10;;-1:-1:-1;;;;;9241:30:73;;9238:56;;;9274:18;;:::i;:::-;9303:97;9393:6;9353:38;9385:4;9379:11;9353:38;:::i;:::-;9347:4;9303:97;:::i;:::-;9449:4;9480:2;9469:14;;9497:1;9492:649;;;;10185:1;10202:6;10199:89;;;-1:-1:-1;10254:19:73;;;10248:26;10199:89;-1:-1:-1;;9056:1:73;9052:11;;;9048:24;9044:29;9034:40;9080:1;9076:11;;;9031:57;10301:81;;9462:930;;9492:649;8178:1;8171:14;;;8215:4;8202:18;;-1:-1:-1;;9528:20:73;;;9646:222;9660:7;9657:1;9654:14;9646:222;;;9742:19;;;9736:26;9721:42;;9849:4;9834:20;;;;9802:1;9790:14;;;;9676:12;9646:222;;;9650:3;9896:6;9887:7;9884:19;9881:201;;;9957:19;;;9951:26;-1:-1:-1;;10040:1:73;10036:14;;;10052:3;10032:24;10028:37;10024:42;10009:58;9994:74;;9881:201;;;10128:1;10119:6;10116:1;10112:14;10108:22;10102:4;10095:36;9462:930;;;;9099:1299;;:::o;10808:127::-;10869:10;10864:3;10860:20;10857:1;10850:31;10900:4;10897:1;10890:15;10924:4;10921:1;10914:15;10940:127;11001:10;10996:3;10992:20;10989:1;10982:31;11032:4;11029:1;11022:15;11056:4;11053:1;11046:15;11072:135;11111:3;11132:17;;;11129:43;;11152:18;;:::i;:::-;-1:-1:-1;11199:1:73;11188:13;;11072:135::o;11212:127::-;11273:10;11268:3;11264:20;11261:1;11254:31;11304:4;11301:1;11294:15;11328:4;11325:1;11318:15;11344:243;11431:1;11424:5;11421:12;11411:143;;11476:10;11471:3;11467:20;11464:1;11457:31;11511:4;11508:1;11501:15;11539:4;11536:1;11529:15;11411:143;11563:18;;11344:243::o;11592:221::-;11745:2;11730:18;;11757:50;11734:9;11789:6;11757:50;:::i;13391:835::-;13547:4;13589:3;13578:9;13574:19;13566:27;;13656:1;13652;13647:3;13643:11;13639:19;13630:6;13624:13;13620:39;13609:9;13602:58;13728:10;13720:4;13712:6;13708:17;13702:24;13698:41;13691:4;13680:9;13676:20;13669:71;13808:10;13800:4;13792:6;13788:17;13782:24;13778:41;13771:4;13760:9;13756:20;13749:71;13867:4;13859:6;13855:17;13849:24;13882:67;13943:4;13932:9;13928:20;13914:12;13882:67;:::i;:::-;;14019:4;14011:6;14007:17;14001:24;13994:32;13987:40;13980:4;13969:9;13965:20;13958:70;14096:4;14088;14080:6;14076:17;14070:24;14066:35;14059:4;14048:9;14044:20;14037:65;14151:4;14143:6;14139:17;14133:24;14166:54;14214:4;14203:9;14199:20;14183:14;11885:4;11874:16;11862:29;;11818:75;14166:54;;13391:835;;;;:::o;14231:299::-;14283:3;14321:5;14315:12;14348:6;14343:3;14336:19;14404:6;14397:4;14390:5;14386:16;14379:4;14374:3;14370:14;14364:47;14456:1;14449:4;14440:6;14435:3;14431:16;14427:27;14420:38;14519:4;14512:2;14508:7;14503:2;14495:6;14491:15;14487:29;14482:3;14478:39;14474:50;14467:57;;;14231:299;;;;:::o;14535:570::-;14774:2;14763:9;14756:21;14737:4;14800:55;14851:2;14840:9;14836:18;14828:6;14800:55;:::i;:::-;14903:9;14895:6;14891:22;14886:2;14875:9;14871:18;14864:50;14937:43;14973:6;14965;14937:43;:::i;:::-;14923:57;;15028:9;15020:6;15016:22;15011:2;15000:9;14996:18;14989:50;15056:43;15092:6;15084;15056:43;:::i;:::-;15048:51;14535:570;-1:-1:-1;;;;;;14535:570:73:o;15110:211::-;15151:3;15189:5;15183:12;15233:6;15226:4;15219:5;15215:16;15210:3;15204:36;15295:1;15259:16;;15284:13;;;-1:-1:-1;15259:16:73;;15110:211;-1:-1:-1;15110:211:73:o;15326:189::-;15455:3;15480:29;15505:3;15497:6;15480:29;:::i;15520:228::-;15667:2;15656:9;15649:21;15630:4;15687:55;15738:2;15727:9;15723:18;15715:6;15687:55;:::i;15753:202::-;15820:6;15873:2;15861:9;15852:7;15848:23;15844:32;15841:52;;;15889:1;15886;15879:12;15841:52;15912:37;15939:9;15912:37;:::i;15960:369::-;16161:2;16150:9;16143:21;16124:4;16199:6;16193:13;16242:2;16237;16226:9;16222:18;16215:30;16262:61;16319:2;16308:9;16304:18;16290:12;16262:61;:::i;16334:409::-;-1:-1:-1;;;;;;16547:31:73;;16535:44;;16517:3;16601:37;16635:1;16626:11;;16618:6;16601:37;:::i;:::-;16694:2;16665:15;;;;-1:-1:-1;;;;;;16661:45:73;16647:60;;-1:-1:-1;;16734:2:73;16723:14;;16334:409;-1:-1:-1;;16334:409:73:o;16748:128::-;16815:9;;;16836:11;;;16833:37;;;16850:18;;:::i;16881:127::-;16942:10;16937:3;16933:20;16930:1;16923:31;16973:4;16970:1;16963:15;16997:4;16994:1;16987:15;17195:274;1341:77521:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610436575f3560e01c8063673983311161022b578063a71954ec11610129578063c05df7ac116100b3578063eb8535c211610078578063eb8535c214610d7f578063f062476814610dac578063f2fde38b14610dcb578063f66a25a414610dea578063fa52c7d814610e09575f5ffd5b8063c05df7ac14610cfb578063c53a029214610d1a578063c87b56dd14610d2e578063e5a2282714610d4d578063e985e9c514610d60575f5ffd5b8063b5545a3c116100f9578063b5545a3c14610bf7578063b88d4fde14610c0b578063b97dd9e214610c2a578063babc394f14610c5b578063bd3e759414610c6f575f5ffd5b8063a71954ec14610b91578063a7c5e70114610bb0578063aaffd27014610bc4578063ad6cfb8614610bd8575f5ffd5b80637d06fdf8116101b55780638cc05eda1161017a5780638cc05eda14610af55780638da5cb5b14610b2157806395d89b4114610b44578063a0201be514610b58578063a22cb46514610b77575f5ffd5b80637d06fdf814610a2e5780638456cb5914610a7b57806384b0196e14610a8f578063863623bb14610ab657806389afcb4414610ad6575f5ffd5b80636d3c6275116101fb5780636d3c62751461099e57806370a08231146109bd578063715018a6146109dc57806379ee54f7146109f05780637b55a30014610a0f575f5ffd5b8063673983311461090e5780636a627842146109345780636a926591146109535780636ae9942c14610972575f5ffd5b80632a8e33d7116103385780633f4ba83a116102c257806358e88dbb1161028757806358e88dbb1461087c57806359ca93b6146108955780635c975abb146108b457806362fcde4b146108d05780636352211e146108ef575f5ffd5b80633f4ba83a146107ec57806342842e0e1461080057806343201d301461081f57806343401a00146108325780634f6ccce71461085d575f5ffd5b80633434735f116103085780633434735f14610724578063355811a71461073e578063374ed18c146107465780633894228e146107725780633e28391d146107cd575f5ffd5b80632a8e33d7146106b45780632b9f4985146106d35780632f745c59146106f25780632fb0d02514610711575f5ffd5b80630f15f4c0116103c45780631904bb2e116103895780631904bb2e1461061a5780632228dfa01461064657806323a404301461065a57806323b872dd1461066e5780632870259d14610688575f5ffd5b80630f15f4c0146105865780630f4346fa1461059a578063127ce8e8146105b957806315b5709a146105cc57806318160ddd14610606575f5ffd5b806306fdde031161040a57806306fdde03146104de5780630752e017146104f2578063081812fc14610511578063095ea7b3146105485780630a36cdef14610567575f5ffd5b80628d6acd1461043a57806301ffc9a71461046257806302ae337b14610491578063059b916c146104b2575b5f5ffd5b348015610445575f5ffd5b5061044f600e5481565b6040519081526020015b60405180910390f35b34801561046d575f5ffd5b5061048161047c36600461714d565b610e94565b6040519015158152602001610459565b34801561049c575f5ffd5b506104b06104ab3660046171af565b610ebe565b005b3480156104bd575f5ffd5b506104d16104cc366004617203565b611050565b604051610459919061724a565b3480156104e9575f5ffd5b506104d1611121565b3480156104fd575f5ffd5b506104b061050c36600461725c565b6111b0565b34801561051c575f5ffd5b5061053061052b36600461725c565b611218565b6040516001600160a01b039091168152602001610459565b348015610553575f5ffd5b506104b0610562366004617273565b61123f565b348015610572575f5ffd5b506104b06105813660046171af565b611258565b348015610591575f5ffd5b506104b061152c565b3480156105a5575f5ffd5b506104b06105b4366004617203565b611575565b6104b06105c73660046173d8565b6116bc565b3480156105d7575f5ffd5b506105eb6105e6366004617203565b611955565b60408051938452602084019290925290820152606001610459565b348015610611575f5ffd5b5060085461044f565b348015610625575f5ffd5b50610639610634366004617203565b6119bb565b6040516104599190617527565b348015610651575f5ffd5b506104b0611a9e565b348015610665575f5ffd5b5061044f611b5e565b348015610679575f5ffd5b506104b0610562366004617535565b348015610693575f5ffd5b506106a76106a236600461756f565b611b6d565b604051610459919061758d565b3480156106bf575f5ffd5b506104b06106ce3660046175e7565b611ceb565b3480156106de575f5ffd5b506104b06106ed366004617203565b611d3b565b3480156106fd575f5ffd5b5061044f61070c366004617273565b611e00565b6104b061071f366004617602565b611e63565b34801561072f575f5ffd5b506105306002600160a01b0381565b6104b0611ee9565b348015610751575f5ffd5b5061076561076036600461767a565b611f64565b60405161045991906176d8565b34801561077d575f5ffd5b5061079161078c36600461725c565b6121f9565b604080519586526001600160401b03909416602086015263ffffffff9283169385019390935216606083015260ff16608082015260a001610459565b3480156107d8575f5ffd5b506104816107e7366004617203565b61224d565b3480156107f7575f5ffd5b506104b0612273565b34801561080b575f5ffd5b506104b061081a366004617535565b612285565b6104b061082d366004617203565b61229f565b34801561083d575f5ffd5b5061044f61084c366004617203565b602f6020525f908152604090205481565b348015610868575f5ffd5b5061044f61087736600461725c565b612598565b348015610887575f5ffd5b506030546104819060ff1681565b3480156108a0575f5ffd5b506107916108af36600461725c565b6125ed565b3480156108bf575f5ffd5b50600d54610100900460ff16610481565b3480156108db575f5ffd5b506104b06108ea366004617749565b6125fc565b3480156108fa575f5ffd5b5061053061090936600461725c565b612703565b348015610919575f5ffd5b5061092261270d565b60405160ff9091168152602001610459565b34801561093f575f5ffd5b506104b061094e366004617203565b61271f565b34801561095e575f5ffd5b5061048161096d36600461776a565b61277d565b34801561097d575f5ffd5b5061099161098c36600461767a565b612818565b604051610459919061779c565b3480156109a9575f5ffd5b506104816109b8366004617203565b61296c565b3480156109c8575f5ffd5b5061044f6109d7366004617203565b6129f0565b3480156109e7575f5ffd5b506104b0612a35565b3480156109fb575f5ffd5b5061044f610a0a366004617203565b612a46565b348015610a1a575f5ffd5b506104b0610a293660046177ff565b612a88565b348015610a39575f5ffd5b50610a42612bfd565b604051610459919081518152602080830151908201526040808301519082015260609182015163ffffffff169181019190915260800190565b348015610a86575f5ffd5b506104b0612c7a565b348015610a9a575f5ffd5b50610aa3612c8a565b604051610459979695949392919061786e565b348015610ac1575f5ffd5b506105305f5160206182325f395f51905f5281565b348015610ae1575f5ffd5b506104b0610af0366004617203565b612cf1565b348015610b00575f5ffd5b50610b14610b0f36600461756f565b612da1565b6040516104599190617904565b348015610b2c575f5ffd5b50600d546201000090046001600160a01b0316610530565b348015610b4f575f5ffd5b506104d1612db5565b348015610b63575f5ffd5b506106a7610b7236600461767a565b612dc4565b348015610b82575f5ffd5b506104b0610562366004617916565b348015610b9c575f5ffd5b50610a42610bab36600461795b565b612e7d565b348015610bbb575f5ffd5b50610b14612ef7565b348015610bcf575f5ffd5b506104b0612f03565b348015610be3575f5ffd5b5061044f610bf2366004617974565b613173565b348015610c02575f5ffd5b506104b0613254565b348015610c16575f5ffd5b506104b0610c253660046179d5565b61336d565b348015610c35575f5ffd5b50600d54600160b01b900463ffffffff1660405163ffffffff9091168152602001610459565b348015610c66575f5ffd5b50610765613385565b348015610c7a575f5ffd5b50610cc4610c89366004617203565b602e6020525f90815260409020805460019091015460ff821691610100810463ffffffff1691600160281b9091046001600160a01b03169084565b6040805160ff909516855263ffffffff90931660208501526001600160a01b03909116918301919091526060820152608001610459565b348015610d06575f5ffd5b50610922610d15366004617a38565b613492565b348015610d25575f5ffd5b506104b06135b1565b348015610d39575f5ffd5b506104d1610d4836600461725c565b613646565b6104b0610d5b366004617a51565b6136b6565b348015610d6b575f5ffd5b50610481610d7a366004617a82565b613b9b565b348015610d8a575f5ffd5b50600d54600160d81b900461ffff1660405161ffff9091168152602001610459565b348015610db7575f5ffd5b506104b0610dc6366004617a51565b613bc8565b348015610dd6575f5ffd5b506104b0610de5366004617203565b613c48565b348015610df5575f5ffd5b506104b0610e04366004617916565b613c82565b348015610e14575f5ffd5b50610e81610e23366004617203565b600f6020525f90815260409020546001600160a01b0381169063ffffffff600160a01b8204811691600160c01b81049091169060ff600160e01b8204811691600160e81b8104821691600160f01b8204811691600160f81b90041687565b6040516104599796959493929190617aaa565b5f6001600160e01b0319821663780e9d6360e01b1480610eb85750610eb882613d6d565b92915050565b336002600160a01b0314610eec57604051637eb3357160e01b81523360048201526024015b60405180910390fd5b5f5b8181101561104b5736838383818110610f0957610f09617afd565b6040029190910191505f9050610f226020830183617203565b90506001600160a01b0381161580610f4257506001600160a01b03818116145b15610f4e575050611043565b610f5e6109b86020840184617203565b15610f6a575050611043565b60208201803590600b905f90610f809086617203565b6001600160a01b03166001600160a01b031681526020019081526020015f20541115610ff45760208201803590600b905f90610fbc9086617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205f828254610fe99190617b25565b909155506110099050565b6110096110046020840184617203565b613dbc565b7f11a09f9b32440d896abff7453bf53f8b26ffcb18dae4dca227f7a76e2acc3a64826040516110389190617b38565b60405180910390a150505b600101610eee565b505050565b6001600160a01b0381165f9081526029602052604081208054606092919061107790617b61565b80601f01602080910402602001604051908101604052809291908181526020018280546110a390617b61565b80156110ee5780601f106110c5576101008083540402835291602001916110ee565b820191905f5260205f20905b8154815290600101906020018083116110d157829003601f168201915b5050505050905080515f03610eb857604051635f7ba20d60e11b81526001600160a01b0384166004820152602401610ee3565b60605f805461112f90617b61565b80601f016020809104026020016040519081016040528092919081815260200182805461115b90617b61565b80156111a65780601f1061117d576101008083540402835291602001916111a6565b820191905f5260205f20905b81548152906001019060200180831161118957829003601f168201915b5050505050905090565b6111b8613ed9565b604051627b8a6760e11b8152600481018290523360248201525f5160206182325f395f51905f529062f714ce906044015f604051808303815f87803b1580156111ff575f5ffd5b505af1158015611211573d5f5f3e3d5ffd5b5050505050565b5f61122282613f0d565b505f828152600460205260409020546001600160a01b0316610eb8565b60405163dc8d8db760e01b815260040160405180910390fd5b336002600160a01b031461128157604051637eb3357160e01b8152336004820152602401610ee3565b5f80826001600160401b0381111561129b5761129b6172d8565b6040519080825280602002602001820160405280156112c4578160200160208202803683370190505b5090505f5b8381101561142d57368585838181106112e4576112e4617afd565b905060400201905080602001355f036112fd5750611425565b5f61130b6020830183617203565b90506001600160a01b038116158061132b57506001600160a01b03818116145b15611337575050611425565b6113476109b86020840184617203565b15611353575050611425565b5f600f816113646020860186617203565b6001600160a01b0316815260208082019290925260409081015f90812054600160f01b900460ff16808252600a8452918120549193509091600b9082906113ad90880188617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205490505f8282106113dd57826113df565b815b90505f6113f0602088013583617b99565b90506113fc818b617bb0565b99508089898151811061141157611411617afd565b602002602001018181525050505050505050505b6001016112c9565b50815f0361143b5750505050565b5f611444613385565b6020015190505f600e54826114599190617bb0565b90505f5f5b86811015611514575f8686838151811061147a5761147a617afd565b60200260200101518561148d9190617b99565b6114979190617bd7565b9050801561150b5780600b5f8b8b868181106114b5576114b5617afd565b6114cb9260206040909202019081019150617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546114f89190617bb0565b9091555061150890508184617bb0565b92505b5060010161145e565b5061151f8183617b25565b600e5550505050505b5050565b611534613f45565b61153d33613f6e565b50611549336001613fdc565b335f908152600f60205260409020600d54611572908290600160b01b900463ffffffff16614042565b50565b61157d613f45565b3068929eee149b4bd21268540361159b5763ab143c065f526004601cfd5b3068929eee149b4bd21268556115b0816140a7565b506001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b900490951691850191909152600101546060840152900361162857604051636c4da32160e11b815260040160405180910390fd5b6001600160a01b0382165f908152602e6020526040812080546001600160c81b03191681556001015561165c602c83614108565b506060810151156116795761167981604001518260600151614123565b6040516001600160a01b038316907fc3b65b615a42c44083fae01d75939ba9640ffd6023e130bfc06092d992560d1f905f90a2503868929eee149b4bd212685550565b6116c4613f45565b5f61170586868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061420492505050565b90505f611710613385565b60a0015190505f61172134836143a0565b905061172c87613f6e565b50611737875f613fdc565b6001600160a01b0387165f908152600c60205260409020600201546001600160401b03600160a81b9091041661177c600d546001600160a01b03620100009091041690565b6001600160a01b0316336001600160a01b03161461185157844211156117b8576040516304adae2760e21b815260048101869052602401610ee3565b5f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b973858a3387868b6040516020016117f69796959493929190617bea565b6040516020818303038152906040528051906020012090505f611818826143db565b90506118268a828b8b6144f1565b61184e57604051633b4f6e2b60e21b81526001600160a01b038b166004820152602401610ee3565b50505b6040518060a00160405280858152602001896001600160a01b03168152602001336001600160a01b031681526020018460ff1681526020018260016118969190617c31565b6001600160401b039081169091526001600160a01b038a81165f908152600c602090815260409182902085518155908501516001820180546001600160a01b03191691851691909117905590840151600290910180546060860151608090960151929093166001600160a81b031990931692909217600160a01b60ff909516949094029390931767ffffffffffffffff60a81b1916600160a81b93909216929092021790556119488b8b8a868661453b565b5050505050505050505050565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a90925282205482918291826119948783614717565b6001600160a01b03979097165f908152600b60205260409020549791969550909350505050565b6119c36170fd565b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff166119f5576119f383613f6e565b505b6040805160e08101825282546001600160a01b038116825263ffffffff600160a01b820481166020840152600160c01b82041692820192909252908290606083019060ff600160e01b909104166006811115611a5357611a53617487565b6006811115611a6457611a64617487565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101529392505050565b611aa6613f45565b611aaf33613f6e565b505f611aba602b5490565b600d549091505f90601190600160d01b900460ff1660048110611adf57611adf617afd565b60030201549050611af08282614747565b611afb336003613fdc565b335f908152600f60205260409020600d54815463ffffffff600160b01b909204821691600160a01b90910416811015611b4f57604051634fadd4d360e11b815263ffffffff82166004820152602401610ee3565b611b5882614784565b50505050565b5f611b68602b5490565b905090565b6060611b78826147d6565b5f611b8283614826565b90505f81516001600160401b03811115611b9e57611b9e6172d8565b604051908082528060200260200182016040528015611bd757816020015b611bc46170fd565b815260200190600190039081611bbc5790505b5090505f5b8251811015611ce357600f5f848381518110611bfa57611bfa617afd565b6020908102919091018101516001600160a01b0390811683528282019390935260409182015f20825160e0810184528154948516815263ffffffff600160a01b8604811693820193909352600160c01b85049092169282019290925291606083019060ff600160e01b909104166006811115611c7857611c78617487565b6006811115611c8957611c89617487565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101528251839083908110611cd057611cd0617afd565b6020908102919091010152600101611bdc565b509392505050565b611cf3613ed9565b6030805460ff19168215159081179091556040519081527f52ad987b0fca51d9a6d5e0bbc656d0e3f616cff09727bf584c3275def38c4f54906020015b60405180910390a150565b611d43613f45565b3068929eee149b4bd212685403611d615763ab143c065f526004601cfd5b3068929eee149b4bd21268555f611d77826140a7565b6001600160a01b0383165f908152600f6020526040812054919250600160f01b90910460ff1690611da9848484614858565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051611de691815260200190565b60405180910390a25050503868929eee149b4bd212685550565b5f611e0a836129f0565b8210611e3b5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610ee3565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b611e6b613f45565b611eab813385858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061420492505050565b505f611eb5613385565b60a0015190505f611ec634836143a0565b9050611ed133613f6e565b50611edc335f613fdc565b611211858533858561453b565b611ef1613ed9565b6040515f905f5160206182325f395f51905f529034908381818185875af1925050503d805f8114611f3d576040519150601f19603f3d011682016040523d82523d5f602084013e611f42565b606091505b505090508061157257604051630b567ce360e31b815260040160405180910390fd5b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d54600160b01b900463ffffffff16611fb0816002617c50565b63ffffffff168363ffffffff161180611ff0575060038163ffffffff1610158015611ff05750611fe1600382617c6c565b63ffffffff168363ffffffff16105b1561201657604051634fadd4d360e11b815263ffffffff84166004820152602401610ee3565b600d54600160d01b900460ff1663ffffffff8281169085161115612135575f612040858484614906565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561209957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161207b575b505050918352505060018201546020808301919091526002928301546001600160401b03811660408085019190915263ffffffff600160401b830481166060860152600160601b8304811660808087019190915260ff600160801b909404841660a096870152600d549093165f818152600a86529290922095860154938701939093526003909401549091169084015282015295945050505050565b612140848383614990565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561219957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161217b575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152949350505050565b60118160048110612208575f80fd5b6003020160018101546002909101549091506001600160401b03811690600160401b810463ffffffff90811691600160601b810490911690600160801b900460ff1685565b6001600160a01b038082165f908152600c60205260408120600201549091161515610eb8565b61227b613ed9565b612283614a31565b565b61104b83838360405180602001604052805f81525061336d565b6122a7613f45565b6122b081613f6e565b50600d546201000090046001600160a01b03166001600160a01b0316336001600160a01b0316146123585760305460ff16156122ff57604051630a06fea760e01b815260040160405180910390fd5b5f61230982614a84565b9050336001600160a01b0383161480159061232d5750336001600160a01b03821614155b156123565760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b505b6001600160a01b0381165f908152600f6020526040902054600160e01b900460ff16600181600681111561238e5761238e617487565b141580156123ae575060028160068111156123ab576123ab617487565b14155b80156123cc575060038160068111156123c9576123c9617487565b14155b156123ec5780604051633ba7bf8960e11b8152600401610ee39190617c88565b6001600160a01b0382165f818152600f6020908152604080832054600160f01b900460ff16808452600a835281842054948452600b9092529091205490919081811061246657604051630ea9c27360e01b81526001600160a01b03861660048201526024810182905260ff84166044820152606401610ee3565b5f6124718284617b25565b90508034146124ad576040516315de715960e21b81526001600160a01b038716600482015234602482015260ff85166044820152606401610ee3565b6001600160a01b0386165f908152600b6020526040812080548392906124d4908490617bb0565b90915550506040515f905f5160206182325f395f51905f529034908381818185875af1925050503d805f8114612525576040519150601f19603f3d011682016040523d82523d5f602084013e61252a565b606091505b505090508061254c57604051630b567ce360e31b815260040160405180910390fd5b866001600160a01b03167fe27d5554eb05db70d1fa64400b6d5aee0f805adfbc7c9c3785743c9a287db8378360405161258791815260200190565b60405180910390a250505050505050565b5f6125a260085490565b82106125ca5760405163295f44f760e21b81525f600482015260248101839052604401610ee3565b600882815481106125dd576125dd617afd565b905f5260205f2001549050919050565b601d8160048110612208575f80fd5b612604613ed9565b8061ffff165f0361265757600d54601190600160d01b900460ff166004811061262f5761262f617afd565b6003020154604051635700689f60e11b815260048101919091525f6024820152604401610ee3565b5f612661602b5490565b9050808261ffff16111561269557604051635700689f60e11b81526004810182905261ffff83166024820152604401610ee3565b600d805461ffff848116600160d81b81810261ffff60d81b1985161790945560408051949093049091168084526020840191909152908201839052907f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505050565b5f610eb882613f0d565b5f612716613385565b60a00151905090565b612727613ed9565b612730816129f0565b15158061274157506127418161296c565b1561276a57604051639fb0877960e01b81526001600160a01b0382166004820152602401610ee3565b611572816001600160a01b038116614ab3565b5f6060821461278d57505f610eb8565b5f6127cc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614b1492505050565b5f818152601060205260409020549091506001600160a01b0316806127f5575f92505050610eb8565b6127fe8161296c565b1561280d575f92505050610eb8565b506001949350505050565b60605f61282483611f64565b5f015190505f81516001600160401b03811115612843576128436172d8565b60405190808252806020026020018201604052801561287657816020015b60608152602001906001900390816128615790505b5090505f5b8151811015611ce35760295f84838151811061289957612899617afd565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2080546128cb90617b61565b80601f01602080910402602001604051908101604052809291908181526020018280546128f790617b61565b80156129425780601f1061291957610100808354040283529160200191612942565b820191905f5260205f20905b81548152906001019060200180831161292557829003601f168201915b505050505082828151811061295957612959617afd565b602090810291909101015260010161287b565b5f61297f6001600160a01b038316614b42565b1561298b57505f919050565b5f6001600160a01b0383165f908152600f6020526040902054600160e01b900460ff1660068111156129bf576129bf617487565b036129cb57505f919050565b506001600160a01b03165f908152600f6020526040902054600160e81b900460ff1690565b5f6001600160a01b038216612a1a576040516322718ad960e21b81525f6004820152602401610ee3565b506001600160a01b03165f9081526003602052604090205490565b612a3d613ed9565b6122835f614b95565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a909252822054612a808482614717565b949350505050565b336002600160a01b0314612ab157604051637eb3357160e01b8152336004820152602401610ee3565b612abb8282614bf0565b612ac3614cc8565b600d54600160d81b900461ffff168114612b0757600d54604051635700689f60e11b8152600160d81b90910461ffff16600482015260248101829052604401610ee3565b5f5f5f5f612b468686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061510392505050565b9350935093509350612b5986868661549d565b612b6b612b65602b5490565b86614747565b7fd1a5032a9ae65ebe520eba7974025750af3d884b6ab6047dad04dcf7006ab3856040518060c00160405280838152602001858152602001436001612bb09190617bb0565b6001600160401b0316815263ffffffff80881660208301528516604080830191909152600d5460ff1660609092019190915251612bed91906176d8565b60405180910390a1505050505050565b612c2a60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b50600d5460ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b612c82613ed9565b6122836156de565b600f60f81b6060805f808083612cdf60408051808201825260148152732a32b631b7b4b71029ba30b5b2a6b0b730b3b2b960611b602080830191909152825180840190935260018352603160f81b9083015291565b97989097965046955030945091925090565b612cf9613ed9565b612d028161296c565b15612d23576006604051633ba7bf8960e11b8152600401610ee39190617c88565b612d2c81613f6e565b505f6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff166006811115612d6157612d61617487565b03612d98576001600160a01b0381165f908152600f60205260409020612d869061571d565b6115726001600160a01b03821661577b565b61157281613dbc565b6060612dac826147d6565b610eb882614826565b60606001805461112f90617b61565b60605f612dd083611f64565b5f015190505f81516001600160401b03811115612def57612def6172d8565b604051908082528060200260200182016040528015612e2857816020015b612e156170fd565b815260200190600190039081612e0d5790505b5090505f5b8151811015611ce357612e58838281518110612e4b57612e4b617afd565b60200260200101516119bb565b828281518110612e6a57612e6a617afd565b6020908102919091010152600101612e2d565b612eaa60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b5060ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b6060611b68602c6157b3565b336002600160a01b0314612f2c57604051637eb3357160e01b8152336004820152602401610ee3565b5f612f3660085490565b90505f5f5b82811015613135575f612f5061090983612598565b6001600160a01b0381165f90815260296020526040812080549293509091612f7790617b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa390617b61565b8015612fee5780601f10612fc557610100808354040283529160200191612fee565b820191905f5260205f20905b815481529060010190602001808311612fd157829003601f168201915b5050505050905080516060036130625780516020808301919091205f9081526010918290526040812080546001600160a01b031916905583919061303184614b14565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff16156130925750505061312d565b8054600160e01b900460ff165f8160068111156130b1576130b1617487565b14806130ce575060068160068111156130cc576130cc617487565b145b156130dc575050505061312d565b61310d84602a5f8460068111156130f5576130f5617487565b60ff16815260208101919091526040015f20906157bf565b50613117816157d3565b156131285761312586617c96565b95505b505050505b600101612f3b565b50602b8190556040518181527fa5fe2e69fcd48b9dbe563588b5da97937ef9046641db65c59b8d49a20d75bdcc906020015b60405180910390a15050565b5f61317d84613f6e565b5084516060146131a0576040516333a234f960e11b815260040160405180910390fd5b5f6131a9613385565b60a001516001600160a01b0386165f908152600c6020526040812060020154919250600160a81b9091046001600160401b0316906131e688614b14565b90505f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b97382898987878b6040516020016132269796959493929190617bea565b604051602081830303815290604052805190602001209050613247816143db565b9998505050505050505050565b61325c613f45565b3068929eee149b4bd21268540361327a5763ab143c065f526004601cfd5b3068929eee149b4bd2126855335f908152602f6020526040812054908190036132b65760405163183dfd8b60e21b815260040160405180910390fd5b335f818152602f602052604080822082905551634875485760e11b8152600481019290925260248201525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015613311575f5ffd5b505af1158015613323573d5f5f3e3d5ffd5b50506040518481523393507f358fe4192934d3bf28ae181feda1f4bd08ca67f5e2fad55582cce5eb67304ae99250602001905060405180910390a2503868929eee149b4bd2126855565b61337884848461123f565b611b583385858585615826565b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d546133dc90600160b01b810463ffffffff16908190600160d01b900460ff16614990565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561343557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613417575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152919050565b5f61349b613ed9565b6134a3613f45565b6134b3608083016060840161767a565b63ffffffff165f036134f1576134cf608083016060840161767a565b604051630c6e911360e41b815263ffffffff9091166004820152602401610ee3565b600d80545f919082906135069060ff16617cae565b825460ff8083166101009490940a848102910219909116179092555f908152600a60205260409020909150839061353d8282617ccc565b505060ff81167fe99633c5fc9a4b39f3a3d7835a821420f9d4d6c5bfa62be2fcf1fde156115eeb8435602086013560408701356135806080890160608a0161767a565b6040805194855260208501939093529183015263ffffffff16606082015260800160405180910390a290505b919050565b6135ba33613f6e565b50335f908152600c6020526040812060020180546015906135ea90600160a81b90046001600160401b0316617d0f565b82546001600160401b038083166101009490940a8481029102199091161790925560405190815290915033907f2372996d0929efe8a23b6f30910b8047be7f973b1bfa8bf5ef6dbe702521591f9060200160405180910390a250565b606061365182613f0d565b505f61368c61365f84615945565b6136676159f3565b604051602001613678929190617d47565b604051602081830303815290604052615a3d565b90508060405160200161369f9190617e36565b604051602081830303815290604052915050919050565b6136be613f45565b3068929eee149b4bd2126854036136dc5763ab143c065f526004601cfd5b3068929eee149b4bd21268555f6136f2836140a7565b6001600160a01b0384165f908152600f60205260409020805491925090600160e01b900460ff16600181600681111561372d5761372d617487565b1415801561374d5750600281600681111561374a5761374a617487565b14155b801561376b5750600381600681111561376857613768617487565b14155b1561378b5780604051633ba7bf8960e11b8152600401610ee39190617c88565b815460ff600160f01b9091048116908516811015806137b25750600d5460ff908116908616115b156137dd57604051633abb443b60e21b815260ff808316600483015286166024820152604401610ee3565b60ff8082165f908152600a602052604080822054928816825281205490828211613807575f613811565b6138118383617b25565b90508034146138355760405163222d164360e21b8152346004820152602401610ee3565b600185600681111561384957613849617487565b03613966578015613886576001600160a01b0389165f908152600b60205260408120805483929061387b908490617bb0565b9091555061389a9050565b8282101561389a5761389a89888585615a63565b855460ff60f01b1916600160f01b60ff8a16021786556001600160a01b03808a165f908152600c60205260409020600201541615613903576001600160a01b0389165f908152600c60205260409020600201805460ff60a01b1916600160a01b60ff8b16021790555b6040805160ff80871682528a166020820152908101849052606081018390526001600160a01b038a16907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a250505050505050613b8b565b5f602e5f8b6001600160a01b03166001600160a01b031681526020019081526020015f206040518060800160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160059054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481525050905060405180608001604052808a60ff168152602001600d60169054906101000a900463ffffffff1663ffffffff168152602001336001600160a01b0316815260200183815250602e5f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548163ffffffff021916908363ffffffff1602179055506040820151815f0160056101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160010155905050613b088a602c6157bf90919063ffffffff16565b50606081015115613b2557613b2581604001518260600151614123565b600d546040805160ff8c168152600160b01b90920463ffffffff16602083015281018390526001600160a01b038b16907fdffa95238a907cf8b6360a883f195928a82c8d7746dfe6fca84936929024a9d59060600160405180910390a250505050505050505b3868929eee149b4bd21268555050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b613bd0613ed9565b613bd982613f6e565b506001600160a01b0382165f818152600f602090815260409182902080546001600160f81b0316600160f81b60ff87169081029190911790915591519182527ffa96cc66d1772e5646f86e374867e4e32b5b448b2aadb331568e34c2d063e45591015b60405180910390a25050565b613c50613ed9565b6001600160a01b038116613c7957604051631e4fbdf760e01b81525f6004820152602401610ee3565b61157281614b95565b613c8a613f45565b3068929eee149b4bd212685403613ca85763ab143c065f526004601cfd5b3068929eee149b4bd21268555f613cbe836140a7565b6001600160a01b0384165f908152600f60205260409020909150613ce181615bd9565b613d00578060405163c11d33f760e01b8152600401610ee39190617e67565b613d098161571d565b5f613d15858486615c72565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051613d5291815260200190565b60405180910390a25050503868929eee149b4bd21268555050565b5f6001600160e01b031982166380ac58cd60e01b1480613d9d57506001600160e01b03198216635b5e139f60e01b145b80610eb857506301ffc9a760e01b6001600160e01b0319831614610eb8565b6001600160a01b0381165f908152600f602052604090208054602b54600160e01b90910460ff1690613ded826157d3565b15613e0057613dfd600182617b25565b90505b613e0a8482615ded565b5f613e1485611955565b506001600160a01b0387165f908152600b60205260408082208290555191935091505f5160206182325f395f51905f529083908381818185875af1925050503d805f8114613e7d576040519150601f19603f3d011682016040523d82523d5f602084013e613e82565b606091505b5050905080613ea457604051630b567ce360e31b815260040160405180910390fd5b600d54613ebf908690600160b01b900463ffffffff16615f26565b613ec88561571d565b613ed186615f7d565b505050505050565b600d546001600160a01b03620100009091041633146122835760405163118cdaa760e01b8152336004820152602401610ee3565b5f818152600260205260408120546001600160a01b031680610eb857604051637e27328960e01b815260048101849052602401610ee3565b600d54610100900460ff16156122835760405163d93c066560e01b815260040160405180910390fd5b5f6001600160a01b038216613f8281614b42565b613fa25760405163ed15e6cf60e01b815260048101829052602401610ee3565b826001600160a01b0316613fb582612703565b6001600160a01b031614610eb8576040516330fa89ab60e11b815260040160405180910390fd5b6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff1681600681111561401057614010617487565b81600681111561402257614022617487565b1461104b5780604051633ba7bf8960e11b8152600401610ee39190617c88565b61404d816001617c50565b825463ffffffff91909116600160a01b0263ffffffff60a01b19909116178255614078826002615fef565b7f44f68a196beb8e3ae6b6afe9504db62c81b4e511e987a263b4f1a9bc49c90762826040516131679190617e67565b5f6140b182613f6e565b506140bb82614a84565b9050336001600160a01b038316148015906140df5750336001600160a01b03821614155b156135ac5760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b5f61411c836001600160a01b03841661611e565b9392505050565b805f0361412e575050565b604051634875485760e11b81526001600160a01b03831660048201525f60248201525f5160206182325f395f51905f52906390ea90ae90620186a09084906044015f604051808303818589803b158015614186575f5ffd5b5088f19450505050508015614199575060015b611528576001600160a01b0382165f908152602f6020526040812080548392906141c4908490617bb0565b90915550506040518181526001600160a01b038316907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb097321590602001613c3c565b5f8151606014614227576040516333a234f960e11b815260040160405180910390fd5b5f825f8151811061423a5761423a617afd565b016020015160f81c905060808116158061425657506040811615155b15614274576040516333a234f960e11b815260040160405180910390fd5b5f61427f8486616208565b86516040519192505f91829161b1519163a65ebb2560e01b916142a8918a908890602401617ed9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516142e69190617f11565b5f60405180830381855afa9150503d805f811461431e576040519150601f19603f3d011682016040523d82523d5f602084013e614323565b606091505b509150915081158061433757508051602014155b1561435757806040516306fe67db60e31b8152600401610ee3919061724a565b8080602001905181019061436b9190617f1c565b61438a578760405163a865bb3560e01b8152600401610ee39190617f37565b6143948688616258565b98975050505050505050565b60ff81165f908152600a602052604081205483146143d45760405163222d164360e21b815260048101849052602401610ee3565b5090919050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f00000000000000000000000000000000000000000000000000000000000000004614166144ce5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b6719010000000000005f5280601a5281603a52604260182090505f603a52919050565b5f6144fb856162c8565b1561452657846001600160a01b031661451585858561639b565b6001600160a01b0316149050612a80565b61453285858585616415565b95945050505050565b6001600160a01b038381165f818152600f602081815260408084208054825160e08101845287815263ffffffff81860181815294820188815260608301898152608084018a905260ff8e811660a0860152600160f81b86041660c085018190529a909952969095528051935195518516600160c01b0263ffffffff60c01b1996909516600160a01b026001600160c01b031990921693909816929092179190911792831682178155925193949391839160ff60e01b191664ffffffffff60c01b1990911617600160e01b83600681111561461757614617617487565b02179055506080820151815460a084015160c09094015161ffff60e81b19909116600160e81b9215159290920260ff60f01b191691909117600160f01b60ff94851602176001600160f81b0316600160f81b93909116929092029190911790556001600160a01b0384165f908152600f60205260409020614699816001615fef565b6001600160a01b0385165f9081526029602052604090206146bb878983617fa7565b506001600160a01b0385165f908152600b602052604090819020849055517f9d9bab592843361c508cec6cc23820609c04fe07a621d03bf04b7520759d364190614706908390617e67565b60405180910390a150505050505050565b6001600160a01b0382165f908152600b60205260408120548183821161473d575f614532565b6145328483617b25565b811580614752575080155b8061475c57508181115b1561152857604051635700689f60e11b81526004810183905260248101829052604401610ee3565b61478f816004615fef565b805463ffffffff60c01b191663ffffffff60c01b1781556040517f170cba9e80cc0d156bc6ed689fa1d09ee788e1000c092512ef8698454b2081ee90611d30908390617e67565b5f8160068111156147e9576147e9617487565b14806148065750600681600681111561480457614804617487565b145b156115725780604051633ba7bf8960e11b8152600401610ee39190617c88565b6060610eb8602a5f84600681111561484057614840617487565b60ff1660ff1681526020019081526020015f206157b3565b5f5f61486485846164e8565b6001600160a01b0386165f908152600b6020526040812080549293508392909190614890908490617b25565b9091555050604051634875485760e11b81526001600160a01b0385166004820152602481018290525f5160206182325f395f51905f52906390ea90ae906044015f604051808303815f87803b1580156148e7575f5ffd5b505af11580156148f9573d5f5f3e3d5ffd5b5092979650505050505050565b5f806004836149158688617c6c565b61491f9190618060565b6149299190618079565b90505f601d8260ff166004811061494257614942617afd565b6003020190508563ffffffff168160020160089054906101000a900463ffffffff1663ffffffff161461453257604051634fadd4d360e11b815263ffffffff87166004820152602401610ee3565b5f8061499c8585617c6c565b90505f6004826149ac8683618060565b6149b6919061809a565b6149c09190618079565b90505f60118260ff16600481106149d9576149d9617afd565b6003020190508663ffffffff168160020160089054906101000a900463ffffffff1663ffffffff1614614a2757604051634fadd4d360e11b815263ffffffff88166004820152602401610ee3565b9695505050505050565b614a39616548565b600d805461ff00191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038082165f908152600c60205260408120600281015491929091168061411c57509192915050565b6001600160a01b038216614adc57604051633250574960e11b81525f6004820152602401610ee3565b5f614ae883835f616570565b90506001600160a01b0381161561104b576040516339e3563760e11b81525f6004820152602401610ee3565b604080516020838101516001600160fd1b031682528284015190820152606092830151918101919091522090565b5f811580614b5757506001600160a01b038210155b15614b785760405163ed15e6cf60e01b815260048101839052602401610ee3565b505f908152600260205260409020546001600160a01b0316151590565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60015b8181101561104b57828282818110614c0d57614c0d617afd565b9050602002016020810190614c229190617203565b6001600160a01b03168383614c38600185617b25565b818110614c4757614c47617afd565b9050602002016020810190614c5c9190617203565b6001600160a01b031610614cc0578282614c77600184617b25565b818110614c8657614c86617afd565b9050602002016020810190614c9b9190617203565b60405163836e3a7d60e01b81526001600160a01b039091166004820152602401610ee3565b600101614bf3565b5f614cd3602c6157b3565b600d54909150600160b01b900463ffffffff165f805b8351811015615089575f848281518110614d0557614d05617afd565b6020908102919091018101516001600160a01b038082165f908152602e84526040908190208151608081018352815460ff811680835263ffffffff61010083041697830197909752600160281b900490931691830191909152600101546060820152909250901580614d9557506001600160a01b0382165f908152600f6020526040902054600160e81b900460ff165b15614daa57614da38261663b565b5050615081565b6001600160a01b0382165f908152600f60209081526040808320805460ff600160f01b9091048116808652600a909452828520548651909116855291909320548181108015614e14575060018560200151614e059190617c50565b63ffffffff168963ffffffff16105b15614e2457505050505050615081565b6001600160a01b0386165f908152602e6020526040812080546001600160c81b031916815560010155614e58602c87614108565b505f82821115614e995760608601516001600160a01b0388165f908152600b602052604081208054909190614e8e908490617bb0565b90915550614faa9050565b5f614ea48385617b25565b6001600160a01b0389165f908152600b6020526040902054909150848110614ece57819250614ee3565b83811115614ee357614ee08482617b25565b92505b8215614f91576001600160a01b0389165f908152600b602052604081208054859290614f10908490617b25565b909155505f9050614f208a614a84565b6001600160a01b0381165f908152602f6020526040812080549293508692909190614f4c908490617bb0565b90915550506040518481526001600160a01b038216907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732159060200160405180910390a2505b614f9b8383617b25565b614fa5908c617bb0565b9a5050505b8551855460ff909116600160f01b0260ff60f01b199091161785556001600160a01b038781165f908152600c602052604090206002015416156150205785516001600160a01b0388165f908152600c60205260409020600201805460ff909216600160a01b0260ff60a01b199092169190911790555b85516040805160ff808816825290921660208301528101849052606081018390526001600160a01b038816907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a2505050505050505b600101614ce9565b50801561104b576040515f905f5160206182325f395f51905f529083908381818185875af1925050503d805f81146150dc576040519150601f19603f3d011682016040523d82523d5f602084013e6150e1565b606091505b5050905080611b5857604051630b567ce360e31b815260040160405180910390fd5b600d545f9081908190606090600160d01b900460ff16826004615127836001618060565b6151319190618079565b600d805460ff60d01b1916600160d01b60ff841602178082559192505f9160169061516890600160b01b900463ffffffff166180b3565b91906101000a81548163ffffffff021916908363ffffffff160217905590505f601d8360ff166004811061519e5761519e617afd565b6003020190505f6151ad612bfd565b90506040518060c001604052808380548060200260200160405190810160405280929190818152602001828054801561520d57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116151ef575b505050918352505060408084015160208301520161522c436001617c31565b6001600160401b0316815263ffffffff80861660208301526060808501519091166040830152600d5460ff908116919092015260119086166004811061527457615274617afd565b600302015f820151815f01908161528b91906180ce565b50602082015160018201556040820151600291820180546060850151608086015160a0909601516001600160401b039094166001600160601b031990921691909117600160401b63ffffffff928316021764ffffffffff60601b1916600160601b919095160260ff60801b191693909317600160801b60ff90921691909102179091555f9060049061531e908790618060565b6153289190618079565b90506040518060c001604052808c81526020015f81526020015f6001600160401b0316815260200185600261535d9190617c50565b63ffffffff1681525f60208201819052604090910152601d60ff83166004811061538957615389617afd565b600302015f820151815f0190816153a091906180ce565b50602082810151600183015560408084015160029093018054606080870151608088015160a09098015160ff16600160801b0260ff60801b1963ffffffff998a16600160601b021664ffffffffff60601b1999909216600160401b026001600160601b03199094166001600160401b039098169790971792909217969096161793909317909255848201519285015186548351818402810184019094528084528894939192889291839183018282801561548157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311615463575b5050505050905099509950995099505050505050509193509193565b5f6154a86002614826565b90505f5b8151811015615506575f600f5f8484815181106154cb576154cb617afd565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2090506154fd8161675d565b506001016154ac565b505f6155126004614826565b600d54909150600160d01b900460ff165f6004615530836001618060565b61553a9190618079565b90505f7fbd0b8371ed11e4a5f6acd1f1a0d78b3f7e6ab3473c6396c9f28027132562600c8660405160200161558692919091825260e01b6001600160e01b031916602082015260240190565b60405160208183030381529060405280519060200120905061561560118460ff16600481106155b7576155b7617afd565b6003020180546040805160208084028201810190925282815292919083018282801561560a57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116155ec575b505050505082616797565b61562e601d8360ff16600481106155b7576155b7617afd565b61566b8888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859250616797915050565b5f5b84518110156156d3575f85828151811061568957615689617afd565b6020026020010151905061569d81846167e7565b156156a857506156cb565b6001600160a01b0381165f908152600f602052604090206156c99089615f26565b505b60010161566d565b505050505050505050565b6156e6613f45565b600d805461ff0019166101001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614a673390565b615728816006615fef565b805460ff60e81b198116600160e81b17825561574c906001600160a01b031661663b565b7ffab16134cb74fff6e7d137bf93f6b2ab4c1c61cbe53dad2c8cb57744353bd39b81604051611d309190617e67565b5f6157875f835f616570565b90506001600160a01b03811661152857604051637e27328960e01b815260048101839052602401610ee3565b60605f61411c83616804565b5f61411c836001600160a01b03841661685d565b5f60038260068111156157e8576157e8617487565b14806158055750600482600681111561580357615803617487565b145b80610eb85750600282600681111561581f5761581f617487565b1492915050565b6001600160a01b0383163b1561121157604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290615868908890889087908790600401618152565b6020604051808303815f875af19250505080156158a2575060408051601f3d908101601f1916820190925261589f91810190618184565b60015b615909573d8080156158cf576040519150601f19603f3d011682016040523d82523d5f602084013e6158d4565b606091505b5080515f0361590157604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14613ed157604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b60605f615951836168a9565b6028602282012090915060601c60295b60018111156159ea57600782600f161180156159965750606083828151811061598c5761598c617afd565b016020015160f81c115b156159d357602060f81b8382815181106159b2576159b2617afd565b0160200180516001600160f81b0319908116909218909116905f82901a9053505b60049190911c906159e38161819f565b9050615961565b50909392505050565b6060615a196040518061052001604052806104ed81526020016182526104ed9139615a3d565b604051602001615a2991906181b4565b604051602081830303815290604052905090565b6060610eb88260405180606001604052806040815260200161873f6040913960016168bf565b5f615a6e8284617b25565b6001600160a01b0386165f908152600b6020526040812054919250848210615a97575081615aac565b83821115615aac57615aa98483617b25565b90505b8015615b49576001600160a01b0387165f908152600b602052604081208054839290615ad9908490617b25565b9091555050604051634875485760e11b81526001600160a01b03871660048201525f60248201525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615b31575f5ffd5b505af1158015615b43573d5f5f3e3d5ffd5b50505050505b5f615b548285617b25565b90508015615bcf576040515f905f5160206182325f395f51905f529083908381818185875af1925050503d805f8114615ba8576040519150601f19603f3d011682016040523d82523d5f602084013e615bad565b606091505b50509050806156d357604051630b567ce360e31b815260040160405180910390fd5b5050505050505050565b80545f90600160e01b900460ff166001816006811115615bfb57615bfb617487565b03615c095750600192915050565b82545f90615c2590600160c01b900463ffffffff166001617c50565b90506005826006811115615c3b57615c3b617487565b148015615c5a5750600d5463ffffffff808316600160b01b9092041610155b15615c69575060019392505050565b505f9392505050565b5f615c7c84615f7d565b5f5f5f615c8887611955565b925092509250825f03615ca05782935050505061411c565b6001600160a01b0387165f908152600b60205260408120819055828410615cc8575081615d45565b50825f5f5160206182325f395f51905f52615ce38386617b25565b6040515f81818185875af1925050503d805f8114615d1c576040519150601f19603f3d011682016040523d82523d5f602084013e615d21565b606091505b5050905080615d4357604051630b567ce360e31b815260040160405180910390fd5b505b858015615d5f57505f5160206182325f395f51905f523182115b15615d76575f5160206182325f395f51905f523191505b604051634875485760e11b81526001600160a01b0388166004820152602481018390525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615dca575f5ffd5b505af1158015615ddc573d5f5f3e3d5ffd5b505050505081816143949190617bb0565b600d54600160b01b810463ffffffff1690600160d01b900460ff165f615e14838084614990565b9050615e208186616a39565b508054615e2d8582614747565b5f615e39856001617c50565b90505f615e47828787614906565b9050615e538189616a39565b5080549250615e628784614747565b5f615e6e876002617c50565b90505f615e7c828989614906565b9050615e88818b616a39565b5080549450615e978986614747565b600d54600160d81b900461ffff16891015615f1a57600d805461ffff8b8116600160d81b90810261ffff60d81b1984161793849055604080519382900483168085529190940490911660208301529181018b90527f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505b50505050505050505050565b615f31826005615fef565b815463ffffffff60c01b1916600160c01b63ffffffff8316021782556040517f727bfc4079207401298f48a3f1a92c9b40d83e086fe5b584a7b0644fdbdb56ee90613167908490617e67565b615f8f6001600160a01b03821661577b565b6008545f03615fb1576040516315ae672760e01b815260040160405180910390fd5b6001600160a01b03165f908152600c602052604081209081556001810180546001600160a01b031916905560020180546001600160e81b0319169055565b81546001600160a01b03811690600160e01b900460ff1661603782602a5f84600681111561601f5761601f617487565b60ff16815260208101919091526040015f2090614108565b505f83600681111561604b5761604b617487565b1415801561606b5750600683600681111561606857616068617487565b14155b1561608b5761608982602a5f8660068111156130f5576130f5617487565b505b5f616095826157d3565b90505f6160a1856157d3565b90508180156160ae575080155b156160ca57602b5f81546160c19061819f565b909155506160ed565b811580156160d55750805b156160ed57602b5f81546160e890617c96565b909155505b85548590879060ff60e01b1916600160e01b83600681111561611157616111617487565b0217905550505050505050565b5f81815260018301602052604081205480156161f8575f616140600183617b25565b85549091505f9061615390600190617b25565b90508082146161b2575f865f01828154811061617157616171617afd565b905f5260205f200154905080875f01848154811061619157616191617afd565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806161c3576161c36181e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610eb8565b5f915050610eb8565b5092915050565b6060825160601461622c576040516333a234f960e11b815260040160405180910390fd5b604051616241905f90859085906020016181f9565b604051602081830303815290604052905092915050565b5f61626283614b14565b5f818152601060205260409020549091506001600160a01b03161561629a57604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b5f6017826001600160a01b03163b146162e257505f919050565b5f826001600160a01b0316803b806020016040519081016040528181525f908060200190933c805190915060ef60f81b9082905f9061632357616323617afd565b01602001516001600160f81b03191614801561636657508051600160f81b908290600190811061635557616355617afd565b01602001516001600160f81b031916145b801561411c575080515f908290600290811061638457616384617afd565b01602001516001600160f81b031916149392505050565b5f60405182604081146163b657604181146163dd5750611ce3565b60208581013560ff81901c601b0190915285356040526001600160ff1b03166060526163ee565b60408501355f1a6020526040856040375b50845f526020604060805f60015afa505f6060523d60601851915080604052509392505050565b5f6001600160a01b03851615612a8057604051853b6164a5578260408114616445576041811461646c57506164df565b60208581013560ff81901c601b0190915285356040526001600160ff1b031660605261647d565b60408501355f1a6020526040856040375b50845f526020600160805f60015afa5180871860601b3d119250505f606052806040526164df565b631626ba7e60e01b80825285600483015260248201604081528460448401528486606485013760208160648701858b5afa90519091141691505b50949350505050565b60ff81165f908152600a6020526040812054816165058583614717565b9050801580616527575060ff84165f908152600a602052604090206001015481105b15612a8057604051633737b70960e11b815260048101829052602401610ee3565b600d54610100900460ff1661228357604051638dfc202b60e01b815260040160405180910390fd5b5f5f61657d858585616b3e565b90506001600160a01b0381166165d9576165d484600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6165fc565b846001600160a01b0316816001600160a01b0316146165fc576165fc8185616c30565b6001600160a01b0385166166185761661384616cad565b612a80565b846001600160a01b0316816001600160a01b031614612a8057612a808585616d54565b6001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b90049095169185019190915260010154606084015290036166a45761104b602c83614108565b6001600160a01b0382165f908152602e6020526040812080546001600160c81b0319168155600101556166d8602c83614108565b506060810151156115285760608101516040808301516001600160a01b03165f908152602f6020529081208054909190616713908490617bb0565b9250508190555080604001516001600160a01b03167f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732158260600151604051613c3c91815260200190565b616768816003615fef565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b81604051611d309190617e67565b5f5b825181101561104b576167df60016167d96167d68685815181106167bf576167bf617afd565b602002602001015186616da290919063ffffffff16565b90565b90616dbc565b600101616799565b6001600160a01b0382165f9081526020829052604081205c61411c565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561685157602002820191905f5260205f20905b81548152602001906001019080831161683d575b50505050509050919050565b5f8181526001830160205260408120546168a257508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610eb8565b505f610eb8565b6060610eb86001600160a01b0383166014616dc3565b606083515f036168dd575060408051602081019091525f815261411c565b5f8261690d576003855160046168f39190617b99565b6168fe906002617bb0565b6169089190617bd7565b616932565b60038551600261691d9190617bb0565b6169279190617bd7565b616932906004617b99565b90505f816001600160401b0381111561694d5761694d6172d8565b6040519080825280601f01601f191660200182016040528015616977576020820181803683370190505b509050600185016020820187885189016020810180515f82525b828410156169ec576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450616991565b905250508515616a2d57600388510660018114616a105760028114616a2357616a2b565b603d6001830353603d6002830353616a2b565b603d60018303535b505b50909695505050505050565b81545f90815b81811015616b3457836001600160a01b0316858281548110616a6357616a63617afd565b5f918252602090912001546001600160a01b031603616b2c5784616a88600184617b25565b81548110616a9857616a98617afd565b905f5260205f20015f9054906101000a90046001600160a01b0316858281548110616ac557616ac5617afd565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084805480616b0057616b006181e5565b5f8281526020902081015f1990810180546001600160a01b03191690550190555060019150610eb89050565b600101616a3f565b505f949350505050565b5f828152600260205260408120546001600160a01b0390811690831615616b6a57616b6a818486616f34565b6001600160a01b03811615616ba457616b855f855f5f616f98565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615616bd2576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f616c3a836129f0565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314616c8f575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90616cbe90600190617b25565b5f8381526009602052604081205460088054939450909284908110616ce557616ce5617afd565b905f5260205f20015490508060088381548110616d0457616d04617afd565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480616d3b57616d3b6181e5565b600190038181905f5260205f20015f9055905550505050565b5f6001616d60846129f0565b616d6a9190617b25565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03165f9081526020919091526040902090565b80825d5050565b6060825f616dd2846002617b99565b616ddd906002617bb0565b6001600160401b03811115616df457616df46172d8565b6040519080825280601f01601f191660200182016040528015616e1e576020820181803683370190505b509050600360fc1b815f81518110616e3857616e38617afd565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110616e6657616e66617afd565b60200101906001600160f81b03191690815f1a9053505f616e88856002617b99565b616e93906001617bb0565b90505b6001811115616f0a576f181899199a1a9b1b9c1cb0b131b232b360811b83600f1660108110616ec757616ec7617afd565b1a60f81b828281518110616edd57616edd617afd565b60200101906001600160f81b03191690815f1a90535060049290921c91616f038161819f565b9050616e96565b508115612a805760405163e22e27eb60e01b81526004810186905260248101859052604401610ee3565b616f3f83838361709c565b61104b576001600160a01b038316616f6d57604051637e27328960e01b815260048101829052602401610ee3565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610ee3565b8080616fac57506001600160a01b03821615155b1561706d575f616fbb84613f0d565b90506001600160a01b03831615801590616fe75750826001600160a01b0316816001600160a01b031614155b8015616ffa5750616ff88184613b9b565b155b156170235760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610ee3565b811561706b5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b03831615801590612a805750826001600160a01b0316846001600160a01b031614806170d557506170d58484613b9b565b80612a805750505f908152600460205260409020546001600160a01b03908116911614919050565b6040805160e0810182525f8082526020820181905291810182905290606082019081525f602082018190526040820181905260609091015290565b6001600160e01b031981168114611572575f5ffd5b5f6020828403121561715d575f5ffd5b813561411c81617138565b5f5f83601f840112617178575f5ffd5b5081356001600160401b0381111561718e575f5ffd5b6020830191508360208260061b85010111156171a8575f5ffd5b9250929050565b5f5f602083850312156171c0575f5ffd5b82356001600160401b038111156171d5575f5ffd5b6171e185828601617168565b90969095509350505050565b80356001600160a01b03811681146135ac575f5ffd5b5f60208284031215617213575f5ffd5b61411c826171ed565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61411c602083018461721c565b5f6020828403121561726c575f5ffd5b5035919050565b5f5f60408385031215617284575f5ffd5b61728d836171ed565b946020939093013593505050565b5f5f83601f8401126172ab575f5ffd5b5081356001600160401b038111156172c1575f5ffd5b6020830191508360208285010111156171a8575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126172fb575f5ffd5b81356001600160401b03811115617314576173146172d8565b604051601f8201601f19908116603f011681016001600160401b0381118282101715617342576173426172d8565b604052818152838201602001851015617359575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215617385575f5ffd5b604051602081016001600160401b03811182821017156173a7576173a76172d8565b60405290508082356001600160401b038111156173c2575f5ffd5b6173ce858286016172ec565b8252505092915050565b5f5f5f5f5f5f5f60a0888a0312156173ee575f5ffd5b87356001600160401b03811115617403575f5ffd5b61740f8a828b0161729b565b90985096505060208801356001600160401b0381111561742d575f5ffd5b6174398a828b01617375565b955050617448604089016171ed565b935060608801356001600160401b03811115617462575f5ffd5b61746e8a828b0161729b565b989b979a50959894979596608090950135949350505050565b634e487b7160e01b5f52602160045260245ffd5b600781106174b757634e487b7160e01b5f52602160045260245ffd5b9052565b60018060a01b03815116825263ffffffff602082015116602083015263ffffffff604082015116604083015260608101516174f9606084018261749b565b5060808101511515608083015260ff60a08201511660a083015260c081015161104b60c084018260ff169052565b60e08101610eb882846174bb565b5f5f5f60608486031215617547575f5ffd5b617550846171ed565b925061755e602085016171ed565b929592945050506040919091013590565b5f6020828403121561757f575f5ffd5b81356007811061411c575f5ffd5b602080825282518282018190525f918401906040840190835b818110156175cf576175b98385516174bb565b6020939093019260e092909201916001016175a6565b509095945050505050565b8015158114611572575f5ffd5b5f602082840312156175f7575f5ffd5b813561411c816175da565b5f5f5f60408486031215617614575f5ffd5b83356001600160401b03811115617629575f5ffd5b6176358682870161729b565b90945092505060208401356001600160401b03811115617653575f5ffd5b61765f86828701617375565b9150509250925092565b63ffffffff81168114611572575f5ffd5b5f6020828403121561768a575f5ffd5b813561411c81617669565b5f8151808452602084019350602083015f5b828110156176ce5781516001600160a01b03168652602095860195909101906001016176a7565b5093949350505050565b602081525f825160c060208401526176f360e0840182617695565b9050602084015160408401526001600160401b03604085015116606084015263ffffffff606085015116608084015263ffffffff60808501511660a084015260ff60a08501511660c08401528091505092915050565b5f60208284031215617759575f5ffd5b813561ffff8116811461411c575f5ffd5b5f5f6020838503121561777b575f5ffd5b82356001600160401b03811115617790575f5ffd5b6171e18582860161729b565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156177f357603f198786030184526177de85835161721c565b945060209384019391909101906001016177c2565b50929695505050505050565b5f5f60208385031215617810575f5ffd5b82356001600160401b03811115617825575f5ffd5b8301601f81018513617835575f5ffd5b80356001600160401b0381111561784a575f5ffd5b8560208260051b840101111561785e575f5ffd5b6020919091019590945092505050565b60ff60f81b8816815260e060208201525f61788c60e083018961721c565b828103604084015261789e818961721c565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156178f35783518352602093840193909201916001016178d5565b50909b9a5050505050505050505050565b602081525f61411c6020830184617695565b5f5f60408385031215617927575f5ffd5b617930836171ed565b91506020830135617940816175da565b809150509250929050565b803560ff811681146135ac575f5ffd5b5f6020828403121561796b575f5ffd5b61411c8261794b565b5f5f5f5f60808587031215617987575f5ffd5b84356001600160401b0381111561799c575f5ffd5b6179a8878288016172ec565b9450506179b7602086016171ed565b92506179c5604086016171ed565b9396929550929360600135925050565b5f5f5f5f608085870312156179e8575f5ffd5b6179f1856171ed565b93506179ff602086016171ed565b92506040850135915060608501356001600160401b03811115617a20575f5ffd5b617a2c878288016172ec565b91505092959194509250565b5f6080828403128015617a49575f5ffd5b509092915050565b5f5f60408385031215617a62575f5ffd5b617a6b836171ed565b9150617a796020840161794b565b90509250929050565b5f5f60408385031215617a93575f5ffd5b617a9c836171ed565b9150617a79602084016171ed565b6001600160a01b038816815263ffffffff87811660208301528616604082015260e08101617adb606083018761749b565b931515608082015260ff92831660a0820152911660c090910152949350505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610eb857610eb8617b11565b604081016001600160a01b03617b4d846171ed565b168252602092830135929091019190915290565b600181811c90821680617b7557607f821691505b602082108103617b9357634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610eb857610eb8617b11565b80820180821115610eb857610eb8617b11565b634e487b7160e01b5f52601260045260245ffd5b5f82617be557617be5617bc3565b500490565b96875260208701959095526001600160a01b03938416604087015291909216606085015260ff90911660808401526001600160401b031660a083015260c082015260e00190565b6001600160401b038181168382160190811115610eb857610eb8617b11565b63ffffffff8181168382160190811115610eb857610eb8617b11565b63ffffffff8281168282160390811115610eb857610eb8617b11565b60208101610eb8828461749b565b5f60018201617ca757617ca7617b11565b5060010190565b5f60ff821660ff8103617cc357617cc3617b11565b60010192915050565b813581556020820135600182015560408201356002820155600381016060830135617cf681617669565b815463ffffffff191663ffffffff919091161790555050565b5f6001600160401b0382166001600160401b038103617cc357617cc3617b11565b5f81518060208401855e5f93019283525090919050565b7f7b226e616d65223a202254656c636f696e2d4e6574776f726b20436f6e73656e8152651cdd5cd3919560d21b60208201525f617d876026830185617d30565b7f222c20226465736372697074696f6e223a2022455243373231204e465420776881527f6f7365206f776e657273686970206c656467657220726570726573656e74732060208201527f746865207065726d697373696f6e65642077686974656c69737420666f72207660408201527530b634b230ba37b9399116101134b6b0b3b2911d101160511b6060820152617e226076820185617d30565b61227d60f01b815260020195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f61411c601d830184617d30565b81546001600160a01b038116825263ffffffff60a082901c8116602084015260c082901c16604083015260e0820190617ea96060840160ff8360e01c1661749b565b617ebd6080840160ff8360e81c1615159052565b60f081901c60ff1660a084015260f881901c60c0840152616201565b606081525f617eeb606083018661721c565b8281036020840152617efd818661721c565b90508281036040840152614a27818561721c565b5f61411c8284617d30565b5f60208284031215617f2c575f5ffd5b815161411c816175da565b602081525f8251602080840152612a80604084018261721c565b5f5b8281101561104b575f82820155600101617f53565b601f82111561104b578282111561104b57805f5260205f20601f840160051c6020851015617f9357505f5b61121181601f860160051c03828401617f51565b6001600160401b03831115617fbe57617fbe6172d8565b617fd283617fcc8354617b61565b83617f68565b5f601f841160018114618003575f8515617fec5750838201355b5f19600387901b1c1916600186901b178355611211565b5f83815260208120601f198716915b828110156180325786850135825560209485019460019092019101618012565b508682101561804e575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60ff8181168382160190811115610eb857610eb8617b11565b5f60ff83168061808b5761808b617bc3565b8060ff84160691505092915050565b60ff8281168282160390811115610eb857610eb8617b11565b5f63ffffffff821663ffffffff8103617cc357617cc3617b11565b81516001600160401b038111156180e7576180e76172d8565b600160401b8111156180fb576180fb6172d8565b81548183558082101561811f57825f528160205f200161811d83830382617f51565b505b5060208301825f5260205f205f5b83811015613ed15782516001600160a01b03168282015560209092019160010161812d565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614a279083018461721c565b5f60208284031215618194575f5ffd5b815161411c81617138565b5f816181ad576181ad617b11565b505f190190565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081525f61411c601a830184617d30565b634e487b7160e01b5f52603160045260245ffd5b6001600160e81b0319841681525f6182146003830185617d30565b60609390931b6001600160601b031916835250506014019291505056fe00000000000000000000000007a07a07a07a07a07a07a07a07a07a07a07a07a03c7376672077696474683d22373922206865696768743d223830222076696577426f783d22302030203739203830222066696c6c3d226e6f6e652220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e203c6d61736b2069643d226d61736b305f3834395f3334313722207374796c653d226d61736b2d747970653a616c70686122206d61736b556e6974733d227573657253706163654f6e5573652220783d22302220793d2230222077696474683d22373922206865696768743d223830223e203c726563742077696474683d2237382e30303522206865696768743d223830222066696c6c3d2223433443344334222f3e203c2f6d61736b3e203c67206d61736b3d2275726c28236d61736b305f3834395f3334313729223e203c7265637420783d2231372e393534362220793d2231382e33353435222077696474683d2234322e3239343322206865696768743d2234332e32393138222066696c6c3d227768697465222f3e203c7061746820643d224d37342e323336392032312e393839324337362e363930382032342e303331352037382e323338392032382e323537372037372e363937392033312e333733334c37322e343136362036312e333235334337312e3836362036342e343437352036382e393539322036372e383739382036352e393632392036382e393631324c33372e313934372037392e333334344333342e313938342038302e343135372032392e373432312037392e363239392032372e323936342037372e3538394c332e3831312035382e3030323143312e33353730382035352e39353938202d302e31393233382035312e3734313720302e3335383134382034382e363139354c352e36333935312031382e3636373443362e31393030342031352e3534353220392e30393638372031322e313132392031322e303933322031312e303331364c34302e3835393920302e3636363435334334332e38353632202d302e3431343835372034382e3331323520302e3337303930392035302e3735383320322e343131384c37342e323336392032312e393839325a4d34392e373634352033352e343336394c35302e393336342032392e333531334c33392e393531372032392e333638374c34312e3531362032312e333432344c33372e393538332032312e333432344333372e393538332032312e333432342033342e363332382032372e323930312032372e333030362033302e323031394c32362e323839392033352e343530334c33312e303933362033352e34364333312e303933362033352e34362032392e343637342034332e303032392032382e393331362034352e373835344332372e353637372035322e383638322033302e393830362035372e383933392033362e323238312035372e383933394333382e383630362035372e383933392034312e3831372035372e383933392034352e303937322035372e383933394c34362e363532342035312e313636364334362e323734322035312e313636362034332e383031332035312e313636362033392e323333362035312e313636364333352e393336342035312e313636362033362e313039392034392e333138392033362e373433312034362e303330354c33382e373833382033352e343333334c34392e373634352033352e343336395a222066696c6c3d2223313443384646222f3e203c2f673e203c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa164736f6c6343000823000a","sourceMap":"1341:77521:56:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1753:36;;;;;;;;;;;;;;;;;;;160:25:73;;;148:2;133:18;1753:36:56;;;;;;;;1435:222:30;;;;;;;;;;-1:-1:-1;1435:222:30;;;;;:::i;:::-;;:::i;:::-;;;843:14:73;;836:22;818:41;;806:2;791:18;1435:222:30;678:187:73;10094:1354:56;;;;;;;;;;-1:-1:-1;10094:1354:56;;;;;:::i;:::-;;:::i;:::-;;22934:249;;;;;;;;;;-1:-1:-1;22934:249:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2364:89:27:-;;;;;;;;;;;;;:::i;43946:136:56:-;;;;;;;;;;-1:-1:-1;43946:136:56;;;;;:::i;:::-;;:::i;3496:154:27:-;;;;;;;;;;-1:-1:-1;3496:154:27;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3241:32:73;;;3223:51;;3211:2;3196:18;3496:154:27;3077:203:73;6688:194:58;;;;;;;;;;-1:-1:-1;6688:194:58;;;;;:::i;:::-;;:::i;7251:2798:56:-;;;;;;;;;;-1:-1:-1;7251:2798:56;;;;;:::i;:::-;;:::i;32747:500::-;;;;;;;;;;;;;:::i;37416:644::-;;;;;;;;;;-1:-1:-1;37416:644:56;;;;;:::i;:::-;;:::i;28347:1893::-;;;;;;:::i;:::-;;:::i;25848:481::-;;;;;;;;;;-1:-1:-1;25848:481:56;;;;;:::i;:::-;;:::i;:::-;;;;7248:25:73;;;7304:2;7289:18;;7282:34;;;;7332:18;;;7325:34;7236:2;7221:18;25848:481:56;7046:319:73;2062:102:30;;;;;;;;;;-1:-1:-1;2140:10:30;:17;2062:102;;23632:397:56;;;;;;;;;;-1:-1:-1;23632:397:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40542:866::-;;;;;;;;;;;;;:::i;19336:118::-;;;;;;;;;;;;;:::i;6344:239:58:-;;;;;;;;;;-1:-1:-1;6344:239:58;;;;;:::i;22010:401:56:-;;;;;;;;;;-1:-1:-1;22010:401:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44127:185::-;;;;;;;;;;-1:-1:-1;44127:185:56;;;;;:::i;:::-;;:::i;33921:393::-;;;;;;;;;;-1:-1:-1;33921:393:56;;;;;:::i;:::-;;:::i;1736:255:30:-;;;;;;;;;;-1:-1:-1;1736:255:30;;;;;:::i;:::-;;:::i;27431:877:56:-;;;;;;:::i;:::-;;:::i;453:92:59:-;;;;;;;;;;;;-1:-1:-1;;;;;453:92:59;;43683:224:56;;;:::i;20611:1137::-;;;;;;;;;;-1:-1:-1;20611:1137:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1918:29::-;;;;;;;;;;-1:-1:-1;1918:29:56;;;;;:::i;:::-;;:::i;:::-;;;;13097:25:73;;;-1:-1:-1;;;;;13158:31:73;;;13153:2;13138:18;;13131:59;13238:10;13226:23;;;13206:18;;;13199:51;;;;13286:23;13281:2;13266:18;;13259:51;13359:4;13347:17;13341:3;13326:19;;13319:46;13084:3;13069:19;1918:29:56;12848:523:73;24826:130:56;;;;;;;;;;-1:-1:-1;24826:130:56;;;;;:::i;:::-;;:::i;73510:65::-;;;;;;;;;;;;;:::i;4786:132:27:-;;;;;;;;;;-1:-1:-1;4786:132:27;;;;;:::i;:::-;;:::i;30540:2162:56:-;;;;;;:::i;:::-;;:::i;3879:51::-;;;;;;;;;;-1:-1:-1;3879:51:56;;;;;:::i;:::-;;;;;;;;;;;;;;2236:226:30;;;;;;;;;;-1:-1:-1;2236:226:30;;;;;:::i;:::-;;:::i;4106:34:56:-;;;;;;;;;;-1:-1:-1;4106:34:56;;;;;;;;1953:35;;;;;;;;;;-1:-1:-1;1953:35:56;;;;;:::i;:::-;;:::i;1850:84:39:-;;;;;;;;;;-1:-1:-1;1920:7:39;;;;;;;1850:84;;18438:570:56;;;;;;;;;;-1:-1:-1;18438:570:56;;;;;:::i;:::-;;:::i;2184:118:27:-;;;;;;;;;;-1:-1:-1;2184:118:27;;;;;:::i;:::-;;:::i;19918:311:56:-;;;;;;;;;;;;;:::i;:::-;;;13825:4:73;13813:17;;;13795:36;;13783:2;13768:18;19918:311:56;13653:184:73;42437:405:56;;;;;;;;;;-1:-1:-1;42437:405:56;;;;;:::i;:::-;;:::i;24074:707::-;;;;;;;;;;-1:-1:-1;24074:707:56;;;;;:::i;:::-;;:::i;23228:359::-;;;;;;;;;;-1:-1:-1;23228:359:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25001:477::-;;;;;;;;;;-1:-1:-1;25001:477:56;;;;;:::i;:::-;;:::i;1919:208:27:-;;;;;;;;;;-1:-1:-1;1919:208:27;;;;;:::i;:::-;;:::i;2293:101:20:-;;;;;;;;;;;;;:::i;25517:292:56:-;;;;;;;;;;-1:-1:-1;25517:292:56;;;;;:::i;:::-;;:::i;5571:1635::-;;;;;;;;;;-1:-1:-1;5571:1635:56;;;;;:::i;:::-;;:::i;4261:272:58:-;;;;;;;;;;;;;:::i;:::-;;;;;;15880:13:73;;15862:32;;15950:4;15938:17;;;15932:24;15910:20;;;15903:54;16013:4;16001:17;;;15995:24;15973:20;;;15966:54;16080:4;16068:17;;;16062:24;16088:10;16058:41;16036:20;;;16029:71;;;;15849:3;15834:19;;15655:451;73273:61:56;;;;;;;;;;;;;:::i;11383:596:51:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;1198:94:58:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1198:94:58;;42881:763:56;;;;;;;;;;-1:-1:-1;42881:763:56;;;;;:::i;:::-;;:::i;21793:172::-;;;;;;;;;;-1:-1:-1;21793:172:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1638:85:20:-;;;;;;;;;;-1:-1:-1;1710:6:20;;;;;-1:-1:-1;;;;;1710:6:20;1638:85;;2517:93:27;;;;;;;;;;;;;:::i;22456:433:56:-;;;;;;;;;;-1:-1:-1;22456:433:56;;;;;:::i;:::-;;:::i;6987:208:58:-;;;;;;;;;;-1:-1:-1;6987:208:58;;;;;:::i;4095:126::-;;;;;;;;;;-1:-1:-1;4095:126:58;;;;;:::i;:::-;;:::i;38710:131:56:-;;;;;;;;;;;;;:::i;16870:1216::-;;;;;;;;;;;;;:::i;26369:972::-;;;;;;;;;;-1:-1:-1;26369:972:56;;;;;:::i;:::-;;:::i;38100:516::-;;;;;;;;;;;;;:::i;4984:233:27:-;;;;;;;;;;-1:-1:-1;4984:233:27;;;;;:::i;:::-;;:::i;20274:92:56:-;;;;;;;;;;-1:-1:-1;20347:12:56;;-1:-1:-1;;;20347:12:56;;;;20274:92;;20042:10:73;20030:23;;;20012:42;;20000:2;19985:18;20274:92:56;19868:192:73;20411:155:56;;;;;;;;;;;;;:::i;3607:74::-;;;;;;;;;;-1:-1:-1;3607:74:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3607:74:56;;;-1:-1:-1;;;;;3607:74:56;;;;;;;;20320:4:73;20308:17;;;20290:36;;20374:10;20362:23;;;20357:2;20342:18;;20335:51;-1:-1:-1;;;;;20422:32:73;;;20402:18;;;20395:60;;;;20486:2;20471:18;;20464:34;20277:3;20262:19;3607:74:56;20065:439:73;78265:595:56;;;;;;;;;;-1:-1:-1;78265:595:56;;;;;:::i;:::-;;:::i;30280:215::-;;;;;;;;;;;;;:::i;7251:672:58:-;;;;;;;;;;-1:-1:-1;7251:672:58;;;;;:::i;:::-;;:::i;34354:3022:56:-;;;;;;:::i;:::-;;:::i;3927:153:27:-;;;;;;;;;;-1:-1:-1;3927:153:27;;;;;:::i;:::-;;:::i;19053:104:56:-;;;;;;;;;;-1:-1:-1;19133:17:56;;-1:-1:-1;;;19133:17:56;;;;19053:104;;21450:6:73;21438:19;;;21420:38;;21408:2;21393:18;19053:104:56;21276:188:73;18131:262:56;;;;;;;;;;-1:-1:-1;18131:262:56;;;;;:::i;:::-;;:::i;2543:215:20:-;;;;;;;;;;-1:-1:-1;2543:215:20;;;;;:::i;:::-;;:::i;41447:904:56:-;;;;;;;;;;-1:-1:-1;41447:904:56;;;;;:::i;:::-;;:::i;1795:51::-;;;;;;;;;;-1:-1:-1;1795:51:56;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1795:51:56;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;;;;;;;;;;;;;;:::i;1435:222:30:-;1537:4;-1:-1:-1;;;;;;1560:50:30;;-1:-1:-1;;;1560:50:30;;:90;;;1614:36;1638:11;1614:23;:36::i;:::-;1553:97;1435:222;-1:-1:-1;;1435:222:30:o;10094:1354:56:-;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;;;;;;;;588:67;10190:9:56::1;10185:1257;10201:18:::0;;::::1;10185:1257;;;10240:20;10263:7;;10271:1;10263:10;;;;;;;:::i;:::-;;;::::0;;;::::1;::::0;-1:-1:-1;10512:15:56::1;::::0;-1:-1:-1;10538:22:56::1;;::::0;::::1;10263:10:::0;10538:22:::1;:::i;:::-;10512:49:::0;-1:-1:-1;;;;;;10579:12:56;::::1;::::0;;:44:::1;;-1:-1:-1::0;;;;;;10595:28:56;;::::1;;10579:44;10575:58;;;10625:8;;;;10575:58;10818:33;10828:22;;::::0;::::1;:5:::0;:22:::1;:::i;10818:33::-;10814:47;;;10853:8;;;;10814:47;10915:12;::::0;::::1;::::0;::::1;::::0;10880:8:::1;::::0;:32:::1;::::0;10889:22:::1;::::0;10915:5;10889:22:::1;:::i;:::-;-1:-1:-1::0;;;;;10880:32:56::1;-1:-1:-1::0;;;;;10880:32:56::1;;;;;;;;;;;;;:47;10876:513;;;11221:12;::::0;::::1;::::0;::::1;::::0;11185:8:::1;::::0;:32:::1;::::0;11194:22:::1;::::0;11221:5;11194:22:::1;:::i;:::-;-1:-1:-1::0;;;;;11185:32:56::1;-1:-1:-1::0;;;;;11185:32:56::1;;;;;;;;;;;;;:48;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;10876:513:56::1;::::0;-1:-1:-1;10876:513:56::1;;11336:38;11351:22;;::::0;::::1;:5:::0;:22:::1;:::i;:::-;11336:14;:38::i;:::-;11408:23;11425:5;11408:23;;;;;;:::i;:::-;;;;;;;;10226:1216;;10185:1257;10221:3;;10185:1257;;;;10094:1354:::0;;:::o;22934:249::-;-1:-1:-1;;;;;23049:28:56;;23027:19;23049:28;;;:10;:28;;;;;23027:50;;23003:12;;23027:19;23049:28;23027:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23091:6;:13;23108:1;23091:18;23087:66;;23118:35;;-1:-1:-1;;;23118:35:56;;-1:-1:-1;;;;;3241:32:73;;23118:35:56;;;3223:51:73;3196:18;;23118:35:56;3077:203:73;2364:89:27;2409:13;2441:5;2434:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2364:89;:::o;43946:136:56:-;1531:13:20;:11;:13::i;:::-;44028:47:56::1;::::0;-1:-1:-1;;;44028:47:56;;::::1;::::0;::::1;23555:25:73::0;;;44064:10:56::1;23596:18:73::0;;;23589:60;-1:-1:-1;;;;;;;;;;;1249:42:58;44028:27:56::1;::::0;23528:18:73;;44028:47:56::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43946:136:::0;:::o;3496:154:27:-;3563:7;3582:22;3596:7;3582:13;:22::i;:::-;-1:-1:-1;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;3622:21;5963:127;6688:194:58;6858:17;;-1:-1:-1;;;6858:17:58;;;;;;;;;;;7251:2798:56;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;3077:203:73;588:67:59;7439:19:56::1;::::0;7509:11;-1:-1:-1;;;;;7495:33:56;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;7495:33:56::1;;7468:60;;7543:9;7538:1531;7554:22:::0;;::::1;7538:1531;;;7597:26;7626:11;;7638:1;7626:14;;;;;;;:::i;:::-;;;;;;7597:43;;7658:6;:27;;;7689:1;7658:32:::0;7654:46:::1;;7692:8;;;7654:46;7939:16;7966:23;;::::0;::::1;:6:::0;:23:::1;:::i;:::-;7939:51:::0;-1:-1:-1;;;;;;8008:13:56;::::1;::::0;;:46:::1;;-1:-1:-1::0;;;;;;8025:29:56;;::::1;;8008:46;8004:60;;;8056:8;;;;8004:60;8249:34;8259:23;;::::0;::::1;:6:::0;:23:::1;:::i;8249:34::-;8245:48;;;8285:8;;;;8245:48;8308:21;8332:10;8308:21:::0;8343:23:::1;;::::0;::::1;:6:::0;:23:::1;:::i;:::-;-1:-1:-1::0;;;;;8332:35:56::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;8332:35:56;;;:48;-1:-1:-1;;;8332:48:56;::::1;;;8720:25:::0;;;:8:::1;:25:::0;;;;;:37;8332:48;;-1:-1:-1;8720:37:56;;8789:8:::1;::::0;-1:-1:-1;;8798:23:56::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;8789:33:56::1;-1:-1:-1::0;;;;;8789:33:56::1;;;;;;;;;;;;;8771:51;;8836:19;8868:18;8858:7;:28;:59;;8899:18;8858:59;;;8889:7;8858:59;8836:81:::0;-1:-1:-1;8931:14:56::1;8948:41;8962:27;::::0;::::1;;8836:81:::0;8948:41:::1;:::i;:::-;8931:58:::0;-1:-1:-1;9004:21:56::1;8931:58:::0;9004:21;::::1;:::i;:::-;;;9052:6;9039:7;9047:1;9039:10;;;;;;;;:::i;:::-;;;;;;:19;;;::::0;::::1;7583:1486;;;;;;;7538:1531;7578:3;;7538:1531;;;;9083:11;9098:1;9083:16:::0;9079:29:::1;;9101:7;;7251:2798:::0;;:::o;9079:29::-:1;9200:21;9224;:19;:21::i;:::-;:35;;;9200:59;;9269:34;9322:21;;9306:13;:37;;;;:::i;:::-;9269:74;;9427:25;9467:9;9462:442;9478:22:::0;;::::1;9462:442;;;9638:20;9705:11;9691:7;9699:1;9691:10;;;;;;;;:::i;:::-;;;;;;;9662:26;:39;;;;:::i;:::-;9661:55;;;;:::i;:::-;9638:78:::0;-1:-1:-1;9735:16:56;;9731:163:::1;;9816:12;9771:8;:41;9780:11;;9792:1;9780:14;;;;;;;:::i;:::-;:31;::::0;::::1;:14;::::0;;::::1;;:31:::0;;::::1;::::0;-1:-1:-1;9780:31:56::1;:::i;:::-;-1:-1:-1::0;;;;;9771:41:56::1;-1:-1:-1::0;;;;;9771:41:56::1;;;;;;;;;;;;;:57;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;9846:33:56::1;::::0;-1:-1:-1;9867:12:56;9846:33;::::1;:::i;:::-;;;9731:163;-1:-1:-1::0;9502:3:56::1;;9462:442;;;-1:-1:-1::0;9996:46:56::1;10025:17:::0;9996:26;:46:::1;:::i;:::-;9972:21;:70:::0;-1:-1:-1;;;;;665:1:59::1;7251:2798:56::0;;:::o;32747:500::-;1474:19:39;:17;:19::i;:::-;32899:35:56::1;32923:10;32899:23;:35::i;:::-;;32990:57;33012:10;33024:22;32990:21;:57::i;:::-;33103:10;33058:31;33092:22:::0;;;:10:::1;:22;::::0;;;;33227:12:::1;::::0;33199:41:::1;::::0;33092:22;;-1:-1:-1;;;33227:12:56;::::1;;;33199:16;:41::i;:::-;32799:448;32747:500::o:0;37416:644::-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;37597:39:56::2;37619:16;37597:21;:39::i;:::-;-1:-1:-1::0;;;;;;37690:39:56;;::::2;37647:40;37690:39:::0;;;:21:::2;:39;::::0;;;;;;;37647:82;;::::2;::::0;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;::::2;;::::0;::::2;;::::0;;::::2;::::0;;;;-1:-1:-1;;;37647:82:56;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;;;;;37743:26;;37739:63:::2;;37778:24;;-1:-1:-1::0;;;37778:24:56::2;;;;;;;;;;;37739:63;-1:-1:-1::0;;;;;37820:39:56;::::2;;::::0;;;:21:::2;:39;::::0;;;;37813:46;;-1:-1:-1;;;;;;37813:46:56;;;;::::2;::::0;37869::::2;:21;37842:16:::0;37869:28:::2;:46::i;:::-;-1:-1:-1::0;37929:14:56::2;::::0;::::2;::::0;:18;37925:68:::2;;37949:44;37962:7;:14;;;37978:7;:14;;;37949:12;:44::i;:::-;38009;::::0;-1:-1:-1;;;;;38009:44:56;::::2;::::0;::::2;::::0;;;::::2;37521:539;1937:10:54::1;1913:22;1906:42;37416:644:56::0;:::o;28347:1893::-;1474:19:39;:17;:19::i;:::-;28767:21:56::1;28791:72;28816:17;28835:16;28853:9;;28791:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28791:24:56::1;::::0;-1:-1:-1;;;28791:72:56:i:1;:::-;28767:96;;28984:22;29009:21;:19;:21::i;:::-;:34;;;28984:59;;29053:16;29072:45;29089:9;29100:16;29072;:45::i;:::-;29053:64;;29127:41;29151:16;29127:23;:41::i;:::-;;29230:66;29252:16;29270:25;29230:21;:66::i;:::-;-1:-1:-1::0;;;;;29321:29:56;::::1;29306:12;29321:29:::0;;;:11:::1;:29;::::0;;;;:35:::1;;::::0;-1:-1:-1;;;;;;;;29321:35:56;;::::1;;29465:7;1710:6:20::0;;-1:-1:-1;;;;;1710:6:20;;;;;;1638:85;29465:7:56::1;-1:-1:-1::0;;;;;29451:21:56::1;:10;-1:-1:-1::0;;;;;29451:21:56::1;;29447:568;;29510:8;29492:15;:26;29488:66;;;29527:27;::::0;-1:-1:-1;;;29527:27:56;;::::1;::::0;::::1;160:25:73::0;;;133:18;;29527:27:56::1;14:177:73::0;29488:66:56::1;29568:18;1417:156:58;29669:13:56;29684:16;29702:10;29714:16;29732:5;29739:8;29616:149;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29589:190;;;;;;29568:211;;29793:14;29810:26;29825:10;29810:14;:26::i;:::-;29793:43;;29855:78;29882:16;29900:6;29908:24;;29855:26;:78::i;:::-;29850:155;;29960:30;::::0;-1:-1:-1;;;29960:30:56;;-1:-1:-1;;;;;3241:32:73;;29960:30:56::1;::::0;::::1;3223:51:73::0;3196:18;;29960:30:56::1;3077:203:73::0;29850:155:56::1;29474:541;;29447:568;30069:84;;;;;;;;30080:13;30069:84;;;;30095:16;-1:-1:-1::0;;;;;30069:84:56::1;;;;;30113:10;-1:-1:-1::0;;;;;30069:84:56::1;;;;;30125:16;30069:84;;;;;;30143:5;30151:1;30143:9;;;;:::i;:::-;-1:-1:-1::0;;;;;30069:84:56;;::::1;::::0;;;-1:-1:-1;;;;;30025:29:56;;::::1;;::::0;;;:11:::1;:29;::::0;;;;;;;;:128;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;30025:128:56::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;30025:128:56;;;;;;;-1:-1:-1;;;30025:128:56::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;30025:128:56::1;-1:-1:-1::0;;;30025:128:56;;;::::1;::::0;;;::::1;;::::0;;30163:70:::1;30177:9:::0;;30025:29;30206:16;30224:8;30163:13:::1;:70::i;:::-;28647:1593;;;;28347:1893:::0;;;;;;;:::o;25848:481::-;-1:-1:-1;;;;;25995:28:56;;25933:7;25995:28;;;:10;:28;;;;;;;;:41;-1:-1:-1;;;25995:41:56;;;;26075:26;;;:8;:26;;;;;:38;25933:7;;;;;26141:49;25995:28;26075:38;26141:11;:49::i;:::-;-1:-1:-1;;;;;26229:26:56;;;;26200;26229;;;:8;:26;;;;;;;26294:18;;;-1:-1:-1;25848:481:56;;-1:-1:-1;;;;25848:481:56:o;23632:397::-;23701:20;;:::i;:::-;-1:-1:-1;;;;;23762:28:56;;23733:26;23762:28;;;:10;:28;;;;;23884:14;;-1:-1:-1;;;23884:14:56;;;;23879:122;;23949:41;23973:16;23949:23;:41::i;:::-;;23879:122;24011:11;;;;;;;;;;-1:-1:-1;;;;;24011:11:56;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;;;;24018:4;;24011:11;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;;;23632:397;-1:-1:-1;;;23632:397:56:o;40542:866::-;1474:19:39;:17;:19::i;:::-;40695:35:56::1;40719:10;40695:23;:35::i;:::-;;40787:17;40807:25;19849:22:::0;;;19765:113;40807:25:::1;40876:12;::::0;40787:45;;-1:-1:-1;40842:21:56::1;::::0;40866:9:::1;::::0;-1:-1:-1;;;40876:12:56;::::1;;;40866:23;::::0;::::1;;;;;:::i;:::-;;;;:40:::0;;-1:-1:-1;40916:45:56::1;40936:9:::0;40866:40;40916:19:::1;:45::i;:::-;41055:57;41077:10;41089:22;41055:21;:57::i;:::-;41167:10;41122:31;41156:22:::0;;;:10:::1;:22;::::0;;;;41205:12:::1;::::0;41241:25;;41205:12:::1;-1:-1:-1::0;;;41205:12:56;;::::1;::::0;::::1;::::0;-1:-1:-1;;;41241:25:56;;::::1;;41231:35:::0;::::1;41227:94;;;41289:21;::::0;-1:-1:-1;;;41289:21:56;;20042:10:73;20030:23;;41289:21:56::1;::::0;::::1;20012:42:73::0;19985:18;;41289:21:56::1;19868:192:73::0;41227:94:56::1;41380:21;41391:9;41380:10;:21::i;:::-;40595:813;;;;40542:866::o:0;19336:118::-;19396:7;19422:25;19849:22;;;19765:113;19422:25;19415:32;;19336:118;:::o;22010:401::-;22082:22;22116:29;22138:6;22116:21;:29::i;:::-;22156:22;22181;22196:6;22181:14;:22::i;:::-;22156:47;;22213:28;22264:5;:12;-1:-1:-1;;;;;22244:33:56;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22213:64;;22292:9;22287:95;22307:5;:12;22303:1;:16;22287:95;;;22351:10;:20;22362:5;22368:1;22362:8;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;22351:20:56;;;;;;;;;;;;;;;;-1:-1:-1;22351:20:56;22340:31;;;;;;;;;;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;;:8;;:5;;22346:1;;22340:8;;;;;;:::i;:::-;;;;;;;;;;:31;22321:3;;22287:95;;;-1:-1:-1;22399:5:56;22010:401;-1:-1:-1;;;22010:401:56:o;44127:185::-;1531:13:20;:11;:13::i;:::-;44215:22:56::1;:33:::0;;-1:-1:-1;;44215:33:56::1;::::0;::::1;;::::0;;::::1;::::0;;;44263:42:::1;::::0;818:41:73;;;44263:42:56::1;::::0;806:2:73;791:18;44263:42:56::1;;;;;;;;44127:185:::0;:::o;33921:393::-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;34029:17:56::2;34049:39;34071:16;34049:21;:39::i;:::-;-1:-1:-1::0;;;;;34123:28:56;::::2;34098:22;34123:28:::0;;;:10:::2;:28;::::0;;;;:41;34029:59;;-1:-1:-1;;;;34123:41:56;;::::2;;;::::0;34192:65:::2;34123:28:::0;34029:59;34123:41;34192:18:::2;:65::i;:::-;34174:83;;34288:9;-1:-1:-1::0;;;;;34273:34:56::2;;34299:7;34273:34;;;;160:25:73::0;;148:2;133:18;;14:177;34273:34:56::2;;;;;;;;34019:295;;;1937:10:54::1;1913:22;1906:42;33921:393:56::0;:::o;1736:255:30:-;1824:7;1856:16;1866:5;1856:9;:16::i;:::-;1847:5;:25;1843:99;;1895:36;;-1:-1:-1;;;1895:36:30;;-1:-1:-1;;;;;25302:32:73;;1895:36:30;;;25284:51:73;25351:18;;;25344:34;;;25257:18;;1895:36:30;25110:274:73;1843:99:30;-1:-1:-1;;;;;;1958:19:30;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1736:255::o;27431:877:56:-;1474:19:39;:17;:19::i;:::-;27708:66:56::1;27733:17;27752:10;27764:9;;27708:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27708:24:56::1;::::0;-1:-1:-1;;;27708:66:56:i:1;:::-;;27883:22;27908:21;:19;:21::i;:::-;:34;;;27883:59;;27952:16;27971:45;27988:9;27999:16;27971;:45::i;:::-;27952:64;;28026:35;28050:10;28026:23;:35::i;:::-;;28119:60;28141:10;28153:25;28119:21;:60::i;:::-;28237:64;28251:9;;28262:10;28274:16;28292:8;28237:13;:64::i;43683:224::-:0;1531:13:20;:11;:13::i;:::-;43769:37:56::1;::::0;43758:6:::1;::::0;-1:-1:-1;;;;;;;;;;;1249:42:58;43791:9:56::1;::::0;43758:6;43769:37;43758:6;43769:37;43791:9;1249:42:58;43769:37:56::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43757:49;;;43866:1;43861:39;;43876:24;;-1:-1:-1::0;;;43876:24:56::1;;;;;;;;;;;20611:1137:::0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20713:12:56;;-1:-1:-1;;;20713:12:56;;;;20747:11;20713:12;20757:1;20747:11;:::i;:::-;20739:19;;:5;:19;;;:60;;;;20774:1;20763:7;:12;;;;:35;;;;-1:-1:-1;20787:11:56;20797:1;20787:7;:11;:::i;:::-;20779:19;;:5;:19;;;20763:35;20735:117;;;20822:19;;-1:-1:-1;;;20822:19:56;;20042:10:73;20030:23;;20822:19:56;;;20012:42:73;19985:18;;20822:19:56;19868:192:73;20735:117:56;20885:12;;-1:-1:-1;;;20885:12:56;;;;20911:15;;;;;;;;20907:835;;;21293:23;21319:51;21339:5;21346:7;21355:14;21319:19;:51::i;:::-;21293:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21293:77:56;;;;;;;;;;;;;;;;-1:-1:-1;;;21293:77:56;;;-1:-1:-1;;21293:77:56;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21293:77:56;;;;;;;;;;;-1:-1:-1;;;21293:77:56;;;;;;;;-1:-1:-1;;;21293:77:56;;;;;;;;;;;;;-1:-1:-1;;;21293:77:56;;;;;;;;;;21428:12;;;;;-1:-1:-1;21419:22:56;;;:8;:22;;;;;;21478:26;;;;21455:20;;;:49;;;;21541:26;;;;;;;;21518:20;;;:49;21581:19;;:34;21293:77;20611:1137;-1:-1:-1;;;;;20611:1137:56:o;20907:835::-;21680:51;21700:5;21707:7;21716:14;21680:19;:51::i;:::-;21673:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21673:58:56;;;;;;;;;;;;;;;;-1:-1:-1;;;21673:58:56;;;-1:-1:-1;;21673:58:56;;;;;;;;;;;;;-1:-1:-1;;;;;21673:58:56;;;;;;;-1:-1:-1;;;21673:58:56;;;;;;;;-1:-1:-1;;;21673:58:56;;;;;;;;-1:-1:-1;;;21673:58:56;;;;;;;;;;20611:1137;-1:-1:-1;;;;20611:1137:56:o;1918:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1918:29:56;;;-1:-1:-1;;;1918:29:56;;;;;;;-1:-1:-1;;;1918:29:56;;;;;;-1:-1:-1;;;1918:29:56;;;;;:::o;24826:130::-;-1:-1:-1;;;;;12264:29:58;;;24896:4:56;12264:29:58;;;:11;:29;;;;;:39;;;24896:4:56;;12264:39:58;:53;;24919:30:56;12170:154:58;73510:65:56;1531:13:20;:11;:13::i;:::-;73558:10:56::1;:8;:10::i;:::-;73510:65::o:0;4786:132:27:-;4872:39;4889:4;4895:2;4899:7;4872:39;;;;;;;;;;;;:16;:39::i;30540:2162:56:-;1474:19:39;:17;:19::i;:::-;30753:41:56::1;30777:16;30753:23;:41::i;:::-;-1:-1:-1::0;1710:6:20;;;;;-1:-1:-1;;;;;1710:6:20;-1:-1:-1;;;;;30963:21:56::1;:10;-1:-1:-1::0;;;;;30963:21:56::1;;30959:283;;31004:22;::::0;::::1;;31000:59;;;31035:24;;-1:-1:-1::0;;;31035:24:56::1;;;;;;;;;;;31000:59;31073:17;31093:31;31107:16;31093:13;:31::i;:::-;31073:51:::0;-1:-1:-1;31142:10:56::1;-1:-1:-1::0;;;;;31142:30:56;::::1;;::::0;::::1;::::0;:57:::1;;-1:-1:-1::0;31176:10:56::1;-1:-1:-1::0;;;;;31176:23:56;::::1;;;31142:57;31138:93;;;31208:23;::::0;-1:-1:-1;;;31208:23:56;;-1:-1:-1;;;;;3241:32:73;;31208:23:56::1;::::0;::::1;3223:51:73::0;3196:18;;31208:23:56::1;3077:203:73::0;31138:93:56::1;30986:256;30959:283;-1:-1:-1::0;;;;;31359:28:56;::::1;31334:22;31359:28:::0;;;:10:::1;:28;::::0;;;;:42;-1:-1:-1;;;31359:42:56;::::1;;;31438:22;31428:6;:32;;;;;;;;:::i;:::-;;;:79;;;;-1:-1:-1::0;31474:33:56::1;31464:6;:43;;;;;;;;:::i;:::-;;;31428:79;:131;;;;-1:-1:-1::0;31537:22:56::1;31527:6;:32;;;;;;;;:::i;:::-;;;31428:131;31411:212;;;31605:6;31591:21;;-1:-1:-1::0;;;31591:21:56::1;;;;;;;;:::i;31411:212::-;-1:-1:-1::0;;;;;31658:28:56;::::1;31633:22;31658:28:::0;;;:10:::1;:28;::::0;;;;;;;:41;-1:-1:-1;;;31658:41:56;::::1;;;31731:26:::0;;;:8:::1;:26:::0;;;;;:38;31804:26;;;:8:::1;:26:::0;;;;;;;31658:41;;31731:38;31844:29;;::::1;31840:134;;31896:67;::::0;-1:-1:-1;;;31896:67:56;;-1:-1:-1;;;;;26388:32:73;;31896:67:56::1;::::0;::::1;26370:51:73::0;26437:18;;;26430:34;;;26512:4;26500:17;;26480:18;;;26473:45;26343:18;;31896:67:56::1;26172:352:73::0;31840:134:56::1;31984:15;32002:28;32016:14:::0;32002:11;:28:::1;:::i;:::-;31984:46;;32057:7;32044:9;:20;32040:125;;32087:67;::::0;-1:-1:-1;;;32087:67:56;;-1:-1:-1;;;;;26388:32:73;;32087:67:56::1;::::0;::::1;26370:51:73::0;32126:9:56::1;26437:18:73::0;;;26430:34;26512:4;26500:17;;26480:18;;;26473:45;26343:18;;32087:67:56::1;26172:352:73::0;32040:125:56::1;-1:-1:-1::0;;;;;32175:26:56;::::1;;::::0;;;:8:::1;:26;::::0;;;;:37;;32205:7;;32175:26;:37:::1;::::0;32205:7;;32175:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;32499:37:56::1;::::0;32488:6:::1;::::0;-1:-1:-1;;;;;;;;;;;1249:42:58;32521:9:56::1;::::0;32488:6;32499:37;32488:6;32499:37;32521:9;1249:42:58;32499:37:56::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32487:49;;;32596:1;32591:39;;32606:24;;-1:-1:-1::0;;;32606:24:56::1;;;;;;;;;;;32591:39;32669:16;-1:-1:-1::0;;;;;32646:49:56::1;;32687:7;32646:49;;;;160:25:73::0;;148:2;133:18;;14:177;32646:49:56::1;;;;;;;;30633:2069;;;;;;30540:2162:::0;:::o;2236:226:30:-;2302:7;2334:13;2140:10;:17;;2062:102;2334:13;2325:5;:22;2321:101;;2370:41;;-1:-1:-1;;;2370:41:30;;2401:1;2370:41;;;25284:51:73;25351:18;;;25344:34;;;25257:18;;2370:41:30;25110:274:73;2321:101:30;2438:10;2449:5;2438:17;;;;;;;;:::i;:::-;;;;;;;;;2431:24;;2236:226;;;:::o;1953:35:56:-;;;;;;;;;;;18438:570;1531:13:20;:11;:13::i;:::-;18517:7:56::1;:12;;18528:1;18517:12:::0;18513:115:::1;;18583:12;::::0;18573:9:::1;::::0;-1:-1:-1;;;18583:12:56;::::1;;;18573:23;::::0;::::1;;;;;:::i;:::-;;;;:40:::0;18552:65:::1;::::0;-1:-1:-1;;;18552:65:56;;::::1;::::0;::::1;26711:25:73::0;;;;18573:33:56::1;26752:18:73::0;;;26745:34;26684:18;;18552:65:56::1;26529:256:73::0;18513:115:56::1;18694:16;18713:25;19849:22:::0;;;19765:113;18713:25:::1;18694:44;;18762:8;18752:7;:18;;;18748:104;;;18793:48;::::0;-1:-1:-1;;;18793:48:56;;::::1;::::0;::::1;26711:25:73::0;;;18824:16:56::1;::::0;::::1;26752:18:73::0;;;26745:34;26684:18;;18793:48:56::1;26529:256:73::0;18748:104:56::1;18879:17;::::0;;::::1;18906:27:::0;;::::1;-1:-1:-1::0;;;18906:27:56;;::::1;-1:-1:-1::0;;;;18906:27:56;::::1;;::::0;;;18949:52:::1;::::0;;18879:17;;;::::1;::::0;;::::1;27241:38:73::0;;;27310:2;27295:18;;27288:47;;;;27351:18;;;27344:34;;;18879:17:56;18949:52:::1;::::0;27229:2:73;27214:18;18949:52:56::1;;;;;;;18503:505;;18438:570:::0;:::o;2184:118:27:-;2247:7;2273:22;2287:7;2273:13;:22::i;19918:311:56:-;19982:5;20188:21;:19;:21::i;:::-;:34;;;20181:41;;19918:311;:::o;42437:405::-;1531:13:20;:11;:13::i;:::-;42608:27:56::1;42618:16;42608:9;:27::i;:::-;:32:::0;::::1;::::0;:63:::1;;;42644:27;42654:16;42644:9;:27::i;:::-;42604:133;;;42694:32;::::0;-1:-1:-1;;;42694:32:56;;-1:-1:-1;;;;;3241:32:73;;42694::56::1;::::0;::::1;3223:51:73::0;3196:18;;42694:32:56::1;3077:203:73::0;42604:133:56::1;42781:54;42787:16:::0;-1:-1:-1;;;;;13353:32:58;;42781:5:56::1;:54::i;24074:707::-:0;24142:4;24239:2;24219:22;;24215:40;;-1:-1:-1;24250:5:56;24243:12;;24215:40;24356:21;24380:20;24390:9;;24380:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24380:9:56;;-1:-1:-1;;;24380:20:56:i;:::-;24410:24;24437:39;;;:24;:39;;;;;;24356:44;;-1:-1:-1;;;;;;24437:39:56;;24542:48;;24585:5;24578:12;;;;;;24542:48;24711:27;24721:16;24711:9;:27::i;:::-;24707:45;;;24747:5;24740:12;;;;;;24707:45;-1:-1:-1;24770:4:56;;24074:707;-1:-1:-1;;;;24074:707:56:o;23228:359::-;23295:14;23321:26;23350:19;23363:5;23350:12;:19::i;:::-;:29;;;23321:58;;23389:22;23426:9;:16;-1:-1:-1;;;;;23414:29:56;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23389:54;;23458:9;23453:103;23473:7;:14;23469:1;:18;23453:103;;;23521:10;:24;23532:9;23542:1;23532:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23521:24:56;-1:-1:-1;;;;;23521:24:56;;;;;;;;;;;;23508:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;23516:1;23508:10;;;;;;;;:::i;:::-;;;;;;;;;;:37;23489:3;;23453:103;;25001:477;25067:4;25087:38;-1:-1:-1;;;;;13353:32:58;;25087:7:56;:38::i;:::-;25083:333;;;-1:-1:-1;25204:5:56;;25001:477;-1:-1:-1;25001:477:56:o;25083:333::-;25276:25;-1:-1:-1;;;;;25230:28:56;;;;;;:10;:28;;;;;:42;-1:-1:-1;;;25230:42:56;;;;:71;;;;;;;;:::i;:::-;;25226:190;;-1:-1:-1;25400:5:56;;25001:477;-1:-1:-1;25001:477:56:o;25226:190::-;-1:-1:-1;;;;;;25433:28:56;;;;;:10;:28;;;;;:38;-1:-1:-1;;;25433:38:56;;;;;25001:477::o;1919:208:27:-;1982:7;-1:-1:-1;;;;;2005:19:27;;2001:87;;2047:30;;-1:-1:-1;;;2047:30:27;;2074:1;2047:30;;;3223:51:73;3196:18;;2047:30:27;3077:203:73;2001:87:27;-1:-1:-1;;;;;;2104:16:27;;;;;:9;:16;;;;;;;1919:208::o;2293:101:20:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;25517:292:56:-:0;-1:-1:-1;;;;;25633:28:56;;25593:7;25633:28;;;:10;:28;;;;;;;;:41;-1:-1:-1;;;25633:41:56;;;;25707:22;;;:8;:22;;;;;:34;25759:43;25633:28;25707:34;25759:11;:43::i;:::-;25752:50;25517:292;-1:-1:-1;;;;25517:292:56:o;5571:1635::-;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;3077:203:73;588:67:59;5715:29:56::1;5731:12;;5715:15;:29::i;:::-;6190:27;:25;:27::i;:::-;6521:17;::::0;-1:-1:-1;;;6521:17:56;::::1;;;6498:40:::0;::::1;6494:138;;6582:17;::::0;6561:60:::1;::::0;-1:-1:-1;;;6561:60:56;;-1:-1:-1;;;6582:17:56;;::::1;;;6561:60;::::0;::::1;27562:38:73::0;27616:18;;;27609:34;;;27535:18;;6561:60:56::1;27389:260:73::0;6494:138:56::1;6701:15;6718:21;6741:15;6758:34;6808:30;6825:12;;6808:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;6808:16:56::1;::::0;-1:-1:-1;;;6808:30:56:i:1;:::-;6700:138;;;;;;;;6848:45;6870:12;;6884:8;6848:21;:45::i;:::-;6981:67;7001:25;19849:22:::0;;;19765:113;7001:25:::1;7028:12:::0;6981:19:::1;:67::i;:::-;7064:135;7086:103;;;;;;;;7096:17;7086:103;;;;7115:13;7086:103;;;;7137:12;7152:1;7137:16;;;;:::i;:::-;-1:-1:-1::0;;;;;7086:103:56::1;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;;;;;;7176:12:::1;::::0;::::1;;7086:103:::0;;;;;;;;7064:135;::::1;::::0;;::::1;:::i;:::-;;;;;;;;5660:1546;;;;5571:1635:::0;;:::o;4261:272:58:-;4315:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4315:18:58;-1:-1:-1;4513:12:58;;;;4504:22;;;;:8;:22;;;;;;;;;4497:29;;;;;;;;;;;4513:12;4497:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4261:272::o;73273:61:56:-;1531:13:20;:11;:13::i;:::-;73319:8:56::1;:6;:8::i;11383:596:51:-:0;-1:-1:-1;;;11508:18:51;;11481:13;;;11508:18;11779:23;13733:36:58;;;;;;;;;;;-1:-1:-1;;;13733:36:58;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13733:36:58;;;;;13620:156;11779:23:51;11383:596;;11761:41;;;-1:-1:-1;11822:13:51;;-1:-1:-1;11873:4:51;;-1:-1:-1;11383:596:51;;-1:-1:-1;11383:596:51;:::o;42881:763:56:-;1531:13:20;:11;:13::i;:::-;42963:27:56::1;42973:16;42963:9;:27::i;:::-;42959:74;;;43013:19;42999:34;;-1:-1:-1::0;;;42999:34:56::1;;;;;;;;:::i;42959:74::-;43143:41;43167:16;43143:23;:41::i;:::-;-1:-1:-1::0;43245:25:56::1;-1:-1:-1::0;;;;;43199:28:56;::::1;;::::0;;;:10:::1;:28;::::0;;;;:42;-1:-1:-1;;;43199:42:56;::::1;;;:71;::::0;::::1;;;;;;:::i;:::-;::::0;43195:443:::1;;-1:-1:-1::0;;;;;43403:28:56;::::1;;::::0;;;:10:::1;:28;::::0;;;;43395:37:::1;::::0;:7:::1;:37::i;:::-;43446:36;-1:-1:-1::0;;;;;13353:32:58;;43446:5:56::1;:36::i;43195:443::-;43595:32;43610:16;43595:14;:32::i;21793:172::-:0;21861:16;21889:29;21911:6;21889:21;:29::i;:::-;21936:22;21951:6;21936:14;:22::i;2517:93:27:-;2564:13;2596:7;2589:14;;;;;:::i;22456:433:56:-;22523:22;22557:26;22586:19;22599:5;22586:12;:19::i;:::-;:29;;;22557:58;;22625:42;22690:9;:16;-1:-1:-1;;;;;22670:37:56;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22625:82;;22722:9;22717:129;22737:19;:26;22733:1;:30;22717:129;;;22809:26;22822:9;22832:1;22822:12;;;;;;;;:::i;:::-;;;;;;;22809;:26::i;:::-;22784:19;22804:1;22784:22;;;;;;;;:::i;:::-;;;;;;;;;;:51;22765:3;;22717:129;;4095:126:58;4160:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4160:18:58;-1:-1:-1;4197:17:58;;;;;;:8;:17;;;;;;;;;4190:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4095:126::o;38710:131:56:-;38769:16;38804:30;:21;:28;:30::i;16870:1216::-;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;3077:203:73;588:67:59;16936:14:56::1;16953:13;2140:10:30::0;:17;;2062:102;16953:13:56::1;16936:30;;16976:16;17007:9;17002:988;17022:6;17018:1;:10;17002:988;;;17049:24;17076;17084:15;17097:1;17084:12;:15::i;17076:24::-;-1:-1:-1::0;;;;;17325:28:56;::::1;17300:22;17325:28:::0;;;:10:::1;:28;::::0;;;;17300:53;;17049:51;;-1:-1:-1;17300:22:56;;:53:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17371:9;:16;17391:2;17371:22:::0;17367:197:::1;;17445:20:::0;;::::1;::::0;;::::1;::::0;;;;17420:46:::1;::::0;;;:24:::1;:46:::0;;;;;;;17413:53;;-1:-1:-1;;;;;;17413:53:56::1;::::0;;17533:16;;17420:24;17509:20:::1;17455:9:::0;17509::::1;:20::i;:::-;17484:46;;;;;;;;;;;;:65;;;;;-1:-1:-1::0;;;;;17484:65:56::1;;;;;-1:-1:-1::0;;;;;17484:65:56::1;;;;;;17367:197;-1:-1:-1::0;;;;;17612:28:56;::::1;17578:31;17612:28:::0;;;:10:::1;:28;::::0;;;;17658:19;;-1:-1:-1;;;17658:19:56;::::1;;;17654:33;;;17679:8;;;;;17654:33;17727:23:::0;;-1:-1:-1;;;17727:23:56;::::1;;;17702:22;17768:6;:35;;;;;;;;:::i;:::-;;:68;;;-1:-1:-1::0;17817:19:56::1;17807:6;:29;;;;;;;;:::i;:::-;;17768:68;17764:82;;;17838:8;;;;;;17764:82;17861:50;17894:16;17861:13;:28;17881:6;17875:13;;;;;;;;:::i;:::-;17861:28;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;17861:28:56;;:32:::1;:50::i;:::-;;17929:38;17960:6;17929:30;:38::i;:::-;17925:54;;;17969:10;::::0;::::1;:::i;:::-;;;17925:54;17035:955;;;;17002:988;17030:3;;17002:988;;;-1:-1:-1::0;18000:22:56::1;:33:::0;;;18048:31:::1;::::0;160:25:73;;;18048:31:56::1;::::0;148:2:73;133:18;18048:31:56::1;;;;;;;;16926:1160;;16870:1216::o:0;26369:972::-;26584:7;26607:41;26631:16;26607:23;:41::i;:::-;;26862:9;:16;26882:2;26862:22;26858:53;;26893:18;;-1:-1:-1;;;26893:18:56;;;;;;;;;;;26858:53;26921:18;26942:21;:19;:21::i;:::-;:34;;;-1:-1:-1;;;;;27001:29:56;;26986:12;27001:29;;;:11;:29;;;;;:35;;;26942:34;;-1:-1:-1;;;;27001:35:56;;;-1:-1:-1;;;;;27001:35:56;;27070:20;27080:9;27070;:20::i;:::-;27046:44;;27100:18;1417:156:58;27193:13:56;27208:16;27226:9;27237:12;27251:5;27258:8;27144:136;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27121:169;;;;;;27100:190;;27308:26;27323:10;27308:14;:26::i;:::-;27301:33;26369:972;-1:-1:-1;;;;;;;;;26369:972:56:o;38100:516::-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41:::0;38212:10:56::2;38178:14;38195:28:::0;;;:16:::2;:28;::::0;;;;;;38237:11;;;38233:43:::2;;38257:19;;-1:-1:-1::0;;;38257:19:56::2;;;;;;;;;;;38233:43;38303:10;38317:1;38286:28:::0;;;:16:::2;:28;::::0;;;;;:32;;;38488:72;-1:-1:-1;;;38488:72:56;;::::2;::::0;::::2;25284:51:73::0;;;;25351:18;;;25344:34;-1:-1:-1;;;;;;;;;;;1249:42:58;38488:40:56::2;::::0;38537:6;;25257:18:73;;38488:72:56::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;38576:33:56::2;::::0;160:25:73;;;38590:10:56::2;::::0;-1:-1:-1;38576:33:56::2;::::0;-1:-1:-1;148:2:73;133:18;;-1:-1:-1;38576:33:56::2;;;;;;;38168:448;1937:10:54::1;1913:22;1906:42;38100:516:56:o:0;4984:233:27:-;5097:31;5110:4;5116:2;5120:7;5097:12;:31::i;:::-;5138:72;735:10:36;5186:4:27;5192:2;5196:7;5205:4;5138:33;:72::i;20411:155:56:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20518:12:56;;20498:61;;-1:-1:-1;;;20518:12:56;;;;;;;-1:-1:-1;;;20546:12:56;;;;20498:19;:61::i;:::-;20491:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20491:68:56;;;;;;;;;;;;;;;;-1:-1:-1;;;20491:68:56;;;-1:-1:-1;;20491:68:56;;;;;;;;;;;;;-1:-1:-1;;;;;20491:68:56;;;;;;;-1:-1:-1;;;20491:68:56;;;;;;;;-1:-1:-1;;;20491:68:56;;;;;;;;-1:-1:-1;;;20491:68:56;;;;;;;;;;20411:155;-1:-1:-1;20411:155:56:o;78265:595::-;78417:5;1531:13:20;:11;:13::i;:::-;1474:19:39::1;:17;:19::i;:::-;78442:23:56::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;:28;;78469:1;78442:28:::0;78438:81:::2;;78495:23;::::0;;;::::2;::::0;::::2;;:::i;:::-;78479:40;::::0;-1:-1:-1;;;78479:40:56;;20042:10:73;20030:23;;;78479:40:56::2;::::0;::::2;20012:42:73::0;19985:18;;78479:40:56::2;19868:192:73::0;78438:81:56::2;78551:12;78549:14:::0;;78530:16:::2;::::0;78551:12;78530:16;;78549:14:::2;::::0;::::2;;;:::i;:::-;::::0;;::::2;::::0;;::::2;;::::0;;;::::2;::::0;;::::2;::::0;::::2;;::::0;;::::2;;::::0;;;-1:-1:-1;78573:20:56;;;:8:::2;:20;::::0;;;;78549:14;;-1:-1:-1;78596:9:56;;78573:32:::2;78596:9:::0;78573:20;:32:::2;:::i;:::-;-1:-1:-1::0;;78621:204:56::2;::::0;::::2;;78679:21:::0;::::2;78714:27;::::0;::::2;;78755:23;::::0;::::2;;78792;::::0;;;::::2;::::0;::::2;;:::i;:::-;78621:204;::::0;;29186:25:73;;;29242:2;29227:18;;29220:34;;;;29270:18;;;29263:34;29345:10;29333:23;29328:2;29313:18;;29306:51;29173:3;29158:19;78621:204:56::2;;;;;;;78843:10:::0;-1:-1:-1;1503:1:39::2;78265:595:56::0;;;:::o;30280:215::-;30333:35;30357:10;30333:23;:35::i;:::-;-1:-1:-1;30410:10:56;30378:15;30398:23;;;:11;:23;;;;;:29;;30396:31;;30398:29;;30396:31;;-1:-1:-1;;;30396:31:56;;-1:-1:-1;;;;;30396:31:56;;:::i;:::-;;;-1:-1:-1;;;;;30396:31:56;;;;;;;;;;;;;;;;;;;;;30442:46;;29721:50:73;;;30396:31:56;;-1:-1:-1;30467:10:56;;30442:46;;29709:2:73;29694:18;30442:46:56;;;;;;;30323:172;30280:215::o;7251:672:58:-;7324:13;7349:22;7363:7;7349:13;:22::i;:::-;;7382:18;7403:443;7550:54;7594:7;7550:27;:54::i;:::-;7768:10;:8;:10::i;:::-;7453:369;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7403:13;:443::i;:::-;7382:464;;7911:4;7864:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;7857:59;;;7251:672;;;:::o;34354:3022:56:-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;34634:17:56::2;34654:39;34676:16;34654:21;:39::i;:::-;-1:-1:-1::0;;;;;34808:28:56;::::2;34774:31;34808:28:::0;;;:10:::2;:28;::::0;;;;34871:23;;34634:59;;-1:-1:-1;34808:28:56;-1:-1:-1;;;34871:23:56;::::2;;;34931:22;34921:6;:32;;;;;;;;:::i;:::-;;;:79;;;;-1:-1:-1::0;34967:33:56::2;34957:6;:43;;;;;;;;:::i;:::-;;;34921:79;:131;;;;-1:-1:-1::0;35030:22:56::2;35020:6;:32;;;;;;;;:::i;:::-;;;34921:131;34904:212;;;35098:6;35084:21;;-1:-1:-1::0;;;35084:21:56::2;;;;;;;;:::i;34904:212::-;35217:22:::0;;::::2;-1:-1:-1::0;;;35217:22:56;;::::2;::::0;::::2;::::0;35253:27;::::2;::::0;-1:-1:-1;35253:27:56::2;::::0;:59:::2;;-1:-1:-1::0;35300:12:56::2;::::0;::::2;::::0;;::::2;35284:28:::0;;::::2;;35253:59;35249:143;;;35335:46;::::0;-1:-1:-1;;;35335:46:56;;31649:4:73;31637:17;;;35335:46:56::2;::::0;::::2;31619:36:73::0;31691:17;;31671:18;;;31664:45;31592:18;;35335:46:56::2;31453:262:73::0;35249:143:56::2;35520:20;::::0;;::::2;35495:22;35520:20:::0;;;:8:::2;:20;::::0;;;;;:32;35587:23;;::::2;::::0;;;;:35;;35650:31;;::::2;:69;;35718:1;35650:69;;;35684:31;35701:14:::0;35684;:31:::2;:::i;:::-;35632:87;;35746:7;35733:9;:20;35729:62;;35762:29;::::0;-1:-1:-1;;;35762:29:56;;35781:9:::2;35762:29;::::0;::::2;160:25:73::0;133:18;;35762:29:56::2;14:177:73::0;35729:62:56::2;36003:22;35993:6;:32;;;;;;;;:::i;:::-;::::0;35989:679:::2;;36045:11:::0;;36041:244:::2;;-1:-1:-1::0;;;;;36076:26:56;::::2;;::::0;;;:8:::2;:26;::::0;;;;:37;;36106:7;;36076:26;:37:::2;::::0;36106:7;;36076:37:::2;:::i;:::-;::::0;;;-1:-1:-1;36041:244:56::2;::::0;-1:-1:-1;36041:244:56::2;;36155:14;36138;:31;36134:151;;;36189:81;36210:16;36228:9;36239:14;36255;36189:20;:81::i;:::-;36299:38:::0;;-1:-1:-1;;;;36299:38:56::2;-1:-1:-1::0;;;36299:38:56::2;::::0;::::2;;;::::0;;-1:-1:-1;;;;;12264:29:58;;;-1:-1:-1;12264:29:58;;;:11;:29;;;;;:39;;;;:53;36351:131:56::2;;-1:-1:-1::0;;;;;36405:29:56;::::2;;::::0;;;:11:::2;:29;::::0;;;;:46:::2;;:62:::0;;-1:-1:-1;;;;36405:62:56::2;-1:-1:-1::0;;;36405:62:56::2;::::0;::::2;;;::::0;;36351:131:::2;36501:136;::::0;;31973:4:73;31961:17;;;31943:36;;32015:17;;32010:2;31995:18;;31988:45;32049:18;;;32042:34;;;32107:2;32092:18;;32085:34;;;-1:-1:-1;;;;;36501:136:56;::::2;::::0;::::2;::::0;31930:3:73;31915:19;36501:136:56::2;;;;;;;36651:7;;;;;;;;;35989:679;36926:38;36967:21;:39;36989:16;-1:-1:-1::0;;;;;36967:39:56::2;-1:-1:-1::0;;;;;36967:39:56::2;;;;;;;;;;;;36926:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;36926:80:56::2;-1:-1:-1::0;;;;;36926:80:56::2;-1:-1:-1::0;;;;;36926:80:56::2;;;;;;;;;;;::::0;::::2;;;37070:75;;;;;;;;37096:13;37070:75;;;;;;37111:12;;;;;;;;;;;37070:75;;;;;;37125:10;-1:-1:-1::0;;;;;37070:75:56::2;;;;;37137:7;37070:75;;::::0;37016:21:::2;:39;37038:16;-1:-1:-1::0;;;;;37016:39:56::2;-1:-1:-1::0;;;;;37016:39:56::2;;;;;;;;;;;;:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;37016:129:56::2;;;;;-1:-1:-1::0;;;;;37016:129:56::2;;;;;;;;;;;;;;;;;37155:43;37181:16;37155:21;:25;;:43;;;;:::i;:::-;-1:-1:-1::0;37212:12:56::2;::::0;::::2;::::0;:16;37208:62:::2;;37230:40;37243:5;:12;;;37257:5;:12;;;37230;:40::i;:::-;37347:12;::::0;37286:83:::2;::::0;;32356:4:73;32344:17;;32326:36;;-1:-1:-1;;;37347:12:56;;::::2;;;32393:2:73::0;32378:18;;32371:51;32438:18;;32431:34;;;-1:-1:-1;;;;;37286:83:56;::::2;::::0;::::2;::::0;32314:2:73;32299:18;37286:83:56::2;;;;;;;34555:2821;;;;;;;;1829:1:54;1937:10:::1;1913:22;1906:42;34354:3022:56::0;;:::o;3927:153:27:-;-1:-1:-1;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3927:153::o;18131:262:56:-;1531:13:20;:11;:13::i;:::-;18228:41:56::1;18252:16;18228:23;:41::i;:::-;-1:-1:-1::0;;;;;;18279:28:56;::::1;;::::0;;;:10:::1;:28;::::0;;;;;;;;:44;;-1:-1:-1;;;;;18279:44:56::1;-1:-1:-1::0;;;18279:44:56::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18338:48;;13795:36:73;;;18338:48:56::1;::::0;13768:18:73;18338:48:56::1;;;;;;;;18131:262:::0;;:::o;2543:215:20:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:20;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:20;;2700:1:::1;2672:31;::::0;::::1;3223:51:73::0;3196:18;;2672:31:20::1;3077:203:73::0;2623:91:20::1;2723:28;2742:8;2723:18;:28::i;41447:904:56:-:0;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;41672:17:56::2;41692:39;41714:16;41692:21;:39::i;:::-;-1:-1:-1::0;;;;;41776:28:56;::::2;41742:31;41776:28:::0;;;:10:::2;:28;::::0;;;;41672:59;;-1:-1:-1;41912:30:56::2;41776:28:::0;41912:19:::2;:30::i;:::-;41907:72;;41969:9;41951:28;;-1:-1:-1::0;;;41951:28:56::2;;;;;;;;:::i;41907:72::-;42060:18;42068:9;42060:7;:18::i;:::-;42200:23;42226:60;42235:16;42253:9;42264:21;42226:8;:60::i;:::-;42200:86;;42317:9;-1:-1:-1::0;;;;;42302:42:56::2;;42328:15;42302:42;;;;160:25:73::0;;148:2;133:18;;14:177;42302:42:56::2;;;;;;;;41563:788;;;1937:10:54::1;1913:22;1906:42;41447:904:56::0;;:::o;1560:300:27:-;1662:4;-1:-1:-1;;;;;;1697:40:27;;-1:-1:-1;;;1697:40:27;;:104;;-1:-1:-1;;;;;;;1753:48:27;;-1:-1:-1;;;1753:48:27;1697:104;:156;;;-1:-1:-1;;;;;;;;;;862:40:44;;;1817:36:27;763:146:44;64361:1637:56;-1:-1:-1;;;;;64464:28:56;;64430:31;64464:28;;;:10;:28;;;;;64527:23;;19849:22;;-1:-1:-1;;;64527:23:56;;;;;;64819:38;64527:23;64819:30;:38::i;:::-;64815:98;;;64887:15;64901:1;64887:11;:15;:::i;:::-;64873:29;;64815:98;64922:51;64943:16;64961:11;64922:20;:51::i;:::-;65013:23;65041:37;65061:16;65041:19;:37::i;:::-;-1:-1:-1;;;;;;65222:26:56;;65251:1;65222:26;;;:8;:26;;;;;;:30;;;65459:43;65010:68;;-1:-1:-1;65251:1:56;-1:-1:-1;;;;;;;;;;;;1249:42:58;65010:68:56;;65251:1;65459:43;65251:1;65459:43;65010:68;1249:42:58;65459:43:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65447:55;;;65562:1;65557:39;;65572:24;;-1:-1:-1;;;65572:24:56;;;;;;;;;;;65557:39;65905:12;;65888:30;;65894:9;;-1:-1:-1;;;65905:12:56;;;;65888:5;:30::i;:::-;65928:18;65936:9;65928:7;:18::i;:::-;65956:35;65974:16;65956:17;:35::i;:::-;64420:1578;;;;;64361:1637;:::o;1796:162:20:-;1710:6;;-1:-1:-1;;;;;1710:6:20;;;;;735:10:36;1855:23:20;1851:101;;1901:40;;-1:-1:-1;;;1901:40:20;;735:10:36;1901:40:20;;;3223:51:73;3196:18;;1901:40:20;3077:203:73;16212:241:27;16275:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;16337:88;;16383:31;;-1:-1:-1;;;16383:31:27;;;;;160:25:73;;;133:18;;16383:31:27;14:177:73;2002:128:39;1920:7;;;;;;;2063:61;;;2098:15;;-1:-1:-1;;;2098:15:39;;;;;;;;;;;12934:324:58;13016:7;-1:-1:-1;;;;;13353:32:58;;13097:16;13353:32;13097:7;:16::i;:::-;13092:53;;13122:23;;-1:-1:-1;;;13122:23:58;;;;;160:25:73;;;133:18;;13122:23:58;14:177:73;13092:53:58;13179:16;-1:-1:-1;;;;;13159:36:58;:16;13167:7;13159;:16::i;:::-;-1:-1:-1;;;;;13159:36:58;;13155:71;;13204:22;;-1:-1:-1;;;13204:22:58;;;;;;;;;;;69917:254:56;-1:-1:-1;;;;;70054:28:56;;70029:22;70054:28;;;:10;:28;;;;;:42;-1:-1:-1;;;70054:42:56;;;;70120:14;70110:24;;;;;;;;:::i;:::-;:6;:24;;;;;;;;:::i;:::-;;70106:58;;70157:6;70143:21;;-1:-1:-1;;;70143:21:56;;;;;;;;:::i;54453:255::-;54573:9;:5;54581:1;54573:9;:::i;:::-;54545:37;;;;;;;-1:-1:-1;;;54545:37:56;-1:-1:-1;;;;54545:37:56;;;;;;54592:56;54545:9;54614:33;54592:10;:56::i;:::-;54664:37;54691:9;54664:37;;;;;;:::i;33570:312::-;33649:17;33678:41;33702:16;33678:23;:41::i;:::-;;33741:31;33755:16;33741:13;:31::i;:::-;33729:43;-1:-1:-1;33786:10:56;-1:-1:-1;;;;;33786:30:56;;;;;;:57;;-1:-1:-1;33820:10:56;-1:-1:-1;;;;;33820:23:56;;;;33786:57;33782:93;;;33852:23;;-1:-1:-1;;;33852:23:56;;-1:-1:-1;;;;;3241:32:73;;33852:23:56;;;3223:51:73;3196:18;;33852:23:56;3077:203:73;8607:156:49;8680:4;8703:53;8711:3;-1:-1:-1;;;;;8731:23:49;;8703:7;:53::i;:::-;8696:60;8607:156;-1:-1:-1;;;8607:156:49:o;58092:412:56:-;58172:6;58182:1;58172:11;58168:24;;58092:412;;:::o;58168:24::-;58205:94;;-1:-1:-1;;;58205:94:56;;-1:-1:-1;;;;;25302:32:73;;58205:94:56;;;25284:51:73;58297:1:56;25351:18:73;;;25344:34;-1:-1:-1;;;;;;;;;;;1249:42:58;58205:40:56;;5078:7;;58254:6;;25257:18:73;;58205:94:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58201:297;;-1:-1:-1;;;;;58400:27:56;;;;;;:16;:27;;;;;:37;;58431:6;;58400:27;:37;;58431:6;;58400:37;:::i;:::-;;;;-1:-1:-1;;58456:31:56;;160:25:73;;;-1:-1:-1;;;;;58456:31:56;;;;;148:2:73;133:18;58456:31:56;14:177:73;46268:2694:56;46464:7;46491:9;:16;46511:2;46491:22;46487:53;;46522:18;;-1:-1:-1;;;46522:18:56;;;;;;;;;;;46487:53;47366:11;47386:9;47396:1;47386:12;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;47421:4:56;47413:12;;:17;;:38;;-1:-1:-1;47442:4:56;47434:12;;:17;;47413:38;47409:69;;;47460:18;;-1:-1:-1;;;47460:18:56;;;;;;;;;;;47409:69;47944:23;47970:53;47995:9;48006:16;47970:24;:53::i;:::-;48639:15;;48589:89;;47944:79;;-1:-1:-1;48518:7:56;;;;572:42:60;;-1:-1:-1;;;48612:25:56;48589:89;;48656:9;;47944:79;;48589:89;;;:::i;:::-;;;;-1:-1:-1;;48589:89:56;;;;;;;;;;;;;;-1:-1:-1;;;;;48589:89:56;-1:-1:-1;;;;;;48589:89:56;;;;;;;;;;48550:138;;;;48589:89;48550:138;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48517:171;;;;48703:2;48702:3;:26;;;;48709:6;:13;48726:2;48709:19;;48702:26;48698:66;;;48757:6;48737:27;;-1:-1:-1;;;48737:27:56;;;;;;;;:::i;48698:66::-;48790:6;48779:26;;;;;;;;;;;;:::i;:::-;48774:71;;48839:5;48814:31;;-1:-1:-1;;;48814:31:56;;;;;;;;:::i;48774:71::-;48911:44;48927:9;48938:16;48911:15;:44::i;:::-;48904:51;46268:2694;-1:-1:-1;;;;;;;;46268:2694:56:o;11603:216:58:-;11717:17;;;11685:7;11717:17;;;:8;:17;;;;;:29;11708:38;;11704:76;;11755:25;;-1:-1:-1;;;11755:25:58;;;;;160::73;;;133:18;;11755:25:58;14:177:73;11704:76:58;-1:-1:-1;11806:5:58;;11603:216;-1:-1:-1;11603:216:58:o;6666:885:51:-;6975:22;13508:11;13649:9;13646:25;13463:14;13619:9;13616:28;13612:60;7011:73;;-1:-1:-1;12939:4:51;12933:11;;13000:16;12990:27;;12777:15;13044:4;13037:12;;13030:31;12820:18;13095:12;;;13088:33;;;;13155:9;13148:4;13141:12;;13134:31;13199:9;13192:4;13185:12;;13178:31;13248:4;13235:18;;7011:73;7218:18;7212:4;7205:32;7284:6;7278:4;7271:20;7348:10;7342:4;7335:24;7424:4;7418;7408:21;7398:31;;7533:1;7527:4;7520:15;6666:885;;;:::o;51660:648:56:-;51841:4;51865:41;51889:16;51865:23;:41::i;:::-;51861:339;;;52173:16;-1:-1:-1;;;;;52126:63:56;:43;52151:6;52159:9;;52126:24;:43::i;:::-;-1:-1:-1;;;;;52126:63:56;;52119:70;;;;51861:339;52217:84;52265:16;52283:6;52291:9;;52217:47;:84::i;:::-;52210:91;51660:648;-1:-1:-1;;;;;51660:648:56:o;53450:902::-;-1:-1:-1;;;;;53859:28:56;;;53844:12;53859:28;;;:10;:28;;;;;;;;:35;;53935:135;;;;;;;;;;4290:16;53935:135;;;;;;;;;;;;;;;;;;;;;;;;53859:35;53935:135;;;;;;;-1:-1:-1;;;53859:35:56;;;53935:135;;;;;;53904:28;;;;;;;;:166;;;;;;;;-1:-1:-1;;;53904:166:56;-1:-1:-1;;;;53904:166:56;;;;-1:-1:-1;;;53904:166:56;-1:-1:-1;;;;;;53904:166:56;;;;;;;;;;;;;;;;;;;;;;;;53859:35;;53935:135;53904:166;53859:28;;-1:-1:-1;;;;53904:166:56;-1:-1:-1;;;;53904:166:56;;;;-1:-1:-1;;;53904:166:56;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;53904:166:56;;;;;;;;;;;;;;;-1:-1:-1;;;;53904:166:56;;;-1:-1:-1;;;53904:166:56;;;;;;;-1:-1:-1;;;;53904:166:56;;;;;-1:-1:-1;;;53904:166:56;;;;;;-1:-1:-1;;;;;53904:166:56;-1:-1:-1;;;53904:166:56;;;;;;;;;;;;;;-1:-1:-1;;;;;54117:28:56;;-1:-1:-1;54117:28:56;;;:10;:28;;;;;54155:48;54117:28;-1:-1:-1;54155:10:56;:48::i;:::-;-1:-1:-1;;;;;54213:28:56;;;;;;:10;:28;;;;;:40;54244:9;;54213:28;:40;:::i;:::-;-1:-1:-1;;;;;;54263:26:56;;;;;;:8;:26;;;;;;;:37;;;54316:29;;;;;54332:12;;54316:29;:::i;:::-;;;;;;;;53622:730;;53450:902;;;;;:::o;11825:274:58:-;-1:-1:-1;;;;;11962:26:58;;11925:7;11962:26;;;:8;:26;;;;;;11925:7;12016:22;;;:51;;12066:1;12016:51;;;12041:22;12051:12;12041:7;:22;:::i;69537:274:56:-;69642:20;;;:42;;-1:-1:-1;69666:18:56;;69642:42;:77;;;;69704:15;69688:13;:31;69642:77;69638:167;;;69742:52;;-1:-1:-1;;;69742:52:56;;;;;26711:25:73;;;26752:18;;;26745:34;;;26684:18;;69742:52:56;26529:256:73;55168:221:56;55240:50;55251:9;55262:27;55240:10;:50::i;:::-;55300:35;;-1:-1:-1;;;;55300:35:56;-1:-1:-1;;;55300:35:56;;;55351:31;;;;;;55300:9;;55351:31;:::i;72836:212::-;72929:25;72919:6;:35;;;;;;;;:::i;:::-;;:68;;;-1:-1:-1;72968:19:56;72958:6;:29;;;;;;;;:::i;:::-;;72919:68;72915:127;;;73024:6;73010:21;;-1:-1:-1;;;73010:21:56;;;;;;;;:::i;72472:150::-;72543:16;72578:37;:13;:28;72598:6;72592:13;;;;;;;;:::i;:::-;72578:28;;;;;;;;;;;;;;;:35;:37::i;8153:490:58:-;8330:7;8427:15;8445:49;8459:16;8477;8445:13;:49::i;:::-;-1:-1:-1;;;;;8504:26:58;;;;;;:8;:26;;;;;:37;;8427:67;;-1:-1:-1;8427:67:58;;8504:26;;;:37;;8427:67;;8504:37;:::i;:::-;;;;-1:-1:-1;;8551:60:58;;-1:-1:-1;;;8551:60:58;;-1:-1:-1;;;;;25302:32:73;;8551:60:58;;;25284:51:73;25351:18;;;25344:34;;;-1:-1:-1;;;;;;;;;;;1249:42:58;8551:40;;25257:18:73;;8551:60:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8629:7:58;;8153:490;-1:-1:-1;;;;;;;8153:490:58:o;67792:419:56:-;67951:17;;68051:1;68033:14;68013:16;68022:7;68013:6;:16;:::i;:::-;68007:40;;;;:::i;:::-;68006:46;;;;:::i;:::-;67984:68;;68062:22;68087:15;68103:13;68087:30;;;;;;;;;:::i;:::-;;;;68062:55;;68147:6;68131:22;;:4;:12;;;;;;;;;;;;:22;;;68127:55;;68162:20;;-1:-1:-1;;;68162:20:56;;20042:10:73;20030:23;;68162:20:56;;;20012:42:73;19985:18;;68162:20:56;19868:192:73;68321:550:56;68480:17;;68577:16;68587:6;68577:7;:16;:::i;:::-;68551:43;-1:-1:-1;68669:13:56;68722:1;68551:43;68686:18;68690:14;68722:1;68686:18;:::i;:::-;:32;;;;:::i;:::-;68685:38;;;;:::i;:::-;68669:54;;68734:22;68759:9;68769:7;68759:18;;;;;;;;;:::i;:::-;;;;68734:43;;68807:6;68791:22;;:4;:12;;;;;;;;;;;;:22;;;68787:55;;68822:20;;-1:-1:-1;;;68822:20:56;;20042:10:73;20030:23;;68822:20:56;;;20012:42:73;19985:18;;68822:20:56;19868:192:73;68787:55:56;68860:4;68321:550;-1:-1:-1;;;;;;68321:550:56:o;2710:117:39:-;1721:16;:14;:16::i;:::-;2768:7:::1;:15:::0;;-1:-1:-1;;2768:15:39::1;::::0;;2798:22:::1;735:10:36::0;2807:12:39::1;2798:22;::::0;-1:-1:-1;;;;;3241:32:73;;;3223:51;;3211:2;3196:18;2798:22:39::1;;;;;;;2710:117::o:0;12506:305:58:-;-1:-1:-1;;;;;12629:29:58;;;12578:7;12629:29;;;:11;:29;;;;;12688:20;;;;12578:7;;12629:29;;12688:20;;12718:59;;-1:-1:-1;12761:16:58;;12795:9;-1:-1:-1;;12506:305:58:o;9978:327:27:-;-1:-1:-1;;;;;10045:16:27;;10041:87;;10084:33;;-1:-1:-1;;;10084:33:27;;10114:1;10084:33;;;3223:51:73;3196:18;;10084:33:27;3077:203:73;10041:87:27;10137:21;10161:32;10169:2;10173:7;10190:1;10161:7;:32::i;:::-;10137:56;-1:-1:-1;;;;;;10207:27:27;;;10203:96;;10257:31;;-1:-1:-1;;;10257:31:27;;10285:1;10257:31;;;3223:51:73;3196:18;;10257:31:27;3077:203:73;50060:581:56;50340:4;50334:11;;50199:4;50183:21;;;50378:10;-1:-1:-1;;;;;50374:83:56;50358:100;;50504:14;;;50498:21;50478:18;;;50471:49;50566:14;;;;50560:21;50540:18;;;50533:49;;;;50601:24;;50060:581::o;13398:216:58:-;13463:4;13483:12;;;:44;;-1:-1:-1;;;;;;13499:28:58;;;13483:44;13479:80;;;13536:23;;-1:-1:-1;;;13536:23:58;;;;;160:25:73;;;133:18;;13536:23:58;14:177:73;13479:80:58;-1:-1:-1;13605:1:58;5824:16:27;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;13576:31:58;;;13398:216::o;2912:187:20:-;3004:6;;;-1:-1:-1;;;;;3020:17:20;;;3004:6;3020:17;;;-1:-1:-1;;;;;;3020:17:20;;;;;;3052:40;;3004:6;;;;;;;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;68877:477:56:-;69186:1;69169:179;69189:26;;;69169:179;;;69266:15;;69282:1;69266:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;69240:44:56;:15;;69256:5;69260:1;69256;:5;:::i;:::-;69240:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;69240:44:56;;69236:101;;69314:15;;69330:5;69334:1;69330;:5;:::i;:::-;69314:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;69293:44;;-1:-1:-1;;;69293:44:56;;-1:-1:-1;;;;;3241:32:73;;;69293:44:56;;;3223:51:73;3196:18;;69293:44:56;3077:203:73;69236:101:56;69217:3;;69169:179;;12149:3644;12288:23;12314:30;:21;:28;:30::i;:::-;12376:12;;12288:56;;-1:-1:-1;;;;12376:12:56;;;;12354:19;;12433:3053;12453:6;:13;12449:1;:17;12433:3053;;;12487:24;12514:6;12521:1;12514:9;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;12580:39:56;;;12537:40;12580:39;;;:21;:39;;;;;;;12537:82;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12537:82:56;;;;;;;;;;;;;;;;;;;12514:9;;-1:-1:-1;12537:82:56;12796:26;;:68;;-1:-1:-1;;;;;;12826:28:56;;;;;;:10;:28;;;;;:38;-1:-1:-1;;;12826:38:56;;;;12796:68;12792:176;;;12884:43;12910:16;12884:25;:43::i;:::-;12945:8;;;;12792:176;-1:-1:-1;;;;;13016:28:56;;12982:31;13016:28;;;:10;:28;;;;;;;;13077:22;;;-1:-1:-1;;;13077:22:56;;;;;13138:20;;;:8;:20;;;;;;:32;13218:21;;13209:31;;;;;;;;;:43;13471:31;;;:100;;;;;4736:1;13521:7;:20;;;:50;;;;:::i;:::-;13506:65;;:12;:65;;;13471:100;13467:159;;;13603:8;;;;;;;;13467:159;-1:-1:-1;;;;;13647:39:56;;;;;;:21;:39;;;;;13640:46;;-1:-1:-1;;;;;;13640:46:56;;;;;;13700;:21;13669:16;13700:28;:46::i;:::-;;13761:14;13810;13793;:31;13789:1310;;;14069:14;;;;-1:-1:-1;;;;;14039:26:56;;;;;;:8;:26;;;;;:44;;:26;;;:44;;14069:14;;14039:44;:::i;:::-;;;;-1:-1:-1;13789:1310:56;;-1:-1:-1;13789:1310:56;;14376:15;14394:31;14411:14;14394;:31;:::i;:::-;-1:-1:-1;;;;;14468:26:56;;14443:22;14468:26;;;:8;:26;;;;;;14376:49;;-1:-1:-1;14516:32:56;;;14512:219;;14581:7;14572:16;;14512:219;;;14634:14;14617;:31;14613:118;;;14681:31;14698:14;14681;:31;:::i;:::-;14672:40;;14613:118;14752:10;;14748:283;;-1:-1:-1;;;;;14786:26:56;;;;;;:8;:26;;;;;:36;;14816:6;;14786:26;:36;;14816:6;;14786:36;:::i;:::-;;;;-1:-1:-1;14844:17:56;;-1:-1:-1;14864:31:56;14878:16;14864:13;:31::i;:::-;-1:-1:-1;;;;;14917:27:56;;;;;;:16;:27;;;;;:37;;14844:51;;-1:-1:-1;14948:6:56;;14917:27;;;:37;;14948:6;;14917:37;:::i;:::-;;;;-1:-1:-1;;14981:31:56;;160:25:73;;;-1:-1:-1;;;;;14981:31:56;;;;;148:2:73;133:18;14981:31:56;;;;;;;14764:267;14748:283;15068:16;15078:6;15068:7;:16;:::i;:::-;15048:36;;;;:::i;:::-;;;14104:995;;13789:1310;15138:21;;15113:46;;;;;;-1:-1:-1;;;15113:46:56;-1:-1:-1;;;;15113:46:56;;;;;;-1:-1:-1;;;;;12264:29:58;;;-1:-1:-1;12264:29:58;;;:11;:29;;;;;:39;;;;:53;15173:139:56;;15276:21;;-1:-1:-1;;;;;15227:29:56;;15276:21;15227:29;;;:11;:29;;;;;:46;;:70;;;;;;-1:-1:-1;;;15227:70:56;-1:-1:-1;;;;15227:70:56;;;;;;;;;15173:139;15408:21;;15331:144;;;31973:4:73;31961:17;;;31943:36;;32015:17;;;32010:2;31995:18;;31988:45;32049:18;;32042:34;;;32107:2;32092:18;;32085:34;;;-1:-1:-1;;;;;15331:144:56;;;;;31930:3:73;31915:19;15331:144:56;;;;;;;12473:3013;;;;;;;12433:3053;12468:3;;12433:3053;;;-1:-1:-1;15582:20:56;;15578:209;;15630:44;;15619:6;;-1:-1:-1;;;;;;;;;;;1249:42:58;15652:16:56;;15619:6;15630:44;15619:6;15630:44;15652:16;1249:42:58;15630:44:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15618:56;;;15742:1;15737:39;;15752:24;;-1:-1:-1;;;15752:24:56;;;;;;;;;;;66115:1404;66347:12;;66209:6;;;;;;66234:16;;-1:-1:-1;;;66347:12:56;;;;66209:6;66418:1;66394:20;66347:12;66413:1;66394:20;:::i;:::-;66393:26;;;;:::i;:::-;66471:12;:30;;-1:-1:-1;;;;66471:30:56;-1:-1:-1;;;66471:30:56;;;;;;;;;;-1:-1:-1;;;66531:12:56;;66529:14;;-1:-1:-1;;;66529:14:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;66511:32;;66553:30;66586:15;66602;66586:32;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;66586:42:56;66674:23;:21;:23::i;:::-;66638:59;;66736:215;;;;;;;;66759:12;66736:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;66736:215:56;;;;;;;;;;;;;;;;-1:-1:-1;;;66736:215:56;;;-1:-1:-1;;66785:28:56;;;;;66736:215;;;;;66827:24;66834:12;66850:1;66827:24;:::i;:::-;-1:-1:-1;;;;;66736:215:56;;;;;;;;;;;66887:28;;;;;66736:215;;;;;;;66929:12;;;;;;66736:215;;;;;66707:9;;:26;;;;;;;;;:::i;:::-;;;;:244;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;66707:244:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;66707:244:56;;;-1:-1:-1;;;;;;66707:244:56;;;;;;;-1:-1:-1;;;66707:244:56;;;;;;-1:-1:-1;;;;66707:244:56;-1:-1:-1;;;66707:244:56;;;;;-1:-1:-1;;;;66707:244:56;;;;;-1:-1:-1;;;66707:244:56;;;;;;;;;;;;-1:-1:-1;;67303:1:56;;67280:19;;:15;;:19;:::i;:::-;67279:25;;;;:::i;:::-;67246:58;;67358:52;;;;;;;;67368:15;67358:52;;;;67385:1;67358:52;;;;67388:1;-1:-1:-1;;;;;67358:52:56;;;;;67391:8;67402:1;67391:12;;;;:::i;:::-;67358:52;;;;67405:1;67358:52;;;;;;;;;;;67314:15;67358:52;67314:41;;;;;;;;;:::i;:::-;;;;:96;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;67314:96:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;67314:96:56;-1:-1:-1;;;;67314:96:56;;;;-1:-1:-1;;;67314:96:56;;-1:-1:-1;;;;67314:96:56;;;;-1:-1:-1;;;67314:96:56;-1:-1:-1;;;;;;67314:96:56;;;-1:-1:-1;;;;;67314:96:56;;;;;;;;;;;;;;;;;;;;;;;67439:28;;;;67469;;;;67421:91;;;;;;;;;;;;;;;;;67429:8;;67439:28;67469;;67499:12;;67421:91;67499:12;;67421:91;;67499:12;67421:91;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;67421:91:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66115:1404;;;;;:::o;60327:1684::-;60521:34;60558:49;60573:33;60558:14;:49::i;:::-;60521:86;;60622:9;60617:193;60637:17;:24;60633:1;:28;60617:193;;;60682:39;60724:10;:32;60735:17;60753:1;60735:20;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;60724:32:56;-1:-1:-1;;;;;60724:32:56;;;;;;;;;;;;60682:74;;60771:28;60781:17;60771:9;:28::i;:::-;-1:-1:-1;60663:3:56;;60617:193;;;;60820:28;60851:43;60866:27;60851:14;:43::i;:::-;60932:12;;60820:74;;-1:-1:-1;;;;60932:12:56;;;;60904:25;61007:1;60980:23;60932:12;61002:1;60980:23;:::i;:::-;60979:29;;;;:::i;:::-;60954:54;;61335:20;5241:53;61402:7;61368:42;;;;;;;;38596:19:73;;;38671:3;38649:16;-1:-1:-1;;;;;;38645:43:73;38640:2;38631:12;;38624:65;38714:2;38705:12;;38441:282;61368:42:56;;;;;;;;;;;;;61358:53;;;;;;61335:76;;61421:77;61443:9;61453:19;61443:30;;;;;;;;;:::i;:::-;;;;61421:77;;;;;;;;;;;;;;;;;;;;61443:30;61421:77;;;61443:30;61421:77;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;61421:77:56;;;;;;;;;;;;;;;;;;;;;61485:12;61421:21;:77::i;:::-;61508:80;61530:15;61546:16;61530:33;;;;;;;;;:::i;61508:80::-;61598:52;61620:15;;61598:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61637:12:56;;-1:-1:-1;61598:21:56;;-1:-1:-1;;61598:52:56:i;:::-;61665:9;61660:345;61680:11;:18;61676:1;:22;61660:345;;;61719:24;61746:11;61758:1;61746:14;;;;;;;;:::i;:::-;;;;;;;61719:41;;61876:50;61895:16;61913:12;61876:18;:50::i;:::-;61872:64;;;61928:8;;;61872:64;-1:-1:-1;;;;;61956:28:56;;;;;;:10;:28;;;;;61950:44;;61986:7;61950:5;:44::i;:::-;61705:300;61660:345;61700:3;;61660:345;;;;60419:1592;;;;;60327:1684;;;:::o;2463:115:39:-;1474:19;:17;:19::i;:::-;2522:7:::1;:14:::0;;-1:-1:-1;;2522:14:39::1;;;::::0;;2551:20:::1;2558:12;735:10:36::0;;656:96;56125:658:56;56376:42;56387:9;56398:19;56376:10;:42::i;:::-;56428:26;;-1:-1:-1;;;;56428:26:56;;-1:-1:-1;;;56428:26:56;;;56680:53;;-1:-1:-1;;;;;56706:26:56;56680:25;:53::i;:::-;56749:27;56766:9;56749:27;;;;;;:::i;11510:227:27:-;11561:21;11585:40;11601:1;11605:7;11622:1;11585:7;:40::i;:::-;11561:64;-1:-1:-1;;;;;;11639:27:27;;11635:96;;11689:31;;-1:-1:-1;;;11689:31:27;;;;;160:25:73;;;133:18;;11689:31:27;14:177:73;10243:273:49;10306:16;10334:22;10359:19;10367:3;10359:7;:19::i;8289:150::-;8359:4;8382:50;8387:3;-1:-1:-1;;;;;8407:23:49;;8382:4;:50::i;71320:255:56:-;71407:4;71441:22;71431:6;:32;;;;;;;;:::i;:::-;;:73;;;-1:-1:-1;71477:27:56;71467:6;:37;;;;;;;;:::i;:::-;;71431:73;:136;;;-1:-1:-1;71534:33:56;71524:6;:43;;;;;;;;:::i;:::-;;71423:145;71320:255;-1:-1:-1;;71320:255:56:o;985:924:33:-;-1:-1:-1;;;;;1165:14:33;;;:18;1161:742;;1203:67;;-1:-1:-1;;;1203:67:33;;-1:-1:-1;;;;;1203:36:33;;;;;:67;;1240:8;;1250:4;;1256:7;;1265:4;;1203:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1203:67:33;;;;;;;;-1:-1:-1;;1203:67:33;;;;;;;;;;;;:::i;:::-;;;1199:694;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1560:6;:13;1577:1;1560:18;1556:323;;1664:39;;-1:-1:-1;;;1664:39:33;;-1:-1:-1;;;;;3241:32:73;;1664:39:33;;;3223:51:73;3196:18;;1664:39:33;3077:203:73;1556:323:33;1831:6;1825:13;1816:6;1812:2;1808:15;1801:38;1199:694;-1:-1:-1;;;;;;1317:51:33;;-1:-1:-1;;;1317:51:33;1313:182;;1437:39;;-1:-1:-1;;;1437:39:33;;-1:-1:-1;;;;;3241:32:73;;1437:39:33;;;3223:51:73;3196:18;;1437:39:33;3077:203:73;3297:723:42;3363:13;3388:19;3416:17;3428:4;3416:11;:17::i;:::-;3635:2;3628:4;3616:17;;3606:32;3388:46;;-1:-1:-1;3602:2:42;3598:41;3676:2;3659:324;3684:1;3680;:5;3659:324;;;3816:1;3798:9;3810:3;3798:15;:19;:44;;;;;3840:2;3827:6;3834:1;3827:9;;;;;;;;:::i;:::-;;;;;;;3821:21;3798:44;3794:150;;;3925:4;3912:17;;:6;3919:1;3912:9;;;;;;;;:::i;:::-;;;;:17;;-1:-1:-1;;;;;;3912:17:42;;;;;;;;;;;;;;;;;3794:150;3971:1;3957:15;;;;;3687:3;;;:::i;:::-;;;3659:324;;;-1:-1:-1;4006:6:42;;3297:723;-1:-1:-1;;;3297:723:42:o;7929:169:58:-;7989:13;8065:25;8085:3;;;;;;;;;;;;;;;;;8065:13;:25::i;:::-;8021:70;;;;;;;;:::i;:::-;;;;;;;;;;;;;8014:77;;7929:169;:::o;663:124:35:-;721:13;753:27;761:4;767:6;;;;;;;;;;;;;;;;;775:4;753:7;:27::i;39146:1351:56:-;39337:15;39355:31;39372:14;39355;:31;:::i;:::-;-1:-1:-1;;;;;39421:26:56;;39396:22;39421:26;;;:8;:26;;;;;;39337:49;;-1:-1:-1;39491:32:56;;;39487:319;;-1:-1:-1;39602:7:56;39487:319;;;39647:14;39630;:31;39626:180;;;39764:31;39781:14;39764;:31;:::i;:::-;39749:46;;39626:180;39879:16;;39875:245;;-1:-1:-1;;;;;39911:26:56;;;;;;:8;:26;;;;;:42;;39941:12;;39911:26;:42;;39941:12;;39911:42;:::i;:::-;;;;-1:-1:-1;;40032:77:56;;-1:-1:-1;;;40032:77:56;;-1:-1:-1;;;;;25302:32:73;;40032:77:56;;;25284:51:73;40107:1:56;25351:18:73;;;25344:34;-1:-1:-1;;;;;;;;;;;1249:42:58;40032:40:56;;40081:12;;25257:18:73;;40032:77:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39875:245;40220:25;40248:22;40258:12;40248:7;:22;:::i;:::-;40220:50;-1:-1:-1;40284:21:56;;40280:211;;40333:45;;40322:6;;-1:-1:-1;;;;;;;;;;;1249:42:58;40355:17:56;;40322:6;40333:45;40322:6;40333:45;40355:17;1249:42:58;40333:45:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40321:57;;;40446:1;40441:39;;40456:24;;-1:-1:-1;;;40456:24:56;;;;;;;;;;;40280:211;39327:1170;;;;39146:1351;;;;:::o;71687:411::-;71813:23;;71772:4;;-1:-1:-1;;;71813:23:56;;;;71860:22;71850:6;:32;;;;;;;;:::i;:::-;;71846:49;;-1:-1:-1;71891:4:56;;71687:411;-1:-1:-1;;71687:411:56:o;71846:49::-;71929:19;;71906:20;;71929:23;;-1:-1:-1;;;71929:19:56;;;;71951:1;71929:23;:::i;:::-;71906:46;-1:-1:-1;71976:22:56;71966:6;:32;;;;;;;;:::i;:::-;;:65;;;;-1:-1:-1;72002:12:56;;:29;;;;-1:-1:-1;;;72002:12:56;;;;:29;;71966:65;71962:107;;;-1:-1:-1;72054:4:56;;71687:411;-1:-1:-1;;;71687:411:56:o;71962:107::-;-1:-1:-1;72086:5:56;;71687:411;-1:-1:-1;;;71687:411:56:o;9453:1710:58:-;9624:7;9647:35;9665:16;9647:17;:35::i;:::-;9694:11;9707:16;9725:15;9744:37;9764:16;9744:19;:37::i;:::-;9693:88;;;;;;9854:3;9861:1;9854:8;9850:24;;9871:3;9864:10;;;;;;;9850:24;-1:-1:-1;;;;;9976:26:58;;10005:1;9976:26;;;:8;:26;;;;;:30;;;10048:15;;;10044:582;;-1:-1:-1;10186:8:58;10044:582;;;-1:-1:-1;10335:3:58;10460:6;-1:-1:-1;;;;;;;;;;;10493:14:58;10335:3;10493:8;:14;:::i;:::-;10471:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10459:54;;;10581:1;10576:39;;10591:24;;-1:-1:-1;;;10591:24:58;;;;;;;;;;;10576:39;10211:415;10044:582;10836:21;:51;;;;-1:-1:-1;;;;;;;;;;;;10871:16:58;10861:26;;10836:51;10832:83;;;-1:-1:-1;;;;;;;;;;;10899:16:58;;-1:-1:-1;10832:83:58;11037:81;;-1:-1:-1;;;11037:81:58;;-1:-1:-1;;;;;25302:32:73;;11037:81:58;;;25284:51:73;25351:18;;;25344:34;;;-1:-1:-1;;;;;;;;;;;1249:42:58;11037:40;;11086:10;;25257:18:73;;11037:81:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11149:7;11136:10;:20;;;;:::i;62200:1455:56:-;62313:12;;-1:-1:-1;;;62313:12:56;;;;;-1:-1:-1;;;62363:12:56;;;;62296:14;62422:58;62313:12;;62363;62422:19;:58::i;:::-;:68;-1:-1:-1;62500:42:56;62422:68;62525:16;62500:6;:42::i;:::-;-1:-1:-1;62576:23:56;;62609:47;62629:11;62576:23;62609:19;:47::i;:::-;62667:16;62686:11;:7;62696:1;62686:11;:::i;:::-;62667:30;;62707:31;62741:60;62761:9;62772:7;62781:19;62741;:60::i;:::-;:70;-1:-1:-1;62821:39:56;62741:70;62843:16;62821:6;:39::i;:::-;-1:-1:-1;62886:20:56;;;-1:-1:-1;62916:47:56;62936:11;62886:20;62916:19;:47::i;:::-;62974:22;62999:11;:7;63009:1;62999:11;:::i;:::-;62974:36;;63020:37;63068:66;63088:15;63105:7;63114:19;63068;:66::i;:::-;:76;-1:-1:-1;63154:45:56;63068:76;63182:16;63154:6;:45::i;:::-;-1:-1:-1;63225:26:56;;;-1:-1:-1;63261:47:56;63281:11;63225:26;63261:19;:47::i;:::-;63420:17;;-1:-1:-1;;;63420:17:56;;;;-1:-1:-1;;63416:233:56;;;63484:17;;;;63515:39;;;-1:-1:-1;;;63515:39:56;;;-1:-1:-1;;;;63515:39:56;;;;;;;63573:65;;;63484:17;;;;;;27241:38:73;;;63607:17:56;;;;;;;27310:2:73;27295:18;;27288:47;27351:18;;;27344:34;;;63573:65:56;;27229:2:73;27214:18;63573:65:56;;;;;;;63453:196;63416:233;62286:1369;;;;;;;;62200:1455;;:::o;55636:212::-;55717:45;55728:9;55739:22;55717:10;:45::i;:::-;55772:27;;-1:-1:-1;;;;55772:27:56;-1:-1:-1;;;55772:27:56;;;;;;;55815:26;;;;;;55772:27;;55815:26;:::i;9229:218:58:-;9301:36;-1:-1:-1;;;;;13353:32:58;;43446:5:56::1;:36::i;9301::58:-:0;2140:10:30;:17;9368:1:58;9351:18;9347:46;;9378:15;;-1:-1:-1;;;9378:15:58;;;;;;;;;;;9347:46;-1:-1:-1;;;;;9411:29:58;;;;;:11;:29;;;;;9404:36;;;;;;;;-1:-1:-1;;;;;;9404:36:58;;;;;;;-1:-1:-1;;;;;;9404:36:58;;;9229:218::o;59056:783:56:-;59169:26;;-1:-1:-1;;;;;59169:26:56;;;-1:-1:-1;;;59233:23:56;;;;59267:44;59169:26;59267:13;59154:12;59233:23;59281:16;;;;;;;;:::i;:::-;59267:31;;;;;;;;;;;;;-1:-1:-1;59267:31:56;;:38;:44::i;:::-;-1:-1:-1;59338:25:56;59325:9;:38;;;;;;;;:::i;:::-;;;:74;;;;-1:-1:-1;59380:19:56;59367:9;:32;;;;;;;;:::i;:::-;;;59325:74;59321:146;;;59415:41;59451:4;59415:13;:31;59435:9;59429:16;;;;;;;;:::i;59415:41::-;;59321:146;59477:16;59496:41;59527:9;59496:30;:41::i;:::-;59477:60;;59547:16;59566:41;59597:9;59566:30;:41::i;:::-;59547:60;;59621:11;:27;;;;;59637:11;59636:12;59621:27;59617:170;;;59666:22;;59664:24;;;;;:::i;:::-;;;;-1:-1:-1;59617:170:56;;;59710:11;59709:12;:27;;;;;59725:11;59709:27;59705:82;;;59754:22;;59752:24;;;;;:::i;:::-;;;;-1:-1:-1;59705:82:56;59797:35;;59823:9;;59797;;-1:-1:-1;;;;59797:35:56;-1:-1:-1;;;59823:9:56;59797:35;;;;;;;;:::i;:::-;;;;;;59144:695;;;;59056:783;;:::o;2815:1368:49:-;2881:4;3010:21;;;:14;;;:21;;;;;;3046:13;;3042:1135;;3413:18;3434:12;3445:1;3434:8;:12;:::i;:::-;3480:18;;3413:33;;-1:-1:-1;3460:17:49;;3480:22;;3501:1;;3480:22;:::i;:::-;3460:42;;3535:9;3521:10;:23;3517:378;;3564:17;3584:3;:11;;3596:9;3584:22;;;;;;;;:::i;:::-;;;;;;;;;3564:42;;3731:9;3705:3;:11;;3717:10;3705:23;;;;;;;;:::i;:::-;;;;;;;;;;;;:35;;;;3844:25;;;:14;;;:25;;;;;:36;;;3517:378;3973:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4076:3;:14;;:21;4091:5;4076:21;;;;;;;;;;;4069:28;;;4119:4;4112:11;;;;;;;3042:1135;4161:5;4154:12;;;;;3042:1135;2887:1296;2815:1368;;;;:::o;45326:595:56:-;45476:12;45790:6;:13;45807:2;45790:19;45786:50;;45818:18;;-1:-1:-1;;;45818:18:56;;;;;;;;;;;45786:50;45853:61;;;;44899:8;;45889:6;;45897:16;;45853:61;;;:::i;:::-;;;;;;;;;;;;;45846:68;;45326:595;;;;:::o;49072:363::-;49164:21;49213:20;49223:9;49213;:20::i;:::-;49298:1;49247:39;;;:24;:39;;;;;;49197:36;;-1:-1:-1;;;;;;49247:39:56;:53;49243:86;;49309:20;;-1:-1:-1;;;49309:20:56;;;;;;;;;;;49243:86;49339:39;;;;:24;:39;;;;;:58;;-1:-1:-1;;;;;49339:58:56;;-1:-1:-1;;;;;;49339:58:56;;;;;;49072:363;;;;:::o;52998:299::-;53071:4;52464:2;53091:7;-1:-1:-1;;;;;53091:19:56;;:48;53087:66;;-1:-1:-1;53148:5:56;;52998:299;-1:-1:-1;52998:299:56:o;53087:66::-;53164:17;53184:7;-1:-1:-1;;;;;53184:12:56;;;;;;;;;;;;;;;;;;;;;;;;53213:7;;53164:32;;-1:-1:-1;;;;53224:12:56;53164:32;;53218:1;;53213:7;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;53213:7:56;:23;:50;;;;-1:-1:-1;53240:7:56;;-1:-1:-1;;;53251:12:56;53240:4;;53258;;53240:7;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;53240:7:56;:23;53213:50;:77;;;;-1:-1:-1;53267:7:56;;53285:4;;53267;;53272:1;;53267:7;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;53267:7:56;:23;53206:84;52998:299;-1:-1:-1;;;52998:299:56:o;9664:1284:50:-;9779:14;9896:4;9890:11;9934:16;9972:2;9967:297;;;;10286:2;10281:204;;;;10512:5;;;9967:297;10042:4;10020:27;;;10007:41;10090:3;10086:12;;;10100:2;10082:21;10069:35;;;10146:30;;10140:4;10133:44;-1:-1:-1;;;;;10219:18:50;10213:4;10206:32;9967:297;;10281:204;10367:4;10349:16;10345:27;10332:41;10329:1;10324:50;10318:4;10311:64;10441:4;10423:16;10417:4;10404:42;9927:592;;10549:4;10543;10536:18;10614:4;10608;10602;10596;10593:1;10586:5;10575:44;10571:49;10650:1;10644:4;10637:15;10810:16;10804:4;10800:27;10794:34;10784:44;;10858:1;10852:4;10845:15;9879:24;9664:1284;;;;;:::o;4225:2099:55:-;4365:12;-1:-1:-1;;;;;4397:20:55;;4393:40;4419:14;4393:40;4524:4;4518:11;4594:6;4582:19;4572:1072;;4632:16;4674:2;4669:317;;;;5012:2;5007:208;;;;5246:5;;;4669:317;4748:4;4726:27;;;4713:41;4800:3;4796:12;;;4810:2;4792:21;4779:35;;;4860:30;;4854:4;4847:44;-1:-1:-1;;;;;4937:18:55;4931:4;4924:32;4669:317;;5007:208;5097:4;5079:16;5075:27;5062:41;5059:1;5054:50;5048:4;5041:64;5175:4;5157:16;5151:4;5138:42;4625:628;;5287:4;5281;5274:18;5375:4;5369;5363;5357;5354:1;5347:5;5336:44;5330:51;5454:9;5446:6;5442:22;5438:2;5434:31;5416:16;5413:53;5402:64;;;5500:1;5494:4;5487:15;5562:1;5556:4;5549:15;5621:5;;4572:1072;5679:10;5674:3;5670:20;5717:1;5714;5707:12;5816:4;5809;5806:1;5802:12;5795:26;5854:4;5851:1;5847:12;5886:4;5883:1;5876:15;5979:16;5972:4;5969:1;5965:12;5958:38;6104:16;6086;6079:4;6076:1;6072:12;6059:62;6210:4;6207:1;6200:4;6182:16;6178:27;6175:1;6167:6;6160:5;6149:66;6250:8;;6247:15;;;6243:29;;-1:-1:-1;4542:1766:55;4546:2;4225:2099;;;;;;:::o;11169:428:58:-;11310:26;;;11268:7;11310:26;;;:8;:26;;;;;:38;11268:7;11376:43;11388:16;11310:38;11376:11;:43::i;:::-;11358:61;-1:-1:-1;11434:12:58;;;:70;;-1:-1:-1;11460:26:58;;;;;;;:8;:26;;;;;:44;;;11450:54;;11434:70;11430:136;;;11527:28;;-1:-1:-1;;;11527:28:58;;;;;160:25:73;;;133:18;;11527:28:58;14:177:73;2202:126:39;1920:7;;;;;;;2260:62;;2296:15;;-1:-1:-1;;;2296:15:39;;;;;;;;;;;2518:625:30;2613:7;2632:21;2656:32;2670:2;2674:7;2683:4;2656:13;:32::i;:::-;2632:56;-1:-1:-1;;;;;;2703:27:30;;2699:210;;2746:40;2778:7;3949:10;:17;;3922:24;;;;:15;:24;;;;;:44;;;3976:24;;;;;;;;;;;;3846:161;2746:40;2699:210;;;2824:2;-1:-1:-1;;;;;2807:19:30;:13;-1:-1:-1;;;;;2807:19:30;;2803:106;;2842:56;2875:13;2890:7;2842:32;:56::i;:::-;-1:-1:-1;;;;;2922:16:30;;2918:188;;2954:45;2991:7;2954:36;:45::i;:::-;2918:188;;;3037:2;-1:-1:-1;;;;;3020:19:30;:13;-1:-1:-1;;;;;3020:19:30;;3016:90;;3055:40;3083:2;3087:7;3055:27;:40::i;57156:641:56:-;-1:-1:-1;;;;;57279:39:56;;;57236:40;57279:39;;;:21;:39;;;;;;;;57236:82;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;57236:82:56;;;;;;;;;;;;;;;;;;;57332:26;;57328:179;;57430:46;:21;57459:16;57430:28;:46::i;57328:179::-;-1:-1:-1;;;;;57524:39:56;;;;;;:21;:39;;;;;57517:46;;-1:-1:-1;;;;;;57517:46:56;;;;;;57573;:21;57546:16;57573:28;:46::i;:::-;-1:-1:-1;57633:14:56;;;;:18;57629:162;;57703:14;;;;57684;;;;;-1:-1:-1;;;;;57667:32:56;;;;;:16;:32;;;;;:50;;:32;;;:50;;57703:14;;57667:50;:::i;:::-;;;;;;;;57749:7;:14;;;-1:-1:-1;;;;;57736:44:56;;57765:7;:14;;;57736:44;;;;160:25:73;;148:2;133:18;;14:177;54844:168:56;54915:45;54926:9;54937:22;54915:10;:45::i;:::-;54976:29;54995:9;54976:29;;;;;;:::i;70684:238::-;70788:9;70783:133;70803:9;:16;70799:1;:20;70783:133;;;70840:65;70900:4;70840:52;:40;70867:9;70877:1;70867:12;;;;;;;;:::i;:::-;;;;;;;70840;:26;;:40;;;;:::i;:::-;1766:4:43;1663:115;70840:52:56;:59;;:65::i;:::-;70821:3;;70783:133;;71014:192;-1:-1:-1;;;;;2831:25:40;;71112:4:56;2818:39:40;;;2877:4;2870:18;;;2927:4;2911:21;;3369:11:43;71135:64:56;3243:153:43;5581:109:49;5637:16;5672:3;:11;;5665:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:109;;;:::o;2241:406::-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:49;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:49;2618:12;;2973:148:42;3031:13;3063:51;-1:-1:-1;;;;;3075:22:42;;448:2;3063:11;:51::i;1186:4022:35:-;1283:13;1515:4;:11;1530:1;1515:16;1511:31;;-1:-1:-1;1533:9:35;;;;;;;;;-1:-1:-1;1533:9:35;;;;1511:31;2480:20;2503:11;:69;;2571:1;2552:4;:11;2548:1;:15;;;;:::i;:::-;:19;;2566:1;2548:19;:::i;:::-;2547:25;;;;:::i;:::-;2503:69;;;2542:1;2523:4;:11;2537:1;2523:15;;;;:::i;:::-;2522:21;;;;:::i;:::-;2517:27;;:1;:27;:::i;:::-;2480:92;;2583:20;2617:12;-1:-1:-1;;;;;2606:24:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2606:24:35;;2583:47;;2778:1;2771:5;2767:13;2879:4;2871:6;2867:17;2912:4;2959;2953:11;2947:4;2943:22;3207:4;3199:6;3195:17;3249:8;3243:15;3288:4;3278:8;3271:22;3360:1259;3393:6;3384:7;3381:19;3360:1259;;;3495:1;3486:7;3482:15;3471:26;;3533:7;3527:14;4120:4;4112:5;4108:2;4104:14;4100:25;4090:8;4086:40;4080:47;4069:9;4061:67;4173:1;4162:9;4158:17;4145:30;;4263:4;4255:5;4251:2;4247:14;4243:25;4233:8;4229:40;4223:47;4212:9;4204:67;4316:1;4305:9;4301:17;4288:30;;4405:4;4397:5;4394:1;4390:13;4386:24;4376:8;4372:39;4366:46;4355:9;4347:66;4458:1;4447:9;4443:17;4430:30;;4539:4;4532:5;4528:16;4518:8;4514:31;4508:38;4497:9;4489:58;;4592:1;4581:9;4577:17;4564:30;;3360:1259;;;4680:28;;-1:-1:-1;;4722:446:35;;;;4907:1;4900:4;4894:11;4890:19;4931:1;4926:132;;;;5080:1;5075:79;;;;4883:271;;4926:132;4982:4;4978:1;4967:9;4963:17;4955:32;5035:4;5031:1;5020:9;5016:17;5008:32;4926:132;;5075:79;5131:4;5127:1;5116:9;5112:17;5104:32;4883:271;;4722:446;-1:-1:-1;5195:6:35;;1186:4022;-1:-1:-1;;;;;;1186:4022:35:o;63661:394:56:-;63780:16;;63750:4;;;63806:221;63826:3;63822:1;:7;63806:221;;;63870:16;-1:-1:-1;;;;;63854:32:56;:9;63864:1;63854:12;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;63854:12:56;:32;63850:167;;63921:9;63931:7;63937:1;63931:3;:7;:::i;:::-;63921:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;63921:18:56;63906:9;63916:1;63906:12;;;;;;;;:::i;:::-;;;;;;;;;:33;;;;;-1:-1:-1;;;;;63906:33:56;;;;;-1:-1:-1;;;;;63906:33:56;;;;;;63957:9;:15;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;63957:15:56;;;;;-1:-1:-1;;;;;;63957:15:56;;;;;;-1:-1:-1;63957:15:56;;-1:-1:-1;63991:11:56;;-1:-1:-1;63991:11:56;63850:167;63831:3;;63806:221;;;-1:-1:-1;64043:5:56;;63661:394;-1:-1:-1;;;;63661:394:56:o;8861:795:27:-;8947:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;;;9058:18;;;9054:86;;9092:37;9109:4;9115;9121:7;9092:16;:37::i;:::-;-1:-1:-1;;;;;9184:18:27;;;9180:256;;9300:48;9317:1;9321:7;9338:1;9342:5;9300:8;:48::i;:::-;-1:-1:-1;;;;;9391:15:27;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9391:20:27;;;9180:256;-1:-1:-1;;;;;9450:16:27;;;9446:107;;-1:-1:-1;;;;;9510:13:27;;;;;;:9;:13;;;;;:18;;9527:1;9510:18;;;9446:107;9563:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9563:21:27;-1:-1:-1;;;;;9563:21:27;;;;;;;;;9600:27;;9563:16;;9600:27;;;;;;;9645:4;8861:795;-1:-1:-1;;;;8861:795:27:o;4624:1055:30:-;4886:22;4911:15;4921:4;4911:9;:15::i;:::-;4936:18;4957:26;;;:17;:26;;;;;;;;;-1:-1:-1;;;;;5058:18:30;;;;:12;:18;;;;;;4886:40;;-1:-1:-1;4957:26:30;5180:28;;;5176:325;;5224:19;5246:35;;;;;;;;;;;;5296:31;;;;;;:45;;;5413:30;;:17;:30;;;;;:43;;;5176:325;5594:26;;;;:17;:26;;;;;;;;5587:33;;;5637:35;;;;-1:-1:-1;5637:35:30;;5630:42;-1:-1:-1;4624:1055:30:o;5967:1061::-;6241:10;:17;6216:22;;6241:21;;6261:1;;6241:21;:::i;:::-;6272:18;6293:24;;;:15;:24;;;;;;6661:10;:26;;6216:46;;-1:-1:-1;6293:24:30;;6216:46;;6661:26;;;;;;:::i;:::-;;;;;;;;;6639:48;;6723:11;6698:10;6709;6698:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6802:28;;;:15;:28;;;;;;;:41;;;6971:24;;;;;6964:31;7005:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6038:990;;;5967:1061;:::o;3437:214::-;3521:14;3554:1;3538:13;3548:2;3538:9;:13::i;:::-;:17;;;;:::i;:::-;-1:-1:-1;;;;;3565:16:30;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3609:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3437:214:30:o;2680:268:40:-;-1:-1:-1;;;;;2831:25:40;2753:14;2818:39;;;2877:4;2870:18;;;;2927:4;2911:21;;;2680:268::o;3485:139:43:-;3602:5;3596:4;3589:19;3485:139;;:::o;2289:525:42:-;2364:13;2410:5;2389:18;2457:10;2461:6;2457:1;:10;:::i;:::-;:14;;2470:1;2457:14;:::i;:::-;-1:-1:-1;;;;;2447:25:42;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2447:25:42;;2425:47;;-1:-1:-1;;;2482:6:42;2489:1;2482:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2482:15:42;;;;;;;;;-1:-1:-1;;;2507:6:42;2514:1;2507:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2507:15:42;;;;;;;;-1:-1:-1;2537:9:42;2549:10;2553:6;2549:1;:10;:::i;:::-;:14;;2562:1;2549:14;:::i;:::-;2537:26;;2532:140;2569:1;2565;:5;2532:140;;;-1:-1:-1;;;2614:10:42;2627:3;2614:16;2603:28;;;;;;;:::i;:::-;;;;2591:6;2598:1;2591:9;;;;;;;;:::i;:::-;;;;:40;-1:-1:-1;;;;;2591:40:42;;;;;;;;-1:-1:-1;2660:1:42;2645:16;;;;;2572:3;;;:::i;:::-;;;2532:140;;;-1:-1:-1;2685:15:42;;2681:96;;2723:43;;-1:-1:-1;;;2723:43:42;;;;;26711:25:73;;;26752:18;;;26745:34;;;26684:18;;2723:43:42;26529:256:73;7105:368:27;7217:38;7231:5;7238:7;7247;7217:13;:38::i;:::-;7212:255;;-1:-1:-1;;;;;7275:19:27;;7271:186;;7321:31;;-1:-1:-1;;;7321:31:27;;;;;160:25:73;;;133:18;;7321:31:27;14:177:73;7271:186:27;7398:44;;-1:-1:-1;;;7398:44:27;;-1:-1:-1;;;;;25302:32:73;;7398:44:27;;;25284:51:73;25351:18;;;25344:34;;;25257:18;;7398:44:27;25110:274:73;14794:662:27;14954:9;:31;;;-1:-1:-1;;;;;;14967:18:27;;;;14954:31;14950:460;;;15001:13;15017:22;15031:7;15017:13;:22::i;:::-;15001:38;-1:-1:-1;;;;;;15167:18:27;;;;;;:35;;;15198:4;-1:-1:-1;;;;;15189:13:27;:5;-1:-1:-1;;;;;15189:13:27;;;15167:35;:69;;;;;15207:29;15224:5;15231:4;15207:16;:29::i;:::-;15206:30;15167:69;15163:142;;;15263:27;;-1:-1:-1;;;15263:27:27;;-1:-1:-1;;;;;3241:32:73;;15263:27:27;;;3223:51:73;3196:18;;15263:27:27;3077:203:73;15163:142:27;15323:9;15319:81;;;15377:7;15373:2;-1:-1:-1;;;;;15357:28:27;15366:5;-1:-1:-1;;;;;15357:28:27;;;;;;;;;;;15319:81;14987:423;14950:460;-1:-1:-1;;15420:24:27;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15420:29:27;-1:-1:-1;;;;;15420:29:27;;;;;;;;;;14794:662::o;6401:272::-;6504:4;-1:-1:-1;;;;;6539:21:27;;;;;;:127;;;6586:7;-1:-1:-1;;;;;6577:16:27;:5;-1:-1:-1;;;;;6577:16:27;;:52;;;;6597:32;6614:5;6621:7;6597:16;:32::i;:::-;6577:88;;;-1:-1:-1;;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;;;6633:32;;;;6520:146;-1:-1:-1;6401:272:27:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:131:73:-;-1:-1:-1;;;;;;270:32:73;;260:43;;250:71;;317:1;314;307:12;332:245;390:6;443:2;431:9;422:7;418:23;414:32;411:52;;;459:1;456;449:12;411:52;498:9;485:23;517:30;541:5;517:30;:::i;870:381::-;947:8;957:6;1011:3;1004:4;996:6;992:17;988:27;978:55;;1029:1;1026;1019:12;978:55;-1:-1:-1;1052:20:73;;-1:-1:-1;;;;;1084:30:73;;1081:50;;;1127:1;1124;1117:12;1081:50;1164:4;1156:6;1152:17;1140:29;;1224:3;1217:4;1207:6;1204:1;1200:14;1192:6;1188:27;1184:38;1181:47;1178:67;;;1241:1;1238;1231:12;1178:67;870:381;;;;;:::o;1256:477::-;1368:6;1376;1429:2;1417:9;1408:7;1404:23;1400:32;1397:52;;;1445:1;1442;1435:12;1397:52;1485:9;1472:23;-1:-1:-1;;;;;1510:6:73;1507:30;1504:50;;;1550:1;1547;1540:12;1504:50;1589:84;1665:7;1656:6;1645:9;1641:22;1589:84;:::i;:::-;1692:8;;1563:110;;-1:-1:-1;1256:477:73;-1:-1:-1;;;;1256:477:73:o;1738:173::-;1806:20;;-1:-1:-1;;;;;1855:31:73;;1845:42;;1835:70;;1901:1;1898;1891:12;1916:186;1975:6;2028:2;2016:9;2007:7;2003:23;1999:32;1996:52;;;2044:1;2041;2034:12;1996:52;2067:29;2086:9;2067:29;:::i;2107:288::-;2148:3;2186:5;2180:12;2213:6;2208:3;2201:19;2269:6;2262:4;2255:5;2251:16;2244:4;2239:3;2235:14;2229:47;2321:1;2314:4;2305:6;2300:3;2296:16;2292:27;2285:38;2384:4;2377:2;2373:7;2368:2;2360:6;2356:15;2352:29;2347:3;2343:39;2339:50;2332:57;;;2107:288;;;;:::o;2400:217::-;2547:2;2536:9;2529:21;2510:4;2567:44;2607:2;2596:9;2592:18;2584:6;2567:44;:::i;2846:226::-;2905:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:52;;;2974:1;2971;2964:12;2926:52;-1:-1:-1;3019:23:73;;2846:226;-1:-1:-1;2846:226:73:o;3285:300::-;3353:6;3361;3414:2;3402:9;3393:7;3389:23;3385:32;3382:52;;;3430:1;3427;3420:12;3382:52;3453:29;3472:9;3453:29;:::i;:::-;3443:39;3551:2;3536:18;;;;3523:32;;-1:-1:-1;;;3285:300:73:o;4077:347::-;4128:8;4138:6;4192:3;4185:4;4177:6;4173:17;4169:27;4159:55;;4210:1;4207;4200:12;4159:55;-1:-1:-1;4233:20:73;;-1:-1:-1;;;;;4265:30:73;;4262:50;;;4308:1;4305;4298:12;4262:50;4345:4;4337:6;4333:17;4321:29;;4397:3;4390:4;4381:6;4373;4369:19;4365:30;4362:39;4359:59;;;4414:1;4411;4404:12;4429:127;4490:10;4485:3;4481:20;4478:1;4471:31;4521:4;4518:1;4511:15;4545:4;4542:1;4535:15;4561:745;4603:5;4656:3;4649:4;4641:6;4637:17;4633:27;4623:55;;4674:1;4671;4664:12;4623:55;4714:6;4701:20;-1:-1:-1;;;;;4736:6:73;4733:30;4730:56;;;4766:18;;:::i;:::-;4835:2;4829:9;4927:2;4889:17;;-1:-1:-1;;4885:31:73;;;4918:2;4881:40;4877:54;4865:67;;-1:-1:-1;;;;;4947:34:73;;4983:22;;;4944:62;4941:88;;;5009:18;;:::i;:::-;5045:2;5038:22;5069;;;5110:19;;;5131:4;5106:30;5103:39;-1:-1:-1;5100:59:73;;;5155:1;5152;5145:12;5100:59;5219:6;5212:4;5204:6;5200:17;5193:4;5185:6;5181:17;5168:58;5274:1;5246:19;;;5267:4;5242:30;5235:41;;;;5250:6;4561:745;-1:-1:-1;;;4561:745:73:o;5311:563::-;5375:5;5423:4;5411:9;5406:3;5402:19;5398:30;5395:50;;;5441:1;5438;5431:12;5395:50;5494:2;5488:9;5536:4;5524:17;;-1:-1:-1;;;;;5556:34:73;;5592:22;;;5553:62;5550:88;;;5618:18;;:::i;:::-;5654:2;5647:22;5687:6;-1:-1:-1;5687:6:73;5716:23;;-1:-1:-1;;;;;5751:30:73;;5748:50;;;5794:1;5791;5784:12;5748:50;5822:45;5863:3;5854:6;5843:9;5839:22;5822:45;:::i;:::-;5814:6;5807:61;;;5311:563;;;;:::o;5879:1162::-;6032:6;6040;6048;6056;6064;6072;6080;6133:3;6121:9;6112:7;6108:23;6104:33;6101:53;;;6150:1;6147;6140:12;6101:53;6190:9;6177:23;-1:-1:-1;;;;;6215:6:73;6212:30;6209:50;;;6255:1;6252;6245:12;6209:50;6294:58;6344:7;6335:6;6324:9;6320:22;6294:58;:::i;:::-;6371:8;;-1:-1:-1;6268:84:73;-1:-1:-1;;6459:2:73;6444:18;;6431:32;-1:-1:-1;;;;;6475:32:73;;6472:52;;;6520:1;6517;6510:12;6472:52;6543:70;6605:7;6594:8;6583:9;6579:24;6543:70;:::i;:::-;6533:80;;;6632:38;6666:2;6655:9;6651:18;6632:38;:::i;:::-;6622:48;;6723:2;6712:9;6708:18;6695:32;-1:-1:-1;;;;;6742:8:73;6739:32;6736:52;;;6784:1;6781;6774:12;6736:52;6823:60;6875:7;6864:8;6853:9;6849:24;6823:60;:::i;:::-;5879:1162;;;;-1:-1:-1;5879:1162:73;;;;;;7006:3;6991:19;;;6978:33;;5879:1162;-1:-1:-1;;;;5879:1162:73:o;7469:127::-;7530:10;7525:3;7521:20;7518:1;7511:31;7561:4;7558:1;7551:15;7585:4;7582:1;7575:15;7601:243;7688:1;7681:5;7678:12;7668:143;;7733:10;7728:3;7724:20;7721:1;7714:31;7768:4;7765:1;7758:15;7796:4;7793:1;7786:15;7668:143;7820:18;;7601:243::o;7929:642::-;8043:1;8039;8034:3;8030:11;8026:19;8018:5;8012:12;8008:38;8003:3;7996:51;8108:10;8100:4;8093:5;8089:16;8083:23;8079:40;8072:4;8067:3;8063:14;8056:64;8181:10;8173:4;8166:5;8162:16;8156:23;8152:40;8145:4;8140:3;8136:14;8129:64;8239:4;8232:5;8228:16;8222:23;8254:61;8309:4;8304:3;8300:14;8286:12;8254:61;:::i;:::-;;8378:4;8371:5;8367:16;8361:23;8354:31;8347:39;8340:4;8335:3;8331:14;8324:63;8448:4;8440;8433:5;8429:16;8423:23;8419:34;8412:4;8407:3;8403:14;8396:58;8502:4;8495:5;8491:16;8485:23;8517:48;8559:4;8554:3;8550:14;8534;7916:4;7905:16;7893:29;;7849:75;8576:267;8774:3;8759:19;;8787:50;8763:9;8819:6;8787:50;:::i;8848:374::-;8925:6;8933;8941;8994:2;8982:9;8973:7;8969:23;8965:32;8962:52;;;9010:1;9007;9000:12;8962:52;9033:29;9052:9;9033:29;:::i;:::-;9023:39;;9081:38;9115:2;9104:9;9100:18;9081:38;:::i;:::-;8848:374;;9071:48;;-1:-1:-1;;;9188:2:73;9173:18;;;;9160:32;;8848:374::o;9227:277::-;9307:6;9360:2;9348:9;9339:7;9335:23;9331:32;9328:52;;;9376:1;9373;9366:12;9328:52;9415:9;9402:23;9454:1;9447:5;9444:12;9434:40;;9470:1;9467;9460:12;9509:702;9763:2;9775:21;;;9845:13;;9748:18;;;9867:22;;;9715:4;;9946:15;;;9920:2;9905:18;;;9715:4;9989:196;10003:6;10000:1;9997:13;9989:196;;;10052:51;10099:3;10090:6;10084:13;10052:51;:::i;:::-;10172:2;10160:15;;;;;10132:4;10123:14;;;;;10025:1;10018:9;9989:196;;;-1:-1:-1;10202:3:73;;9509:702;-1:-1:-1;;;;;9509:702:73:o;10216:118::-;10302:5;10295:13;10288:21;10281:5;10278:32;10268:60;;10324:1;10321;10314:12;10339:241;10395:6;10448:2;10436:9;10427:7;10423:23;10419:32;10416:52;;;10464:1;10461;10454:12;10416:52;10503:9;10490:23;10522:28;10544:5;10522:28;:::i;10585:669::-;10700:6;10708;10716;10769:2;10757:9;10748:7;10744:23;10740:32;10737:52;;;10785:1;10782;10775:12;10737:52;10825:9;10812:23;-1:-1:-1;;;;;10850:6:73;10847:30;10844:50;;;10890:1;10887;10880:12;10844:50;10929:58;10979:7;10970:6;10959:9;10955:22;10929:58;:::i;:::-;11006:8;;-1:-1:-1;10903:84:73;-1:-1:-1;;11094:2:73;11079:18;;11066:32;-1:-1:-1;;;;;11110:32:73;;11107:52;;;11155:1;11152;11145:12;11107:52;11178:70;11240:7;11229:8;11218:9;11214:24;11178:70;:::i;:::-;11168:80;;;10585:669;;;;;:::o;11259:121::-;11344:10;11337:5;11333:22;11326:5;11323:33;11313:61;;11370:1;11367;11360:12;11385:245;11443:6;11496:2;11484:9;11475:7;11471:23;11467:32;11464:52;;;11512:1;11509;11502:12;11464:52;11551:9;11538:23;11570:30;11594:5;11570:30;:::i;11635:446::-;11688:3;11726:5;11720:12;11753:6;11748:3;11741:19;11785:4;11780:3;11776:14;11769:21;;11824:4;11817:5;11813:16;11847:1;11857:199;11871:6;11868:1;11865:13;11857:199;;;11936:13;;-1:-1:-1;;;;;11932:39:73;11920:52;;12001:4;11992:14;;;;12029:17;;;;11968:1;11886:9;11857:199;;;-1:-1:-1;12072:3:73;;11635:446;-1:-1:-1;;;;11635:446:73:o;12086:757::-;12271:2;12260:9;12253:21;12234:4;12309:6;12303:13;12352:4;12347:2;12336:9;12332:18;12325:32;12380:63;12438:3;12427:9;12423:19;12409:12;12380:63;:::i;:::-;12366:77;;12497:2;12489:6;12485:15;12479:22;12474:2;12463:9;12459:18;12452:50;-1:-1:-1;;;;;12560:2:73;12552:6;12548:15;12542:22;12538:47;12533:2;12522:9;12518:18;12511:75;12651:10;12645:2;12637:6;12633:15;12627:22;12623:39;12617:3;12606:9;12602:19;12595:68;12729:10;12722:3;12714:6;12710:16;12704:23;12700:40;12694:3;12683:9;12679:19;12672:69;12808:4;12801:3;12793:6;12789:16;12783:23;12779:34;12772:4;12761:9;12757:20;12750:64;12831:6;12823:14;;;12086:757;;;;:::o;13376:272::-;13434:6;13487:2;13475:9;13466:7;13462:23;13458:32;13455:52;;;13503:1;13500;13493:12;13455:52;13542:9;13529:23;13592:6;13585:5;13581:18;13574:5;13571:29;13561:57;;13614:1;13611;13604:12;13842:409;13912:6;13920;13973:2;13961:9;13952:7;13948:23;13944:32;13941:52;;;13989:1;13986;13979:12;13941:52;14029:9;14016:23;-1:-1:-1;;;;;14054:6:73;14051:30;14048:50;;;14094:1;14091;14084:12;14048:50;14133:58;14183:7;14174:6;14163:9;14159:22;14133:58;:::i;14256:779::-;14416:4;14464:2;14453:9;14449:18;14494:2;14483:9;14476:21;14517:6;14552;14546:13;14583:6;14575;14568:22;14621:2;14610:9;14606:18;14599:25;;14683:2;14673:6;14670:1;14666:14;14655:9;14651:30;14647:39;14633:53;;14721:2;14713:6;14709:15;14742:1;14752:254;14766:6;14763:1;14760:13;14752:254;;;14859:2;14855:7;14843:9;14835:6;14831:22;14827:36;14822:3;14815:49;14887:39;14919:6;14910;14904:13;14887:39;:::i;:::-;14877:49;-1:-1:-1;14961:2:73;14984:12;;;;14949:15;;;;;14788:1;14781:9;14752:254;;;-1:-1:-1;15023:6:73;;14256:779;-1:-1:-1;;;;;;14256:779:73:o;15040:610::-;15126:6;15134;15187:2;15175:9;15166:7;15162:23;15158:32;15155:52;;;15203:1;15200;15193:12;15155:52;15243:9;15230:23;-1:-1:-1;;;;;15268:6:73;15265:30;15262:50;;;15308:1;15305;15298:12;15262:50;15331:22;;15384:4;15376:13;;15372:27;-1:-1:-1;15362:55:73;;15413:1;15410;15403:12;15362:55;15453:2;15440:16;-1:-1:-1;;;;;15471:6:73;15468:30;15465:50;;;15511:1;15508;15501:12;15465:50;15564:7;15559:2;15549:6;15546:1;15542:14;15538:2;15534:23;15530:32;15527:45;15524:65;;;15585:1;15582;15575:12;15524:65;15616:2;15608:11;;;;;15638:6;;-1:-1:-1;15040:610:73;-1:-1:-1;;;15040:610:73:o;16111:1236::-;16517:3;16512;16508:13;16500:6;16496:26;16485:9;16478:45;16559:3;16554:2;16543:9;16539:18;16532:31;16459:4;16586:45;16626:3;16615:9;16611:19;16603:6;16586:45;:::i;:::-;16679:9;16671:6;16667:22;16662:2;16651:9;16647:18;16640:50;16713:32;16738:6;16730;16713:32;:::i;:::-;16776:2;16761:18;;16754:34;;;-1:-1:-1;;;;;16825:32:73;;16819:3;16804:19;;16797:61;16845:3;16874:19;;16867:35;;;16939:22;;;16933:3;16918:19;;16911:51;17011:13;;17033:22;;;17083:2;17109:15;;;;-1:-1:-1;17071:15:73;;;;-1:-1:-1;17152:169:73;17166:6;17163:1;17160:13;17152:169;;;17227:13;;17215:26;;17270:2;17296:15;;;;17261:12;;;;17188:1;17181:9;17152:169;;;-1:-1:-1;17338:3:73;;16111:1236;-1:-1:-1;;;;;;;;;;;16111:1236:73:o;17576:261::-;17755:2;17744:9;17737:21;17718:4;17775:56;17827:2;17816:9;17812:18;17804:6;17775:56;:::i;17842:315::-;17907:6;17915;17968:2;17956:9;17947:7;17943:23;17939:32;17936:52;;;17984:1;17981;17974:12;17936:52;18007:29;18026:9;18007:29;:::i;:::-;17997:39;;18086:2;18075:9;18071:18;18058:32;18099:28;18121:5;18099:28;:::i;:::-;18146:5;18136:15;;;17842:315;;;;;:::o;18162:156::-;18228:20;;18288:4;18277:16;;18267:27;;18257:55;;18308:1;18305;18298:12;18323:182;18380:6;18433:2;18421:9;18412:7;18408:23;18404:32;18401:52;;;18449:1;18446;18439:12;18401:52;18472:27;18489:9;18472:27;:::i;18510:583::-;18605:6;18613;18621;18629;18682:3;18670:9;18661:7;18657:23;18653:33;18650:53;;;18699:1;18696;18689:12;18650:53;18739:9;18726:23;-1:-1:-1;;;;;18764:6:73;18761:30;18758:50;;;18804:1;18801;18794:12;18758:50;18827:49;18868:7;18859:6;18848:9;18844:22;18827:49;:::i;:::-;18817:59;;;18895:38;18929:2;18918:9;18914:18;18895:38;:::i;:::-;18885:48;;18952:38;18986:2;18975:9;18971:18;18952:38;:::i;:::-;18510:583;;;;-1:-1:-1;18942:48:73;;19059:2;19044:18;19031:32;;-1:-1:-1;;18510:583:73:o;19280:::-;19375:6;19383;19391;19399;19452:3;19440:9;19431:7;19427:23;19423:33;19420:53;;;19469:1;19466;19459:12;19420:53;19492:29;19511:9;19492:29;:::i;:::-;19482:39;;19540:38;19574:2;19563:9;19559:18;19540:38;:::i;:::-;19530:48;-1:-1:-1;19647:2:73;19632:18;;19619:32;;-1:-1:-1;19726:2:73;19711:18;;19698:32;-1:-1:-1;;;;;19742:30:73;;19739:50;;;19785:1;19782;19775:12;19739:50;19808:49;19849:7;19840:6;19829:9;19825:22;19808:49;:::i;:::-;19798:59;;;19280:583;;;;;;;:::o;20509:236::-;20600:6;20660:3;20648:9;20639:7;20635:23;20631:33;20676:2;20673:22;;;20691:1;20688;20681:12;20673:22;-1:-1:-1;20730:9:73;;20509:236;-1:-1:-1;;20509:236:73:o;20750:256::-;20816:6;20824;20877:2;20865:9;20856:7;20852:23;20848:32;20845:52;;;20893:1;20890;20883:12;20845:52;20916:29;20935:9;20916:29;:::i;:::-;20906:39;;20964:36;20996:2;20985:9;20981:18;20964:36;:::i;:::-;20954:46;;20750:256;;;;;:::o;21011:260::-;21079:6;21087;21140:2;21128:9;21119:7;21115:23;21111:32;21108:52;;;21156:1;21153;21146:12;21108:52;21179:29;21198:9;21179:29;:::i;:::-;21169:39;;21227:38;21261:2;21250:9;21246:18;21227:38;:::i;21469:731::-;-1:-1:-1;;;;;21803:32:73;;21785:51;;21884:10;21872:23;;;21867:2;21852:18;;21845:51;21932:23;;21927:2;21912:18;;21905:51;21772:3;21757:19;;21965:59;22020:2;22005:18;;21997:6;21965:59;:::i;:::-;22068:14;;22061:22;22055:3;22040:19;;22033:51;22133:4;22121:17;;;22115:3;22100:19;;22093:46;22176:17;;22170:3;22155:19;;;22148:46;21469:731;;-1:-1:-1;;;;21469:731:73:o;22205:127::-;22266:10;22261:3;22257:20;22254:1;22247:31;22297:4;22294:1;22287:15;22321:4;22318:1;22311:15;22337:127;22398:10;22393:3;22389:20;22386:1;22379:31;22429:4;22426:1;22419:15;22453:4;22450:1;22443:15;22469:128;22536:9;;;22557:11;;;22554:37;;;22571:18;;:::i;22602:389::-;22786:2;22771:18;;-1:-1:-1;;;;;22820:26:73;22839:6;22820:26;:::i;:::-;22816:52;22798:71;;22935:4;22923:17;;;22910:31;22957:20;;;;22950:35;;;;22602:389;:::o;22996:380::-;23075:1;23071:12;;;;23118;;;23139:61;;23193:4;23185:6;23181:17;23171:27;;23139:61;23246:2;23238:6;23235:14;23215:18;23212:38;23209:161;;23292:10;23287:3;23283:20;23280:1;23273:31;23327:4;23324:1;23317:15;23355:4;23352:1;23345:15;23209:161;;22996:380;;;:::o;23660:168::-;23733:9;;;23764;;23781:15;;;23775:22;;23761:37;23751:71;;23802:18;;:::i;23833:125::-;23898:9;;;23919:10;;;23916:36;;;23932:18;;:::i;23963:127::-;24024:10;24019:3;24015:20;24012:1;24005:31;24055:4;24052:1;24045:15;24079:4;24076:1;24069:15;24095:120;24135:1;24161;24151:35;;24166:18;;:::i;:::-;-1:-1:-1;24200:9:73;;24095:120::o;24220:689::-;24529:25;;;24585:2;24570:18;;24563:34;;;;-1:-1:-1;;;;;24633:32:73;;;24628:2;24613:18;;24606:60;24702:32;;;;24697:2;24682:18;;24675:60;24784:4;24772:17;;;24766:3;24751:19;;24744:46;-1:-1:-1;;;;;24827:31:73;24653:3;24806:19;;24799:60;24890:3;24875:19;;24868:35;24516:3;24501:19;;24220:689::o;24914:191::-;-1:-1:-1;;;;;24982:26:73;;;25010;;;24978:59;;25049:27;;25046:53;;;25079:18;;:::i;25599:167::-;25694:10;25667:18;;;25687;;;25663:43;;25718:19;;25715:45;;;25740:18;;:::i;25771:170::-;25868:10;25861:18;;;25841;;;25837:43;;25892:20;;25889:46;;;25915:18;;:::i;25946:221::-;26099:2;26084:18;;26111:50;26088:9;26143:6;26111:50;:::i;27654:135::-;27693:3;27714:17;;;27711:43;;27734:18;;:::i;:::-;-1:-1:-1;27781:1:73;27770:13;;27654:135::o;28081:175::-;28118:3;28162:4;28155:5;28151:16;28191:4;28182:7;28179:17;28176:43;;28199:18;;:::i;:::-;28248:1;28235:15;;28081:175;-1:-1:-1;;28081:175:73:o;28261:691::-;28445:19;;28473:21;;28563:2;28552:14;;28539:28;28593:1;28583:12;;28576:29;28674:2;28663:14;;28650:28;28704:1;28694:12;;28687:29;28753:1;28743:12;;28803:2;28792:14;;28779:28;28816:32;28779:28;28816:32;:::i;:::-;28883:17;;-1:-1:-1;;28879:39:73;28933:10;28920:24;;;;28876:69;28857:89;;-1:-1:-1;;28261:691:73:o;29368:204::-;29406:3;-1:-1:-1;;;;;29443:5:73;29439:30;-1:-1:-1;;;;;29484:7:73;29481:31;29478:57;;29515:18;;:::i;29782:212::-;29824:3;29862:5;29856:12;29906:6;29899:4;29892:5;29888:16;29883:3;29877:36;29968:1;29932:16;;29957:13;;;-1:-1:-1;29932:16:73;;29782:212;-1:-1:-1;29782:212:73:o;29999:1099::-;30500:66;30495:3;30488:79;-1:-1:-1;;;30592:2:73;30587:3;30583:12;30576:30;30470:3;30625:39;30660:2;30655:3;30651:12;30643:6;30625:39;:::i;:::-;30684:66;30673:78;;30780:34;30775:2;30767:11;;30760:55;30844:34;30839:2;30831:11;;30824:55;-1:-1:-1;;;30903:2:73;30895:11;;30888:76;30986:39;31020:3;31012:12;;31004:6;30986:39;:::i;:::-;-1:-1:-1;;;31034:29:73;;31090:1;31079:13;;29999:1099;-1:-1:-1;;;;;29999:1099:73:o;31103:345::-;31355:31;31350:3;31343:44;31325:3;31403:39;31438:2;31433:3;31429:12;31421:6;31403:39;:::i;32476:789::-;32705:13;;-1:-1:-1;;;;;32745:35:73;;32727:54;;32844:10;32768:3;32823:19;;;32819:36;;32812:4;32797:20;;32790:66;32891:3;32887:19;;;32883:36;32936:4;32921:20;;7423:35;32675:3;32660:19;;;32951:85;33030:4;33019:9;33015:20;33008:4;32996:9;32991:3;32987:19;32983:30;32951:85;:::i;:::-;33045:69;33108:4;33097:9;33093:20;33086:4;33074:9;33069:3;33065:19;33061:30;652:13;645:21;633:34;;582:91;33045:69;33148:3;33144:19;;;33165:4;33140:30;33187:3;33172:19;;7893:29;33222:3;33218:19;;;33254:3;33239:19;;7893:29;33201:58;7849:75;33270:537;33509:2;33498:9;33491:21;33472:4;33535:44;33575:2;33564:9;33560:18;33552:6;33535:44;:::i;:::-;33627:9;33619:6;33615:22;33610:2;33599:9;33595:18;33588:50;33661:32;33686:6;33678;33661:32;:::i;:::-;33647:46;;33741:9;33733:6;33729:22;33724:2;33713:9;33709:18;33702:50;33769:32;33794:6;33786;33769:32;:::i;33812:190::-;33941:3;33966:30;33992:3;33984:6;33966:30;:::i;34007:245::-;34074:6;34127:2;34115:9;34106:7;34102:23;34098:32;34095:52;;;34143:1;34140;34133:12;34095:52;34175:9;34169:16;34194:28;34216:5;34194:28;:::i;34257:358::-;34458:2;34447:9;34440:21;34421:4;34496:6;34490:13;34539:2;34534;34523:9;34519:18;34512:30;34559:50;34605:2;34594:9;34590:18;34576:12;34559:50;:::i;34745:181::-;34826:1;34836:84;34850:9;34847:1;34844:16;34836:84;;;34916:1;34897:17;;;34890:28;34875:1;34868:9;34836:84;;34931:508;35032:2;35027:3;35024:11;35021:412;;;35069:10;35064:3;35061:19;35058:365;;;35121:5;35118:1;35111:16;35169:4;35166:1;35156:18;35234:2;35222:10;35218:19;35215:1;35211:27;35273:4;35261:10;35258:20;35255:45;;;-1:-1:-1;35297:1:73;35255:45;35317:92;35395:12;35389:2;35384:3;35380:12;35377:1;35373:20;35369:39;35354:12;35348:4;35344:23;35317:92;:::i;35615:1194::-;-1:-1:-1;;;;;35732:3:73;35729:27;35726:53;;;35759:18;;:::i;:::-;35788:93;35877:3;35837:38;35869:4;35863:11;35837:38;:::i;:::-;35831:4;35788:93;:::i;:::-;35907:1;35932:2;35927:3;35924:11;35949:1;35944:607;;;;36595:1;36612:3;36609:93;;;-1:-1:-1;36668:19:73;;;36655:33;36609:93;-1:-1:-1;;35572:1:73;35568:11;;;35564:24;35560:29;35550:40;35596:1;35592:11;;;35547:57;36715:78;;35917:886;;35944:607;34692:1;34685:14;;;34729:4;34716:18;;-1:-1:-1;;35980:17:73;;;36094:229;36108:7;36105:1;36102:14;36094:229;;;36197:19;;;36184:33;36169:49;;36304:4;36289:20;;;;36257:1;36245:14;;;;36124:12;36094:229;;;36098:3;36351;36342:7;36339:16;36336:159;;;36475:1;36471:6;36465:3;36459;36456:1;36452:11;36448:21;36444:34;36440:39;36427:9;36422:3;36418:19;36405:33;36401:79;36393:6;36386:95;36336:159;;;36538:1;36532:3;36529:1;36525:11;36521:19;36515:4;36508:33;35917:886;;35615:1194;;;:::o;36814:148::-;36902:4;36881:12;;;36895;;;36877:31;;36920:13;;36917:39;;;36936:18;;:::i;36967:157::-;36997:1;37031:4;37028:1;37024:12;37055:3;37045:37;;37062:18;;:::i;:::-;37114:3;37107:4;37104:1;37100:12;37096:22;37091:27;;;36967:157;;;;:::o;37129:151::-;37219:4;37212:12;;;37198;;;37194:31;;37237:14;;37234:40;;;37254:18;;:::i;37285:188::-;37323:3;37367:10;37360:5;37356:22;37402:10;37393:7;37390:23;37387:49;;37416:18;;:::i;37478:958::-;37628:3;37622:10;-1:-1:-1;;;;;37647:6:73;37644:30;37641:56;;;37677:18;;:::i;:::-;-1:-1:-1;;;37712:6:73;37709:32;37706:58;;;37744:18;;:::i;:::-;37793:3;37787:10;37818:6;37813:3;37806:19;37848:6;37840;37837:18;37834:204;;;37888:3;37885:1;37878:14;37948:6;37941:4;37938:1;37928:18;37924:31;37968:60;38020:6;38012;38008:19;37995:11;37968:60;:::i;:::-;;37834:204;;38070:4;38065:3;38061:14;38094:3;38091:1;38084:14;38132:4;38129:1;38119:18;38155:1;38165:265;38179:6;38176:1;38173:13;38165:265;;;38241:13;;-1:-1:-1;;;;;38307:31:73;38398:12;;;38391:29;38373:4;38361:17;;;;38335:1;38194:9;38165:265;;38728:484;-1:-1:-1;;;;;38959:32:73;;;38941:51;;39028:32;;39023:2;39008:18;;39001:60;39092:2;39077:18;;39070:34;;;39140:3;39135:2;39120:18;;39113:31;;;-1:-1:-1;;39161:45:73;;39186:19;;39178:6;39161:45;:::i;39217:249::-;39286:6;39339:2;39327:9;39318:7;39314:23;39310:32;39307:52;;;39355:1;39352;39345:12;39307:52;39387:9;39381:16;39406:30;39430:5;39406:30;:::i;39471:136::-;39510:3;39538:5;39528:39;;39547:18;;:::i;:::-;-1:-1:-1;;;39583:18:73;;39471:136::o;39612:342::-;39864:28;39859:3;39852:41;39834:3;39909:39;39944:2;39939:3;39935:12;39927:6;39909:39;:::i;39959:127::-;40020:10;40015:3;40011:20;40008:1;40001:31;40051:4;40048:1;40041:15;40075:4;40072:1;40065:15;40091:418;-1:-1:-1;;;;;;40304:31:73;;40292:44;;40274:3;40358:38;40393:1;40384:11;;40376:6;40358:38;:::i;:::-;40427:2;40423:15;;;;-1:-1:-1;;;;;;40419:53:73;40405:68;;-1:-1:-1;;40500:2:73;40489:14;;40091:418;-1:-1:-1;;40091:418:73:o","linkReferences":{},"immutableReferences":{"49312":[{"start":17406,"length":32}],"49314":[{"start":17441,"length":32}],"49316":[{"start":17521,"length":32}],"49318":[{"start":17559,"length":32}],"49320":[{"start":17373,"length":32}]}},"methodIdentifiers":{"SYSTEM_ADDRESS()":"3434735f","activate()":"0f15f4c0","allocateIssuance()":"355811a7","applyIncentives((address,uint256)[])":"0a36cdef","applySlashes((address,uint256)[])":"02ae337b","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","beginExit()":"2228dfa0","burn(address)":"89afcb44","cancelStakeVersionChange(address)":"0f4346fa","claimRefund()":"b5545a3c","claimStakeRewards(address)":"2b9f4985","claimableRefunds(address)":"43401a00","concludeEpoch(address[])":"7b55a300","delegateStake(bytes,(bytes),address,bytes,uint256)":"127ce8e8","delegationDigest(bytes,address,address,uint256)":"ad6cfb86","eip712Domain()":"84b0196e","epochInfo(uint256)":"3894228e","futureEpochInfo(uint256)":"59ca93b6","getApproved(uint256)":"081812fc","getBalanceBreakdown(address)":"15b5709a","getBlsPubkey(address)":"059b916c","getCommitteeBlsPubkeys(uint32)":"6ae9942c","getCommitteeValidators(uint32)":"a0201be5","getCurrentEpoch()":"b97dd9e2","getCurrentEpochInfo()":"babc394f","getCurrentStakeConfig()":"7d06fdf8","getCurrentStakeVersion()":"67398331","getEligibleValidatorCount()":"23a40430","getEpochInfo(uint32)":"374ed18c","getNextCommitteeSize()":"eb8535c2","getPendingVersionChanges()":"a7c5e701","getRewards(address)":"79ee54f7","getValidator(address)":"1904bb2e","getValidators(uint8)":"8cc05eda","getValidatorsInfo(uint8)":"2870259d","increaseNonce()":"c53a0292","isApprovedForAll(address,address)":"e985e9c5","isDelegated(address)":"3e28391d","isRetired(address)":"6d3c6275","isValidator(bytes)":"6a926591","issuance()":"863623bb","issuanceWithdrawal(uint256)":"0752e017","migrateValidatorSets()":"aaffd270","mint(address)":"6a627842","name()":"06fdde03","owner()":"8da5cb5b","ownerOf(uint256)":"6352211e","pause()":"8456cb59","paused()":"5c975abb","renounceOwnership()":"715018a6","requestStakeVersionChange(address,uint8)":"e5a22827","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","setNextCommitteeSize(uint16)":"62fcde4b","setTopUpAuthorityRequired(bool)":"2a8e33d7","setValidatorRegion(address,uint8)":"f0624768","stake(bytes,(bytes))":"2fb0d025","stakeConfig(uint8)":"a71954ec","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenByIndex(uint256)":"4f6ccce7","tokenOfOwnerByIndex(address,uint256)":"2f745c59","tokenURI(uint256)":"c87b56dd","topUpAuthorityRequired()":"58e88dbb","topUpSlashedStake(address)":"43201d30","totalSupply()":"18160ddd","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b","undistributedIssuance()":"008d6acd","unpause()":"3f4ba83a","unstake(address,bool)":"f66a25a4","upgradeStakeVersion((uint256,uint256,uint256,uint32))":"c05df7ac","validators(address)":"fa52c7d8","versionChangeRequests(address)":"bd3e7594"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.35+commit.47b9dedd\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"genesisConfig_\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"initialValidators_\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"blsPubkeys_\",\"type\":\"bytes[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession[]\",\"name\":\"proofsOfPossession\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"AlreadyDefined\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"BlsPubkeyNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"CommitteeRequirement\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"DelegationExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateBLSPubkey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC721EnumerableForbiddenBatchMint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"ERC721OutOfBoundsIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GenesisArityMismatch\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"IneligibleUnstake\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"withdrawAmount\",\"type\":\"uint256\"}],\"name\":\"InsufficientRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBLSPubkey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minCommitteeSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"providedCommitteeSize\",\"type\":\"uint256\"}],\"name\":\"InvalidCommitteeSize\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"name\":\"InvalidDeficitAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"name\":\"InvalidDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"InvalidEpoch\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proof\",\"type\":\"tuple\"}],\"name\":\"InvalidProofOfPossession\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"currentVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeVersion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSupply\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"InvalidTokenId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValidatorAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IssuanceTransferFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"LowLevelCallFailure\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoClaimableRefund\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoPendingVersionChange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"NotRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotTransferable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"NotValidator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invalidCaller\",\"type\":\"address\"}],\"name\":\"OnlySystemCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Reentrancy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RequiresConsensusNFT\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"name\":\"StakeNotSlashed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TopUpAuthorityRequired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"DelegationNonceIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"epoch\",\"type\":\"tuple\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"oldSize\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newSize\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numActiveValidators\",\"type\":\"uint256\"}],\"name\":\"NextCommitteeSizeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RefundClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RefundQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"}],\"name\":\"RewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"name\":\"StakeVersionAuthored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"StakeVersionChangeCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"requestEpoch\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"escrow\",\"type\":\"uint256\"}],\"name\":\"StakeVersionChangeRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"required\",\"type\":\"bool\"}],\"name\":\"TopUpAuthorityRequirementUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorExited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorPendingActivation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorPendingExit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"name\":\"ValidatorRegionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorRetired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eligibleValidatorCount\",\"type\":\"uint256\"}],\"name\":\"ValidatorSetsMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Slash\",\"name\":\"slash\",\"type\":\"tuple\"}],\"name\":\"ValidatorSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ValidatorStakeToppedUp\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"oldVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldStakeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newStakeAmount\",\"type\":\"uint256\"}],\"name\":\"ValidatorStakeVersionUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorStaked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SYSTEM_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allocateIssuance\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"consensusHeaderCount\",\"type\":\"uint256\"}],\"internalType\":\"struct RewardInfo[]\",\"name\":\"rewardInfos\",\"type\":\"tuple[]\"}],\"name\":\"applyIncentives\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Slash[]\",\"name\":\"slashes\",\"type\":\"tuple[]\"}],\"name\":\"applySlashes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"beginExit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"cancelStakeVersionChange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRefund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"claimStakeRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"claimableRefunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newCommittee\",\"type\":\"address[]\"}],\"name\":\"concludeEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proofOfPossession\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"validatorEIP712Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"delegateStake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"delegationDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"epochInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"futureEpochInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getBalanceBreakdown\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getBlsPubkey\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getCommitteeBlsPubkeys\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getCommitteeValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpochInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentStakeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentStakeVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEligibleValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getEpochInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextCommitteeSize\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPendingVersionChanges\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"getValidatorsInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"increaseNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"isDelegated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"isRetired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"issuance\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issuanceWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrateValidatorSets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"}],\"name\":\"requestStakeVersionChange\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newSize\",\"type\":\"uint16\"}],\"name\":\"setNextCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"required\",\"type\":\"bool\"}],\"name\":\"setTopUpAuthorityRequired\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"name\":\"setValidatorRegion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proofOfPossession\",\"type\":\"tuple\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"stakeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"topUpAuthorityRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"topUpSlashedStake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"undistributedIssuance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"acceptRewardShortfall\",\"type\":\"bool\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"upgradeStakeVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"versionChangeRequests\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"requestEpoch\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"funder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"escrow\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Telcoin AssociationHuwonk\",\"details\":\"This contract should be deployed to a predefined system address for use with system calls\",\"errors\":{\"AlreadyDefined(address)\":[{\"params\":{\"validatorAddress\":\"The address that was already defined\"}}],\"BlsPubkeyNotFound(address)\":[{\"details\":\"Covers both the zero-address case and addresses that have never staked (or have been burned/retired and had their pubkey state cleared)\",\"params\":{\"validatorAddress\":\"The address whose BLS pubkey lookup failed\"}}],\"CommitteeRequirement(address)\":[{\"params\":{\"validatorAddress\":\"The address at which the sort invariant was violated\"}}],\"DelegationExpired(uint256)\":[{\"params\":{\"deadline\":\"The unix timestamp past which the signature is no longer valid\"}}],\"ERC721EnumerableForbiddenBatchMint()\":[{\"details\":\"Batch mint is not allowed.\"}],\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721OutOfBoundsIndex(address,uint256)\":[{\"details\":\"An `owner`'s token query was out of bounds for `index`. NOTE: The owner being `address(0)` indicates a global out of bounds index.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"IneligibleUnstake((address,uint32,uint32,uint8,bool,uint8,uint8))\":[{\"details\":\"Validators may unstake only if Staked (pre-activation) or Exited with at least one full epoch elapsed\",\"params\":{\"validator\":\"The full ValidatorInfo of the ineligible validator\"}}],\"InsufficientRewards(uint256)\":[{\"params\":{\"withdrawAmount\":\"The reward amount that was insufficient\"}}],\"InvalidCommitteeSize(uint256,uint256)\":[{\"params\":{\"minCommitteeSize\":\"The minimum acceptable committee size\",\"providedCommitteeSize\":\"The committee size that was rejected\"}}],\"InvalidDeficitAmount(address,uint256,uint8)\":[{\"params\":{\"stakeVersion\":\"The validator's stake version defining the required stake amount\",\"validatorAddress\":\"The validator being topped up\",\"value\":\"The `msg.value` that was provided\"}}],\"InvalidDuration(uint32)\":[{\"params\":{\"duration\":\"The invalid duration value\"}}],\"InvalidEpoch(uint32)\":[{\"params\":{\"epoch\":\"The epoch number that was rejected\"}}],\"InvalidProofOfPossession((bytes))\":[{\"params\":{\"proof\":\"The proof of possession that failed verification\"}}],\"InvalidStakeAmount(uint256)\":[{\"params\":{\"stakeAmount\":\"The invalid stake value that was provided\"}}],\"InvalidStakeVersion(uint8,uint8)\":[{\"details\":\"Target version must be strictly greater than current and not exceed global `stakeVersion`\",\"params\":{\"currentVersion\":\"The validator's current stake version\",\"targetVersion\":\"The requested target version that was rejected\"}}],\"InvalidStatus(uint8)\":[{\"params\":{\"status\":\"The validator's actual status that caused the revert\"}}],\"InvalidTokenId(uint256)\":[{\"params\":{\"tokenId\":\"The invalid token ID\"}}],\"NotRecipient(address)\":[{\"params\":{\"recipient\":\"The expected reward recipient (delegator if delegated, else the validator)\"}}],\"NotValidator(address)\":[{\"params\":{\"validatorAddress\":\"The validator whose signature was invalid\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"Reentrancy()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"StakeNotSlashed(address,uint256,uint8)\":[{\"params\":{\"balance\":\"The validator's current outstanding balance\",\"stakeVersion\":\"The validator's stake version defining the required stake amount\",\"validatorAddress\":\"The validator that is not slashed\"}}],\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"DelegationNonceIncreased(address,uint64)\":{\"params\":{\"nonce\":\"The new delegation nonce\",\"validatorAddress\":\"The validator whose delegation nonce advanced\"}},\"NewEpoch((address[],uint256,uint64,uint32,uint32,uint8))\":{\"params\":{\"epoch\":\"The new epoch's full configuration including committee and block height\"}},\"NextCommitteeSizeUpdated(uint16,uint16,uint256)\":{\"params\":{\"newSize\":\"The updated nextCommitteeSize value\",\"numActiveValidators\":\"The current count of committee-eligible validators\",\"oldSize\":\"The previous nextCommitteeSize value\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RefundClaimed(address,uint256)\":{\"params\":{\"amount\":\"The amount transferred\",\"recipient\":\"The address that received its credit\"}},\"RefundQueued(address,uint256)\":{\"params\":{\"amount\":\"The amount added to the recipient's credit\",\"recipient\":\"The address holding the claimable credit\"}},\"RewardsClaimed(address,uint256)\":{\"params\":{\"claimant\":\"The address that received the funds (validator or its delegator)\",\"rewards\":\"The amount of TEL claimed\"}},\"StakeVersionAuthored(uint8,uint256,uint256,uint256,uint32)\":{\"params\":{\"epochDuration\":\"The version's epoch duration\",\"epochIssuance\":\"The version's total TEL distributed as rewards per epoch\",\"minWithdrawAmount\":\"The version's minimum reward threshold for claims\",\"stakeAmount\":\"The version's required native TEL stake per validator\",\"version\":\"The newly authored version index (the new global `stakeVersion`)\"}},\"StakeVersionChangeCanceled(address)\":{\"params\":{\"validatorAddress\":\"The validator whose pending change was cancelled\"}},\"StakeVersionChangeRequested(address,uint8,uint32,uint256)\":{\"params\":{\"escrow\":\"The exact stake deficit escrowed for an increase; zero otherwise\",\"requestEpoch\":\"The epoch in which the request was recorded\",\"targetVersion\":\"The version to adopt at the boundary flip\",\"validatorAddress\":\"The validator whose version change was requested\"}},\"TopUpAuthorityRequirementUpdated(bool)\":{\"params\":{\"required\":\"The new value of the `topUpAuthorityRequired` flag\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"ValidatorActivated((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The newly activated validator's info\"}},\"ValidatorExited((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The exited validator's info\"}},\"ValidatorPendingActivation((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"details\":\"Activation completes automatically at the start of the next epoch\",\"params\":{\"validator\":\"The validator entering PendingActivation status\"}},\"ValidatorPendingExit((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"details\":\"Exit completes when the validator is no longer required in any future committee\",\"params\":{\"validator\":\"The validator entering PendingExit status\"}},\"ValidatorRegionUpdated(address,uint8)\":{\"params\":{\"region\":\"The new geographic region identifier\",\"validatorAddress\":\"The validator whose region was updated\"}},\"ValidatorRetired((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The retired validator's info\"}},\"ValidatorSetsMigrated(uint256)\":{\"params\":{\"eligibleValidatorCount\":\"The committee-eligible count after the back-fill\"}},\"ValidatorSlashed((address,uint256))\":{\"details\":\"If the slash reduces the balance to zero, the validator is forcibly ejected and retired\",\"params\":{\"slash\":\"The slash details including validator address and penalty amount\"}},\"ValidatorStakeToppedUp(address,uint256)\":{\"params\":{\"amount\":\"The deficit that was provided and consolidated on the Issuance contract\",\"validatorAddress\":\"The validator whose stake was topped up\"}},\"ValidatorStakeVersionUpgraded(address,uint8,uint8,uint256,uint256)\":{\"params\":{\"newStakeAmount\":\"The stakeAmount associated with the new version\",\"newVersion\":\"The validator's new stake version\",\"oldStakeAmount\":\"The stakeAmount associated with the old version\",\"oldVersion\":\"The validator's previous stake version\",\"validatorAddress\":\"The validator whose stake version was upgraded\"}},\"ValidatorStaked((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The newly staked validator's info\"}}},\"kind\":\"dev\",\"methods\":{\"activate()\":{\"details\":\"Self-activation function for validators, gaining `PendingActivation` status and setting next epoch as activation epoch to ensure rewards eligibility only after completing a full epoch\"},\"allocateIssuance()\":{\"details\":\"Permissioned function to allocate TEL for epoch issuance, ie consensus block rewards\"},\"applyIncentives((address,uint256)[])\":{\"details\":\"First boundary system call in the closing block: runs before `applySlashes` so weights reflect pre-slash collateral, and before `concludeEpoch` so weights reflect the versions active during the closing epoch. Entries with sentinel addresses (token ids 0 and type(uint160).max) or retired validators are skipped rather than reverting, so a malformed entry cannot stall the boundary. Issuance distribution is not yet enabled during the pilot; the protocol passes an empty array\"},\"applySlashes((address,uint256)[])\":{\"details\":\"Second boundary system call in the closing block: MUST run before `concludeEpoch` so slashes land on the full old-version collateral ahead of the version-queue settlement, and so the protocol's post-slash committee reads see any ejections. Entries with sentinel addresses or retired validators are skipped rather than reverting. Slashing is not yet enabled during the pilot; the protocol passes an empty array\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"beginExit()\":{\"details\":\"Issues an exit request for a validator to be retired from the `Active` validator set\"},\"burn(address)\":{\"details\":\"In the case of malicious or erroneous node operator behavior, governance can use this function to burn a validator's `ConsensusNFT` and immediately eject from consensus committees if applicableIntended for sparing use; only reverts if burning results in empty committee\",\"params\":{\"from\":\"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`\"}},\"cancelStakeVersionChange(address)\":{\"details\":\"Withdraws a pending stake version change without settling it, returning any escrow to its funder\",\"params\":{\"validatorAddress\":\"The validator whose pending change should be cancelled\"}},\"claimRefund()\":{\"details\":\"Transfers the caller's accumulated refund credit\"},\"claimStakeRewards(address)\":{\"details\":\"Used by rewardees to claim staking rewards\"},\"concludeEpoch(address[])\":{\"details\":\"The protocol sequences the closing block as `applyIncentives`, then `applySlashes`, then this call. That ordering is a security invariant: it lets the protocol assemble `newCommittee` and read `nextCommitteeSize` after slash-to-zero ejections have landed (so this call's committee checks cannot revert against a stale pre-slash view, and an ejected validator is never seated in a future committee), and it makes the version-queue settlement here read post-slash balances. Settlement refunds accrue as `claimRefund` credits rather than transfers, so this call performs no external calls beyond the trusted Issuance consolidation and its cost is storage-bounded regardless of recipient behavior.\",\"params\":{\"newCommittee\":\"The future validator committee for `$.currentEpoch + 3`\"}},\"constructor\":{\"details\":\"Stake for `initialValidators_` is allocated directly to the ConsensusRegistry balance and decremented directly from the TEL precompile within the protocol on the rust sideOnly governance delegation is enabled at genesis\",\"params\":{\"initialValidators_\":\"The initial validator set running Telcoin Network; these validators will comprise the voter committee for the first three epochs, ie `epochInfo[0:2]`\"}},\"delegateStake(bytes,(bytes),address,bytes,uint256)\":{\"details\":\"Accepts delegated stake from a non-validator caller authorized by a validator's EIP712 signature\",\"params\":{\"deadline\":\"Unix timestamp past which `validatorSig` is rejected (ignored for governance calls)\"}},\"delegationDigest(bytes,address,address,uint256)\":{\"params\":{\"deadline\":\"Unix timestamp past which the produced signature must be rejected\"},\"returns\":{\"_0\":\"_ EIP-712 typed struct hash used to enable delegated proof of stake\"}},\"eip712Domain()\":{\"details\":\"See: https://eips.ethereum.org/EIPS/eip-5267\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"getBalanceBreakdown(address)\":{\"details\":\"Returns staking information for the given address\"},\"getBlsPubkey(address)\":{\"details\":\"Fetches the BLS pubkey for a given validator address\"},\"getCommitteeBlsPubkeys(uint32)\":{\"details\":\"Fetches the BLS pubkeys for the committee of a given epoch\"},\"getCommitteeValidators(uint32)\":{\"details\":\"Fetches the committee for a given epoch\"},\"getCurrentEpoch()\":{\"details\":\"Returns the current epoch\"},\"getCurrentEpochInfo()\":{\"details\":\"Returns the current epoch's committee and block height\"},\"getCurrentStakeConfig()\":{\"details\":\"Returns the latest authored stake configuration, which becomes active at the next epoch start\"},\"getCurrentStakeVersion()\":{\"details\":\"Returns the stake version active for the current epoch, ie the version stamped into the epoch's info at its start\"},\"getEpochInfo(uint32)\":{\"details\":\"Returns information about the provided epoch. Only four latest & two future epochs are stored\"},\"getRewards(address)\":{\"details\":\"Fetches the claimable rewards accrued for a given validator address\",\"returns\":{\"_0\":\"_ The validator's claimable rewards, not including the validator's stake\"}},\"getValidator(address)\":{\"details\":\"Fetches the `ValidatorInfo` for a given `validatorAddress == ConsensusNFT tokenId`\"},\"getValidators(uint8)\":{\"details\":\"Returns the addresses of validators in exactly the provided status's set, in the set's current order. Reverts on `Undefined` and `Any` (neither maintains a set).\"},\"getValidatorsInfo(uint8)\":{\"details\":\"Like `getValidators`, but returns the full `ValidatorInfo` for each validator in the set.\"},\"increaseNonce()\":{\"details\":\"Caller must hold a ConsensusNFT; lets a validator revoke a delegation it authorized but no longer wants honored\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"isDelegated(address)\":{\"details\":\"Returns whether a validator's stake was delegated (ie has a delegator)\"},\"isRetired(address)\":{\"details\":\"Returns whether a validator is exited && unstaked, ie \\\"retired\\\"\"},\"isValidator(bytes)\":{\"details\":\"Check if a BLS public key corresponds to an active validator\",\"params\":{\"blsPubkey\":\"The compressed 96-byte BLS public key to check\"},\"returns\":{\"_0\":\"bool True if the validator exists and is not retired, false otherwise\"}},\"issuanceWithdrawal(uint256)\":{\"details\":\"Permissioned function to withdraw TEL from the Issuance contract to the caller\",\"params\":{\"amount\":\"The amount of TEL to withdraw from the Issuance contract\"}},\"migrateValidatorSets()\":{\"details\":\"The storage layout is a clean append (the sets were appended after the pre-existing variables), so `validators[*]` and the ConsensusNFTs survive the code swap untouched; only `validatorSets` / `eligibleValidatorCount` start empty and must be rebuilt before the new read paths (`getValidators` / `getValidatorsInfo` / `concludeEpoch`) work. Walks the ConsensusNFT enumeration and re-derives each set from `currentStatus` (the preserved source of truth), mirroring `_setStatus`: retired, `Undefined`, and `Any` validators carry no set and are skipped. Idempotent - set adds dedupe and the count is recomputed from scratch - so a redundant call (or a call against a freshly seeded genesis) is a no-op. System-gated so the protocol invokes it once during the fork that swaps in this implementation.\"},\"mint(address)\":{\"details\":\"The StakeManager's ERC721 ledger serves a permissioning role over validators, requiring Telcoin governance to approve each node operator and manually issue them a `ConsensusNFT`\",\"params\":{\"to\":\"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`\"}},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"pause()\":{\"details\":\"Emergency function to pause validator and stake management\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"requestStakeVersionChange(address,uint8)\":{\"details\":\"Requests a stake version change for a validator; callable by the validator or its delegator. Only callable for validators with status Staked, PendingActivation, or Active.\",\"params\":{\"targetVersion\":\"The version to adopt (must be strictly greater than current and not exceed the latest authored version)\",\"validatorAddress\":\"The validator whose stake version should change\"}},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setNextCommitteeSize(uint16)\":{\"details\":\"This is managed off-chain and read by the protocol to shuffle n-validators for `concludeEpoch` call.\"},\"setTopUpAuthorityRequired(bool)\":{\"details\":\"Only callable by governance (owner)\"},\"setValidatorRegion(address,uint8)\":{\"params\":{\"region\":\"The GSMA region identifier (uint8; 0=unspecified, 1-8=GSMA regions)\",\"validatorAddress\":\"The address of the validator to update\"}},\"stake(bytes,(bytes))\":{\"details\":\"Accepts the native TEL stake amount from the calling validator, enabling later self-activation\"},\"stakeConfig(uint8)\":{\"details\":\"Returns the queried stake configuration\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenByIndex(uint256)\":{\"details\":\"See {IERC721Enumerable-tokenByIndex}.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"See {IERC721Enumerable-tokenOfOwnerByIndex}.\"},\"topUpSlashedStake(address)\":{\"details\":\"`msg.value` must equal the exact deficit; it is consolidated on the Issuance contract since this contract retains the full stake-backed native TEL when slashes are appliedCallable by governance at any time; by the validator or its delegator only while `topUpAuthorityRequired` is false\",\"params\":{\"validatorAddress\":\"The slashed validator to top up; must be `Staked`, `PendingActivation`, or `Active`\"}},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unpause()\":{\"details\":\"Emergency function to unpause validator and stake management\"},\"unstake(address,bool)\":{\"details\":\"Returns previously staked funds in addition to accrued rewards, if any, to the staker\",\"params\":{\"acceptRewardShortfall\":\"When true, caps the rewards payout at the Issuance contract's available balance and permanently forfeits only the shortfall, so an underfunded reward pool can never block a stake withdrawal; identical to a normal unstake whenever Issuance can cover the rewards\"}},\"upgradeStakeVersion((uint256,uint256,uint256,uint32))\":{\"details\":\"Permissioned function to upgrade stake, withdrawal, and consensus block reward configurations\"}},\"stateVariables\":{\"EIP7702_DESIGNATOR_LENGTH\":{\"details\":\"Byte length of an EIP-7702 delegation designator: the 3-byte prefix plus an address\"},\"PENDING_EPOCH\":{\"details\":\"Signals a validator's pending status until activation/exit to correctly apply incentives\"},\"POP_INTENT_PREFIX\":{\"details\":\"The serialized telcoin proof-of-possession intent prefix (`scope=0, version=0, app=0`), which domain-separates PoP messages from other BLS signatures. Mirrors `Intent::telcoin(IntentScope::ProofOfPossession)` in tn-types; the off-chain `pop_message_layout_is_onchain_constructible` test pins it to `0x000000`.\"},\"REFUND_GAS_LIMIT\":{\"details\":\"Gas forwarded with settlement pushes initiated inside `concludeEpoch`. Covers an EOA receive or a multisig fallback-handler dispatch while bounding what a hostile recipient can consume inside the system call; failed pushes fall back to a `claimRefund` credit.\"},\"STAKE_DECREASE_DELAY_EPOCHS\":{\"details\":\"Boundaries a stake-decreasing version change must age before settling. The closing boundary's slashes always land before settlement regardless, so this covers only slashes whose detection lags the offense, by up to this many epochs. Must track the slashing pipeline's worst-case detection latency when programmatic slashing ships.\"},\"_COMMITTEE_TSET\":{\"details\":\"Namespace for the per-epoch transient committee-membership set (see `_markCommitteeMembers`)\"},\"claimableRefunds\":{\"details\":\"Refund credits keyed by recipient, detached from the validator lifecycle: escrow returns and boundary refunds that could not be pushed accumulate here until `claimRefund`\"},\"eligibleValidatorCount\":{\"details\":\"Cached size of the committee-eligible union `{ PendingActivation, Active, PendingExit }`, kept in sync by `_setStatus` so the hot count path (`concludeEpoch` et al.) stays a single SLOAD rather than three set-length reads. Invariant-tested against the eligible set sizes.\"},\"pendingVersionChanges\":{\"details\":\"Queue of in-service stake version changes, settled automatically inside `concludeEpoch`. One entry per validator; `versionChangeRequests[addr].targetVersion == 0` means none pending. Appended at the storage tail: this contract's variables follow all inherited ones in the flattened layout, so growth here preserves every existing slot for in-place upgrades.\"},\"validatorSets\":{\"details\":\"Per-status index of validators, keyed by `ValidatorStatus`. `_setStatus` is the single point that mutates membership, keeping each set in lockstep with `validators[addr].currentStatus`. Only real statuses get members; `Undefined` and `Any` never do. Retiring removes a validator from its set (it should not appear in any status query, exactly as the old scan skipped `isRetired`), but its `validators[addr]` record is retained as a tombstone (`isRetired = true`) that blocks re-joining. Replaces the old O(n) `tokenByIndex` scan: per-status queries are now O(set).\"},\"versionChangeRequests\":{\"details\":\"The queue entries backing `pendingVersionChanges` membership\"}},\"title\":\"ConsensusRegistry\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyDefined(address)\":[{\"notice\":\"Thrown when minting a ConsensusNFT for an address that already holds one or is retired\"}],\"BlsPubkeyNotFound(address)\":[{\"notice\":\"Thrown when no BLS public key is stored for the queried validator address\"}],\"CommitteeRequirement(address)\":[{\"notice\":\"Thrown when the committee array is not sorted in strictly ascending address order\"}],\"DelegationExpired(uint256)\":[{\"notice\":\"Thrown when a delegation signature is submitted after its signed deadline\"}],\"DuplicateBLSPubkey()\":[{\"notice\":\"Thrown when a BLS public key has already been registered to another validator\"}],\"GenesisArityMismatch()\":[{\"notice\":\"Thrown during genesis when initialValidators is empty or its length mismatches proofsOfPossession\"}],\"IneligibleUnstake((address,uint32,uint32,uint8,bool,uint8,uint8))\":[{\"notice\":\"Thrown when a validator attempts to unstake but is ineligible\"}],\"InsufficientRewards(uint256)\":[{\"notice\":\"Thrown when claimable rewards are zero or below the version's minWithdrawAmount\"}],\"InvalidBLSPubkey()\":[{\"notice\":\"Thrown when a registered BLS public key is not a well-formed 96-byte compressed G2 point\"}],\"InvalidCommitteeSize(uint256,uint256)\":[{\"notice\":\"Thrown when a committee size is zero or exceeds the number of eligible validators\"}],\"InvalidDeficitAmount(address,uint256,uint8)\":[{\"notice\":\"Thrown when a top-up's `msg.value` does not exactly match the validator's stake deficit\"}],\"InvalidDuration(uint32)\":[{\"notice\":\"Thrown in upgradeStakeVersion when the new epoch duration is zero\"}],\"InvalidEpoch(uint32)\":[{\"notice\":\"Thrown when a queried epoch is outside the stored range or genesis epoch values are nonzero\"}],\"InvalidProofOfPossession((bytes))\":[{\"notice\":\"Thrown when BLS proof-of-possession signature verification fails\"}],\"InvalidStakeAmount(uint256)\":[{\"notice\":\"Thrown when msg.value does not match the required stake amount for the operation\"}],\"InvalidStakeVersion(uint8,uint8)\":[{\"notice\":\"Thrown when a stake version upgrade targets an invalid version\"}],\"InvalidStatus(uint8)\":[{\"notice\":\"Thrown when a validator's current status does not match the required status for the operation\"}],\"InvalidSupply()\":[{\"notice\":\"Thrown when unstaking would reduce ConsensusNFT totalSupply to zero\"}],\"InvalidTokenId(uint256)\":[{\"notice\":\"Thrown when a token ID is zero, exceeds type(uint160).max, or does not exist\"}],\"InvalidValidatorAddress()\":[{\"notice\":\"Thrown during genesis initialization when a validator has address(0)\"}],\"IssuanceTransferFailed()\":[{\"notice\":\"Thrown when a low-level ETH transfer to the Issuance contract fails\"}],\"LowLevelCallFailure(bytes)\":[{\"notice\":\"Thrown when the BLS precompile staticcall fails or returns an unexpected payload\"}],\"NoClaimableRefund()\":[{\"notice\":\"Thrown when `claimRefund` is called by an address with no claimable refund credit\"}],\"NoPendingVersionChange()\":[{\"notice\":\"Thrown when cancelling a stake version change for a validator with none pending\"}],\"NotRecipient(address)\":[{\"notice\":\"Thrown when the caller is neither the validator nor its delegator\"}],\"NotTransferable()\":[{\"notice\":\"Thrown on transfer, approve, or setApprovalForAll because ConsensusNFTs are soulbound\"}],\"NotValidator(address)\":[{\"notice\":\"Thrown when a delegated-stake EIP-712 signature fails verification\"}],\"RequiresConsensusNFT()\":[{\"notice\":\"Thrown when the provided address does not own the expected ConsensusNFT\"}],\"StakeNotSlashed(address,uint256,uint8)\":[{\"notice\":\"Thrown on top-up attempts for a validator whose balance is not below its stake amount\"}],\"TopUpAuthorityRequired()\":[{\"notice\":\"Thrown when a top-up is attempted by a non-governance caller while top-ups are restricted to the governance top-up authority\"}]},\"events\":{\"DelegationNonceIncreased(address,uint64)\":{\"notice\":\"Emitted when a validator invalidates outstanding delegation signatures by bumping its nonce\"},\"NewEpoch((address[],uint256,uint64,uint32,uint32,uint8))\":{\"notice\":\"Emitted at epoch conclusion when a new epoch begins\"},\"NextCommitteeSizeUpdated(uint16,uint16,uint256)\":{\"notice\":\"Emitted when governance or the protocol adjusts the next epoch's committee size\"},\"RefundClaimed(address,uint256)\":{\"notice\":\"Emitted when an accumulated refund credit is claimed\"},\"RefundQueued(address,uint256)\":{\"notice\":\"Emitted when a refund or escrow return is credited for a later `claimRefund` pull: every boundary settlement refund, escrow returns on retirement, and user-initiated escrow returns whose push failed\"},\"RewardsClaimed(address,uint256)\":{\"notice\":\"Emitted when a stake originator claims accrued rewards or unstakes\"},\"StakeVersionAuthored(uint8,uint256,uint256,uint256,uint32)\":{\"notice\":\"Emitted when governance authors a new global stake-config version, which validators may subsequently adopt via per-validator version changes\"},\"StakeVersionChangeCanceled(address)\":{\"notice\":\"Emitted when a pending stake version change is withdrawn before settlement\"},\"StakeVersionChangeRequested(address,uint8,uint32,uint256)\":{\"notice\":\"Emitted when an in-service validator requests a stake version change, queued for automatic settlement inside `concludeEpoch`\"},\"TopUpAuthorityRequirementUpdated(bool)\":{\"notice\":\"Emitted when governance toggles whether `topUpSlashedStake` is restricted to the governance top-up authority\"},\"ValidatorActivated((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator's activation resolves at epoch conclusion or at genesis\"},\"ValidatorExited((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a pending-exit validator is removed from the active set by the protocol\"},\"ValidatorPendingActivation((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a staked validator self-activates, entering the activation queue\"},\"ValidatorPendingExit((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when an active validator requests exit, entering the exit queue\"},\"ValidatorRegionUpdated(address,uint8)\":{\"notice\":\"Emitted when governance updates a validator's geographic region assignment\"},\"ValidatorRetired((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator is permanently retired and its address can never rejoin\"},\"ValidatorSetsMigrated(uint256)\":{\"notice\":\"Emitted once when `migrateValidatorSets` back-fills the per-status sets during an in-place upgrade from a deployment that predates them\"},\"ValidatorSlashed((address,uint256))\":{\"notice\":\"Emitted for each slash applied to a validator's outstanding balance\"},\"ValidatorStakeToppedUp(address,uint256)\":{\"notice\":\"Emitted when a slashed validator's balance is restored to its version's full stake amount\"},\"ValidatorStakeVersionUpgraded(address,uint8,uint8,uint256,uint256)\":{\"notice\":\"Emitted when a validator's stake version is upgraded in-place\"},\"ValidatorStaked((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator first stakes, entering the Staked lifecycle state\"}},\"kind\":\"user\",\"methods\":{\"activate()\":{\"notice\":\"Caller must own a ConsensusNFT and be `Staked` status, ie staked or delegated\"},\"allocateIssuance()\":{\"notice\":\"Allocated TEL leaves the Issuance contract only as staking issuance rewards or through a governance withdrawal via `issuanceWithdrawal`Only governance may allocate TEL in this manner\"},\"applyIncentives((address,uint256)[])\":{\"notice\":\"Distributes the closing epoch's issuance to stake originators, weighted by initial stake and consensus header count\"},\"applySlashes((address,uint256)[])\":{\"notice\":\"Applies the closing epoch's penalties to outstanding balances, ejecting validators slashed to zero\"},\"approve(address,uint256)\":{\"notice\":\"Wouldn't do anything because transfers are disabled but explicitly disallow anyway\"},\"beginExit()\":{\"notice\":\"Reverts if the exit queue is full, ie if active validator count would drop too low\"},\"cancelStakeVersionChange(address)\":{\"notice\":\"Callable by the validator or its delegator\"},\"claimRefund()\":{\"notice\":\"Credits accrue from boundary settlement refunds, escrow returns on retirement, and user-initiated escrow returns whose push failed; they are detached from the validator lifecycle and survive burns and retirement\"},\"concludeEpoch(address[])\":{\"notice\":\"The final epoch-boundary system call: settles queued stake version changes and rotates the epoch, seating the provided future committee\"},\"delegateStake(bytes,(bytes),address,bytes,uint256)\":{\"notice\":\"`validatorAddress` must be a validator already in possession of a `ConsensusNFT`Ensuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks`validatorSig` must come from the authority that owns the validator address itself. For an externally owned account that is its secp256k1 key, whether or not the account has attached an EIP-7702 delegation; a delegated wallet program is not accepted as a stand-in for the key. Only a genuine contract account authorizes through ERC-1271.\"},\"delegationDigest(bytes,address,address,uint256)\":{\"notice\":\"Returns the delegation digest that a validator should sign to accept a delegation\"},\"getBlsPubkey(address)\":{\"notice\":\"Reverts with `BlsPubkeyNotFound` if no pubkey is stored for `validatorAddress` (including the zero-address case)\"},\"getCurrentStakeConfig()\":{\"notice\":\"Not necessarily the epoch-active config: during any epoch in which governance has authored a new version, this differs from `stakeConfig(getCurrentStakeVersion())`\"},\"getCurrentStakeVersion()\":{\"notice\":\"Differs from `getCurrentStakeConfig` during any epoch in which governance has authored a new version, since newly authored versions activate at the next epoch start\"},\"getEligibleValidatorCount()\":{\"notice\":\"Number of committee-eligible validators: the unretired `{ PendingActivation, Active, PendingExit }` set. Derived O(1) from the per-status set sizes.\"},\"getEpochInfo(uint32)\":{\"notice\":\"For future epochs, the config fields (issuance, duration, stake version) are a projection from the latest authored configuration and can change until the epoch is stamped at its start; `blockHeight` is always 0 as it is not yet known\"},\"getNextCommitteeSize()\":{\"notice\":\"Returns the next committee size\"},\"getPendingVersionChanges()\":{\"notice\":\"Returns the validators with a queued stake version change, in set order\"},\"getValidators(uint8)\":{\"notice\":\"Per-status only: the `Active` query no longer folds in `PendingActivation`/`PendingExit`. The committee-eligible pool is the union of the `{ PendingActivation, Active, PendingExit }` queries; the protocol unions those three calls off-chain. `getEligibleValidatorCount()` returns that union's size on-chain.\"},\"increaseNonce()\":{\"notice\":\"Invalidates any outstanding delegation signature for the caller by advancing its nonce\"},\"isRetired(address)\":{\"notice\":\"After retiring, a validator's `tokenId == validatorAddress` cannot be reused\"},\"issuanceWithdrawal(uint256)\":{\"notice\":\"Only governance may withdraw in this manner, eg to recover consolidated slash funds or to reduce a prior issuance allocation\"},\"migrateValidatorSets()\":{\"notice\":\"One-time back-fill of the per-status validator sets, the cached eligible count, and the BLS pubkey reverse index for an in-place upgrade from a deployment that predates them.\"},\"mint(address)\":{\"notice\":\"For each mintee, `tokenId == uint160(to)`Access-gated in ConsensusRegistry to its owner, which is a Telcoin governance address\"},\"pause()\":{\"notice\":\"Does not pause system callable or ConsensusNFT fns. Only accessible by `owner`\"},\"requestStakeVersionChange(address,uint8)\":{\"notice\":\"`Staked` validators settle immediately: they are not in service, are never members of a committee, and can already reclaim their full stake at any time via `unstake`.In-service (PendingActivation/Active) validators are queued instead: the change is applied automatically inside `concludeEpoch` at an epoch boundary, after that boundary's slashes have landed, so no request or settlement timing can move value ahead of a slash. Stake increases settle at the first boundary; stake decreases settle only once `STAKE_DECREASE_DELAY_EPOCHS` further boundaries have passed, covering slashes whose detection lags the offense by up to that many epochs.If the new version requires more stake, `msg.value` must equal the exact deficit; it is escrowed in the queue entry (not in the stake balance) until the boundary flip.If the new version requires less stake, no value moves at request time. At settlement the surplus above the new stake amount, computed from the balance as it stands post-slash, is credited to the reward recipient for `claimRefund` withdrawal; the slashed remainder of the surplus is consolidated on Issuance.A repeat request overwrites the pending entry, returning any prior escrow to its funder and re-stamping the request epoch.If a validator has been slashed and has accrued rewards, settling a lower `stakeAmount` may zero claimable rewards since rewards are derived as `balance - stakeAmount`. The recipient still receives the correct total ETH via the refund. Validators should claim rewards before requesting if they have both accrued rewards and pending slashes.\"},\"setApprovalForAll(address,bool)\":{\"notice\":\"Wouldn't do anything because transfers are disabled but explicitly disallow anyway\"},\"setNextCommitteeSize(uint16)\":{\"notice\":\"Set the internal value for the nextCommitteeSize.Reverts if the newSize is larger than the number of active/pending validators.\"},\"setTopUpAuthorityRequired(bool)\":{\"notice\":\"Toggles whether `topUpSlashedStake` is restricted to the governance top-up authority\"},\"setValidatorRegion(address,uint8)\":{\"notice\":\"Sets the GSMA region identifier for a validator. Only callable by governance (owner).\"},\"stake(bytes,(bytes))\":{\"notice\":\"Caller must already have been issued a `ConsensusNFT` by Telcoin governanceEnsuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks\"},\"tokenURI(uint256)\":{\"notice\":\"Read-only mechanism, not yet live\"},\"topUpAuthorityRequired()\":{\"notice\":\"When true, `topUpSlashedStake` is restricted to governance; when false, validators and their delegators may also restore their own slashed stake\"},\"topUpSlashedStake(address)\":{\"notice\":\"Restores a slashed validator's balance to its version's full stake amount\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Consensus NFTs are soulbound to validators and cannot be transferred unless burned\"},\"unpause()\":{\"notice\":\"Does not affect system callable or ConsensusNFT fns. Only accessible by `owner`\"},\"unstake(address,bool)\":{\"notice\":\"May be used to reverse validator onboarding pre-activation or permanently retire after full exitOnce unstaked and retired, validator addresses cannot be reused\"},\"upgradeStakeVersion((uint256,uint256,uint256,uint32))\":{\"notice\":\"The new version takes effect in the next epoch\"}},\"notice\":\"A Telcoin ContractThis contract manages consensus validator external keys, staking, and committees\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/ConsensusRegistry.sol\":\"ConsensusRegistry\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/=lib/v4-core/node_modules/@ensdomains/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":@uniswap/v4-core/=lib/v4-core/\",\":ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":hardhat/=lib/v4-core/node_modules/hardhat/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":permit2/=lib/v4-periphery/lib/permit2/\",\":safe-contracts/=lib/safe-contracts/\",\":solady/=lib/solady/src/\",\":solmate/=lib/v4-core/lib/solmate/\",\":v4-core/=lib/v4-core/src/\",\":v4-periphery/=lib/v4-periphery/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol\":{\"keccak256\":\"0x5191f783af281c75b7de0f1e3e36cdc6ac5cb2358d929584c4953fd02fa2b5eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3ca2689d95ba45e297e55c8f71112e3ccec701d0087cb5e1c6ecb1b9ce86f00\",\"dweb:/ipfs/QmNQ5xKxJpF9k7AahnmJYvg5XeGSYtRig2Lp2WHmWXyBze\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff\",\"dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0x40399695922383778f9f540a620bec475a2f8e0f08d41f0005682842e28a9855\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://746d295e403931aeb9d6065fd5a0871f43ab5459814a60623611e4b6641a09fd\",\"dweb:/ipfs/QmWrgT8YJrQ9FfD1o3YYArwo57e7MGdpFKuM74qJ4qE34E\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Base64.sol\":{\"keccak256\":\"0xbee2b819e1b4bf569ffc1b1b9d560b4abd6a589575f3093edaab9244de18a0c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e478c0e9bbf3eb8cd3b7784f9b397603e34747f9ffd16571ed1d89ce102de389\",\"dweb:/ipfs/QmZ6zXpwy5xRxx9RkodJmDZSUTeEqPQUanAC5TUoYqW2VR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x8447b57b63810fe2e367c09496a966f143ec0e825d71ddb9fce2506cff84b618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://996cb48f793bf151555045b37138e36b3cdb31d6bc6552d3149285260be00cfb\",\"dweb:/ipfs/QmcLaTTMNVbkMx58xhkp6GeFt4V3GtSyupZuaKG3vYW2Zc\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0x9303ef5a2beb555e52ce56598de205ce07ca8988fc67d073687c06cb8fc973d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8b2e48fb42844c25e6cb38e7cfa1d91dcdc054613fd10f608833dbc677acf889\",\"dweb:/ipfs/QmT4HQxbgpWA3fZnK4dY3eXHNCoyBvpvzNq5k7eSt5mR5t\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f\",\"dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz\"]},\"lib/solady/src/utils/ECDSA.sol\":{\"keccak256\":\"0xb0754260daabfe6f20dd16f2213823f27c8df1089b43c8eda9b3c2a6eca07478\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ffef4ca363ec0e2437b5e195fbb3d58bdc6750921fce32f351ca1c092ad36a75\",\"dweb:/ipfs/QmTcnAyxwvQg3h357PdB8S8oz5bBt85J4SvEgmMqwAfPKF\"]},\"lib/solady/src/utils/EIP712.sol\":{\"keccak256\":\"0x53ccaa757944900e7423347c3c35ea5a905580f3f075452b8468a501a9c39839\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aa5688d98319fbeb5b3c46330a394e15a0f2c862d651415e183da4179b918351\",\"dweb:/ipfs/QmZZFrFWmUCFL1qkZDVm3oqrDkQfumYnnksF6cpPkAHdtJ\"]},\"lib/solady/src/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xdb28f318ec45197a6c7cc2abebed67d7cb8b965838ef962e3844423256a9ddb8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://873cd46b77a2aeb781e7a0d131e7299151323ed884c330101a51d0727e218d98\",\"dweb:/ipfs/QmddadCjyedztvdSgLZEyKWoRes2SqtpviSjhEbSNrkUoi\"]},\"lib/solady/src/utils/SignatureCheckerLib.sol\":{\"keccak256\":\"0x098c7eb88b3048f227b240e0e5bf1da4a8f7622b30f6d7c06416bfcab3225e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://50c2766f652916c5d6433665fb1c3b2f04c3d9292a35c12e0f8d7c71dd6438cb\",\"dweb:/ipfs/QmWTMwN2RDZUUPg7KkH1qFBjTSh84Zw8bbYwRBCQUtLN2h\"]},\"src/consensus/ConsensusRegistry.sol\":{\"keccak256\":\"0x74061b4b6c439288baa60288a43b2680bed4de1cf35cc1f287b9a06f513af1d6\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://d5413e14ce9729aa4571b69918ce8e1950f890f3785825e2d42b904f98ad6b39\",\"dweb:/ipfs/QmQgJxGgmLS51WrM4gkQFXzkbtzsjzjDkZpZsBwipbhA1Z\"]},\"src/consensus/Issuance.sol\":{\"keccak256\":\"0xdbb33a3ff5e4afa3c5d107051647db33d86e95cd2686c0207fe8602f99a7d14a\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://082e686f08caf3840b309f72b8e480b4ba3d4b90c42c18fb831c1a4b7ecdd727\",\"dweb:/ipfs/QmT37vqjVGk1RsDc3BJCvVNYcLNuP9hTDK9vvsvykZHohG\"]},\"src/consensus/StakeManager.sol\":{\"keccak256\":\"0x0b1c34f304f62b9572202a8584f1d3adc320a7be62e13c15faebb8179a5dc745\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://6ec437743fc3d984e80d60921c39a6ba1ddfa661770e3ccd3a49a1521e7c3db0\",\"dweb:/ipfs/QmXsF11j5xNR9WLA27NmdiGj8hrBp6n2MWJQQASkZEHV68\"]},\"src/consensus/SystemCallable.sol\":{\"keccak256\":\"0xed0e78873f3f574356c3bd6fcaa8f1869415aec576586530f74a599e3c767ead\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://30b23f67de5abff6a021ff3456fa596585c57a6d09562e2a3ef4cb719b673e28\",\"dweb:/ipfs/QmYRrBUKeSSEXBfrsw4arse3c9jCsuw3hHsHpjJeEqHNwS\"]},\"src/interfaces/IBlsG1.sol\":{\"keccak256\":\"0x950230ff0bed0ae8c0dbef2d22a24fb4114a00c23604619b9dccfd3cbe370ab0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://27432929c7726f7edb4b62981d0ca6bdb5bbada573a835f787556ff442b64c15\",\"dweb:/ipfs/QmSBLDrPL47intGub7yHRC4JRVSyYSW4dSnQMGFQKK7Z8E\"]},\"src/interfaces/IConsensusRegistry.sol\":{\"keccak256\":\"0xd21fdfe6b1f601a70dd9ea80802b6cb92d98a7a751058862544cc1ccf512a6f8\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://993174c548c1d8170e87fa3fe7e33368838492883f053ea17ee765b93ce00255\",\"dweb:/ipfs/QmbdvPt6DhckDw1zp4AznyUqP91hqm5ihyqFUagbJj1Au5\"]},\"src/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x735cf0dcac8c00ed2a124b4417ec55beb2b914c9c7eab1fd2a95e53abd9104cf\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://69fdfa173369f1a05d35a1853317fcf07ee86cfdf38c232d7742bc02095537e5\",\"dweb:/ipfs/QmWFzQMwbBgkAiahzNp5A4VoqkSh7iU2XuLmbJkwqWpL6M\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.35+commit.47b9dedd"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"genesisConfig_","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]},{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"initialValidators_","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]},{"internalType":"bytes[]","name":"blsPubkeys_","type":"bytes[]"},{"internalType":"struct IStakeManager.ProofOfPossession[]","name":"proofsOfPossession","type":"tuple[]","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"AlreadyDefined"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"BlsPubkeyNotFound"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"CommitteeRequirement"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"DelegationExpired"},{"inputs":[],"type":"error","name":"DuplicateBLSPubkey"},{"inputs":[],"type":"error","name":"ERC721EnumerableForbiddenBatchMint"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721IncorrectOwner"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721InsufficientApproval"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC721InvalidApprover"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"type":"error","name":"ERC721InvalidOperator"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721InvalidOwner"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC721InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC721InvalidSender"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721NonexistentToken"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"type":"error","name":"ERC721OutOfBoundsIndex"},{"inputs":[],"type":"error","name":"EnforcedPause"},{"inputs":[],"type":"error","name":"ExpectedPause"},{"inputs":[],"type":"error","name":"GenesisArityMismatch"},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}],"type":"error","name":"IneligibleUnstake"},{"inputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"type":"error","name":"InsufficientRewards"},{"inputs":[],"type":"error","name":"InvalidBLSPubkey"},{"inputs":[{"internalType":"uint256","name":"minCommitteeSize","type":"uint256"},{"internalType":"uint256","name":"providedCommitteeSize","type":"uint256"}],"type":"error","name":"InvalidCommitteeSize"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"type":"error","name":"InvalidDeficitAmount"},{"inputs":[{"internalType":"uint32","name":"duration","type":"uint32"}],"type":"error","name":"InvalidDuration"},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"type":"error","name":"InvalidEpoch"},{"inputs":[{"internalType":"struct IStakeManager.ProofOfPossession","name":"proof","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]}],"type":"error","name":"InvalidProofOfPossession"},{"inputs":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"}],"type":"error","name":"InvalidStakeAmount"},{"inputs":[{"internalType":"uint8","name":"currentVersion","type":"uint8"},{"internalType":"uint8","name":"targetVersion","type":"uint8"}],"type":"error","name":"InvalidStakeVersion"},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"type":"error","name":"InvalidStatus"},{"inputs":[],"type":"error","name":"InvalidSupply"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"InvalidTokenId"},{"inputs":[],"type":"error","name":"InvalidValidatorAddress"},{"inputs":[],"type":"error","name":"IssuanceTransferFailed"},{"inputs":[{"internalType":"bytes","name":"err","type":"bytes"}],"type":"error","name":"LowLevelCallFailure"},{"inputs":[],"type":"error","name":"NoClaimableRefund"},{"inputs":[],"type":"error","name":"NoPendingVersionChange"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"type":"error","name":"NotRecipient"},{"inputs":[],"type":"error","name":"NotTransferable"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"NotValidator"},{"inputs":[{"internalType":"address","name":"invalidCaller","type":"address"}],"type":"error","name":"OnlySystemCall"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"Reentrancy"},{"inputs":[],"type":"error","name":"RequiresConsensusNFT"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"type":"error","name":"StakeNotSlashed"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"StringsInsufficientHexLength"},{"inputs":[],"type":"error","name":"TopUpAuthorityRequired"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"approved","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"operator","type":"address","indexed":true},{"internalType":"bool","name":"approved","type":"bool","indexed":false}],"type":"event","name":"ApprovalForAll","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint64","name":"nonce","type":"uint64","indexed":false}],"type":"event","name":"DelegationNonceIncreased","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"epoch","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"indexed":false}],"type":"event","name":"NewEpoch","anonymous":false},{"inputs":[{"internalType":"uint16","name":"oldSize","type":"uint16","indexed":false},{"internalType":"uint16","name":"newSize","type":"uint16","indexed":false},{"internalType":"uint256","name":"numActiveValidators","type":"uint256","indexed":false}],"type":"event","name":"NextCommitteeSizeUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"RefundClaimed","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"RefundQueued","anonymous":false},{"inputs":[{"internalType":"address","name":"claimant","type":"address","indexed":true},{"internalType":"uint256","name":"rewards","type":"uint256","indexed":false}],"type":"event","name":"RewardsClaimed","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":true},{"internalType":"uint256","name":"stakeAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"epochIssuance","type":"uint256","indexed":false},{"internalType":"uint32","name":"epochDuration","type":"uint32","indexed":false}],"type":"event","name":"StakeVersionAuthored","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true}],"type":"event","name":"StakeVersionChangeCanceled","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"targetVersion","type":"uint8","indexed":false},{"internalType":"uint32","name":"requestEpoch","type":"uint32","indexed":false},{"internalType":"uint256","name":"escrow","type":"uint256","indexed":false}],"type":"event","name":"StakeVersionChangeRequested","anonymous":false},{"inputs":[{"internalType":"bool","name":"required","type":"bool","indexed":false}],"type":"event","name":"TopUpAuthorityRequirementUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorActivated","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorExited","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorPendingActivation","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorPendingExit","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"region","type":"uint8","indexed":false}],"type":"event","name":"ValidatorRegionUpdated","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorRetired","anonymous":false},{"inputs":[{"internalType":"uint256","name":"eligibleValidatorCount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorSetsMigrated","anonymous":false},{"inputs":[{"internalType":"struct Slash","name":"slash","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false}],"type":"event","name":"ValidatorSlashed","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorStakeToppedUp","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"oldVersion","type":"uint8","indexed":false},{"internalType":"uint8","name":"newVersion","type":"uint8","indexed":false},{"internalType":"uint256","name":"oldStakeAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"newStakeAmount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorStakeVersionUpgraded","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorStaked","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"SYSTEM_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"activate"},{"inputs":[],"stateMutability":"payable","type":"function","name":"allocateIssuance"},{"inputs":[{"internalType":"struct RewardInfo[]","name":"rewardInfos","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"consensusHeaderCount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"applyIncentives"},{"inputs":[{"internalType":"struct Slash[]","name":"slashes","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"applySlashes"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"beginExit"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"cancelStakeVersionChange"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"claimRefund"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"claimStakeRewards"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"claimableRefunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address[]","name":"newCommittee","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"concludeEpoch"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"struct IStakeManager.ProofOfPossession","name":"proofOfPossession","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"bytes","name":"validatorEIP712Signature","type":"bytes"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"stateMutability":"payable","type":"function","name":"delegateStake"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"address","name":"delegator","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"stateMutability":"view","type":"function","name":"delegationDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"epochInfo","outputs":[{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"futureEpochInfo","outputs":[{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getBalanceBreakdown","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getBlsPubkey","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getCommitteeBlsPubkeys","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getCommitteeValidators","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentEpoch","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentEpochInfo","outputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentStakeConfig","outputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentStakeVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEligibleValidatorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getEpochInfo","outputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextCommitteeSize","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPendingVersionChanges","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getValidator","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function","name":"getValidators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function","name":"getValidatorsInfo","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"increaseNonce"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"isDelegated","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"isRetired","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"issuance","outputs":[{"internalType":"address payable","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"issuanceWithdrawal"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"migrateValidatorSets"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint8","name":"targetVersion","type":"uint8"}],"stateMutability":"payable","type":"function","name":"requestStakeVersionChange"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setApprovalForAll"},{"inputs":[{"internalType":"uint16","name":"newSize","type":"uint16"}],"stateMutability":"nonpayable","type":"function","name":"setNextCommitteeSize"},{"inputs":[{"internalType":"bool","name":"required","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setTopUpAuthorityRequired"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint8","name":"region","type":"uint8"}],"stateMutability":"nonpayable","type":"function","name":"setValidatorRegion"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"struct IStakeManager.ProofOfPossession","name":"proofOfPossession","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"stake"},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8"}],"stateMutability":"view","type":"function","name":"stakeConfig","outputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"topUpAuthorityRequired","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"payable","type":"function","name":"topUpSlashedStake"},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"undistributedIssuance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"bool","name":"acceptRewardShortfall","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"unstake"},{"inputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"newConfig","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}],"stateMutability":"nonpayable","type":"function","name":"upgradeStakeVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"versionChangeRequests","outputs":[{"internalType":"uint8","name":"targetVersion","type":"uint8"},{"internalType":"uint32","name":"requestEpoch","type":"uint32"},{"internalType":"address","name":"funder","type":"address"},{"internalType":"uint256","name":"escrow","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"activate()":{"details":"Self-activation function for validators, gaining `PendingActivation` status and setting next epoch as activation epoch to ensure rewards eligibility only after completing a full epoch"},"allocateIssuance()":{"details":"Permissioned function to allocate TEL for epoch issuance, ie consensus block rewards"},"applyIncentives((address,uint256)[])":{"details":"First boundary system call in the closing block: runs before `applySlashes` so weights reflect pre-slash collateral, and before `concludeEpoch` so weights reflect the versions active during the closing epoch. Entries with sentinel addresses (token ids 0 and type(uint160).max) or retired validators are skipped rather than reverting, so a malformed entry cannot stall the boundary. Issuance distribution is not yet enabled during the pilot; the protocol passes an empty array"},"applySlashes((address,uint256)[])":{"details":"Second boundary system call in the closing block: MUST run before `concludeEpoch` so slashes land on the full old-version collateral ahead of the version-queue settlement, and so the protocol's post-slash committee reads see any ejections. Entries with sentinel addresses or retired validators are skipped rather than reverting. Slashing is not yet enabled during the pilot; the protocol passes an empty array"},"balanceOf(address)":{"details":"See {IERC721-balanceOf}."},"beginExit()":{"details":"Issues an exit request for a validator to be retired from the `Active` validator set"},"burn(address)":{"details":"In the case of malicious or erroneous node operator behavior, governance can use this function to burn a validator's `ConsensusNFT` and immediately eject from consensus committees if applicableIntended for sparing use; only reverts if burning results in empty committee","params":{"from":"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`"}},"cancelStakeVersionChange(address)":{"details":"Withdraws a pending stake version change without settling it, returning any escrow to its funder","params":{"validatorAddress":"The validator whose pending change should be cancelled"}},"claimRefund()":{"details":"Transfers the caller's accumulated refund credit"},"claimStakeRewards(address)":{"details":"Used by rewardees to claim staking rewards"},"concludeEpoch(address[])":{"details":"The protocol sequences the closing block as `applyIncentives`, then `applySlashes`, then this call. That ordering is a security invariant: it lets the protocol assemble `newCommittee` and read `nextCommitteeSize` after slash-to-zero ejections have landed (so this call's committee checks cannot revert against a stale pre-slash view, and an ejected validator is never seated in a future committee), and it makes the version-queue settlement here read post-slash balances. Settlement refunds accrue as `claimRefund` credits rather than transfers, so this call performs no external calls beyond the trusted Issuance consolidation and its cost is storage-bounded regardless of recipient behavior.","params":{"newCommittee":"The future validator committee for `$.currentEpoch + 3`"}},"constructor":{"details":"Stake for `initialValidators_` is allocated directly to the ConsensusRegistry balance and decremented directly from the TEL precompile within the protocol on the rust sideOnly governance delegation is enabled at genesis","params":{"initialValidators_":"The initial validator set running Telcoin Network; these validators will comprise the voter committee for the first three epochs, ie `epochInfo[0:2]`"}},"delegateStake(bytes,(bytes),address,bytes,uint256)":{"details":"Accepts delegated stake from a non-validator caller authorized by a validator's EIP712 signature","params":{"deadline":"Unix timestamp past which `validatorSig` is rejected (ignored for governance calls)"}},"delegationDigest(bytes,address,address,uint256)":{"params":{"deadline":"Unix timestamp past which the produced signature must be rejected"},"returns":{"_0":"_ EIP-712 typed struct hash used to enable delegated proof of stake"}},"eip712Domain()":{"details":"See: https://eips.ethereum.org/EIPS/eip-5267"},"getApproved(uint256)":{"details":"See {IERC721-getApproved}."},"getBalanceBreakdown(address)":{"details":"Returns staking information for the given address"},"getBlsPubkey(address)":{"details":"Fetches the BLS pubkey for a given validator address"},"getCommitteeBlsPubkeys(uint32)":{"details":"Fetches the BLS pubkeys for the committee of a given epoch"},"getCommitteeValidators(uint32)":{"details":"Fetches the committee for a given epoch"},"getCurrentEpoch()":{"details":"Returns the current epoch"},"getCurrentEpochInfo()":{"details":"Returns the current epoch's committee and block height"},"getCurrentStakeConfig()":{"details":"Returns the latest authored stake configuration, which becomes active at the next epoch start"},"getCurrentStakeVersion()":{"details":"Returns the stake version active for the current epoch, ie the version stamped into the epoch's info at its start"},"getEpochInfo(uint32)":{"details":"Returns information about the provided epoch. Only four latest & two future epochs are stored"},"getRewards(address)":{"details":"Fetches the claimable rewards accrued for a given validator address","returns":{"_0":"_ The validator's claimable rewards, not including the validator's stake"}},"getValidator(address)":{"details":"Fetches the `ValidatorInfo` for a given `validatorAddress == ConsensusNFT tokenId`"},"getValidators(uint8)":{"details":"Returns the addresses of validators in exactly the provided status's set, in the set's current order. Reverts on `Undefined` and `Any` (neither maintains a set)."},"getValidatorsInfo(uint8)":{"details":"Like `getValidators`, but returns the full `ValidatorInfo` for each validator in the set."},"increaseNonce()":{"details":"Caller must hold a ConsensusNFT; lets a validator revoke a delegation it authorized but no longer wants honored"},"isApprovedForAll(address,address)":{"details":"See {IERC721-isApprovedForAll}."},"isDelegated(address)":{"details":"Returns whether a validator's stake was delegated (ie has a delegator)"},"isRetired(address)":{"details":"Returns whether a validator is exited && unstaked, ie \"retired\""},"isValidator(bytes)":{"details":"Check if a BLS public key corresponds to an active validator","params":{"blsPubkey":"The compressed 96-byte BLS public key to check"},"returns":{"_0":"bool True if the validator exists and is not retired, false otherwise"}},"issuanceWithdrawal(uint256)":{"details":"Permissioned function to withdraw TEL from the Issuance contract to the caller","params":{"amount":"The amount of TEL to withdraw from the Issuance contract"}},"migrateValidatorSets()":{"details":"The storage layout is a clean append (the sets were appended after the pre-existing variables), so `validators[*]` and the ConsensusNFTs survive the code swap untouched; only `validatorSets` / `eligibleValidatorCount` start empty and must be rebuilt before the new read paths (`getValidators` / `getValidatorsInfo` / `concludeEpoch`) work. Walks the ConsensusNFT enumeration and re-derives each set from `currentStatus` (the preserved source of truth), mirroring `_setStatus`: retired, `Undefined`, and `Any` validators carry no set and are skipped. Idempotent - set adds dedupe and the count is recomputed from scratch - so a redundant call (or a call against a freshly seeded genesis) is a no-op. System-gated so the protocol invokes it once during the fork that swaps in this implementation."},"mint(address)":{"details":"The StakeManager's ERC721 ledger serves a permissioning role over validators, requiring Telcoin governance to approve each node operator and manually issue them a `ConsensusNFT`","params":{"to":"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`"}},"name()":{"details":"See {IERC721Metadata-name}."},"owner()":{"details":"Returns the address of the current owner."},"ownerOf(uint256)":{"details":"See {IERC721-ownerOf}."},"pause()":{"details":"Emergency function to pause validator and stake management"},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"requestStakeVersionChange(address,uint8)":{"details":"Requests a stake version change for a validator; callable by the validator or its delegator. Only callable for validators with status Staked, PendingActivation, or Active.","params":{"targetVersion":"The version to adopt (must be strictly greater than current and not exceed the latest authored version)","validatorAddress":"The validator whose stake version should change"}},"safeTransferFrom(address,address,uint256)":{"details":"See {IERC721-safeTransferFrom}."},"safeTransferFrom(address,address,uint256,bytes)":{"details":"See {IERC721-safeTransferFrom}."},"setNextCommitteeSize(uint16)":{"details":"This is managed off-chain and read by the protocol to shuffle n-validators for `concludeEpoch` call."},"setTopUpAuthorityRequired(bool)":{"details":"Only callable by governance (owner)"},"setValidatorRegion(address,uint8)":{"params":{"region":"The GSMA region identifier (uint8; 0=unspecified, 1-8=GSMA regions)","validatorAddress":"The address of the validator to update"}},"stake(bytes,(bytes))":{"details":"Accepts the native TEL stake amount from the calling validator, enabling later self-activation"},"stakeConfig(uint8)":{"details":"Returns the queried stake configuration"},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"symbol()":{"details":"See {IERC721Metadata-symbol}."},"tokenByIndex(uint256)":{"details":"See {IERC721Enumerable-tokenByIndex}."},"tokenOfOwnerByIndex(address,uint256)":{"details":"See {IERC721Enumerable-tokenOfOwnerByIndex}."},"topUpSlashedStake(address)":{"details":"`msg.value` must equal the exact deficit; it is consolidated on the Issuance contract since this contract retains the full stake-backed native TEL when slashes are appliedCallable by governance at any time; by the validator or its delegator only while `topUpAuthorityRequired` is false","params":{"validatorAddress":"The slashed validator to top up; must be `Staked`, `PendingActivation`, or `Active`"}},"totalSupply()":{"details":"See {IERC721Enumerable-totalSupply}."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"unpause()":{"details":"Emergency function to unpause validator and stake management"},"unstake(address,bool)":{"details":"Returns previously staked funds in addition to accrued rewards, if any, to the staker","params":{"acceptRewardShortfall":"When true, caps the rewards payout at the Issuance contract's available balance and permanently forfeits only the shortfall, so an underfunded reward pool can never block a stake withdrawal; identical to a normal unstake whenever Issuance can cover the rewards"}},"upgradeStakeVersion((uint256,uint256,uint256,uint32))":{"details":"Permissioned function to upgrade stake, withdrawal, and consensus block reward configurations"}},"version":1},"userdoc":{"kind":"user","methods":{"activate()":{"notice":"Caller must own a ConsensusNFT and be `Staked` status, ie staked or delegated"},"allocateIssuance()":{"notice":"Allocated TEL leaves the Issuance contract only as staking issuance rewards or through a governance withdrawal via `issuanceWithdrawal`Only governance may allocate TEL in this manner"},"applyIncentives((address,uint256)[])":{"notice":"Distributes the closing epoch's issuance to stake originators, weighted by initial stake and consensus header count"},"applySlashes((address,uint256)[])":{"notice":"Applies the closing epoch's penalties to outstanding balances, ejecting validators slashed to zero"},"approve(address,uint256)":{"notice":"Wouldn't do anything because transfers are disabled but explicitly disallow anyway"},"beginExit()":{"notice":"Reverts if the exit queue is full, ie if active validator count would drop too low"},"cancelStakeVersionChange(address)":{"notice":"Callable by the validator or its delegator"},"claimRefund()":{"notice":"Credits accrue from boundary settlement refunds, escrow returns on retirement, and user-initiated escrow returns whose push failed; they are detached from the validator lifecycle and survive burns and retirement"},"concludeEpoch(address[])":{"notice":"The final epoch-boundary system call: settles queued stake version changes and rotates the epoch, seating the provided future committee"},"delegateStake(bytes,(bytes),address,bytes,uint256)":{"notice":"`validatorAddress` must be a validator already in possession of a `ConsensusNFT`Ensuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks`validatorSig` must come from the authority that owns the validator address itself. For an externally owned account that is its secp256k1 key, whether or not the account has attached an EIP-7702 delegation; a delegated wallet program is not accepted as a stand-in for the key. Only a genuine contract account authorizes through ERC-1271."},"delegationDigest(bytes,address,address,uint256)":{"notice":"Returns the delegation digest that a validator should sign to accept a delegation"},"getBlsPubkey(address)":{"notice":"Reverts with `BlsPubkeyNotFound` if no pubkey is stored for `validatorAddress` (including the zero-address case)"},"getCurrentStakeConfig()":{"notice":"Not necessarily the epoch-active config: during any epoch in which governance has authored a new version, this differs from `stakeConfig(getCurrentStakeVersion())`"},"getCurrentStakeVersion()":{"notice":"Differs from `getCurrentStakeConfig` during any epoch in which governance has authored a new version, since newly authored versions activate at the next epoch start"},"getEligibleValidatorCount()":{"notice":"Number of committee-eligible validators: the unretired `{ PendingActivation, Active, PendingExit }` set. Derived O(1) from the per-status set sizes."},"getEpochInfo(uint32)":{"notice":"For future epochs, the config fields (issuance, duration, stake version) are a projection from the latest authored configuration and can change until the epoch is stamped at its start; `blockHeight` is always 0 as it is not yet known"},"getNextCommitteeSize()":{"notice":"Returns the next committee size"},"getPendingVersionChanges()":{"notice":"Returns the validators with a queued stake version change, in set order"},"getValidators(uint8)":{"notice":"Per-status only: the `Active` query no longer folds in `PendingActivation`/`PendingExit`. The committee-eligible pool is the union of the `{ PendingActivation, Active, PendingExit }` queries; the protocol unions those three calls off-chain. `getEligibleValidatorCount()` returns that union's size on-chain."},"increaseNonce()":{"notice":"Invalidates any outstanding delegation signature for the caller by advancing its nonce"},"isRetired(address)":{"notice":"After retiring, a validator's `tokenId == validatorAddress` cannot be reused"},"issuanceWithdrawal(uint256)":{"notice":"Only governance may withdraw in this manner, eg to recover consolidated slash funds or to reduce a prior issuance allocation"},"migrateValidatorSets()":{"notice":"One-time back-fill of the per-status validator sets, the cached eligible count, and the BLS pubkey reverse index for an in-place upgrade from a deployment that predates them."},"mint(address)":{"notice":"For each mintee, `tokenId == uint160(to)`Access-gated in ConsensusRegistry to its owner, which is a Telcoin governance address"},"pause()":{"notice":"Does not pause system callable or ConsensusNFT fns. Only accessible by `owner`"},"requestStakeVersionChange(address,uint8)":{"notice":"`Staked` validators settle immediately: they are not in service, are never members of a committee, and can already reclaim their full stake at any time via `unstake`.In-service (PendingActivation/Active) validators are queued instead: the change is applied automatically inside `concludeEpoch` at an epoch boundary, after that boundary's slashes have landed, so no request or settlement timing can move value ahead of a slash. Stake increases settle at the first boundary; stake decreases settle only once `STAKE_DECREASE_DELAY_EPOCHS` further boundaries have passed, covering slashes whose detection lags the offense by up to that many epochs.If the new version requires more stake, `msg.value` must equal the exact deficit; it is escrowed in the queue entry (not in the stake balance) until the boundary flip.If the new version requires less stake, no value moves at request time. At settlement the surplus above the new stake amount, computed from the balance as it stands post-slash, is credited to the reward recipient for `claimRefund` withdrawal; the slashed remainder of the surplus is consolidated on Issuance.A repeat request overwrites the pending entry, returning any prior escrow to its funder and re-stamping the request epoch.If a validator has been slashed and has accrued rewards, settling a lower `stakeAmount` may zero claimable rewards since rewards are derived as `balance - stakeAmount`. The recipient still receives the correct total ETH via the refund. Validators should claim rewards before requesting if they have both accrued rewards and pending slashes."},"setApprovalForAll(address,bool)":{"notice":"Wouldn't do anything because transfers are disabled but explicitly disallow anyway"},"setNextCommitteeSize(uint16)":{"notice":"Set the internal value for the nextCommitteeSize.Reverts if the newSize is larger than the number of active/pending validators."},"setTopUpAuthorityRequired(bool)":{"notice":"Toggles whether `topUpSlashedStake` is restricted to the governance top-up authority"},"setValidatorRegion(address,uint8)":{"notice":"Sets the GSMA region identifier for a validator. Only callable by governance (owner)."},"stake(bytes,(bytes))":{"notice":"Caller must already have been issued a `ConsensusNFT` by Telcoin governanceEnsuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks"},"tokenURI(uint256)":{"notice":"Read-only mechanism, not yet live"},"topUpAuthorityRequired()":{"notice":"When true, `topUpSlashedStake` is restricted to governance; when false, validators and their delegators may also restore their own slashed stake"},"topUpSlashedStake(address)":{"notice":"Restores a slashed validator's balance to its version's full stake amount"},"transferFrom(address,address,uint256)":{"notice":"Consensus NFTs are soulbound to validators and cannot be transferred unless burned"},"unpause()":{"notice":"Does not affect system callable or ConsensusNFT fns. Only accessible by `owner`"},"unstake(address,bool)":{"notice":"May be used to reverse validator onboarding pre-activation or permanently retire after full exitOnce unstaked and retired, validator addresses cannot be reused"},"upgradeStakeVersion((uint256,uint256,uint256,uint32))":{"notice":"The new version takes effect in the next epoch"}},"version":1}},"settings":{"remappings":["@ensdomains/=lib/v4-core/node_modules/@ensdomains/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","@uniswap/v4-core/=lib/v4-core/","ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-gas-snapshot/=lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","hardhat/=lib/v4-core/node_modules/hardhat/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","permit2/=lib/v4-periphery/lib/permit2/","safe-contracts/=lib/safe-contracts/","solady/=lib/solady/src/","solmate/=lib/v4-core/lib/solmate/","v4-core/=lib/v4-core/src/","v4-periphery/=lib/v4-periphery/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/consensus/ConsensusRegistry.sol":"ConsensusRegistry"},"evmVersion":"prague","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b","urls":["bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b","dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol":{"keccak256":"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a","urls":["bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09","dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261","urls":["bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11","dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol":{"keccak256":"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d","urls":["bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34","dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol":{"keccak256":"0x5191f783af281c75b7de0f1e3e36cdc6ac5cb2358d929584c4953fd02fa2b5eb","urls":["bzz-raw://d3ca2689d95ba45e297e55c8f71112e3ccec701d0087cb5e1c6ecb1b9ce86f00","dweb:/ipfs/QmNQ5xKxJpF9k7AahnmJYvg5XeGSYtRig2Lp2WHmWXyBze"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol":{"keccak256":"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de","urls":["bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff","dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol":{"keccak256":"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1","urls":["bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02","dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol":{"keccak256":"0x40399695922383778f9f540a620bec475a2f8e0f08d41f0005682842e28a9855","urls":["bzz-raw://746d295e403931aeb9d6065fd5a0871f43ab5459814a60623611e4b6641a09fd","dweb:/ipfs/QmWrgT8YJrQ9FfD1o3YYArwo57e7MGdpFKuM74qJ4qE34E"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Base64.sol":{"keccak256":"0xbee2b819e1b4bf569ffc1b1b9d560b4abd6a589575f3093edaab9244de18a0c2","urls":["bzz-raw://e478c0e9bbf3eb8cd3b7784f9b397603e34747f9ffd16571ed1d89ce102de389","dweb:/ipfs/QmZ6zXpwy5xRxx9RkodJmDZSUTeEqPQUanAC5TUoYqW2VR"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol":{"keccak256":"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd","urls":["bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc","dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x8447b57b63810fe2e367c09496a966f143ec0e825d71ddb9fce2506cff84b618","urls":["bzz-raw://996cb48f793bf151555045b37138e36b3cdb31d6bc6552d3149285260be00cfb","dweb:/ipfs/QmcLaTTMNVbkMx58xhkp6GeFt4V3GtSyupZuaKG3vYW2Zc"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c","urls":["bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251","dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol":{"keccak256":"0x9303ef5a2beb555e52ce56598de205ce07ca8988fc67d073687c06cb8fc973d1","urls":["bzz-raw://8b2e48fb42844c25e6cb38e7cfa1d91dcdc054613fd10f608833dbc677acf889","dweb:/ipfs/QmT4HQxbgpWA3fZnK4dY3eXHNCoyBvpvzNq5k7eSt5mR5t"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa","urls":["bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287","dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea","urls":["bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d","dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212","urls":["bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f","dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz"],"license":"MIT"},"lib/solady/src/utils/ECDSA.sol":{"keccak256":"0xb0754260daabfe6f20dd16f2213823f27c8df1089b43c8eda9b3c2a6eca07478","urls":["bzz-raw://ffef4ca363ec0e2437b5e195fbb3d58bdc6750921fce32f351ca1c092ad36a75","dweb:/ipfs/QmTcnAyxwvQg3h357PdB8S8oz5bBt85J4SvEgmMqwAfPKF"],"license":"MIT"},"lib/solady/src/utils/EIP712.sol":{"keccak256":"0x53ccaa757944900e7423347c3c35ea5a905580f3f075452b8468a501a9c39839","urls":["bzz-raw://aa5688d98319fbeb5b3c46330a394e15a0f2c862d651415e183da4179b918351","dweb:/ipfs/QmZZFrFWmUCFL1qkZDVm3oqrDkQfumYnnksF6cpPkAHdtJ"],"license":"MIT"},"lib/solady/src/utils/ReentrancyGuard.sol":{"keccak256":"0xdb28f318ec45197a6c7cc2abebed67d7cb8b965838ef962e3844423256a9ddb8","urls":["bzz-raw://873cd46b77a2aeb781e7a0d131e7299151323ed884c330101a51d0727e218d98","dweb:/ipfs/QmddadCjyedztvdSgLZEyKWoRes2SqtpviSjhEbSNrkUoi"],"license":"MIT"},"lib/solady/src/utils/SignatureCheckerLib.sol":{"keccak256":"0x098c7eb88b3048f227b240e0e5bf1da4a8f7622b30f6d7c06416bfcab3225e77","urls":["bzz-raw://50c2766f652916c5d6433665fb1c3b2f04c3d9292a35c12e0f8d7c71dd6438cb","dweb:/ipfs/QmWTMwN2RDZUUPg7KkH1qFBjTSh84Zw8bbYwRBCQUtLN2h"],"license":"MIT"},"src/consensus/ConsensusRegistry.sol":{"keccak256":"0x74061b4b6c439288baa60288a43b2680bed4de1cf35cc1f287b9a06f513af1d6","urls":["bzz-raw://d5413e14ce9729aa4571b69918ce8e1950f890f3785825e2d42b904f98ad6b39","dweb:/ipfs/QmQgJxGgmLS51WrM4gkQFXzkbtzsjzjDkZpZsBwipbhA1Z"],"license":"MIT or Apache-2.0"},"src/consensus/Issuance.sol":{"keccak256":"0xdbb33a3ff5e4afa3c5d107051647db33d86e95cd2686c0207fe8602f99a7d14a","urls":["bzz-raw://082e686f08caf3840b309f72b8e480b4ba3d4b90c42c18fb831c1a4b7ecdd727","dweb:/ipfs/QmT37vqjVGk1RsDc3BJCvVNYcLNuP9hTDK9vvsvykZHohG"],"license":"MIT or Apache-2.0"},"src/consensus/StakeManager.sol":{"keccak256":"0x0b1c34f304f62b9572202a8584f1d3adc320a7be62e13c15faebb8179a5dc745","urls":["bzz-raw://6ec437743fc3d984e80d60921c39a6ba1ddfa661770e3ccd3a49a1521e7c3db0","dweb:/ipfs/QmXsF11j5xNR9WLA27NmdiGj8hrBp6n2MWJQQASkZEHV68"],"license":"MIT or Apache-2.0"},"src/consensus/SystemCallable.sol":{"keccak256":"0xed0e78873f3f574356c3bd6fcaa8f1869415aec576586530f74a599e3c767ead","urls":["bzz-raw://30b23f67de5abff6a021ff3456fa596585c57a6d09562e2a3ef4cb719b673e28","dweb:/ipfs/QmYRrBUKeSSEXBfrsw4arse3c9jCsuw3hHsHpjJeEqHNwS"],"license":"MIT or Apache-2.0"},"src/interfaces/IBlsG1.sol":{"keccak256":"0x950230ff0bed0ae8c0dbef2d22a24fb4114a00c23604619b9dccfd3cbe370ab0","urls":["bzz-raw://27432929c7726f7edb4b62981d0ca6bdb5bbada573a835f787556ff442b64c15","dweb:/ipfs/QmSBLDrPL47intGub7yHRC4JRVSyYSW4dSnQMGFQKK7Z8E"],"license":"MIT"},"src/interfaces/IConsensusRegistry.sol":{"keccak256":"0xd21fdfe6b1f601a70dd9ea80802b6cb92d98a7a751058862544cc1ccf512a6f8","urls":["bzz-raw://993174c548c1d8170e87fa3fe7e33368838492883f053ea17ee765b93ce00255","dweb:/ipfs/QmbdvPt6DhckDw1zp4AznyUqP91hqm5ihyqFUagbJj1Au5"],"license":"MIT or Apache-2.0"},"src/interfaces/IStakeManager.sol":{"keccak256":"0x735cf0dcac8c00ed2a124b4417ec55beb2b914c9c7eab1fd2a95e53abd9104cf","urls":["bzz-raw://69fdfa173369f1a05d35a1853317fcf07ee86cfdf38c232d7742bc02095537e5","dweb:/ipfs/QmWFzQMwbBgkAiahzNp5A4VoqkSh7iU2XuLmbJkwqWpL6M"],"license":"MIT or Apache-2.0"}},"version":1},"id":56} \ No newline at end of file diff --git a/src/consensus/ConsensusRegistry.sol b/src/consensus/ConsensusRegistry.sol index 10d27d4..bc3a5ce 100644 --- a/src/consensus/ConsensusRegistry.sol +++ b/src/consensus/ConsensusRegistry.sol @@ -7,6 +7,7 @@ import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableS import { SlotDerivation } from "@openzeppelin/contracts/utils/SlotDerivation.sol"; import { TransientSlot } from "@openzeppelin/contracts/utils/TransientSlot.sol"; import { SignatureCheckerLib } from "solady/utils/SignatureCheckerLib.sol"; +import { ECDSA } from "solady/utils/ECDSA.sol"; import { ReentrancyGuard } from "solady/utils/ReentrancyGuard.sol"; import { RewardInfo, Slash, IStakeManager } from "../interfaces/IStakeManager.sol"; import { StakeManager } from "./StakeManager.sol"; @@ -620,7 +621,7 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, ) ); bytes32 digest = _hashTypedData(structHash); - if (!SignatureCheckerLib.isValidSignatureNowCalldata(validatorAddress, digest, validatorEIP712Signature)) { + if (!_isValidValidatorSignature(validatorAddress, digest, validatorEIP712Signature)) { revert NotValidator(validatorAddress); } } @@ -1052,6 +1053,50 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, } } + /// @notice Authorizes a delegated stake by proving control of `validatorAddress` over `digest` + /// @dev Which authority is competent to answer depends on what kind of account the validator is: + /// an externally owned account answers with its secp256k1 key, a contract account answers through + /// ERC-1271. Code size no longer separates the two. An EIP-7702 delegated EOA carries a 23-byte + /// designator, so a bare code-size probe reads it as a contract and defers to whatever the EOA + /// currently points at - a revocable wallet program, not the identity governance whitelisted. That + /// substitution is wrong in both directions: it locks out delegated validators whose wallet has no + /// ERC-1271 handler despite a perfectly valid key signature, and it lets a permissive handler + /// authorize a delegation the key holder never signed. Delegated EOAs are therefore held to their + /// key, exactly as undelegated EOAs are, and only genuine contract accounts reach ERC-1271. + function _isValidValidatorSignature( + address validatorAddress, + bytes32 digest, + bytes calldata signature + ) + internal + view + returns (bool) + { + if (_isDelegationDesignator(validatorAddress)) { + // `tryRecoverCalldata` yields the zero address for a malformed or non-matching signature, + // which never equals a validator address (the zero token id is rejected at mint) + return ECDSA.tryRecoverCalldata(digest, signature) == validatorAddress; + } + + return SignatureCheckerLib.isValidSignatureNowCalldata(validatorAddress, digest, signature); + } + + /// @dev Byte length of an EIP-7702 delegation designator: the 3-byte prefix plus an address + uint256 private constant EIP7702_DESIGNATOR_LENGTH = 23; + + /// @notice Returns whether `account`'s code is an EIP-7702 delegation designator, ie whether the + /// account is an EOA that has delegated execution to another address + /// @dev A designator is exactly `0xef0100 || implementation`. The prefix is unambiguous: EIP-3541 + /// forbids deployed contract code from beginning with `0xEF`, so nothing else can wear it. + /// `address.code.length` compiles to a bare `EXTCODESIZE`, so the copy below only ever runs + /// against the 23 bytes it has already matched. + function _isDelegationDesignator(address account) internal view returns (bool) { + if (account.code.length != EIP7702_DESIGNATOR_LENGTH) return false; + + bytes memory code = account.code; + return code[0] == bytes1(0xef) && code[1] == bytes1(0x01) && code[2] == bytes1(0x00); + } + /// @notice Enters a validator into the activation queue upon receiving stake /// @dev Stores the new validator in the `validators` vector function _recordStaked( @@ -1286,11 +1331,12 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, // this is believed to be impossible if (!r) revert IssuanceTransferFailed(); - // exit, retire, and unstake + burn validator immediately + // exit, retire, and burn the validator's token immediately. The ledgers above already + // routed every last wei to Issuance, so nothing is owed and nothing is pushed: this path + // makes no call to a validator-controlled address and cannot be blocked by one _exit(validator, currentEpoch); _retire(validator); - address recipient = _getRecipient(validatorAddress); - _unstake(validatorAddress, recipient, true); + _burnConsensusNFT(validatorAddress); } /// @dev Stores the number of blocks finalized in previous epoch and the voter committee for the new epoch diff --git a/src/consensus/StakeManager.sol b/src/consensus/StakeManager.sol index 802f3f0..06d6eb3 100644 --- a/src/consensus/StakeManager.sol +++ b/src/consensus/StakeManager.sol @@ -206,6 +206,19 @@ abstract contract StakeManager is ERC721Enumerable, EIP712, IStakeManager { return rewards; } + /// @dev Retires the validator's ConsensusNFT and delegation record without moving any value. + /// Split out from `_unstake` so the confiscating burn path, which settles its own ledgers and + /// owes the validator nothing, can close out the token without touching a payout: no value is + /// pushed to a validator-controlled address, so account code the validator attaches after being + /// whitelisted - an EIP-7702 delegation with a reverting handler, say - cannot block a + /// governance burn or a slash-to-zero ejection inside the epoch-boundary system call. + function _burnConsensusNFT(address validatorAddress) internal { + _burn(_getTokenId(validatorAddress)); + if (totalSupply() == 0) revert InvalidSupply(); + + delete delegations[validatorAddress]; + } + function _unstake( address validatorAddress, address recipient, @@ -215,13 +228,10 @@ abstract contract StakeManager is ERC721Enumerable, EIP712, IStakeManager { virtual returns (uint256) { - _burn(_getTokenId(validatorAddress)); - if (totalSupply() == 0) revert InvalidSupply(); - - delete delegations[validatorAddress]; + _burnConsensusNFT(validatorAddress); (uint256 bal, uint256 stakeAmt, uint256 rewards) = getBalanceBreakdown(validatorAddress); - // zero outstanding balance implies burn context, no further action needed- ledgers are already settled + // a fully settled ledger leaves nothing to return if (bal == 0) return bal; // otherwise wipe existing balance & identify the amount of stake due to recipient diff --git a/src/consensus/design.md b/src/consensus/design.md index 4433c0a..00a0b9e 100644 --- a/src/consensus/design.md +++ b/src/consensus/design.md @@ -57,6 +57,8 @@ At the epoch boundary, the protocol performs gasless system calls to the Consens - **Issuance Contract**: Accepts TEL for rewards distribution, using TEL "burnt" for epoch rewards. For simplicity, the Issuance contract offloads accounting to the EVM native ledger. - **Delegation**: DPOS is currently supported though expected to be used sparingly for delegators and validators with ongoing offchain relationships or agreements. - **Delegation Rewards**: Delegators receive all stake rewards and the staked balance upon unstaking, so schemas for splitting stake rewards between validator and delegator are assumed to be agreed upon offchain by those parties and settled externally to the protocol +- **Delegation Authorization and Account Abstraction**: `delegateStake` binds a delegator who becomes the recipient of every subsequent claim and unstake, so it must ask the authority that actually owns the validator address. Since EIP-7702, code size no longer answers that question: a delegated EOA carries a 23-byte `0xef0100 || implementation` designator, and a code-size probe would route the check to whatever wallet program the account currently points at. That program is revocable and, in the permissive case, willing to approve a public digest, so it is not a substitute for the key. The registry matches the designator prefix explicitly and holds EOAs to their secp256k1 key whether delegated or not; only genuine contract accounts authorize through ERC-1271. An operator who has moved to a delegated smart account and no longer holds the underlying key can still onboard: `stake` authorizes off `msg.sender` rather than a signature, and governance may onboard the delegation itself, since the owner path skips the signature check entirely. +- **Ejection Cannot Be Blocked by Validator Account Code**: governance screening at mint time is not durable - a whitelisted holder can attach account code afterwards, including code that rejects every incoming call. Both ejection paths are therefore push-free. `burn` and the slash-to-zero branch of `applySlashes` route the validator's entire stake-backed balance to Issuance and close out the ConsensusNFT without a single call to a validator-controlled address; queued version-change escrow, the one balance an ejection owes back, accrues as a `claimRefund` credit. This matters most for the slash path, which runs inside an epoch-boundary system call where a revert would stall the closing block rather than merely inconvenience governance. ## Geographic Diversity diff --git a/src/consensus/invariants.md b/src/consensus/invariants.md index 1f1f65b..f611929 100644 --- a/src/consensus/invariants.md +++ b/src/consensus/invariants.md @@ -48,12 +48,14 @@ - consensus burns slash all the validator's remaining stake - slashes are applied until the validator outstanding balance reaches 0, - consensus burns and slashes-to-zero immediately retire the validator and eject it from all upcoming committees +- neither ejection path makes a recipient-facing external call: `burn` and the slash-to-zero branch consolidate the validator's entire stake-backed balance on Issuance and then close the ConsensusNFT out through `_burnConsensusNFT`, which moves no value. Governance screening at mint time is not durable (a whitelisted holder can attach account code afterwards, including an EIP-7702 delegation that reverts on every call), so ejection must never depend on the validator or its delegator being callable. Queued version-change escrow, the one balance an ejection owes back, accrues as a `claimRefund` credit - ConsensusRegistry only ever holds staked funds, including on behalf of the initial validator set at network genesis - Issuance only ever holds epoch reward funds, less claims - when unstaking, stake is sourced from the registry - when claiming or unstaking, rewards are sourced from Issuance - claims can revert if Issuance contract runs dry (eg TAO governance problem) but the rewards ledger must continue being updated by applyIncentives and applySlashes - all capital flows to the stake originator, ie the recipient for both stake and rewards is either a validator's delegator if one exists, or the validator itself if not; queue escrow returns are the one exception and flow to the recorded funder +- `delegateStake` accepts a delegation only from the authority that owns the validator address: an EOA is held to its secp256k1 key whether or not it carries an EIP-7702 delegation designator, and only a genuine contract account authorizes through ERC-1271. Code size does not decide this - a delegated EOA has 23 bytes of code - so the designator is matched by its `0xef0100` prefix, which EIP-3541 makes unambiguous. A validator's delegated wallet program is never accepted as a stand-in for its key, since that program is revocable and the digest is public - the boundary is three system calls the protocol sequences within the closing block - applyIncentives, then applySlashes, then concludeEpoch - and that ordering is a security invariant: slashes land on full old-version collateral before the version-queue settlement inside concludeEpoch reads post-slash balances, and the protocol assembles the committee after slashes so ejections are reflected in both the committee contents and the size check - applyIncentives and applySlashes skip sentinel-address and retired entries rather than reverting, so no malformed system-call input can stall the boundary - in-service validator stake versions change only inside concludeEpoch, so reward weights are stable within an epoch: applyIncentives always reads the version that was active for the entire closing epoch diff --git a/src/interfaces/IStakeManager.sol b/src/interfaces/IStakeManager.sol index bb7974c..43ca1c3 100644 --- a/src/interfaces/IStakeManager.sol +++ b/src/interfaces/IStakeManager.sol @@ -142,6 +142,10 @@ interface IStakeManager { /// @notice Ensuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better /// performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations /// so this contract does not perform any (un)compression checks + /// @notice `validatorSig` must come from the authority that owns the validator address itself. For an + /// externally owned account that is its secp256k1 key, whether or not the account has attached an + /// EIP-7702 delegation; a delegated wallet program is not accepted as a stand-in for the key. Only a + /// genuine contract account authorizes through ERC-1271. /// @param deadline Unix timestamp past which `validatorSig` is rejected (ignored for governance calls) function delegateStake( bytes calldata blsPubkey, diff --git a/test/consensus/ConsensusRegistryEIP7702Test.t.sol b/test/consensus/ConsensusRegistryEIP7702Test.t.sol new file mode 100644 index 0000000..edc9227 --- /dev/null +++ b/test/consensus/ConsensusRegistryEIP7702Test.t.sol @@ -0,0 +1,491 @@ +// SPDX-License-Identifier: MIT or Apache-2.0 +pragma solidity 0.8.35; + +import "forge-std/Test.sol"; +import { ConsensusRegistry } from "src/consensus/ConsensusRegistry.sol"; +import { RewardInfo, Slash, IStakeManager } from "src/interfaces/IStakeManager.sol"; +import { IConsensusRegistry } from "src/interfaces/IConsensusRegistry.sol"; +import { ConsensusRegistryTestUtils } from "./ConsensusRegistryTestUtils.sol"; + +/// @dev A wallet program with no ERC-1271 handler whose fallback reverts. Stands in both for a +/// 7702 delegate that cannot answer signature queries and for an account that rejects native TEL. +contract RevertingWallet { + fallback() external payable { + revert("RevertingWallet"); + } +} + +/// @dev A 7702 delegate that approves every digest presented to it, modelling the permissive end +/// of the smart-account spectrum +contract PermissiveWallet { + function isValidSignature(bytes32, bytes calldata) external pure returns (bytes4) { + return 0x1626ba7e; + } + + receive() external payable { } +} + +/// @dev A genuine contract account that answers ERC-1271 against a fixed secp256k1 signer +contract ERC1271Wallet { + address public immutable signer; + + constructor(address signer_) { + signer = signer_; + } + + function isValidSignature(bytes32 hash, bytes calldata signature) external view returns (bytes4) { + if (signature.length != 65) return 0xffffffff; + bytes32 r = bytes32(signature[0:32]); + bytes32 s = bytes32(signature[32:64]); + uint8 v = uint8(signature[64]); + + return ecrecover(hash, v, r, s) == signer ? bytes4(0x1626ba7e) : bytes4(0xffffffff); + } + + receive() external payable { } +} + +/// Coverage for account abstraction reaching addresses the registry treats as validators. +/// +/// Two properties are pinned here. First, `delegateStake` asks the right authority for the +/// validator's approval: an EOA answers with its secp256k1 key whether or not it has attached an +/// EIP-7702 delegation, and only a genuine contract account answers through ERC-1271. Second, the +/// governance-ejection paths - `burn` and the slash-to-zero branch of `applySlashes`, the latter +/// running inside an epoch-boundary system call - push no value to a validator-controlled address +/// and so cannot be blocked by account code a validator attaches after being whitelisted. +contract ConsensusRegistryEIP7702Test is ConsensusRegistryTestUtils { + RevertingWallet internal revertingWallet; + PermissiveWallet internal permissiveWallet; + + /// @dev A validator key distinct from the genesis set and from `validator5` + uint256 internal constant DELEGATED_VALIDATOR_PK = 77; + uint256 internal constant STRANGER_PK = 1337; + + function setUp() public { + consensusRegistry = ConsensusRegistry(0x07E17e17E17e17E17e17E17E17E17e17e17E17e1); + + vm.startStateDiffRecording(); + StakeConfig memory stakeConfig_ = StakeConfig(stakeAmount_, minWithdrawAmount_, epochIssuance_, epochDuration_); + ConsensusRegistry tempRegistry = + new ConsensusRegistry(stakeConfig_, initialValidators, initialBlsPubkeys, initialBLSPops, crOwner); + Vm.AccountAccess[] memory records = vm.stopAndReturnStateDiff(); + bytes32[] memory slots = saveWrittenSlots(address(tempRegistry), records); + copyContractState(address(tempRegistry), address(consensusRegistry), slots); + + // simulate protocol allocation of validators' initial stake + registryGenesisBal = stakeAmount_ * initialValidators.length; + vm.deal(address(consensusRegistry), registryGenesisBal); + sysAddress = consensusRegistry.SYSTEM_ADDRESS(); + + vm.deal(crOwner, epochIssuance_); + vm.prank(crOwner); + consensusRegistry.allocateIssuance{ value: epochIssuance_ }(); + + revertingWallet = new RevertingWallet(); + permissiveWallet = new PermissiveWallet(); + } + + /* + * helpers + */ + + /// @dev Mints a ConsensusNFT to `validatorAddress` and returns a funded delegator + function _prepareDelegation(address validatorAddress) internal returns (address delegator) { + vm.prank(crOwner); + consensusRegistry.mint(validatorAddress); + + delegator = _addressFromPrivateKey(42); + vm.deal(delegator, stakeAmount_); + } + + function _sign(uint256 pk, bytes32 digest) internal pure returns (bytes memory) { + (uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest); + return abi.encodePacked(r, s, v); + } + + /* + * delegateStake: an EOA is held to its key, delegated or not + */ + + /// A 7702-delegated validator whose wallet program has no ERC-1271 handler is still onboardable: + /// the registry recovers against the validator's own key rather than querying the delegate. + function test_delegateStake_delegatedEOA_acceptsKeySignature() public { + address validatorAddress = vm.addr(DELEGATED_VALIDATOR_PK); + address delegator = _prepareDelegation(validatorAddress); + bytes memory blsPubkey = _blsDummyPubkeyFromSecret(DELEGATED_VALIDATOR_PK); + bytes memory blsSig = _blsDummySigFromSecret(DELEGATED_VALIDATOR_PK); + + uint256 deadline = block.timestamp + 1 days; + bytes memory validatorSig = _sign( + DELEGATED_VALIDATOR_PK, consensusRegistry.delegationDigest(blsPubkey, validatorAddress, delegator, deadline) + ); + + // the validator upgrades to a smart account that answers no signature queries at all + vm.signAndAttachDelegation(address(revertingWallet), DELEGATED_VALIDATOR_PK); + assertEq(validatorAddress.code.length, 23, "expected a 7702 delegation designator"); + + vm.prank(delegator); + consensusRegistry.delegateStake{ value: stakeAmount_ }( + blsPubkey, IStakeManager.ProofOfPossession(blsSig), validatorAddress, validatorSig, deadline + ); + + assertTrue(consensusRegistry.isDelegated(validatorAddress)); + assertEq(uint8(consensusRegistry.getValidator(validatorAddress).currentStatus), uint8(ValidatorStatus.Staked)); + } + + /// The EIP-2098 compact signature encoding is accepted on the delegated-EOA path too. + function test_delegateStake_delegatedEOA_acceptsCompactSignature() public { + address validatorAddress = vm.addr(DELEGATED_VALIDATOR_PK); + address delegator = _prepareDelegation(validatorAddress); + bytes memory blsPubkey = _blsDummyPubkeyFromSecret(DELEGATED_VALIDATOR_PK); + bytes memory blsSig = _blsDummySigFromSecret(DELEGATED_VALIDATOR_PK); + + uint256 deadline = block.timestamp + 1 days; + bytes32 digest = consensusRegistry.delegationDigest(blsPubkey, validatorAddress, delegator, deadline); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(DELEGATED_VALIDATOR_PK, digest); + bytes32 vs = bytes32((uint256(v - 27) << 255) | uint256(s)); + bytes memory validatorSig = abi.encodePacked(r, vs); + assertEq(validatorSig.length, 64); + + vm.signAndAttachDelegation(address(revertingWallet), DELEGATED_VALIDATOR_PK); + + vm.prank(delegator); + consensusRegistry.delegateStake{ value: stakeAmount_ }( + blsPubkey, IStakeManager.ProofOfPossession(blsSig), validatorAddress, validatorSig, deadline + ); + + assertTrue(consensusRegistry.isDelegated(validatorAddress)); + } + + /// A delegate that rubber-stamps every digest cannot stand in for the validator's key: the + /// digest is public, so an approval-by-delegate would let anyone bind themselves as delegator + /// and become the recipient of every subsequent claim and unstake. + function testRevert_delegateStake_permissiveDelegateCannotAuthorize() public { + address validatorAddress = vm.addr(DELEGATED_VALIDATOR_PK); + _prepareDelegation(validatorAddress); + bytes memory blsPubkey = _blsDummyPubkeyFromSecret(DELEGATED_VALIDATOR_PK); + bytes memory blsSig = _blsDummySigFromSecret(DELEGATED_VALIDATOR_PK); + + address stranger = _addressFromPrivateKey(STRANGER_PK); + vm.deal(stranger, stakeAmount_); + uint256 deadline = block.timestamp + 1 days; + + vm.signAndAttachDelegation(address(permissiveWallet), DELEGATED_VALIDATOR_PK); + assertEq(validatorAddress.code.length, 23); + + vm.prank(stranger); + vm.expectRevert(abi.encodeWithSelector(IConsensusRegistry.NotValidator.selector, validatorAddress)); + consensusRegistry.delegateStake{ value: stakeAmount_ }( + blsPubkey, IStakeManager.ProofOfPossession(blsSig), validatorAddress, hex"deadbeef", deadline + ); + + assertFalse(consensusRegistry.isDelegated(validatorAddress)); + } + + /// A well-formed signature from the wrong key is rejected even when the delegate would approve it. + function testRevert_delegateStake_delegatedEOA_wrongKeySignature() public { + address validatorAddress = vm.addr(DELEGATED_VALIDATOR_PK); + _prepareDelegation(validatorAddress); + bytes memory blsPubkey = _blsDummyPubkeyFromSecret(DELEGATED_VALIDATOR_PK); + bytes memory blsSig = _blsDummySigFromSecret(DELEGATED_VALIDATOR_PK); + + address stranger = _addressFromPrivateKey(STRANGER_PK); + vm.deal(stranger, stakeAmount_); + uint256 deadline = block.timestamp + 1 days; + bytes memory strangerSig = + _sign(STRANGER_PK, consensusRegistry.delegationDigest(blsPubkey, validatorAddress, stranger, deadline)); + + vm.signAndAttachDelegation(address(permissiveWallet), DELEGATED_VALIDATOR_PK); + + vm.prank(stranger); + vm.expectRevert(abi.encodeWithSelector(IConsensusRegistry.NotValidator.selector, validatorAddress)); + consensusRegistry.delegateStake{ value: stakeAmount_ }( + blsPubkey, IStakeManager.ProofOfPossession(blsSig), validatorAddress, strangerSig, deadline + ); + } + + /// Designator detection matches the `0xef0100` prefix, not merely the 23-byte length: a real + /// contract that happens to be 23 bytes long is still a contract and still answers via ERC-1271. + function testRevert_delegateStake_twentyThreeByteContractIsNotADesignator() public { + address validatorAddress = vm.addr(DELEGATED_VALIDATOR_PK); + address delegator = _prepareDelegation(validatorAddress); + bytes memory blsPubkey = _blsDummyPubkeyFromSecret(DELEGATED_VALIDATOR_PK); + bytes memory blsSig = _blsDummySigFromSecret(DELEGATED_VALIDATOR_PK); + + uint256 deadline = block.timestamp + 1 days; + bytes memory validatorSig = _sign( + DELEGATED_VALIDATOR_PK, consensusRegistry.delegationDigest(blsPubkey, validatorAddress, delegator, deadline) + ); + + // 23 bytes of real (if useless) contract code: returns empty data, so the ERC-1271 probe + // it is correctly routed to reads back no magic value + bytes memory notADesignator = hex"60006000f3000000000000000000000000000000000000"; + assertEq(notADesignator.length, 23); + vm.etch(validatorAddress, notADesignator); + + vm.prank(delegator); + vm.expectRevert(abi.encodeWithSelector(IConsensusRegistry.NotValidator.selector, validatorAddress)); + consensusRegistry.delegateStake{ value: stakeAmount_ }( + blsPubkey, IStakeManager.ProofOfPossession(blsSig), validatorAddress, validatorSig, deadline + ); + } + + /// A 65-byte signature carrying a `v` outside {27, 28} must be rejected outright rather than + /// recovering to some unrelated address. + function testRevert_delegateStake_delegatedEOA_bogusRecoveryId() public { + address validatorAddress = vm.addr(DELEGATED_VALIDATOR_PK); + address delegator = _prepareDelegation(validatorAddress); + bytes memory blsPubkey = _blsDummyPubkeyFromSecret(DELEGATED_VALIDATOR_PK); + bytes memory blsSig = _blsDummySigFromSecret(DELEGATED_VALIDATOR_PK); + + uint256 deadline = block.timestamp + 1 days; + bytes32 digest = consensusRegistry.delegationDigest(blsPubkey, validatorAddress, delegator, deadline); + (, bytes32 r, bytes32 s) = vm.sign(DELEGATED_VALIDATOR_PK, digest); + + vm.signAndAttachDelegation(address(revertingWallet), DELEGATED_VALIDATOR_PK); + + vm.prank(delegator); + vm.expectRevert(abi.encodeWithSelector(IConsensusRegistry.NotValidator.selector, validatorAddress)); + consensusRegistry.delegateStake{ value: stakeAmount_ }( + blsPubkey, + IStakeManager.ProofOfPossession(blsSig), + validatorAddress, + abi.encodePacked(r, s, uint8(99)), + deadline + ); + } + + /// An empty signature recovers to the zero address, which must not satisfy the check. + function testRevert_delegateStake_delegatedEOA_emptySignature() public { + address validatorAddress = vm.addr(DELEGATED_VALIDATOR_PK); + address delegator = _prepareDelegation(validatorAddress); + bytes memory blsPubkey = _blsDummyPubkeyFromSecret(DELEGATED_VALIDATOR_PK); + bytes memory blsSig = _blsDummySigFromSecret(DELEGATED_VALIDATOR_PK); + uint256 deadline = block.timestamp + 1 days; + + vm.signAndAttachDelegation(address(revertingWallet), DELEGATED_VALIDATOR_PK); + + vm.prank(delegator); + vm.expectRevert(abi.encodeWithSelector(IConsensusRegistry.NotValidator.selector, validatorAddress)); + consensusRegistry.delegateStake{ value: stakeAmount_ }( + blsPubkey, IStakeManager.ProofOfPossession(blsSig), validatorAddress, "", deadline + ); + } + + /// The delegated and undelegated routes must accept exactly the same signature set, or the + /// designator branch would be its own authorization surface. Probed at the known divergence + /// candidate: neither route screens high-s, so `(r, n-s, v^1)` must be accepted by both or + /// neither. It is inert here regardless - the digest binds the delegator and a nonce, and a + /// successful call leaves `Undefined` status behind - but the two routes must not disagree. + function test_delegateStake_delegatedAndPlainRoutesAcceptSameSignatures() public { + address validatorAddress = vm.addr(DELEGATED_VALIDATOR_PK); + address delegator = _prepareDelegation(validatorAddress); + vm.deal(delegator, stakeAmount_ * 2); + uint256 deadline = block.timestamp + 1 days; + bytes memory malleated = _malleatedSignature(DELEGATED_VALIDATOR_PK, delegator, deadline); + + uint256 snapshot = vm.snapshotState(); + bool acceptedPlain = _tryDelegateStake(DELEGATED_VALIDATOR_PK, delegator, malleated, deadline); + vm.revertToState(snapshot); + + vm.signAndAttachDelegation(address(revertingWallet), DELEGATED_VALIDATOR_PK); + assertEq(validatorAddress.code.length, 23); + bool acceptedDelegated = _tryDelegateStake(DELEGATED_VALIDATOR_PK, delegator, malleated, deadline); + + assertTrue(acceptedPlain); + assertEq(acceptedPlain, acceptedDelegated, "designator branch diverged from the plain EOA branch"); + } + + /// @dev The high-s counterpart of a valid signature: recovers the same signer, different bytes + function _malleatedSignature(uint256 pk, address delegator, uint256 deadline) internal view returns (bytes memory) { + uint256 secp256k1n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141; + bytes32 digest = + consensusRegistry.delegationDigest(_blsDummyPubkeyFromSecret(pk), vm.addr(pk), delegator, deadline); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest); + + return abi.encodePacked(r, bytes32(secp256k1n - uint256(s)), uint8(v == 27 ? 28 : 27)); + } + + /// @dev Attempts a delegation and reports acceptance without reverting the test + function _tryDelegateStake( + uint256 pk, + address delegator, + bytes memory signature, + uint256 deadline + ) + internal + returns (bool accepted) + { + vm.prank(delegator); + (accepted,) = address(consensusRegistry).call{ value: stakeAmount_ }( + abi.encodeCall( + IStakeManager.delegateStake, + ( + _blsDummyPubkeyFromSecret(pk), + IStakeManager.ProofOfPossession(_blsDummySigFromSecret(pk)), + vm.addr(pk), + signature, + deadline + ) + ) + ); + } + + /* + * delegateStake: genuine contract accounts still authorize through ERC-1271 + */ + + function test_delegateStake_contractValidator_usesERC1271() public { + uint256 walletSignerPk = 88; + ERC1271Wallet wallet = new ERC1271Wallet(vm.addr(walletSignerPk)); + address validatorAddress = address(wallet); + address delegator = _prepareDelegation(validatorAddress); + bytes memory blsPubkey = _blsDummyPubkeyFromSecret(walletSignerPk); + bytes memory blsSig = _blsDummySigFromSecret(walletSignerPk); + + uint256 deadline = block.timestamp + 1 days; + bytes memory validatorSig = + _sign(walletSignerPk, consensusRegistry.delegationDigest(blsPubkey, validatorAddress, delegator, deadline)); + + vm.prank(delegator); + consensusRegistry.delegateStake{ value: stakeAmount_ }( + blsPubkey, IStakeManager.ProofOfPossession(blsSig), validatorAddress, validatorSig, deadline + ); + + assertTrue(consensusRegistry.isDelegated(validatorAddress)); + assertEq(uint8(consensusRegistry.getValidator(validatorAddress).currentStatus), uint8(ValidatorStatus.Staked)); + } + + function testRevert_delegateStake_contractValidator_rejectsBadSignature() public { + uint256 walletSignerPk = 88; + ERC1271Wallet wallet = new ERC1271Wallet(vm.addr(walletSignerPk)); + address validatorAddress = address(wallet); + address delegator = _prepareDelegation(validatorAddress); + bytes memory blsPubkey = _blsDummyPubkeyFromSecret(walletSignerPk); + bytes memory blsSig = _blsDummySigFromSecret(walletSignerPk); + + uint256 deadline = block.timestamp + 1 days; + bytes memory strangerSig = + _sign(STRANGER_PK, consensusRegistry.delegationDigest(blsPubkey, validatorAddress, delegator, deadline)); + + vm.prank(delegator); + vm.expectRevert(abi.encodeWithSelector(IConsensusRegistry.NotValidator.selector, validatorAddress)); + consensusRegistry.delegateStake{ value: stakeAmount_ }( + blsPubkey, IStakeManager.ProofOfPossession(blsSig), validatorAddress, strangerSig, deadline + ); + } + + /* + * governance ejection survives hostile validator account code + */ + + /// Governance whitelists an address it has screened; the holder can attach a reverting + /// delegation afterwards. `burn` must remain callable regardless. + function test_burn_notBlockedByRevertingValidatorCode() public { + uint256 issuanceBalBefore = issuance.balance; + + vm.signAndAttachDelegation(address(revertingWallet), 1); + assertEq(validator1.code.length, 23); + (bool reachable,) = validator1.call{ value: 0 }(""); + assertFalse(reachable, "validator account must reject plain calls for this test to mean anything"); + + vm.prank(crOwner); + consensusRegistry.burn(validator1); + + assertTrue(consensusRegistry.isRetired(validator1)); + assertEq(issuance.balance, issuanceBalBefore + stakeAmount_, "stake confiscated to Issuance"); + (uint256 outstanding,,) = consensusRegistry.getBalanceBreakdown(validator1); + assertEq(outstanding, 0); + _assertSetInvariant(); + } + + /// The same property inside the epoch-boundary system call, where a revert would stall the + /// closing block rather than merely inconvenience governance. + function test_applySlashes_slashToZero_notBlockedByRevertingValidatorCode() public { + uint256 issuanceBalBefore = issuance.balance; + + vm.signAndAttachDelegation(address(revertingWallet), 1); + + Slash[] memory slashes = new Slash[](1); + slashes[0] = Slash(validator1, stakeAmount_); + vm.prank(sysAddress); + consensusRegistry.applySlashes(slashes); + + assertTrue(consensusRegistry.isRetired(validator1)); + assertEq(issuance.balance, issuanceBalBefore + stakeAmount_); + _assertSetInvariant(); + + // the boundary still closes over the surviving committee + vm.prank(crOwner); + consensusRegistry.setNextCommitteeSize(3); + address[] memory survivors = new address[](3); + survivors[0] = validator2; + survivors[1] = validator3; + survivors[2] = validator4; + _sortAddresses(survivors); + vm.prank(sysAddress); + _concludeEpoch(survivors); + } + + /// A delegated validator's payout recipient is its delegator, so a hostile delegator must not + /// be able to block the burn either. + function test_burn_notBlockedByRevertingDelegator() public { + address validatorAddress = vm.addr(DELEGATED_VALIDATOR_PK); + vm.prank(crOwner); + consensusRegistry.mint(validatorAddress); + + address delegator = address(revertingWallet); + vm.deal(delegator, stakeAmount_); + bytes memory blsPubkey = _blsDummyPubkeyFromSecret(DELEGATED_VALIDATOR_PK); + bytes memory blsSig = _blsDummySigFromSecret(DELEGATED_VALIDATOR_PK); + + uint256 deadline = block.timestamp + 1 days; + bytes memory validatorSig = _sign( + DELEGATED_VALIDATOR_PK, consensusRegistry.delegationDigest(blsPubkey, validatorAddress, delegator, deadline) + ); + + vm.prank(delegator); + consensusRegistry.delegateStake{ value: stakeAmount_ }( + blsPubkey, IStakeManager.ProofOfPossession(blsSig), validatorAddress, validatorSig, deadline + ); + assertTrue(consensusRegistry.isDelegated(validatorAddress)); + + uint256 issuanceBalBefore = issuance.balance; + vm.prank(crOwner); + consensusRegistry.burn(validatorAddress); + + assertTrue(consensusRegistry.isRetired(validatorAddress)); + assertEq(issuance.balance, issuanceBalBefore + stakeAmount_); + assertEq(delegator.balance, 0, "delegated stake is confiscated, not returned"); + _assertSetInvariant(); + } + + /// Escrow held for a queued stake-version change is the one balance a burn owes back. It is + /// credited for pull-based claiming rather than pushed, so hostile funder code cannot block + /// the burn. + function test_burn_creditsEscrowRefundWhenValidatorCodeReverts() public { + // in service (PendingActivation) so the request queues rather than settling immediately + vm.deal(validator5, stakeAmount_); + _addFifthValidator(); + + uint256 raisedStake = stakeAmount_ * 2; + uint8 newVersion = _fuzz_upgradeGlobalStakeVersion(raisedStake); + uint256 deficit = raisedStake - stakeAmount_; + + vm.deal(validator5, deficit); + vm.prank(validator5); + consensusRegistry.requestStakeVersionChange{ value: deficit }(validator5, newVersion); + assertEq(consensusRegistry.getPendingVersionChanges().length, 1); + + // only now does the validator attach account code that rejects every incoming call + vm.signAndAttachDelegation(address(revertingWallet), validator5Secret); + + vm.prank(crOwner); + consensusRegistry.burn(validator5); + + assertTrue(consensusRegistry.isRetired(validator5)); + assertEq(consensusRegistry.getPendingVersionChanges().length, 0); + assertEq(consensusRegistry.claimableRefunds(validator5), deficit, "escrow credited, not pushed"); + _assertSetInvariant(); + } +}