From eed92e4f0cd97e9393e5e303cce60a14f9d369b2 Mon Sep 17 00:00:00 2001 From: Geoff Stuart Date: Wed, 18 Sep 2024 10:36:12 -0400 Subject: [PATCH] Simplify churn tracking --- .../ERC20TokenStakingManager/ERC20TokenStakingManager.go | 2 +- .../NativeTokenStakingManager/NativeTokenStakingManager.go | 2 +- .../go/staking/PoAValidatorManager/PoAValidatorManager.go | 2 +- contracts/staking/ValidatorManager.sol | 4 +++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go index a63c24f7a..ebb7f3201 100644 --- a/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -76,7 +76,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activeValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"startingWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageNonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"startedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"endedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorManagerSettings\",\"components\":[{\"name\":\"baseSettings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"pChainBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"requirements\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorRequirements\",\"components\":[{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendUpdateDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valueToWeight\",\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"DelegationEnded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegatorAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161515d38038061515d83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6150108061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061013d575f3560e01c806376f78621116100b4578063b771b3bc11610079578063b771b3bc146102d9578063ba3a4b97146102ff578063bee0a03f14610312578063c974d1b614610325578063d5f20ff61461032d578063df93d8de1461034d575f80fd5b806376f786211461027a57806398f3e2b41461028d5780639e1bc4ef146102a0578063a13fd29d146102b3578063a3a65e48146102c6575f80fd5b8063330a0a3a11610105578063330a0a3a146101ff57806335455ded14610212578063467ef06f1461022e5780635297fae614610241578063620658561461025457806366435abf14610267575f80fd5b80630118acc4146101415780630322ed98146101565780630cdd098514610169578063151d30d1146101ba5780632e2194d8146101d4575b5f80fd5b61015461014f36600461451a565b610357565b005b610154610164366004614555565b61070e565b6101a7610177366004614555565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b6101c2600a81565b60405160ff90911681526020016101b1565b6101e76101e2366004614555565b6108de565b6040516001600160401b0390911681526020016101b1565b61015461020d366004614580565b6108f4565b61021b61271081565b60405161ffff90911681526020016101b1565b61015461023c3660046145be565b6109d3565b61015461024f3660046145d7565b6109fe565b6101a7610262366004614613565b610bce565b6101e7610275366004614555565b610be7565b61015461028836600461451a565b610bfb565b61015461029b3660046145d7565b610cdb565b6101a76102ae36600461462e565b610eea565b6101a76102c136600461464e565b610efd565b6101546102d43660046145be565b610f29565b6102e76005600160991b0181565b6040516001600160a01b0390911681526020016101b1565b61015461030d366004614555565b6110e6565b610154610320366004614555565b61136c565b6101c2601481565b61034061033b366004614555565b611480565b6040516101b191906146c3565b6101e76202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f80516020614f648339815191529184156103a9576103a6828561155f565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156103db576103db6146af565b60048111156103ec576103ec6146af565b8152815461010090046001600160a01b031660208201526001820154604082015260028201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c083015260039092015490911660e09091015290505f61046884611480565b905060028251600481111561047f5761047f6146af565b146104d15760405162461bcd60e51b815260206004820152602a60248201525f80516020614f848339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208201516001600160a01b031633146105365760405162461bcd60e51b815260206004820152603360248201525f80516020614f848339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016104c8565b6003825280516002906005811115610550576105506146af565b03610594575f82606001518260a0015161056a91906147b1565b905061057685826117fb565b506001600160401b0390811660e0850152421660a0840152506105b7565b60808101516001600160401b0390811660e0808501919091528201511660a08301525b5f88815260068601602052604090208251815484929190829060ff191660018360048111156105e8576105e86146af565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b031990911617815560408083015160018301556060830151600283018054608086015160a08088015160c08901516001600160401b03908116600160c01b026001600160c01b03928216600160801b02929092166001600160801b03948216600160401b026001600160801b0319909616978216979097179490941792909216949094171790915560e090940151600390930180549390941667ffffffffffffffff199390931692909217909255830151905185918a917f5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69916106fc916001600160401b0391909116815260200190565b60405180910390a35050505050505050565b5f8181525f80516020614fe483398151915260205260408082208151610100810190925280545f80516020614fa483398151915293929190829060ff16600581111561075c5761075c6146af565b600581111561076d5761076d6146af565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156107f2576107f26146af565b146108575760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016104c8565b6005600160991b016001600160a01b031663ee5b48eb61087c8584608001515f611952565b6040518263ffffffff1660e01b815260040161089891906147f3565b6020604051808303815f875af11580156108b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d89190614825565b50505050565b5f6108ee64e8d4a510008361483c565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061093d575080546001600160401b03808416911610155b1561095b5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556109868484611b6f565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f6109dd82611b89565b90506109fa81606001516001600160401b03168260400151611efc565b5050565b5f80516020614f648339815191525f610a1684611f32565b90505f80610a278360400151612113565b50915091505f610a3683611480565b9050816001600160401b031681608001516001600160401b03161015610a6e5760405162461bcd60e51b81526004016104c89061485b565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610ab35760405162461bcd60e51b81526004016104c89061489d565b60015f87815260068701602052604090205460ff166004811115610ad957610ad96146af565b14610b425760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016104c8565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f6108ee6001600160401b03831664e8d4a510006148e6565b5f610bf182611480565b60a0015192915050565b5f80516020614f648339815191525f610c1385611480565b5f86815260058401602052604090205460c0820151919250610c4591620100009091046001600160401b0316906148fd565b6001600160401b0316421015610cb95760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016104c8565b8315610ccb57610cc9858461155f565b505b610cd48561234e565b5050505050565b5f80516020614f648339815191525f610cf384611f32565b90505f80610d048360400151612113565b50915091505f610d1383611480565b9050816001600160401b031681608001516001600160401b03161015610d4b5760405162461bcd60e51b81526004016104c89061485b565b5f8681526006860160205260409020600301546001600160401b0380841691161115610d895760405162461bcd60e51b81526004016104c89061489d565b60035f87815260068701602052604090205460ff166004811115610daf57610daf6146af565b14610e035760405162461bcd60e51b815260206004820152603160248201525f80516020614f848339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016104c8565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e0840152610ea891611efc565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f610ef6833384612667565b9392505050565b5f610f066129d3565b610f11848484612a0a565b9050610ef660015f80516020614fc483398151915255565b5f80516020614fa48339815191525f610f4183611f32565b90505f80610f528360400151612c43565b9150915080610fb45760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016104c8565b5f82815260078501602052604081208054610fce9061491d565b9050118015611000575060015f83815260088601602052604090205460ff166005811115610ffe57610ffe6146af565b145b61101c5760405162461bcd60e51b81526004016104c890614955565b5f828152600785016020526040812061103491614462565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f80516020614f6483398151915293929190829060ff166004811115611147576111476146af565b6004811115611158576111586146af565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156111df576111df6146af565b14806111fd57506003815160048111156111fb576111fb6146af565b145b6112515760405162461bcd60e51b815260206004820152603260248201525f80516020614f84833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016104c8565b5f61125f8260400151611480565b905080608001516001600160401b03165f036112e35760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016104c8565b6005600160991b016001600160a01b031663ee5b48eb611310846040015184608001518560a00151611952565b6040518263ffffffff1660e01b815260040161132c91906147f3565b6020604051808303815f875af1158015611348573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd49190614825565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020614fa48339815191529291906113b49061491d565b90501180156113e6575060015f83815260088301602052604090205460ff1660058111156113e4576113e46146af565b145b6114025760405162461bcd60e51b81526004016104c890614955565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161143b919060040161499c565b6020604051808303815f875af1158015611457573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147b9190614825565b505050565b611488614499565b5f8281525f80516020614fe48339815191526020526040908190208151610100810190925280545f80516020614fa4833981519152929190829060ff1660058111156114d6576114d66146af565b60058111156114e7576114e76146af565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156115aa573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115d19190810190614a9d565b91509150806116345760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016104c8565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611677573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169b9190614825565b8251146116ff5760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016104c8565b60208201516001600160a01b0316156117755760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016104c8565b5f806117848460400151612de4565b915091508187146117f15760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016104c8565b9695505050505050565b5f8281525f80516020614fe4833981519152602052604081206003015481905f80516020614fa483398151915290600160401b90046001600160401b03166118438582612fbc565b5f61184d876131b3565b5f8881526008850160205260408120600301805467ffffffffffffffff60401b1916600160401b6001600160401b038b16021790559091506005600160991b0163ee5b48eb61189d8a858b611952565b6040518263ffffffff1660e01b81526004016118b991906147f3565b6020604051808303815f875af11580156118d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118f99190614825565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b60028110156119cb5761198b816001614b85565b6119969060086148e6565b5081515f908390839081106119ad576119ad614b98565b60200101906001600160f81b03191690815f1a905350600101611977565b505f5b6004811015611a2e576119e2816003614b85565b6119ed9060086148e6565b6001901c60f81b82611a00836002614bac565b81518110611a1057611a10614b98565b60200101906001600160f81b03191690815f1a9053506001016119ce565b505f5b6020811015611a9057611a4581601f614b85565b611a509060086148e6565b86901c60f81b82611a62836006614bac565b81518110611a7257611a72614b98565b60200101906001600160f81b03191690815f1a905350600101611a31565b505f5b6008811015611afb57611aa7816007614b85565b611ab29060086148e6565b6001600160401b038616901c60f81b82611acd836026614bac565b81518110611add57611add614b98565b60200101906001600160f81b03191690815f1a905350600101611a93565b505f5b6008811015611b6657611b12816007614b85565b611b1d9060086148e6565b6001600160401b038516901c60f81b82611b3883602e614bac565b81518110611b4857611b48614b98565b60200101906001600160f81b03191690815f1a905350600101611afe565b50949350505050565b611b77613235565b611b8082613280565b6109fa816132ef565b611b91614499565b5f80516020614fa48339815191525f611ba984611f32565b90505f80611bba8360400151612c43565b915091508015611c1f5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016104c8565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611c5157611c516146af565b6005811115611c6257611c626146af565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611ce957611ce96146af565b1480611d075750600182516005811115611d0557611d056146af565b145b611d665760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016104c8565b600382516005811115611d7b57611d7b6146af565b03611d8857506004611d8c565b5060055b6020808301515f90815260098801909152604081205581816005811115611db557611db56146af565b90816005811115611dc857611dc86146af565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611dfc57611dfc6146af565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115611ec757611ec76146af565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546109fa906001600160a01b031682846133a3565b60408051606080820183525f8083526020830181905292820152905f80516020614fa48339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611fa7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fce9190810190614a9d565b91509150806120355760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016104c8565b82548251146120985760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016104c8565b60208201516001600160a01b03161561210b5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016104c8565b509392505050565b5f805f83516036146121375760405162461bcd60e51b81526004016104c890614bbf565b5f805b60028110156121865761214e816001614b85565b6121599060086148e6565b61ffff1686828151811061216f5761216f614b98565b016020015160f81c901b919091179060010161213a565b5061ffff8116156121a95760405162461bcd60e51b81526004016104c890614c08565b5f805b6004811015612204576121c0816003614b85565b6121cb9060086148e6565b63ffffffff16876121dd836002614bac565b815181106121ed576121ed614b98565b016020015160f81c901b91909117906001016121ac565b5063ffffffff811660031461222b5760405162461bcd60e51b81526004016104c890614c4b565b5f805b60208110156122805761224281601f614b85565b61224d9060086148e6565b88612259836006614bac565b8151811061226957612269614b98565b016020015160f81c901b919091179060010161222e565b505f805b60088110156122df57612298816007614b85565b6122a39060086148e6565b6001600160401b0316896122b8836026614bac565b815181106122c8576122c8614b98565b016020015160f81c901b9190911790600101612284565b505f805b600881101561233e576122f7816007614b85565b6123029060086148e6565b6001600160401b03168a61231783602e614bac565b8151811061232757612327614b98565b016020015160f81c901b91909117906001016122e3565b5091989097509095509350505050565b5f8181525f80516020614fe483398151915260205260408082208151610100810190925280545f80516020614fa483398151915293929190829060ff16600581111561239c5761239c6146af565b60058111156123ad576123ad6146af565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e09091015290915081516005811115612435576124356146af565b146124915760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016104c8565b60408101516001600160a01b0316336001600160a01b03161461250b5760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016104c8565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561254f5761254f6146af565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f61261284826117fb565b60a0840151604080516001600160401b03909216825242602083015291935083925086917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a350505050565b5f6126706129d3565b5f80516020614f648339815191525f61268b6101e285613402565b90505f61269787611480565b90506002815160058111156126ae576126ae6146af565b1461270d5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016104c8565b5f828260a0015161271e91906148fd565b60048501546060840151919250612740916001600160401b0390911690614c92565b6001600160401b0316816001600160401b031611156127bf5760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016104c8565b5f806127cb8a846117fb565b915091505f8a836040516020016127f992919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815282825280516020909101206101008301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905284835260068b01909152902081518154829060ff19166001836004811115612894576128946146af565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49650505050505050610ef660015f80516020614fc483398151915255565b5f80516020614fc4833981519152805460011901612a0457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020614f64833981519152906001600160401b0316612a566040860160208701614613565b6001600160401b03161015612ac55760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016104c8565b6003810154612ad76020860186614ccc565b61ffff1610158015612afb5750612710612af46020860186614ccc565b61ffff1611155b612b175760405162461bcd60e51b81526004016104c890614ce7565b8054831015612b7a5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016104c8565b8060010154831115612be15760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016104c8565b5f612beb84613402565b90505f612bf7826108de565b90505f612c048883613438565b5f81815260058601602052604090209091508790612c228282614d32565b509098975050505050505050565b60015f80516020614fc483398151915255565b5f808251602714612c665760405162461bcd60e51b81526004016104c890614bbf565b5f805b6002811015612cb557612c7d816001614b85565b612c889060086148e6565b61ffff16858281518110612c9e57612c9e614b98565b016020015160f81c901b9190911790600101612c69565b5061ffff811615612cd85760405162461bcd60e51b81526004016104c890614c08565b5f805b6004811015612d3357612cef816003614b85565b612cfa9060086148e6565b63ffffffff1686612d0c836002614bac565b81518110612d1c57612d1c614b98565b016020015160f81c901b9190911790600101612cdb565b5063ffffffff8116600214612d5a5760405162461bcd60e51b81526004016104c890614c4b565b5f805b6020811015612daf57612d7181601f614b85565b612d7c9060086148e6565b87612d88836006614bac565b81518110612d9857612d98614b98565b016020015160f81c901b9190911790600101612d5d565b505f86602681518110612dc457612dc4614b98565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e14612e075760405162461bcd60e51b81526004016104c890614bbf565b5f805b6002811015612e5657612e1e816001614b85565b612e299060086148e6565b61ffff16858281518110612e3f57612e3f614b98565b016020015160f81c901b9190911790600101612e0a565b5061ffff811615612e795760405162461bcd60e51b81526004016104c890614c08565b5f805b6004811015612ed457612e90816003614b85565b612e9b9060086148e6565b63ffffffff1686612ead836002614bac565b81518110612ebd57612ebd614b98565b016020015160f81c901b9190911790600101612e7c565b5063ffffffff8116600414612efb5760405162461bcd60e51b81526004016104c890614c4b565b5f805b6020811015612f5057612f1281601f614b85565b612f1d9060086148e6565b87612f29836006614bac565b81518110612f3957612f39614b98565b016020015160f81c901b9190911790600101612efe565b505f805b6008811015612faf57612f68816007614b85565b612f739060086148e6565b6001600160401b031688612f88836026614bac565b81518110612f9857612f98614b98565b016020015160f81c901b9190911790600101612f54565b5090969095509350505050565b5f80516020614fa48339815191525f6001600160401b038084169085161115612ff057612fe983856147b1565b9050612ffd565b612ffa84846147b1565b90505b6040805160808101825260038401548082526004850154602083015260058501549282019290925260068401546001600160401b031660608201524291158061305f57506002840154815161305b916001600160401b031690614bac565b8210155b15613085576001600160401b0383166060820152818152604081015160208201526130a4565b828160600181815161309791906148fd565b6001600160401b03169052505b60608101516130b4906064614c92565b602082015160028601546001600160401b0392909216916130df9190600160401b900460ff166148e6565b10156131435760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016104c8565b61314d85876147b1565b6001600160401b0316816040018181516131679190614bac565b905250805160038501556020810151600485015560408101516005850155606001516006909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020614fe48339815191526020526040812060030180545f80516020614fa4833981519152916001600160401b0390911690836131f683614d88565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661327e57604051631afcd79f60e31b815260040160405180910390fd5b565b613288613235565b61329181613973565b6132ec608082013560a08301356132ae60e0850160c08601614613565b6132bf610100860160e08701614ccc565b61ffff166132d561012087016101008801614dad565b6132e761014088016101208901614dcd565b613994565b50565b6132f7613235565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab006001600160a01b0382166133835760405162461bcd60e51b815260206004820152602c60248201527f4552433230546f6b656e5374616b696e674d616e616765723a207a65726f207460448201526b6f6b656e206164647265737360a01b60648201526084016104c8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b0383811660248301526044820183905261147b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613bd8565b5f6108ee827f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546001600160a01b031690613c39565b5f5f80516020614fa4833981519152426134586040860160208701614613565b6001600160401b0316116134ca5760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016104c8565b6134da6040850160208601614613565b6001600160401b03166134f06202a30042614bac565b116135635760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016104c8565b83356135bb5760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016104c8565b83355f9081526009820160205260409020541561362b5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016104c8565b6136386040850185614de8565b905060301461369f5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016104c8565b6136a9835f612fbc565b5f806137436040518060a0016040528085600101548152602001885f01358152602001876001600160401b031681526020018860200160208101906136ee9190614613565b6001600160401b0316815260200161370960408a018a614de8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613d9b565b5f828152600786016020526040902091935091506137618282614e6e565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061378e9085906004016147f3565b6020604051808303815f875af11580156137aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137ce9190614825565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff19166001836005811115613850576138506146af565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b9161394591908e01908e01614613565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61397b613235565b613983614140565b61398b614150565b6132ec81614158565b61399c613235565b5f80516020614f6483398151915283613a085760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016104c8565b612710841115613a2a5760405162461bcd60e51b81526004016104c890614ce7565b85871115613a925760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016104c8565b5f8360ff1611613aff5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016104c8565b600a60ff84161115613b715760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016104c8565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f613bec6001600160a01b03841683614305565b905080515f14158015613c10575080806020019051810190613c0e9190614f2d565b155b1561147b57604051635274afe760e01b81526001600160a01b03841660048201526024016104c8565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015613c7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ca39190614825565b9050613cba6001600160a01b038516333086614312565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015613cfe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d229190614825565b9050818111613d885760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104c8565b613d928282614b85565b95945050505050565b5f6060826080015151603014613e055760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016104c8565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613e7c57613e3c816001614b85565b613e479060086148e6565b5081515f90839083908110613e5e57613e5e614b98565b60200101906001600160f81b03191690815f1a905350600101613e28565b505f5b6004811015613eda57613e93816003614b85565b613e9e9060086148e6565b505f82613eac836002614bac565b81518110613ebc57613ebc614b98565b60200101906001600160f81b03191690815f1a905350600101613e7f565b505f5b6020811015613f375784518160208110613ef957613ef9614b98565b1a60f81b82613f09836006614bac565b81518110613f1957613f19614b98565b60200101906001600160f81b03191690815f1a905350600101613edd565b505f5b6020811015613f975784602001518160208110613f5957613f59614b98565b1a60f81b82613f69836026614bac565b81518110613f7957613f79614b98565b60200101906001600160f81b03191690815f1a905350600101613f3a565b505f5b600881101561400b57613fae816007614b85565b613fb99060086148e6565b60ff1685604001516001600160401b0316901c60f81b82826046613fdd9190614bac565b81518110613fed57613fed614b98565b60200101906001600160f81b03191690815f1a905350600101613f9a565b505f5b6030811015614076578460800151818151811061402d5761402d614b98565b01602001516001600160f81b0319168261404883604e614bac565b8151811061405857614058614b98565b60200101906001600160f81b03191690815f1a90535060010161400e565b505f5b60088110156140e85761408d816007614b85565b6140989060086148e6565b60608601516001600160401b0390811691161c60f81b826140ba83607e614bac565b815181106140ca576140ca614b98565b60200101906001600160f81b03191690815f1a905350600101614079565b506002816040516140f99190614f48565b602060405180830381855afa158015614114573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906141379190614825565b94909350915050565b614148613235565b61327e61434b565b61327e613235565b614160613235565b80355f80516020614fa483398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb015560146141ac6080840160608501614dad565b60ff1611156142195760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016104c8565b5f61422a6080840160608501614dad565b60ff16116142925760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016104c8565b6142a26080830160608401614dad565b60028201805460ff92909216600160401b0260ff60401b199092169190911790556142d36060830160408401614613565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b6060610ef683835f614353565b6040516001600160a01b0384811660248301528381166044830152606482018390526108d89186918216906323b872dd906084016133d0565b612c30613235565b6060814710156143785760405163cd78605960e01b81523060048201526024016104c8565b5f80856001600160a01b031684866040516143939190614f48565b5f6040518083038185875af1925050503d805f81146143cd576040519150601f19603f3d011682016040523d82523d5f602084013e6143d2565b606091505b50915091506117f18683836060826143f2576143ed82614439565b610ef6565b815115801561440957506001600160a01b0384163b155b1561443257604051639996b31560e01b81526001600160a01b03851660048201526024016104c8565b5080610ef6565b8051156144495780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50805461446e9061491d565b5f825580601f1061447d575050565b601f0160209004905f5260205f20908101906132ec91906144dd565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156144f1575f81556001016144de565b5090565b80151581146132ec575f80fd5b803563ffffffff81168114614515575f80fd5b919050565b5f805f6060848603121561452c575f80fd5b83359250602084013561453e816144f5565b915061454c60408501614502565b90509250925092565b5f60208284031215614565575f80fd5b5035919050565b6001600160a01b03811681146132ec575f80fd5b5f80828403610160811215614593575f80fd5b610140808212156145a2575f80fd5b84935083013590506145b38161456c565b809150509250929050565b5f602082840312156145ce575f80fd5b610ef682614502565b5f80604083850312156145e8575f80fd5b6145f183614502565b946020939093013593505050565b6001600160401b03811681146132ec575f80fd5b5f60208284031215614623575f80fd5b8135610ef6816145ff565b5f806040838503121561463f575f80fd5b50508035926020909101359150565b5f805f8385036080811215614661575f80fd5b84356001600160401b03811115614676575f80fd5b850160608188031215614687575f80fd5b93506040601f198201121561469a575f80fd5b50602084019150606084013590509250925092565b634e487b7160e01b5f52602160045260245ffd5b8151610100820190600681106146e757634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015161470f60408401826001600160a01b03169052565b50606083015161472a60608401826001600160401b03169052565b50608083015161474560808401826001600160401b03169052565b5060a083015161476060a08401826001600160401b03169052565b5060c083015161477b60c08401826001600160401b03169052565b5060e083015161479660e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038281168282160390808211156147965761479661479d565b5f5b838110156147eb5781810151838201526020016147d3565b50505f910152565b602081525f82518060208401526148118160408501602087016147d1565b601f01601f19169190910160400192915050565b5f60208284031215614835575f80fd5b5051919050565b5f8261485657634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b80820281158282048414176108ee576108ee61479d565b6001600160401b038181168382160190808211156147965761479661479d565b600181811c9082168061493157607f821691505b60208210810361494f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f84546149ae8161491d565b806020870152604060018084165f81146149cf57600181146149eb57614a18565b60ff19851660408a0152604084151560051b8a01019550614a18565b895f5260205f205f5b85811015614a0f5781548b82018601529083019088016149f4565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614a5c57614a5c614a26565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614a8a57614a8a614a26565b604052919050565b8051614515816144f5565b5f8060408385031215614aae575f80fd5b82516001600160401b0380821115614ac4575f80fd5b9084019060608287031215614ad7575f80fd5b614adf614a3a565b82518152602080840151614af28161456c565b82820152604084015183811115614b07575f80fd5b80850194505087601f850112614b1b575f80fd5b835183811115614b2d57614b2d614a26565b614b3f601f8201601f19168301614a62565b93508084528882828701011115614b54575f80fd5b614b63818386018488016147d1565b50826040830152819550614b78818801614a92565b9450505050509250929050565b818103818111156108ee576108ee61479d565b634e487b7160e01b5f52603260045260245ffd5b808201808211156108ee576108ee61479d565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b6001600160401b03818116838216028082169190828114614cb557614cb561479d565b505092915050565b61ffff811681146132ec575f80fd5b5f60208284031215614cdc575f80fd5b8135610ef681614cbd565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b8135614d3d81614cbd565b61ffff8116905081548161ffff1982161783556020840135614d5e816145ff565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b5f6001600160401b03808316818103614da357614da361479d565b6001019392505050565b5f60208284031215614dbd575f80fd5b813560ff81168114610ef6575f80fd5b5f60208284031215614ddd575f80fd5b8135610ef68161456c565b5f808335601e19843603018112614dfd575f80fd5b8301803591506001600160401b03821115614e16575f80fd5b60200191503681900382131561194b575f80fd5b601f82111561147b57805f5260205f20601f840160051c81016020851015614e4f5750805b601f840160051c820191505b81811015610cd4575f8155600101614e5b565b81516001600160401b03811115614e8757614e87614a26565b614e9b81614e95845461491d565b84614e2a565b602080601f831160018114614ece575f8415614eb75750858301515b5f19600386901b1c1916600185901b178555614f25565b5f85815260208120601f198616915b82811015614efc57888601518255948401946001909101908401614edd565b5085821015614f1957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208284031215614f3d575f80fd5b8151610ef6816144f5565b5f8251614f598184602087016147d1565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", + Bin: "0x608060405234801561000f575f80fd5b5060405161517438038061517483398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6150278061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061013d575f3560e01c806376f78621116100b4578063b771b3bc11610079578063b771b3bc146102d9578063ba3a4b97146102ff578063bee0a03f14610312578063c974d1b614610325578063d5f20ff61461032d578063df93d8de1461034d575f80fd5b806376f786211461027a57806398f3e2b41461028d5780639e1bc4ef146102a0578063a13fd29d146102b3578063a3a65e48146102c6575f80fd5b8063330a0a3a11610105578063330a0a3a146101ff57806335455ded14610212578063467ef06f1461022e5780635297fae614610241578063620658561461025457806366435abf14610267575f80fd5b80630118acc4146101415780630322ed98146101565780630cdd098514610169578063151d30d1146101ba5780632e2194d8146101d4575b5f80fd5b61015461014f366004614531565b610357565b005b61015461016436600461456c565b61070e565b6101a761017736600461456c565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b6101c2600a81565b60405160ff90911681526020016101b1565b6101e76101e236600461456c565b6108de565b6040516001600160401b0390911681526020016101b1565b61015461020d366004614597565b6108f4565b61021b61271081565b60405161ffff90911681526020016101b1565b61015461023c3660046145d5565b6109d3565b61015461024f3660046145ee565b6109fe565b6101a761026236600461462a565b610bce565b6101e761027536600461456c565b610be7565b610154610288366004614531565b610bfb565b61015461029b3660046145ee565b610cdb565b6101a76102ae366004614645565b610eea565b6101a76102c1366004614665565b610efd565b6101546102d43660046145d5565b610f29565b6102e76005600160991b0181565b6040516001600160a01b0390911681526020016101b1565b61015461030d36600461456c565b6110e6565b61015461032036600461456c565b61136c565b6101c2601481565b61034061033b36600461456c565b611480565b6040516101b191906146da565b6101e76202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f80516020614f7b8339815191529184156103a9576103a6828561155f565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156103db576103db6146c6565b60048111156103ec576103ec6146c6565b8152815461010090046001600160a01b031660208201526001820154604082015260028201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c083015260039092015490911660e09091015290505f61046884611480565b905060028251600481111561047f5761047f6146c6565b146104d15760405162461bcd60e51b815260206004820152602a60248201525f80516020614f9b8339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208201516001600160a01b031633146105365760405162461bcd60e51b815260206004820152603360248201525f80516020614f9b8339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016104c8565b6003825280516002906005811115610550576105506146c6565b03610594575f82606001518260a0015161056a91906147c8565b905061057685826117fb565b506001600160401b0390811660e0850152421660a0840152506105b7565b60808101516001600160401b0390811660e0808501919091528201511660a08301525b5f88815260068601602052604090208251815484929190829060ff191660018360048111156105e8576105e86146c6565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b031990911617815560408083015160018301556060830151600283018054608086015160a08088015160c08901516001600160401b03908116600160c01b026001600160c01b03928216600160801b02929092166001600160801b03948216600160401b026001600160801b0319909616978216979097179490941792909216949094171790915560e090940151600390930180549390941667ffffffffffffffff199390931692909217909255830151905185918a917f5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69916106fc916001600160401b0391909116815260200190565b60405180910390a35050505050505050565b5f8181525f80516020614ffb83398151915260205260408082208151610100810190925280545f80516020614fbb83398151915293929190829060ff16600581111561075c5761075c6146c6565b600581111561076d5761076d6146c6565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156107f2576107f26146c6565b146108575760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016104c8565b6005600160991b016001600160a01b031663ee5b48eb61087c8584608001515f611952565b6040518263ffffffff1660e01b8152600401610898919061480a565b6020604051808303815f875af11580156108b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d8919061483c565b50505050565b5f6108ee64e8d4a5100083614853565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061093d575080546001600160401b03808416911610155b1561095b5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556109868484611b6f565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f6109dd82611b89565b90506109fa81606001516001600160401b03168260400151611efc565b5050565b5f80516020614f7b8339815191525f610a1684611f32565b90505f80610a278360400151612113565b50915091505f610a3683611480565b9050816001600160401b031681608001516001600160401b03161015610a6e5760405162461bcd60e51b81526004016104c890614872565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610ab35760405162461bcd60e51b81526004016104c8906148b4565b60015f87815260068701602052604090205460ff166004811115610ad957610ad96146c6565b14610b425760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016104c8565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f6108ee6001600160401b03831664e8d4a510006148fd565b5f610bf182611480565b60a0015192915050565b5f80516020614f7b8339815191525f610c1385611480565b5f86815260058401602052604090205460c0820151919250610c4591620100009091046001600160401b031690614914565b6001600160401b0316421015610cb95760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016104c8565b8315610ccb57610cc9858461155f565b505b610cd48561234e565b5050505050565b5f80516020614f7b8339815191525f610cf384611f32565b90505f80610d048360400151612113565b50915091505f610d1383611480565b9050816001600160401b031681608001516001600160401b03161015610d4b5760405162461bcd60e51b81526004016104c890614872565b5f8681526006860160205260409020600301546001600160401b0380841691161115610d895760405162461bcd60e51b81526004016104c8906148b4565b60035f87815260068701602052604090205460ff166004811115610daf57610daf6146c6565b14610e035760405162461bcd60e51b815260206004820152603160248201525f80516020614f9b8339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016104c8565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e0840152610ea891611efc565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f610ef6833384612667565b9392505050565b5f610f066129d3565b610f11848484612a0a565b9050610ef660015f80516020614fdb83398151915255565b5f80516020614fbb8339815191525f610f4183611f32565b90505f80610f528360400151612c43565b9150915080610fb45760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016104c8565b5f82815260078501602052604081208054610fce90614934565b9050118015611000575060015f83815260088601602052604090205460ff166005811115610ffe57610ffe6146c6565b145b61101c5760405162461bcd60e51b81526004016104c89061496c565b5f828152600785016020526040812061103491614479565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f80516020614f7b83398151915293929190829060ff166004811115611147576111476146c6565b6004811115611158576111586146c6565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156111df576111df6146c6565b14806111fd57506003815160048111156111fb576111fb6146c6565b145b6112515760405162461bcd60e51b815260206004820152603260248201525f80516020614f9b833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016104c8565b5f61125f8260400151611480565b905080608001516001600160401b03165f036112e35760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016104c8565b6005600160991b016001600160a01b031663ee5b48eb611310846040015184608001518560a00151611952565b6040518263ffffffff1660e01b815260040161132c919061480a565b6020604051808303815f875af1158015611348573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd4919061483c565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020614fbb8339815191529291906113b490614934565b90501180156113e6575060015f83815260088301602052604090205460ff1660058111156113e4576113e46146c6565b145b6114025760405162461bcd60e51b81526004016104c89061496c565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161143b91906004016149b3565b6020604051808303815f875af1158015611457573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147b919061483c565b505050565b6114886144b0565b5f8281525f80516020614ffb8339815191526020526040908190208151610100810190925280545f80516020614fbb833981519152929190829060ff1660058111156114d6576114d66146c6565b60058111156114e7576114e76146c6565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156115aa573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115d19190810190614ab4565b91509150806116345760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016104c8565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611677573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169b919061483c565b8251146116ff5760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016104c8565b60208201516001600160a01b0316156117755760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016104c8565b5f806117848460400151612de4565b915091508187146117f15760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016104c8565b9695505050505050565b5f8281525f80516020614ffb833981519152602052604081206003015481905f80516020614fbb83398151915290600160401b90046001600160401b03166118438582612fbc565b5f61184d876131ca565b5f8881526008850160205260408120600301805467ffffffffffffffff60401b1916600160401b6001600160401b038b16021790559091506005600160991b0163ee5b48eb61189d8a858b611952565b6040518263ffffffff1660e01b81526004016118b9919061480a565b6020604051808303815f875af11580156118d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118f9919061483c565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b60028110156119cb5761198b816001614b9c565b6119969060086148fd565b5081515f908390839081106119ad576119ad614baf565b60200101906001600160f81b03191690815f1a905350600101611977565b505f5b6004811015611a2e576119e2816003614b9c565b6119ed9060086148fd565b6001901c60f81b82611a00836002614bc3565b81518110611a1057611a10614baf565b60200101906001600160f81b03191690815f1a9053506001016119ce565b505f5b6020811015611a9057611a4581601f614b9c565b611a509060086148fd565b86901c60f81b82611a62836006614bc3565b81518110611a7257611a72614baf565b60200101906001600160f81b03191690815f1a905350600101611a31565b505f5b6008811015611afb57611aa7816007614b9c565b611ab29060086148fd565b6001600160401b038616901c60f81b82611acd836026614bc3565b81518110611add57611add614baf565b60200101906001600160f81b03191690815f1a905350600101611a93565b505f5b6008811015611b6657611b12816007614b9c565b611b1d9060086148fd565b6001600160401b038516901c60f81b82611b3883602e614bc3565b81518110611b4857611b48614baf565b60200101906001600160f81b03191690815f1a905350600101611afe565b50949350505050565b611b7761324c565b611b8082613297565b6109fa81613306565b611b916144b0565b5f80516020614fbb8339815191525f611ba984611f32565b90505f80611bba8360400151612c43565b915091508015611c1f5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016104c8565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611c5157611c516146c6565b6005811115611c6257611c626146c6565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611ce957611ce96146c6565b1480611d075750600182516005811115611d0557611d056146c6565b145b611d665760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016104c8565b600382516005811115611d7b57611d7b6146c6565b03611d8857506004611d8c565b5060055b6020808301515f90815260098801909152604081205581816005811115611db557611db56146c6565b90816005811115611dc857611dc86146c6565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611dfc57611dfc6146c6565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115611ec757611ec76146c6565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546109fa906001600160a01b031682846133ba565b60408051606080820183525f8083526020830181905292820152905f80516020614fbb8339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611fa7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fce9190810190614ab4565b91509150806120355760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016104c8565b82548251146120985760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016104c8565b60208201516001600160a01b03161561210b5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016104c8565b509392505050565b5f805f83516036146121375760405162461bcd60e51b81526004016104c890614bd6565b5f805b60028110156121865761214e816001614b9c565b6121599060086148fd565b61ffff1686828151811061216f5761216f614baf565b016020015160f81c901b919091179060010161213a565b5061ffff8116156121a95760405162461bcd60e51b81526004016104c890614c1f565b5f805b6004811015612204576121c0816003614b9c565b6121cb9060086148fd565b63ffffffff16876121dd836002614bc3565b815181106121ed576121ed614baf565b016020015160f81c901b91909117906001016121ac565b5063ffffffff811660031461222b5760405162461bcd60e51b81526004016104c890614c62565b5f805b60208110156122805761224281601f614b9c565b61224d9060086148fd565b88612259836006614bc3565b8151811061226957612269614baf565b016020015160f81c901b919091179060010161222e565b505f805b60088110156122df57612298816007614b9c565b6122a39060086148fd565b6001600160401b0316896122b8836026614bc3565b815181106122c8576122c8614baf565b016020015160f81c901b9190911790600101612284565b505f805b600881101561233e576122f7816007614b9c565b6123029060086148fd565b6001600160401b03168a61231783602e614bc3565b8151811061232757612327614baf565b016020015160f81c901b91909117906001016122e3565b5091989097509095509350505050565b5f8181525f80516020614ffb83398151915260205260408082208151610100810190925280545f80516020614fbb83398151915293929190829060ff16600581111561239c5761239c6146c6565b60058111156123ad576123ad6146c6565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e09091015290915081516005811115612435576124356146c6565b146124915760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016104c8565b60408101516001600160a01b0316336001600160a01b03161461250b5760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016104c8565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561254f5761254f6146c6565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f61261284826117fb565b60a0840151604080516001600160401b03909216825242602083015291935083925086917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a350505050565b5f6126706129d3565b5f80516020614f7b8339815191525f61268b6101e285613419565b90505f61269787611480565b90506002815160058111156126ae576126ae6146c6565b1461270d5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016104c8565b5f828260a0015161271e9190614914565b60048501546060840151919250612740916001600160401b0390911690614ca9565b6001600160401b0316816001600160401b031611156127bf5760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016104c8565b5f806127cb8a846117fb565b915091505f8a836040516020016127f992919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815282825280516020909101206101008301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905284835260068b01909152902081518154829060ff19166001836004811115612894576128946146c6565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49650505050505050610ef660015f80516020614fdb83398151915255565b5f80516020614fdb833981519152805460011901612a0457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020614f7b833981519152906001600160401b0316612a56604086016020870161462a565b6001600160401b03161015612ac55760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016104c8565b6003810154612ad76020860186614ce3565b61ffff1610158015612afb5750612710612af46020860186614ce3565b61ffff1611155b612b175760405162461bcd60e51b81526004016104c890614cfe565b8054831015612b7a5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016104c8565b8060010154831115612be15760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016104c8565b5f612beb84613419565b90505f612bf7826108de565b90505f612c04888361344f565b5f81815260058601602052604090209091508790612c228282614d49565b509098975050505050505050565b60015f80516020614fdb83398151915255565b5f808251602714612c665760405162461bcd60e51b81526004016104c890614bd6565b5f805b6002811015612cb557612c7d816001614b9c565b612c889060086148fd565b61ffff16858281518110612c9e57612c9e614baf565b016020015160f81c901b9190911790600101612c69565b5061ffff811615612cd85760405162461bcd60e51b81526004016104c890614c1f565b5f805b6004811015612d3357612cef816003614b9c565b612cfa9060086148fd565b63ffffffff1686612d0c836002614bc3565b81518110612d1c57612d1c614baf565b016020015160f81c901b9190911790600101612cdb565b5063ffffffff8116600214612d5a5760405162461bcd60e51b81526004016104c890614c62565b5f805b6020811015612daf57612d7181601f614b9c565b612d7c9060086148fd565b87612d88836006614bc3565b81518110612d9857612d98614baf565b016020015160f81c901b9190911790600101612d5d565b505f86602681518110612dc457612dc4614baf565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e14612e075760405162461bcd60e51b81526004016104c890614bd6565b5f805b6002811015612e5657612e1e816001614b9c565b612e299060086148fd565b61ffff16858281518110612e3f57612e3f614baf565b016020015160f81c901b9190911790600101612e0a565b5061ffff811615612e795760405162461bcd60e51b81526004016104c890614c1f565b5f805b6004811015612ed457612e90816003614b9c565b612e9b9060086148fd565b63ffffffff1686612ead836002614bc3565b81518110612ebd57612ebd614baf565b016020015160f81c901b9190911790600101612e7c565b5063ffffffff8116600414612efb5760405162461bcd60e51b81526004016104c890614c62565b5f805b6020811015612f5057612f1281601f614b9c565b612f1d9060086148fd565b87612f29836006614bc3565b81518110612f3957612f39614baf565b016020015160f81c901b9190911790600101612efe565b505f805b6008811015612faf57612f68816007614b9c565b612f739060086148fd565b6001600160401b031688612f88836026614bc3565b81518110612f9857612f98614baf565b016020015160f81c901b9190911790600101612f54565b5090969095509350505050565b5f80516020614fbb8339815191525f6001600160401b038084169085161115612ff057612fe983856147c8565b9050612ffd565b612ffa84846147c8565b90505b6040805160808101825260038401548082526004850154602083015260058501549282019290925260068401546001600160401b031660608201524291158061305f57506002840154815161305b916001600160401b031690614bc3565b8210155b15613085576001600160401b0383166060820152818152604081015160208201526130a4565b82816060018181516130979190614914565b6001600160401b03169052505b60608101516130b4906064614ca9565b602082015160028601546001600160401b0392909216916130df9190600160401b900460ff166148fd565b10156131435760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016104c8565b856001600160401b03168160400181815161315e9190614bc3565b9052506040810180516001600160401b038716919061317e908390614b9c565b905250805160038501556020810151600485015560408101516005850155606001516006909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020614ffb8339815191526020526040812060030180545f80516020614fbb833981519152916001600160401b03909116908361320d83614d9f565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661329557604051631afcd79f60e31b815260040160405180910390fd5b565b61329f61324c565b6132a88161398a565b613303608082013560a08301356132c560e0850160c0860161462a565b6132d6610100860160e08701614ce3565b61ffff166132ec61012087016101008801614dc4565b6132fe61014088016101208901614de4565b6139ab565b50565b61330e61324c565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab006001600160a01b03821661339a5760405162461bcd60e51b815260206004820152602c60248201527f4552433230546f6b656e5374616b696e674d616e616765723a207a65726f207460448201526b6f6b656e206164647265737360a01b60648201526084016104c8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b0383811660248301526044820183905261147b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613bef565b5f6108ee827f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546001600160a01b031690613c50565b5f5f80516020614fbb8339815191524261346f604086016020870161462a565b6001600160401b0316116134e15760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016104c8565b6134f1604085016020860161462a565b6001600160401b03166135076202a30042614bc3565b1161357a5760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016104c8565b83356135d25760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016104c8565b83355f908152600982016020526040902054156136425760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016104c8565b61364f6040850185614dff565b90506030146136b65760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016104c8565b6136c0835f612fbc565b5f8061375a6040518060a0016040528085600101548152602001885f01358152602001876001600160401b03168152602001886020016020810190613705919061462a565b6001600160401b0316815260200161372060408a018a614dff565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613db2565b5f828152600786016020526040902091935091506137788282614e85565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906137a590859060040161480a565b6020604051808303815f875af11580156137c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137e5919061483c565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff19166001836005811115613867576138676146c6565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b9161395c91908e01908e0161462a565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61399261324c565b61399a614157565b6139a2614167565b6133038161416f565b6139b361324c565b5f80516020614f7b83398151915283613a1f5760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016104c8565b612710841115613a415760405162461bcd60e51b81526004016104c890614cfe565b85871115613aa95760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016104c8565b5f8360ff1611613b165760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016104c8565b600a60ff84161115613b885760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016104c8565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f613c036001600160a01b0384168361431c565b905080515f14158015613c27575080806020019051810190613c259190614f44565b155b1561147b57604051635274afe760e01b81526001600160a01b03841660048201526024016104c8565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015613c96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cba919061483c565b9050613cd16001600160a01b038516333086614329565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015613d15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d39919061483c565b9050818111613d9f5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104c8565b613da98282614b9c565b95945050505050565b5f6060826080015151603014613e1c5760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016104c8565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613e9357613e53816001614b9c565b613e5e9060086148fd565b5081515f90839083908110613e7557613e75614baf565b60200101906001600160f81b03191690815f1a905350600101613e3f565b505f5b6004811015613ef157613eaa816003614b9c565b613eb59060086148fd565b505f82613ec3836002614bc3565b81518110613ed357613ed3614baf565b60200101906001600160f81b03191690815f1a905350600101613e96565b505f5b6020811015613f4e5784518160208110613f1057613f10614baf565b1a60f81b82613f20836006614bc3565b81518110613f3057613f30614baf565b60200101906001600160f81b03191690815f1a905350600101613ef4565b505f5b6020811015613fae5784602001518160208110613f7057613f70614baf565b1a60f81b82613f80836026614bc3565b81518110613f9057613f90614baf565b60200101906001600160f81b03191690815f1a905350600101613f51565b505f5b600881101561402257613fc5816007614b9c565b613fd09060086148fd565b60ff1685604001516001600160401b0316901c60f81b82826046613ff49190614bc3565b8151811061400457614004614baf565b60200101906001600160f81b03191690815f1a905350600101613fb1565b505f5b603081101561408d578460800151818151811061404457614044614baf565b01602001516001600160f81b0319168261405f83604e614bc3565b8151811061406f5761406f614baf565b60200101906001600160f81b03191690815f1a905350600101614025565b505f5b60088110156140ff576140a4816007614b9c565b6140af9060086148fd565b60608601516001600160401b0390811691161c60f81b826140d183607e614bc3565b815181106140e1576140e1614baf565b60200101906001600160f81b03191690815f1a905350600101614090565b506002816040516141109190614f5f565b602060405180830381855afa15801561412b573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061414e919061483c565b94909350915050565b61415f61324c565b613295614362565b61329561324c565b61417761324c565b80355f80516020614fbb83398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb015560146141c36080840160608501614dc4565b60ff1611156142305760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016104c8565b5f6142416080840160608501614dc4565b60ff16116142a95760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016104c8565b6142b96080830160608401614dc4565b60028201805460ff92909216600160401b0260ff60401b199092169190911790556142ea606083016040840161462a565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b6060610ef683835f61436a565b6040516001600160a01b0384811660248301528381166044830152606482018390526108d89186918216906323b872dd906084016133e7565b612c3061324c565b60608147101561438f5760405163cd78605960e01b81523060048201526024016104c8565b5f80856001600160a01b031684866040516143aa9190614f5f565b5f6040518083038185875af1925050503d805f81146143e4576040519150601f19603f3d011682016040523d82523d5f602084013e6143e9565b606091505b50915091506117f18683836060826144095761440482614450565b610ef6565b815115801561442057506001600160a01b0384163b155b1561444957604051639996b31560e01b81526001600160a01b03851660048201526024016104c8565b5080610ef6565b8051156144605780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50805461448590614934565b5f825580601f10614494575050565b601f0160209004905f5260205f209081019061330391906144f4565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614508575f81556001016144f5565b5090565b8015158114613303575f80fd5b803563ffffffff8116811461452c575f80fd5b919050565b5f805f60608486031215614543575f80fd5b8335925060208401356145558161450c565b915061456360408501614519565b90509250925092565b5f6020828403121561457c575f80fd5b5035919050565b6001600160a01b0381168114613303575f80fd5b5f808284036101608112156145aa575f80fd5b610140808212156145b9575f80fd5b84935083013590506145ca81614583565b809150509250929050565b5f602082840312156145e5575f80fd5b610ef682614519565b5f80604083850312156145ff575f80fd5b61460883614519565b946020939093013593505050565b6001600160401b0381168114613303575f80fd5b5f6020828403121561463a575f80fd5b8135610ef681614616565b5f8060408385031215614656575f80fd5b50508035926020909101359150565b5f805f8385036080811215614678575f80fd5b84356001600160401b0381111561468d575f80fd5b85016060818803121561469e575f80fd5b93506040601f19820112156146b1575f80fd5b50602084019150606084013590509250925092565b634e487b7160e01b5f52602160045260245ffd5b8151610100820190600681106146fe57634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015161472660408401826001600160a01b03169052565b50606083015161474160608401826001600160401b03169052565b50608083015161475c60808401826001600160401b03169052565b5060a083015161477760a08401826001600160401b03169052565b5060c083015161479260c08401826001600160401b03169052565b5060e08301516147ad60e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038281168282160390808211156147ad576147ad6147b4565b5f5b838110156148025781810151838201526020016147ea565b50505f910152565b602081525f82518060208401526148288160408501602087016147e8565b601f01601f19169190910160400192915050565b5f6020828403121561484c575f80fd5b5051919050565b5f8261486d57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b80820281158282048414176108ee576108ee6147b4565b6001600160401b038181168382160190808211156147ad576147ad6147b4565b600181811c9082168061494857607f821691505b60208210810361496657634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f84546149c581614934565b806020870152604060018084165f81146149e65760018114614a0257614a2f565b60ff19851660408a0152604084151560051b8a01019550614a2f565b895f5260205f205f5b85811015614a265781548b8201860152908301908801614a0b565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614a7357614a73614a3d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614aa157614aa1614a3d565b604052919050565b805161452c8161450c565b5f8060408385031215614ac5575f80fd5b82516001600160401b0380821115614adb575f80fd5b9084019060608287031215614aee575f80fd5b614af6614a51565b82518152602080840151614b0981614583565b82820152604084015183811115614b1e575f80fd5b80850194505087601f850112614b32575f80fd5b835183811115614b4457614b44614a3d565b614b56601f8201601f19168301614a79565b93508084528882828701011115614b6b575f80fd5b614b7a818386018488016147e8565b50826040830152819550614b8f818801614aa9565b9450505050509250929050565b818103818111156108ee576108ee6147b4565b634e487b7160e01b5f52603260045260245ffd5b808201808211156108ee576108ee6147b4565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b6001600160401b03818116838216028082169190828114614ccc57614ccc6147b4565b505092915050565b61ffff81168114613303575f80fd5b5f60208284031215614cf3575f80fd5b8135610ef681614cd4565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b8135614d5481614cd4565b61ffff8116905081548161ffff1982161783556020840135614d7581614616565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b5f6001600160401b03808316818103614dba57614dba6147b4565b6001019392505050565b5f60208284031215614dd4575f80fd5b813560ff81168114610ef6575f80fd5b5f60208284031215614df4575f80fd5b8135610ef681614583565b5f808335601e19843603018112614e14575f80fd5b8301803591506001600160401b03821115614e2d575f80fd5b60200191503681900382131561194b575f80fd5b601f82111561147b57805f5260205f20601f840160051c81016020851015614e665750805b601f840160051c820191505b81811015610cd4575f8155600101614e72565b81516001600160401b03811115614e9e57614e9e614a3d565b614eb281614eac8454614934565b84614e41565b602080601f831160018114614ee5575f8415614ece5750858301515b5f19600386901b1c1916600185901b178555614f3c565b5f85815260208120601f198616915b82811015614f1357888601518255948401946001909101908401614ef4565b5085821015614f3057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208284031215614f54575f80fd5b8151610ef68161450c565b5f8251614f708184602087016147e8565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go index a96ea774a..cccb0de7e 100644 --- a/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -76,7 +76,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activeValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"startingWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageNonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"startedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"endedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorManagerSettings\",\"components\":[{\"name\":\"baseSettings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"pChainBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"requirements\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorRequirements\",\"components\":[{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendUpdateDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valueToWeight\",\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"DelegationEnded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegatorAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]}]", - Bin: "0x608060405234801561000f575f80fd5b50604051614dc2380380614dc283398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b614c758061014d5f395ff3fe608060405260043610610131575f3560e01c806376f78621116100a8578063ba3a4b971161006d578063ba3a4b9714610394578063bee0a03f146103b3578063c599e24f146103d2578063c974d1b6146103e5578063d5f20ff6146103f9578063df93d8de14610425575f80fd5b806376f78621146102f257806380a8ad941461031157806398f3e2b414610324578063a3a65e4814610343578063b771b3bc14610362575f80fd5b80632e2194d8116100f95780632e2194d81461021757806335455ded1461024e578063467ef06f146102765780635297fae61461029557806362065856146102b457806366435abf146102d3575f80fd5b80630118acc4146101355780630322ed98146101565780630cdd098514610175578063151d30d1146101d25780631f7a9d8f146101f8575b5f80fd5b348015610140575f80fd5b5061015461014f3660046141ef565b61043b565b005b348015610161575f80fd5b5061015461017036600461422a565b6107f2565b348015610180575f80fd5b506101bf61018f36600461422a565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b3480156101dd575f80fd5b506101e6600a81565b60405160ff90911681526020016101c9565b348015610203575f80fd5b50610154610212366004614241565b6109c2565b348015610222575f80fd5b5061023661023136600461422a565b610a9f565b6040516001600160401b0390911681526020016101c9565b348015610259575f80fd5b5061026361271081565b60405161ffff90911681526020016101c9565b348015610281575f80fd5b50610154610290366004614258565b610ab5565b3480156102a0575f80fd5b506101546102af366004614271565b610ae0565b3480156102bf575f80fd5b506101bf6102ce3660046142ad565b610cb0565b3480156102de575f80fd5b506102366102ed36600461422a565b610cc9565b3480156102fd575f80fd5b5061015461030c3660046141ef565b610cdd565b6101bf61031f3660046142c8565b610dbd565b34801561032f575f80fd5b5061015461033e366004614271565b610de9565b34801561034e575f80fd5b5061015461035d366004614258565b610ff8565b34801561036d575f80fd5b5061037c6005600160991b0181565b6040516001600160a01b0390911681526020016101c9565b34801561039f575f80fd5b506101546103ae36600461422a565b6111b5565b3480156103be575f80fd5b506101546103cd36600461422a565b61143b565b6101bf6103e036600461422a565b61154f565b3480156103f0575f80fd5b506101e6601481565b348015610404575f80fd5b5061041861041336600461422a565b61155b565b6040516101c99190614335565b348015610430575f80fd5b506102366202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f80516020614bc983398151915291841561048d5761048a828561163a565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156104bf576104bf614321565b60048111156104d0576104d0614321565b8152815461010090046001600160a01b031660208201526001820154604082015260028201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c083015260039092015490911660e09091015290505f61054c8461155b565b905060028251600481111561056357610563614321565b146105b55760405162461bcd60e51b815260206004820152602a60248201525f80516020614be98339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208201516001600160a01b0316331461061a5760405162461bcd60e51b815260206004820152603360248201525f80516020614be98339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016105ac565b600382528051600290600581111561063457610634614321565b03610678575f82606001518260a0015161064e9190614423565b905061065a85826118d6565b506001600160401b0390811660e0850152421660a08401525061069b565b60808101516001600160401b0390811660e0808501919091528201511660a08301525b5f88815260068601602052604090208251815484929190829060ff191660018360048111156106cc576106cc614321565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b031990911617815560408083015160018301556060830151600283018054608086015160a08088015160c08901516001600160401b03908116600160c01b026001600160c01b03928216600160801b02929092166001600160801b03948216600160401b026001600160801b0319909616978216979097179490941792909216949094171790915560e090940151600390930180549390941667ffffffffffffffff199390931692909217909255830151905185918a917f5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69916107e0916001600160401b0391909116815260200190565b60405180910390a35050505050505050565b5f8181525f80516020614c4983398151915260205260408082208151610100810190925280545f80516020614c0983398151915293929190829060ff16600581111561084057610840614321565b600581111561085157610851614321565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156108d6576108d6614321565b1461093b5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016105ac565b6005600160991b016001600160a01b031663ee5b48eb6109608584608001515f611a2d565b6040518263ffffffff1660e01b815260040161097c9190614465565b6020604051808303815f875af1158015610998573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bc9190614497565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0b575080546001600160401b03808416911610155b15610a295760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5383611c4c565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f610aaf64e8d4a51000836144ae565b92915050565b5f610abf82611c60565b9050610adc81606001516001600160401b03168260400151611fd3565b5050565b5f80516020614bc98339815191525f610af884611fe6565b90505f80610b0983604001516121c7565b50915091505f610b188361155b565b9050816001600160401b031681608001516001600160401b03161015610b505760405162461bcd60e51b81526004016105ac906144cd565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610b955760405162461bcd60e51b81526004016105ac9061450f565b60015f87815260068701602052604090205460ff166004811115610bbb57610bbb614321565b14610c245760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016105ac565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f610aaf6001600160401b03831664e8d4a51000614558565b5f610cd38261155b565b60a0015192915050565b5f80516020614bc98339815191525f610cf58561155b565b5f86815260058401602052604090205460c0820151919250610d2791620100009091046001600160401b03169061456f565b6001600160401b0316421015610d9b5760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016105ac565b8315610dad57610dab858461163a565b505b610db685612402565b5050505050565b5f610dc661271b565b610dd1838334612752565b9050610aaf60015f80516020614c2983398151915255565b5f80516020614bc98339815191525f610e0184611fe6565b90505f80610e1283604001516121c7565b50915091505f610e218361155b565b9050816001600160401b031681608001516001600160401b03161015610e595760405162461bcd60e51b81526004016105ac906144cd565b5f8681526006860160205260409020600301546001600160401b0380841691161115610e975760405162461bcd60e51b81526004016105ac9061450f565b60035f87815260068701602052604090205460ff166004811115610ebd57610ebd614321565b14610f115760405162461bcd60e51b815260206004820152603160248201525f80516020614be98339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016105ac565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e0840152610fb691611fd3565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f80516020614c098339815191525f61101083611fe6565b90505f806110218360400151612980565b91509150806110835760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016105ac565b5f8281526007850160205260408120805461109d9061458f565b90501180156110cf575060015f83815260088601602052604090205460ff1660058111156110cd576110cd614321565b145b6110eb5760405162461bcd60e51b81526004016105ac906145c1565b5f828152600785016020526040812061110391614137565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f80516020614bc983398151915293929190829060ff16600481111561121657611216614321565b600481111561122757611227614321565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156112ae576112ae614321565b14806112cc57506003815160048111156112ca576112ca614321565b145b6113205760405162461bcd60e51b815260206004820152603260248201525f80516020614be9833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016105ac565b5f61132e826040015161155b565b905080608001516001600160401b03165f036113b25760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016105ac565b6005600160991b016001600160a01b031663ee5b48eb6113df846040015184608001518560a00151611a2d565b6040518263ffffffff1660e01b81526004016113fb9190614465565b6020604051808303815f875af1158015611417573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db69190614497565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020614c098339815191529291906114839061458f565b90501180156114b5575060015f83815260088301602052604090205460ff1660058111156114b3576114b3614321565b145b6114d15760405162461bcd60e51b81526004016105ac906145c1565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161150a9190600401614608565b6020604051808303815f875af1158015611526573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154a9190614497565b505050565b5f610aaf823334612b21565b61156361416e565b5f8281525f80516020614c498339815191526020526040908190208151610100810190925280545f80516020614c09833981519152929190829060ff1660058111156115b1576115b1614321565b60058111156115c2576115c2614321565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015611685573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116ac919081019061471d565b915091508061170f5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016105ac565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611752573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117769190614497565b8251146117da5760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016105ac565b60208201516001600160a01b0316156118505760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016105ac565b5f8061185f8460400151612e8a565b915091508187146118cc5760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016105ac565b9695505050505050565b5f8281525f80516020614c49833981519152602052604081206003015481905f80516020614c0983398151915290600160401b90046001600160401b031661191e8582613062565b5f61192887613259565b5f8881526008850160205260408120600301805467ffffffffffffffff60401b1916600160401b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6119788a858b611a2d565b6040518263ffffffff1660e01b81526004016119949190614465565b6020604051808303815f875af11580156119b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119d49190614497565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611aa657611a66816001614805565b611a71906008614558565b5081515f90839083908110611a8857611a88614818565b60200101906001600160f81b03191690815f1a905350600101611a52565b505f5b6004811015611b0957611abd816003614805565b611ac8906008614558565b6001901c60f81b82611adb83600261482c565b81518110611aeb57611aeb614818565b60200101906001600160f81b03191690815f1a905350600101611aa9565b505f5b6020811015611b6b57611b2081601f614805565b611b2b906008614558565b86901c60f81b82611b3d83600661482c565b81518110611b4d57611b4d614818565b60200101906001600160f81b03191690815f1a905350600101611b0c565b505f5b6008811015611bd657611b82816007614805565b611b8d906008614558565b6001600160401b038616901c60f81b82611ba883602661482c565b81518110611bb857611bb8614818565b60200101906001600160f81b03191690815f1a905350600101611b6e565b505f5b6008811015611c4157611bed816007614805565b611bf8906008614558565b6001600160401b038516901c60f81b82611c1383602e61482c565b81518110611c2357611c23614818565b60200101906001600160f81b03191690815f1a905350600101611bd9565b5090505b9392505050565b611c546132db565b611c5d81613326565b50565b611c6861416e565b5f80516020614c098339815191525f611c8084611fe6565b90505f80611c918360400151612980565b915091508015611cf65760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016105ac565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611d2857611d28614321565b6005811115611d3957611d39614321565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611dc057611dc0614321565b1480611dde5750600182516005811115611ddc57611ddc614321565b145b611e3d5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016105ac565b600382516005811115611e5257611e52614321565b03611e5f57506004611e63565b5060055b6020808301515f90815260098801909152604081205581816005811115611e8c57611e8c614321565b90816005811115611e9f57611e9f614321565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611ed357611ed3614321565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115611f9e57611f9e614321565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b610adc6001600160a01b03821683613392565b60408051606080820183525f8083526020830181905292820152905f80516020614c098339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561205b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612082919081019061471d565b91509150806120e95760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016105ac565b825482511461214c5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016105ac565b60208201516001600160a01b0316156121bf5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016105ac565b509392505050565b5f805f83516036146121eb5760405162461bcd60e51b81526004016105ac9061483f565b5f805b600281101561223a57612202816001614805565b61220d906008614558565b61ffff1686828151811061222357612223614818565b016020015160f81c901b91909117906001016121ee565b5061ffff81161561225d5760405162461bcd60e51b81526004016105ac90614888565b5f805b60048110156122b857612274816003614805565b61227f906008614558565b63ffffffff168761229183600261482c565b815181106122a1576122a1614818565b016020015160f81c901b9190911790600101612260565b5063ffffffff81166003146122df5760405162461bcd60e51b81526004016105ac906148cb565b5f805b6020811015612334576122f681601f614805565b612301906008614558565b8861230d83600661482c565b8151811061231d5761231d614818565b016020015160f81c901b91909117906001016122e2565b505f805b60088110156123935761234c816007614805565b612357906008614558565b6001600160401b03168961236c83602661482c565b8151811061237c5761237c614818565b016020015160f81c901b9190911790600101612338565b505f805b60088110156123f2576123ab816007614805565b6123b6906008614558565b6001600160401b03168a6123cb83602e61482c565b815181106123db576123db614818565b016020015160f81c901b9190911790600101612397565b5091989097509095509350505050565b5f8181525f80516020614c4983398151915260205260408082208151610100810190925280545f80516020614c0983398151915293929190829060ff16600581111561245057612450614321565b600581111561246157612461614321565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e090910152909150815160058111156124e9576124e9614321565b146125455760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016105ac565b60408101516001600160a01b0316336001600160a01b0316146125bf5760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016105ac565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561260357612603614321565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f6126c684826118d6565b60a0840151604080516001600160401b03909216825242602083015291935083925086917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a350505050565b5f80516020614c2983398151915280546001190161274c57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020614bc9833981519152906001600160401b031661279e60408601602087016142ad565b6001600160401b0316101561280d5760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016105ac565b600381015461281f6020860186614921565b61ffff1610158015612843575061271061283c6020860186614921565b61ffff1611155b61285f5760405162461bcd60e51b81526004016105ac9061493c565b80548310156128c25760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016105ac565b80600101548311156129295760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016105ac565b825f61293482610a9f565b90505f6129418883613425565b5f8181526005860160205260409020909150879061295f8282614987565b509098975050505050505050565b60015f80516020614c2983398151915255565b5f8082516027146129a35760405162461bcd60e51b81526004016105ac9061483f565b5f805b60028110156129f2576129ba816001614805565b6129c5906008614558565b61ffff168582815181106129db576129db614818565b016020015160f81c901b91909117906001016129a6565b5061ffff811615612a155760405162461bcd60e51b81526004016105ac90614888565b5f805b6004811015612a7057612a2c816003614805565b612a37906008614558565b63ffffffff1686612a4983600261482c565b81518110612a5957612a59614818565b016020015160f81c901b9190911790600101612a18565b5063ffffffff8116600214612a975760405162461bcd60e51b81526004016105ac906148cb565b5f805b6020811015612aec57612aae81601f614805565b612ab9906008614558565b87612ac583600661482c565b81518110612ad557612ad5614818565b016020015160f81c901b9190911790600101612a9a565b505f86602681518110612b0157612b01614818565b016020015191976001600160f81b03199092161515965090945050505050565b5f612b2a61271b565b5f80516020614bc98339815191525f612b4284610a9f565b90505f612b4e8761155b565b9050600281516005811115612b6557612b65614321565b14612bc45760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016105ac565b5f828260a00151612bd5919061456f565b60048501546060840151919250612bf7916001600160401b03909116906149dd565b6001600160401b0316816001600160401b03161115612c765760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016105ac565b5f80612c828a846118d6565b915091505f8a83604051602001612cb092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815282825280516020909101206101008301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905284835260068b01909152902081518154829060ff19166001836004811115612d4b57612d4b614321565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49650505050505050611c4560015f80516020614c2983398151915255565b5f808251602e14612ead5760405162461bcd60e51b81526004016105ac9061483f565b5f805b6002811015612efc57612ec4816001614805565b612ecf906008614558565b61ffff16858281518110612ee557612ee5614818565b016020015160f81c901b9190911790600101612eb0565b5061ffff811615612f1f5760405162461bcd60e51b81526004016105ac90614888565b5f805b6004811015612f7a57612f36816003614805565b612f41906008614558565b63ffffffff1686612f5383600261482c565b81518110612f6357612f63614818565b016020015160f81c901b9190911790600101612f22565b5063ffffffff8116600414612fa15760405162461bcd60e51b81526004016105ac906148cb565b5f805b6020811015612ff657612fb881601f614805565b612fc3906008614558565b87612fcf83600661482c565b81518110612fdf57612fdf614818565b016020015160f81c901b9190911790600101612fa4565b505f805b60088110156130555761300e816007614805565b613019906008614558565b6001600160401b03168861302e83602661482c565b8151811061303e5761303e614818565b016020015160f81c901b9190911790600101612ffa565b5090969095509350505050565b5f80516020614c098339815191525f6001600160401b0380841690851611156130965761308f8385614423565b90506130a3565b6130a08484614423565b90505b6040805160808101825260038401548082526004850154602083015260058501549282019290925260068401546001600160401b0316606082015242911580613105575060028401548151613101916001600160401b03169061482c565b8210155b1561312b576001600160401b03831660608201528181526040810151602082015261314a565b828160600181815161313d919061456f565b6001600160401b03169052505b606081015161315a9060646149dd565b602082015160028601546001600160401b0392909216916131859190600160401b900460ff16614558565b10156131e95760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016105ac565b6131f38587614423565b6001600160401b03168160400181815161320d919061482c565b905250805160038501556020810151600485015560408101516005850155606001516006909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020614c498339815191526020526040812060030180545f80516020614c09833981519152916001600160401b03909116908361329c83614a08565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661332457604051631afcd79f60e31b815260040160405180910390fd5b565b61332e6132db565b61333781613960565b611c5d608082013560a083013561335460e0850160c086016142ad565b613365610100860160e08701614921565b61ffff1661337b61012087016101008801614a2d565b61338d61014088016101208901614a4d565b613981565b804710156133b55760405163cd78605960e01b81523060048201526024016105ac565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146133fe576040519150601f19603f3d011682016040523d82523d5f602084013e613403565b606091505b505090508061154a57604051630a12f52160e11b815260040160405180910390fd5b5f5f80516020614c098339815191524261344560408601602087016142ad565b6001600160401b0316116134b75760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016105ac565b6134c760408501602086016142ad565b6001600160401b03166134dd6202a3004261482c565b116135505760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016105ac565b83356135a85760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016105ac565b83355f908152600982016020526040902054156136185760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016105ac565b6136256040850185614a68565b905060301461368c5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016105ac565b613696835f613062565b5f806137306040518060a0016040528085600101548152602001885f01358152602001876001600160401b031681526020018860200160208101906136db91906142ad565b6001600160401b031681526020016136f660408a018a614a68565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613bc5565b5f8281526007860160205260409020919350915061374e8282614aee565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061377b908590600401614465565b6020604051808303815f875af1158015613797573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137bb9190614497565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff1916600183600581111561383d5761383d614321565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b9161393291908e01908e016142ad565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b6139686132db565b613970613f6a565b613978613f7a565b611c5d81613f82565b6139896132db565b5f80516020614bc9833981519152836139f55760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016105ac565b612710841115613a175760405162461bcd60e51b81526004016105ac9061493c565b85871115613a7f5760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016105ac565b5f8360ff1611613aec5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016105ac565b600a60ff84161115613b5e5760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016105ac565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f6060826080015151603014613c2f5760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016105ac565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613ca657613c66816001614805565b613c71906008614558565b5081515f90839083908110613c8857613c88614818565b60200101906001600160f81b03191690815f1a905350600101613c52565b505f5b6004811015613d0457613cbd816003614805565b613cc8906008614558565b505f82613cd683600261482c565b81518110613ce657613ce6614818565b60200101906001600160f81b03191690815f1a905350600101613ca9565b505f5b6020811015613d615784518160208110613d2357613d23614818565b1a60f81b82613d3383600661482c565b81518110613d4357613d43614818565b60200101906001600160f81b03191690815f1a905350600101613d07565b505f5b6020811015613dc15784602001518160208110613d8357613d83614818565b1a60f81b82613d9383602661482c565b81518110613da357613da3614818565b60200101906001600160f81b03191690815f1a905350600101613d64565b505f5b6008811015613e3557613dd8816007614805565b613de3906008614558565b60ff1685604001516001600160401b0316901c60f81b82826046613e07919061482c565b81518110613e1757613e17614818565b60200101906001600160f81b03191690815f1a905350600101613dc4565b505f5b6030811015613ea05784608001518181518110613e5757613e57614818565b01602001516001600160f81b03191682613e7283604e61482c565b81518110613e8257613e82614818565b60200101906001600160f81b03191690815f1a905350600101613e38565b505f5b6008811015613f1257613eb7816007614805565b613ec2906008614558565b60608601516001600160401b0390811691161c60f81b82613ee483607e61482c565b81518110613ef457613ef4614818565b60200101906001600160f81b03191690815f1a905350600101613ea3565b50600281604051613f239190614bad565b602060405180830381855afa158015613f3e573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190613f619190614497565b94909350915050565b613f726132db565b61332461412f565b6133246132db565b613f8a6132db565b80355f80516020614c0983398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01556014613fd66080840160608501614a2d565b60ff1611156140435760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016105ac565b5f6140546080840160608501614a2d565b60ff16116140bc5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016105ac565b6140cc6080830160608401614a2d565b60028201805460ff92909216600160401b0260ff60401b199092169190911790556140fd60608301604084016142ad565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b61296d6132db565b5080546141439061458f565b5f825580601f10614152575050565b601f0160209004905f5260205f2090810190611c5d91906141b2565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156141c6575f81556001016141b3565b5090565b8015158114611c5d575f80fd5b803563ffffffff811681146141ea575f80fd5b919050565b5f805f60608486031215614201575f80fd5b833592506020840135614213816141ca565b9150614221604085016141d7565b90509250925092565b5f6020828403121561423a575f80fd5b5035919050565b5f6101408284031215614252575f80fd5b50919050565b5f60208284031215614268575f80fd5b611c45826141d7565b5f8060408385031215614282575f80fd5b61428b836141d7565b946020939093013593505050565b6001600160401b0381168114611c5d575f80fd5b5f602082840312156142bd575f80fd5b8135611c4581614299565b5f8082840360608112156142da575f80fd5b83356001600160401b038111156142ef575f80fd5b840160608187031215614300575f80fd5b92506040601f1982011215614313575f80fd5b506020830190509250929050565b634e487b7160e01b5f52602160045260245ffd5b81516101008201906006811061435957634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015161438160408401826001600160a01b03169052565b50606083015161439c60608401826001600160401b03169052565b5060808301516143b760808401826001600160401b03169052565b5060a08301516143d260a08401826001600160401b03169052565b5060c08301516143ed60c08401826001600160401b03169052565b5060e083015161440860e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038281168282160390808211156144085761440861440f565b5f5b8381101561445d578181015183820152602001614445565b50505f910152565b602081525f8251806020840152614483816040850160208701614443565b601f01601f19169190910160400192915050565b5f602082840312156144a7575f80fd5b5051919050565b5f826144c857634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b8082028115828204841417610aaf57610aaf61440f565b6001600160401b038181168382160190808211156144085761440861440f565b600181811c908216806145a357607f821691505b60208210810361425257634e487b7160e01b5f52602260045260245ffd5b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f845461461a8161458f565b806020870152604060018084165f811461463b576001811461465757614684565b60ff19851660408a0152604084151560051b8a01019550614684565b895f5260205f205f5b8581101561467b5781548b8201860152908301908801614660565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156146c8576146c8614692565b60405290565b604051601f8201601f191681016001600160401b03811182821017156146f6576146f6614692565b604052919050565b6001600160a01b0381168114611c5d575f80fd5b80516141ea816141ca565b5f806040838503121561472e575f80fd5b82516001600160401b0380821115614744575f80fd5b9084019060608287031215614757575f80fd5b61475f6146a6565b82518152602080840151614772816146fe565b82820152604084015183811115614787575f80fd5b80850194505087601f85011261479b575f80fd5b8351838111156147ad576147ad614692565b6147bf601f8201601f191683016146ce565b935080845288828287010111156147d4575f80fd5b6147e381838601848801614443565b508260408301528195506147f8818801614712565b9450505050509250929050565b81810381811115610aaf57610aaf61440f565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610aaf57610aaf61440f565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b61ffff81168114611c5d575f80fd5b5f60208284031215614931575f80fd5b8135611c4581614912565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b813561499281614912565b61ffff8116905081548161ffff19821617835560208401356149b381614299565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b6001600160401b03818116838216028082169190828114614a0057614a0061440f565b505092915050565b5f6001600160401b03808316818103614a2357614a2361440f565b6001019392505050565b5f60208284031215614a3d575f80fd5b813560ff81168114611c45575f80fd5b5f60208284031215614a5d575f80fd5b8135611c45816146fe565b5f808335601e19843603018112614a7d575f80fd5b8301803591506001600160401b03821115614a96575f80fd5b602001915036819003821315611a26575f80fd5b601f82111561154a57805f5260205f20601f840160051c81016020851015614acf5750805b601f840160051c820191505b81811015610db6575f8155600101614adb565b81516001600160401b03811115614b0757614b07614692565b614b1b81614b15845461458f565b84614aaa565b602080601f831160018114614b4e575f8415614b375750858301515b5f19600386901b1c1916600185901b178555614ba5565b5f85815260208120601f198616915b82811015614b7c57888601518255948401946001909101908401614b5d565b5085821015614b9957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251614bbe818460208701614443565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", + Bin: "0x608060405234801561000f575f80fd5b50604051614dd9380380614dd983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b614c8c8061014d5f395ff3fe608060405260043610610131575f3560e01c806376f78621116100a8578063ba3a4b971161006d578063ba3a4b9714610394578063bee0a03f146103b3578063c599e24f146103d2578063c974d1b6146103e5578063d5f20ff6146103f9578063df93d8de14610425575f80fd5b806376f78621146102f257806380a8ad941461031157806398f3e2b414610324578063a3a65e4814610343578063b771b3bc14610362575f80fd5b80632e2194d8116100f95780632e2194d81461021757806335455ded1461024e578063467ef06f146102765780635297fae61461029557806362065856146102b457806366435abf146102d3575f80fd5b80630118acc4146101355780630322ed98146101565780630cdd098514610175578063151d30d1146101d25780631f7a9d8f146101f8575b5f80fd5b348015610140575f80fd5b5061015461014f366004614206565b61043b565b005b348015610161575f80fd5b50610154610170366004614241565b6107f2565b348015610180575f80fd5b506101bf61018f366004614241565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b3480156101dd575f80fd5b506101e6600a81565b60405160ff90911681526020016101c9565b348015610203575f80fd5b50610154610212366004614258565b6109c2565b348015610222575f80fd5b50610236610231366004614241565b610a9f565b6040516001600160401b0390911681526020016101c9565b348015610259575f80fd5b5061026361271081565b60405161ffff90911681526020016101c9565b348015610281575f80fd5b5061015461029036600461426f565b610ab5565b3480156102a0575f80fd5b506101546102af366004614288565b610ae0565b3480156102bf575f80fd5b506101bf6102ce3660046142c4565b610cb0565b3480156102de575f80fd5b506102366102ed366004614241565b610cc9565b3480156102fd575f80fd5b5061015461030c366004614206565b610cdd565b6101bf61031f3660046142df565b610dbd565b34801561032f575f80fd5b5061015461033e366004614288565b610de9565b34801561034e575f80fd5b5061015461035d36600461426f565b610ff8565b34801561036d575f80fd5b5061037c6005600160991b0181565b6040516001600160a01b0390911681526020016101c9565b34801561039f575f80fd5b506101546103ae366004614241565b6111b5565b3480156103be575f80fd5b506101546103cd366004614241565b61143b565b6101bf6103e0366004614241565b61154f565b3480156103f0575f80fd5b506101e6601481565b348015610404575f80fd5b50610418610413366004614241565b61155b565b6040516101c9919061434c565b348015610430575f80fd5b506102366202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f80516020614be083398151915291841561048d5761048a828561163a565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156104bf576104bf614338565b60048111156104d0576104d0614338565b8152815461010090046001600160a01b031660208201526001820154604082015260028201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c083015260039092015490911660e09091015290505f61054c8461155b565b905060028251600481111561056357610563614338565b146105b55760405162461bcd60e51b815260206004820152602a60248201525f80516020614c008339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208201516001600160a01b0316331461061a5760405162461bcd60e51b815260206004820152603360248201525f80516020614c008339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016105ac565b600382528051600290600581111561063457610634614338565b03610678575f82606001518260a0015161064e919061443a565b905061065a85826118d6565b506001600160401b0390811660e0850152421660a08401525061069b565b60808101516001600160401b0390811660e0808501919091528201511660a08301525b5f88815260068601602052604090208251815484929190829060ff191660018360048111156106cc576106cc614338565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b031990911617815560408083015160018301556060830151600283018054608086015160a08088015160c08901516001600160401b03908116600160c01b026001600160c01b03928216600160801b02929092166001600160801b03948216600160401b026001600160801b0319909616978216979097179490941792909216949094171790915560e090940151600390930180549390941667ffffffffffffffff199390931692909217909255830151905185918a917f5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69916107e0916001600160401b0391909116815260200190565b60405180910390a35050505050505050565b5f8181525f80516020614c6083398151915260205260408082208151610100810190925280545f80516020614c2083398151915293929190829060ff16600581111561084057610840614338565b600581111561085157610851614338565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156108d6576108d6614338565b1461093b5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016105ac565b6005600160991b016001600160a01b031663ee5b48eb6109608584608001515f611a2d565b6040518263ffffffff1660e01b815260040161097c919061447c565b6020604051808303815f875af1158015610998573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bc91906144ae565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0b575080546001600160401b03808416911610155b15610a295760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5383611c4c565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f610aaf64e8d4a51000836144c5565b92915050565b5f610abf82611c60565b9050610adc81606001516001600160401b03168260400151611fd3565b5050565b5f80516020614be08339815191525f610af884611fe6565b90505f80610b0983604001516121c7565b50915091505f610b188361155b565b9050816001600160401b031681608001516001600160401b03161015610b505760405162461bcd60e51b81526004016105ac906144e4565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610b955760405162461bcd60e51b81526004016105ac90614526565b60015f87815260068701602052604090205460ff166004811115610bbb57610bbb614338565b14610c245760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016105ac565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f610aaf6001600160401b03831664e8d4a5100061456f565b5f610cd38261155b565b60a0015192915050565b5f80516020614be08339815191525f610cf58561155b565b5f86815260058401602052604090205460c0820151919250610d2791620100009091046001600160401b031690614586565b6001600160401b0316421015610d9b5760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016105ac565b8315610dad57610dab858461163a565b505b610db685612402565b5050505050565b5f610dc661271b565b610dd1838334612752565b9050610aaf60015f80516020614c4083398151915255565b5f80516020614be08339815191525f610e0184611fe6565b90505f80610e1283604001516121c7565b50915091505f610e218361155b565b9050816001600160401b031681608001516001600160401b03161015610e595760405162461bcd60e51b81526004016105ac906144e4565b5f8681526006860160205260409020600301546001600160401b0380841691161115610e975760405162461bcd60e51b81526004016105ac90614526565b60035f87815260068701602052604090205460ff166004811115610ebd57610ebd614338565b14610f115760405162461bcd60e51b815260206004820152603160248201525f80516020614c008339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016105ac565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e0840152610fb691611fd3565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f80516020614c208339815191525f61101083611fe6565b90505f806110218360400151612980565b91509150806110835760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016105ac565b5f8281526007850160205260408120805461109d906145a6565b90501180156110cf575060015f83815260088601602052604090205460ff1660058111156110cd576110cd614338565b145b6110eb5760405162461bcd60e51b81526004016105ac906145d8565b5f82815260078501602052604081206111039161414e565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f80516020614be083398151915293929190829060ff16600481111561121657611216614338565b600481111561122757611227614338565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156112ae576112ae614338565b14806112cc57506003815160048111156112ca576112ca614338565b145b6113205760405162461bcd60e51b815260206004820152603260248201525f80516020614c00833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016105ac565b5f61132e826040015161155b565b905080608001516001600160401b03165f036113b25760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016105ac565b6005600160991b016001600160a01b031663ee5b48eb6113df846040015184608001518560a00151611a2d565b6040518263ffffffff1660e01b81526004016113fb919061447c565b6020604051808303815f875af1158015611417573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db691906144ae565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020614c20833981519152929190611483906145a6565b90501180156114b5575060015f83815260088301602052604090205460ff1660058111156114b3576114b3614338565b145b6114d15760405162461bcd60e51b81526004016105ac906145d8565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161150a919060040161461f565b6020604051808303815f875af1158015611526573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154a91906144ae565b505050565b5f610aaf823334612b21565b611563614185565b5f8281525f80516020614c608339815191526020526040908190208151610100810190925280545f80516020614c20833981519152929190829060ff1660058111156115b1576115b1614338565b60058111156115c2576115c2614338565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015611685573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116ac9190810190614734565b915091508061170f5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016105ac565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611752573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177691906144ae565b8251146117da5760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016105ac565b60208201516001600160a01b0316156118505760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016105ac565b5f8061185f8460400151612e8a565b915091508187146118cc5760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016105ac565b9695505050505050565b5f8281525f80516020614c60833981519152602052604081206003015481905f80516020614c2083398151915290600160401b90046001600160401b031661191e8582613062565b5f61192887613270565b5f8881526008850160205260408120600301805467ffffffffffffffff60401b1916600160401b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6119788a858b611a2d565b6040518263ffffffff1660e01b8152600401611994919061447c565b6020604051808303815f875af11580156119b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119d491906144ae565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611aa657611a6681600161481c565b611a7190600861456f565b5081515f90839083908110611a8857611a8861482f565b60200101906001600160f81b03191690815f1a905350600101611a52565b505f5b6004811015611b0957611abd81600361481c565b611ac890600861456f565b6001901c60f81b82611adb836002614843565b81518110611aeb57611aeb61482f565b60200101906001600160f81b03191690815f1a905350600101611aa9565b505f5b6020811015611b6b57611b2081601f61481c565b611b2b90600861456f565b86901c60f81b82611b3d836006614843565b81518110611b4d57611b4d61482f565b60200101906001600160f81b03191690815f1a905350600101611b0c565b505f5b6008811015611bd657611b8281600761481c565b611b8d90600861456f565b6001600160401b038616901c60f81b82611ba8836026614843565b81518110611bb857611bb861482f565b60200101906001600160f81b03191690815f1a905350600101611b6e565b505f5b6008811015611c4157611bed81600761481c565b611bf890600861456f565b6001600160401b038516901c60f81b82611c1383602e614843565b81518110611c2357611c2361482f565b60200101906001600160f81b03191690815f1a905350600101611bd9565b5090505b9392505050565b611c546132f2565b611c5d8161333d565b50565b611c68614185565b5f80516020614c208339815191525f611c8084611fe6565b90505f80611c918360400151612980565b915091508015611cf65760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016105ac565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611d2857611d28614338565b6005811115611d3957611d39614338565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611dc057611dc0614338565b1480611dde5750600182516005811115611ddc57611ddc614338565b145b611e3d5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016105ac565b600382516005811115611e5257611e52614338565b03611e5f57506004611e63565b5060055b6020808301515f90815260098801909152604081205581816005811115611e8c57611e8c614338565b90816005811115611e9f57611e9f614338565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611ed357611ed3614338565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115611f9e57611f9e614338565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b610adc6001600160a01b038216836133a9565b60408051606080820183525f8083526020830181905292820152905f80516020614c208339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561205b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120829190810190614734565b91509150806120e95760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016105ac565b825482511461214c5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016105ac565b60208201516001600160a01b0316156121bf5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016105ac565b509392505050565b5f805f83516036146121eb5760405162461bcd60e51b81526004016105ac90614856565b5f805b600281101561223a5761220281600161481c565b61220d90600861456f565b61ffff168682815181106122235761222361482f565b016020015160f81c901b91909117906001016121ee565b5061ffff81161561225d5760405162461bcd60e51b81526004016105ac9061489f565b5f805b60048110156122b85761227481600361481c565b61227f90600861456f565b63ffffffff1687612291836002614843565b815181106122a1576122a161482f565b016020015160f81c901b9190911790600101612260565b5063ffffffff81166003146122df5760405162461bcd60e51b81526004016105ac906148e2565b5f805b6020811015612334576122f681601f61481c565b61230190600861456f565b8861230d836006614843565b8151811061231d5761231d61482f565b016020015160f81c901b91909117906001016122e2565b505f805b60088110156123935761234c81600761481c565b61235790600861456f565b6001600160401b03168961236c836026614843565b8151811061237c5761237c61482f565b016020015160f81c901b9190911790600101612338565b505f805b60088110156123f2576123ab81600761481c565b6123b690600861456f565b6001600160401b03168a6123cb83602e614843565b815181106123db576123db61482f565b016020015160f81c901b9190911790600101612397565b5091989097509095509350505050565b5f8181525f80516020614c6083398151915260205260408082208151610100810190925280545f80516020614c2083398151915293929190829060ff16600581111561245057612450614338565b600581111561246157612461614338565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e090910152909150815160058111156124e9576124e9614338565b146125455760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016105ac565b60408101516001600160a01b0316336001600160a01b0316146125bf5760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016105ac565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561260357612603614338565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f6126c684826118d6565b60a0840151604080516001600160401b03909216825242602083015291935083925086917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a350505050565b5f80516020614c4083398151915280546001190161274c57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020614be0833981519152906001600160401b031661279e60408601602087016142c4565b6001600160401b0316101561280d5760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016105ac565b600381015461281f6020860186614938565b61ffff1610158015612843575061271061283c6020860186614938565b61ffff1611155b61285f5760405162461bcd60e51b81526004016105ac90614953565b80548310156128c25760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016105ac565b80600101548311156129295760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016105ac565b825f61293482610a9f565b90505f612941888361343c565b5f8181526005860160205260409020909150879061295f828261499e565b509098975050505050505050565b60015f80516020614c4083398151915255565b5f8082516027146129a35760405162461bcd60e51b81526004016105ac90614856565b5f805b60028110156129f2576129ba81600161481c565b6129c590600861456f565b61ffff168582815181106129db576129db61482f565b016020015160f81c901b91909117906001016129a6565b5061ffff811615612a155760405162461bcd60e51b81526004016105ac9061489f565b5f805b6004811015612a7057612a2c81600361481c565b612a3790600861456f565b63ffffffff1686612a49836002614843565b81518110612a5957612a5961482f565b016020015160f81c901b9190911790600101612a18565b5063ffffffff8116600214612a975760405162461bcd60e51b81526004016105ac906148e2565b5f805b6020811015612aec57612aae81601f61481c565b612ab990600861456f565b87612ac5836006614843565b81518110612ad557612ad561482f565b016020015160f81c901b9190911790600101612a9a565b505f86602681518110612b0157612b0161482f565b016020015191976001600160f81b03199092161515965090945050505050565b5f612b2a61271b565b5f80516020614be08339815191525f612b4284610a9f565b90505f612b4e8761155b565b9050600281516005811115612b6557612b65614338565b14612bc45760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016105ac565b5f828260a00151612bd59190614586565b60048501546060840151919250612bf7916001600160401b03909116906149f4565b6001600160401b0316816001600160401b03161115612c765760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016105ac565b5f80612c828a846118d6565b915091505f8a83604051602001612cb092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815282825280516020909101206101008301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905284835260068b01909152902081518154829060ff19166001836004811115612d4b57612d4b614338565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49650505050505050611c4560015f80516020614c4083398151915255565b5f808251602e14612ead5760405162461bcd60e51b81526004016105ac90614856565b5f805b6002811015612efc57612ec481600161481c565b612ecf90600861456f565b61ffff16858281518110612ee557612ee561482f565b016020015160f81c901b9190911790600101612eb0565b5061ffff811615612f1f5760405162461bcd60e51b81526004016105ac9061489f565b5f805b6004811015612f7a57612f3681600361481c565b612f4190600861456f565b63ffffffff1686612f53836002614843565b81518110612f6357612f6361482f565b016020015160f81c901b9190911790600101612f22565b5063ffffffff8116600414612fa15760405162461bcd60e51b81526004016105ac906148e2565b5f805b6020811015612ff657612fb881601f61481c565b612fc390600861456f565b87612fcf836006614843565b81518110612fdf57612fdf61482f565b016020015160f81c901b9190911790600101612fa4565b505f805b60088110156130555761300e81600761481c565b61301990600861456f565b6001600160401b03168861302e836026614843565b8151811061303e5761303e61482f565b016020015160f81c901b9190911790600101612ffa565b5090969095509350505050565b5f80516020614c208339815191525f6001600160401b0380841690851611156130965761308f838561443a565b90506130a3565b6130a0848461443a565b90505b6040805160808101825260038401548082526004850154602083015260058501549282019290925260068401546001600160401b0316606082015242911580613105575060028401548151613101916001600160401b031690614843565b8210155b1561312b576001600160401b03831660608201528181526040810151602082015261314a565b828160600181815161313d9190614586565b6001600160401b03169052505b606081015161315a9060646149f4565b602082015160028601546001600160401b0392909216916131859190600160401b900460ff1661456f565b10156131e95760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016105ac565b856001600160401b0316816040018181516132049190614843565b9052506040810180516001600160401b038716919061322490839061481c565b905250805160038501556020810151600485015560408101516005850155606001516006909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020614c608339815191526020526040812060030180545f80516020614c20833981519152916001600160401b0390911690836132b383614a1f565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661333b57604051631afcd79f60e31b815260040160405180910390fd5b565b6133456132f2565b61334e81613977565b611c5d608082013560a083013561336b60e0850160c086016142c4565b61337c610100860160e08701614938565b61ffff1661339261012087016101008801614a44565b6133a461014088016101208901614a64565b613998565b804710156133cc5760405163cd78605960e01b81523060048201526024016105ac565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613415576040519150601f19603f3d011682016040523d82523d5f602084013e61341a565b606091505b505090508061154a57604051630a12f52160e11b815260040160405180910390fd5b5f5f80516020614c208339815191524261345c60408601602087016142c4565b6001600160401b0316116134ce5760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016105ac565b6134de60408501602086016142c4565b6001600160401b03166134f46202a30042614843565b116135675760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016105ac565b83356135bf5760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016105ac565b83355f9081526009820160205260409020541561362f5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016105ac565b61363c6040850185614a7f565b90506030146136a35760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016105ac565b6136ad835f613062565b5f806137476040518060a0016040528085600101548152602001885f01358152602001876001600160401b031681526020018860200160208101906136f291906142c4565b6001600160401b0316815260200161370d60408a018a614a7f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613bdc565b5f828152600786016020526040902091935091506137658282614b05565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061379290859060040161447c565b6020604051808303815f875af11580156137ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137d291906144ae565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff1916600183600581111561385457613854614338565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b9161394991908e01908e016142c4565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61397f6132f2565b613987613f81565b61398f613f91565b611c5d81613f99565b6139a06132f2565b5f80516020614be083398151915283613a0c5760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016105ac565b612710841115613a2e5760405162461bcd60e51b81526004016105ac90614953565b85871115613a965760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016105ac565b5f8360ff1611613b035760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016105ac565b600a60ff84161115613b755760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016105ac565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f6060826080015151603014613c465760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016105ac565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613cbd57613c7d81600161481c565b613c8890600861456f565b5081515f90839083908110613c9f57613c9f61482f565b60200101906001600160f81b03191690815f1a905350600101613c69565b505f5b6004811015613d1b57613cd481600361481c565b613cdf90600861456f565b505f82613ced836002614843565b81518110613cfd57613cfd61482f565b60200101906001600160f81b03191690815f1a905350600101613cc0565b505f5b6020811015613d785784518160208110613d3a57613d3a61482f565b1a60f81b82613d4a836006614843565b81518110613d5a57613d5a61482f565b60200101906001600160f81b03191690815f1a905350600101613d1e565b505f5b6020811015613dd85784602001518160208110613d9a57613d9a61482f565b1a60f81b82613daa836026614843565b81518110613dba57613dba61482f565b60200101906001600160f81b03191690815f1a905350600101613d7b565b505f5b6008811015613e4c57613def81600761481c565b613dfa90600861456f565b60ff1685604001516001600160401b0316901c60f81b82826046613e1e9190614843565b81518110613e2e57613e2e61482f565b60200101906001600160f81b03191690815f1a905350600101613ddb565b505f5b6030811015613eb75784608001518181518110613e6e57613e6e61482f565b01602001516001600160f81b03191682613e8983604e614843565b81518110613e9957613e9961482f565b60200101906001600160f81b03191690815f1a905350600101613e4f565b505f5b6008811015613f2957613ece81600761481c565b613ed990600861456f565b60608601516001600160401b0390811691161c60f81b82613efb83607e614843565b81518110613f0b57613f0b61482f565b60200101906001600160f81b03191690815f1a905350600101613eba565b50600281604051613f3a9190614bc4565b602060405180830381855afa158015613f55573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190613f7891906144ae565b94909350915050565b613f896132f2565b61333b614146565b61333b6132f2565b613fa16132f2565b80355f80516020614c2083398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01556014613fed6080840160608501614a44565b60ff16111561405a5760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016105ac565b5f61406b6080840160608501614a44565b60ff16116140d35760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016105ac565b6140e36080830160608401614a44565b60028201805460ff92909216600160401b0260ff60401b1990921691909117905561411460608301604084016142c4565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b61296d6132f2565b50805461415a906145a6565b5f825580601f10614169575050565b601f0160209004905f5260205f2090810190611c5d91906141c9565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156141dd575f81556001016141ca565b5090565b8015158114611c5d575f80fd5b803563ffffffff81168114614201575f80fd5b919050565b5f805f60608486031215614218575f80fd5b83359250602084013561422a816141e1565b9150614238604085016141ee565b90509250925092565b5f60208284031215614251575f80fd5b5035919050565b5f6101408284031215614269575f80fd5b50919050565b5f6020828403121561427f575f80fd5b611c45826141ee565b5f8060408385031215614299575f80fd5b6142a2836141ee565b946020939093013593505050565b6001600160401b0381168114611c5d575f80fd5b5f602082840312156142d4575f80fd5b8135611c45816142b0565b5f8082840360608112156142f1575f80fd5b83356001600160401b03811115614306575f80fd5b840160608187031215614317575f80fd5b92506040601f198201121561432a575f80fd5b506020830190509250929050565b634e487b7160e01b5f52602160045260245ffd5b81516101008201906006811061437057634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015161439860408401826001600160a01b03169052565b5060608301516143b360608401826001600160401b03169052565b5060808301516143ce60808401826001600160401b03169052565b5060a08301516143e960a08401826001600160401b03169052565b5060c083015161440460c08401826001600160401b03169052565b5060e083015161441f60e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0382811682821603908082111561441f5761441f614426565b5f5b8381101561447457818101518382015260200161445c565b50505f910152565b602081525f825180602084015261449a81604085016020870161445a565b601f01601f19169190910160400192915050565b5f602082840312156144be575f80fd5b5051919050565b5f826144df57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b8082028115828204841417610aaf57610aaf614426565b6001600160401b0381811683821601908082111561441f5761441f614426565b600181811c908216806145ba57607f821691505b60208210810361426957634e487b7160e01b5f52602260045260245ffd5b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f8454614631816145a6565b806020870152604060018084165f8114614652576001811461466e5761469b565b60ff19851660408a0152604084151560051b8a0101955061469b565b895f5260205f205f5b858110156146925781548b8201860152908301908801614677565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156146df576146df6146a9565b60405290565b604051601f8201601f191681016001600160401b038111828210171561470d5761470d6146a9565b604052919050565b6001600160a01b0381168114611c5d575f80fd5b8051614201816141e1565b5f8060408385031215614745575f80fd5b82516001600160401b038082111561475b575f80fd5b908401906060828703121561476e575f80fd5b6147766146bd565b8251815260208084015161478981614715565b8282015260408401518381111561479e575f80fd5b80850194505087601f8501126147b2575f80fd5b8351838111156147c4576147c46146a9565b6147d6601f8201601f191683016146e5565b935080845288828287010111156147eb575f80fd5b6147fa8183860184880161445a565b5082604083015281955061480f818801614729565b9450505050509250929050565b81810381811115610aaf57610aaf614426565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610aaf57610aaf614426565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b61ffff81168114611c5d575f80fd5b5f60208284031215614948575f80fd5b8135611c4581614929565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b81356149a981614929565b61ffff8116905081548161ffff19821617835560208401356149ca816142b0565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b6001600160401b03818116838216028082169190828114614a1757614a17614426565b505092915050565b5f6001600160401b03808316818103614a3a57614a3a614426565b6001019392505050565b5f60208284031215614a54575f80fd5b813560ff81168114611c45575f80fd5b5f60208284031215614a74575f80fd5b8135611c4581614715565b5f808335601e19843603018112614a94575f80fd5b8301803591506001600160401b03821115614aad575f80fd5b602001915036819003821315611a26575f80fd5b601f82111561154a57805f5260205f20601f840160051c81016020851015614ae65750805b601f840160051c820191505b81811015610db6575f8155600101614af2565b81516001600160401b03811115614b1e57614b1e6146a9565b614b3281614b2c84546145a6565b84614ac1565b602080601f831160018114614b65575f8415614b4e5750858301515b5f19600386901b1c1916600185901b178555614bbc565b5f85815260208120601f198616915b82811015614b9357888601518255948401946001909101908401614b74565b5085821015614bb057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251614bd581846020870161445a565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/staking/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/staking/PoAValidatorManager/PoAValidatorManager.go index c53386f49..2ffadd0cf 100644 --- a/abi-bindings/go/staking/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/staking/PoAValidatorManager/PoAValidatorManager.go @@ -59,7 +59,7 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activeValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"startingWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageNonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"startedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"endedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"pChainBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"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\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"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\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161307138038061307183398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b612f248061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106100fb575f3560e01c806397fb70d411610093578063c974d1b611610063578063c974d1b61461025c578063d5f20ff614610276578063df93d8de14610296578063f2fde38b146102a0575f80fd5b806397fb70d414610215578063a3a65e4814610228578063b771b3bc1461023b578063bee0a03f14610249575f80fd5b806366435abf116100ce57806366435abf1461018b578063715018a6146101b65780638994ab49146101be5780638da5cb5b146101d1575f80fd5b80630322ed98146100ff5780630cdd098514610114578063467ef06f14610165578063580a400614610178575b5f80fd5b61011261010d366004612768565b6102b3565b005b610152610122366004612768565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b61011261017336600461277f565b610488565b6101126101863660046127bd565b610495565b61019e610199366004612768565b6105a3565b6040516001600160401b03909116815260200161015c565b6101126105b7565b6101526101cc366004612814565b6105ca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161015c565b610112610223366004612768565b6105e6565b61011261023636600461277f565b6105f2565b6101fd6005600160991b0181565b610112610257366004612768565b6107af565b610264601481565b60405160ff909116815260200161015c565b610289610284366004612768565b6108c3565b60405161015c9190612876565b61019e6202a30081565b6101126102ae366004612950565b6109a2565b5f8181525f80516020612ef883398151915260205260408082208151610100810190925280545f80516020612ed883398151915293929190829060ff16600581111561030157610301612862565b600581111561031257610312612862565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091508151600581111561039757610397612862565b146104015760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084015b60405180910390fd5b6005600160991b016001600160a01b031663ee5b48eb6104268584608001515f6109dc565b6040518263ffffffff1660e01b8152600401610442919061298d565b6020604051808303815f875af115801561045e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048291906129bf565b50505050565b61049181610bf9565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156104d95750825b90505f826001600160401b031660011480156104f45750303b155b905081158015610502575080155b156105205760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561054a57845460ff60401b1916600160401b1785555b6105548787610f6c565b831561059a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f6105ad826108c3565b60a0015192915050565b6105bf610f86565b6105c85f610fe1565b565b5f6105d3610f86565b6105dd8383611051565b90505b92915050565b6105ef8161158c565b50565b5f80516020612ed88339815191525f61060a836118a5565b90505f8061061b8360400151611a86565b915091508061067d5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016103f8565b5f82815260078501602052604081208054610697906129d6565b90501180156106c9575060015f83815260088601602052604090205460ff1660058111156106c7576106c7612862565b145b6106e55760405162461bcd60e51b81526004016103f890612a0e565b5f82815260078501602052604081206106fd916126d5565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020612ed88339815191529291906107f7906129d6565b9050118015610829575060015f83815260088301602052604090205460ff16600581111561082757610827612862565b145b6108455760405162461bcd60e51b81526004016103f890612a0e565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161087e9190600401612a55565b6020604051808303815f875af115801561089a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108be91906129bf565b505050565b6108cb61270c565b5f8281525f80516020612ef88339815191526020526040908190208151610100810190925280545f80516020612ed8833981519152929190829060ff16600581111561091957610919612862565b600581111561092a5761092a612862565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6109aa610f86565b6001600160a01b0381166109d357604051631e4fbdf760e01b81525f60048201526024016103f8565b6105ef81610fe1565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015610a5557610a15816001612b07565b610a20906008612b1a565b5081515f90839083908110610a3757610a37612b31565b60200101906001600160f81b03191690815f1a905350600101610a01565b505f5b6004811015610ab857610a6c816003612b07565b610a77906008612b1a565b6001901c60f81b82610a8a836002612b45565b81518110610a9a57610a9a612b31565b60200101906001600160f81b03191690815f1a905350600101610a58565b505f5b6020811015610b1a57610acf81601f612b07565b610ada906008612b1a565b86901c60f81b82610aec836006612b45565b81518110610afc57610afc612b31565b60200101906001600160f81b03191690815f1a905350600101610abb565b505f5b6008811015610b8557610b31816007612b07565b610b3c906008612b1a565b6001600160401b038616901c60f81b82610b57836026612b45565b81518110610b6757610b67612b31565b60200101906001600160f81b03191690815f1a905350600101610b1d565b505f5b6008811015610bf057610b9c816007612b07565b610ba7906008612b1a565b6001600160401b038516901c60f81b82610bc283602e612b45565b81518110610bd257610bd2612b31565b60200101906001600160f81b03191690815f1a905350600101610b88565b50949350505050565b610c0161270c565b5f80516020612ed88339815191525f610c19846118a5565b90505f80610c2a8360400151611a86565b915091508015610c8f5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016103f8565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115610cc157610cc1612862565b6005811115610cd257610cd2612862565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115610d5957610d59612862565b1480610d775750600182516005811115610d7557610d75612862565b145b610dd65760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016103f8565b600382516005811115610deb57610deb612862565b03610df857506004610dfc565b5060055b6020808301515f90815260098801909152604081205581816005811115610e2557610e25612862565b90816005811115610e3857610e38612862565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115610e6c57610e6c612862565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115610f3757610f37612862565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b610f74611ce5565b610f7d82611d2e565b61049181611d4f565b33610fb87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105c85760405163118cdaa760e01b81523360048201526024016103f8565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f5f80516020612ed8833981519152426110716040860160208701612b58565b6001600160401b0316116110e35760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016103f8565b6110f36040850160208601612b58565b6001600160401b03166111096202a30042612b45565b1161117c5760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016103f8565b83356111d45760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016103f8565b83355f908152600982016020526040902054156112445760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016103f8565b6112516040850185612b71565b90506030146112b85760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016103f8565b6112c2835f611d60565b5f8061135c6040518060a0016040528085600101548152602001885f01358152602001876001600160401b031681526020018860200160208101906113079190612b58565b6001600160401b0316815260200161132260408a018a612b71565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250611f57565b5f8281526007860160205260409020919350915061137a8282612bfe565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906113a790859060040161298d565b6020604051808303815f875af11580156113c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e791906129bf565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff1916600183600581111561146957611469612862565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b9161155e91908e01908e01612b58565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f8181525f80516020612ef883398151915260205260408082208151610100810190925280545f80516020612ed883398151915293929190829060ff1660058111156115da576115da612862565b60058111156115eb576115eb612862565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e0909101529091508151600581111561167357611673612862565b146116cf5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016103f8565b60408101516001600160a01b0316336001600160a01b0316146117495760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016103f8565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561178d5761178d612862565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f61185084826122fc565b60a0840151604080516001600160401b03909216825242602083015291935083925086917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a350505050565b60408051606080820183525f8083526020830181905292820152905f80516020612ed88339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561191a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119419190810190612d24565b91509150806119a85760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016103f8565b8254825114611a0b5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016103f8565b60208201516001600160a01b031615611a7e5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016103f8565b509392505050565b5f808251602714611aeb5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616044820152680ceca40d8cadccee8d60bb1b60648201526084016103f8565b5f805b6002811015611b3a57611b02816001612b07565b611b0d906008612b1a565b61ffff16858281518110611b2357611b23612b31565b016020015160f81c901b9190911790600101611aee565b5061ffff811615611b995760405162461bcd60e51b815260206004820152602360248201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360448201526208125160ea1b60648201526084016103f8565b5f805b6004811015611bf457611bb0816003612b07565b611bbb906008612b1a565b63ffffffff1686611bcd836002612b45565b81518110611bdd57611bdd612b31565b016020015160f81c901b9190911790600101611b9c565b5063ffffffff8116600214611c5b5760405162461bcd60e51b815260206004820152602760248201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616044820152666765207479706560c81b60648201526084016103f8565b5f805b6020811015611cb057611c7281601f612b07565b611c7d906008612b1a565b87611c89836006612b45565b81518110611c9957611c99612b31565b016020015160f81c901b9190911790600101611c5e565b505f86602681518110611cc557611cc5612b31565b016020015191976001600160f81b03199092161515965090945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166105c857604051631afcd79f60e31b815260040160405180910390fd5b611d36611ce5565b611d3e612458565b611d46612468565b6105ef81612470565b611d57611ce5565b6105ef8161261d565b5f80516020612ed88339815191525f6001600160401b038084169085161115611d9457611d8d8385612e0c565b9050611da1565b611d9e8484612e0c565b90505b6040805160808101825260038401548082526004850154602083015260058501549282019290925260068401546001600160401b0316606082015242911580611e03575060028401548151611dff916001600160401b031690612b45565b8210155b15611e29576001600160401b038316606082015281815260408101516020820152611e48565b8281606001818151611e3b9190612e2c565b6001600160401b03169052505b6060810151611e58906064612e4c565b602082015160028601546001600160401b039290921691611e839190600160401b900460ff16612b1a565b1015611ee75760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016103f8565b611ef18587612e0c565b6001600160401b031681604001818151611f0b9190612b45565b905250805160038501556020810151600485015560408101516005850155606001516006909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f6060826080015151603014611fc15760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016103f8565b60408051608680825260c082019092525f916020820181803683370190505090505f5b600281101561203857611ff8816001612b07565b612003906008612b1a565b5081515f9083908390811061201a5761201a612b31565b60200101906001600160f81b03191690815f1a905350600101611fe4565b505f5b60048110156120965761204f816003612b07565b61205a906008612b1a565b505f82612068836002612b45565b8151811061207857612078612b31565b60200101906001600160f81b03191690815f1a90535060010161203b565b505f5b60208110156120f357845181602081106120b5576120b5612b31565b1a60f81b826120c5836006612b45565b815181106120d5576120d5612b31565b60200101906001600160f81b03191690815f1a905350600101612099565b505f5b6020811015612153578460200151816020811061211557612115612b31565b1a60f81b82612125836026612b45565b8151811061213557612135612b31565b60200101906001600160f81b03191690815f1a9053506001016120f6565b505f5b60088110156121c75761216a816007612b07565b612175906008612b1a565b60ff1685604001516001600160401b0316901c60f81b828260466121999190612b45565b815181106121a9576121a9612b31565b60200101906001600160f81b03191690815f1a905350600101612156565b505f5b603081101561223257846080015181815181106121e9576121e9612b31565b01602001516001600160f81b0319168261220483604e612b45565b8151811061221457612214612b31565b60200101906001600160f81b03191690815f1a9053506001016121ca565b505f5b60088110156122a457612249816007612b07565b612254906008612b1a565b60608601516001600160401b0390811691161c60f81b8261227683607e612b45565b8151811061228657612286612b31565b60200101906001600160f81b03191690815f1a905350600101612235565b506002816040516122b59190612e77565b602060405180830381855afa1580156122d0573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906122f391906129bf565b94909350915050565b5f8281525f80516020612ef8833981519152602052604081206003015481905f80516020612ed883398151915290600160401b90046001600160401b03166123448582611d60565b5f61234e87612625565b5f888152600885016020526040812060030180546fffffffffffffffff00000000000000001916600160401b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6123a38a858b6109dc565b6040518263ffffffff1660e01b81526004016123bf919061298d565b6020604051808303815f875af11580156123db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ff91906129bf565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b612460611ce5565b6105c86126a7565b6105c8611ce5565b612478611ce5565b80355f80516020612ed883398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb015560146124c46080840160608501612e92565b60ff1611156125315760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016103f8565b5f6125426080840160608501612e92565b60ff16116125aa5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016103f8565b6125ba6080830160608401612e92565b60028201805460ff92909216600160401b0260ff60401b199092169190911790556125eb6060830160408401612b58565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b6109aa611ce5565b5f8181525f80516020612ef88339815191526020526040812060030180545f80516020612ed8833981519152916001600160401b03909116908361266883612eb2565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b6126af611ce5565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5080546126e1906129d6565b5f825580601f106126f0575050565b601f0160209004905f5260205f20908101906105ef9190612750565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115612764575f8155600101612751565b5090565b5f60208284031215612778575f80fd5b5035919050565b5f6020828403121561278f575f80fd5b813563ffffffff811681146127a2575f80fd5b9392505050565b6001600160a01b03811681146105ef575f80fd5b5f8082840360a08112156127cf575f80fd5b60808112156127dc575f80fd5b5082915060808301356127ee816127a9565b809150509250929050565b80356001600160401b038116811461280f575f80fd5b919050565b5f8060408385031215612825575f80fd5b82356001600160401b0381111561283a575f80fd5b83016060818603121561284b575f80fd5b9150612859602084016127f9565b90509250929050565b634e487b7160e01b5f52602160045260245ffd5b81516101008201906006811061289a57634e487b7160e01b5f52602160045260245ffd5b808352506020830151602083015260408301516128c260408401826001600160a01b03169052565b5060608301516128dd60608401826001600160401b03169052565b5060808301516128f860808401826001600160401b03169052565b5060a083015161291360a08401826001600160401b03169052565b5060c083015161292e60c08401826001600160401b03169052565b5060e083015161294960e08401826001600160401b03169052565b5092915050565b5f60208284031215612960575f80fd5b81356127a2816127a9565b5f5b8381101561298557818101518382015260200161296d565b50505f910152565b602081525f82518060208401526129ab81604085016020870161296b565b601f01601f19169190910160400192915050565b5f602082840312156129cf575f80fd5b5051919050565b600181811c908216806129ea57607f821691505b602082108103612a0857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f8454612a67816129d6565b806020870152604060018084165f8114612a885760018114612aa457612ad1565b60ff19851660408a0152604084151560051b8a01019550612ad1565b895f5260205f205f5b85811015612ac85781548b8201860152908301908801612aad565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156105e0576105e0612af3565b80820281158282048414176105e0576105e0612af3565b634e487b7160e01b5f52603260045260245ffd5b808201808211156105e0576105e0612af3565b5f60208284031215612b68575f80fd5b6105dd826127f9565b5f808335601e19843603018112612b86575f80fd5b8301803591506001600160401b03821115612b9f575f80fd5b602001915036819003821315612451575f80fd5b601f8211156108be57805f5260205f20601f840160051c81016020851015612bd85750805b601f840160051c820191505b81811015612bf7575f8155600101612be4565b5050505050565b81516001600160401b03811115612c1757612c17612adf565b612c2b81612c2584546129d6565b84612bb3565b602080601f831160018114612c5e575f8415612c475750858301515b5f19600386901b1c1916600185901b178555612cb5565b5f85815260208120601f198616915b82811015612c8c57888601518255948401946001909101908401612c6d565b5085821015612ca957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b604051606081016001600160401b0381118282101715612cdf57612cdf612adf565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d0d57612d0d612adf565b604052919050565b8051801515811461280f575f80fd5b5f8060408385031215612d35575f80fd5b82516001600160401b0380821115612d4b575f80fd5b9084019060608287031215612d5e575f80fd5b612d66612cbd565b82518152602080840151612d79816127a9565b82820152604084015183811115612d8e575f80fd5b80850194505087601f850112612da2575f80fd5b835183811115612db457612db4612adf565b612dc6601f8201601f19168301612ce5565b93508084528882828701011115612ddb575f80fd5b612dea8183860184880161296b565b50826040830152819550612dff818801612d15565b9450505050509250929050565b6001600160401b0382811682821603908082111561294957612949612af3565b6001600160401b0381811683821601908082111561294957612949612af3565b6001600160401b03818116838216028082169190828114612e6f57612e6f612af3565b505092915050565b5f8251612e8881846020870161296b565b9190910192915050565b5f60208284031215612ea2575f80fd5b813560ff811681146127a2575f80fd5b5f6001600160401b03808316818103612ecd57612ecd612af3565b600101939250505056fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", + Bin: "0x608060405234801561000f575f80fd5b5060405161308838038061308883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b612f3b8061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106100fb575f3560e01c806397fb70d411610093578063c974d1b611610063578063c974d1b61461025c578063d5f20ff614610276578063df93d8de14610296578063f2fde38b146102a0575f80fd5b806397fb70d414610215578063a3a65e4814610228578063b771b3bc1461023b578063bee0a03f14610249575f80fd5b806366435abf116100ce57806366435abf1461018b578063715018a6146101b65780638994ab49146101be5780638da5cb5b146101d1575f80fd5b80630322ed98146100ff5780630cdd098514610114578063467ef06f14610165578063580a400614610178575b5f80fd5b61011261010d36600461277f565b6102b3565b005b61015261012236600461277f565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b610112610173366004612796565b610488565b6101126101863660046127d4565b610495565b61019e61019936600461277f565b6105a3565b6040516001600160401b03909116815260200161015c565b6101126105b7565b6101526101cc36600461282b565b6105ca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161015c565b61011261022336600461277f565b6105e6565b610112610236366004612796565b6105f2565b6101fd6005600160991b0181565b61011261025736600461277f565b6107af565b610264601481565b60405160ff909116815260200161015c565b61028961028436600461277f565b6108c3565b60405161015c919061288d565b61019e6202a30081565b6101126102ae366004612967565b6109a2565b5f8181525f80516020612f0f83398151915260205260408082208151610100810190925280545f80516020612eef83398151915293929190829060ff16600581111561030157610301612879565b600581111561031257610312612879565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091508151600581111561039757610397612879565b146104015760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084015b60405180910390fd5b6005600160991b016001600160a01b031663ee5b48eb6104268584608001515f6109dc565b6040518263ffffffff1660e01b815260040161044291906129a4565b6020604051808303815f875af115801561045e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048291906129d6565b50505050565b61049181610bf9565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156104d95750825b90505f826001600160401b031660011480156104f45750303b155b905081158015610502575080155b156105205760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561054a57845460ff60401b1916600160401b1785555b6105548787610f6c565b831561059a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f6105ad826108c3565b60a0015192915050565b6105bf610f86565b6105c85f610fe1565b565b5f6105d3610f86565b6105dd8383611051565b90505b92915050565b6105ef8161158c565b50565b5f80516020612eef8339815191525f61060a836118a5565b90505f8061061b8360400151611a86565b915091508061067d5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016103f8565b5f82815260078501602052604081208054610697906129ed565b90501180156106c9575060015f83815260088601602052604090205460ff1660058111156106c7576106c7612879565b145b6106e55760405162461bcd60e51b81526004016103f890612a25565b5f82815260078501602052604081206106fd916126ec565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020612eef8339815191529291906107f7906129ed565b9050118015610829575060015f83815260088301602052604090205460ff16600581111561082757610827612879565b145b6108455760405162461bcd60e51b81526004016103f890612a25565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161087e9190600401612a6c565b6020604051808303815f875af115801561089a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108be91906129d6565b505050565b6108cb612723565b5f8281525f80516020612f0f8339815191526020526040908190208151610100810190925280545f80516020612eef833981519152929190829060ff16600581111561091957610919612879565b600581111561092a5761092a612879565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6109aa610f86565b6001600160a01b0381166109d357604051631e4fbdf760e01b81525f60048201526024016103f8565b6105ef81610fe1565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015610a5557610a15816001612b1e565b610a20906008612b31565b5081515f90839083908110610a3757610a37612b48565b60200101906001600160f81b03191690815f1a905350600101610a01565b505f5b6004811015610ab857610a6c816003612b1e565b610a77906008612b31565b6001901c60f81b82610a8a836002612b5c565b81518110610a9a57610a9a612b48565b60200101906001600160f81b03191690815f1a905350600101610a58565b505f5b6020811015610b1a57610acf81601f612b1e565b610ada906008612b31565b86901c60f81b82610aec836006612b5c565b81518110610afc57610afc612b48565b60200101906001600160f81b03191690815f1a905350600101610abb565b505f5b6008811015610b8557610b31816007612b1e565b610b3c906008612b31565b6001600160401b038616901c60f81b82610b57836026612b5c565b81518110610b6757610b67612b48565b60200101906001600160f81b03191690815f1a905350600101610b1d565b505f5b6008811015610bf057610b9c816007612b1e565b610ba7906008612b31565b6001600160401b038516901c60f81b82610bc283602e612b5c565b81518110610bd257610bd2612b48565b60200101906001600160f81b03191690815f1a905350600101610b88565b50949350505050565b610c01612723565b5f80516020612eef8339815191525f610c19846118a5565b90505f80610c2a8360400151611a86565b915091508015610c8f5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016103f8565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115610cc157610cc1612879565b6005811115610cd257610cd2612879565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115610d5957610d59612879565b1480610d775750600182516005811115610d7557610d75612879565b145b610dd65760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016103f8565b600382516005811115610deb57610deb612879565b03610df857506004610dfc565b5060055b6020808301515f90815260098801909152604081205581816005811115610e2557610e25612879565b90816005811115610e3857610e38612879565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115610e6c57610e6c612879565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115610f3757610f37612879565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b610f74611ce5565b610f7d82611d2e565b61049181611d4f565b33610fb87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105c85760405163118cdaa760e01b81523360048201526024016103f8565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f5f80516020612eef833981519152426110716040860160208701612b6f565b6001600160401b0316116110e35760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016103f8565b6110f36040850160208601612b6f565b6001600160401b03166111096202a30042612b5c565b1161117c5760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016103f8565b83356111d45760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016103f8565b83355f908152600982016020526040902054156112445760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016103f8565b6112516040850185612b88565b90506030146112b85760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016103f8565b6112c2835f611d60565b5f8061135c6040518060a0016040528085600101548152602001885f01358152602001876001600160401b031681526020018860200160208101906113079190612b6f565b6001600160401b0316815260200161132260408a018a612b88565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250611f6e565b5f8281526007860160205260409020919350915061137a8282612c15565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906113a79085906004016129a4565b6020604051808303815f875af11580156113c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e791906129d6565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff1916600183600581111561146957611469612879565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b9161155e91908e01908e01612b6f565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f8181525f80516020612f0f83398151915260205260408082208151610100810190925280545f80516020612eef83398151915293929190829060ff1660058111156115da576115da612879565b60058111156115eb576115eb612879565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e0909101529091508151600581111561167357611673612879565b146116cf5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016103f8565b60408101516001600160a01b0316336001600160a01b0316146117495760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016103f8565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561178d5761178d612879565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f6118508482612313565b60a0840151604080516001600160401b03909216825242602083015291935083925086917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a350505050565b60408051606080820183525f8083526020830181905292820152905f80516020612eef8339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561191a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119419190810190612d3b565b91509150806119a85760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016103f8565b8254825114611a0b5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016103f8565b60208201516001600160a01b031615611a7e5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016103f8565b509392505050565b5f808251602714611aeb5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616044820152680ceca40d8cadccee8d60bb1b60648201526084016103f8565b5f805b6002811015611b3a57611b02816001612b1e565b611b0d906008612b31565b61ffff16858281518110611b2357611b23612b48565b016020015160f81c901b9190911790600101611aee565b5061ffff811615611b995760405162461bcd60e51b815260206004820152602360248201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360448201526208125160ea1b60648201526084016103f8565b5f805b6004811015611bf457611bb0816003612b1e565b611bbb906008612b31565b63ffffffff1686611bcd836002612b5c565b81518110611bdd57611bdd612b48565b016020015160f81c901b9190911790600101611b9c565b5063ffffffff8116600214611c5b5760405162461bcd60e51b815260206004820152602760248201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616044820152666765207479706560c81b60648201526084016103f8565b5f805b6020811015611cb057611c7281601f612b1e565b611c7d906008612b31565b87611c89836006612b5c565b81518110611c9957611c99612b48565b016020015160f81c901b9190911790600101611c5e565b505f86602681518110611cc557611cc5612b48565b016020015191976001600160f81b03199092161515965090945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166105c857604051631afcd79f60e31b815260040160405180910390fd5b611d36611ce5565b611d3e61246f565b611d4661247f565b6105ef81612487565b611d57611ce5565b6105ef81612634565b5f80516020612eef8339815191525f6001600160401b038084169085161115611d9457611d8d8385612e23565b9050611da1565b611d9e8484612e23565b90505b6040805160808101825260038401548082526004850154602083015260058501549282019290925260068401546001600160401b0316606082015242911580611e03575060028401548151611dff916001600160401b031690612b5c565b8210155b15611e29576001600160401b038316606082015281815260408101516020820152611e48565b8281606001818151611e3b9190612e43565b6001600160401b03169052505b6060810151611e58906064612e63565b602082015160028601546001600160401b039290921691611e839190600160401b900460ff16612b31565b1015611ee75760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016103f8565b856001600160401b031681604001818151611f029190612b5c565b9052506040810180516001600160401b0387169190611f22908390612b1e565b905250805160038501556020810151600485015560408101516005850155606001516006909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f6060826080015151603014611fd85760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016103f8565b60408051608680825260c082019092525f916020820181803683370190505090505f5b600281101561204f5761200f816001612b1e565b61201a906008612b31565b5081515f9083908390811061203157612031612b48565b60200101906001600160f81b03191690815f1a905350600101611ffb565b505f5b60048110156120ad57612066816003612b1e565b612071906008612b31565b505f8261207f836002612b5c565b8151811061208f5761208f612b48565b60200101906001600160f81b03191690815f1a905350600101612052565b505f5b602081101561210a57845181602081106120cc576120cc612b48565b1a60f81b826120dc836006612b5c565b815181106120ec576120ec612b48565b60200101906001600160f81b03191690815f1a9053506001016120b0565b505f5b602081101561216a578460200151816020811061212c5761212c612b48565b1a60f81b8261213c836026612b5c565b8151811061214c5761214c612b48565b60200101906001600160f81b03191690815f1a90535060010161210d565b505f5b60088110156121de57612181816007612b1e565b61218c906008612b31565b60ff1685604001516001600160401b0316901c60f81b828260466121b09190612b5c565b815181106121c0576121c0612b48565b60200101906001600160f81b03191690815f1a90535060010161216d565b505f5b6030811015612249578460800151818151811061220057612200612b48565b01602001516001600160f81b0319168261221b83604e612b5c565b8151811061222b5761222b612b48565b60200101906001600160f81b03191690815f1a9053506001016121e1565b505f5b60088110156122bb57612260816007612b1e565b61226b906008612b31565b60608601516001600160401b0390811691161c60f81b8261228d83607e612b5c565b8151811061229d5761229d612b48565b60200101906001600160f81b03191690815f1a90535060010161224c565b506002816040516122cc9190612e8e565b602060405180830381855afa1580156122e7573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061230a91906129d6565b94909350915050565b5f8281525f80516020612f0f833981519152602052604081206003015481905f80516020612eef83398151915290600160401b90046001600160401b031661235b8582611d60565b5f6123658761263c565b5f888152600885016020526040812060030180546fffffffffffffffff00000000000000001916600160401b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6123ba8a858b6109dc565b6040518263ffffffff1660e01b81526004016123d691906129a4565b6020604051808303815f875af11580156123f2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241691906129d6565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b612477611ce5565b6105c86126be565b6105c8611ce5565b61248f611ce5565b80355f80516020612eef83398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb015560146124db6080840160608501612ea9565b60ff1611156125485760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016103f8565b5f6125596080840160608501612ea9565b60ff16116125c15760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016103f8565b6125d16080830160608401612ea9565b60028201805460ff92909216600160401b0260ff60401b199092169190911790556126026060830160408401612b6f565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b6109aa611ce5565b5f8181525f80516020612f0f8339815191526020526040812060030180545f80516020612eef833981519152916001600160401b03909116908361267f83612ec9565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b6126c6611ce5565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5080546126f8906129ed565b5f825580601f10612707575050565b601f0160209004905f5260205f20908101906105ef9190612767565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561277b575f8155600101612768565b5090565b5f6020828403121561278f575f80fd5b5035919050565b5f602082840312156127a6575f80fd5b813563ffffffff811681146127b9575f80fd5b9392505050565b6001600160a01b03811681146105ef575f80fd5b5f8082840360a08112156127e6575f80fd5b60808112156127f3575f80fd5b508291506080830135612805816127c0565b809150509250929050565b80356001600160401b0381168114612826575f80fd5b919050565b5f806040838503121561283c575f80fd5b82356001600160401b03811115612851575f80fd5b830160608186031215612862575f80fd5b915061287060208401612810565b90509250929050565b634e487b7160e01b5f52602160045260245ffd5b8151610100820190600681106128b157634e487b7160e01b5f52602160045260245ffd5b808352506020830151602083015260408301516128d960408401826001600160a01b03169052565b5060608301516128f460608401826001600160401b03169052565b50608083015161290f60808401826001600160401b03169052565b5060a083015161292a60a08401826001600160401b03169052565b5060c083015161294560c08401826001600160401b03169052565b5060e083015161296060e08401826001600160401b03169052565b5092915050565b5f60208284031215612977575f80fd5b81356127b9816127c0565b5f5b8381101561299c578181015183820152602001612984565b50505f910152565b602081525f82518060208401526129c2816040850160208701612982565b601f01601f19169190910160400192915050565b5f602082840312156129e6575f80fd5b5051919050565b600181811c90821680612a0157607f821691505b602082108103612a1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f8454612a7e816129ed565b806020870152604060018084165f8114612a9f5760018114612abb57612ae8565b60ff19851660408a0152604084151560051b8a01019550612ae8565b895f5260205f205f5b85811015612adf5781548b8201860152908301908801612ac4565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156105e0576105e0612b0a565b80820281158282048414176105e0576105e0612b0a565b634e487b7160e01b5f52603260045260245ffd5b808201808211156105e0576105e0612b0a565b5f60208284031215612b7f575f80fd5b6105dd82612810565b5f808335601e19843603018112612b9d575f80fd5b8301803591506001600160401b03821115612bb6575f80fd5b602001915036819003821315612468575f80fd5b601f8211156108be57805f5260205f20601f840160051c81016020851015612bef5750805b601f840160051c820191505b81811015612c0e575f8155600101612bfb565b5050505050565b81516001600160401b03811115612c2e57612c2e612af6565b612c4281612c3c84546129ed565b84612bca565b602080601f831160018114612c75575f8415612c5e5750858301515b5f19600386901b1c1916600185901b178555612ccc565b5f85815260208120601f198616915b82811015612ca357888601518255948401946001909101908401612c84565b5085821015612cc057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b604051606081016001600160401b0381118282101715612cf657612cf6612af6565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612d2457612d24612af6565b604052919050565b80518015158114612826575f80fd5b5f8060408385031215612d4c575f80fd5b82516001600160401b0380821115612d62575f80fd5b9084019060608287031215612d75575f80fd5b612d7d612cd4565b82518152602080840151612d90816127c0565b82820152604084015183811115612da5575f80fd5b80850194505087601f850112612db9575f80fd5b835183811115612dcb57612dcb612af6565b612ddd601f8201601f19168301612cfc565b93508084528882828701011115612df2575f80fd5b612e0181838601848801612982565b50826040830152819550612e16818801612d2c565b9450505050509250929050565b6001600160401b0382811682821603908082111561296057612960612b0a565b6001600160401b0381811683821601908082111561296057612960612b0a565b6001600160401b03818116838216028082169190828114612e8657612e86612b0a565b505092915050565b5f8251612e9f818460208701612982565b9190910192915050565b5f60208284031215612eb9575f80fd5b813560ff811681146127b9575f80fd5b5f6001600160401b03808316818103612ee457612ee4612b0a565b600101939250505056fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/staking/ValidatorManager.sol b/contracts/staking/ValidatorManager.sol index bd4b5373b..ae1ae3e9a 100644 --- a/contracts/staking/ValidatorManager.sol +++ b/contracts/staking/ValidatorManager.sol @@ -434,7 +434,9 @@ abstract contract ValidatorManager is "ValidatorManager: maximum churn rate exceeded" ); - churnTracker.totalWeight += newWeight - oldWeight; + // Two separate calculations because we're using uints and (newWeight - oldWeight) could underflow. + churnTracker.totalWeight += newWeight; + churnTracker.totalWeight -= oldWeight; $._churnTracker = churnTracker; }