From b59614d6d3be9c19d8b79b4467c8bf2a700ac905 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 3 Sep 2024 15:51:26 -0500 Subject: [PATCH 1/5] track uptimes for delegation period --- .../ERC20TokenStakingManager.go | 28 +++---- .../NativeTokenStakingManager.go | 28 +++---- contracts/staking/PoSValidatorManager.sol | 75 +++++++++++-------- .../interfaces/IPoSValidatorManager.sol | 11 ++- .../tests/PoSValidatorManagerTests.t.sol | 2 +- 5 files changed, 84 insertions(+), 60 deletions(-) diff --git a/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 195f53393..6eb6a1441 100644 --- a/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -47,8 +47,8 @@ type ValidatorManagerSettings 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\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"maximumHourlyChurn\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndDelegation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"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\":\"ValidationUptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"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\":\"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: "0x608060405234801561000f575f80fd5b506040516147b73803806147b783398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b61466a8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c80636a7e3d831161009e5780639e1bc4ef1161006e5780639e1bc4ef1461021b578063a3a65e481461022e578063b771b3bc14610241578063bee0a03f14610267578063d61bed741461027a575f80fd5b80636a7e3d83146101cf57806376f78621146101e2578063872fda64146101f5578063927e7e7514610208575f80fd5b80632e2194d8116100d95780632e2194d814610158578063467ef06f14610188578063620658561461019b57806366435abf146101bc575f80fd5b80630322ed981461010a5780630915204e1461011f5780630b77f6931461013257806327f39ca814610145575b5f80fd5b61011d610118366004613c2a565b61028d565b005b61011d61012d366004613c6d565b6103ee565b61011d610140366004613ca2565b6105bf565b61011d610153366004613cc5565b610687565b61016b610166366004613c2a565b610795565b6040516001600160401b0390911681526020015b60405180910390f35b61011d610196366004613cf7565b6107ab565b6101ae6101a9366004613d2d565b610b07565b60405190815260200161017f565b61016b6101ca366004613c2a565b610b20565b61011d6101dd366004613ca2565b610b34565b61011d6101f0366004613d53565b610bb6565b6101ae610203366004613e20565b610ecf565b61011d610216366004613c2a565b610ef4565b61011d610229366004613ebc565b611306565b61011d61023c366004613cf7565b611315565b61024f6005600160991b0181565b6040516001600160a01b03909116815260200161017f565b61011d610275366004613c2a565b6114c9565b61011d610288366004613c6d565b611598565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040812080545f805160206145fe8339815191529291906102d590613edc565b9050118015610307575060035f83815260078301602052604090205460ff16600581111561030557610305613f14565b145b6103705760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084015b60405180910390fd5b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916103a99190600401613f28565b6020604051808303815f875af11580156103c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103e99190613fb2565b505050565b5f805160206145de8339815191525f61040684611794565b90505f806104178360400151611975565b50915091506104268286611bb0565b5f82815260058501602090815260408083206001600160a01b0389168452909152812061045291613be0565b5f61045c83611cc3565b9050816001600160401b031681606001516001600160401b031610156104945760405162461bcd60e51b815260040161036790613fc9565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020600101546001600160401b03808416911611156104e65760405162461bcd60e51b81526004016103679061400b565b60035f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160401b900460ff16600481111561052a5761052a613f14565b146105475760405162461bcd60e51b815260040161036790614054565b5f83815260038601602090815260408083206001600160a01b038a168085529252808320600101805460ff60401b191668040000000000000000179055516001600160401b0385169286917f4da588c356f0bfa46c394126d28890aaadfc4ed6c26a611d14275e13ad1057dd9190a450505050505050565b6105c98282611dbe565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f805160206145de833981519152916005600160991b019163ee5b48eb9161064191600401613f28565b6020604051808303815f875af115801561065d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106819190613fb2565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156106cb5750825b90505f826001600160401b031660011480156106e65750303b155b9050811580156106f4575080155b156107125760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561073c57845460ff60401b1916600160401b1785555b6107468787611edc565b831561078c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f6107a564e8d4a51000836140cc565b92915050565b5f805160206145fe8339815191525f6107c383611794565b90505f806107d48360400151611ef6565b9150915080156108395760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b6064820152608401610367565b5f828152600785016020526040808220815160e081019092528054829060ff16600581111561086a5761086a613f14565b600581111561087b5761087b613f14565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b90041660c0909101529091505f90825160058111156108f4576108f4613f14565b1480610912575060018251600581111561091057610910613f14565b145b6109715760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b6064820152608401610367565b60038251600581111561098657610986613f14565b036109ad57505f83815260068601602052604081206004916109a89190613be0565b6109b1565b5060055b6020808301515f908152600888019091526040812055818160058111156109da576109da613f14565b908160058111156109ed576109ed613f14565b9052505f84815260078701602052604090208251815484929190829060ff19166001836005811115610a2157610a21613f14565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b929091169190910217905581516005811115610ad457610ad4613f14565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a350505050505050565b5f6107a56001600160401b03831664e8d4a510006140df565b5f610b2a82611cc3565b6080015192915050565b610b3e8282611bb0565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f805160206145de833981519152916005600160991b019163ee5b48eb9161064191600401613f28565b8115610ec6575f5f805160206145de8339815191526040516306f8253560e41b815263ffffffff841660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015610c17573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c3e9190810190614123565b9150915080610ca15760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b6064820152608401610367565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ce4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d089190613fb2565b825114610d6c5760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b6064820152608401610367565b60208201516001600160a01b031615610de25760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b6064820152608401610367565b5f80610df18460400151612097565b91509150818814610e5e5760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b6064820152608401610367565b5f888152600686016020908152604091829020805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c910160405180910390a250505050505b6103e98361226f565b5f80610eda866125c1565b9050610ee88582868661266e565b9150505b949350505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03602090815260408083203384528252808320815160c08101835281546001600160401b038082168352600160401b808304821696840196909652600160801b8204811694830194909452600160c01b900483166060820152600182015492831660808201525f805160206145de8339815191529493909260a0840191900460ff166004811115610fab57610fab613f14565b6004811115610fbc57610fbc613f14565b905250905060028160a001516004811115610fd957610fd9613f14565b146110355760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2064656c656761746f72206e6f742060448201526561637469766560d01b6064820152608401610367565b5f61103f84612aa2565b9050600360a08301819052506001600160401b0342811660408085019190915290821660808401525f85815260038501602052908120839161107e3390565b6001600160a01b0316815260208082019290925260409081015f2083518154938501519285015160608601516001600160401b039283166001600160801b031990961695909517600160401b9483168502176001600160801b0316600160801b918316919091026001600160c01b031617600160c01b94821694909402939093178155608084015160018201805467ffffffffffffffff19811692909516918217815560a086015192949293909268ffffffffffffffffff19169091179083600481111561114e5761114e613f14565b02179055509050505f61116085611cc3565b9050825f01516001600160401b031681608001516001600160401b0316116111d65760405162461bcd60e51b815260206004820152602360248201527f506f5356616c696461746f724d616e616765723a20496e76616c69642077656960448201526219da1d60ea1b6064820152608401610367565b82516080820180516111e99083906141f5565b6001600160401b03169052506111ff8582612b1d565b5f61120f86848460800151612c0c565b5f878152600587016020908152604080832033845290915290209091506112368282614267565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611263908590600401614326565b6020604051808303815f875af115801561127f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a39190613fb2565b6080840151604080516001600160401b039283168152918716602083015242908201529091503390829089907fadec5acd02ee9a5280893bb168456a89d9b0004eee87906795b290740f2e4bde906060015b60405180910390a450505050505050565b611311823383612e29565b5050565b5f805160206145fe8339815191525f61132d83611794565b90505f8061133e8360400151611ef6565b91509150806113a05760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b6064820152608401610367565b5f828152600585016020526040812080546113ba90613edc565b90501180156113ec575060015f83815260078601602052604090205460ff1660058111156113ea576113ea613f14565b145b6114085760405162461bcd60e51b815260040161036790614358565b5f828152600585016020526040812061142091613be0565b5f8281526007850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092178355600190930154875260088b0185528387208990559588905293835292548151931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb056020526040812080545f805160206145fe83398151915292919061151190613edc565b9050118015611543575060015f83815260078301602052604090205460ff16600581111561154157611541613f14565b145b61155f5760405162461bcd60e51b815260040161036790614358565b5f82815260058201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916103a99190600401613f28565b5f805160206145de8339815191525f6115b084611794565b90505f806115c18360400151611975565b50915091506115d08286611dbe565b5f82815260048501602090815260408083206001600160a01b038916845290915281206115fc91613be0565b5f61160683611cc3565b9050816001600160401b031681606001516001600160401b0316101561163e5760405162461bcd60e51b815260040161036790613fc9565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020546001600160401b03808416600160c01b9092041611156116945760405162461bcd60e51b81526004016103679061400b565b60015f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160401b900460ff1660048111156116d8576116d8613f14565b146116f55760405162461bcd60e51b815260040161036790614054565b5f83815260038601602090815260408083206001600160a01b038a168085529083529281902060018101805460ff60401b191668020000000000000000179055805467ffffffffffffffff60401b1916600160401b426001600160401b03818116929092029290921790925591519182528516929186917fd63c8a1fc829b22698176813c742597f94f9278dde21a64f7a8192e905f932b691016112f5565b60408051606080820183525f8083526020830181905292820152905f805160206145fe8339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611809573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118309190810190614123565b91509150806118975760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b6064820152608401610367565b82548251146118fa5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b6064820152608401610367565b60208201516001600160a01b03161561196d5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b6064820152608401610367565b509392505050565b5f805f83516036146119995760405162461bcd60e51b81526004016103679061439f565b5f805b60028110156119e8576119b08160016143e8565b6119bb9060086140df565b61ffff168682815181106119d1576119d16143fb565b016020015160f81c901b919091179060010161199c565b5061ffff811615611a0b5760405162461bcd60e51b81526004016103679061440f565b5f805b6004811015611a6657611a228160036143e8565b611a2d9060086140df565b63ffffffff1687611a3f836002614452565b81518110611a4f57611a4f6143fb565b016020015160f81c901b9190911790600101611a0e565b5063ffffffff8116600314611a8d5760405162461bcd60e51b815260040161036790614465565b5f805b6020811015611ae257611aa481601f6143e8565b611aaf9060086140df565b88611abb836006614452565b81518110611acb57611acb6143fb565b016020015160f81c901b9190911790600101611a90565b505f805b6008811015611b4157611afa8160076143e8565b611b059060086140df565b6001600160401b031689611b1a836026614452565b81518110611b2a57611b2a6143fb565b016020015160f81c901b9190911790600101611ae6565b505f805b6008811015611ba057611b598160076143e8565b611b649060086140df565b6001600160401b03168a611b7983602e614452565b81518110611b8957611b896143fb565b016020015160f81c901b9190911790600101611b45565b5091989097509095509350505050565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b0385168452909152812080545f805160206145de833981519152929190611c0c90613edc565b9050118015611c5c575060035f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160401b900460ff166004811115611c5a57611c5a613f14565b145b6103e95760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f722072604482015271656d6f76616c206e6f742070656e64696e6760701b6064820152608401610367565b6040805160e080820183525f8083526020808401829052838501829052606084018290526080840182905260a0840182905260c084018290528582525f8051602061463e83398151915290528390208351918201909352825491925f805160206145fe83398151915292829060ff166005811115611d4357611d43613f14565b6005811115611d5457611d54613f14565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b900490911660c0909101529392505050565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b0385168452909152812080545f805160206145de833981519152929190611e1a90613edc565b9050118015611e6a575060015f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160401b900460ff166004811115611e6857611e68613f14565b145b6103e95760405162461bcd60e51b815260206004820152603760248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72207260448201527f6567697374726174696f6e206e6f742070656e64696e670000000000000000006064820152608401610367565b611ee46131a5565b611eed826131f0565b61131181613236565b5f808251602714611f195760405162461bcd60e51b81526004016103679061439f565b5f805b6002811015611f6857611f308160016143e8565b611f3b9060086140df565b61ffff16858281518110611f5157611f516143fb565b016020015160f81c901b9190911790600101611f1c565b5061ffff811615611f8b5760405162461bcd60e51b81526004016103679061440f565b5f805b6004811015611fe657611fa28160036143e8565b611fad9060086140df565b63ffffffff1686611fbf836002614452565b81518110611fcf57611fcf6143fb565b016020015160f81c901b9190911790600101611f8e565b5063ffffffff811660021461200d5760405162461bcd60e51b815260040161036790614465565b5f805b60208110156120625761202481601f6143e8565b61202f9060086140df565b8761203b836006614452565b8151811061204b5761204b6143fb565b016020015160f81c901b9190911790600101612010565b505f86602681518110612077576120776143fb565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e146120ba5760405162461bcd60e51b81526004016103679061439f565b5f805b6002811015612109576120d18160016143e8565b6120dc9060086140df565b61ffff168582815181106120f2576120f26143fb565b016020015160f81c901b91909117906001016120bd565b5061ffff81161561212c5760405162461bcd60e51b81526004016103679061440f565b5f805b6004811015612187576121438160036143e8565b61214e9060086140df565b63ffffffff1686612160836002614452565b81518110612170576121706143fb565b016020015160f81c901b919091179060010161212f565b5063ffffffff81166004146121ae5760405162461bcd60e51b815260040161036790614465565b5f805b6020811015612203576121c581601f6143e8565b6121d09060086140df565b876121dc836006614452565b815181106121ec576121ec6143fb565b016020015160f81c901b91909117906001016121b1565b505f805b60088110156122625761221b8160076143e8565b6122269060086140df565b6001600160401b03168861223b836026614452565b8151811061224b5761224b6143fb565b016020015160f81c901b9190911790600101612207565b5090969095509350505050565b5f8181525f8051602061463e8339815191526020526040808220815160e0810190925280545f805160206145fe83398151915293929190829060ff1660058111156122bc576122bc613f14565b60058111156122cd576122cd613f14565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b900490921660c0909101529091508151600581111561234757612347613f14565b146123645760405162461bcd60e51b8152600401610367906144ac565b60408101516001600160a01b0316336001600160a01b0316146123de5760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b6064820152608401610367565b6123eb81608001516132ea565b60038152426001600160401b031660c08201525f83815260078301602052604090208151815483929190829060ff1916600183600581111561242f5761242f613f14565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b92909116919091021790555f6124e3846124dd81612aa2565b5f612c0c565b5f85815260068501602052604090209091506124ff8282614267565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061252c908590600401614326565b6020604051808303815f875af1158015612548573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061256c9190613fb2565b6080840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b5f5f805160206145de833981519152816125da8461348b565b90505f6125e682610795565b83549091506001600160401b0382161080159061261057508260010154816001600160401b031611155b610eec5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207374616044820152681ad948185b5bdd5b9d60ba1b6064820152608401610367565b5f6126776134c1565b5f805160206145fe833981519152426001600160401b0385161180156126b157506001600160401b0384166126af426202a300614452565b115b6127135760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c69642072656769737460448201526c726174696f6e2065787069727960981b6064820152608401610367565b8561276a5760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b6064820152608401610367565b5f868152600882016020526040902054156127d85760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b6064820152608401610367565b825160301461283f5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b6064820152608401610367565b612848856132ea565b5f8061288f6040518060a00160405280856001015481526020018a8152602001896001600160401b03168152602001886001600160401b03168152602001878152506134f8565b5f828152600586016020526040902091935091506128ad8282614267565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906128da908590600401614326565b6020604051808303815f875af11580156128f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061291a9190613fb2565b6040805160e08101825260018152602081018c90529192508101336001600160a01b031681525f60208083018290526001600160401b038c166040808501919091526060840183905260809093018290528682526007880190522081518154829060ff1916600183600581111561299357612993613f14565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055612a3c83612aa2565b50604080516001600160401b03808b1682528916602082015282918b9186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e910160405180910390a4509092505050610eec60015f8051602061461e83398151915255565b5f8181525f8051602061463e8339815191526020526040812060020180545f805160206145fe83398151915291600160a01b9091046001600160401b03169081906014612aee836144f2565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508092505050919050565b5f8281525f8051602061463e83398151915260205260409020815181545f805160206145fe8339815191529284929091829060ff19166001836005811115612b6757612b67613f14565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055505050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015612c8557612c458160016143e8565b612c509060086140df565b5081515f90839083908110612c6757612c676143fb565b60200101906001600160f81b03191690815f1a905350600101612c31565b505f5b6004811015612ce857612c9c8160036143e8565b612ca79060086140df565b6001901c60f81b82612cba836002614452565b81518110612cca57612cca6143fb565b60200101906001600160f81b03191690815f1a905350600101612c88565b505f5b6020811015612d4a57612cff81601f6143e8565b612d0a9060086140df565b86901c60f81b82612d1c836006614452565b81518110612d2c57612d2c6143fb565b60200101906001600160f81b03191690815f1a905350600101612ceb565b505f5b6008811015612db557612d618160076143e8565b612d6c9060086140df565b6001600160401b038616901c60f81b82612d87836026614452565b81518110612d9757612d976143fb565b60200101906001600160f81b03191690815f1a905350600101612d4d565b505f5b6008811015612e2057612dcc8160076143e8565b612dd79060086140df565b6001600160401b038516901c60f81b82612df283602e614452565b81518110612e0257612e026143fb565b60200101906001600160f81b03191690815f1a905350600101612db8565b50949350505050565b612e316134c1565b5f612e3e6101668361348b565b90505f805160206145de8339815191525f612e5886611cc3565b9050600281516005811115612e6f57612e6f613f14565b14612e8c5760405162461bcd60e51b8152600401610367906144ac565b5f86815260038301602090815260408083206001600160a01b03891684529091529020546001600160401b031615612f1d5760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f724d616e616765723a2064656c656761746f7220616c726560448201526d18591e481c9959da5cdd195c995960921b6064820152608401610367565b612f26836132ea565b8281608001818151612f389190614517565b6001600160401b0316905250612f4e8682612b1d565b5f612f5887612aa2565b90505f612f6a88838560800151612c0c565b5f89815260048601602090815260408083206001600160a01b038c1684529091529020909150612f9a8282614267565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612fc7908590600401614326565b6020604051808303815f875af1158015612fe3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130079190613fb2565b6040805160c0810182526001600160401b03808a1682525f6020830181905292820183905286166060820152608081019190915290915060a08101600190525f8a815260038701602090815260408083206001600160a01b038d16845282529182902083518154928501519385015160608601516001600160401b039283166001600160801b031990951694909417600160401b9583168602176001600160801b0316600160801b918316919091026001600160c01b031617600160c01b93821693909302929092178155608084015160018201805467ffffffffffffffff19811692909416918217815560a086015192949293909268ffffffffffffffffff199091169091179083600481111561312157613121613f14565b021790555050506080840151604080516001600160401b03808a1682529283166020820152918516908201526001600160a01b0389169082908b907feea0c6dd7e326ed588ce418df1563a24af963b7a54714ba659fab8152435795b9060600160405180910390a45050505050506103e960015f8051602061461e83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166131ee57604051631afcd79f60e31b815260040160405180910390fd5b565b6131f86131a5565b613201816138b0565b6132336060820135608083013561321e60c0850160a08601613d2d565b61322e60e0860160c08701614537565b6138d1565b50565b61323e6131a5565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab006001600160a01b0382166132ca5760405162461bcd60e51b815260206004820152602c60248201527f4552433230546f6b656e5374616b696e674d616e616765723a207a65726f207460448201526b6f6b656e206164647265737360a01b6064820152608401610367565b80546001600160a01b0319166001600160a01b0392909216919091179055565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb02545f805160206145fe8339815191529060ff165f03613328575050565b60408051606081018252600383015480825260048401546001600160401b038082166020850152600160401b9091041692820192909252904290610e109061337090836143e8565b1061338c576001600160401b03841660408301528082526133ab565b838260400181815161339e9190614517565b6001600160401b03169052505b5f8260200151836040015160646133c29190614552565b6133cc919061457d565b600285015490915060ff90811690821611156134475760405162461bcd60e51b815260206004820152603460248201527f56616c696461746f724d616e616765723a206d6178696d756d20686f75726c796044820152730818da1d5c9b881c985d1948195e18d95959195960621b6064820152608401610367565b5050805160038301556020810151600490920180546040909201516001600160401b03908116600160401b026001600160801b031990931693169290921717905550565b5f6107a5827f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546001600160a01b03169061392c565b5f8051602061461e8339815191528054600119016134f257604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f60608260800151516030146135625760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b6064820152608401610367565b60408051608680825260c082019092525f916020820181803683370190505090505f5b60028110156135d9576135998160016143e8565b6135a49060086140df565b5081515f908390839081106135bb576135bb6143fb565b60200101906001600160f81b03191690815f1a905350600101613585565b505f5b6004811015613637576135f08160036143e8565b6135fb9060086140df565b505f82613609836002614452565b81518110613619576136196143fb565b60200101906001600160f81b03191690815f1a9053506001016135dc565b505f5b60208110156136945784518160208110613656576136566143fb565b1a60f81b82613666836006614452565b81518110613676576136766143fb565b60200101906001600160f81b03191690815f1a90535060010161363a565b505f5b60208110156136f457846020015181602081106136b6576136b66143fb565b1a60f81b826136c6836026614452565b815181106136d6576136d66143fb565b60200101906001600160f81b03191690815f1a905350600101613697565b505f5b60088110156137685761370b8160076143e8565b6137169060086140df565b60ff1685604001516001600160401b0316901c60f81b8282604661373a9190614452565b8151811061374a5761374a6143fb565b60200101906001600160f81b03191690815f1a9053506001016136f7565b505f5b60308110156137d3578460800151818151811061378a5761378a6143fb565b01602001516001600160f81b031916826137a583604e614452565b815181106137b5576137b56143fb565b60200101906001600160f81b03191690815f1a90535060010161376b565b505f5b6008811015613845576137ea8160076143e8565b6137f59060086140df565b60608601516001600160401b0390811691161c60f81b8261381783607e614452565b81518110613827576138276143fb565b60200101906001600160f81b03191690815f1a9053506001016137d6565b5060028160405161385691906145a2565b602060405180830381855afa158015613871573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906138949190613fb2565b94909350915050565b60015f8051602061461e83398151915255565b6138b86131a5565b6138c0613a8e565b6138c8613a9e565b61323381613aa6565b6138d96131a5565b5f5f805160206145de833981519152948555506001840192909255600290920180546001600160a01b03909216600160401b026001600160e01b03199092166001600160401b0390931692909217179055565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015613972573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139969190613fb2565b90506139ad6001600160a01b038516333086613b12565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa1580156139f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a159190613fb2565b9050818111613a7b5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610367565b613a8582826143e8565b95945050505050565b613a966131a5565b6131ee613b6c565b6131ee6131a5565b613aae6131a5565b80355f805160206145fe83398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0155613af860608301604084016145bd565b600291909101805460ff191660ff90921691909117905550565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610681908590613b74565b61389d6131a5565b5f8060205f8451602086015f885af180613b93576040513d5f823e3d81fd5b50505f513d91508115613baa578060011415613bb7565b6001600160a01b0384163b155b1561068157604051635274afe760e01b81526001600160a01b0385166004820152602401610367565b508054613bec90613edc565b5f825580601f10613bfb575050565b601f0160209004905f5260205f209081019061323391905b80821115613c26575f8155600101613c13565b5090565b5f60208284031215613c3a575f80fd5b5035919050565b803563ffffffff81168114613c54575f80fd5b919050565b6001600160a01b0381168114613233575f80fd5b5f8060408385031215613c7e575f80fd5b613c8783613c41565b91506020830135613c9781613c59565b809150509250929050565b5f8060408385031215613cb3575f80fd5b823591506020830135613c9781613c59565b5f80828403610100811215613cd8575f80fd5b60e0811215613ce5575f80fd5b5082915060e0830135613c9781613c59565b5f60208284031215613d07575f80fd5b613d1082613c41565b9392505050565b80356001600160401b0381168114613c54575f80fd5b5f60208284031215613d3d575f80fd5b613d1082613d17565b8015158114613233575f80fd5b5f805f60608486031215613d65575f80fd5b833592506020840135613d7781613d46565b9150613d8560408501613c41565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715613dc457613dc4613d8e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613df257613df2613d8e565b604052919050565b5f6001600160401b03821115613e1257613e12613d8e565b50601f01601f191660200190565b5f805f8060808587031215613e33575f80fd5b8435935060208501359250613e4a60408601613d17565b915060608501356001600160401b03811115613e64575f80fd5b8501601f81018713613e74575f80fd5b8035613e87613e8282613dfa565b613dca565b818152886020838501011115613e9b575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f8060408385031215613ecd575f80fd5b50508035926020909101359150565b600181811c90821680613ef057607f821691505b602082108103613f0e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52602160045260245ffd5b5f60208083525f8454613f3a81613edc565b806020870152604060018084165f8114613f5b5760018114613f7757613fa4565b60ff19851660408a0152604084151560051b8a01019550613fa4565b895f5260205f205f5b85811015613f9b5781548b8201860152908301908801613f80565b8a016040019650505b509398975050505050505050565b5f60208284031215613fc2575f80fd5b5051919050565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b60208082526030908201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72206e60408201526f1bdd081c195b991a5b99c8185919195960821b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f826140da576140da6140a4565b500490565b80820281158282048414176107a5576107a56140b8565b5f5b838110156141105781810151838201526020016140f8565b50505f910152565b8051613c5481613d46565b5f8060408385031215614134575f80fd5b82516001600160401b038082111561414a575f80fd5b908401906060828703121561415d575f80fd5b614165613da2565b8251815260208084015161417881613c59565b8282015260408401518381111561418d575f80fd5b80850194505087601f8501126141a1575f80fd5b835192506141b1613e8284613dfa565b83815288828587010111156141c4575f80fd5b6141d3848383018488016140f6565b806040840152508195506141e8818801614118565b9450505050509250929050565b6001600160401b03828116828216039080821115614215576142156140b8565b5092915050565b601f8211156103e957805f5260205f20601f840160051c810160208510156142415750805b601f840160051c820191505b81811015614260575f815560010161424d565b5050505050565b81516001600160401b0381111561428057614280613d8e565b6142948161428e8454613edc565b8461421c565b602080601f8311600181146142c7575f84156142b05750858301515b5f19600386901b1c1916600185901b17855561431e565b5f85815260208120601f198616915b828110156142f5578886015182559484019460019091019084016142d6565b508582101561431257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b602081525f82518060208401526143448160408501602087016140f6565b601f01601f19169190910160400192915050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b818103818111156107a5576107a56140b8565b634e487b7160e01b5f52603260045260245ffd5b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b808201808211156107a5576107a56140b8565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b60208082526026908201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060408201526561637469766560d01b606082015260800190565b5f6001600160401b0380831681810361450d5761450d6140b8565b6001019392505050565b6001600160401b03818116838216019080821115614215576142156140b8565b5f60208284031215614547575f80fd5b8135613d1081613c59565b6001600160401b03818116838216028082169190828114614575576145756140b8565b505092915050565b5f6001600160401b0380841680614596576145966140a4565b92169190910492915050565b5f82516145b38184602087016140f6565b9190910192915050565b5f602082840312156145cd575f80fd5b813560ff81168114613d10575f80fdfe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"maximumHourlyChurn\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"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\":\"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\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndDelegation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"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\":\"ValidationUptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"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\":\"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: "0x608060405234801561000f575f80fd5b506040516147de3803806147de83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6146918061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c806366435abf1161009e5780639e1bc4ef1161006e5780639e1bc4ef1461021b578063a3a65e481461022e578063b771b3bc14610241578063bee0a03f14610267578063d61bed741461027a575f80fd5b806366435abf146101cf5780636a7e3d83146101e257806376f78621146101f5578063872fda6414610208575f80fd5b806327f39ca8116100d957806327f39ca8146101585780632e2194d81461016b578063467ef06f1461019b57806362065856146101ae575f80fd5b80630118acc41461010a5780630322ed981461011f5780630915204e146101325780630b77f69314610145575b5f80fd5b61011d610118366004613c76565b61028d565b005b61011d61012d366004613cb1565b6106bc565b61011d610140366004613cdc565b610818565b61011d610153366004613d11565b6109e4565b61011d610166366004613d34565b610aac565b61017e610179366004613cb1565b610bba565b6040516001600160401b0390911681526020015b60405180910390f35b61011d6101a9366004613d66565b610bd0565b6101c16101bc366004613d9c565b610f2c565b604051908152602001610192565b61017e6101dd366004613cb1565b610f45565b61011d6101f0366004613d11565b610f59565b61011d610203366004613c76565b610fdb565b6101c1610216366004613e47565b610ff6565b61011d610229366004613ee3565b61101b565b61011d61023c366004613d66565b61102a565b61024f6005600160991b0181565b6040516001600160a01b039091168152602001610192565b61011d610275366004613cb1565b6111de565b61011d610288366004613cdc565b6112ad565b5f82156102a15761029e84836114b3565b90505b5f8481527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03602090815260408083203384528252808320815160e08101835281546001600160401b038082168352600160401b808304821696840196909652600160801b808304821695840195909552600160c01b90910481166060830152600183015480821660808401529485041660a08201525f805160206146058339815191529493909260c08401910460ff16600481111561036257610362613f03565b600481111561037357610373613f03565b905250905060028160c00151600481111561039057610390613f03565b146103f15760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2064656c656761746f72206e6f742060448201526561637469766560d01b60648201526084015b60405180910390fd5b5f6103fb876117c3565b9050600360c08301819052506001600160401b03428116604080850191909152828216608085015290851660a08401525f8881526003850160205290812083916104423390565b6001600160a01b0316815260208082019290925260409081015f2083518154938501519285015160608601516001600160401b039283166001600160801b031996871617600160401b9584168602176001600160801b0316600160801b92841683026001600160c01b031617600160c01b91841691909102178355608086015160018401805460a089015192851697169690961792169093021780845560c08501519193919260ff60801b199091169083600481111561050457610504613f03565b02179055509050505f6105168861183e565b9050825f01516001600160401b031681608001516001600160401b03161161058c5760405162461bcd60e51b815260206004820152602360248201527f506f5356616c696461746f724d616e616765723a20496e76616c69642077656960448201526219da1d60ea1b60648201526084016103e8565b825160808201805161059f908390613f2b565b6001600160401b03169052506105b58882611939565b5f6105c589848460800151611a28565b5f8a8152600587016020908152604080832033845290915290209091506105ec8282613fd5565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906106199085906004016140b6565b6020604051808303815f875af1158015610635573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065991906140e8565b6080840151604080516001600160401b0392831681529187166020830152428282015251919250339183918d917fadec5acd02ee9a5280893bb168456a89d9b0004eee87906795b290740f2e4bde9181900360600190a450505050505050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040812080545f8051602061462583398151915292919061070490613f52565b9050118015610736575060035f83815260078301602052604090205460ff16600581111561073457610734613f03565b145b61079a5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016103e8565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916107d391906004016140ff565b6020604051808303815f875af11580156107ef573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081391906140e8565b505050565b5f805160206146058339815191525f61083084611c45565b90505f806108418360400151611e26565b50915091506108508286612061565b5f82815260058501602090815260408083206001600160a01b0389168452909152812061087c91613c07565b5f6108868361183e565b9050816001600160401b031681606001516001600160401b031610156108be5760405162461bcd60e51b81526004016103e890614189565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020600101546001600160401b03808416911611156109105760405162461bcd60e51b81526004016103e8906141cb565b60035f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160801b900460ff16600481111561095457610954613f03565b146109715760405162461bcd60e51b81526004016103e890614214565b5f83815260038601602090815260408083206001600160a01b038a168085529252808320600101805460ff60801b1916600160821b179055516001600160401b0385169286917f4da588c356f0bfa46c394126d28890aaadfc4ed6c26a611d14275e13ad1057dd9190a450505050505050565b6109ee8282612174565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f80516020614605833981519152916005600160991b019163ee5b48eb91610a66916004016140ff565b6020604051808303815f875af1158015610a82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa691906140e8565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610af05750825b90505f826001600160401b03166001148015610b0b5750303b155b905081158015610b19575080155b15610b375760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b6157845460ff60401b1916600160401b1785555b610b6b8787612292565b8315610bb157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f610bca64e8d4a5100083614278565b92915050565b5f805160206146258339815191525f610be883611c45565b90505f80610bf983604001516122ac565b915091508015610c5e5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016103e8565b5f828152600785016020526040808220815160e081019092528054829060ff166005811115610c8f57610c8f613f03565b6005811115610ca057610ca0613f03565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b90041660c0909101529091505f9082516005811115610d1957610d19613f03565b1480610d375750600182516005811115610d3557610d35613f03565b145b610d965760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016103e8565b600382516005811115610dab57610dab613f03565b03610dd257505f8381526006860160205260408120600491610dcd9190613c07565b610dd6565b5060055b6020808301515f90815260088801909152604081205581816005811115610dff57610dff613f03565b90816005811115610e1257610e12613f03565b9052505f84815260078701602052604090208251815484929190829060ff19166001836005811115610e4657610e46613f03565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b929091169190910217905581516005811115610ef957610ef9613f03565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a350505050505050565b5f610bca6001600160401b03831664e8d4a5100061428b565b5f610f4f8261183e565b6080015192915050565b610f638282612061565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f80516020614605833981519152916005600160991b019163ee5b48eb91610a66916004016140ff565b8115610fed57610feb83826114b3565b505b6108138361244d565b5f806110018661279f565b905061100f8582868661284c565b9150505b949350505050565b611026823383612c80565b5050565b5f805160206146258339815191525f61104283611c45565b90505f8061105383604001516122ac565b91509150806110b55760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016103e8565b5f828152600585016020526040812080546110cf90613f52565b9050118015611101575060015f83815260078601602052604090205460ff1660058111156110ff576110ff613f03565b145b61111d5760405162461bcd60e51b81526004016103e8906142a2565b5f828152600585016020526040812061113591613c07565b5f8281526007850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092178355600190930154875260088b0185528387208990559588905293835292548151931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb056020526040812080545f8051602061462583398151915292919061122690613f52565b9050118015611258575060015f83815260078301602052604090205460ff16600581111561125657611256613f03565b145b6112745760405162461bcd60e51b81526004016103e8906142a2565b5f82815260058201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916107d391906004016140ff565b5f805160206146058339815191525f6112c584611c45565b90505f806112d68360400151611e26565b50915091506112e58286612174565b5f82815260048501602090815260408083206001600160a01b0389168452909152812061131191613c07565b5f61131b8361183e565b9050816001600160401b031681606001516001600160401b031610156113535760405162461bcd60e51b81526004016103e890614189565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020546001600160401b03808416600160c01b9092041611156113a95760405162461bcd60e51b81526004016103e8906141cb565b60015f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160801b900460ff1660048111156113ed576113ed613f03565b1461140a5760405162461bcd60e51b81526004016103e890614214565b5f83815260038601602090815260408083206001600160a01b038a168085529083529281902060018101805460ff60801b1916600160811b179055805467ffffffffffffffff60401b1916600160401b426001600160401b03818116929092029290921790925582519081529151908616939287927fd63c8a1fc829b22698176813c742597f94f9278dde21a64f7a8192e905f932b6929081900390910190a450505050505050565b5f805f805160206146058339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561150f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261153691908101906142f4565b91509150806115995760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016103e8565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160091906140e8565b8251146116645760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016103e8565b60208201516001600160a01b0316156116da5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016103e8565b5f806116e98460400151612ff4565b915091508188146117565760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016103e8565b5f888152600686016020908152604091829020805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c910160405180910390a2979650505050505050565b5f8181525f805160206146658339815191526020526040812060020180545f8051602061462583398151915291600160a01b9091046001600160401b0316908190601461180f836143c6565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508092505050919050565b6040805160e080820183525f8083526020808401829052838501829052606084018290526080840182905260a0840182905260c084018290528582525f8051602061466583398151915290528390208351918201909352825491925f8051602061462583398151915292829060ff1660058111156118be576118be613f03565b60058111156118cf576118cf613f03565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b900490911660c0909101529392505050565b5f8281525f8051602061466583398151915260205260409020815181545f805160206146258339815191529284929091829060ff1916600183600581111561198357611983613f03565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055505050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611aa157611a618160016143eb565b611a6c90600861428b565b5081515f90839083908110611a8357611a836143fe565b60200101906001600160f81b03191690815f1a905350600101611a4d565b505f5b6004811015611b0457611ab88160036143eb565b611ac390600861428b565b6001901c60f81b82611ad6836002614412565b81518110611ae657611ae66143fe565b60200101906001600160f81b03191690815f1a905350600101611aa4565b505f5b6020811015611b6657611b1b81601f6143eb565b611b2690600861428b565b86901c60f81b82611b38836006614412565b81518110611b4857611b486143fe565b60200101906001600160f81b03191690815f1a905350600101611b07565b505f5b6008811015611bd157611b7d8160076143eb565b611b8890600861428b565b6001600160401b038616901c60f81b82611ba3836026614412565b81518110611bb357611bb36143fe565b60200101906001600160f81b03191690815f1a905350600101611b69565b505f5b6008811015611c3c57611be88160076143eb565b611bf390600861428b565b6001600160401b038516901c60f81b82611c0e83602e614412565b81518110611c1e57611c1e6143fe565b60200101906001600160f81b03191690815f1a905350600101611bd4565b50949350505050565b60408051606080820183525f8083526020830181905292820152905f805160206146258339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611cba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ce191908101906142f4565b9150915080611d485760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016103e8565b8254825114611dab5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016103e8565b60208201516001600160a01b031615611e1e5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016103e8565b509392505050565b5f805f8351603614611e4a5760405162461bcd60e51b81526004016103e890614425565b5f805b6002811015611e9957611e618160016143eb565b611e6c90600861428b565b61ffff16868281518110611e8257611e826143fe565b016020015160f81c901b9190911790600101611e4d565b5061ffff811615611ebc5760405162461bcd60e51b81526004016103e89061446e565b5f805b6004811015611f1757611ed38160036143eb565b611ede90600861428b565b63ffffffff1687611ef0836002614412565b81518110611f0057611f006143fe565b016020015160f81c901b9190911790600101611ebf565b5063ffffffff8116600314611f3e5760405162461bcd60e51b81526004016103e8906144b1565b5f805b6020811015611f9357611f5581601f6143eb565b611f6090600861428b565b88611f6c836006614412565b81518110611f7c57611f7c6143fe565b016020015160f81c901b9190911790600101611f41565b505f805b6008811015611ff257611fab8160076143eb565b611fb690600861428b565b6001600160401b031689611fcb836026614412565b81518110611fdb57611fdb6143fe565b016020015160f81c901b9190911790600101611f97565b505f805b60088110156120515761200a8160076143eb565b61201590600861428b565b6001600160401b03168a61202a83602e614412565b8151811061203a5761203a6143fe565b016020015160f81c901b9190911790600101611ff6565b5091989097509095509350505050565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b0385168452909152812080545f805160206146058339815191529291906120bd90613f52565b905011801561210d575060035f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160801b900460ff16600481111561210b5761210b613f03565b145b6108135760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f722072604482015271656d6f76616c206e6f742070656e64696e6760701b60648201526084016103e8565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b0385168452909152812080545f805160206146058339815191529291906121d090613f52565b9050118015612220575060015f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160801b900460ff16600481111561221e5761221e613f03565b145b6108135760405162461bcd60e51b815260206004820152603760248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72207260448201527f6567697374726174696f6e206e6f742070656e64696e6700000000000000000060648201526084016103e8565b61229a6131cc565b6122a382613217565b6110268161325d565b5f8082516027146122cf5760405162461bcd60e51b81526004016103e890614425565b5f805b600281101561231e576122e68160016143eb565b6122f190600861428b565b61ffff16858281518110612307576123076143fe565b016020015160f81c901b91909117906001016122d2565b5061ffff8116156123415760405162461bcd60e51b81526004016103e89061446e565b5f805b600481101561239c576123588160036143eb565b61236390600861428b565b63ffffffff1686612375836002614412565b81518110612385576123856143fe565b016020015160f81c901b9190911790600101612344565b5063ffffffff81166002146123c35760405162461bcd60e51b81526004016103e8906144b1565b5f805b6020811015612418576123da81601f6143eb565b6123e590600861428b565b876123f1836006614412565b81518110612401576124016143fe565b016020015160f81c901b91909117906001016123c6565b505f8660268151811061242d5761242d6143fe565b016020015191976001600160f81b03199092161515965090945050505050565b5f8181525f805160206146658339815191526020526040808220815160e0810190925280545f8051602061462583398151915293929190829060ff16600581111561249a5761249a613f03565b60058111156124ab576124ab613f03565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b900490921660c0909101529091508151600581111561252557612525613f03565b146125425760405162461bcd60e51b81526004016103e8906144f8565b60408101516001600160a01b0316336001600160a01b0316146125bc5760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016103e8565b6125c98160800151613311565b60038152426001600160401b031660c08201525f83815260078301602052604090208151815483929190829060ff1916600183600581111561260d5761260d613f03565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b92909116919091021790555f6126c1846126bb816117c3565b5f611a28565b5f85815260068501602052604090209091506126dd8282613fd5565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061270a9085906004016140b6565b6020604051808303815f875af1158015612726573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274a91906140e8565b6080840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b5f5f80516020614605833981519152816127b8846134b2565b90505f6127c482610bba565b83549091506001600160401b038216108015906127ee57508260010154816001600160401b031611155b6110135760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207374616044820152681ad948185b5bdd5b9d60ba1b60648201526084016103e8565b5f6128556134e8565b5f80516020614625833981519152426001600160401b03851611801561288f57506001600160401b03841661288d426202a300614412565b115b6128f15760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c69642072656769737460448201526c726174696f6e2065787069727960981b60648201526084016103e8565b856129485760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016103e8565b5f868152600882016020526040902054156129b65760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016103e8565b8251603014612a1d5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016103e8565b612a2685613311565b5f80612a6d6040518060a00160405280856001015481526020018a8152602001896001600160401b03168152602001886001600160401b031681526020018781525061351f565b5f82815260058601602052604090209193509150612a8b8282613fd5565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612ab89085906004016140b6565b6020604051808303815f875af1158015612ad4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af891906140e8565b6040805160e08101825260018152602081018c90529192508101336001600160a01b031681525f60208083018290526001600160401b038c166040808501919091526060840183905260809093018290528682526007880190522081518154829060ff19166001836005811115612b7157612b71613f03565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055612c1a836117c3565b50604080516001600160401b03808b1682528916602082015282918b9186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e910160405180910390a450909250505061101360015f8051602061464583398151915255565b612c886134e8565b5f612c95610179836134b2565b90505f805160206146058339815191525f612caf8661183e565b9050600281516005811115612cc657612cc6613f03565b14612ce35760405162461bcd60e51b81526004016103e8906144f8565b5f86815260038301602090815260408083206001600160a01b03891684529091529020546001600160401b031615612d745760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f724d616e616765723a2064656c656761746f7220616c726560448201526d18591e481c9959da5cdd195c995960921b60648201526084016103e8565b612d7d83613311565b8281608001818151612d8f919061453e565b6001600160401b0316905250612da58682611939565b5f612daf876117c3565b90505f612dc188838560800151611a28565b5f89815260048601602090815260408083206001600160a01b038c1684529091529020909150612df18282613fd5565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612e1e9085906004016140b6565b6020604051808303815f875af1158015612e3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e5e91906140e8565b6040805160e0810182526001600160401b03808a1682525f60208301819052928201839052861660608201526080810182905260a081019190915290915060c08101600190525f8a815260038701602090815260408083206001600160a01b038d16845282529182902083518154928501519385015160608601516001600160401b039283166001600160801b031995861617600160401b9684168702176001600160801b0316600160801b92841683026001600160c01b031617600160c01b91841691909102178355608086015160018401805460a089015192851696169590951792169094021780835560c0850151919391929160ff60801b1990911690836004811115612f7057612f70613f03565b021790555050506080840151604080516001600160401b03808a1682529283166020820152918516908201526001600160a01b0389169082908b907feea0c6dd7e326ed588ce418df1563a24af963b7a54714ba659fab8152435795b9060600160405180910390a450505050505061081360015f8051602061464583398151915255565b5f808251602e146130175760405162461bcd60e51b81526004016103e890614425565b5f805b60028110156130665761302e8160016143eb565b61303990600861428b565b61ffff1685828151811061304f5761304f6143fe565b016020015160f81c901b919091179060010161301a565b5061ffff8116156130895760405162461bcd60e51b81526004016103e89061446e565b5f805b60048110156130e4576130a08160036143eb565b6130ab90600861428b565b63ffffffff16866130bd836002614412565b815181106130cd576130cd6143fe565b016020015160f81c901b919091179060010161308c565b5063ffffffff811660041461310b5760405162461bcd60e51b81526004016103e8906144b1565b5f805b60208110156131605761312281601f6143eb565b61312d90600861428b565b87613139836006614412565b81518110613149576131496143fe565b016020015160f81c901b919091179060010161310e565b505f805b60088110156131bf576131788160076143eb565b61318390600861428b565b6001600160401b031688613198836026614412565b815181106131a8576131a86143fe565b016020015160f81c901b9190911790600101613164565b5090969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661321557604051631afcd79f60e31b815260040160405180910390fd5b565b61321f6131cc565b613228816138d7565b61325a6060820135608083013561324560c0850160a08601613d9c565b61325560e0860160c0870161455e565b6138f8565b50565b6132656131cc565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab006001600160a01b0382166132f15760405162461bcd60e51b815260206004820152602c60248201527f4552433230546f6b656e5374616b696e674d616e616765723a207a65726f207460448201526b6f6b656e206164647265737360a01b60648201526084016103e8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb02545f805160206146258339815191529060ff165f0361334f575050565b60408051606081018252600383015480825260048401546001600160401b038082166020850152600160401b9091041692820192909252904290610e109061339790836143eb565b106133b3576001600160401b03841660408301528082526133d2565b83826040018181516133c5919061453e565b6001600160401b03169052505b5f8260200151836040015160646133e99190614579565b6133f391906145a4565b600285015490915060ff908116908216111561346e5760405162461bcd60e51b815260206004820152603460248201527f56616c696461746f724d616e616765723a206d6178696d756d20686f75726c796044820152730818da1d5c9b881c985d1948195e18d95959195960621b60648201526084016103e8565b5050805160038301556020810151600490920180546040909201516001600160401b03908116600160401b026001600160801b031990931693169290921717905550565b5f610bca827f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546001600160a01b031690613953565b5f8051602061464583398151915280546001190161351957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f60608260800151516030146135895760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016103e8565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613600576135c08160016143eb565b6135cb90600861428b565b5081515f908390839081106135e2576135e26143fe565b60200101906001600160f81b03191690815f1a9053506001016135ac565b505f5b600481101561365e576136178160036143eb565b61362290600861428b565b505f82613630836002614412565b81518110613640576136406143fe565b60200101906001600160f81b03191690815f1a905350600101613603565b505f5b60208110156136bb578451816020811061367d5761367d6143fe565b1a60f81b8261368d836006614412565b8151811061369d5761369d6143fe565b60200101906001600160f81b03191690815f1a905350600101613661565b505f5b602081101561371b57846020015181602081106136dd576136dd6143fe565b1a60f81b826136ed836026614412565b815181106136fd576136fd6143fe565b60200101906001600160f81b03191690815f1a9053506001016136be565b505f5b600881101561378f576137328160076143eb565b61373d90600861428b565b60ff1685604001516001600160401b0316901c60f81b828260466137619190614412565b81518110613771576137716143fe565b60200101906001600160f81b03191690815f1a90535060010161371e565b505f5b60308110156137fa57846080015181815181106137b1576137b16143fe565b01602001516001600160f81b031916826137cc83604e614412565b815181106137dc576137dc6143fe565b60200101906001600160f81b03191690815f1a905350600101613792565b505f5b600881101561386c576138118160076143eb565b61381c90600861428b565b60608601516001600160401b0390811691161c60f81b8261383e83607e614412565b8151811061384e5761384e6143fe565b60200101906001600160f81b03191690815f1a9053506001016137fd565b5060028160405161387d91906145c9565b602060405180830381855afa158015613898573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906138bb91906140e8565b94909350915050565b60015f8051602061464583398151915255565b6138df6131cc565b6138e7613ab5565b6138ef613ac5565b61325a81613acd565b6139006131cc565b5f5f80516020614605833981519152948555506001840192909255600290920180546001600160a01b03909216600160401b026001600160e01b03199092166001600160401b0390931692909217179055565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015613999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139bd91906140e8565b90506139d46001600160a01b038516333086613b39565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015613a18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a3c91906140e8565b9050818111613aa25760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016103e8565b613aac82826143eb565b95945050505050565b613abd6131cc565b613215613b93565b6132156131cc565b613ad56131cc565b80355f8051602061462583398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0155613b1f60608301604084016145e4565b600291909101805460ff191660ff90921691909117905550565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610aa6908590613b9b565b6138c46131cc565b5f8060205f8451602086015f885af180613bba576040513d5f823e3d81fd5b50505f513d91508115613bd1578060011415613bde565b6001600160a01b0384163b155b15610aa657604051635274afe760e01b81526001600160a01b03851660048201526024016103e8565b508054613c1390613f52565b5f825580601f10613c22575050565b601f0160209004905f5260205f209081019061325a91905b80821115613c4d575f8155600101613c3a565b5090565b801515811461325a575f80fd5b803563ffffffff81168114613c71575f80fd5b919050565b5f805f60608486031215613c88575f80fd5b833592506020840135613c9a81613c51565b9150613ca860408501613c5e565b90509250925092565b5f60208284031215613cc1575f80fd5b5035919050565b6001600160a01b038116811461325a575f80fd5b5f8060408385031215613ced575f80fd5b613cf683613c5e565b91506020830135613d0681613cc8565b809150509250929050565b5f8060408385031215613d22575f80fd5b823591506020830135613d0681613cc8565b5f80828403610100811215613d47575f80fd5b60e0811215613d54575f80fd5b5082915060e0830135613d0681613cc8565b5f60208284031215613d76575f80fd5b613d7f82613c5e565b9392505050565b80356001600160401b0381168114613c71575f80fd5b5f60208284031215613dac575f80fd5b613d7f82613d86565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715613deb57613deb613db5565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613e1957613e19613db5565b604052919050565b5f6001600160401b03821115613e3957613e39613db5565b50601f01601f191660200190565b5f805f8060808587031215613e5a575f80fd5b8435935060208501359250613e7160408601613d86565b915060608501356001600160401b03811115613e8b575f80fd5b8501601f81018713613e9b575f80fd5b8035613eae613ea982613e21565b613df1565b818152886020838501011115613ec2575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f8060408385031215613ef4575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03828116828216039080821115613f4b57613f4b613f17565b5092915050565b600181811c90821680613f6657607f821691505b602082108103613f8457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561081357805f5260205f20601f840160051c81016020851015613faf5750805b601f840160051c820191505b81811015613fce575f8155600101613fbb565b5050505050565b81516001600160401b03811115613fee57613fee613db5565b61400281613ffc8454613f52565b84613f8a565b602080601f831160018114614035575f841561401e5750858301515b5f19600386901b1c1916600185901b17855561408c565b5f85815260208120601f198616915b8281101561406357888601518255948401946001909101908401614044565b508582101561408057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f5b838110156140ae578181015183820152602001614096565b50505f910152565b602081525f82518060208401526140d4816040850160208701614094565b601f01601f19169190910160400192915050565b5f602082840312156140f8575f80fd5b5051919050565b5f60208083525f845461411181613f52565b806020870152604060018084165f8114614132576001811461414e5761417b565b60ff19851660408a0152604084151560051b8a0101955061417b565b895f5260205f205f5b858110156141725781548b8201860152908301908801614157565b8a016040019650505b509398975050505050505050565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b60208082526030908201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72206e60408201526f1bdd081c195b991a5b99c8185919195960821b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f8261428657614286614264565b500490565b8082028115828204841417610bca57610bca613f17565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b8051613c7181613c51565b5f8060408385031215614305575f80fd5b82516001600160401b038082111561431b575f80fd5b908401906060828703121561432e575f80fd5b614336613dc9565b8251815260208084015161434981613cc8565b8282015260408401518381111561435e575f80fd5b80850194505087601f850112614372575f80fd5b83519250614382613ea984613e21565b8381528882858701011115614395575f80fd5b6143a484838301848801614094565b806040840152508195506143b98188016142e9565b9450505050509250929050565b5f6001600160401b038083168181036143e1576143e1613f17565b6001019392505050565b81810381811115610bca57610bca613f17565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610bca57610bca613f17565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b60208082526026908201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060408201526561637469766560d01b606082015260800190565b6001600160401b03818116838216019080821115613f4b57613f4b613f17565b5f6020828403121561456e575f80fd5b8135613d7f81613cc8565b6001600160401b0381811683821602808216919082811461459c5761459c613f17565b505092915050565b5f6001600160401b03808416806145bd576145bd614264565b92169190910492915050565b5f82516145da818460208701614094565b9190910192915050565b5f602082840312156145f4575f80fd5b813560ff81168114613d7f575f80fdfe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -468,25 +468,25 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Init return _ERC20TokenStakingManager.Contract.InitializeDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, validationID, delegationAmount) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x927e7e75. +// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. // -// Solidity: function initializeEndDelegation(bytes32 validationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndDelegation(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndDelegation", validationID) +// Solidity: function initializeEndDelegation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndDelegation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndDelegation", validationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x927e7e75. +// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. // -// Solidity: function initializeEndDelegation(bytes32 validationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndDelegation(validationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, validationID) +// Solidity: function initializeEndDelegation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndDelegation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x927e7e75. +// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. // -// Solidity: function initializeEndDelegation(bytes32 validationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndDelegation(validationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, validationID) +// Solidity: function initializeEndDelegation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndDelegation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } // InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. diff --git a/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go index 11e72af7a..3c3d99979 100644 --- a/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -47,8 +47,8 @@ type ValidatorManagerSettings 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\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"maximumHourlyChurn\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resendDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndDelegation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"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\":\"ValidationUptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"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\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]}]", - Bin: "0x608060405234801561000f575f80fd5b506040516144e43803806144e483398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6143978061014d5f395ff3fe6080604052600436106100f9575f3560e01c80636a7e3d8311610092578063b771b3bc11610062578063b771b3bc1461029e578063bee0a03f146102d0578063c599e24f146102ef578063d61bed7414610302578063f40797d714610321575f80fd5b80636a7e3d831461022257806376f7862114610241578063927e7e7514610260578063a3a65e481461027f575f80fd5b80632e2194d8116100cd5780632e2194d81461017b578063467ef06f146101b757806362065856146101d657806366435abf14610203575f80fd5b8062e41792146100fd5780630322ed981461011e5780630915204e1461013d5780630b77f6931461015c575b5f80fd5b348015610108575f80fd5b5061011c6101173660046139a7565b610334565b005b348015610129575f80fd5b5061011c6101383660046139bd565b610440565b348015610148575f80fd5b5061011c610157366004613a00565b6105a1565b348015610167575f80fd5b5061011c610176366004613a35565b610772565b348015610186575f80fd5b5061019a6101953660046139bd565b61083a565b6040516001600160401b0390911681526020015b60405180910390f35b3480156101c2575f80fd5b5061011c6101d1366004613a58565b610850565b3480156101e1575f80fd5b506101f56101f0366004613a8e565b610bac565b6040519081526020016101ae565b34801561020e575f80fd5b5061019a61021d3660046139bd565b610bc5565b34801561022d575f80fd5b5061011c61023c366004613a35565b610bd9565b34801561024c575f80fd5b5061011c61025b366004613ab4565b610c5b565b34801561026b575f80fd5b5061011c61027a3660046139bd565b610f74565b34801561028a575f80fd5b5061011c610299366004613a58565b611386565b3480156102a9575f80fd5b506102b86005600160991b0181565b6040516001600160a01b0390911681526020016101ae565b3480156102db575f80fd5b5061011c6102ea3660046139bd565b61153a565b61011c6102fd3660046139bd565b611609565b34801561030d575f80fd5b5061011c61031c366004613a00565b611617565b6101f561032f366004613b81565b611813565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156103785750825b90505f826001600160401b031660011480156103935750303b155b9050811580156103a1575080155b156103bf5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156103e957845460ff60401b1916600160401b1785555b6103f286611835565b831561043857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040812080545f8051602061432b83398151915292919061048890613c13565b90501180156104ba575060035f83815260078301602052604090205460ff1660058111156104b8576104b8613c45565b145b6105235760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084015b60405180910390fd5b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161055c9190600401613c59565b6020604051808303815f875af1158015610578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059c9190613ce3565b505050565b5f8051602061430b8339815191525f6105b984611846565b90505f806105ca8360400151611a27565b50915091506105d98286611c62565b5f82815260058501602090815260408083206001600160a01b038916845290915281206106059161395d565b5f61060f83611d75565b9050816001600160401b031681606001516001600160401b031610156106475760405162461bcd60e51b815260040161051a90613cfa565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020600101546001600160401b03808416911611156106995760405162461bcd60e51b815260040161051a90613d3c565b60035f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160401b900460ff1660048111156106dd576106dd613c45565b146106fa5760405162461bcd60e51b815260040161051a90613d85565b5f83815260038601602090815260408083206001600160a01b038a168085529252808320600101805460ff60401b191668040000000000000000179055516001600160401b0385169286917f4da588c356f0bfa46c394126d28890aaadfc4ed6c26a611d14275e13ad1057dd9190a450505050505050565b61077c8282611e70565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f8051602061430b833981519152916005600160991b019163ee5b48eb916107f491600401613c59565b6020604051808303815f875af1158015610810573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108349190613ce3565b50505050565b5f61084a64e8d4a5100083613dfd565b92915050565b5f8051602061432b8339815191525f61086883611846565b90505f806108798360400151611f8e565b9150915080156108de5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b606482015260840161051a565b5f828152600785016020526040808220815160e081019092528054829060ff16600581111561090f5761090f613c45565b600581111561092057610920613c45565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b90041660c0909101529091505f908251600581111561099957610999613c45565b14806109b757506001825160058111156109b5576109b5613c45565b145b610a165760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b606482015260840161051a565b600382516005811115610a2b57610a2b613c45565b03610a5257505f8381526006860160205260408120600491610a4d919061395d565b610a56565b5060055b6020808301515f90815260088801909152604081205581816005811115610a7f57610a7f613c45565b90816005811115610a9257610a92613c45565b9052505f84815260078701602052604090208251815484929190829060ff19166001836005811115610ac657610ac6613c45565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b929091169190910217905581516005811115610b7957610b79613c45565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a350505050505050565b5f61084a6001600160401b03831664e8d4a51000613e10565b5f610bcf82611d75565b6080015192915050565b610be38282611c62565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f8051602061430b833981519152916005600160991b019163ee5b48eb916107f491600401613c59565b8115610f6b575f5f8051602061430b8339815191526040516306f8253560e41b815263ffffffff841660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015610cbc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ce39190810190613e54565b9150915080610d465760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161051a565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dad9190613ce3565b825114610e115760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b606482015260840161051a565b60208201516001600160a01b031615610e875760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161051a565b5f80610e96846040015161212f565b91509150818814610f035760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b606482015260840161051a565b5f888152600686016020908152604091829020805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c910160405180910390a250505050505b61059c83612307565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03602090815260408083203384528252808320815160c08101835281546001600160401b038082168352600160401b808304821696840196909652600160801b8204811694830194909452600160c01b900483166060820152600182015492831660808201525f8051602061430b8339815191529493909260a0840191900460ff16600481111561102b5761102b613c45565b600481111561103c5761103c613c45565b905250905060028160a00151600481111561105957611059613c45565b146110b55760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2064656c656761746f72206e6f742060448201526561637469766560d01b606482015260840161051a565b5f6110bf84612659565b9050600360a08301819052506001600160401b0342811660408085019190915290821660808401525f8581526003850160205290812083916110fe3390565b6001600160a01b0316815260208082019290925260409081015f2083518154938501519285015160608601516001600160401b039283166001600160801b031990961695909517600160401b9483168502176001600160801b0316600160801b918316919091026001600160c01b031617600160c01b94821694909402939093178155608084015160018201805467ffffffffffffffff19811692909516918217815560a086015192949293909268ffffffffffffffffff1916909117908360048111156111ce576111ce613c45565b02179055509050505f6111e085611d75565b9050825f01516001600160401b031681608001516001600160401b0316116112565760405162461bcd60e51b815260206004820152602360248201527f506f5356616c696461746f724d616e616765723a20496e76616c69642077656960448201526219da1d60ea1b606482015260840161051a565b8251608082018051611269908390613f26565b6001600160401b031690525061127f85826126d4565b5f61128f868484608001516127c3565b5f878152600587016020908152604080832033845290915290209091506112b68282613f98565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906112e3908590600401614053565b6020604051808303815f875af11580156112ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113239190613ce3565b6080840151604080516001600160401b039283168152918716602083015242908201529091503390829089907fadec5acd02ee9a5280893bb168456a89d9b0004eee87906795b290740f2e4bde906060015b60405180910390a450505050505050565b5f8051602061432b8339815191525f61139e83611846565b90505f806113af8360400151611f8e565b91509150806114115760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b606482015260840161051a565b5f8281526005850160205260408120805461142b90613c13565b905011801561145d575060015f83815260078601602052604090205460ff16600581111561145b5761145b613c45565b145b6114795760405162461bcd60e51b815260040161051a90614085565b5f82815260058501602052604081206114919161395d565b5f8281526007850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092178355600190930154875260088b0185528387208990559588905293835292548151931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb056020526040812080545f8051602061432b83398151915292919061158290613c13565b90501180156115b4575060015f83815260078301602052604090205460ff1660058111156115b2576115b2613c45565b145b6115d05760405162461bcd60e51b815260040161051a90614085565b5f82815260058201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161055c9190600401613c59565b6116148133346129e0565b50565b5f8051602061430b8339815191525f61162f84611846565b90505f806116408360400151611a27565b509150915061164f8286611e70565b5f82815260048501602090815260408083206001600160a01b0389168452909152812061167b9161395d565b5f61168583611d75565b9050816001600160401b031681606001516001600160401b031610156116bd5760405162461bcd60e51b815260040161051a90613cfa565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020546001600160401b03808416600160c01b9092041611156117135760405162461bcd60e51b815260040161051a90613d3c565b60015f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160401b900460ff16600481111561175757611757613c45565b146117745760405162461bcd60e51b815260040161051a90613d85565b5f83815260038601602090815260408083206001600160a01b038a168085529083529281902060018101805460ff60401b191668020000000000000000179055805467ffffffffffffffff60401b1916600160401b426001600160401b03818116929092029290921790925591519182528516929186917fd63c8a1fc829b22698176813c742597f94f9278dde21a64f7a8192e905f932b69101611375565b5f8061181e34612d59565b905061182c85828686612e03565b95945050505050565b61183d613237565b61161481613282565b60408051606080820183525f8083526020830181905292820152905f8051602061432b8339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156118bb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118e29190810190613e54565b91509150806119495760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b606482015260840161051a565b82548251146119ac5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b606482015260840161051a565b60208201516001600160a01b031615611a1f5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b606482015260840161051a565b509392505050565b5f805f8351603614611a4b5760405162461bcd60e51b815260040161051a906140cc565b5f805b6002811015611a9a57611a62816001614115565b611a6d906008613e10565b61ffff16868281518110611a8357611a83614128565b016020015160f81c901b9190911790600101611a4e565b5061ffff811615611abd5760405162461bcd60e51b815260040161051a9061413c565b5f805b6004811015611b1857611ad4816003614115565b611adf906008613e10565b63ffffffff1687611af183600261417f565b81518110611b0157611b01614128565b016020015160f81c901b9190911790600101611ac0565b5063ffffffff8116600314611b3f5760405162461bcd60e51b815260040161051a90614192565b5f805b6020811015611b9457611b5681601f614115565b611b61906008613e10565b88611b6d83600661417f565b81518110611b7d57611b7d614128565b016020015160f81c901b9190911790600101611b42565b505f805b6008811015611bf357611bac816007614115565b611bb7906008613e10565b6001600160401b031689611bcc83602661417f565b81518110611bdc57611bdc614128565b016020015160f81c901b9190911790600101611b98565b505f805b6008811015611c5257611c0b816007614115565b611c16906008613e10565b6001600160401b03168a611c2b83602e61417f565b81518110611c3b57611c3b614128565b016020015160f81c901b9190911790600101611bf7565b5091989097509095509350505050565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b0385168452909152812080545f8051602061430b833981519152929190611cbe90613c13565b9050118015611d0e575060035f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160401b900460ff166004811115611d0c57611d0c613c45565b145b61059c5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f722072604482015271656d6f76616c206e6f742070656e64696e6760701b606482015260840161051a565b6040805160e080820183525f8083526020808401829052838501829052606084018290526080840182905260a0840182905260c084018290528582525f8051602061436b83398151915290528390208351918201909352825491925f8051602061432b83398151915292829060ff166005811115611df557611df5613c45565b6005811115611e0657611e06613c45565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b900490911660c0909101529392505050565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b0385168452909152812080545f8051602061430b833981519152929190611ecc90613c13565b9050118015611f1c575060015f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160401b900460ff166004811115611f1a57611f1a613c45565b145b61059c5760405162461bcd60e51b815260206004820152603760248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72207260448201527f6567697374726174696f6e206e6f742070656e64696e67000000000000000000606482015260840161051a565b5f808251602714611fb15760405162461bcd60e51b815260040161051a906140cc565b5f805b600281101561200057611fc8816001614115565b611fd3906008613e10565b61ffff16858281518110611fe957611fe9614128565b016020015160f81c901b9190911790600101611fb4565b5061ffff8116156120235760405162461bcd60e51b815260040161051a9061413c565b5f805b600481101561207e5761203a816003614115565b612045906008613e10565b63ffffffff168661205783600261417f565b8151811061206757612067614128565b016020015160f81c901b9190911790600101612026565b5063ffffffff81166002146120a55760405162461bcd60e51b815260040161051a90614192565b5f805b60208110156120fa576120bc81601f614115565b6120c7906008613e10565b876120d383600661417f565b815181106120e3576120e3614128565b016020015160f81c901b91909117906001016120a8565b505f8660268151811061210f5761210f614128565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e146121525760405162461bcd60e51b815260040161051a906140cc565b5f805b60028110156121a157612169816001614115565b612174906008613e10565b61ffff1685828151811061218a5761218a614128565b016020015160f81c901b9190911790600101612155565b5061ffff8116156121c45760405162461bcd60e51b815260040161051a9061413c565b5f805b600481101561221f576121db816003614115565b6121e6906008613e10565b63ffffffff16866121f883600261417f565b8151811061220857612208614128565b016020015160f81c901b91909117906001016121c7565b5063ffffffff81166004146122465760405162461bcd60e51b815260040161051a90614192565b5f805b602081101561229b5761225d81601f614115565b612268906008613e10565b8761227483600661417f565b8151811061228457612284614128565b016020015160f81c901b9190911790600101612249565b505f805b60088110156122fa576122b3816007614115565b6122be906008613e10565b6001600160401b0316886122d383602661417f565b815181106122e3576122e3614128565b016020015160f81c901b919091179060010161229f565b5090969095509350505050565b5f8181525f8051602061436b8339815191526020526040808220815160e0810190925280545f8051602061432b83398151915293929190829060ff16600581111561235457612354613c45565b600581111561236557612365613c45565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b900490921660c090910152909150815160058111156123df576123df613c45565b146123fc5760405162461bcd60e51b815260040161051a906141d9565b60408101516001600160a01b0316336001600160a01b0316146124765760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b606482015260840161051a565b61248381608001516132c5565b60038152426001600160401b031660c08201525f83815260078301602052604090208151815483929190829060ff191660018360058111156124c7576124c7613c45565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b92909116919091021790555f61257b8461257581612659565b5f6127c3565b5f85815260068501602052604090209091506125978282613f98565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906125c4908590600401614053565b6020604051808303815f875af11580156125e0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126049190613ce3565b6080840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b5f8181525f8051602061436b8339815191526020526040812060020180545f8051602061432b83398151915291600160a01b9091046001600160401b031690819060146126a58361421f565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508092505050919050565b5f8281525f8051602061436b83398151915260205260409020815181545f8051602061432b8339815191529284929091829060ff1916600183600581111561271e5761271e613c45565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055505050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b600281101561283c576127fc816001614115565b612807906008613e10565b5081515f9083908390811061281e5761281e614128565b60200101906001600160f81b03191690815f1a9053506001016127e8565b505f5b600481101561289f57612853816003614115565b61285e906008613e10565b6001901c60f81b8261287183600261417f565b8151811061288157612881614128565b60200101906001600160f81b03191690815f1a90535060010161283f565b505f5b6020811015612901576128b681601f614115565b6128c1906008613e10565b86901c60f81b826128d383600661417f565b815181106128e3576128e3614128565b60200101906001600160f81b03191690815f1a9053506001016128a2565b505f5b600881101561296c57612918816007614115565b612923906008613e10565b6001600160401b038616901c60f81b8261293e83602661417f565b8151811061294e5761294e614128565b60200101906001600160f81b03191690815f1a905350600101612904565b505f5b60088110156129d757612983816007614115565b61298e906008613e10565b6001600160401b038516901c60f81b826129a983602e61417f565b815181106129b9576129b9614128565b60200101906001600160f81b03191690815f1a90535060010161296f565b50949350505050565b6129e8613466565b5f6129f28261083a565b90505f8051602061430b8339815191525f612a0c86611d75565b9050600281516005811115612a2357612a23613c45565b14612a405760405162461bcd60e51b815260040161051a906141d9565b5f86815260038301602090815260408083206001600160a01b03891684529091529020546001600160401b031615612ad15760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f724d616e616765723a2064656c656761746f7220616c726560448201526d18591e481c9959da5cdd195c995960921b606482015260840161051a565b612ada836132c5565b8281608001818151612aec9190614244565b6001600160401b0316905250612b0286826126d4565b5f612b0c87612659565b90505f612b1e888385608001516127c3565b5f89815260048601602090815260408083206001600160a01b038c1684529091529020909150612b4e8282613f98565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612b7b908590600401614053565b6020604051808303815f875af1158015612b97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bbb9190613ce3565b6040805160c0810182526001600160401b03808a1682525f6020830181905292820183905286166060820152608081019190915290915060a08101600190525f8a815260038701602090815260408083206001600160a01b038d16845282529182902083518154928501519385015160608601516001600160401b039283166001600160801b031990951694909417600160401b9583168602176001600160801b0316600160801b918316919091026001600160c01b031617600160c01b93821693909302929092178155608084015160018201805467ffffffffffffffff19811692909416918217815560a086015192949293909268ffffffffffffffffff1990911690911790836004811115612cd557612cd5613c45565b021790555050506080840151604080516001600160401b03808a1682529283166020820152918516908201526001600160a01b0389169082908b907feea0c6dd7e326ed588ce418df1563a24af963b7a54714ba659fab8152435795b9060600160405180910390a450505050505061059c60015f8051602061434b83398151915255565b5f5f8051602061430b8339815191528282612d738261083a565b83549091506001600160401b03821610801590612d9d57508260010154816001600160401b031611155b612dfb5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207374616044820152681ad948185b5bdd5b9d60ba1b606482015260840161051a565b949350505050565b5f612e0c613466565b5f8051602061432b833981519152426001600160401b038516118015612e4657506001600160401b038416612e44426202a30061417f565b115b612ea85760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c69642072656769737460448201526c726174696f6e2065787069727960981b606482015260840161051a565b85612eff5760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b606482015260840161051a565b5f86815260088201602052604090205415612f6d5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b606482015260840161051a565b8251603014612fd45760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b606482015260840161051a565b612fdd856132c5565b5f806130246040518060a00160405280856001015481526020018a8152602001896001600160401b03168152602001886001600160401b03168152602001878152506134b0565b5f828152600586016020526040902091935091506130428282613f98565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061306f908590600401614053565b6020604051808303815f875af115801561308b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130af9190613ce3565b6040805160e08101825260018152602081018c90529192508101336001600160a01b031681525f60208083018290526001600160401b038c166040808501919091526060840183905260809093018290528682526007880190522081518154829060ff1916600183600581111561312857613128613c45565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b92909116919091021790556131d183612659565b50604080516001600160401b03808b1682528916602082015282918b9186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e910160405180910390a4509092505050612dfb60015f8051602061434b83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661328057604051631afcd79f60e31b815260040160405180910390fd5b565b61328a613237565b61329381613855565b611614606082013560808301356132b060c0850160a08601613a8e565b6132c060e0860160c08701614264565b613876565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb02545f8051602061432b8339815191529060ff165f03613303575050565b60408051606081018252600383015480825260048401546001600160401b038082166020850152600160401b9091041692820192909252904290610e109061334b9083614115565b10613367576001600160401b0384166040830152808252613386565b83826040018181516133799190614244565b6001600160401b03169052505b5f82602001518360400151606461339d919061427f565b6133a791906142aa565b600285015490915060ff90811690821611156134225760405162461bcd60e51b815260206004820152603460248201527f56616c696461746f724d616e616765723a206d6178696d756d20686f75726c796044820152730818da1d5c9b881c985d1948195e18d95959195960621b606482015260840161051a565b5050805160038301556020810151600490920180546040909201516001600160401b03908116600160401b026001600160801b031990931693169290921717905550565b5f8051602061434b83398151915280546001190161349757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f8051602061434b83398151915255565b5f606082608001515160301461351a5760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b606482015260840161051a565b60408051608680825260c082019092525f916020820181803683370190505090505f5b600281101561359157613551816001614115565b61355c906008613e10565b5081515f9083908390811061357357613573614128565b60200101906001600160f81b03191690815f1a90535060010161353d565b505f5b60048110156135ef576135a8816003614115565b6135b3906008613e10565b505f826135c183600261417f565b815181106135d1576135d1614128565b60200101906001600160f81b03191690815f1a905350600101613594565b505f5b602081101561364c578451816020811061360e5761360e614128565b1a60f81b8261361e83600661417f565b8151811061362e5761362e614128565b60200101906001600160f81b03191690815f1a9053506001016135f2565b505f5b60208110156136ac578460200151816020811061366e5761366e614128565b1a60f81b8261367e83602661417f565b8151811061368e5761368e614128565b60200101906001600160f81b03191690815f1a90535060010161364f565b505f5b6008811015613720576136c3816007614115565b6136ce906008613e10565b60ff1685604001516001600160401b0316901c60f81b828260466136f2919061417f565b8151811061370257613702614128565b60200101906001600160f81b03191690815f1a9053506001016136af565b505f5b603081101561378b578460800151818151811061374257613742614128565b01602001516001600160f81b0319168261375d83604e61417f565b8151811061376d5761376d614128565b60200101906001600160f81b03191690815f1a905350600101613723565b505f5b60088110156137fd576137a2816007614115565b6137ad906008613e10565b60608601516001600160401b0390811691161c60f81b826137cf83607e61417f565b815181106137df576137df614128565b60200101906001600160f81b03191690815f1a90535060010161378e565b5060028160405161380e91906142cf565b602060405180830381855afa158015613829573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061384c9190613ce3565b94909350915050565b61385d613237565b6138656138d1565b61386d6138e1565b611614816138e9565b61387e613237565b5f5f8051602061430b833981519152948555506001840192909255600290920180546001600160a01b03909216600160401b026001600160e01b03199092166001600160401b0390931692909217179055565b6138d9613237565b613280613955565b613280613237565b6138f1613237565b80355f8051602061432b83398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb015561393b60608301604084016142ea565b600291909101805460ff191660ff90921691909117905550565b61349d613237565b50805461396990613c13565b5f825580601f10613978575050565b601f0160209004905f5260205f209081019061161491905b808211156139a3575f8155600101613990565b5090565b5f60e082840312156139b7575f80fd5b50919050565b5f602082840312156139cd575f80fd5b5035919050565b803563ffffffff811681146139e7575f80fd5b919050565b6001600160a01b0381168114611614575f80fd5b5f8060408385031215613a11575f80fd5b613a1a836139d4565b91506020830135613a2a816139ec565b809150509250929050565b5f8060408385031215613a46575f80fd5b823591506020830135613a2a816139ec565b5f60208284031215613a68575f80fd5b613a71826139d4565b9392505050565b80356001600160401b03811681146139e7575f80fd5b5f60208284031215613a9e575f80fd5b613a7182613a78565b8015158114611614575f80fd5b5f805f60608486031215613ac6575f80fd5b833592506020840135613ad881613aa7565b9150613ae6604085016139d4565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715613b2557613b25613aef565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613b5357613b53613aef565b604052919050565b5f6001600160401b03821115613b7357613b73613aef565b50601f01601f191660200190565b5f805f60608486031215613b93575f80fd5b83359250613ba360208501613a78565b915060408401356001600160401b03811115613bbd575f80fd5b8401601f81018613613bcd575f80fd5b8035613be0613bdb82613b5b565b613b2b565b818152876020838501011115613bf4575f80fd5b816020840160208301375f602083830101528093505050509250925092565b600181811c90821680613c2757607f821691505b6020821081036139b757634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f60208083525f8454613c6b81613c13565b806020870152604060018084165f8114613c8c5760018114613ca857613cd5565b60ff19851660408a0152604084151560051b8a01019550613cd5565b895f5260205f205f5b85811015613ccc5781548b8201860152908301908801613cb1565b8a016040019650505b509398975050505050505050565b5f60208284031215613cf3575f80fd5b5051919050565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b60208082526030908201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72206e60408201526f1bdd081c195b991a5b99c8185919195960821b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f82613e0b57613e0b613dd5565b500490565b808202811582820484141761084a5761084a613de9565b5f5b83811015613e41578181015183820152602001613e29565b50505f910152565b80516139e781613aa7565b5f8060408385031215613e65575f80fd5b82516001600160401b0380821115613e7b575f80fd5b9084019060608287031215613e8e575f80fd5b613e96613b03565b82518152602080840151613ea9816139ec565b82820152604084015183811115613ebe575f80fd5b80850194505087601f850112613ed2575f80fd5b83519250613ee2613bdb84613b5b565b8381528882858701011115613ef5575f80fd5b613f0484838301848801613e27565b80604084015250819550613f19818801613e49565b9450505050509250929050565b6001600160401b03828116828216039080821115613f4657613f46613de9565b5092915050565b601f82111561059c57805f5260205f20601f840160051c81016020851015613f725750805b601f840160051c820191505b81811015613f91575f8155600101613f7e565b5050505050565b81516001600160401b03811115613fb157613fb1613aef565b613fc581613fbf8454613c13565b84613f4d565b602080601f831160018114613ff8575f8415613fe15750858301515b5f19600386901b1c1916600185901b178555610438565b5f85815260208120601f198616915b8281101561402657888601518255948401946001909101908401614007565b508582101561404357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b602081525f8251806020840152614071816040850160208701613e27565b601f01601f19169190910160400192915050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b8181038181111561084a5761084a613de9565b634e487b7160e01b5f52603260045260245ffd5b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b8082018082111561084a5761084a613de9565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b60208082526026908201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060408201526561637469766560d01b606082015260800190565b5f6001600160401b0380831681810361423a5761423a613de9565b6001019392505050565b6001600160401b03818116838216019080821115613f4657613f46613de9565b5f60208284031215614274575f80fd5b8135613a71816139ec565b6001600160401b038181168382160280821691908281146142a2576142a2613de9565b505092915050565b5f6001600160401b03808416806142c3576142c3613dd5565b92169190910492915050565b5f82516142e0818460208701613e27565b9190910192915050565b5f602082840312156142fa575f80fd5b813560ff81168114613a71575f80fdfe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"maximumHourlyChurn\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"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\":\"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\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resendDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndDelegation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"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\":\"ValidationUptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"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\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]}]", + Bin: "0x608060405234801561000f575f80fd5b5060405161450b38038061450b83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6143be8061014d5f395ff3fe6080604052600436106100f9575f3560e01c806366435abf11610092578063b771b3bc11610062578063b771b3bc1461029e578063bee0a03f146102d0578063c599e24f146102ef578063d61bed7414610302578063f40797d714610321575f80fd5b806366435abf146102225780636a7e3d831461024157806376f7862114610260578063a3a65e481461027f575f80fd5b80630b77f693116100cd5780630b77f6931461017b5780632e2194d81461019a578063467ef06f146101d657806362065856146101f5575f80fd5b8062e41792146100fd5780630118acc41461011e5780630322ed981461013d5780630915204e1461015c575b5f80fd5b348015610108575f80fd5b5061011c6101173660046139ce565b610334565b005b348015610129575f80fd5b5061011c610138366004613a09565b610440565b348015610148575f80fd5b5061011c610157366004613a44565b61086f565b348015610167575f80fd5b5061011c610176366004613a6f565b6109cb565b348015610186575f80fd5b5061011c610195366004613aa4565b610b97565b3480156101a5575f80fd5b506101b96101b4366004613a44565b610c5f565b6040516001600160401b0390911681526020015b60405180910390f35b3480156101e1575f80fd5b5061011c6101f0366004613ac7565b610c75565b348015610200575f80fd5b5061021461020f366004613afd565b610fd1565b6040519081526020016101cd565b34801561022d575f80fd5b506101b961023c366004613a44565b610fea565b34801561024c575f80fd5b5061011c61025b366004613aa4565b610ffe565b34801561026b575f80fd5b5061011c61027a366004613a09565b611080565b34801561028a575f80fd5b5061011c610299366004613ac7565b61109b565b3480156102a9575f80fd5b506102b86005600160991b0181565b6040516001600160a01b0390911681526020016101cd565b3480156102db575f80fd5b5061011c6102ea366004613a44565b61124f565b61011c6102fd366004613a44565b61131e565b34801561030d575f80fd5b5061011c61031c366004613a6f565b61132c565b61021461032f366004613ba8565b611532565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156103785750825b90505f826001600160401b031660011480156103935750303b155b9050811580156103a1575080155b156103bf5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156103e957845460ff60401b1916600160401b1785555b6103f286611554565b831561043857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f8215610454576104518483611565565b90505b5f8481527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03602090815260408083203384528252808320815160e08101835281546001600160401b038082168352600160401b808304821696840196909652600160801b808304821695840195909552600160c01b90910481166060830152600183015480821660808401529485041660a08201525f805160206143328339815191529493909260c08401910460ff16600481111561051557610515613c3a565b600481111561052657610526613c3a565b905250905060028160c00151600481111561054357610543613c3a565b146105a45760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2064656c656761746f72206e6f742060448201526561637469766560d01b60648201526084015b60405180910390fd5b5f6105ae87611875565b9050600360c08301819052506001600160401b03428116604080850191909152828216608085015290851660a08401525f8881526003850160205290812083916105f53390565b6001600160a01b0316815260208082019290925260409081015f2083518154938501519285015160608601516001600160401b039283166001600160801b031996871617600160401b9584168602176001600160801b0316600160801b92841683026001600160c01b031617600160c01b91841691909102178355608086015160018401805460a089015192851697169690961792169093021780845560c08501519193919260ff60801b19909116908360048111156106b7576106b7613c3a565b02179055509050505f6106c9886118f0565b9050825f01516001600160401b031681608001516001600160401b03161161073f5760405162461bcd60e51b815260206004820152602360248201527f506f5356616c696461746f724d616e616765723a20496e76616c69642077656960448201526219da1d60ea1b606482015260840161059b565b8251608082018051610752908390613c62565b6001600160401b031690525061076888826119eb565b5f61077889848460800151611ada565b5f8a81526005870160209081526040808320338452909152902090915061079f8282613d06565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906107cc908590600401613de3565b6020604051808303815f875af11580156107e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080c9190613e15565b6080840151604080516001600160401b0392831681529187166020830152428282015251919250339183918d917fadec5acd02ee9a5280893bb168456a89d9b0004eee87906795b290740f2e4bde9181900360600190a450505050505050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040812080545f805160206143528339815191529291906108b790613c89565b90501180156108e9575060035f83815260078301602052604090205460ff1660058111156108e7576108e7613c3a565b145b61094d5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b606482015260840161059b565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916109869190600401613e2c565b6020604051808303815f875af11580156109a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c69190613e15565b505050565b5f805160206143328339815191525f6109e384611cf7565b90505f806109f48360400151611ed8565b5091509150610a038286612113565b5f82815260058501602090815260408083206001600160a01b03891684529091528120610a2f91613984565b5f610a39836118f0565b9050816001600160401b031681606001516001600160401b03161015610a715760405162461bcd60e51b815260040161059b90613eb6565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020600101546001600160401b0380841691161115610ac35760405162461bcd60e51b815260040161059b90613ef8565b60035f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160801b900460ff166004811115610b0757610b07613c3a565b14610b245760405162461bcd60e51b815260040161059b90613f41565b5f83815260038601602090815260408083206001600160a01b038a168085529252808320600101805460ff60801b1916600160821b179055516001600160401b0385169286917f4da588c356f0bfa46c394126d28890aaadfc4ed6c26a611d14275e13ad1057dd9190a450505050505050565b610ba18282612226565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f80516020614332833981519152916005600160991b019163ee5b48eb91610c1991600401613e2c565b6020604051808303815f875af1158015610c35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c599190613e15565b50505050565b5f610c6f64e8d4a5100083613fa5565b92915050565b5f805160206143528339815191525f610c8d83611cf7565b90505f80610c9e8360400151612344565b915091508015610d035760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b606482015260840161059b565b5f828152600785016020526040808220815160e081019092528054829060ff166005811115610d3457610d34613c3a565b6005811115610d4557610d45613c3a565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b90041660c0909101529091505f9082516005811115610dbe57610dbe613c3a565b1480610ddc5750600182516005811115610dda57610dda613c3a565b145b610e3b5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b606482015260840161059b565b600382516005811115610e5057610e50613c3a565b03610e7757505f8381526006860160205260408120600491610e729190613984565b610e7b565b5060055b6020808301515f90815260088801909152604081205581816005811115610ea457610ea4613c3a565b90816005811115610eb757610eb7613c3a565b9052505f84815260078701602052604090208251815484929190829060ff19166001836005811115610eeb57610eeb613c3a565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b929091169190910217905581516005811115610f9e57610f9e613c3a565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a350505050505050565b5f610c6f6001600160401b03831664e8d4a51000613fb8565b5f610ff4826118f0565b6080015192915050565b6110088282612113565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f80516020614332833981519152916005600160991b019163ee5b48eb91610c1991600401613e2c565b8115611092576110908382611565565b505b6109c6836124e5565b5f805160206143528339815191525f6110b383611cf7565b90505f806110c48360400151612344565b91509150806111265760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b606482015260840161059b565b5f8281526005850160205260408120805461114090613c89565b9050118015611172575060015f83815260078601602052604090205460ff16600581111561117057611170613c3a565b145b61118e5760405162461bcd60e51b815260040161059b90613fcf565b5f82815260058501602052604081206111a691613984565b5f8281526007850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092178355600190930154875260088b0185528387208990559588905293835292548151931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb056020526040812080545f8051602061435283398151915292919061129790613c89565b90501180156112c9575060015f83815260078301602052604090205460ff1660058111156112c7576112c7613c3a565b145b6112e55760405162461bcd60e51b815260040161059b90613fcf565b5f82815260058201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916109869190600401613e2c565b611329813334612837565b50565b5f805160206143328339815191525f61134484611cf7565b90505f806113558360400151611ed8565b50915091506113648286612226565b5f82815260048501602090815260408083206001600160a01b0389168452909152812061139091613984565b5f61139a836118f0565b9050816001600160401b031681606001516001600160401b031610156113d25760405162461bcd60e51b815260040161059b90613eb6565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020546001600160401b03808416600160c01b9092041611156114285760405162461bcd60e51b815260040161059b90613ef8565b60015f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160801b900460ff16600481111561146c5761146c613c3a565b146114895760405162461bcd60e51b815260040161059b90613f41565b5f83815260038601602090815260408083206001600160a01b038a168085529083529281902060018101805460ff60801b1916600160811b179055805467ffffffffffffffff60401b1916600160401b426001600160401b03818116929092029290921790925582519081529151908616939287927fd63c8a1fc829b22698176813c742597f94f9278dde21a64f7a8192e905f932b6929081900390910190a450505050505050565b5f8061153d34612ba8565b905061154b85828686612c52565b95945050505050565b61155c613086565b611329816130d1565b5f805f805160206143328339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156115c1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115e89190810190614021565b915091508061164b5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161059b565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561168e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b29190613e15565b8251146117165760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b606482015260840161059b565b60208201516001600160a01b03161561178c5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161059b565b5f8061179b8460400151613114565b915091508188146118085760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b606482015260840161059b565b5f888152600686016020908152604091829020805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c910160405180910390a2979650505050505050565b5f8181525f805160206143928339815191526020526040812060020180545f8051602061435283398151915291600160a01b9091046001600160401b031690819060146118c1836140f3565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508092505050919050565b6040805160e080820183525f8083526020808401829052838501829052606084018290526080840182905260a0840182905260c084018290528582525f8051602061439283398151915290528390208351918201909352825491925f8051602061435283398151915292829060ff16600581111561197057611970613c3a565b600581111561198157611981613c3a565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b900490911660c0909101529392505050565b5f8281525f8051602061439283398151915260205260409020815181545f805160206143528339815191529284929091829060ff19166001836005811115611a3557611a35613c3a565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055505050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611b5357611b13816001614118565b611b1e906008613fb8565b5081515f90839083908110611b3557611b3561412b565b60200101906001600160f81b03191690815f1a905350600101611aff565b505f5b6004811015611bb657611b6a816003614118565b611b75906008613fb8565b6001901c60f81b82611b8883600261413f565b81518110611b9857611b9861412b565b60200101906001600160f81b03191690815f1a905350600101611b56565b505f5b6020811015611c1857611bcd81601f614118565b611bd8906008613fb8565b86901c60f81b82611bea83600661413f565b81518110611bfa57611bfa61412b565b60200101906001600160f81b03191690815f1a905350600101611bb9565b505f5b6008811015611c8357611c2f816007614118565b611c3a906008613fb8565b6001600160401b038616901c60f81b82611c5583602661413f565b81518110611c6557611c6561412b565b60200101906001600160f81b03191690815f1a905350600101611c1b565b505f5b6008811015611cee57611c9a816007614118565b611ca5906008613fb8565b6001600160401b038516901c60f81b82611cc083602e61413f565b81518110611cd057611cd061412b565b60200101906001600160f81b03191690815f1a905350600101611c86565b50949350505050565b60408051606080820183525f8083526020830181905292820152905f805160206143528339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611d6c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d939190810190614021565b9150915080611dfa5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b606482015260840161059b565b8254825114611e5d5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b606482015260840161059b565b60208201516001600160a01b031615611ed05760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b606482015260840161059b565b509392505050565b5f805f8351603614611efc5760405162461bcd60e51b815260040161059b90614152565b5f805b6002811015611f4b57611f13816001614118565b611f1e906008613fb8565b61ffff16868281518110611f3457611f3461412b565b016020015160f81c901b9190911790600101611eff565b5061ffff811615611f6e5760405162461bcd60e51b815260040161059b9061419b565b5f805b6004811015611fc957611f85816003614118565b611f90906008613fb8565b63ffffffff1687611fa283600261413f565b81518110611fb257611fb261412b565b016020015160f81c901b9190911790600101611f71565b5063ffffffff8116600314611ff05760405162461bcd60e51b815260040161059b906141de565b5f805b60208110156120455761200781601f614118565b612012906008613fb8565b8861201e83600661413f565b8151811061202e5761202e61412b565b016020015160f81c901b9190911790600101611ff3565b505f805b60088110156120a45761205d816007614118565b612068906008613fb8565b6001600160401b03168961207d83602661413f565b8151811061208d5761208d61412b565b016020015160f81c901b9190911790600101612049565b505f805b6008811015612103576120bc816007614118565b6120c7906008613fb8565b6001600160401b03168a6120dc83602e61413f565b815181106120ec576120ec61412b565b016020015160f81c901b91909117906001016120a8565b5091989097509095509350505050565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b0385168452909152812080545f8051602061433283398151915292919061216f90613c89565b90501180156121bf575060035f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160801b900460ff1660048111156121bd576121bd613c3a565b145b6109c65760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f722072604482015271656d6f76616c206e6f742070656e64696e6760701b606482015260840161059b565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b0385168452909152812080545f8051602061433283398151915292919061228290613c89565b90501180156122d2575060015f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160801b900460ff1660048111156122d0576122d0613c3a565b145b6109c65760405162461bcd60e51b815260206004820152603760248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72207260448201527f6567697374726174696f6e206e6f742070656e64696e67000000000000000000606482015260840161059b565b5f8082516027146123675760405162461bcd60e51b815260040161059b90614152565b5f805b60028110156123b65761237e816001614118565b612389906008613fb8565b61ffff1685828151811061239f5761239f61412b565b016020015160f81c901b919091179060010161236a565b5061ffff8116156123d95760405162461bcd60e51b815260040161059b9061419b565b5f805b6004811015612434576123f0816003614118565b6123fb906008613fb8565b63ffffffff168661240d83600261413f565b8151811061241d5761241d61412b565b016020015160f81c901b91909117906001016123dc565b5063ffffffff811660021461245b5760405162461bcd60e51b815260040161059b906141de565b5f805b60208110156124b05761247281601f614118565b61247d906008613fb8565b8761248983600661413f565b815181106124995761249961412b565b016020015160f81c901b919091179060010161245e565b505f866026815181106124c5576124c561412b565b016020015191976001600160f81b03199092161515965090945050505050565b5f8181525f805160206143928339815191526020526040808220815160e0810190925280545f8051602061435283398151915293929190829060ff16600581111561253257612532613c3a565b600581111561254357612543613c3a565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b900490921660c090910152909150815160058111156125bd576125bd613c3a565b146125da5760405162461bcd60e51b815260040161059b90614225565b60408101516001600160a01b0316336001600160a01b0316146126545760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b606482015260840161059b565b61266181608001516132ec565b60038152426001600160401b031660c08201525f83815260078301602052604090208151815483929190829060ff191660018360058111156126a5576126a5613c3a565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b92909116919091021790555f6127598461275381611875565b5f611ada565b5f85815260068501602052604090209091506127758282613d06565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906127a2908590600401613de3565b6020604051808303815f875af11580156127be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e29190613e15565b6080840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b61283f61348d565b5f61284982610c5f565b90505f805160206143328339815191525f612863866118f0565b905060028151600581111561287a5761287a613c3a565b146128975760405162461bcd60e51b815260040161059b90614225565b5f86815260038301602090815260408083206001600160a01b03891684529091529020546001600160401b0316156129285760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f724d616e616765723a2064656c656761746f7220616c726560448201526d18591e481c9959da5cdd195c995960921b606482015260840161059b565b612931836132ec565b8281608001818151612943919061426b565b6001600160401b031690525061295986826119eb565b5f61296387611875565b90505f61297588838560800151611ada565b5f89815260048601602090815260408083206001600160a01b038c16845290915290209091506129a58282613d06565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906129d2908590600401613de3565b6020604051808303815f875af11580156129ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a129190613e15565b6040805160e0810182526001600160401b03808a1682525f60208301819052928201839052861660608201526080810182905260a081019190915290915060c08101600190525f8a815260038701602090815260408083206001600160a01b038d16845282529182902083518154928501519385015160608601516001600160401b039283166001600160801b031995861617600160401b9684168702176001600160801b0316600160801b92841683026001600160c01b031617600160c01b91841691909102178355608086015160018401805460a089015192851696169590951792169094021780835560c0850151919391929160ff60801b1990911690836004811115612b2457612b24613c3a565b021790555050506080840151604080516001600160401b03808a1682529283166020820152918516908201526001600160a01b0389169082908b907feea0c6dd7e326ed588ce418df1563a24af963b7a54714ba659fab8152435795b9060600160405180910390a45050505050506109c660015f8051602061437283398151915255565b5f5f805160206143328339815191528282612bc282610c5f565b83549091506001600160401b03821610801590612bec57508260010154816001600160401b031611155b612c4a5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207374616044820152681ad948185b5bdd5b9d60ba1b606482015260840161059b565b949350505050565b5f612c5b61348d565b5f80516020614352833981519152426001600160401b038516118015612c9557506001600160401b038416612c93426202a30061413f565b115b612cf75760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c69642072656769737460448201526c726174696f6e2065787069727960981b606482015260840161059b565b85612d4e5760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b606482015260840161059b565b5f86815260088201602052604090205415612dbc5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b606482015260840161059b565b8251603014612e235760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b606482015260840161059b565b612e2c856132ec565b5f80612e736040518060a00160405280856001015481526020018a8152602001896001600160401b03168152602001886001600160401b03168152602001878152506134d7565b5f82815260058601602052604090209193509150612e918282613d06565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612ebe908590600401613de3565b6020604051808303815f875af1158015612eda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612efe9190613e15565b6040805160e08101825260018152602081018c90529192508101336001600160a01b031681525f60208083018290526001600160401b038c166040808501919091526060840183905260809093018290528682526007880190522081518154829060ff19166001836005811115612f7757612f77613c3a565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b929091169190910217905561302083611875565b50604080516001600160401b03808b1682528916602082015282918b9186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e910160405180910390a4509092505050612c4a60015f8051602061437283398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166130cf57604051631afcd79f60e31b815260040160405180910390fd5b565b6130d9613086565b6130e28161387c565b611329606082013560808301356130ff60c0850160a08601613afd565b61310f60e0860160c0870161428b565b61389d565b5f808251602e146131375760405162461bcd60e51b815260040161059b90614152565b5f805b60028110156131865761314e816001614118565b613159906008613fb8565b61ffff1685828151811061316f5761316f61412b565b016020015160f81c901b919091179060010161313a565b5061ffff8116156131a95760405162461bcd60e51b815260040161059b9061419b565b5f805b6004811015613204576131c0816003614118565b6131cb906008613fb8565b63ffffffff16866131dd83600261413f565b815181106131ed576131ed61412b565b016020015160f81c901b91909117906001016131ac565b5063ffffffff811660041461322b5760405162461bcd60e51b815260040161059b906141de565b5f805b60208110156132805761324281601f614118565b61324d906008613fb8565b8761325983600661413f565b815181106132695761326961412b565b016020015160f81c901b919091179060010161322e565b505f805b60088110156132df57613298816007614118565b6132a3906008613fb8565b6001600160401b0316886132b883602661413f565b815181106132c8576132c861412b565b016020015160f81c901b9190911790600101613284565b5090969095509350505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb02545f805160206143528339815191529060ff165f0361332a575050565b60408051606081018252600383015480825260048401546001600160401b038082166020850152600160401b9091041692820192909252904290610e10906133729083614118565b1061338e576001600160401b03841660408301528082526133ad565b83826040018181516133a0919061426b565b6001600160401b03169052505b5f8260200151836040015160646133c491906142a6565b6133ce91906142d1565b600285015490915060ff90811690821611156134495760405162461bcd60e51b815260206004820152603460248201527f56616c696461746f724d616e616765723a206d6178696d756d20686f75726c796044820152730818da1d5c9b881c985d1948195e18d95959195960621b606482015260840161059b565b5050805160038301556020810151600490920180546040909201516001600160401b03908116600160401b026001600160801b031990931693169290921717905550565b5f805160206143728339815191528054600119016134be57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f8051602061437283398151915255565b5f60608260800151516030146135415760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b606482015260840161059b565b60408051608680825260c082019092525f916020820181803683370190505090505f5b60028110156135b857613578816001614118565b613583906008613fb8565b5081515f9083908390811061359a5761359a61412b565b60200101906001600160f81b03191690815f1a905350600101613564565b505f5b6004811015613616576135cf816003614118565b6135da906008613fb8565b505f826135e883600261413f565b815181106135f8576135f861412b565b60200101906001600160f81b03191690815f1a9053506001016135bb565b505f5b602081101561367357845181602081106136355761363561412b565b1a60f81b8261364583600661413f565b815181106136555761365561412b565b60200101906001600160f81b03191690815f1a905350600101613619565b505f5b60208110156136d357846020015181602081106136955761369561412b565b1a60f81b826136a583602661413f565b815181106136b5576136b561412b565b60200101906001600160f81b03191690815f1a905350600101613676565b505f5b6008811015613747576136ea816007614118565b6136f5906008613fb8565b60ff1685604001516001600160401b0316901c60f81b82826046613719919061413f565b815181106137295761372961412b565b60200101906001600160f81b03191690815f1a9053506001016136d6565b505f5b60308110156137b257846080015181815181106137695761376961412b565b01602001516001600160f81b0319168261378483604e61413f565b815181106137945761379461412b565b60200101906001600160f81b03191690815f1a90535060010161374a565b505f5b6008811015613824576137c9816007614118565b6137d4906008613fb8565b60608601516001600160401b0390811691161c60f81b826137f683607e61413f565b815181106138065761380661412b565b60200101906001600160f81b03191690815f1a9053506001016137b5565b5060028160405161383591906142f6565b602060405180830381855afa158015613850573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906138739190613e15565b94909350915050565b613884613086565b61388c6138f8565b613894613908565b61132981613910565b6138a5613086565b5f5f80516020614332833981519152948555506001840192909255600290920180546001600160a01b03909216600160401b026001600160e01b03199092166001600160401b0390931692909217179055565b613900613086565b6130cf61397c565b6130cf613086565b613918613086565b80355f8051602061435283398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01556139626060830160408401614311565b600291909101805460ff191660ff90921691909117905550565b6134c4613086565b50805461399090613c89565b5f825580601f1061399f575050565b601f0160209004905f5260205f209081019061132991905b808211156139ca575f81556001016139b7565b5090565b5f60e082840312156139de575f80fd5b50919050565b8015158114611329575f80fd5b803563ffffffff81168114613a04575f80fd5b919050565b5f805f60608486031215613a1b575f80fd5b833592506020840135613a2d816139e4565b9150613a3b604085016139f1565b90509250925092565b5f60208284031215613a54575f80fd5b5035919050565b6001600160a01b0381168114611329575f80fd5b5f8060408385031215613a80575f80fd5b613a89836139f1565b91506020830135613a9981613a5b565b809150509250929050565b5f8060408385031215613ab5575f80fd5b823591506020830135613a9981613a5b565b5f60208284031215613ad7575f80fd5b613ae0826139f1565b9392505050565b80356001600160401b0381168114613a04575f80fd5b5f60208284031215613b0d575f80fd5b613ae082613ae7565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715613b4c57613b4c613b16565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613b7a57613b7a613b16565b604052919050565b5f6001600160401b03821115613b9a57613b9a613b16565b50601f01601f191660200190565b5f805f60608486031215613bba575f80fd5b83359250613bca60208501613ae7565b915060408401356001600160401b03811115613be4575f80fd5b8401601f81018613613bf4575f80fd5b8035613c07613c0282613b82565b613b52565b818152876020838501011115613c1b575f80fd5b816020840160208301375f602083830101528093505050509250925092565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03828116828216039080821115613c8257613c82613c4e565b5092915050565b600181811c90821680613c9d57607f821691505b6020821081036139de57634e487b7160e01b5f52602260045260245ffd5b601f8211156109c657805f5260205f20601f840160051c81016020851015613ce05750805b601f840160051c820191505b81811015613cff575f8155600101613cec565b5050505050565b81516001600160401b03811115613d1f57613d1f613b16565b613d3381613d2d8454613c89565b84613cbb565b602080601f831160018114613d66575f8415613d4f5750858301515b5f19600386901b1c1916600185901b178555610438565b5f85815260208120601f198616915b82811015613d9457888601518255948401946001909101908401613d75565b5085821015613db157878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f5b83811015613ddb578181015183820152602001613dc3565b50505f910152565b602081525f8251806020840152613e01816040850160208701613dc1565b601f01601f19169190910160400192915050565b5f60208284031215613e25575f80fd5b5051919050565b5f60208083525f8454613e3e81613c89565b806020870152604060018084165f8114613e5f5760018114613e7b57613ea8565b60ff19851660408a0152604084151560051b8a01019550613ea8565b895f5260205f205f5b85811015613e9f5781548b8201860152908301908801613e84565b8a016040019650505b509398975050505050505050565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b60208082526030908201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72206e60408201526f1bdd081c195b991a5b99c8185919195960821b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f82613fb357613fb3613f91565b500490565b8082028115828204841417610c6f57610c6f613c4e565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b8051613a04816139e4565b5f8060408385031215614032575f80fd5b82516001600160401b0380821115614048575f80fd5b908401906060828703121561405b575f80fd5b614063613b2a565b8251815260208084015161407681613a5b565b8282015260408401518381111561408b575f80fd5b80850194505087601f85011261409f575f80fd5b835192506140af613c0284613b82565b83815288828587010111156140c2575f80fd5b6140d184838301848801613dc1565b806040840152508195506140e6818801614016565b9450505050509250929050565b5f6001600160401b0380831681810361410e5761410e613c4e565b6001019392505050565b81810381811115610c6f57610c6f613c4e565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610c6f57610c6f613c4e565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b60208082526026908201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060408201526561637469766560d01b606082015260800190565b6001600160401b03818116838216019080821115613c8257613c82613c4e565b5f6020828403121561429b575f80fd5b8135613ae081613a5b565b6001600160401b038181168382160280821691908281146142c9576142c9613c4e565b505092915050565b5f6001600160401b03808416806142ea576142ea613f91565b92169190910492915050565b5f8251614307818460208701613dc1565b9190910192915050565b5f60208284031215614321575f80fd5b813560ff81168114613ae0575f80fdfe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -468,25 +468,25 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) In return _NativeTokenStakingManager.Contract.InitializeDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, validationID) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x927e7e75. +// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. // -// Solidity: function initializeEndDelegation(bytes32 validationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndDelegation(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndDelegation", validationID) +// Solidity: function initializeEndDelegation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndDelegation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndDelegation", validationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x927e7e75. +// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. // -// Solidity: function initializeEndDelegation(bytes32 validationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndDelegation(validationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, validationID) +// Solidity: function initializeEndDelegation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndDelegation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x927e7e75. +// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. // -// Solidity: function initializeEndDelegation(bytes32 validationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndDelegation(validationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, validationID) +// Solidity: function initializeEndDelegation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndDelegation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } // InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. diff --git a/contracts/staking/PoSValidatorManager.sol b/contracts/staking/PoSValidatorManager.sol index e1ead5021..ed405eda4 100644 --- a/contracts/staking/PoSValidatorManager.sol +++ b/contracts/staking/PoSValidatorManager.sol @@ -79,11 +79,11 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager uint64 minimumStakeDuration, IRewardCalculator rewardCalculator ) internal onlyInitializing { - PoSValidatorManagerStorage storage s = _getPoSValidatorManagerStorage(); - s._minimumStakeAmount = minimumStakeAmount; - s._maximumStakeAmount = maximumStakeAmount; - s._minimumStakeDuration = minimumStakeDuration; - s._rewardCalculator = rewardCalculator; + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + $._minimumStakeAmount = minimumStakeAmount; + $._maximumStakeAmount = maximumStakeAmount; + $._minimumStakeDuration = minimumStakeDuration; + $._rewardCalculator = rewardCalculator; } function initializeEndValidation( @@ -92,34 +92,38 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager uint32 messageIndex ) external { if (includeUptimeProof) { - PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); - (WarpMessage memory warpMessage, bool valid) = - WARP_MESSENGER.getVerifiedWarpMessage(messageIndex); - require(valid, "PoSValidatorManager: invalid warp message"); - - require( - warpMessage.sourceChainID == WARP_MESSENGER.getBlockchainID(), - "PoSValidatorManager: invalid source chain ID" - ); - require( - warpMessage.originSenderAddress == address(0), - "PoSValidatorManager: invalid origin sender address" - ); - - (bytes32 uptimeValidationID, uint64 uptime) = - ValidatorMessages.unpackValidationUptimeMessage(warpMessage.payload); - require( - validationID == uptimeValidationID, - "PoSValidatorManager: invalid uptime validation ID" - ); - - $._validatorUptimes[validationID] = uptime; - emit ValidationUptimeUpdated(validationID, uptime); + _updateUptime(validationID, messageIndex); } - _initializeEndValidation(validationID); } + function _updateUptime(bytes32 validationID, uint32 messageIndex) internal returns (uint64) { + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + (WarpMessage memory warpMessage, bool valid) = + WARP_MESSENGER.getVerifiedWarpMessage(messageIndex); + require(valid, "PoSValidatorManager: invalid warp message"); + + require( + warpMessage.sourceChainID == WARP_MESSENGER.getBlockchainID(), + "PoSValidatorManager: invalid source chain ID" + ); + require( + warpMessage.originSenderAddress == address(0), + "PoSValidatorManager: invalid origin sender address" + ); + + (bytes32 uptimeValidationID, uint64 uptime) = + ValidatorMessages.unpackValidationUptimeMessage(warpMessage.payload); + require( + validationID == uptimeValidationID, "PoSValidatorManager: invalid uptime validation ID" + ); + + $._validatorUptimes[validationID] = uptime; + emit ValidationUptimeUpdated(validationID, uptime); + + return uptime; + } + function _processStake(uint256 stakeAmount) internal virtual returns (uint64) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); // Lock the stake in the contract. @@ -185,6 +189,7 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager endedAt: 0, startingNonce: nonce, endingNonce: 0, + validatorUptime: 0, status: DelegatorStatus.PendingAdded }); @@ -241,7 +246,16 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager }); } - function initializeEndDelegation(bytes32 validationID) external { + function initializeEndDelegation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex + ) external { + uint64 uptime; + if (includeUptimeProof) { + uptime = _updateUptime(validationID, messageIndex); + } + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); // Ensure the delegator is active @@ -253,6 +267,7 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager delegator.status = DelegatorStatus.PendingRemoved; delegator.endedAt = uint64(block.timestamp); delegator.endingNonce = nonce; + delegator.validatorUptime = uptime; $._delegatorStakes[validationID][_msgSender()] = delegator; diff --git a/contracts/staking/interfaces/IPoSValidatorManager.sol b/contracts/staking/interfaces/IPoSValidatorManager.sol index 21346ec20..5935b28d8 100644 --- a/contracts/staking/interfaces/IPoSValidatorManager.sol +++ b/contracts/staking/interfaces/IPoSValidatorManager.sol @@ -30,6 +30,7 @@ struct Delegator { uint64 endedAt; uint64 startingNonce; uint64 endingNonce; + uint64 validatorUptime; DelegatorStatus status; } @@ -139,8 +140,16 @@ interface IPoSValidatorManager is IValidatorManager { * @notice Begins the process of removing a delegator from a validation period. The delegator must have been previously * registered with the given validationID. * @param validationID The ID of the validation period being removed. + * @param includeUptimeProof Whether or not an uptime proof is provided for the validation period. + * If no uptime proof is provided, the validation uptime for the delegation period will be assumed to be 0. + * @param messageIndex If {includeUptimeProof} is true, the index of the Warp message to be received providing the + * uptime proof. */ - function initializeEndDelegation(bytes32 validationID) external; + function initializeEndDelegation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex + ) external; /** * @notice Resubmits a delegator end message to be sent to the P-Chain. diff --git a/contracts/staking/tests/PoSValidatorManagerTests.t.sol b/contracts/staking/tests/PoSValidatorManagerTests.t.sol index af2cb762a..f67db332f 100644 --- a/contracts/staking/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/staking/tests/PoSValidatorManagerTests.t.sol @@ -683,7 +683,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { endTime: endDelegationTimestamp }); vm.prank(delegator); - posValidatorManager.initializeEndDelegation(validationID); + posValidatorManager.initializeEndDelegation(validationID, false, 0); return validationID; } From feef2473b45db1a959572d9492be4c0c995b65ea Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 3 Sep 2024 16:03:11 -0500 Subject: [PATCH 2/5] update go util --- tests/utils/staking.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/utils/staking.go b/tests/utils/staking.go index c73a87405..9dfe967c1 100644 --- a/tests/utils/staking.go +++ b/tests/utils/staking.go @@ -551,6 +551,8 @@ func InitializeEndERC20Delegation( tx, err := stakingManager.InitializeEndDelegation( opts, validationID, + false, + 0, ) Expect(err).Should(BeNil()) return WaitForTransactionSuccess(context.Background(), subnet, tx.Hash()) @@ -632,6 +634,8 @@ func InitializeEndNativeDelegation( tx, err := stakingManager.InitializeEndDelegation( opts, validationID, + false, + 0, ) Expect(err).Should(BeNil()) return WaitForTransactionSuccess(context.Background(), subnet, tx.Hash()) From 31f4c83980e90d518d687eaf204307e401667c29 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 4 Sep 2024 13:19:34 -0500 Subject: [PATCH 3/5] remove uptime from contract state --- contracts/staking/PoSValidatorManager.sol | 19 +++++------ contracts/staking/ValidatorManager.sol | 4 +-- .../interfaces/IPoSValidatorManager.sol | 8 ----- .../tests/PoSValidatorManagerTests.t.sol | 34 ------------------- 4 files changed, 10 insertions(+), 55 deletions(-) diff --git a/contracts/staking/PoSValidatorManager.sol b/contracts/staking/PoSValidatorManager.sol index ed405eda4..011306e45 100644 --- a/contracts/staking/PoSValidatorManager.sol +++ b/contracts/staking/PoSValidatorManager.sol @@ -36,8 +36,6 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager /// @notice Maps the validationID to a mapping of delegator address to pending end delegator messages. mapping(bytes32 validationID => mapping(address delegator => bytes)) _pendingEndDelegatorMessages; - /// @notice Maps the validationID to the uptime of the validator. - mapping(bytes32 validationID => uint64) _validatorUptimes; } // solhint-enable private-vars-leading-underscore @@ -92,12 +90,14 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager uint32 messageIndex ) external { if (includeUptimeProof) { - _updateUptime(validationID, messageIndex); + _getUptime(validationID, messageIndex); } + // TODO: Calculate the reward for the validator, but do not unlock it + _initializeEndValidation(validationID); } - function _updateUptime(bytes32 validationID, uint32 messageIndex) internal returns (uint64) { + function _getUptime(bytes32 validationID, uint32 messageIndex) internal returns (uint64) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); (WarpMessage memory warpMessage, bool valid) = WARP_MESSENGER.getVerifiedWarpMessage(messageIndex); @@ -118,9 +118,6 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager validationID == uptimeValidationID, "PoSValidatorManager: invalid uptime validation ID" ); - $._validatorUptimes[validationID] = uptime; - emit ValidationUptimeUpdated(validationID, uptime); - return uptime; } @@ -189,7 +186,6 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager endedAt: 0, startingNonce: nonce, endingNonce: 0, - validatorUptime: 0, status: DelegatorStatus.PendingAdded }); @@ -253,9 +249,11 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager ) external { uint64 uptime; if (includeUptimeProof) { - uptime = _updateUptime(validationID, messageIndex); + uptime = _getUptime(validationID, messageIndex); } + // TODO: Calculate the delegator's reward, but do not unlock it + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); // Ensure the delegator is active @@ -267,7 +265,6 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager delegator.status = DelegatorStatus.PendingRemoved; delegator.endedAt = uint64(block.timestamp); delegator.endingNonce = nonce; - delegator.validatorUptime = uptime; $._delegatorStakes[validationID][_msgSender()] = delegator; @@ -325,6 +322,8 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager // Update the delegator status $._delegatorStakes[validationID][delegator].status = DelegatorStatus.Completed; + // TODO: Unlock the delegator's stake and their reward + emit DelegationEnded(validationID, delegator, nonce); } diff --git a/contracts/staking/ValidatorManager.sol b/contracts/staking/ValidatorManager.sol index 12977e7c0..ae43bf15e 100644 --- a/contracts/staking/ValidatorManager.sol +++ b/contracts/staking/ValidatorManager.sol @@ -298,9 +298,7 @@ abstract contract ValidatorManager is validator.status = endStatus; $._validationPeriods[validationID] = validator; - // Unlock the stake. - - // Calculate the reward for the validator. + // TODO: Unlock the stake. // Emit event. emit ValidationPeriodEnded(validationID, validator.status); diff --git a/contracts/staking/interfaces/IPoSValidatorManager.sol b/contracts/staking/interfaces/IPoSValidatorManager.sol index 5935b28d8..b804592ea 100644 --- a/contracts/staking/interfaces/IPoSValidatorManager.sol +++ b/contracts/staking/interfaces/IPoSValidatorManager.sol @@ -30,18 +30,10 @@ struct Delegator { uint64 endedAt; uint64 startingNonce; uint64 endingNonce; - uint64 validatorUptime; DelegatorStatus status; } interface IPoSValidatorManager is IValidatorManager { - /** - * @notice Event emitted when a validator's uptime is updated. - * @param validationID The ID of the validation period - * @param uptime The new uptime of the validator - */ - event ValidationUptimeUpdated(bytes32 indexed validationID, uint64 uptime); - /** * @notice Event emitted when a delegator registration is initiated * @param validationID The ID of the validation period diff --git a/contracts/staking/tests/PoSValidatorManagerTests.t.sol b/contracts/staking/tests/PoSValidatorManagerTests.t.sol index f67db332f..c98c054fa 100644 --- a/contracts/staking/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/staking/tests/PoSValidatorManagerTests.t.sol @@ -24,8 +24,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager public posValidatorManager; - event ValidationUptimeUpdated(bytes32 indexed validationID, uint64 uptime); - event DelegatorAdded( bytes32 indexed validationID, bytes32 indexed setWeightMessageID, @@ -55,38 +53,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 indexed validationID, address indexed delegator, uint64 indexed nonce ); - function testInitializeEndValidationWithUptimeProof() public { - bytes32 validationID = _setUpCompleteValidatorRegistration({ - nodeID: DEFAULT_NODE_ID, - subnetID: DEFAULT_SUBNET_ID, - weight: DEFAULT_WEIGHT, - registrationExpiry: DEFAULT_EXPIRY, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - registrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP - }); - - _mockGetBlockchainID(); - vm.mockCall( - WARP_PRECOMPILE_ADDRESS, - abi.encodeWithSelector(IWarpMessenger.getVerifiedWarpMessage.selector, uint32(0)), - abi.encode( - WarpMessage({ - sourceChainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, - originSenderAddress: address(0), - payload: ValidatorMessages.packValidationUptimeMessage(validationID, DEFAULT_UPTIME) - }), - true - ) - ); - vm.expectCall( - WARP_PRECOMPILE_ADDRESS, abi.encodeCall(IWarpMessenger.getVerifiedWarpMessage, 0) - ); - - vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit ValidationUptimeUpdated(validationID, DEFAULT_UPTIME); - posValidatorManager.initializeEndValidation(validationID, true, 0); - } - function testInvalidUptimeWarpMessage() public { bytes32 validationID = _setUpCompleteValidatorRegistration({ nodeID: DEFAULT_NODE_ID, From 59b83c1c0d76d033b28199f178c085dc1a78d446 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 4 Sep 2024 13:25:05 -0500 Subject: [PATCH 4/5] restrict to view --- contracts/staking/PoSValidatorManager.sol | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contracts/staking/PoSValidatorManager.sol b/contracts/staking/PoSValidatorManager.sol index 011306e45..1a7af8826 100644 --- a/contracts/staking/PoSValidatorManager.sol +++ b/contracts/staking/PoSValidatorManager.sol @@ -97,8 +97,7 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager _initializeEndValidation(validationID); } - function _getUptime(bytes32 validationID, uint32 messageIndex) internal returns (uint64) { - PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + function _getUptime(bytes32 validationID, uint32 messageIndex) internal view returns (uint64) { (WarpMessage memory warpMessage, bool valid) = WARP_MESSENGER.getVerifiedWarpMessage(messageIndex); require(valid, "PoSValidatorManager: invalid warp message"); From 3f20e790b92dd04bfd3a91b0ceb245d26123ddac Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 4 Sep 2024 13:26:18 -0500 Subject: [PATCH 5/5] bindings --- .../ERC20TokenStakingManager.go | 149 +----------------- .../NativeTokenStakingManager.go | 149 +----------------- 2 files changed, 4 insertions(+), 294 deletions(-) diff --git a/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 6eb6a1441..877e30698 100644 --- a/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -47,8 +47,8 @@ type ValidatorManagerSettings 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\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"maximumHourlyChurn\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"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\":\"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\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndDelegation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"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\":\"ValidationUptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"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\":\"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: "0x608060405234801561000f575f80fd5b506040516147de3803806147de83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6146918061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c806366435abf1161009e5780639e1bc4ef1161006e5780639e1bc4ef1461021b578063a3a65e481461022e578063b771b3bc14610241578063bee0a03f14610267578063d61bed741461027a575f80fd5b806366435abf146101cf5780636a7e3d83146101e257806376f78621146101f5578063872fda6414610208575f80fd5b806327f39ca8116100d957806327f39ca8146101585780632e2194d81461016b578063467ef06f1461019b57806362065856146101ae575f80fd5b80630118acc41461010a5780630322ed981461011f5780630915204e146101325780630b77f69314610145575b5f80fd5b61011d610118366004613c76565b61028d565b005b61011d61012d366004613cb1565b6106bc565b61011d610140366004613cdc565b610818565b61011d610153366004613d11565b6109e4565b61011d610166366004613d34565b610aac565b61017e610179366004613cb1565b610bba565b6040516001600160401b0390911681526020015b60405180910390f35b61011d6101a9366004613d66565b610bd0565b6101c16101bc366004613d9c565b610f2c565b604051908152602001610192565b61017e6101dd366004613cb1565b610f45565b61011d6101f0366004613d11565b610f59565b61011d610203366004613c76565b610fdb565b6101c1610216366004613e47565b610ff6565b61011d610229366004613ee3565b61101b565b61011d61023c366004613d66565b61102a565b61024f6005600160991b0181565b6040516001600160a01b039091168152602001610192565b61011d610275366004613cb1565b6111de565b61011d610288366004613cdc565b6112ad565b5f82156102a15761029e84836114b3565b90505b5f8481527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03602090815260408083203384528252808320815160e08101835281546001600160401b038082168352600160401b808304821696840196909652600160801b808304821695840195909552600160c01b90910481166060830152600183015480821660808401529485041660a08201525f805160206146058339815191529493909260c08401910460ff16600481111561036257610362613f03565b600481111561037357610373613f03565b905250905060028160c00151600481111561039057610390613f03565b146103f15760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2064656c656761746f72206e6f742060448201526561637469766560d01b60648201526084015b60405180910390fd5b5f6103fb876117c3565b9050600360c08301819052506001600160401b03428116604080850191909152828216608085015290851660a08401525f8881526003850160205290812083916104423390565b6001600160a01b0316815260208082019290925260409081015f2083518154938501519285015160608601516001600160401b039283166001600160801b031996871617600160401b9584168602176001600160801b0316600160801b92841683026001600160c01b031617600160c01b91841691909102178355608086015160018401805460a089015192851697169690961792169093021780845560c08501519193919260ff60801b199091169083600481111561050457610504613f03565b02179055509050505f6105168861183e565b9050825f01516001600160401b031681608001516001600160401b03161161058c5760405162461bcd60e51b815260206004820152602360248201527f506f5356616c696461746f724d616e616765723a20496e76616c69642077656960448201526219da1d60ea1b60648201526084016103e8565b825160808201805161059f908390613f2b565b6001600160401b03169052506105b58882611939565b5f6105c589848460800151611a28565b5f8a8152600587016020908152604080832033845290915290209091506105ec8282613fd5565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906106199085906004016140b6565b6020604051808303815f875af1158015610635573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065991906140e8565b6080840151604080516001600160401b0392831681529187166020830152428282015251919250339183918d917fadec5acd02ee9a5280893bb168456a89d9b0004eee87906795b290740f2e4bde9181900360600190a450505050505050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040812080545f8051602061462583398151915292919061070490613f52565b9050118015610736575060035f83815260078301602052604090205460ff16600581111561073457610734613f03565b145b61079a5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016103e8565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916107d391906004016140ff565b6020604051808303815f875af11580156107ef573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081391906140e8565b505050565b5f805160206146058339815191525f61083084611c45565b90505f806108418360400151611e26565b50915091506108508286612061565b5f82815260058501602090815260408083206001600160a01b0389168452909152812061087c91613c07565b5f6108868361183e565b9050816001600160401b031681606001516001600160401b031610156108be5760405162461bcd60e51b81526004016103e890614189565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020600101546001600160401b03808416911611156109105760405162461bcd60e51b81526004016103e8906141cb565b60035f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160801b900460ff16600481111561095457610954613f03565b146109715760405162461bcd60e51b81526004016103e890614214565b5f83815260038601602090815260408083206001600160a01b038a168085529252808320600101805460ff60801b1916600160821b179055516001600160401b0385169286917f4da588c356f0bfa46c394126d28890aaadfc4ed6c26a611d14275e13ad1057dd9190a450505050505050565b6109ee8282612174565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f80516020614605833981519152916005600160991b019163ee5b48eb91610a66916004016140ff565b6020604051808303815f875af1158015610a82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa691906140e8565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610af05750825b90505f826001600160401b03166001148015610b0b5750303b155b905081158015610b19575080155b15610b375760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b6157845460ff60401b1916600160401b1785555b610b6b8787612292565b8315610bb157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f610bca64e8d4a5100083614278565b92915050565b5f805160206146258339815191525f610be883611c45565b90505f80610bf983604001516122ac565b915091508015610c5e5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016103e8565b5f828152600785016020526040808220815160e081019092528054829060ff166005811115610c8f57610c8f613f03565b6005811115610ca057610ca0613f03565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b90041660c0909101529091505f9082516005811115610d1957610d19613f03565b1480610d375750600182516005811115610d3557610d35613f03565b145b610d965760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016103e8565b600382516005811115610dab57610dab613f03565b03610dd257505f8381526006860160205260408120600491610dcd9190613c07565b610dd6565b5060055b6020808301515f90815260088801909152604081205581816005811115610dff57610dff613f03565b90816005811115610e1257610e12613f03565b9052505f84815260078701602052604090208251815484929190829060ff19166001836005811115610e4657610e46613f03565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b929091169190910217905581516005811115610ef957610ef9613f03565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a350505050505050565b5f610bca6001600160401b03831664e8d4a5100061428b565b5f610f4f8261183e565b6080015192915050565b610f638282612061565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f80516020614605833981519152916005600160991b019163ee5b48eb91610a66916004016140ff565b8115610fed57610feb83826114b3565b505b6108138361244d565b5f806110018661279f565b905061100f8582868661284c565b9150505b949350505050565b611026823383612c80565b5050565b5f805160206146258339815191525f61104283611c45565b90505f8061105383604001516122ac565b91509150806110b55760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016103e8565b5f828152600585016020526040812080546110cf90613f52565b9050118015611101575060015f83815260078601602052604090205460ff1660058111156110ff576110ff613f03565b145b61111d5760405162461bcd60e51b81526004016103e8906142a2565b5f828152600585016020526040812061113591613c07565b5f8281526007850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092178355600190930154875260088b0185528387208990559588905293835292548151931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb056020526040812080545f8051602061462583398151915292919061122690613f52565b9050118015611258575060015f83815260078301602052604090205460ff16600581111561125657611256613f03565b145b6112745760405162461bcd60e51b81526004016103e8906142a2565b5f82815260058201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916107d391906004016140ff565b5f805160206146058339815191525f6112c584611c45565b90505f806112d68360400151611e26565b50915091506112e58286612174565b5f82815260048501602090815260408083206001600160a01b0389168452909152812061131191613c07565b5f61131b8361183e565b9050816001600160401b031681606001516001600160401b031610156113535760405162461bcd60e51b81526004016103e890614189565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020546001600160401b03808416600160c01b9092041611156113a95760405162461bcd60e51b81526004016103e8906141cb565b60015f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160801b900460ff1660048111156113ed576113ed613f03565b1461140a5760405162461bcd60e51b81526004016103e890614214565b5f83815260038601602090815260408083206001600160a01b038a168085529083529281902060018101805460ff60801b1916600160811b179055805467ffffffffffffffff60401b1916600160401b426001600160401b03818116929092029290921790925582519081529151908616939287927fd63c8a1fc829b22698176813c742597f94f9278dde21a64f7a8192e905f932b6929081900390910190a450505050505050565b5f805f805160206146058339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561150f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261153691908101906142f4565b91509150806115995760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016103e8565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160091906140e8565b8251146116645760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016103e8565b60208201516001600160a01b0316156116da5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016103e8565b5f806116e98460400151612ff4565b915091508188146117565760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016103e8565b5f888152600686016020908152604091829020805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c910160405180910390a2979650505050505050565b5f8181525f805160206146658339815191526020526040812060020180545f8051602061462583398151915291600160a01b9091046001600160401b0316908190601461180f836143c6565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508092505050919050565b6040805160e080820183525f8083526020808401829052838501829052606084018290526080840182905260a0840182905260c084018290528582525f8051602061466583398151915290528390208351918201909352825491925f8051602061462583398151915292829060ff1660058111156118be576118be613f03565b60058111156118cf576118cf613f03565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b900490911660c0909101529392505050565b5f8281525f8051602061466583398151915260205260409020815181545f805160206146258339815191529284929091829060ff1916600183600581111561198357611983613f03565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055505050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611aa157611a618160016143eb565b611a6c90600861428b565b5081515f90839083908110611a8357611a836143fe565b60200101906001600160f81b03191690815f1a905350600101611a4d565b505f5b6004811015611b0457611ab88160036143eb565b611ac390600861428b565b6001901c60f81b82611ad6836002614412565b81518110611ae657611ae66143fe565b60200101906001600160f81b03191690815f1a905350600101611aa4565b505f5b6020811015611b6657611b1b81601f6143eb565b611b2690600861428b565b86901c60f81b82611b38836006614412565b81518110611b4857611b486143fe565b60200101906001600160f81b03191690815f1a905350600101611b07565b505f5b6008811015611bd157611b7d8160076143eb565b611b8890600861428b565b6001600160401b038616901c60f81b82611ba3836026614412565b81518110611bb357611bb36143fe565b60200101906001600160f81b03191690815f1a905350600101611b69565b505f5b6008811015611c3c57611be88160076143eb565b611bf390600861428b565b6001600160401b038516901c60f81b82611c0e83602e614412565b81518110611c1e57611c1e6143fe565b60200101906001600160f81b03191690815f1a905350600101611bd4565b50949350505050565b60408051606080820183525f8083526020830181905292820152905f805160206146258339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611cba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ce191908101906142f4565b9150915080611d485760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016103e8565b8254825114611dab5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016103e8565b60208201516001600160a01b031615611e1e5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016103e8565b509392505050565b5f805f8351603614611e4a5760405162461bcd60e51b81526004016103e890614425565b5f805b6002811015611e9957611e618160016143eb565b611e6c90600861428b565b61ffff16868281518110611e8257611e826143fe565b016020015160f81c901b9190911790600101611e4d565b5061ffff811615611ebc5760405162461bcd60e51b81526004016103e89061446e565b5f805b6004811015611f1757611ed38160036143eb565b611ede90600861428b565b63ffffffff1687611ef0836002614412565b81518110611f0057611f006143fe565b016020015160f81c901b9190911790600101611ebf565b5063ffffffff8116600314611f3e5760405162461bcd60e51b81526004016103e8906144b1565b5f805b6020811015611f9357611f5581601f6143eb565b611f6090600861428b565b88611f6c836006614412565b81518110611f7c57611f7c6143fe565b016020015160f81c901b9190911790600101611f41565b505f805b6008811015611ff257611fab8160076143eb565b611fb690600861428b565b6001600160401b031689611fcb836026614412565b81518110611fdb57611fdb6143fe565b016020015160f81c901b9190911790600101611f97565b505f805b60088110156120515761200a8160076143eb565b61201590600861428b565b6001600160401b03168a61202a83602e614412565b8151811061203a5761203a6143fe565b016020015160f81c901b9190911790600101611ff6565b5091989097509095509350505050565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b0385168452909152812080545f805160206146058339815191529291906120bd90613f52565b905011801561210d575060035f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160801b900460ff16600481111561210b5761210b613f03565b145b6108135760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f722072604482015271656d6f76616c206e6f742070656e64696e6760701b60648201526084016103e8565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b0385168452909152812080545f805160206146058339815191529291906121d090613f52565b9050118015612220575060015f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160801b900460ff16600481111561221e5761221e613f03565b145b6108135760405162461bcd60e51b815260206004820152603760248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72207260448201527f6567697374726174696f6e206e6f742070656e64696e6700000000000000000060648201526084016103e8565b61229a6131cc565b6122a382613217565b6110268161325d565b5f8082516027146122cf5760405162461bcd60e51b81526004016103e890614425565b5f805b600281101561231e576122e68160016143eb565b6122f190600861428b565b61ffff16858281518110612307576123076143fe565b016020015160f81c901b91909117906001016122d2565b5061ffff8116156123415760405162461bcd60e51b81526004016103e89061446e565b5f805b600481101561239c576123588160036143eb565b61236390600861428b565b63ffffffff1686612375836002614412565b81518110612385576123856143fe565b016020015160f81c901b9190911790600101612344565b5063ffffffff81166002146123c35760405162461bcd60e51b81526004016103e8906144b1565b5f805b6020811015612418576123da81601f6143eb565b6123e590600861428b565b876123f1836006614412565b81518110612401576124016143fe565b016020015160f81c901b91909117906001016123c6565b505f8660268151811061242d5761242d6143fe565b016020015191976001600160f81b03199092161515965090945050505050565b5f8181525f805160206146658339815191526020526040808220815160e0810190925280545f8051602061462583398151915293929190829060ff16600581111561249a5761249a613f03565b60058111156124ab576124ab613f03565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b900490921660c0909101529091508151600581111561252557612525613f03565b146125425760405162461bcd60e51b81526004016103e8906144f8565b60408101516001600160a01b0316336001600160a01b0316146125bc5760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016103e8565b6125c98160800151613311565b60038152426001600160401b031660c08201525f83815260078301602052604090208151815483929190829060ff1916600183600581111561260d5761260d613f03565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b92909116919091021790555f6126c1846126bb816117c3565b5f611a28565b5f85815260068501602052604090209091506126dd8282613fd5565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061270a9085906004016140b6565b6020604051808303815f875af1158015612726573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274a91906140e8565b6080840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b5f5f80516020614605833981519152816127b8846134b2565b90505f6127c482610bba565b83549091506001600160401b038216108015906127ee57508260010154816001600160401b031611155b6110135760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207374616044820152681ad948185b5bdd5b9d60ba1b60648201526084016103e8565b5f6128556134e8565b5f80516020614625833981519152426001600160401b03851611801561288f57506001600160401b03841661288d426202a300614412565b115b6128f15760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c69642072656769737460448201526c726174696f6e2065787069727960981b60648201526084016103e8565b856129485760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016103e8565b5f868152600882016020526040902054156129b65760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016103e8565b8251603014612a1d5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016103e8565b612a2685613311565b5f80612a6d6040518060a00160405280856001015481526020018a8152602001896001600160401b03168152602001886001600160401b031681526020018781525061351f565b5f82815260058601602052604090209193509150612a8b8282613fd5565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612ab89085906004016140b6565b6020604051808303815f875af1158015612ad4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af891906140e8565b6040805160e08101825260018152602081018c90529192508101336001600160a01b031681525f60208083018290526001600160401b038c166040808501919091526060840183905260809093018290528682526007880190522081518154829060ff19166001836005811115612b7157612b71613f03565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055612c1a836117c3565b50604080516001600160401b03808b1682528916602082015282918b9186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e910160405180910390a450909250505061101360015f8051602061464583398151915255565b612c886134e8565b5f612c95610179836134b2565b90505f805160206146058339815191525f612caf8661183e565b9050600281516005811115612cc657612cc6613f03565b14612ce35760405162461bcd60e51b81526004016103e8906144f8565b5f86815260038301602090815260408083206001600160a01b03891684529091529020546001600160401b031615612d745760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f724d616e616765723a2064656c656761746f7220616c726560448201526d18591e481c9959da5cdd195c995960921b60648201526084016103e8565b612d7d83613311565b8281608001818151612d8f919061453e565b6001600160401b0316905250612da58682611939565b5f612daf876117c3565b90505f612dc188838560800151611a28565b5f89815260048601602090815260408083206001600160a01b038c1684529091529020909150612df18282613fd5565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612e1e9085906004016140b6565b6020604051808303815f875af1158015612e3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e5e91906140e8565b6040805160e0810182526001600160401b03808a1682525f60208301819052928201839052861660608201526080810182905260a081019190915290915060c08101600190525f8a815260038701602090815260408083206001600160a01b038d16845282529182902083518154928501519385015160608601516001600160401b039283166001600160801b031995861617600160401b9684168702176001600160801b0316600160801b92841683026001600160c01b031617600160c01b91841691909102178355608086015160018401805460a089015192851696169590951792169094021780835560c0850151919391929160ff60801b1990911690836004811115612f7057612f70613f03565b021790555050506080840151604080516001600160401b03808a1682529283166020820152918516908201526001600160a01b0389169082908b907feea0c6dd7e326ed588ce418df1563a24af963b7a54714ba659fab8152435795b9060600160405180910390a450505050505061081360015f8051602061464583398151915255565b5f808251602e146130175760405162461bcd60e51b81526004016103e890614425565b5f805b60028110156130665761302e8160016143eb565b61303990600861428b565b61ffff1685828151811061304f5761304f6143fe565b016020015160f81c901b919091179060010161301a565b5061ffff8116156130895760405162461bcd60e51b81526004016103e89061446e565b5f805b60048110156130e4576130a08160036143eb565b6130ab90600861428b565b63ffffffff16866130bd836002614412565b815181106130cd576130cd6143fe565b016020015160f81c901b919091179060010161308c565b5063ffffffff811660041461310b5760405162461bcd60e51b81526004016103e8906144b1565b5f805b60208110156131605761312281601f6143eb565b61312d90600861428b565b87613139836006614412565b81518110613149576131496143fe565b016020015160f81c901b919091179060010161310e565b505f805b60088110156131bf576131788160076143eb565b61318390600861428b565b6001600160401b031688613198836026614412565b815181106131a8576131a86143fe565b016020015160f81c901b9190911790600101613164565b5090969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661321557604051631afcd79f60e31b815260040160405180910390fd5b565b61321f6131cc565b613228816138d7565b61325a6060820135608083013561324560c0850160a08601613d9c565b61325560e0860160c0870161455e565b6138f8565b50565b6132656131cc565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab006001600160a01b0382166132f15760405162461bcd60e51b815260206004820152602c60248201527f4552433230546f6b656e5374616b696e674d616e616765723a207a65726f207460448201526b6f6b656e206164647265737360a01b60648201526084016103e8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb02545f805160206146258339815191529060ff165f0361334f575050565b60408051606081018252600383015480825260048401546001600160401b038082166020850152600160401b9091041692820192909252904290610e109061339790836143eb565b106133b3576001600160401b03841660408301528082526133d2565b83826040018181516133c5919061453e565b6001600160401b03169052505b5f8260200151836040015160646133e99190614579565b6133f391906145a4565b600285015490915060ff908116908216111561346e5760405162461bcd60e51b815260206004820152603460248201527f56616c696461746f724d616e616765723a206d6178696d756d20686f75726c796044820152730818da1d5c9b881c985d1948195e18d95959195960621b60648201526084016103e8565b5050805160038301556020810151600490920180546040909201516001600160401b03908116600160401b026001600160801b031990931693169290921717905550565b5f610bca827f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546001600160a01b031690613953565b5f8051602061464583398151915280546001190161351957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f60608260800151516030146135895760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016103e8565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613600576135c08160016143eb565b6135cb90600861428b565b5081515f908390839081106135e2576135e26143fe565b60200101906001600160f81b03191690815f1a9053506001016135ac565b505f5b600481101561365e576136178160036143eb565b61362290600861428b565b505f82613630836002614412565b81518110613640576136406143fe565b60200101906001600160f81b03191690815f1a905350600101613603565b505f5b60208110156136bb578451816020811061367d5761367d6143fe565b1a60f81b8261368d836006614412565b8151811061369d5761369d6143fe565b60200101906001600160f81b03191690815f1a905350600101613661565b505f5b602081101561371b57846020015181602081106136dd576136dd6143fe565b1a60f81b826136ed836026614412565b815181106136fd576136fd6143fe565b60200101906001600160f81b03191690815f1a9053506001016136be565b505f5b600881101561378f576137328160076143eb565b61373d90600861428b565b60ff1685604001516001600160401b0316901c60f81b828260466137619190614412565b81518110613771576137716143fe565b60200101906001600160f81b03191690815f1a90535060010161371e565b505f5b60308110156137fa57846080015181815181106137b1576137b16143fe565b01602001516001600160f81b031916826137cc83604e614412565b815181106137dc576137dc6143fe565b60200101906001600160f81b03191690815f1a905350600101613792565b505f5b600881101561386c576138118160076143eb565b61381c90600861428b565b60608601516001600160401b0390811691161c60f81b8261383e83607e614412565b8151811061384e5761384e6143fe565b60200101906001600160f81b03191690815f1a9053506001016137fd565b5060028160405161387d91906145c9565b602060405180830381855afa158015613898573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906138bb91906140e8565b94909350915050565b60015f8051602061464583398151915255565b6138df6131cc565b6138e7613ab5565b6138ef613ac5565b61325a81613acd565b6139006131cc565b5f5f80516020614605833981519152948555506001840192909255600290920180546001600160a01b03909216600160401b026001600160e01b03199092166001600160401b0390931692909217179055565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015613999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139bd91906140e8565b90506139d46001600160a01b038516333086613b39565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015613a18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a3c91906140e8565b9050818111613aa25760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016103e8565b613aac82826143eb565b95945050505050565b613abd6131cc565b613215613b93565b6132156131cc565b613ad56131cc565b80355f8051602061462583398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0155613b1f60608301604084016145e4565b600291909101805460ff191660ff90921691909117905550565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610aa6908590613b9b565b6138c46131cc565b5f8060205f8451602086015f885af180613bba576040513d5f823e3d81fd5b50505f513d91508115613bd1578060011415613bde565b6001600160a01b0384163b155b15610aa657604051635274afe760e01b81526001600160a01b03851660048201526024016103e8565b508054613c1390613f52565b5f825580601f10613c22575050565b601f0160209004905f5260205f209081019061325a91905b80821115613c4d575f8155600101613c3a565b5090565b801515811461325a575f80fd5b803563ffffffff81168114613c71575f80fd5b919050565b5f805f60608486031215613c88575f80fd5b833592506020840135613c9a81613c51565b9150613ca860408501613c5e565b90509250925092565b5f60208284031215613cc1575f80fd5b5035919050565b6001600160a01b038116811461325a575f80fd5b5f8060408385031215613ced575f80fd5b613cf683613c5e565b91506020830135613d0681613cc8565b809150509250929050565b5f8060408385031215613d22575f80fd5b823591506020830135613d0681613cc8565b5f80828403610100811215613d47575f80fd5b60e0811215613d54575f80fd5b5082915060e0830135613d0681613cc8565b5f60208284031215613d76575f80fd5b613d7f82613c5e565b9392505050565b80356001600160401b0381168114613c71575f80fd5b5f60208284031215613dac575f80fd5b613d7f82613d86565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715613deb57613deb613db5565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613e1957613e19613db5565b604052919050565b5f6001600160401b03821115613e3957613e39613db5565b50601f01601f191660200190565b5f805f8060808587031215613e5a575f80fd5b8435935060208501359250613e7160408601613d86565b915060608501356001600160401b03811115613e8b575f80fd5b8501601f81018713613e9b575f80fd5b8035613eae613ea982613e21565b613df1565b818152886020838501011115613ec2575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f8060408385031215613ef4575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03828116828216039080821115613f4b57613f4b613f17565b5092915050565b600181811c90821680613f6657607f821691505b602082108103613f8457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561081357805f5260205f20601f840160051c81016020851015613faf5750805b601f840160051c820191505b81811015613fce575f8155600101613fbb565b5050505050565b81516001600160401b03811115613fee57613fee613db5565b61400281613ffc8454613f52565b84613f8a565b602080601f831160018114614035575f841561401e5750858301515b5f19600386901b1c1916600185901b17855561408c565b5f85815260208120601f198616915b8281101561406357888601518255948401946001909101908401614044565b508582101561408057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f5b838110156140ae578181015183820152602001614096565b50505f910152565b602081525f82518060208401526140d4816040850160208701614094565b601f01601f19169190910160400192915050565b5f602082840312156140f8575f80fd5b5051919050565b5f60208083525f845461411181613f52565b806020870152604060018084165f8114614132576001811461414e5761417b565b60ff19851660408a0152604084151560051b8a0101955061417b565b895f5260205f205f5b858110156141725781548b8201860152908301908801614157565b8a016040019650505b509398975050505050505050565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b60208082526030908201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72206e60408201526f1bdd081c195b991a5b99c8185919195960821b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f8261428657614286614264565b500490565b8082028115828204841417610bca57610bca613f17565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b8051613c7181613c51565b5f8060408385031215614305575f80fd5b82516001600160401b038082111561431b575f80fd5b908401906060828703121561432e575f80fd5b614336613dc9565b8251815260208084015161434981613cc8565b8282015260408401518381111561435e575f80fd5b80850194505087601f850112614372575f80fd5b83519250614382613ea984613e21565b8381528882858701011115614395575f80fd5b6143a484838301848801614094565b806040840152508195506143b98188016142e9565b9450505050509250929050565b5f6001600160401b038083168181036143e1576143e1613f17565b6001019392505050565b81810381811115610bca57610bca613f17565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610bca57610bca613f17565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b60208082526026908201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060408201526561637469766560d01b606082015260800190565b6001600160401b03818116838216019080821115613f4b57613f4b613f17565b5f6020828403121561456e575f80fd5b8135613d7f81613cc8565b6001600160401b0381811683821602808216919082811461459c5761459c613f17565b505092915050565b5f6001600160401b03808416806145bd576145bd614264565b92169190910492915050565b5f82516145da818460208701614094565b9190910192915050565b5f602082840312156145f4575f80fd5b813560ff81168114613d7f575f80fdfe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"maximumHourlyChurn\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"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\":\"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\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndDelegation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"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\":\"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: "0x608060405234801561000f575f80fd5b5060405161477838038061477883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b61462b8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c806366435abf1161009e5780639e1bc4ef1161006e5780639e1bc4ef1461021b578063a3a65e481461022e578063b771b3bc14610241578063bee0a03f14610267578063d61bed741461027a575f80fd5b806366435abf146101cf5780636a7e3d83146101e257806376f78621146101f5578063872fda6414610208575f80fd5b806327f39ca8116100d957806327f39ca8146101585780632e2194d81461016b578063467ef06f1461019b57806362065856146101ae575f80fd5b80630118acc41461010a5780630322ed981461011f5780630915204e146101325780630b77f69314610145575b5f80fd5b61011d610118366004613c10565b61028d565b005b61011d61012d366004613c4b565b6106b8565b61011d610140366004613c76565b610814565b61011d610153366004613cab565b6109e5565b61011d610166366004613cce565b610aad565b61017e610179366004613c4b565b610bbb565b6040516001600160401b0390911681526020015b60405180910390f35b61011d6101a9366004613d00565b610bd1565b6101c16101bc366004613d36565b610f2d565b604051908152602001610192565b61017e6101dd366004613c4b565b610f46565b61011d6101f0366004613cab565b610f5a565b61011d610203366004613c10565b610fdc565b6101c1610216366004613de1565b610ff7565b61011d610229366004613e7d565b61101c565b61011d61023c366004613d00565b61102b565b61024f6005600160991b0181565b6040516001600160a01b039091168152602001610192565b61011d610275366004613c4b565b6111df565b61011d610288366004613c76565b6112ae565b5f82156102a15761029e84836114b9565b90505b5f8481527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03602090815260408083203384528252808320815160c08101835281546001600160401b038082168352600160401b808304821696840196909652600160801b8204811694830194909452600160c01b900483166060820152600182015492831660808201525f8051602061459f8339815191529493909260a0840191900460ff16600481111561035857610358613e9d565b600481111561036957610369613e9d565b905250905060028160a00151600481111561038657610386613e9d565b146103e75760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2064656c656761746f72206e6f742060448201526561637469766560d01b60648201526084015b60405180910390fd5b5f6103f187611755565b9050600360a08301819052506001600160401b0342811660408085019190915290821660808401525f8881526003850160205290812083916104303390565b6001600160a01b0316815260208082019290925260409081015f2083518154938501519285015160608601516001600160401b039283166001600160801b031990961695909517600160401b9483168502176001600160801b0316600160801b918316919091026001600160c01b031617600160c01b94821694909402939093178155608084015160018201805467ffffffffffffffff19811692909516918217815560a086015192949293909268ffffffffffffffffff19169091179083600481111561050057610500613e9d565b02179055509050505f610512886117d0565b9050825f01516001600160401b031681608001516001600160401b0316116105885760405162461bcd60e51b815260206004820152602360248201527f506f5356616c696461746f724d616e616765723a20496e76616c69642077656960448201526219da1d60ea1b60648201526084016103de565b825160808201805161059b908390613ec5565b6001600160401b03169052506105b188826118cb565b5f6105c1898484608001516119ba565b5f8a8152600587016020908152604080832033845290915290209091506105e88282613f6f565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90610615908590600401614050565b6020604051808303815f875af1158015610631573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106559190614082565b6080840151604080516001600160401b0392831681529187166020830152428282015251919250339183918d917fadec5acd02ee9a5280893bb168456a89d9b0004eee87906795b290740f2e4bde9181900360600190a450505050505050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040812080545f805160206145bf83398151915292919061070090613eec565b9050118015610732575060035f83815260078301602052604090205460ff16600581111561073057610730613e9d565b145b6107965760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016103de565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916107cf9190600401614099565b6020604051808303815f875af11580156107eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080f9190614082565b505050565b5f8051602061459f8339815191525f61082c84611bd7565b90505f8061083d8360400151611db8565b509150915061084c8286611ff3565b5f82815260058501602090815260408083206001600160a01b0389168452909152812061087891613ba1565b5f610882836117d0565b9050816001600160401b031681606001516001600160401b031610156108ba5760405162461bcd60e51b81526004016103de90614123565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020600101546001600160401b038084169116111561090c5760405162461bcd60e51b81526004016103de90614165565b60035f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160401b900460ff16600481111561095057610950613e9d565b1461096d5760405162461bcd60e51b81526004016103de906141ae565b5f83815260038601602090815260408083206001600160a01b038a168085529252808320600101805460ff60401b191668040000000000000000179055516001600160401b0385169286917f4da588c356f0bfa46c394126d28890aaadfc4ed6c26a611d14275e13ad1057dd9190a450505050505050565b6109ef8282612106565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f8051602061459f833981519152916005600160991b019163ee5b48eb91610a6791600401614099565b6020604051808303815f875af1158015610a83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa79190614082565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610af15750825b90505f826001600160401b03166001148015610b0c5750303b155b905081158015610b1a575080155b15610b385760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b6257845460ff60401b1916600160401b1785555b610b6c8787612224565b8315610bb257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f610bcb64e8d4a5100083614212565b92915050565b5f805160206145bf8339815191525f610be983611bd7565b90505f80610bfa836040015161223e565b915091508015610c5f5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016103de565b5f828152600785016020526040808220815160e081019092528054829060ff166005811115610c9057610c90613e9d565b6005811115610ca157610ca1613e9d565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b90041660c0909101529091505f9082516005811115610d1a57610d1a613e9d565b1480610d385750600182516005811115610d3657610d36613e9d565b145b610d975760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016103de565b600382516005811115610dac57610dac613e9d565b03610dd357505f8381526006860160205260408120600491610dce9190613ba1565b610dd7565b5060055b6020808301515f90815260088801909152604081205581816005811115610e0057610e00613e9d565b90816005811115610e1357610e13613e9d565b9052505f84815260078701602052604090208251815484929190829060ff19166001836005811115610e4757610e47613e9d565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b929091169190910217905581516005811115610efa57610efa613e9d565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a350505050505050565b5f610bcb6001600160401b03831664e8d4a51000614225565b5f610f50826117d0565b6080015192915050565b610f648282611ff3565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f8051602061459f833981519152916005600160991b019163ee5b48eb91610a6791600401614099565b8115610fee57610fec83826114b9565b505b61080f836123df565b5f8061100286612731565b9050611010858286866127de565b9150505b949350505050565b611027823383612c12565b5050565b5f805160206145bf8339815191525f61104383611bd7565b90505f80611054836040015161223e565b91509150806110b65760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016103de565b5f828152600585016020526040812080546110d090613eec565b9050118015611102575060015f83815260078601602052604090205460ff16600581111561110057611100613e9d565b145b61111e5760405162461bcd60e51b81526004016103de9061423c565b5f828152600585016020526040812061113691613ba1565b5f8281526007850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092178355600190930154875260088b0185528387208990559588905293835292548151931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb056020526040812080545f805160206145bf83398151915292919061122790613eec565b9050118015611259575060015f83815260078301602052604090205460ff16600581111561125757611257613e9d565b145b6112755760405162461bcd60e51b81526004016103de9061423c565b5f82815260058201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916107cf9190600401614099565b5f8051602061459f8339815191525f6112c684611bd7565b90505f806112d78360400151611db8565b50915091506112e68286612106565b5f82815260048501602090815260408083206001600160a01b0389168452909152812061131291613ba1565b5f61131c836117d0565b9050816001600160401b031681606001516001600160401b031610156113545760405162461bcd60e51b81526004016103de90614123565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020546001600160401b03808416600160c01b9092041611156113aa5760405162461bcd60e51b81526004016103de90614165565b60015f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160401b900460ff1660048111156113ee576113ee613e9d565b1461140b5760405162461bcd60e51b81526004016103de906141ae565b5f83815260038601602090815260408083206001600160a01b038a168085529083529281902060018101805460ff60401b191668020000000000000000179055805467ffffffffffffffff60401b1916600160401b426001600160401b03818116929092029290921790925582519081529151908616939287927fd63c8a1fc829b22698176813c742597f94f9278dde21a64f7a8192e905f932b6929081900390910190a450505050505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015611504573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261152b919081019061428e565b915091508061158e5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016103de565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f59190614082565b8251146116595760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016103de565b60208201516001600160a01b0316156116cf5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016103de565b5f806116de8460400151612f8e565b9150915081871461174b5760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016103de565b9695505050505050565b5f8181525f805160206145ff8339815191526020526040812060020180545f805160206145bf83398151915291600160a01b9091046001600160401b031690819060146117a183614360565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508092505050919050565b6040805160e080820183525f8083526020808401829052838501829052606084018290526080840182905260a0840182905260c084018290528582525f805160206145ff83398151915290528390208351918201909352825491925f805160206145bf83398151915292829060ff16600581111561185057611850613e9d565b600581111561186157611861613e9d565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b900490911660c0909101529392505050565b5f8281525f805160206145ff83398151915260205260409020815181545f805160206145bf8339815191529284929091829060ff1916600183600581111561191557611915613e9d565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055505050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611a33576119f3816001614385565b6119fe906008614225565b5081515f90839083908110611a1557611a15614398565b60200101906001600160f81b03191690815f1a9053506001016119df565b505f5b6004811015611a9657611a4a816003614385565b611a55906008614225565b6001901c60f81b82611a688360026143ac565b81518110611a7857611a78614398565b60200101906001600160f81b03191690815f1a905350600101611a36565b505f5b6020811015611af857611aad81601f614385565b611ab8906008614225565b86901c60f81b82611aca8360066143ac565b81518110611ada57611ada614398565b60200101906001600160f81b03191690815f1a905350600101611a99565b505f5b6008811015611b6357611b0f816007614385565b611b1a906008614225565b6001600160401b038616901c60f81b82611b358360266143ac565b81518110611b4557611b45614398565b60200101906001600160f81b03191690815f1a905350600101611afb565b505f5b6008811015611bce57611b7a816007614385565b611b85906008614225565b6001600160401b038516901c60f81b82611ba083602e6143ac565b81518110611bb057611bb0614398565b60200101906001600160f81b03191690815f1a905350600101611b66565b50949350505050565b60408051606080820183525f8083526020830181905292820152905f805160206145bf8339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611c4c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c73919081019061428e565b9150915080611cda5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016103de565b8254825114611d3d5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016103de565b60208201516001600160a01b031615611db05760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016103de565b509392505050565b5f805f8351603614611ddc5760405162461bcd60e51b81526004016103de906143bf565b5f805b6002811015611e2b57611df3816001614385565b611dfe906008614225565b61ffff16868281518110611e1457611e14614398565b016020015160f81c901b9190911790600101611ddf565b5061ffff811615611e4e5760405162461bcd60e51b81526004016103de90614408565b5f805b6004811015611ea957611e65816003614385565b611e70906008614225565b63ffffffff1687611e828360026143ac565b81518110611e9257611e92614398565b016020015160f81c901b9190911790600101611e51565b5063ffffffff8116600314611ed05760405162461bcd60e51b81526004016103de9061444b565b5f805b6020811015611f2557611ee781601f614385565b611ef2906008614225565b88611efe8360066143ac565b81518110611f0e57611f0e614398565b016020015160f81c901b9190911790600101611ed3565b505f805b6008811015611f8457611f3d816007614385565b611f48906008614225565b6001600160401b031689611f5d8360266143ac565b81518110611f6d57611f6d614398565b016020015160f81c901b9190911790600101611f29565b505f805b6008811015611fe357611f9c816007614385565b611fa7906008614225565b6001600160401b03168a611fbc83602e6143ac565b81518110611fcc57611fcc614398565b016020015160f81c901b9190911790600101611f88565b5091989097509095509350505050565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b0385168452909152812080545f8051602061459f83398151915292919061204f90613eec565b905011801561209f575060035f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160401b900460ff16600481111561209d5761209d613e9d565b145b61080f5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f722072604482015271656d6f76616c206e6f742070656e64696e6760701b60648201526084016103de565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b0385168452909152812080545f8051602061459f83398151915292919061216290613eec565b90501180156121b2575060015f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160401b900460ff1660048111156121b0576121b0613e9d565b145b61080f5760405162461bcd60e51b815260206004820152603760248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72207260448201527f6567697374726174696f6e206e6f742070656e64696e6700000000000000000060648201526084016103de565b61222c613166565b612235826131b1565b611027816131f7565b5f8082516027146122615760405162461bcd60e51b81526004016103de906143bf565b5f805b60028110156122b057612278816001614385565b612283906008614225565b61ffff1685828151811061229957612299614398565b016020015160f81c901b9190911790600101612264565b5061ffff8116156122d35760405162461bcd60e51b81526004016103de90614408565b5f805b600481101561232e576122ea816003614385565b6122f5906008614225565b63ffffffff16866123078360026143ac565b8151811061231757612317614398565b016020015160f81c901b91909117906001016122d6565b5063ffffffff81166002146123555760405162461bcd60e51b81526004016103de9061444b565b5f805b60208110156123aa5761236c81601f614385565b612377906008614225565b876123838360066143ac565b8151811061239357612393614398565b016020015160f81c901b9190911790600101612358565b505f866026815181106123bf576123bf614398565b016020015191976001600160f81b03199092161515965090945050505050565b5f8181525f805160206145ff8339815191526020526040808220815160e0810190925280545f805160206145bf83398151915293929190829060ff16600581111561242c5761242c613e9d565b600581111561243d5761243d613e9d565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b900490921660c090910152909150815160058111156124b7576124b7613e9d565b146124d45760405162461bcd60e51b81526004016103de90614492565b60408101516001600160a01b0316336001600160a01b03161461254e5760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016103de565b61255b81608001516132ab565b60038152426001600160401b031660c08201525f83815260078301602052604090208151815483929190829060ff1916600183600581111561259f5761259f613e9d565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b92909116919091021790555f6126538461264d81611755565b5f6119ba565b5f858152600685016020526040902090915061266f8282613f6f565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061269c908590600401614050565b6020604051808303815f875af11580156126b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126dc9190614082565b6080840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b5f5f8051602061459f8339815191528161274a8461344c565b90505f61275682610bbb565b83549091506001600160401b0382161080159061278057508260010154816001600160401b031611155b6110145760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207374616044820152681ad948185b5bdd5b9d60ba1b60648201526084016103de565b5f6127e7613482565b5f805160206145bf833981519152426001600160401b03851611801561282157506001600160401b03841661281f426202a3006143ac565b115b6128835760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c69642072656769737460448201526c726174696f6e2065787069727960981b60648201526084016103de565b856128da5760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016103de565b5f868152600882016020526040902054156129485760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016103de565b82516030146129af5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016103de565b6129b8856132ab565b5f806129ff6040518060a00160405280856001015481526020018a8152602001896001600160401b03168152602001886001600160401b03168152602001878152506134b9565b5f82815260058601602052604090209193509150612a1d8282613f6f565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612a4a908590600401614050565b6020604051808303815f875af1158015612a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a8a9190614082565b6040805160e08101825260018152602081018c90529192508101336001600160a01b031681525f60208083018290526001600160401b038c166040808501919091526060840183905260809093018290528682526007880190522081518154829060ff19166001836005811115612b0357612b03613e9d565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055612bac83611755565b50604080516001600160401b03808b1682528916602082015282918b9186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e910160405180910390a450909250505061101460015f805160206145df83398151915255565b612c1a613482565b5f612c276101798361344c565b90505f8051602061459f8339815191525f612c41866117d0565b9050600281516005811115612c5857612c58613e9d565b14612c755760405162461bcd60e51b81526004016103de90614492565b5f86815260038301602090815260408083206001600160a01b03891684529091529020546001600160401b031615612d065760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f724d616e616765723a2064656c656761746f7220616c726560448201526d18591e481c9959da5cdd195c995960921b60648201526084016103de565b612d0f836132ab565b8281608001818151612d2191906144d8565b6001600160401b0316905250612d3786826118cb565b5f612d4187611755565b90505f612d53888385608001516119ba565b5f89815260048601602090815260408083206001600160a01b038c1684529091529020909150612d838282613f6f565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612db0908590600401614050565b6020604051808303815f875af1158015612dcc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612df09190614082565b6040805160c0810182526001600160401b03808a1682525f6020830181905292820183905286166060820152608081019190915290915060a08101600190525f8a815260038701602090815260408083206001600160a01b038d16845282529182902083518154928501519385015160608601516001600160401b039283166001600160801b031990951694909417600160401b9583168602176001600160801b0316600160801b918316919091026001600160c01b031617600160c01b93821693909302929092178155608084015160018201805467ffffffffffffffff19811692909416918217815560a086015192949293909268ffffffffffffffffff1990911690911790836004811115612f0a57612f0a613e9d565b021790555050506080840151604080516001600160401b03808a1682529283166020820152918516908201526001600160a01b0389169082908b907feea0c6dd7e326ed588ce418df1563a24af963b7a54714ba659fab8152435795b9060600160405180910390a450505050505061080f60015f805160206145df83398151915255565b5f808251602e14612fb15760405162461bcd60e51b81526004016103de906143bf565b5f805b600281101561300057612fc8816001614385565b612fd3906008614225565b61ffff16858281518110612fe957612fe9614398565b016020015160f81c901b9190911790600101612fb4565b5061ffff8116156130235760405162461bcd60e51b81526004016103de90614408565b5f805b600481101561307e5761303a816003614385565b613045906008614225565b63ffffffff16866130578360026143ac565b8151811061306757613067614398565b016020015160f81c901b9190911790600101613026565b5063ffffffff81166004146130a55760405162461bcd60e51b81526004016103de9061444b565b5f805b60208110156130fa576130bc81601f614385565b6130c7906008614225565b876130d38360066143ac565b815181106130e3576130e3614398565b016020015160f81c901b91909117906001016130a8565b505f805b600881101561315957613112816007614385565b61311d906008614225565b6001600160401b0316886131328360266143ac565b8151811061314257613142614398565b016020015160f81c901b91909117906001016130fe565b5090969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166131af57604051631afcd79f60e31b815260040160405180910390fd5b565b6131b9613166565b6131c281613871565b6131f4606082013560808301356131df60c0850160a08601613d36565b6131ef60e0860160c087016144f8565b613892565b50565b6131ff613166565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab006001600160a01b03821661328b5760405162461bcd60e51b815260206004820152602c60248201527f4552433230546f6b656e5374616b696e674d616e616765723a207a65726f207460448201526b6f6b656e206164647265737360a01b60648201526084016103de565b80546001600160a01b0319166001600160a01b0392909216919091179055565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb02545f805160206145bf8339815191529060ff165f036132e9575050565b60408051606081018252600383015480825260048401546001600160401b038082166020850152600160401b9091041692820192909252904290610e10906133319083614385565b1061334d576001600160401b038416604083015280825261336c565b838260400181815161335f91906144d8565b6001600160401b03169052505b5f8260200151836040015160646133839190614513565b61338d919061453e565b600285015490915060ff90811690821611156134085760405162461bcd60e51b815260206004820152603460248201527f56616c696461746f724d616e616765723a206d6178696d756d20686f75726c796044820152730818da1d5c9b881c985d1948195e18d95959195960621b60648201526084016103de565b5050805160038301556020810151600490920180546040909201516001600160401b03908116600160401b026001600160801b031990931693169290921717905550565b5f610bcb827f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546001600160a01b0316906138ed565b5f805160206145df8339815191528054600119016134b357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f60608260800151516030146135235760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016103de565b60408051608680825260c082019092525f916020820181803683370190505090505f5b600281101561359a5761355a816001614385565b613565906008614225565b5081515f9083908390811061357c5761357c614398565b60200101906001600160f81b03191690815f1a905350600101613546565b505f5b60048110156135f8576135b1816003614385565b6135bc906008614225565b505f826135ca8360026143ac565b815181106135da576135da614398565b60200101906001600160f81b03191690815f1a90535060010161359d565b505f5b6020811015613655578451816020811061361757613617614398565b1a60f81b826136278360066143ac565b8151811061363757613637614398565b60200101906001600160f81b03191690815f1a9053506001016135fb565b505f5b60208110156136b5578460200151816020811061367757613677614398565b1a60f81b826136878360266143ac565b8151811061369757613697614398565b60200101906001600160f81b03191690815f1a905350600101613658565b505f5b6008811015613729576136cc816007614385565b6136d7906008614225565b60ff1685604001516001600160401b0316901c60f81b828260466136fb91906143ac565b8151811061370b5761370b614398565b60200101906001600160f81b03191690815f1a9053506001016136b8565b505f5b6030811015613794578460800151818151811061374b5761374b614398565b01602001516001600160f81b0319168261376683604e6143ac565b8151811061377657613776614398565b60200101906001600160f81b03191690815f1a90535060010161372c565b505f5b6008811015613806576137ab816007614385565b6137b6906008614225565b60608601516001600160401b0390811691161c60f81b826137d883607e6143ac565b815181106137e8576137e8614398565b60200101906001600160f81b03191690815f1a905350600101613797565b506002816040516138179190614563565b602060405180830381855afa158015613832573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906138559190614082565b94909350915050565b60015f805160206145df83398151915255565b613879613166565b613881613a4f565b613889613a5f565b6131f481613a67565b61389a613166565b5f5f8051602061459f833981519152948555506001840192909255600290920180546001600160a01b03909216600160401b026001600160e01b03199092166001600160401b0390931692909217179055565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015613933573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139579190614082565b905061396e6001600160a01b038516333086613ad3565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa1580156139b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139d69190614082565b9050818111613a3c5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016103de565b613a468282614385565b95945050505050565b613a57613166565b6131af613b2d565b6131af613166565b613a6f613166565b80355f805160206145bf83398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0155613ab9606083016040840161457e565b600291909101805460ff191660ff90921691909117905550565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610aa7908590613b35565b61385e613166565b5f8060205f8451602086015f885af180613b54576040513d5f823e3d81fd5b50505f513d91508115613b6b578060011415613b78565b6001600160a01b0384163b155b15610aa757604051635274afe760e01b81526001600160a01b03851660048201526024016103de565b508054613bad90613eec565b5f825580601f10613bbc575050565b601f0160209004905f5260205f20908101906131f491905b80821115613be7575f8155600101613bd4565b5090565b80151581146131f4575f80fd5b803563ffffffff81168114613c0b575f80fd5b919050565b5f805f60608486031215613c22575f80fd5b833592506020840135613c3481613beb565b9150613c4260408501613bf8565b90509250925092565b5f60208284031215613c5b575f80fd5b5035919050565b6001600160a01b03811681146131f4575f80fd5b5f8060408385031215613c87575f80fd5b613c9083613bf8565b91506020830135613ca081613c62565b809150509250929050565b5f8060408385031215613cbc575f80fd5b823591506020830135613ca081613c62565b5f80828403610100811215613ce1575f80fd5b60e0811215613cee575f80fd5b5082915060e0830135613ca081613c62565b5f60208284031215613d10575f80fd5b613d1982613bf8565b9392505050565b80356001600160401b0381168114613c0b575f80fd5b5f60208284031215613d46575f80fd5b613d1982613d20565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715613d8557613d85613d4f565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613db357613db3613d4f565b604052919050565b5f6001600160401b03821115613dd357613dd3613d4f565b50601f01601f191660200190565b5f805f8060808587031215613df4575f80fd5b8435935060208501359250613e0b60408601613d20565b915060608501356001600160401b03811115613e25575f80fd5b8501601f81018713613e35575f80fd5b8035613e48613e4382613dbb565b613d8b565b818152886020838501011115613e5c575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f8060408385031215613e8e575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03828116828216039080821115613ee557613ee5613eb1565b5092915050565b600181811c90821680613f0057607f821691505b602082108103613f1e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561080f57805f5260205f20601f840160051c81016020851015613f495750805b601f840160051c820191505b81811015613f68575f8155600101613f55565b5050505050565b81516001600160401b03811115613f8857613f88613d4f565b613f9c81613f968454613eec565b84613f24565b602080601f831160018114613fcf575f8415613fb85750858301515b5f19600386901b1c1916600185901b178555614026565b5f85815260208120601f198616915b82811015613ffd57888601518255948401946001909101908401613fde565b508582101561401a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f5b83811015614048578181015183820152602001614030565b50505f910152565b602081525f825180602084015261406e81604085016020870161402e565b601f01601f19169190910160400192915050565b5f60208284031215614092575f80fd5b5051919050565b5f60208083525f84546140ab81613eec565b806020870152604060018084165f81146140cc57600181146140e857614115565b60ff19851660408a0152604084151560051b8a01019550614115565b895f5260205f205f5b8581101561410c5781548b82018601529083019088016140f1565b8a016040019650505b509398975050505050505050565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b60208082526030908201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72206e60408201526f1bdd081c195b991a5b99c8185919195960821b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f82614220576142206141fe565b500490565b8082028115828204841417610bcb57610bcb613eb1565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b8051613c0b81613beb565b5f806040838503121561429f575f80fd5b82516001600160401b03808211156142b5575f80fd5b90840190606082870312156142c8575f80fd5b6142d0613d63565b825181526020808401516142e381613c62565b828201526040840151838111156142f8575f80fd5b80850194505087601f85011261430c575f80fd5b8351925061431c613e4384613dbb565b838152888285870101111561432f575f80fd5b61433e8483830184880161402e565b80604084015250819550614353818801614283565b9450505050509250929050565b5f6001600160401b0380831681810361437b5761437b613eb1565b6001019392505050565b81810381811115610bcb57610bcb613eb1565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610bcb57610bcb613eb1565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b60208082526026908201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060408201526561637469766560d01b606082015260800190565b6001600160401b03818116838216019080821115613ee557613ee5613eb1565b5f60208284031215614508575f80fd5b8135613d1981613c62565b6001600160401b0381811683821602808216919082811461453657614536613eb1565b505092915050565b5f6001600160401b0380841680614557576145576141fe565b92169190910492915050565b5f825161457481846020870161402e565b9190910192915050565b5f6020828403121561458e575f80fd5b813560ff81168114613d19575f80fdfe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -1867,151 +1867,6 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidati return event, nil } -// ERC20TokenStakingManagerValidationUptimeUpdatedIterator is returned from FilterValidationUptimeUpdated and is used to iterate over the raw logs and unpacked data for ValidationUptimeUpdated events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationUptimeUpdatedIterator struct { - Event *ERC20TokenStakingManagerValidationUptimeUpdated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ERC20TokenStakingManagerValidationUptimeUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationUptimeUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationUptimeUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerValidationUptimeUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ERC20TokenStakingManagerValidationUptimeUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ERC20TokenStakingManagerValidationUptimeUpdated represents a ValidationUptimeUpdated event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationUptimeUpdated struct { - ValidationID [32]byte - Uptime uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationUptimeUpdated is a free log retrieval operation binding the contract event 0xdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c. -// -// Solidity: event ValidationUptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidationUptimeUpdated(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerValidationUptimeUpdatedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidationUptimeUpdated", validationIDRule) - if err != nil { - return nil, err - } - return &ERC20TokenStakingManagerValidationUptimeUpdatedIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidationUptimeUpdated", logs: logs, sub: sub}, nil -} - -// WatchValidationUptimeUpdated is a free log subscription operation binding the contract event 0xdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c. -// -// Solidity: event ValidationUptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidationUptimeUpdated(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidationUptimeUpdated, validationID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "ValidationUptimeUpdated", validationIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerValidationUptimeUpdated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationUptimeUpdated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidationUptimeUpdated is a log parse operation binding the contract event 0xdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c. -// -// Solidity: event ValidationUptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidationUptimeUpdated(log types.Log) (*ERC20TokenStakingManagerValidationUptimeUpdated, error) { - event := new(ERC20TokenStakingManagerValidationUptimeUpdated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationUptimeUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // ERC20TokenStakingManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the ERC20TokenStakingManager contract. type ERC20TokenStakingManagerValidatorRemovalInitializedIterator struct { Event *ERC20TokenStakingManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log diff --git a/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go index 3c3d99979..db6295045 100644 --- a/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -47,8 +47,8 @@ type ValidatorManagerSettings 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\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"maximumHourlyChurn\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"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\":\"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\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resendDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndDelegation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"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\":\"ValidationUptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"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\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161450b38038061450b83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6143be8061014d5f395ff3fe6080604052600436106100f9575f3560e01c806366435abf11610092578063b771b3bc11610062578063b771b3bc1461029e578063bee0a03f146102d0578063c599e24f146102ef578063d61bed7414610302578063f40797d714610321575f80fd5b806366435abf146102225780636a7e3d831461024157806376f7862114610260578063a3a65e481461027f575f80fd5b80630b77f693116100cd5780630b77f6931461017b5780632e2194d81461019a578063467ef06f146101d657806362065856146101f5575f80fd5b8062e41792146100fd5780630118acc41461011e5780630322ed981461013d5780630915204e1461015c575b5f80fd5b348015610108575f80fd5b5061011c6101173660046139ce565b610334565b005b348015610129575f80fd5b5061011c610138366004613a09565b610440565b348015610148575f80fd5b5061011c610157366004613a44565b61086f565b348015610167575f80fd5b5061011c610176366004613a6f565b6109cb565b348015610186575f80fd5b5061011c610195366004613aa4565b610b97565b3480156101a5575f80fd5b506101b96101b4366004613a44565b610c5f565b6040516001600160401b0390911681526020015b60405180910390f35b3480156101e1575f80fd5b5061011c6101f0366004613ac7565b610c75565b348015610200575f80fd5b5061021461020f366004613afd565b610fd1565b6040519081526020016101cd565b34801561022d575f80fd5b506101b961023c366004613a44565b610fea565b34801561024c575f80fd5b5061011c61025b366004613aa4565b610ffe565b34801561026b575f80fd5b5061011c61027a366004613a09565b611080565b34801561028a575f80fd5b5061011c610299366004613ac7565b61109b565b3480156102a9575f80fd5b506102b86005600160991b0181565b6040516001600160a01b0390911681526020016101cd565b3480156102db575f80fd5b5061011c6102ea366004613a44565b61124f565b61011c6102fd366004613a44565b61131e565b34801561030d575f80fd5b5061011c61031c366004613a6f565b61132c565b61021461032f366004613ba8565b611532565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156103785750825b90505f826001600160401b031660011480156103935750303b155b9050811580156103a1575080155b156103bf5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156103e957845460ff60401b1916600160401b1785555b6103f286611554565b831561043857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f8215610454576104518483611565565b90505b5f8481527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03602090815260408083203384528252808320815160e08101835281546001600160401b038082168352600160401b808304821696840196909652600160801b808304821695840195909552600160c01b90910481166060830152600183015480821660808401529485041660a08201525f805160206143328339815191529493909260c08401910460ff16600481111561051557610515613c3a565b600481111561052657610526613c3a565b905250905060028160c00151600481111561054357610543613c3a565b146105a45760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2064656c656761746f72206e6f742060448201526561637469766560d01b60648201526084015b60405180910390fd5b5f6105ae87611875565b9050600360c08301819052506001600160401b03428116604080850191909152828216608085015290851660a08401525f8881526003850160205290812083916105f53390565b6001600160a01b0316815260208082019290925260409081015f2083518154938501519285015160608601516001600160401b039283166001600160801b031996871617600160401b9584168602176001600160801b0316600160801b92841683026001600160c01b031617600160c01b91841691909102178355608086015160018401805460a089015192851697169690961792169093021780845560c08501519193919260ff60801b19909116908360048111156106b7576106b7613c3a565b02179055509050505f6106c9886118f0565b9050825f01516001600160401b031681608001516001600160401b03161161073f5760405162461bcd60e51b815260206004820152602360248201527f506f5356616c696461746f724d616e616765723a20496e76616c69642077656960448201526219da1d60ea1b606482015260840161059b565b8251608082018051610752908390613c62565b6001600160401b031690525061076888826119eb565b5f61077889848460800151611ada565b5f8a81526005870160209081526040808320338452909152902090915061079f8282613d06565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906107cc908590600401613de3565b6020604051808303815f875af11580156107e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080c9190613e15565b6080840151604080516001600160401b0392831681529187166020830152428282015251919250339183918d917fadec5acd02ee9a5280893bb168456a89d9b0004eee87906795b290740f2e4bde9181900360600190a450505050505050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040812080545f805160206143528339815191529291906108b790613c89565b90501180156108e9575060035f83815260078301602052604090205460ff1660058111156108e7576108e7613c3a565b145b61094d5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b606482015260840161059b565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916109869190600401613e2c565b6020604051808303815f875af11580156109a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c69190613e15565b505050565b5f805160206143328339815191525f6109e384611cf7565b90505f806109f48360400151611ed8565b5091509150610a038286612113565b5f82815260058501602090815260408083206001600160a01b03891684529091528120610a2f91613984565b5f610a39836118f0565b9050816001600160401b031681606001516001600160401b03161015610a715760405162461bcd60e51b815260040161059b90613eb6565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020600101546001600160401b0380841691161115610ac35760405162461bcd60e51b815260040161059b90613ef8565b60035f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160801b900460ff166004811115610b0757610b07613c3a565b14610b245760405162461bcd60e51b815260040161059b90613f41565b5f83815260038601602090815260408083206001600160a01b038a168085529252808320600101805460ff60801b1916600160821b179055516001600160401b0385169286917f4da588c356f0bfa46c394126d28890aaadfc4ed6c26a611d14275e13ad1057dd9190a450505050505050565b610ba18282612226565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f80516020614332833981519152916005600160991b019163ee5b48eb91610c1991600401613e2c565b6020604051808303815f875af1158015610c35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c599190613e15565b50505050565b5f610c6f64e8d4a5100083613fa5565b92915050565b5f805160206143528339815191525f610c8d83611cf7565b90505f80610c9e8360400151612344565b915091508015610d035760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b606482015260840161059b565b5f828152600785016020526040808220815160e081019092528054829060ff166005811115610d3457610d34613c3a565b6005811115610d4557610d45613c3a565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b90041660c0909101529091505f9082516005811115610dbe57610dbe613c3a565b1480610ddc5750600182516005811115610dda57610dda613c3a565b145b610e3b5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b606482015260840161059b565b600382516005811115610e5057610e50613c3a565b03610e7757505f8381526006860160205260408120600491610e729190613984565b610e7b565b5060055b6020808301515f90815260088801909152604081205581816005811115610ea457610ea4613c3a565b90816005811115610eb757610eb7613c3a565b9052505f84815260078701602052604090208251815484929190829060ff19166001836005811115610eeb57610eeb613c3a565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b929091169190910217905581516005811115610f9e57610f9e613c3a565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a350505050505050565b5f610c6f6001600160401b03831664e8d4a51000613fb8565b5f610ff4826118f0565b6080015192915050565b6110088282612113565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f80516020614332833981519152916005600160991b019163ee5b48eb91610c1991600401613e2c565b8115611092576110908382611565565b505b6109c6836124e5565b5f805160206143528339815191525f6110b383611cf7565b90505f806110c48360400151612344565b91509150806111265760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b606482015260840161059b565b5f8281526005850160205260408120805461114090613c89565b9050118015611172575060015f83815260078601602052604090205460ff16600581111561117057611170613c3a565b145b61118e5760405162461bcd60e51b815260040161059b90613fcf565b5f82815260058501602052604081206111a691613984565b5f8281526007850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092178355600190930154875260088b0185528387208990559588905293835292548151931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb056020526040812080545f8051602061435283398151915292919061129790613c89565b90501180156112c9575060015f83815260078301602052604090205460ff1660058111156112c7576112c7613c3a565b145b6112e55760405162461bcd60e51b815260040161059b90613fcf565b5f82815260058201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916109869190600401613e2c565b611329813334612837565b50565b5f805160206143328339815191525f61134484611cf7565b90505f806113558360400151611ed8565b50915091506113648286612226565b5f82815260048501602090815260408083206001600160a01b0389168452909152812061139091613984565b5f61139a836118f0565b9050816001600160401b031681606001516001600160401b031610156113d25760405162461bcd60e51b815260040161059b90613eb6565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020546001600160401b03808416600160c01b9092041611156114285760405162461bcd60e51b815260040161059b90613ef8565b60015f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160801b900460ff16600481111561146c5761146c613c3a565b146114895760405162461bcd60e51b815260040161059b90613f41565b5f83815260038601602090815260408083206001600160a01b038a168085529083529281902060018101805460ff60801b1916600160811b179055805467ffffffffffffffff60401b1916600160401b426001600160401b03818116929092029290921790925582519081529151908616939287927fd63c8a1fc829b22698176813c742597f94f9278dde21a64f7a8192e905f932b6929081900390910190a450505050505050565b5f8061153d34612ba8565b905061154b85828686612c52565b95945050505050565b61155c613086565b611329816130d1565b5f805f805160206143328339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156115c1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115e89190810190614021565b915091508061164b5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b606482015260840161059b565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561168e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b29190613e15565b8251146117165760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b606482015260840161059b565b60208201516001600160a01b03161561178c5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b606482015260840161059b565b5f8061179b8460400151613114565b915091508188146118085760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b606482015260840161059b565b5f888152600686016020908152604091829020805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c910160405180910390a2979650505050505050565b5f8181525f805160206143928339815191526020526040812060020180545f8051602061435283398151915291600160a01b9091046001600160401b031690819060146118c1836140f3565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508092505050919050565b6040805160e080820183525f8083526020808401829052838501829052606084018290526080840182905260a0840182905260c084018290528582525f8051602061439283398151915290528390208351918201909352825491925f8051602061435283398151915292829060ff16600581111561197057611970613c3a565b600581111561198157611981613c3a565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b900490911660c0909101529392505050565b5f8281525f8051602061439283398151915260205260409020815181545f805160206143528339815191529284929091829060ff19166001836005811115611a3557611a35613c3a565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055505050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611b5357611b13816001614118565b611b1e906008613fb8565b5081515f90839083908110611b3557611b3561412b565b60200101906001600160f81b03191690815f1a905350600101611aff565b505f5b6004811015611bb657611b6a816003614118565b611b75906008613fb8565b6001901c60f81b82611b8883600261413f565b81518110611b9857611b9861412b565b60200101906001600160f81b03191690815f1a905350600101611b56565b505f5b6020811015611c1857611bcd81601f614118565b611bd8906008613fb8565b86901c60f81b82611bea83600661413f565b81518110611bfa57611bfa61412b565b60200101906001600160f81b03191690815f1a905350600101611bb9565b505f5b6008811015611c8357611c2f816007614118565b611c3a906008613fb8565b6001600160401b038616901c60f81b82611c5583602661413f565b81518110611c6557611c6561412b565b60200101906001600160f81b03191690815f1a905350600101611c1b565b505f5b6008811015611cee57611c9a816007614118565b611ca5906008613fb8565b6001600160401b038516901c60f81b82611cc083602e61413f565b81518110611cd057611cd061412b565b60200101906001600160f81b03191690815f1a905350600101611c86565b50949350505050565b60408051606080820183525f8083526020830181905292820152905f805160206143528339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611d6c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d939190810190614021565b9150915080611dfa5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b606482015260840161059b565b8254825114611e5d5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b606482015260840161059b565b60208201516001600160a01b031615611ed05760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b606482015260840161059b565b509392505050565b5f805f8351603614611efc5760405162461bcd60e51b815260040161059b90614152565b5f805b6002811015611f4b57611f13816001614118565b611f1e906008613fb8565b61ffff16868281518110611f3457611f3461412b565b016020015160f81c901b9190911790600101611eff565b5061ffff811615611f6e5760405162461bcd60e51b815260040161059b9061419b565b5f805b6004811015611fc957611f85816003614118565b611f90906008613fb8565b63ffffffff1687611fa283600261413f565b81518110611fb257611fb261412b565b016020015160f81c901b9190911790600101611f71565b5063ffffffff8116600314611ff05760405162461bcd60e51b815260040161059b906141de565b5f805b60208110156120455761200781601f614118565b612012906008613fb8565b8861201e83600661413f565b8151811061202e5761202e61412b565b016020015160f81c901b9190911790600101611ff3565b505f805b60088110156120a45761205d816007614118565b612068906008613fb8565b6001600160401b03168961207d83602661413f565b8151811061208d5761208d61412b565b016020015160f81c901b9190911790600101612049565b505f805b6008811015612103576120bc816007614118565b6120c7906008613fb8565b6001600160401b03168a6120dc83602e61413f565b815181106120ec576120ec61412b565b016020015160f81c901b91909117906001016120a8565b5091989097509095509350505050565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b0385168452909152812080545f8051602061433283398151915292919061216f90613c89565b90501180156121bf575060035f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160801b900460ff1660048111156121bd576121bd613c3a565b145b6109c65760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f722072604482015271656d6f76616c206e6f742070656e64696e6760701b606482015260840161059b565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b0385168452909152812080545f8051602061433283398151915292919061228290613c89565b90501180156122d2575060015f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160801b900460ff1660048111156122d0576122d0613c3a565b145b6109c65760405162461bcd60e51b815260206004820152603760248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72207260448201527f6567697374726174696f6e206e6f742070656e64696e67000000000000000000606482015260840161059b565b5f8082516027146123675760405162461bcd60e51b815260040161059b90614152565b5f805b60028110156123b65761237e816001614118565b612389906008613fb8565b61ffff1685828151811061239f5761239f61412b565b016020015160f81c901b919091179060010161236a565b5061ffff8116156123d95760405162461bcd60e51b815260040161059b9061419b565b5f805b6004811015612434576123f0816003614118565b6123fb906008613fb8565b63ffffffff168661240d83600261413f565b8151811061241d5761241d61412b565b016020015160f81c901b91909117906001016123dc565b5063ffffffff811660021461245b5760405162461bcd60e51b815260040161059b906141de565b5f805b60208110156124b05761247281601f614118565b61247d906008613fb8565b8761248983600661413f565b815181106124995761249961412b565b016020015160f81c901b919091179060010161245e565b505f866026815181106124c5576124c561412b565b016020015191976001600160f81b03199092161515965090945050505050565b5f8181525f805160206143928339815191526020526040808220815160e0810190925280545f8051602061435283398151915293929190829060ff16600581111561253257612532613c3a565b600581111561254357612543613c3a565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b900490921660c090910152909150815160058111156125bd576125bd613c3a565b146125da5760405162461bcd60e51b815260040161059b90614225565b60408101516001600160a01b0316336001600160a01b0316146126545760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b606482015260840161059b565b61266181608001516132ec565b60038152426001600160401b031660c08201525f83815260078301602052604090208151815483929190829060ff191660018360058111156126a5576126a5613c3a565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b92909116919091021790555f6127598461275381611875565b5f611ada565b5f85815260068501602052604090209091506127758282613d06565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906127a2908590600401613de3565b6020604051808303815f875af11580156127be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e29190613e15565b6080840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b61283f61348d565b5f61284982610c5f565b90505f805160206143328339815191525f612863866118f0565b905060028151600581111561287a5761287a613c3a565b146128975760405162461bcd60e51b815260040161059b90614225565b5f86815260038301602090815260408083206001600160a01b03891684529091529020546001600160401b0316156129285760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f724d616e616765723a2064656c656761746f7220616c726560448201526d18591e481c9959da5cdd195c995960921b606482015260840161059b565b612931836132ec565b8281608001818151612943919061426b565b6001600160401b031690525061295986826119eb565b5f61296387611875565b90505f61297588838560800151611ada565b5f89815260048601602090815260408083206001600160a01b038c16845290915290209091506129a58282613d06565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906129d2908590600401613de3565b6020604051808303815f875af11580156129ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a129190613e15565b6040805160e0810182526001600160401b03808a1682525f60208301819052928201839052861660608201526080810182905260a081019190915290915060c08101600190525f8a815260038701602090815260408083206001600160a01b038d16845282529182902083518154928501519385015160608601516001600160401b039283166001600160801b031995861617600160401b9684168702176001600160801b0316600160801b92841683026001600160c01b031617600160c01b91841691909102178355608086015160018401805460a089015192851696169590951792169094021780835560c0850151919391929160ff60801b1990911690836004811115612b2457612b24613c3a565b021790555050506080840151604080516001600160401b03808a1682529283166020820152918516908201526001600160a01b0389169082908b907feea0c6dd7e326ed588ce418df1563a24af963b7a54714ba659fab8152435795b9060600160405180910390a45050505050506109c660015f8051602061437283398151915255565b5f5f805160206143328339815191528282612bc282610c5f565b83549091506001600160401b03821610801590612bec57508260010154816001600160401b031611155b612c4a5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207374616044820152681ad948185b5bdd5b9d60ba1b606482015260840161059b565b949350505050565b5f612c5b61348d565b5f80516020614352833981519152426001600160401b038516118015612c9557506001600160401b038416612c93426202a30061413f565b115b612cf75760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c69642072656769737460448201526c726174696f6e2065787069727960981b606482015260840161059b565b85612d4e5760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b606482015260840161059b565b5f86815260088201602052604090205415612dbc5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b606482015260840161059b565b8251603014612e235760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b606482015260840161059b565b612e2c856132ec565b5f80612e736040518060a00160405280856001015481526020018a8152602001896001600160401b03168152602001886001600160401b03168152602001878152506134d7565b5f82815260058601602052604090209193509150612e918282613d06565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612ebe908590600401613de3565b6020604051808303815f875af1158015612eda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612efe9190613e15565b6040805160e08101825260018152602081018c90529192508101336001600160a01b031681525f60208083018290526001600160401b038c166040808501919091526060840183905260809093018290528682526007880190522081518154829060ff19166001836005811115612f7757612f77613c3a565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b929091169190910217905561302083611875565b50604080516001600160401b03808b1682528916602082015282918b9186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e910160405180910390a4509092505050612c4a60015f8051602061437283398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166130cf57604051631afcd79f60e31b815260040160405180910390fd5b565b6130d9613086565b6130e28161387c565b611329606082013560808301356130ff60c0850160a08601613afd565b61310f60e0860160c0870161428b565b61389d565b5f808251602e146131375760405162461bcd60e51b815260040161059b90614152565b5f805b60028110156131865761314e816001614118565b613159906008613fb8565b61ffff1685828151811061316f5761316f61412b565b016020015160f81c901b919091179060010161313a565b5061ffff8116156131a95760405162461bcd60e51b815260040161059b9061419b565b5f805b6004811015613204576131c0816003614118565b6131cb906008613fb8565b63ffffffff16866131dd83600261413f565b815181106131ed576131ed61412b565b016020015160f81c901b91909117906001016131ac565b5063ffffffff811660041461322b5760405162461bcd60e51b815260040161059b906141de565b5f805b60208110156132805761324281601f614118565b61324d906008613fb8565b8761325983600661413f565b815181106132695761326961412b565b016020015160f81c901b919091179060010161322e565b505f805b60088110156132df57613298816007614118565b6132a3906008613fb8565b6001600160401b0316886132b883602661413f565b815181106132c8576132c861412b565b016020015160f81c901b9190911790600101613284565b5090969095509350505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb02545f805160206143528339815191529060ff165f0361332a575050565b60408051606081018252600383015480825260048401546001600160401b038082166020850152600160401b9091041692820192909252904290610e10906133729083614118565b1061338e576001600160401b03841660408301528082526133ad565b83826040018181516133a0919061426b565b6001600160401b03169052505b5f8260200151836040015160646133c491906142a6565b6133ce91906142d1565b600285015490915060ff90811690821611156134495760405162461bcd60e51b815260206004820152603460248201527f56616c696461746f724d616e616765723a206d6178696d756d20686f75726c796044820152730818da1d5c9b881c985d1948195e18d95959195960621b606482015260840161059b565b5050805160038301556020810151600490920180546040909201516001600160401b03908116600160401b026001600160801b031990931693169290921717905550565b5f805160206143728339815191528054600119016134be57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f8051602061437283398151915255565b5f60608260800151516030146135415760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b606482015260840161059b565b60408051608680825260c082019092525f916020820181803683370190505090505f5b60028110156135b857613578816001614118565b613583906008613fb8565b5081515f9083908390811061359a5761359a61412b565b60200101906001600160f81b03191690815f1a905350600101613564565b505f5b6004811015613616576135cf816003614118565b6135da906008613fb8565b505f826135e883600261413f565b815181106135f8576135f861412b565b60200101906001600160f81b03191690815f1a9053506001016135bb565b505f5b602081101561367357845181602081106136355761363561412b565b1a60f81b8261364583600661413f565b815181106136555761365561412b565b60200101906001600160f81b03191690815f1a905350600101613619565b505f5b60208110156136d357846020015181602081106136955761369561412b565b1a60f81b826136a583602661413f565b815181106136b5576136b561412b565b60200101906001600160f81b03191690815f1a905350600101613676565b505f5b6008811015613747576136ea816007614118565b6136f5906008613fb8565b60ff1685604001516001600160401b0316901c60f81b82826046613719919061413f565b815181106137295761372961412b565b60200101906001600160f81b03191690815f1a9053506001016136d6565b505f5b60308110156137b257846080015181815181106137695761376961412b565b01602001516001600160f81b0319168261378483604e61413f565b815181106137945761379461412b565b60200101906001600160f81b03191690815f1a90535060010161374a565b505f5b6008811015613824576137c9816007614118565b6137d4906008613fb8565b60608601516001600160401b0390811691161c60f81b826137f683607e61413f565b815181106138065761380661412b565b60200101906001600160f81b03191690815f1a9053506001016137b5565b5060028160405161383591906142f6565b602060405180830381855afa158015613850573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906138739190613e15565b94909350915050565b613884613086565b61388c6138f8565b613894613908565b61132981613910565b6138a5613086565b5f5f80516020614332833981519152948555506001840192909255600290920180546001600160a01b03909216600160401b026001600160e01b03199092166001600160401b0390931692909217179055565b613900613086565b6130cf61397c565b6130cf613086565b613918613086565b80355f8051602061435283398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01556139626060830160408401614311565b600291909101805460ff191660ff90921691909117905550565b6134c4613086565b50805461399090613c89565b5f825580601f1061399f575050565b601f0160209004905f5260205f209081019061132991905b808211156139ca575f81556001016139b7565b5090565b5f60e082840312156139de575f80fd5b50919050565b8015158114611329575f80fd5b803563ffffffff81168114613a04575f80fd5b919050565b5f805f60608486031215613a1b575f80fd5b833592506020840135613a2d816139e4565b9150613a3b604085016139f1565b90509250925092565b5f60208284031215613a54575f80fd5b5035919050565b6001600160a01b0381168114611329575f80fd5b5f8060408385031215613a80575f80fd5b613a89836139f1565b91506020830135613a9981613a5b565b809150509250929050565b5f8060408385031215613ab5575f80fd5b823591506020830135613a9981613a5b565b5f60208284031215613ad7575f80fd5b613ae0826139f1565b9392505050565b80356001600160401b0381168114613a04575f80fd5b5f60208284031215613b0d575f80fd5b613ae082613ae7565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715613b4c57613b4c613b16565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613b7a57613b7a613b16565b604052919050565b5f6001600160401b03821115613b9a57613b9a613b16565b50601f01601f191660200190565b5f805f60608486031215613bba575f80fd5b83359250613bca60208501613ae7565b915060408401356001600160401b03811115613be4575f80fd5b8401601f81018613613bf4575f80fd5b8035613c07613c0282613b82565b613b52565b818152876020838501011115613c1b575f80fd5b816020840160208301375f602083830101528093505050509250925092565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03828116828216039080821115613c8257613c82613c4e565b5092915050565b600181811c90821680613c9d57607f821691505b6020821081036139de57634e487b7160e01b5f52602260045260245ffd5b601f8211156109c657805f5260205f20601f840160051c81016020851015613ce05750805b601f840160051c820191505b81811015613cff575f8155600101613cec565b5050505050565b81516001600160401b03811115613d1f57613d1f613b16565b613d3381613d2d8454613c89565b84613cbb565b602080601f831160018114613d66575f8415613d4f5750858301515b5f19600386901b1c1916600185901b178555610438565b5f85815260208120601f198616915b82811015613d9457888601518255948401946001909101908401613d75565b5085821015613db157878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f5b83811015613ddb578181015183820152602001613dc3565b50505f910152565b602081525f8251806020840152613e01816040850160208701613dc1565b601f01601f19169190910160400192915050565b5f60208284031215613e25575f80fd5b5051919050565b5f60208083525f8454613e3e81613c89565b806020870152604060018084165f8114613e5f5760018114613e7b57613ea8565b60ff19851660408a0152604084151560051b8a01019550613ea8565b895f5260205f205f5b85811015613e9f5781548b8201860152908301908801613e84565b8a016040019650505b509398975050505050505050565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b60208082526030908201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72206e60408201526f1bdd081c195b991a5b99c8185919195960821b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f82613fb357613fb3613f91565b500490565b8082028115828204841417610c6f57610c6f613c4e565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b8051613a04816139e4565b5f8060408385031215614032575f80fd5b82516001600160401b0380821115614048575f80fd5b908401906060828703121561405b575f80fd5b614063613b2a565b8251815260208084015161407681613a5b565b8282015260408401518381111561408b575f80fd5b80850194505087601f85011261409f575f80fd5b835192506140af613c0284613b82565b83815288828587010111156140c2575f80fd5b6140d184838301848801613dc1565b806040840152508195506140e6818801614016565b9450505050509250929050565b5f6001600160401b0380831681810361410e5761410e613c4e565b6001019392505050565b81810381811115610c6f57610c6f613c4e565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610c6f57610c6f613c4e565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b60208082526026908201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060408201526561637469766560d01b606082015260800190565b6001600160401b03818116838216019080821115613c8257613c82613c4e565b5f6020828403121561429b575f80fd5b8135613ae081613a5b565b6001600160401b038181168382160280821691908281146142c9576142c9613c4e565b505092915050565b5f6001600160401b03808416806142ea576142ea613f91565b92169190910492915050565b5f8251614307818460208701613dc1565b9190910192915050565b5f60208284031215614321575f80fd5b813560ff81168114613ae0575f80fdfe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"maximumHourlyChurn\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"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\":\"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\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resendDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndDelegation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"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\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"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\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]}]", + Bin: "0x608060405234801561000f575f80fd5b506040516144a53803806144a583398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6143588061014d5f395ff3fe6080604052600436106100f9575f3560e01c806366435abf11610092578063b771b3bc11610062578063b771b3bc1461029e578063bee0a03f146102d0578063c599e24f146102ef578063d61bed7414610302578063f40797d714610321575f80fd5b806366435abf146102225780636a7e3d831461024157806376f7862114610260578063a3a65e481461027f575f80fd5b80630b77f693116100cd5780630b77f6931461017b5780632e2194d81461019a578063467ef06f146101d657806362065856146101f5575f80fd5b8062e41792146100fd5780630118acc41461011e5780630322ed981461013d5780630915204e1461015c575b5f80fd5b348015610108575f80fd5b5061011c610117366004613968565b610334565b005b348015610129575f80fd5b5061011c6101383660046139a3565b610440565b348015610148575f80fd5b5061011c6101573660046139de565b61086b565b348015610167575f80fd5b5061011c610176366004613a09565b6109c7565b348015610186575f80fd5b5061011c610195366004613a3e565b610b98565b3480156101a5575f80fd5b506101b96101b43660046139de565b610c60565b6040516001600160401b0390911681526020015b60405180910390f35b3480156101e1575f80fd5b5061011c6101f0366004613a61565b610c76565b348015610200575f80fd5b5061021461020f366004613a97565b610fd2565b6040519081526020016101cd565b34801561022d575f80fd5b506101b961023c3660046139de565b610feb565b34801561024c575f80fd5b5061011c61025b366004613a3e565b610fff565b34801561026b575f80fd5b5061011c61027a3660046139a3565b611081565b34801561028a575f80fd5b5061011c610299366004613a61565b61109c565b3480156102a9575f80fd5b506102b86005600160991b0181565b6040516001600160a01b0390911681526020016101cd565b3480156102db575f80fd5b5061011c6102ea3660046139de565b611250565b61011c6102fd3660046139de565b61131f565b34801561030d575f80fd5b5061011c61031c366004613a09565b61132d565b61021461032f366004613b42565b611538565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156103785750825b90505f826001600160401b031660011480156103935750303b155b9050811580156103a1575080155b156103bf5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156103e957845460ff60401b1916600160401b1785555b6103f28661155a565b831561043857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f821561045457610451848361156b565b90505b5f8481527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03602090815260408083203384528252808320815160c08101835281546001600160401b038082168352600160401b808304821696840196909652600160801b8204811694830194909452600160c01b900483166060820152600182015492831660808201525f805160206142cc8339815191529493909260a0840191900460ff16600481111561050b5761050b613bd4565b600481111561051c5761051c613bd4565b905250905060028160a00151600481111561053957610539613bd4565b1461059a5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2064656c656761746f72206e6f742060448201526561637469766560d01b60648201526084015b60405180910390fd5b5f6105a487611807565b9050600360a08301819052506001600160401b0342811660408085019190915290821660808401525f8881526003850160205290812083916105e33390565b6001600160a01b0316815260208082019290925260409081015f2083518154938501519285015160608601516001600160401b039283166001600160801b031990961695909517600160401b9483168502176001600160801b0316600160801b918316919091026001600160c01b031617600160c01b94821694909402939093178155608084015160018201805467ffffffffffffffff19811692909516918217815560a086015192949293909268ffffffffffffffffff1916909117908360048111156106b3576106b3613bd4565b02179055509050505f6106c588611882565b9050825f01516001600160401b031681608001516001600160401b03161161073b5760405162461bcd60e51b815260206004820152602360248201527f506f5356616c696461746f724d616e616765723a20496e76616c69642077656960448201526219da1d60ea1b6064820152608401610591565b825160808201805161074e908390613bfc565b6001600160401b0316905250610764888261197d565b5f61077489848460800151611a6c565b5f8a81526005870160209081526040808320338452909152902090915061079b8282613ca0565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906107c8908590600401613d7d565b6020604051808303815f875af11580156107e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108089190613daf565b6080840151604080516001600160401b0392831681529187166020830152428282015251919250339183918d917fadec5acd02ee9a5280893bb168456a89d9b0004eee87906795b290740f2e4bde9181900360600190a450505050505050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040812080545f805160206142ec8339815191529291906108b390613c23565b90501180156108e5575060035f83815260078301602052604090205460ff1660058111156108e3576108e3613bd4565b145b6109495760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b6064820152608401610591565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916109829190600401613dc6565b6020604051808303815f875af115801561099e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c29190613daf565b505050565b5f805160206142cc8339815191525f6109df84611c89565b90505f806109f08360400151611e6a565b50915091506109ff82866120a5565b5f82815260058501602090815260408083206001600160a01b03891684529091528120610a2b9161391e565b5f610a3583611882565b9050816001600160401b031681606001516001600160401b03161015610a6d5760405162461bcd60e51b815260040161059190613e50565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020600101546001600160401b0380841691161115610abf5760405162461bcd60e51b815260040161059190613e92565b60035f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160401b900460ff166004811115610b0357610b03613bd4565b14610b205760405162461bcd60e51b815260040161059190613edb565b5f83815260038601602090815260408083206001600160a01b038a168085529252808320600101805460ff60401b191668040000000000000000179055516001600160401b0385169286917f4da588c356f0bfa46c394126d28890aaadfc4ed6c26a611d14275e13ad1057dd9190a450505050505050565b610ba282826121b8565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f805160206142cc833981519152916005600160991b019163ee5b48eb91610c1a91600401613dc6565b6020604051808303815f875af1158015610c36573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c5a9190613daf565b50505050565b5f610c7064e8d4a5100083613f3f565b92915050565b5f805160206142ec8339815191525f610c8e83611c89565b90505f80610c9f83604001516122d6565b915091508015610d045760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b6064820152608401610591565b5f828152600785016020526040808220815160e081019092528054829060ff166005811115610d3557610d35613bd4565b6005811115610d4657610d46613bd4565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b90041660c0909101529091505f9082516005811115610dbf57610dbf613bd4565b1480610ddd5750600182516005811115610ddb57610ddb613bd4565b145b610e3c5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b6064820152608401610591565b600382516005811115610e5157610e51613bd4565b03610e7857505f8381526006860160205260408120600491610e73919061391e565b610e7c565b5060055b6020808301515f90815260088801909152604081205581816005811115610ea557610ea5613bd4565b90816005811115610eb857610eb8613bd4565b9052505f84815260078701602052604090208251815484929190829060ff19166001836005811115610eec57610eec613bd4565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b929091169190910217905581516005811115610f9f57610f9f613bd4565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a350505050505050565b5f610c706001600160401b03831664e8d4a51000613f52565b5f610ff582611882565b6080015192915050565b61100982826120a5565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b038516845290915290819020905163ee5b48eb60e01b81525f805160206142cc833981519152916005600160991b019163ee5b48eb91610c1a91600401613dc6565b811561109357611091838261156b565b505b6109c283612477565b5f805160206142ec8339815191525f6110b483611c89565b90505f806110c583604001516122d6565b91509150806111275760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b6064820152608401610591565b5f8281526005850160205260408120805461114190613c23565b9050118015611173575060015f83815260078601602052604090205460ff16600581111561117157611171613bd4565b145b61118f5760405162461bcd60e51b815260040161059190613f69565b5f82815260058501602052604081206111a79161391e565b5f8281526007850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092178355600190930154875260088b0185528387208990559588905293835292548151931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb056020526040812080545f805160206142ec83398151915292919061129890613c23565b90501180156112ca575060015f83815260078301602052604090205460ff1660058111156112c8576112c8613bd4565b145b6112e65760405162461bcd60e51b815260040161059190613f69565b5f82815260058201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916109829190600401613dc6565b61132a8133346127c9565b50565b5f805160206142cc8339815191525f61134584611c89565b90505f806113568360400151611e6a565b509150915061136582866121b8565b5f82815260048501602090815260408083206001600160a01b038916845290915281206113919161391e565b5f61139b83611882565b9050816001600160401b031681606001516001600160401b031610156113d35760405162461bcd60e51b815260040161059190613e50565b5f83815260038601602090815260408083206001600160a01b038a1684529091529020546001600160401b03808416600160c01b9092041611156114295760405162461bcd60e51b815260040161059190613e92565b60015f84815260038701602090815260408083206001600160a01b038b168452909152902060010154600160401b900460ff16600481111561146d5761146d613bd4565b1461148a5760405162461bcd60e51b815260040161059190613edb565b5f83815260038601602090815260408083206001600160a01b038a168085529083529281902060018101805460ff60401b191668020000000000000000179055805467ffffffffffffffff60401b1916600160401b426001600160401b03818116929092029290921790925582519081529151908616939287927fd63c8a1fc829b22698176813c742597f94f9278dde21a64f7a8192e905f932b6929081900390910190a450505050505050565b5f8061154334612b42565b905061155185828686612bec565b95945050505050565b611562613020565b61132a8161306b565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156115b6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115dd9190810190613fbb565b91509150806116405760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b6064820152608401610591565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a79190613daf565b82511461170b5760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b6064820152608401610591565b60208201516001600160a01b0316156117815760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b6064820152608401610591565b5f8061179084604001516130ae565b915091508187146117fd5760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b6064820152608401610591565b9695505050505050565b5f8181525f8051602061432c8339815191526020526040812060020180545f805160206142ec83398151915291600160a01b9091046001600160401b031690819060146118538361408d565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508092505050919050565b6040805160e080820183525f8083526020808401829052838501829052606084018290526080840182905260a0840182905260c084018290528582525f8051602061432c83398151915290528390208351918201909352825491925f805160206142ec83398151915292829060ff16600581111561190257611902613bd4565b600581111561191357611913613bd4565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b900490911660c0909101529392505050565b5f8281525f8051602061432c83398151915260205260409020815181545f805160206142ec8339815191529284929091829060ff191660018360058111156119c7576119c7613bd4565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055505050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611ae557611aa58160016140b2565b611ab0906008613f52565b5081515f90839083908110611ac757611ac76140c5565b60200101906001600160f81b03191690815f1a905350600101611a91565b505f5b6004811015611b4857611afc8160036140b2565b611b07906008613f52565b6001901c60f81b82611b1a8360026140d9565b81518110611b2a57611b2a6140c5565b60200101906001600160f81b03191690815f1a905350600101611ae8565b505f5b6020811015611baa57611b5f81601f6140b2565b611b6a906008613f52565b86901c60f81b82611b7c8360066140d9565b81518110611b8c57611b8c6140c5565b60200101906001600160f81b03191690815f1a905350600101611b4b565b505f5b6008811015611c1557611bc18160076140b2565b611bcc906008613f52565b6001600160401b038616901c60f81b82611be78360266140d9565b81518110611bf757611bf76140c5565b60200101906001600160f81b03191690815f1a905350600101611bad565b505f5b6008811015611c8057611c2c8160076140b2565b611c37906008613f52565b6001600160401b038516901c60f81b82611c5283602e6140d9565b81518110611c6257611c626140c5565b60200101906001600160f81b03191690815f1a905350600101611c18565b50949350505050565b60408051606080820183525f8083526020830181905292820152905f805160206142ec8339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611cfe573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d259190810190613fbb565b9150915080611d8c5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b6064820152608401610591565b8254825114611def5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b6064820152608401610591565b60208201516001600160a01b031615611e625760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b6064820152608401610591565b509392505050565b5f805f8351603614611e8e5760405162461bcd60e51b8152600401610591906140ec565b5f805b6002811015611edd57611ea58160016140b2565b611eb0906008613f52565b61ffff16868281518110611ec657611ec66140c5565b016020015160f81c901b9190911790600101611e91565b5061ffff811615611f005760405162461bcd60e51b815260040161059190614135565b5f805b6004811015611f5b57611f178160036140b2565b611f22906008613f52565b63ffffffff1687611f348360026140d9565b81518110611f4457611f446140c5565b016020015160f81c901b9190911790600101611f03565b5063ffffffff8116600314611f825760405162461bcd60e51b815260040161059190614178565b5f805b6020811015611fd757611f9981601f6140b2565b611fa4906008613f52565b88611fb08360066140d9565b81518110611fc057611fc06140c5565b016020015160f81c901b9190911790600101611f85565b505f805b600881101561203657611fef8160076140b2565b611ffa906008613f52565b6001600160401b03168961200f8360266140d9565b8151811061201f5761201f6140c5565b016020015160f81c901b9190911790600101611fdb565b505f805b60088110156120955761204e8160076140b2565b612059906008613f52565b6001600160401b03168a61206e83602e6140d9565b8151811061207e5761207e6140c5565b016020015160f81c901b919091179060010161203a565b5091989097509095509350505050565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d05602090815260408083206001600160a01b0385168452909152812080545f805160206142cc83398151915292919061210190613c23565b9050118015612151575060035f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160401b900460ff16600481111561214f5761214f613bd4565b145b6109c25760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f722072604482015271656d6f76616c206e6f742070656e64696e6760701b6064820152608401610591565b5f8281527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d04602090815260408083206001600160a01b0385168452909152812080545f805160206142cc83398151915292919061221490613c23565b9050118015612264575060015f84815260038301602090815260408083206001600160a01b0387168452909152902060010154600160401b900460ff16600481111561226257612262613bd4565b145b6109c25760405162461bcd60e51b815260206004820152603760248201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72207260448201527f6567697374726174696f6e206e6f742070656e64696e670000000000000000006064820152608401610591565b5f8082516027146122f95760405162461bcd60e51b8152600401610591906140ec565b5f805b6002811015612348576123108160016140b2565b61231b906008613f52565b61ffff16858281518110612331576123316140c5565b016020015160f81c901b91909117906001016122fc565b5061ffff81161561236b5760405162461bcd60e51b815260040161059190614135565b5f805b60048110156123c6576123828160036140b2565b61238d906008613f52565b63ffffffff168661239f8360026140d9565b815181106123af576123af6140c5565b016020015160f81c901b919091179060010161236e565b5063ffffffff81166002146123ed5760405162461bcd60e51b815260040161059190614178565b5f805b60208110156124425761240481601f6140b2565b61240f906008613f52565b8761241b8360066140d9565b8151811061242b5761242b6140c5565b016020015160f81c901b91909117906001016123f0565b505f86602681518110612457576124576140c5565b016020015191976001600160f81b03199092161515965090945050505050565b5f8181525f8051602061432c8339815191526020526040808220815160e0810190925280545f805160206142ec83398151915293929190829060ff1660058111156124c4576124c4613bd4565b60058111156124d5576124d5613bd4565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b900490921660c0909101529091508151600581111561254f5761254f613bd4565b1461256c5760405162461bcd60e51b8152600401610591906141bf565b60408101516001600160a01b0316336001600160a01b0316146125e65760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b6064820152608401610591565b6125f38160800151613286565b60038152426001600160401b031660c08201525f83815260078301602052604090208151815483929190829060ff1916600183600581111561263757612637613bd4565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b92909116919091021790555f6126eb846126e581611807565b5f611a6c565b5f85815260068501602052604090209091506127078282613ca0565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612734908590600401613d7d565b6020604051808303815f875af1158015612750573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127749190613daf565b6080840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b6127d1613427565b5f6127db82610c60565b90505f805160206142cc8339815191525f6127f586611882565b905060028151600581111561280c5761280c613bd4565b146128295760405162461bcd60e51b8152600401610591906141bf565b5f86815260038301602090815260408083206001600160a01b03891684529091529020546001600160401b0316156128ba5760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f724d616e616765723a2064656c656761746f7220616c726560448201526d18591e481c9959da5cdd195c995960921b6064820152608401610591565b6128c383613286565b82816080018181516128d59190614205565b6001600160401b03169052506128eb868261197d565b5f6128f587611807565b90505f61290788838560800151611a6c565b5f89815260048601602090815260408083206001600160a01b038c16845290915290209091506129378282613ca0565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612964908590600401613d7d565b6020604051808303815f875af1158015612980573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129a49190613daf565b6040805160c0810182526001600160401b03808a1682525f6020830181905292820183905286166060820152608081019190915290915060a08101600190525f8a815260038701602090815260408083206001600160a01b038d16845282529182902083518154928501519385015160608601516001600160401b039283166001600160801b031990951694909417600160401b9583168602176001600160801b0316600160801b918316919091026001600160c01b031617600160c01b93821693909302929092178155608084015160018201805467ffffffffffffffff19811692909416918217815560a086015192949293909268ffffffffffffffffff1990911690911790836004811115612abe57612abe613bd4565b021790555050506080840151604080516001600160401b03808a1682529283166020820152918516908201526001600160a01b0389169082908b907feea0c6dd7e326ed588ce418df1563a24af963b7a54714ba659fab8152435795b9060600160405180910390a45050505050506109c260015f8051602061430c83398151915255565b5f5f805160206142cc8339815191528282612b5c82610c60565b83549091506001600160401b03821610801590612b8657508260010154816001600160401b031611155b612be45760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207374616044820152681ad948185b5bdd5b9d60ba1b6064820152608401610591565b949350505050565b5f612bf5613427565b5f805160206142ec833981519152426001600160401b038516118015612c2f57506001600160401b038416612c2d426202a3006140d9565b115b612c915760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c69642072656769737460448201526c726174696f6e2065787069727960981b6064820152608401610591565b85612ce85760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b6064820152608401610591565b5f86815260088201602052604090205415612d565760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b6064820152608401610591565b8251603014612dbd5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b6064820152608401610591565b612dc685613286565b5f80612e0d6040518060a00160405280856001015481526020018a8152602001896001600160401b03168152602001886001600160401b0316815260200187815250613471565b5f82815260058601602052604090209193509150612e2b8282613ca0565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612e58908590600401613d7d565b6020604051808303815f875af1158015612e74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e989190613daf565b6040805160e08101825260018152602081018c90529192508101336001600160a01b031681525f60208083018290526001600160401b038c166040808501919091526060840183905260809093018290528682526007880190522081518154829060ff19166001836005811115612f1157612f11613bd4565b021790555060208201516001820155604082015160028201805460608501516001600160a01b039093166001600160e01b031990911617600160a01b6001600160401b039384160217905560808301516003909201805460a085015160c0909501519383166001600160801b031990911617600160401b948316949094029390931767ffffffffffffffff60801b1916600160801b9290911691909102179055612fba83611807565b50604080516001600160401b03808b1682528916602082015282918b9186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e910160405180910390a4509092505050612be460015f8051602061430c83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661306957604051631afcd79f60e31b815260040160405180910390fd5b565b613073613020565b61307c81613816565b61132a6060820135608083013561309960c0850160a08601613a97565b6130a960e0860160c08701614225565b613837565b5f808251602e146130d15760405162461bcd60e51b8152600401610591906140ec565b5f805b6002811015613120576130e88160016140b2565b6130f3906008613f52565b61ffff16858281518110613109576131096140c5565b016020015160f81c901b91909117906001016130d4565b5061ffff8116156131435760405162461bcd60e51b815260040161059190614135565b5f805b600481101561319e5761315a8160036140b2565b613165906008613f52565b63ffffffff16866131778360026140d9565b81518110613187576131876140c5565b016020015160f81c901b9190911790600101613146565b5063ffffffff81166004146131c55760405162461bcd60e51b815260040161059190614178565b5f805b602081101561321a576131dc81601f6140b2565b6131e7906008613f52565b876131f38360066140d9565b81518110613203576132036140c5565b016020015160f81c901b91909117906001016131c8565b505f805b6008811015613279576132328160076140b2565b61323d906008613f52565b6001600160401b0316886132528360266140d9565b81518110613262576132626140c5565b016020015160f81c901b919091179060010161321e565b5090969095509350505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb02545f805160206142ec8339815191529060ff165f036132c4575050565b60408051606081018252600383015480825260048401546001600160401b038082166020850152600160401b9091041692820192909252904290610e109061330c90836140b2565b10613328576001600160401b0384166040830152808252613347565b838260400181815161333a9190614205565b6001600160401b03169052505b5f82602001518360400151606461335e9190614240565b613368919061426b565b600285015490915060ff90811690821611156133e35760405162461bcd60e51b815260206004820152603460248201527f56616c696461746f724d616e616765723a206d6178696d756d20686f75726c796044820152730818da1d5c9b881c985d1948195e18d95959195960621b6064820152608401610591565b5050805160038301556020810151600490920180546040909201516001600160401b03908116600160401b026001600160801b031990931693169290921717905550565b5f8051602061430c83398151915280546001190161345857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f8051602061430c83398151915255565b5f60608260800151516030146134db5760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b6064820152608401610591565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613552576135128160016140b2565b61351d906008613f52565b5081515f90839083908110613534576135346140c5565b60200101906001600160f81b03191690815f1a9053506001016134fe565b505f5b60048110156135b0576135698160036140b2565b613574906008613f52565b505f826135828360026140d9565b81518110613592576135926140c5565b60200101906001600160f81b03191690815f1a905350600101613555565b505f5b602081101561360d57845181602081106135cf576135cf6140c5565b1a60f81b826135df8360066140d9565b815181106135ef576135ef6140c5565b60200101906001600160f81b03191690815f1a9053506001016135b3565b505f5b602081101561366d578460200151816020811061362f5761362f6140c5565b1a60f81b8261363f8360266140d9565b8151811061364f5761364f6140c5565b60200101906001600160f81b03191690815f1a905350600101613610565b505f5b60088110156136e1576136848160076140b2565b61368f906008613f52565b60ff1685604001516001600160401b0316901c60f81b828260466136b391906140d9565b815181106136c3576136c36140c5565b60200101906001600160f81b03191690815f1a905350600101613670565b505f5b603081101561374c5784608001518181518110613703576137036140c5565b01602001516001600160f81b0319168261371e83604e6140d9565b8151811061372e5761372e6140c5565b60200101906001600160f81b03191690815f1a9053506001016136e4565b505f5b60088110156137be576137638160076140b2565b61376e906008613f52565b60608601516001600160401b0390811691161c60f81b8261379083607e6140d9565b815181106137a0576137a06140c5565b60200101906001600160f81b03191690815f1a90535060010161374f565b506002816040516137cf9190614290565b602060405180830381855afa1580156137ea573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061380d9190613daf565b94909350915050565b61381e613020565b613826613892565b61382e6138a2565b61132a816138aa565b61383f613020565b5f5f805160206142cc833981519152948555506001840192909255600290920180546001600160a01b03909216600160401b026001600160e01b03199092166001600160401b0390931692909217179055565b61389a613020565b613069613916565b613069613020565b6138b2613020565b80355f805160206142ec83398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01556138fc60608301604084016142ab565b600291909101805460ff191660ff90921691909117905550565b61345e613020565b50805461392a90613c23565b5f825580601f10613939575050565b601f0160209004905f5260205f209081019061132a91905b80821115613964575f8155600101613951565b5090565b5f60e08284031215613978575f80fd5b50919050565b801515811461132a575f80fd5b803563ffffffff8116811461399e575f80fd5b919050565b5f805f606084860312156139b5575f80fd5b8335925060208401356139c78161397e565b91506139d56040850161398b565b90509250925092565b5f602082840312156139ee575f80fd5b5035919050565b6001600160a01b038116811461132a575f80fd5b5f8060408385031215613a1a575f80fd5b613a238361398b565b91506020830135613a33816139f5565b809150509250929050565b5f8060408385031215613a4f575f80fd5b823591506020830135613a33816139f5565b5f60208284031215613a71575f80fd5b613a7a8261398b565b9392505050565b80356001600160401b038116811461399e575f80fd5b5f60208284031215613aa7575f80fd5b613a7a82613a81565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715613ae657613ae6613ab0565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613b1457613b14613ab0565b604052919050565b5f6001600160401b03821115613b3457613b34613ab0565b50601f01601f191660200190565b5f805f60608486031215613b54575f80fd5b83359250613b6460208501613a81565b915060408401356001600160401b03811115613b7e575f80fd5b8401601f81018613613b8e575f80fd5b8035613ba1613b9c82613b1c565b613aec565b818152876020838501011115613bb5575f80fd5b816020840160208301375f602083830101528093505050509250925092565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160401b03828116828216039080821115613c1c57613c1c613be8565b5092915050565b600181811c90821680613c3757607f821691505b60208210810361397857634e487b7160e01b5f52602260045260245ffd5b601f8211156109c257805f5260205f20601f840160051c81016020851015613c7a5750805b601f840160051c820191505b81811015613c99575f8155600101613c86565b5050505050565b81516001600160401b03811115613cb957613cb9613ab0565b613ccd81613cc78454613c23565b84613c55565b602080601f831160018114613d00575f8415613ce95750858301515b5f19600386901b1c1916600185901b178555610438565b5f85815260208120601f198616915b82811015613d2e57888601518255948401946001909101908401613d0f565b5085821015613d4b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f5b83811015613d75578181015183820152602001613d5d565b50505f910152565b602081525f8251806020840152613d9b816040850160208701613d5b565b601f01601f19169190910160400192915050565b5f60208284031215613dbf575f80fd5b5051919050565b5f60208083525f8454613dd881613c23565b806020870152604060018084165f8114613df95760018114613e1557613e42565b60ff19851660408a0152604084151560051b8a01019550613e42565b895f5260205f205f5b85811015613e395781548b8201860152908301908801613e1e565b8a016040019650505b509398975050505050505050565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b60208082526030908201527f506f5356616c696461746f724d616e616765723a2064656c656761746f72206e60408201526f1bdd081c195b991a5b99c8185919195960821b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f82613f4d57613f4d613f2b565b500490565b8082028115828204841417610c7057610c70613be8565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b805161399e8161397e565b5f8060408385031215613fcc575f80fd5b82516001600160401b0380821115613fe2575f80fd5b9084019060608287031215613ff5575f80fd5b613ffd613ac4565b82518152602080840151614010816139f5565b82820152604084015183811115614025575f80fd5b80850194505087601f850112614039575f80fd5b83519250614049613b9c84613b1c565b838152888285870101111561405c575f80fd5b61406b84838301848801613d5b565b80604084015250819550614080818801613fb0565b9450505050509250929050565b5f6001600160401b038083168181036140a8576140a8613be8565b6001019392505050565b81810381811115610c7057610c70613be8565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610c7057610c70613be8565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b60208082526026908201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060408201526561637469766560d01b606082015260800190565b6001600160401b03818116838216019080821115613c1c57613c1c613be8565b5f60208284031215614235575f80fd5b8135613a7a816139f5565b6001600160401b0381811683821602808216919082811461426357614263613be8565b505092915050565b5f6001600160401b038084168061428457614284613f2b565b92169190910492915050565b5f82516142a1818460208701613d5b565b9190910192915050565b5f602082840312156142bb575f80fd5b813560ff81168114613a7a575f80fdfe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -1867,151 +1867,6 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValida return event, nil } -// NativeTokenStakingManagerValidationUptimeUpdatedIterator is returned from FilterValidationUptimeUpdated and is used to iterate over the raw logs and unpacked data for ValidationUptimeUpdated events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationUptimeUpdatedIterator struct { - Event *NativeTokenStakingManagerValidationUptimeUpdated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub interfaces.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *NativeTokenStakingManagerValidationUptimeUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationUptimeUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationUptimeUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerValidationUptimeUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *NativeTokenStakingManagerValidationUptimeUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// NativeTokenStakingManagerValidationUptimeUpdated represents a ValidationUptimeUpdated event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationUptimeUpdated struct { - ValidationID [32]byte - Uptime uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationUptimeUpdated is a free log retrieval operation binding the contract event 0xdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c. -// -// Solidity: event ValidationUptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidationUptimeUpdated(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerValidationUptimeUpdatedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidationUptimeUpdated", validationIDRule) - if err != nil { - return nil, err - } - return &NativeTokenStakingManagerValidationUptimeUpdatedIterator{contract: _NativeTokenStakingManager.contract, event: "ValidationUptimeUpdated", logs: logs, sub: sub}, nil -} - -// WatchValidationUptimeUpdated is a free log subscription operation binding the contract event 0xdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c. -// -// Solidity: event ValidationUptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidationUptimeUpdated(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidationUptimeUpdated, validationID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "ValidationUptimeUpdated", validationIDRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerValidationUptimeUpdated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationUptimeUpdated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseValidationUptimeUpdated is a log parse operation binding the contract event 0xdb66a448eb96fec571c5e9c295c4f425b0297d1fc1f4353931cb2afc2426bb8c. -// -// Solidity: event ValidationUptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidationUptimeUpdated(log types.Log) (*NativeTokenStakingManagerValidationUptimeUpdated, error) { - event := new(NativeTokenStakingManagerValidationUptimeUpdated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationUptimeUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // NativeTokenStakingManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the NativeTokenStakingManager contract. type NativeTokenStakingManagerValidatorRemovalInitializedIterator struct { Event *NativeTokenStakingManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log