diff --git a/bindings/deploy_chain.go b/bindings/deploy_chain.go index c89ddc0..69f0d89 100644 --- a/bindings/deploy_chain.go +++ b/bindings/deploy_chain.go @@ -66,7 +66,7 @@ type DeployChainGenesisConfiguration struct { // DeployChainMetaData contains all meta data concerning the DeployChain contract. var DeployChainMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_proxyAdmin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_protocolVersions\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_PASSER_STORAGE_HASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateBatchInbox\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"deploy\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"genesisConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.GenesisConfiguration\",\"components\":[{\"name\":\"l1Number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l2Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"l2StateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"l2Time\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"gasConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.GasConfiguration\",\"components\":[{\"name\":\"basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"addressConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.AddressConfiguration\",\"components\":[{\"name\":\"batcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"proofsEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployAddresses\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.DeployAddresses\",\"components\":[{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deployProxy\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2OutputOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"protocolVersions\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAddress\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Deploy\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"configHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"batchInbox\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"addresses\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structDeployChain.DeployAddresses\",\"components\":[{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false}]", - Bin: "0x6101c06040523480156200001257600080fd5b5060405162001f9138038062001f9183398101604081905262000035916200009c565b6001600160a01b03998a1660805297891660a05295881660c05293871660e05291861661010052851661012052841661014052831661016052821661018052166101a0526200016b565b80516001600160a01b03811681146200009757600080fd5b919050565b6000806000806000806000806000806101408b8d031215620000bd57600080fd5b620000c88b6200007f565b9950620000d860208c016200007f565b9850620000e860408c016200007f565b9750620000f860608c016200007f565b96506200010860808c016200007f565b95506200011860a08c016200007f565b94506200012860c08c016200007f565b93506200013860e08c016200007f565b9250620001496101008c016200007f565b91506200015a6101208c016200007f565b90509295989b9194979a5092959850565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051611d1e6200027360003960006102570152600081816101a90152818161111f01528181611430015281816114f901526115b3015260008181610230015281816107390152610c040152600081816102ba015281816108080152610cd3015260008181610293015281816108d70152610da2015260008181610336015281816108920152610d5d01526000818161010a0152818161084d0152610d180152600081816101820152818161077e0152610c4901526000818161015b015281816107c30152610c8e0152600081816102090152818161043801526106140152611d1e6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80634d9f155911610097578063a711986911610066578063a7119869146102b5578063aabcb26e146102dc578063beab4f7e14610311578063c4e8ddfa1461033157600080fd5b80634d9f15591461022b5780636624856a1461025257806394e49a1b146102795780639b7d7f0a1461028e57600080fd5b806336e0909b116100d357806336e0909b146101cb578063380cb000146101de57806338db8411146101f15780633e47158c1461020457600080fd5b8063078f29cf146101055780630a49cb031461015657806333d7e2bd1461017d57806335e80ab3146101a4575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101d9366004611708565b610358565b61012c6101ec36600461174a565b6103e0565b61012c6101ff36600461174a565b61060c565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61028c610287366004611896565b610639565b005b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6103037f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1281565b60405190815260200161014d565b61032461031f366004611708565b6106c3565b60405161014d91906119c7565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6000805b82156103965761036d600a84611a67565b61037882600a611aaa565b6103829190611ae7565b905061038f600a84611aff565b925061035c565b60005b81156103c3576103aa600a83611a67565b60049190911b176103bc600a83611aff565b9150610399565b73ff00000000000000000000000000000000000000179392505050565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606083811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c8301527f0000000000000000000000000000000000000000000000000000000000000000811b601f8301527f905561012580603f5f395ff35f365f600860dd565b805490918054803314331560338301527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538301527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738301527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938301527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38301527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38301527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38301527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138301527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338301527fe8ee1178d6a717850b5d61039156ff000000000000000000000000000000000061015383015230901b610162820152610176810182905261016180822061019683015260559101206000905b90505b92915050565b6000610603837f00000000000000000000000000000000000000000000000000000000000000008461091b565b600061064486610b8e565b90506000610659878787876000015186610dc7565b9050600061066688610358565b9050610676868683858789611021565b815160208301516040518a927f49ea8b4c640f12c7d41cb7b7931d984f226f95ce1d55e1e449ee3d61b877c1ad926106b19286908990611b13565b60405180910390a25050505050505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260008260405160200161071191815260200190565b6040516020818303038152906040528051906020012090506040518060e0016040528061075e7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107a37f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107e87f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff16815260200161082d7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108727f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b77f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108fc7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1690529392505050565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606084811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c83015283901b601f8201527f905561012580603f5f395ff35f365f600860dd565b805490918054803314331560338201527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538201527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738201527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938201527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38201527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38201527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38201527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138201527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338201527fe8ee1178d6a717850b5d61039156000000000000000000000000000000000000610153820152600090826101618284f591505073ffffffffffffffffffffffffffffffffffffffff8116610b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f50726f78793a2063726561746532206661696c6564000000000000000000000060448201526064015b60405180910390fd5b9392505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152600082604051602001610bdc91815260200190565b6040516020818303038152906040528051906020012090506040518060e00160405280610c297f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610c6e7f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610cb37f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610cf87f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d3d7f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d827f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108fc7f00000000000000000000000000000000000000000000000000000000000000008461060c565b6040805180820190915260008082526020820152845167ffffffffffffffff164080610e75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4465706c6f79436861696e3a2067656e6573697320626c6f636b68617368206e60448201527f6f7420617661696c61626c6500000000000000000000000000000000000000006064820152608401610b7e565b6000856000015163ffffffff166020876020015163ffffffff16901b60f86001901b171760001b905060008089848a602001518b606001518a878d604001518c604001518d60200151604051602001610f7a9a9998979695949392919060c09a8b1b7fffffffffffffffff0000000000000000000000000000000000000000000000009081168252600882019a909a526028810198909852604888019690965293881b87166068870152606092831b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811660708801526084870192909252871b90951660a485015290811b841660ac8401521b9091169181019190915260d40190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060808401835260008085528c840151858401527f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1293850193909352908b01516060840152925090611000906116ac565b60408051808201909152928352602083015250925050505b95945050505050565b81516020808401518551918601516040517fb820514800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810193909352604483015283151560648301529091169063b820514890608401600060405180830381600087803b1580156110ae57600080fd5b505af11580156110c2573d6000803e3d6000fd5b505050506040828101518351602085015192517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292811660248401527f000000000000000000000000000000000000000000000000000000000000000081166044840152169063c0c53b8b90606401600060405180830381600087803b15801561116a57600080fd5b505af115801561117e573d6000803e3d6000fd5b5050505060006112b08388606001516040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e00160405280846060015173ffffffffffffffffffffffffffffffffffffffff1681526020018460a0015173ffffffffffffffffffffffffffffffffffffffff168152602001846080015173ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001846040015173ffffffffffffffffffffffffffffffffffffffff1681526020018460c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815250905092915050565b9050826020015173ffffffffffffffffffffffffffffffffffffffff1663dc7e20a588600001518960200151896000015173ffffffffffffffffffffffffffffffffffffffff1660001b8b604001518b604001516113876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526301312d008152600a6020820152600891810191909152633b9aca006060820152620f424060808201526fffffffffffffffffffffffffffffffff60a082015290565b8c8e602001518a6040518a63ffffffff1660e01b81526004016113b299989796959493929190611bae565b600060405180830381600087803b1580156113cc57600080fd5b505af11580156113e0573d6000803e3d6000fd5b505050506060830151604080850151602086015191517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152918216602482015291811660448301529091169063c0c53b8b90606401600060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505050506080830151606084015160208501516040517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201527f000000000000000000000000000000000000000000000000000000000000000083166024820152908216604482015291169063c0c53b8b90606401600060405180830381600087803b15801561154d57600080fd5b505af1158015611561573d6000803e3d6000fd5b50505060a084015160608501516040517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000821660248201529116915063485cc95590604401600060405180830381600087803b15801561160057600080fd5b505af1158015611614573d6000803e3d6000fd5b50505060c084015160808501516040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116915063c4d66de890602401600060405180830381600087803b15801561168b57600080fd5b505af115801561169f573d6000803e3d6000fd5b5050505050505050505050565b600081600001518260200151836040015184606001516040516020016116eb949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60006020828403121561171a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461174557600080fd5b919050565b6000806040838503121561175d57600080fd5b61176683611721565b946020939093013593505050565b6040516080810167ffffffffffffffff811182821017156117be577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803567ffffffffffffffff8116811461174557600080fd5b803563ffffffff8116811461174557600080fd5b60006060828403121561180257600080fd5b6040516060810181811067ffffffffffffffff8211171561184c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061185b83611721565b815261186960208401611721565b602082015261187a60408401611721565b60408201525092915050565b8035801515811461174557600080fd5b60008060008060008587036101a08112156118b057600080fd5b8635955060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156118e457600080fd5b6118ec611774565b6118f8602089016117c4565b8152604088013560208201526060880135604082015261191a608089016117c4565b6060820152945060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608201121561195157600080fd5b5061195a611774565b61196660a088016117dc565b815261197460c088016117dc565b602082015261198560e088016117c4565b60408201526119976101008801611721565b606082015292506119ac8761012088016117f0565b91506119bb6101808701611886565b90509295509295909350565b60e08101610606828473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611a7657611a76611a38565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ae257611ae2611a7b565b500290565b60008219821115611afa57611afa611a7b565b500190565b600082611b0e57611b0e611a38565b500490565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff831660408201526101408101611018606083018473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b60006102808201905063ffffffff808c168352808b16602084015289604084015267ffffffffffffffff8916606084015273ffffffffffffffffffffffffffffffffffffffff881660808401528087511660a084015260ff60208801511660c084015260ff60408801511660e08401528060608801511661010084015280608088015116610120840152506fffffffffffffffffffffffffffffffff60a087015116610140830152611c7961016083018673ffffffffffffffffffffffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8416610180830152825173ffffffffffffffffffffffffffffffffffffffff9081166101a0840152602084015181166101c0840152604084015181166101e0840152606084015181166102008401526080840151811661022084015260a0840151811661024084015260c0840151166102608301529a995050505050505050505056fea164736f6c634300080f000a", + Bin: "0x6101c06040523480156200001257600080fd5b5060405162001f9138038062001f9183398101604081905262000035916200009c565b6001600160a01b03998a1660805297891660a05295881660c05293871660e05291861661010052851661012052841661014052831661016052821661018052166101a0526200016b565b80516001600160a01b03811681146200009757600080fd5b919050565b6000806000806000806000806000806101408b8d031215620000bd57600080fd5b620000c88b6200007f565b9950620000d860208c016200007f565b9850620000e860408c016200007f565b9750620000f860608c016200007f565b96506200010860808c016200007f565b95506200011860a08c016200007f565b94506200012860c08c016200007f565b93506200013860e08c016200007f565b9250620001496101008c016200007f565b91506200015a6101208c016200007f565b90509295989b9194979a5092959850565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051611d1e6200027360003960006102570152600081816101a90152818161111f01528181611430015281816114f901526115b3015260008181610230015281816107390152610c040152600081816102ba015281816108080152610cd3015260008181610293015281816108d70152610da2015260008181610336015281816108920152610d5d01526000818161010a0152818161084d0152610d180152600081816101820152818161077e0152610c4901526000818161015b015281816107c30152610c8e0152600081816102090152818161043801526106140152611d1e6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80634d9f155911610097578063a711986911610066578063a7119869146102b5578063aabcb26e146102dc578063beab4f7e14610311578063c4e8ddfa1461033157600080fd5b80634d9f15591461022b5780636624856a1461025257806394e49a1b146102795780639b7d7f0a1461028e57600080fd5b806336e0909b116100d357806336e0909b146101cb578063380cb000146101de57806338db8411146101f15780633e47158c1461020457600080fd5b8063078f29cf146101055780630a49cb031461015657806333d7e2bd1461017d57806335e80ab3146101a4575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101d9366004611708565b610358565b61012c6101ec36600461174a565b6103e0565b61012c6101ff36600461174a565b61060c565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61028c610287366004611896565b610639565b005b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6103037f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1281565b60405190815260200161014d565b61032461031f366004611708565b6106c3565b60405161014d91906119c7565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6000805b82156103965761036d600a84611a67565b61037882600a611aaa565b6103829190611ae7565b905061038f600a84611aff565b925061035c565b60005b81156103c3576103aa600a83611a67565b60049190911b176103bc600a83611aff565b9150610399565b73ff00000000000000000000000000000000000000179392505050565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606083811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c8301527f0000000000000000000000000000000000000000000000000000000000000000811b601f8301527f905561012280603f5f395ff35f365f600860dd565b805490918054803314331560338301527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538301527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738301527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938301527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38301527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38301527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38301527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138301527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338301527fe8ee1178d6a717850b5d61039156ff000000000000000000000000000000000061015383015230901b610162820152610176810182905261016180822061019683015260559101206000905b90505b92915050565b6000610603837f00000000000000000000000000000000000000000000000000000000000000008461091b565b600061064486610b8e565b90506000610659878787876000015186610dc7565b9050600061066688610358565b9050610676868683858789611021565b815160208301516040518a927f49ea8b4c640f12c7d41cb7b7931d984f226f95ce1d55e1e449ee3d61b877c1ad926106b19286908990611b13565b60405180910390a25050505050505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260008260405160200161071191815260200190565b6040516020818303038152906040528051906020012090506040518060e0016040528061075e7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107a37f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107e87f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff16815260200161082d7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108727f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b77f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108fc7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1690529392505050565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606084811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c83015283901b601f8201527f905561012280603f5f395ff35f365f600860dd565b805490918054803314331560338201527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538201527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738201527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938201527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38201527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38201527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38201527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138201527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338201527fe8ee1178d6a717850b5d61039156000000000000000000000000000000000000610153820152600090826101618284f591505073ffffffffffffffffffffffffffffffffffffffff8116610b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f50726f78793a2063726561746532206661696c6564000000000000000000000060448201526064015b60405180910390fd5b9392505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152600082604051602001610bdc91815260200190565b6040516020818303038152906040528051906020012090506040518060e00160405280610c297f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610c6e7f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610cb37f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610cf87f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d3d7f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d827f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108fc7f00000000000000000000000000000000000000000000000000000000000000008461060c565b6040805180820190915260008082526020820152845167ffffffffffffffff164080610e75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4465706c6f79436861696e3a2067656e6573697320626c6f636b68617368206e60448201527f6f7420617661696c61626c6500000000000000000000000000000000000000006064820152608401610b7e565b6000856000015163ffffffff166020876020015163ffffffff16901b60f86001901b171760001b905060008089848a602001518b606001518a878d604001518c604001518d60200151604051602001610f7a9a9998979695949392919060c09a8b1b7fffffffffffffffff0000000000000000000000000000000000000000000000009081168252600882019a909a526028810198909852604888019690965293881b87166068870152606092831b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811660708801526084870192909252871b90951660a485015290811b841660ac8401521b9091169181019190915260d40190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060808401835260008085528c840151858401527f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1293850193909352908b01516060840152925090611000906116ac565b60408051808201909152928352602083015250925050505b95945050505050565b81516020808401518551918601516040517fb820514800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810193909352604483015283151560648301529091169063b820514890608401600060405180830381600087803b1580156110ae57600080fd5b505af11580156110c2573d6000803e3d6000fd5b505050506040828101518351602085015192517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292811660248401527f000000000000000000000000000000000000000000000000000000000000000081166044840152169063c0c53b8b90606401600060405180830381600087803b15801561116a57600080fd5b505af115801561117e573d6000803e3d6000fd5b5050505060006112b08388606001516040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e00160405280846060015173ffffffffffffffffffffffffffffffffffffffff1681526020018460a0015173ffffffffffffffffffffffffffffffffffffffff168152602001846080015173ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001846040015173ffffffffffffffffffffffffffffffffffffffff1681526020018460c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815250905092915050565b9050826020015173ffffffffffffffffffffffffffffffffffffffff1663dc7e20a588600001518960200151896000015173ffffffffffffffffffffffffffffffffffffffff1660001b8b604001518b604001516113876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526301312d008152600a6020820152600891810191909152633b9aca006060820152620f424060808201526fffffffffffffffffffffffffffffffff60a082015290565b8c8e602001518a6040518a63ffffffff1660e01b81526004016113b299989796959493929190611bae565b600060405180830381600087803b1580156113cc57600080fd5b505af11580156113e0573d6000803e3d6000fd5b505050506060830151604080850151602086015191517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152918216602482015291811660448301529091169063c0c53b8b90606401600060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505050506080830151606084015160208501516040517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201527f000000000000000000000000000000000000000000000000000000000000000083166024820152908216604482015291169063c0c53b8b90606401600060405180830381600087803b15801561154d57600080fd5b505af1158015611561573d6000803e3d6000fd5b50505060a084015160608501516040517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000821660248201529116915063485cc95590604401600060405180830381600087803b15801561160057600080fd5b505af1158015611614573d6000803e3d6000fd5b50505060c084015160808501516040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116915063c4d66de890602401600060405180830381600087803b15801561168b57600080fd5b505af115801561169f573d6000803e3d6000fd5b5050505050505050505050565b600081600001518260200151836040015184606001516040516020016116eb949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60006020828403121561171a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461174557600080fd5b919050565b6000806040838503121561175d57600080fd5b61176683611721565b946020939093013593505050565b6040516080810167ffffffffffffffff811182821017156117be577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803567ffffffffffffffff8116811461174557600080fd5b803563ffffffff8116811461174557600080fd5b60006060828403121561180257600080fd5b6040516060810181811067ffffffffffffffff8211171561184c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061185b83611721565b815261186960208401611721565b602082015261187a60408401611721565b60408201525092915050565b8035801515811461174557600080fd5b60008060008060008587036101a08112156118b057600080fd5b8635955060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156118e457600080fd5b6118ec611774565b6118f8602089016117c4565b8152604088013560208201526060880135604082015261191a608089016117c4565b6060820152945060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608201121561195157600080fd5b5061195a611774565b61196660a088016117dc565b815261197460c088016117dc565b602082015261198560e088016117c4565b60408201526119976101008801611721565b606082015292506119ac8761012088016117f0565b91506119bb6101808701611886565b90509295509295909350565b60e08101610606828473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611a7657611a76611a38565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ae257611ae2611a7b565b500290565b60008219821115611afa57611afa611a7b565b500190565b600082611b0e57611b0e611a38565b500490565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff831660408201526101408101611018606083018473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b60006102808201905063ffffffff808c168352808b16602084015289604084015267ffffffffffffffff8916606084015273ffffffffffffffffffffffffffffffffffffffff881660808401528087511660a084015260ff60208801511660c084015260ff60408801511660e08401528060608801511661010084015280608088015116610120840152506fffffffffffffffffffffffffffffffff60a087015116610140830152611c7961016083018673ffffffffffffffffffffffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8416610180830152825173ffffffffffffffffffffffffffffffffffffffff9081166101a0840152602084015181166101c0840152604084015181166101e0840152606084015181166102008401526080840151811661022084015260a0840151811661024084015260c0840151166102608301529a995050505050505050505056fea164736f6c634300080f000a", } // DeployChainABI is the input ABI used to generate the binding from. diff --git a/bindings/system_config_global.go b/bindings/system_config_global.go index b2a2b03..3492bb4 100644 --- a/bindings/system_config_global.go +++ b/bindings/system_config_global.go @@ -45,7 +45,7 @@ type NitroValidatorPtrs struct { // SystemConfigGlobalMetaData contains all meta data concerning the SystemConfigGlobal contract. var SystemConfigGlobalMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"certManager\",\"type\":\"address\",\"internalType\":\"contractICertManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ATTESTATION_DIGEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ATTESTATION_TBS_PREFIX\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CABUNDLE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CERTIFICATE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DIGEST_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_AGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MODULE_ID_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NONCE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PCRS_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PUBLIC_KEY_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TIMESTAMP_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"USER_DATA_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"certManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractICertManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decodeAttestationTbs\",\"inputs\":[{\"name\":\"attestation\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"deregisterPCR0\",\"inputs\":[{\"name\":\"pcr0\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterSigner\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerPCR0\",\"inputs\":[{\"name\":\"pcr0\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerSigner\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProposer\",\"inputs\":[{\"name\":\"_proposer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validPCR0s\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validSigners\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validateAttestation\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structNitroValidator.Ptrs\",\"components\":[{\"name\":\"moduleID\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"digest\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"pcrs\",\"type\":\"uint256[]\",\"internalType\":\"CborElement[]\"},{\"name\":\"cert\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"cabundle\",\"type\":\"uint256[]\",\"internalType\":\"CborElement[]\"},{\"name\":\"publicKey\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"userData\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"CborElement\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162005f3938038062005f3983398101604081905262000034916200039e565b6001600160a01b0381166080526200004e61dead62000055565b50620003d0565b600054610100900460ff1615808015620000765750600054600160ff909116105b80620000a6575062000093306200019360201b620017191760201c565b158015620000a6575060005460ff166001145b6200010f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000133576000805461ff0019166101001790555b6200013d620001a2565b62000148826200020a565b80156200018f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001fe5760405162461bcd60e51b815260206004820152602b602482015260008051602062005f1983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000106565b6200020862000289565b565b62000214620002f0565b6001600160a01b0381166200027b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000106565b62000286816200034c565b50565b600054610100900460ff16620002e55760405162461bcd60e51b815260206004820152602b602482015260008051602062005f1983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000106565b62000208336200034c565b6033546001600160a01b03163314620002085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000106565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620003b157600080fd5b81516001600160a01b0381168114620003c957600080fd5b9392505050565b608051615b26620003f3600039600081816103ff0152610ec60152615b266000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063739e8484116100f9578063b22bed7e11610097578063cebf08d711610071578063cebf08d71461063b578063e0a655ff14610697578063e8b6d3fe146106f3578063f2fde38b1461074f57600080fd5b8063b22bed7e146105b9578063ba58e82a14610615578063c4d66de81461062857600080fd5b80639cc3eb48116100d35780639cc3eb48146104c0578063a8e4fb901461051c578063a903a2771461053c578063ae9511491461055d57600080fd5b8063739e8484146103fa5780638da5cb5b146104465780639adb2d681461046457600080fd5b80633893af6d116101665780636378aad5116101405780636378aad5146103175780636a73b00b146103735780636be1e68b14610396578063715018a6146103f257600080fd5b80633893af6d1461029e57806350697a3f146102c557806354fd4d50146102d857600080fd5b80631fb4a228116101a25780631fb4a2281461021e578063295840d9146102315780632c68fa02146102645780632d4bad8a1461027757600080fd5b806305f7aead146101c95780630ba24fe0146101f25780630dcaeaf214610207575b600080fd5b6101dc6101d736600461514a565b610762565b6040516101e991906151e9565b60405180910390f35b6102056102003660046152a9565b610f92565b005b610210610e1081565b6040519081526020016101e9565b61020561022c3660046152a9565b610fe6565b61025461023f3660046152df565b60666020526000908152604090205460ff1681565b60405190151581526020016101e9565b610205610272366004615341565b611035565b6102107f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c81565b6102107f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef81565b6102056102d3366004615341565b611084565b604080518082018252600581527f302e302e31000000000000000000000000000000000000000000000000000000602082015290516101e991906153f9565b60408051808201909152600581527f6e6f6e63650000000000000000000000000000000000000000000000000000006020909101526102107f7ab1577440dd7bedf920cb6de2f9fc6bf7ba98c78c85a3fa1f8311aac95e175981565b6102546103813660046152a9565b60676020526000908152604090205460ff1681565b60408051808201909152600681527f64696765737400000000000000000000000000000000000000000000000000006020909101526102107f682a7e258d80bd2421d3103cbe71e3e3b82138116756b97b8256f061dc2f11fb81565b6102056110e3565b6104217f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b60335473ffffffffffffffffffffffffffffffffffffffff16610421565b60408051808201909152600981527f6d6f64756c655f696400000000000000000000000000000000000000000000006020909101526102107f8ce577cf664c36ba5130242bf5790c2675e9f4e6986a842b607821bee25372ee81565b60408051808201909152600881527f636162756e646c650000000000000000000000000000000000000000000000006020909101526102107f8a8cb7aa1da17ada103546ae6b4e13ccc2fafa17adf5f93925e0a0a4e5681a6a81565b6065546104219073ffffffffffffffffffffffffffffffffffffffff1681565b61054f61054a36600461540c565b6110f7565b6040516101e9929190615441565b60408051808201909152600b81527f63657274696669636174650000000000000000000000000000000000000000006020909101526102107f925cec779426f44d8d555e01d2683a3a765ce2fa7562ca7352aeb09dfc57ea6a81565b60408051808201909152600481527f70637273000000000000000000000000000000000000000000000000000000006020909101526102107f61585f8bc67a4b6d5891a4639a074964ac66fc2241dc0b36c157dc101325367a81565b61020561062336600461546f565b61123e565b6102056106363660046152a9565b6114c6565b60408051808201909152600981527f757365725f6461746100000000000000000000000000000000000000000000006020909101526102107f5e4ea5393e4327b3014bc32f2264336b0d1ee84a4cfd197c8ad7e1e16829a16a81565b60408051808201909152600981527f74696d657374616d7000000000000000000000000000000000000000000000006020909101526102107f4ebf727c48eac2c66272456b06a885c5cc03e54d140f63b63b6fd10c1227958e81565b60408051808201909152600a81527f7075626c69635f6b6579000000000000000000000000000000000000000000006020909101526102107fc7b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a481565b61020561075d3660046152a9565b611662565b6107bb60405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b60006107c684611735565b905060006107d78260000151611fcd565b11610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f206d6f64756c65206964000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000816020015167ffffffffffffffff16116108bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f2074696d657374616d700000000000000000000000000000000000000000604482015260640161083a565b60008160a00151511161092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f20636162756e646c65000000000000000000000000000000000000000000604482015260640161083a565b7f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef61096282604001518661200e90919063ffffffff16565b146109c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c696420646967657374000000000000000000000000000000000000604482015260640161083a565b8060600151516001111580156109e55750602081606001515111155b610a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f696e76616c696420706372730000000000000000000000000000000000000000604482015260640161083a565b60c081015160ff1660f61480610a875750610a698160c00151611fcd565b600111158015610a875750610400610a848260c00151611fcd565b11155b610aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420707562206b65790000000000000000000000000000000000604482015260640161083a565b60e081015160ff1660f61480610b115750610200610b0e8260e00151611fcd565b11155b610b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c696420757365722064617461000000000000000000000000000000604482015260640161083a565b61010081015160ff1660f61480610b9d5750610200610b9a826101000151611fcd565b11155b610c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964206e6f6e636500000000000000000000000000000000000000604482015260640161083a565b60005b816060015151811015610cfa57610c3982606001518281518110610c2c57610c2c6154db565b6020026020010151611fcd565b60201480610c5f5750610c5b82606001518281518110610c2c57610c2c6154db565b6030145b80610c825750610c7e82606001518281518110610c2c57610c2c6154db565b6040145b610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c696420706372000000000000000000000000000000000000000000604482015260640161083a565b80610cf281615539565b915050610c06565b506000610d1482608001518661204090919063ffffffff16565b905060008260a001515167ffffffffffffffff811115610d3657610d36615007565b604051908082528060200260200182016040528015610d6957816020015b6060815260200190600190039081610d545790505b50905060005b8360a0015151811015610e8557610d958460a001518281518110610c2c57610c2c6154db565b600111158015610dbf5750610400610dbc8560a001518381518110610c2c57610c2c6154db565b11155b610e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636162756e646c6520636572740000000000000000000000604482015260640161083a565b610e558460a001518281518110610e3e57610e3e6154db565b60200260200101518861204090919063ffffffff16565b828281518110610e6757610e676154db565b60200260200101819052508080610e7d90615539565b915050610d6f565b506040517f5b608e2a00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635b608e2a90610efd9086908690600401615571565b6000604051808303816000875af1158015610f1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f62919081019061565d565b90506000610f738860008a51612067565b9050610f848260800151828961218e565b509293505050505b92915050565b610f9a61220c565b73ffffffffffffffffffffffffffffffffffffffff16600090815260676020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b610fee61220c565b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61103d61220c565b6001606660008484604051611053929190615715565b6040518091039020815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61108c61220c565b6066600083836040516110a0929190615715565b6040805191829003909120825260208201929092520160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b6110eb61220c565b6110f5600061228d565b565b60608060006001905083600081518110611113576111136154db565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167fd20000000000000000000000000000000000000000000000000000000000000003611164575060025b60006111708583612304565b9050600061117e8683612314565b9050600061118c8783612328565b9050600061119a8883612328565b90506000856111a886612340565b6111b29190615725565b905060006111bf85612340565b6111c885612340565b6111d29190615725565b905060006111e18b8985612365565b905060006111f96111f188612340565b8d9085612365565b905061120782858386612440565b9a5061122e605086901c69ffffffffffffffffffff1661122687611fcd565b8e9190612365565b9950505050505050505050915091565b61124661220c565b60006112bb85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8901819004810282018101909252878152925087915086908190840183828082843760009201919091525061076292505050565b9050600061132082606001516000815181106112d9576112d96154db565b602002602001015187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061200e9050565b60008181526066602052604090205490915060ff1661139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964207063723020696e206174746573746174696f6e0000000000604482015260640161083a565b42610e10836020015167ffffffffffffffff166113b8919061573c565b1161141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6174746573746174696f6e20746f6f206f6c6400000000000000000000000000604482015260640161083a565b60006114688360c0015188888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506120409050565b805160209182012073ffffffffffffffffffffffffffffffffffffffff16600090815260679091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550505050505050565b600054610100900460ff16158080156114e65750600054600160ff909116105b806115005750303b158015611500575060005460ff166001145b61158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161083a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156115ea57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6115f2612631565b6115fb82611662565b801561165e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61166a61220c565b73ffffffffffffffffffffffffffffffffffffffff811661170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161083a565b6117168161228d565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61178e60405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b601260208301207f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c1461181d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c6964206174746573746174696f6e20707265666978000000000000604482015260640161083a565b600061182a836012612304565b905060006118488469ffffffffffffffffffff605085901c166126d0565b90506118a360405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b60006118ae84612340565b90505b806118bb84612340565b1015611fc4576118cb86846126e0565b925060006118d9878561200e565b60408051808201909152600981527f6d6f64756c655f6964000000000000000000000000000000000000000000000060209091015290507f731a883099b3c945aecfdbd40a86f3d98a160b1967957bd49f87de411dac8d12810161194b5761194187856126e0565b8084529350611fbe565b60408051808201909152600681527f64696765737400000000000000000000000000000000000000000000000000006020909101527f97d581da727f42dbde2cefc3418e1c1c47dec7ee98a946847da90f9e23d0ee0581016119bf576119b187856126e0565b604084018190529350611fbe565b60408051808201909152600b81527f63657274696669636174650000000000000000000000000000000000000000006020909101527f6da313886bd90bb272aaa1fe2d97c5c589a31d058a9d358cad514f6203a815968101611a3357611a258785612328565b608084018190529350611fbe565b60408051808201909152600a81527f7075626c69635f6b6579000000000000000000000000000000000000000000006020909101527f384d7fe6330242cf0039a6ae26b447a361d47bcbeee5fff4a502acc319a0a85c8101611aa757611a9987856126f8565b60c084018190529350611fbe565b60408051808201909152600981527f757365725f6461746100000000000000000000000000000000000000000000006020909101527fa1b15ac6c1bcd84cfeb43cd0dd9bcc94f2e117b5b302e68375281e1e97d65e968101611b1b57611b0d87856126f8565b60e084018190529350611fbe565b60408051808201909152600581527f6e6f6e63650000000000000000000000000000000000000000000000000000006020909101527f854ea88bbf22841206df34921d06039408456738737a5c05e07cee5536a1e8a78101611b9057611b8187856126f8565b61010084018190529350611fbe565b60408051808201909152600981527f74696d657374616d7000000000000000000000000000000000000000000000006020909101527fb1408d83b7153d399d8dba94f9577a3a33fc1ab2ebf09c49c4902ef3edd86a728101611c1657611bf68785612710565b9350611c028460a01c90565b67ffffffffffffffff166020840152611fbe565b60408051808201909152600881527f636162756e646c650000000000000000000000000000000000000000000000006020909101527f75734855e25e8525efcab95194b1ec333d0505e8520a06c6da1f5f5b1a97e5968101611d2f57611c7c8785612728565b9350611c888460a01c90565b67ffffffffffffffff1667ffffffffffffffff811115611caa57611caa615007565b604051908082528060200260200182016040528015611cd3578160200160208202803683370190505b5060a084015260005b8360a0015151811015611d2957611cf38886612328565b9450848460a001518281518110611d0c57611d0c6154db565b602090810291909101015280611d2181615539565b915050611cdc565b50611fbe565b60408051808201909152600481527f70637273000000000000000000000000000000000000000000000000000000006020909101527f9ea7a0743985b492a76e5b9c65f8b69b539903ddbe23f4c93ea823efecdac9868101611f5c57611d958785612314565b9350611da18460a01c90565b67ffffffffffffffff1667ffffffffffffffff811115611dc357611dc3615007565b604051908082528060200260200182016040528015611dec578160200160208202803683370190505b50606084015260005b836060015151811015611d2957611e0c8886612710565b94506000611e1a8660a01c90565b67ffffffffffffffff1690508460600151518110611e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420706372206b65792076616c75650000000000000000000000604482015260640161083a565b84606001518181518110611eaa57611eaa6154db565b6020026020010151600014611f1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6475706c696361746520706372206b6579000000000000000000000000000000604482015260640161083a565b611f258987612328565b95508585606001518281518110611f3e57611f3e6154db565b60209081029190910101525080611f5481615539565b915050611df5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206174746573746174696f6e206b6579000000000000000000604482015260640161083a565b506118b1565b50949350505050565b600081604060ff82161480611fe557508060ff166060145b1561200557611ff48360a01c90565b67ffffffffffffffff169392505050565b50600092915050565b6000612039605083901c69ffffffffffffffffffff1661202d84611fcd565b85919091016020012090565b9392505050565b6060612039605083901c69ffffffffffffffffffff1661205f84611fcd565b859190612365565b604080516101008101825267cbbb9d5dc1059ed8815267629a292a367cd5076020820152679159015a3070dd179181019190915267152fecd8f70e59396060828101919091526767332667ffc00b316080830152678eb44a876858151160a083015267db0c2e0d64f98fa760c08301526747b5481dbefa4fa460e0830152906120f285858584612740565b80516020808301516040808501516060860151608087015160a088015184517fffffffffffffffff00000000000000000000000000000000000000000000000060c0998a1b81169882019890985295881b8716602887015292871b8616603086015290861b85166038850152851b84169183019190915290921b1660488201526050016040516020818303038152906040529150509392505050565b6121a1612199612fae565b8383866130c9565b612207576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c696420736967000000000000000000000000000000000000000000604482015260640161083a565b505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161083a565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061203983836040600161337a565b60006120398361232384612340565b6126d0565b60006120398361233784612340565b6040600161337a565b600061234b82611fcd565b610f8c9069ffffffffffffffffffff605085901c1661573c565b8251606090612374838561573c565b11156123dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b8167ffffffffffffffff8111156123f5576123f5615007565b6040519080825280601f01601f19166020018201604052801561241f576020820181803683370190505b5090506020808201908585010161243782828661364c565b50509392505050565b60608161244e85600d61573c565b612458919061573c565b67ffffffffffffffff81111561247057612470615007565b6040519080825280601f01601f19166020018201604052801561249a576020820181803683370190505b509050608460f81b816000815181106124b5576124b56154db565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350606a60f81b816001815181106124fc576124fc6154db565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f40000000000000000000000000000000000000000000000000000000000000008161255886600c61573c565b81518110612568576125686154db565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060408051808201909152600a81527f5369676e61747572653100000000000000000000000000000000000000000000602080830191825283810191908881019087016125ef6125e785600261573c565b84600a61364c565b6126046125fd85600c61573c565b838b61364c565b6126248961261386600d61573c565b61261d919061573c565b828961364c565b5050505050949350505050565b600054610100900460ff166126c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161083a565b6110f56136c1565b6000612039838360a0600161337a565b6000612039836126ef84612340565b6060600161337a565b60006120398361270784612340565b6040600061337a565b60006120398361271f84612340565b6000600161337a565b60006120398361273784612340565b6080600161337a565b60408051610a008101825267428a2f98d728ae228152677137449123ef65cd602082015267b5c0fbcfec4d3b2f9181019190915267e9b5dba58189dbbc6060820152673956c25bf348b53860808201526759f111f1b605d01960a082015267923f82a4af194f9b60c082015267ab1c5ed5da6d811860e082015267d807aa98a30302426101008201526712835b0145706fbe61012082015267243185be4ee4b28c61014082015267550c7dc3d5ffb4e26101608201526772be5d74f27b896f6101808201526780deb1fe3b1696b16101a0820152679bdc06a725c712356101c082015267c19bf174cf6926946101e082015267e49b69c19ef14ad261020082015267efbe4786384f25e3610220820152670fc19dc68b8cd5b561024082015267240ca1cc77ac9c65610260820152672de92c6f592b0275610280820152674a7484aa6ea6e4836102a0820152675cb0a9dcbd41fbd46102c08201526776f988da831153b56102e082015267983e5152ee66dfab61030082015267a831c66d2db4321061032082015267b00327c898fb213f61034082015267bf597fc7beef0ee461036082015267c6e00bf33da88fc261038082015267d5a79147930aa7256103a08201526706ca6351e003826f6103c082015267142929670a0e6e706103e08201526727b70a8546d22ffc610400820152672e1b21385c26c926610420820152674d2c6dfc5ac42aed6104408201526753380d139d95b3df61046082015267650a73548baf63de61048082015267766a0abb3c77b2a86104a08201526781c2c92e47edaee66104c08201526792722c851482353b6104e082015267a2bfe8a14cf1036461050082015267a81a664bbc42300161052082015267c24b8b70d0f8979161054082015267c76c51a30654be3061056082015267d192e819d6ef521861058082015267d69906245565a9106105a082015267f40e35855771202a6105c082015267106aa07032bbd1b86105e08201526719a4c116b8d2d0c8610600820152671e376c085141ab53610620820152672748774cdf8eeb996106408201526734b0bcb5e19b48a861066082015267391c0cb3c5c95a63610680820152674ed8aa4ae3418acb6106a0820152675b9cca4f7763e3736106c082015267682e6ff3d6b2b8a36106e082015267748f82ee5defb2fc6107008201526778a5636f43172f606107208201526784c87814a1f0ab72610740820152678cc702081a6439ec6107608201526790befffa23631e2861078082015267a4506cebde82bde96107a082015267bef9a3f7b2c679156107c082015267c67178f2e372532b6107e082015267ca273eceea26619c61080082015267d186b8c721c0c20761082082015267eada7dd6cde0eb1e61084082015267f57d4f7fee6ed1786108608201526706f067aa72176fba610880820152670a637dc5a2c898a66108a082015267113f9804bef90dae6108c0820152671b710b35131c471b6108e08201526728db77f523047d846109008201526732caab7b40c72493610920820152673c9ebe0a15c9bebc61094082015267431d67c49c100d4c610960820152674cc5d4becb3e42b661098082015267597f299cfc657e2a6109a0820152675fcb6fab3ad6faec6109c0820152676c44198c4a4758176109e08201526000612bff868686613761565b905060808151612c0f9190615783565b15612c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50414444494e475f4552524f5200000000000000000000000000000000000000604482015260640161083a565b612c7e614f5e565b612c86614f7d565b612c8e614f9c565b6000612c9b608089615797565b612ca69060806157ab565b905060005b85518201811015612fa15781811015612cd057612ccb8b84838d01613870565b612cdd565b612cdd8684848403613870565b60005b6010811015612d2e57838160108110612cfb57612cfb6154db565b6020020151868260508110612d1257612d126154db565b67ffffffffffffffff9092166020929092020152600101612ce0565b5060105b6050811015612de457856010820360508110612d5057612d506154db565b6020020151612d7787600f840360508110612d6d57612d6d6154db565b60200201516138d7565b876007840360508110612d8c57612d8c6154db565b6020020151612db3896002860360508110612da957612da96154db565b6020020151613906565b010101868260508110612dc857612dc86154db565b67ffffffffffffffff9092166020929092020152600101612d32565b5060005b6008811015612e3657888160088110612e0357612e036154db565b6020020151858260088110612e1a57612e1a6154db565b67ffffffffffffffff9092166020929092020152600101612de8565b5060005b6050811015612f44576000868260508110612e5757612e576154db565b6020020151898360508110612e6e57612e6e6154db565b6020020151608088015160a089015160c08a01518219169116186080890151612e969061392d565b89600760200201510101010190506000612ecf878260200201518860016020020151896002602002015180821690831691909216181890565b8751612eda90613950565b60c08901805167ffffffffffffffff90811660e08c015260a08b018051821690925260808b018051821690925260608b0180518701821690925260408b018051821690925260208b01805182169092528a5181169091529101909201909116865250600101612e3a565b5060005b6008811015612f9857848160088110612f6357612f636154db565b6020020151898260088110612f7a57612f7a6154db565b6020020180519190910167ffffffffffffffff169052600101612f48565b50608001612cab565b5050505050505050505050565b612fee6040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101408101909152603060e082018181528291615a8a61010084013981526020016040518060600160405280603081526020016159ca603091398152602001604051806060016040528060308152602001615a5a6030913981526020016040518060600160405280603081526020016159fa603091398152602001604051806060016040528060308152602001615aea603091398152602001604051806060016040528060308152602001615aba603091398152602001604051806060016040528060308152602001615a2a603091399052919050565b60006130f66040518060800160405280600081526020016000815260200160008152602001600081525090565b6130ff84613973565b6020830152815261310f83613973565b6060830152604080830191909152805160e08101909152865160009190819061313790613a26565b81526020016131498960200151613a26565b815260200161315b8960400151613a26565b815260200161316d8960600151613a26565b815260200161317f8960800151613a26565b81526020016131918960a00151613a26565b81526020016131a38960c00151613a26565b815250905060006131b78260800151613abc565b83516020810151905191925015901516806131e4575060006131e184600001518460a00151613b32565b12155b80613202575061320283602001516000602082015191511591141690565b8061321e5750600061321c84602001518460c00151613b32565b135b1561322f5760009350505050613372565b6132518183608001518460000151856020015187604001518860600151613bd8565b6132615760009350505050613372565b865160308110156132a55760408051603080825260608201909252600091602082018180368337509192506132a291505060208a0183830360500184613cbc565b97505b5060006132c4826132b58a613a26565b86602001518660a00151613cca565b905060006132e083866000015187602001518760a00151613cca565b905060006132ee6003613ddb565b9050600061331a8587608001518489600001518a604001518b606001518d604001518e60600151613dfd565b90506133338587608001518489600001518589896141e4565b90508094508195505050505061336a6133528484848860800151613cca565b86516020808201519083015191519251911491141690565b955050505050505b949350505050565b60008085858151811061338f5761338f6154db565b602001015160f81c60f81b60e060f81b1660f81c905060008686815181106133b9576133b96154db565b60209101015160f81c601f16905060ff821660e00361346d578315806133e357508060ff16601614155b613449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6e756c6c2076616c756520666f7220726571756972656420656c656d656e7400604482015260640161083a565b61346460ff8383171661345d88600161573c565b60501b1790565b92505050613372565b8460ff168260ff16146134dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f756e657870656374656420747970650000000000000000000000000000000000604482015260640161083a565b8060ff1660180361352e5761346460ff83166134f988600261573c565b896135058a600161573c565b81518110613515576135156154db565b016020015160f81c60a01b60509190911b919091171790565b8060ff166019036135755761346460ff831661354b88600361573c565b6135606135598a600161573c565b8b9061436e565b61ffff1660a01b60509190911b919091171790565b8060ff16601a036135be5761346460ff831661359288600561573c565b6135a76135a08a600161573c565b8b906143f1565b63ffffffff1660a01b60509190911b919091171790565b8060ff16601b0361360b5761346460ff83166135db88600961573c565b6135f06135e98a600161573c565b8b90614474565b67ffffffffffffffff1660a01b60509190911b919091171790565b61364160ff831661361d88600161573c565b60501b1774ff000000000000000000000000000000000000000060a084901b161790565b979650505050505050565b60208110613684578151835261366360208461573c565b925061367060208361573c565b915061367d602082615725565b905061364c565b80156122075760006001613699836020615725565b6136a590610100615908565b6136af9190615725565b83518551821691191617845250505050565b600054610100900460ff16613758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161083a565b6110f53361228d565b606060006137708360086157ab565b60c01b90506000613782608085615783565b9050600060708210156137a15761379a826077615725565b90506137af565b6137ac8260f7615725565b90505b60008167ffffffffffffffff8111156137ca576137ca615007565b6040519080825280601f01601f1916602001820160405280156137f4576020820181803683370190505b509050600061381984613807898b61573c565b6138119190615725565b8a9086612365565b6040519091506138539082907f80000000000000000000000000000000000000000000000000000000000000009085908990602001615914565b604051602081830303815290604052955050505050509392505050565b60005b60108110156138d15761389b61388a8260086157ab565b613894908461573c565b8590614474565b8382601081106138ad576138ad6154db565b67ffffffffffffffff90921660209290920201526138ca81615539565b9050613873565b50505050565b600060078267ffffffffffffffff16901c6138f38360086144f7565b6138fe8460016144f7565b181892915050565b600060068267ffffffffffffffff16901c61392283603d6144f7565b6138fe8460136144f7565b600061393a8260296144f7565b6139458360126144f7565b6138fe84600e6144f7565b600061395d8260276144f7565b6139688360226144f7565b6138fe84601c6144f7565b60008082516060146139e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f742037363800000000000000000000000000000000000000604482015260640161083a565b60408051608081018252925082019050600082526020830151601083015260308301516020830152600081526050830151601082015260608301516020820152915091565b60008151603014613a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f742033383400000000000000000000000000000000000000604482015260640161083a565b604080518082019091529050600081526020820151601082015260308201516020820152919050565b6000613ad061036060408051918201905290565b6060610120820152602061014082018190526040610160830181905260016101e0840152845161020084015284820180516102208501526102408401829052610260840192909252610280830152925161030082015291516103208301525090565b815181516000919080821115613b4d57600192505050610f8c565b80821015613b7f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610f8c565b50506020838101519083015180821115613b9e57600192505050610f8c565b80821015613bd0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610f8c565b505092915050565b602082015182516000911590151680613bff57506020868101519084015187518551149114165b80613c11575060208201518251159015165b80613c2a57506020868101519083015187518451149114165b15613c3757506000613cb2565b6000613c4588846002614534565b90506000613c5589866003614534565b6020880151885191925015901516613c7f57613c7c81613c768b888b614579565b8a61466b565b90505b6020860151865115901516613c9c57613c9981878a61466b565b90505b6020818101519083015191519251911491141690505b9695505050505050565b8082828560045afa50505050565b6000613cd78584846146cf565b9050613d9c8482876060018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b60608552602085602001526040856040015260018560c0015281518560e0015260208201518561010001526040816101208760055afa50949350505050565b6000613ded6040808051918201905290565b6000815260208101929092525090565b613e05614fbb565b613e0e8561475d565b613e178561475d565b613e216001613ddb565b608084018051604081019290925260208281019390935292905290518051910151613e61918b918b918b918b91908760045b602002015160400151614784565b61010084018051604080820193909352602081810194909452939093526080840151805181840151919092015193518051930151613eb9948e948e948e948e949193909290918a60085b602002015160400151614941565b6101808401516040810191909152602081019190915252613ed98361475d565b613ee28361475d565b613eec6001613ddb565b60208085018051604081019390935282820193909352929052518051910151613f20918b918b918b918b9190876001613e53565b6040808501519081019190915260208181019290925291909152808201518051910151613f78918b918b918b918b91908760015b60209081029190910151604090810151908a015180519201519091908a6002613eab565b606084015160408101919091526020818101929092529190915260808201518051910151613fcf918b918b918b918b91908760045b60209081029190910151604001518982015180519201519091908a6001613eab565b60a084015160408101919091526020818101929092529190915260808201518051910151614008918b918b918b918b9190876004613f54565b60c084015160408101919091526020818101929092529190915260808201518051910151614060918b918b918b918b91908760045b602090810291909101516040015160608a015180519201519091908a6003613eab565b60e0840151604081019190915260208181019290925291909152610100820151805191015161409a918b918b918b918b9190876008613fad565b61012084015160408101919091526020818101929092529190915261010082015180519101516140d5918b918b918b918b9190876008613f54565b6101408401516040810191909152602081810192909252919091526101008201518051910151614110918b918b918b918b919087600861403d565b610160840151604081019190915260208181019290925291909152610180820151805191015161414b918b918b918b918b919087600c613fad565b6101a08401516040810191909152602081810192909252919091526101808201518051910151614186918b918b918b918b919087600c613f54565b6101c084015160408101919091526020818101929092529190915261018082015180519101516141c1918b918b918b918b919087600c61403d565b6101e0840151604081019190915260208101919091525298975050505050505050565b815181516000918291829182916141fa83613ddb565b95506142066000613ddb565b94506142126001613ddb565b935060025b60b881116142bd5761422e8e8e8e8e8b8b8b614784565b919850965094506142448e8e8e8e8b8b8b614784565b9198509650945060b881900382811c6003169084901c60021b600c1617935083156142b55760008a856010811061427d5761427d6154db565b602002015190506142ac8f8f8f8f8560005b6020020151866001602002015187600260200201518f8f8f614941565b91995097509550505b600201614217565b5050506020868101519086015160025b610100811161435c576142e58e8e8e8e8b8b8b614784565b919850965094506142fb8e8e8e8e8b8b8b614784565b9198509650945061010081900382811c6003169084901c60021b600c1617935083156143545760008a8560108110614335576143356154db565b6020020151905061434b8f8f8f8f85600061428f565b91995097509550505b6002016142cd565b505050505b9750975097945050505050565b600061437b82600261573c565b835110156143e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160f01c90565b60006143fe82600461573c565b83511015614468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160e01c90565b600061448182600861573c565b835110156144eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160c01c90565b600067ffffffffffffffff8381169083161c6145148360406159a0565b67ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b60006145466040808051918201905290565b9050610240840193508251846060015260208301518460800152818460a001526040816101008660055afa509392505050565b600061458b6040808051918201905290565b9050614651838361018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040816101208660055afa509392505050565b600061467d6040808051918201905290565b60208581015185820151810191830182905285518751019110018152905060006146a78284613b32565b1261203957602080820180519184015182039081905283518351929091119103038152612039565b60006146e16040808051918201905290565b9050614715826146f16002613ddb565b60208281015190820151810360c089018190529151925191119190030360a0860152565b604084526040846020015260408460400152825184606001526020830151846080015281518460e0015260208201518461010001526040816101208660055afa509392505050565b600061476f6040808051918201905290565b90508151815260208201516020820152919050565b600080600061479d866000602082015191511591141690565b80156147b0575060208501518551159015165b156147de576147bf6000613ddb565b6147c96000613ddb565b6147d36001613ddb565b925092509250614361565b60006147eb8b8787614579565b90506147f7818b614a9a565b6148028b8289614579565b935061480f8b8588614ae4565b614819848b614a9a565b6148258b886002614534565b96506148328b888b614579565b92506148408b866002614534565b945061484d8b868a614ae4565b61485883868c614bc0565b6148648b846002614534565b915061487187858c614c16565b600061487d8b89614c35565b905061488a83828d614bc0565b6020808c015181850151810391830182905284518d519290911091030381526148b58886838e614c6d565b6148c08c8986614ae4565b6148cb8c8884614579565b96506148d98c886002614cbd565b6148e3878c614a9a565b6020808c015181890151810391830182905288518d5192909110910303815261490e8489838e614c6d565b61491a8c868486614cec565b6149278c84846002614dc9565b6149328c8484614ae4565b50509750975097945050505050565b600080600061495a896000602082015191511591141690565b801561496d575060208801518851159015165b156149985761497b8661475d565b6149848661475d565b61498d8661475d565b925092509250614a8a565b602086015186511590151680156149b6575060208501518551159015165b156149d6576149c48961475d565b6149cd8961475d565b61498d8961475d565b6149e18d8986614579565b92506149ee8d8689614579565b91506149fb8d8a86614579565b9050614a088d8789614579565b6020808201519083015182518451939850911491141615614a675760208281015190840151835185511491141615614a495761498d8d8d8d8d8d8d8d614784565b614a536000613ddb565b614a5d6000613ddb565b61498d6001613ddb565b614a728d8886614579565b9950614a838d8b838f898789614df9565b9250925092505b9a509a509a975050505050505050565b6020820180518351600190811b60ff83901c1785521b90526000614abe8383613b32565b1261165e5760208281018051918301518203908190529151835191909211919003039052565b614ba8828261018086018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120830192506040826101208560055afa50505050565b614be28383602082810180519183015182019081905291518351019110019052565b6000614bee8483613b32565b1261220757602080840180519183015182039081905282518551929091119103038352505050565b6020808301518351600190811b60ff83901c1786521b90840152614be2565b6000614c476040808051918201905290565b602080850151818501518103918301829052845186519290911091030381529050610f8c565b602083810151838201518101918601829052835185510191100184526000614c958583613b32565b126138d1576020808501805191830151820390819052825186519290911191030384526138d1565b610240830192508151836060015260208201518360800152808360a001526040826101008560055afa50505050565b614db0828261018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040836101208660055afa5050505050565b610240840193508151846060015260208201518460800152808460a001526040836101008660055afa5050505050565b600080600080614e098887614c35565b9050614e1685828a61466b565b6020808a0151818a0151810391840182905289518b519290911091030382529250614e4289828a61466b565b93506000614e528c866002614534565b9050614e608c856002614534565b9250614e6d8c848d614ae4565b614e78888b8b61466b565b9750614e858c8983614ae4565b6020808a0151818a0151810391840182905289518b51929091109103038252614eaf83838b614bc0565b6000614ebc8d8388614579565b9050614ec98d8786614ae4565b614ed48d8c84614579565b6020808c015181870151810391860182905286518d519290911091030384529a50614f008b848c614bc0565b614f0b8d868d614ae4565b614f168d8883614579565b6020808c015181830151810391860182905282518d519290911091030384529650614f4285848c614bc0565b614f4e8d85838f614cec565b5050509750975097945050505050565b60405180610a0001604052806050906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b6040518061020001604052806010905b614fd3614fe9565b815260200190600190039081614fcb5790505090565b60405180606001604052806003906020820280368337509192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561505957615059615007565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156150a6576150a6615007565b604052919050565b600067ffffffffffffffff8211156150c8576150c8615007565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261510557600080fd5b8135615118615113826150ae565b61505f565b81815284602083860101111561512d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561515d57600080fd5b823567ffffffffffffffff8082111561517557600080fd5b615181868387016150f4565b9350602085013591508082111561519757600080fd5b506151a4858286016150f4565b9150509250929050565b600081518084526020808501945080840160005b838110156151de578151875295820195908201906001016151c2565b509495945050505050565b602081528151602082015260006020830151615211604084018267ffffffffffffffff169052565b506040830151606083015260608301516101208060808501526152386101408501836151ae565b9150608085015160a085015260a08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030160c086015261527d83826151ae565b60c087015160e08781019190915287015161010080880191909152909601519190940152509192915050565b6000602082840312156152bb57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461203957600080fd5b6000602082840312156152f157600080fd5b5035919050565b60008083601f84011261530a57600080fd5b50813567ffffffffffffffff81111561532257600080fd5b60208301915083602082850101111561533a57600080fd5b9250929050565b6000806020838503121561535457600080fd5b823567ffffffffffffffff81111561536b57600080fd5b615377858286016152f8565b90969095509350505050565b60005b8381101561539e578181015183820152602001615386565b838111156138d15750506000910152565b600081518084526153c7816020860160208601615383565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061203960208301846153af565b60006020828403121561541e57600080fd5b813567ffffffffffffffff81111561543557600080fd5b613372848285016150f4565b60408152600061545460408301856153af565b828103602084015261546681856153af565b95945050505050565b6000806000806040858703121561548557600080fd5b843567ffffffffffffffff8082111561549d57600080fd5b6154a9888389016152f8565b909650945060208701359150808211156154c257600080fd5b506154cf878288016152f8565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361556a5761556a61550a565b5060010190565b60408152600061558460408301856153af565b6020838203818501528185518084528284019150828160051b85010183880160005b838110156155f2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08784030185526155e08383516153af565b948601949250908501906001016155a6565b50909998505050505050505050565b8051600781900b811461561357600080fd5b919050565b600082601f83011261562957600080fd5b8151615637615113826150ae565b81815284602083860101111561564c57600080fd5b613372826020830160208701615383565b60006020828403121561566f57600080fd5b815167ffffffffffffffff8082111561568757600080fd5b9083019060a0828603121561569b57600080fd5b6156a3615036565b825180151581146156b357600080fd5b8152602083015182811681146156c857600080fd5b60208201526156d960408401615601565b6040820152606083015160608201526080830151828111156156fa57600080fd5b61570687828601615618565b60808301525095945050505050565b8183823760009101908152919050565b6000828210156157375761573761550a565b500390565b6000821982111561574f5761574f61550a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261579257615792615754565b500690565b6000826157a6576157a6615754565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157e3576157e361550a565b500290565b600181815b8085111561584157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156158275761582761550a565b8085161561583457918102915b93841c93908002906157ed565b509250929050565b60008261585857506001610f8c565b8161586557506000610f8c565b816001811461587b5760028114615885576158a1565b6001915050610f8c565b60ff8411156158965761589661550a565b50506001821b610f8c565b5060208310610133831016604e8410600b84101617156158c4575081810a610f8c565b6158ce83836157e8565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156159005761590061550a565b029392505050565b60006120398383615849565b60008551615926818460208a01615383565b7fff0000000000000000000000000000000000000000000000000000000000000086169083019081528451615962816001840160208901615383565b8082019150507fffffffffffffffff000000000000000000000000000000000000000000000000841660018201526009810191505095945050505050565b600067ffffffffffffffff838116908316818110156159c1576159c161550a565b03939250505056feb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5fffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffcffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffffa164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + Bin: "0x60a06040523480156200001157600080fd5b5060405162005f7038038062005f7083398101604081905262000034916200039e565b6001600160a01b0381166080526200004e61dead62000055565b50620003d0565b600054610100900460ff1615808015620000765750600054600160ff909116105b80620000a6575062000093306200019360201b620017471760201c565b158015620000a6575060005460ff166001145b6200010f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000133576000805461ff0019166101001790555b6200013d620001a2565b62000148826200020a565b80156200018f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001fe5760405162461bcd60e51b815260206004820152602b602482015260008051602062005f5083398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000106565b6200020862000289565b565b62000214620002f0565b6001600160a01b0381166200027b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000106565b62000286816200034c565b50565b600054610100900460ff16620002e55760405162461bcd60e51b815260206004820152602b602482015260008051602062005f5083398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000106565b62000208336200034c565b6033546001600160a01b03163314620002085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000106565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620003b157600080fd5b81516001600160a01b0381168114620003c957600080fd5b9392505050565b608051615b5d620003f3600039600081816103ff0152610ec60152615b5d6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063739e8484116100f9578063b22bed7e11610097578063cebf08d711610071578063cebf08d71461063b578063e0a655ff14610697578063e8b6d3fe146106f3578063f2fde38b1461074f57600080fd5b8063b22bed7e146105b9578063ba58e82a14610615578063c4d66de81461062857600080fd5b80639cc3eb48116100d35780639cc3eb48146104c0578063a8e4fb901461051c578063a903a2771461053c578063ae9511491461055d57600080fd5b8063739e8484146103fa5780638da5cb5b146104465780639adb2d681461046457600080fd5b80633893af6d116101665780636378aad5116101405780636378aad5146103175780636a73b00b146103735780636be1e68b14610396578063715018a6146103f257600080fd5b80633893af6d1461029e57806350697a3f146102c557806354fd4d50146102d857600080fd5b80631fb4a228116101a25780631fb4a2281461021e578063295840d9146102315780632c68fa02146102645780632d4bad8a1461027757600080fd5b806305f7aead146101c95780630ba24fe0146101f25780630dcaeaf214610207575b600080fd5b6101dc6101d7366004615181565b610762565b6040516101e99190615220565b60405180910390f35b6102056102003660046152e0565b610f92565b005b610210610e1081565b6040519081526020016101e9565b61020561022c3660046152e0565b610fe6565b61025461023f366004615316565b60666020526000908152604090205460ff1681565b60405190151581526020016101e9565b610205610272366004615378565b611035565b6102107f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c81565b6102107f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef81565b6102056102d3366004615378565b611084565b604080518082018252600581527f302e302e31000000000000000000000000000000000000000000000000000000602082015290516101e99190615430565b60408051808201909152600581527f6e6f6e63650000000000000000000000000000000000000000000000000000006020909101526102107f7ab1577440dd7bedf920cb6de2f9fc6bf7ba98c78c85a3fa1f8311aac95e175981565b6102546103813660046152e0565b60676020526000908152604090205460ff1681565b60408051808201909152600681527f64696765737400000000000000000000000000000000000000000000000000006020909101526102107f682a7e258d80bd2421d3103cbe71e3e3b82138116756b97b8256f061dc2f11fb81565b6102056110e3565b6104217f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b60335473ffffffffffffffffffffffffffffffffffffffff16610421565b60408051808201909152600981527f6d6f64756c655f696400000000000000000000000000000000000000000000006020909101526102107f8ce577cf664c36ba5130242bf5790c2675e9f4e6986a842b607821bee25372ee81565b60408051808201909152600881527f636162756e646c650000000000000000000000000000000000000000000000006020909101526102107f8a8cb7aa1da17ada103546ae6b4e13ccc2fafa17adf5f93925e0a0a4e5681a6a81565b6065546104219073ffffffffffffffffffffffffffffffffffffffff1681565b61054f61054a366004615443565b6110f7565b6040516101e9929190615478565b60408051808201909152600b81527f63657274696669636174650000000000000000000000000000000000000000006020909101526102107f925cec779426f44d8d555e01d2683a3a765ce2fa7562ca7352aeb09dfc57ea6a81565b60408051808201909152600481527f70637273000000000000000000000000000000000000000000000000000000006020909101526102107f61585f8bc67a4b6d5891a4639a074964ac66fc2241dc0b36c157dc101325367a81565b6102056106233660046154a6565b61123e565b6102056106363660046152e0565b6114f4565b60408051808201909152600981527f757365725f6461746100000000000000000000000000000000000000000000006020909101526102107f5e4ea5393e4327b3014bc32f2264336b0d1ee84a4cfd197c8ad7e1e16829a16a81565b60408051808201909152600981527f74696d657374616d7000000000000000000000000000000000000000000000006020909101526102107f4ebf727c48eac2c66272456b06a885c5cc03e54d140f63b63b6fd10c1227958e81565b60408051808201909152600a81527f7075626c69635f6b6579000000000000000000000000000000000000000000006020909101526102107fc7b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a481565b61020561075d3660046152e0565b611690565b6107bb60405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b60006107c684611763565b905060006107d78260000151611ffb565b11610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f206d6f64756c65206964000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000816020015167ffffffffffffffff16116108bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f2074696d657374616d700000000000000000000000000000000000000000604482015260640161083a565b60008160a00151511161092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f20636162756e646c65000000000000000000000000000000000000000000604482015260640161083a565b7f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef61096282604001518661203c90919063ffffffff16565b146109c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c696420646967657374000000000000000000000000000000000000604482015260640161083a565b8060600151516001111580156109e55750602081606001515111155b610a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f696e76616c696420706372730000000000000000000000000000000000000000604482015260640161083a565b60c081015160ff1660f61480610a875750610a698160c00151611ffb565b600111158015610a875750610400610a848260c00151611ffb565b11155b610aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420707562206b65790000000000000000000000000000000000604482015260640161083a565b60e081015160ff1660f61480610b115750610200610b0e8260e00151611ffb565b11155b610b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c696420757365722064617461000000000000000000000000000000604482015260640161083a565b61010081015160ff1660f61480610b9d5750610200610b9a826101000151611ffb565b11155b610c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964206e6f6e636500000000000000000000000000000000000000604482015260640161083a565b60005b816060015151811015610cfa57610c3982606001518281518110610c2c57610c2c615512565b6020026020010151611ffb565b60201480610c5f5750610c5b82606001518281518110610c2c57610c2c615512565b6030145b80610c825750610c7e82606001518281518110610c2c57610c2c615512565b6040145b610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c696420706372000000000000000000000000000000000000000000604482015260640161083a565b80610cf281615570565b915050610c06565b506000610d1482608001518661206e90919063ffffffff16565b905060008260a001515167ffffffffffffffff811115610d3657610d3661503e565b604051908082528060200260200182016040528015610d6957816020015b6060815260200190600190039081610d545790505b50905060005b8360a0015151811015610e8557610d958460a001518281518110610c2c57610c2c615512565b600111158015610dbf5750610400610dbc8560a001518381518110610c2c57610c2c615512565b11155b610e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636162756e646c6520636572740000000000000000000000604482015260640161083a565b610e558460a001518281518110610e3e57610e3e615512565b60200260200101518861206e90919063ffffffff16565b828281518110610e6757610e67615512565b60200260200101819052508080610e7d90615570565b915050610d6f565b506040517f5b608e2a00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635b608e2a90610efd90869086906004016155a8565b6000604051808303816000875af1158015610f1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f629190810190615694565b90506000610f738860008a51612095565b9050610f84826080015182896121bc565b509293505050505b92915050565b610f9a61223a565b73ffffffffffffffffffffffffffffffffffffffff16600090815260676020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b610fee61223a565b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61103d61223a565b600160666000848460405161105392919061574c565b6040518091039020815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61108c61223a565b6066600083836040516110a092919061574c565b6040805191829003909120825260208201929092520160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b6110eb61223a565b6110f560006122bb565b565b6060806000600190508360008151811061111357611113615512565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167fd20000000000000000000000000000000000000000000000000000000000000003611164575060025b60006111708583612332565b9050600061117e8683612342565b9050600061118c8783612356565b9050600061119a8883612356565b90506000856111a88661236e565b6111b2919061575c565b905060006111bf8561236e565b6111c88561236e565b6111d2919061575c565b905060006111e18b8985612393565b905060006111f96111f18861236e565b8d9085612393565b90506112078285838661246e565b9a5061122e605086901c69ffffffffffffffffffff1661122687611ffb565b8e9190612393565b9950505050505050505050915091565b61124661223a565b60006112bb85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8901819004810282018101909252878152925087915086908190840183828082843760009201919091525061076292505050565b9050600061132082606001516000815181106112d9576112d9615512565b602002602001015187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061203c9050565b60008181526066602052604090205490915060ff1661139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964207063723020696e206174746573746174696f6e0000000000604482015260640161083a565b42610e10836020015167ffffffffffffffff166113b89190615773565b1161141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6174746573746174696f6e20746f6f206f6c6400000000000000000000000000604482015260640161083a565b60c082015160009061149e9060501c69ffffffffffffffffffff16611445906001615773565b60016114548660c00151611ffb565b61145e919061575c565b89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505061265f9050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260676020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550505050505050565b600054610100900460ff16158080156115145750600054600160ff909116105b8061152e5750303b15801561152e575060005460ff166001145b6115ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161083a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561161857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b611620612668565b61162982611690565b801561168c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61169861223a565b73ffffffffffffffffffffffffffffffffffffffff811661173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161083a565b611744816122bb565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6117bc60405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b601260208301207f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c1461184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c6964206174746573746174696f6e20707265666978000000000000604482015260640161083a565b6000611858836012612332565b905060006118768469ffffffffffffffffffff605085901c16612707565b90506118d160405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b60006118dc8461236e565b90505b806118e98461236e565b1015611ff2576118f98684612717565b92506000611907878561203c565b60408051808201909152600981527f6d6f64756c655f6964000000000000000000000000000000000000000000000060209091015290507f731a883099b3c945aecfdbd40a86f3d98a160b1967957bd49f87de411dac8d1281016119795761196f8785612717565b8084529350611fec565b60408051808201909152600681527f64696765737400000000000000000000000000000000000000000000000000006020909101527f97d581da727f42dbde2cefc3418e1c1c47dec7ee98a946847da90f9e23d0ee0581016119ed576119df8785612717565b604084018190529350611fec565b60408051808201909152600b81527f63657274696669636174650000000000000000000000000000000000000000006020909101527f6da313886bd90bb272aaa1fe2d97c5c589a31d058a9d358cad514f6203a815968101611a6157611a538785612356565b608084018190529350611fec565b60408051808201909152600a81527f7075626c69635f6b6579000000000000000000000000000000000000000000006020909101527f384d7fe6330242cf0039a6ae26b447a361d47bcbeee5fff4a502acc319a0a85c8101611ad557611ac7878561272f565b60c084018190529350611fec565b60408051808201909152600981527f757365725f6461746100000000000000000000000000000000000000000000006020909101527fa1b15ac6c1bcd84cfeb43cd0dd9bcc94f2e117b5b302e68375281e1e97d65e968101611b4957611b3b878561272f565b60e084018190529350611fec565b60408051808201909152600581527f6e6f6e63650000000000000000000000000000000000000000000000000000006020909101527f854ea88bbf22841206df34921d06039408456738737a5c05e07cee5536a1e8a78101611bbe57611baf878561272f565b61010084018190529350611fec565b60408051808201909152600981527f74696d657374616d7000000000000000000000000000000000000000000000006020909101527fb1408d83b7153d399d8dba94f9577a3a33fc1ab2ebf09c49c4902ef3edd86a728101611c4457611c248785612747565b9350611c308460a01c90565b67ffffffffffffffff166020840152611fec565b60408051808201909152600881527f636162756e646c650000000000000000000000000000000000000000000000006020909101527f75734855e25e8525efcab95194b1ec333d0505e8520a06c6da1f5f5b1a97e5968101611d5d57611caa878561275f565b9350611cb68460a01c90565b67ffffffffffffffff1667ffffffffffffffff811115611cd857611cd861503e565b604051908082528060200260200182016040528015611d01578160200160208202803683370190505b5060a084015260005b8360a0015151811015611d5757611d218886612356565b9450848460a001518281518110611d3a57611d3a615512565b602090810291909101015280611d4f81615570565b915050611d0a565b50611fec565b60408051808201909152600481527f70637273000000000000000000000000000000000000000000000000000000006020909101527f9ea7a0743985b492a76e5b9c65f8b69b539903ddbe23f4c93ea823efecdac9868101611f8a57611dc38785612342565b9350611dcf8460a01c90565b67ffffffffffffffff1667ffffffffffffffff811115611df157611df161503e565b604051908082528060200260200182016040528015611e1a578160200160208202803683370190505b50606084015260005b836060015151811015611d5757611e3a8886612747565b94506000611e488660a01c90565b67ffffffffffffffff1690508460600151518110611ec2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420706372206b65792076616c75650000000000000000000000604482015260640161083a565b84606001518181518110611ed857611ed8615512565b6020026020010151600014611f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6475706c696361746520706372206b6579000000000000000000000000000000604482015260640161083a565b611f538987612356565b95508585606001518281518110611f6c57611f6c615512565b60209081029190910101525080611f8281615570565b915050611e23565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206174746573746174696f6e206b6579000000000000000000604482015260640161083a565b506118df565b50949350505050565b600081604060ff8216148061201357508060ff166060145b15612033576120228360a01c90565b67ffffffffffffffff169392505050565b50600092915050565b6000612067605083901c69ffffffffffffffffffff1661205b84611ffb565b85919091016020012090565b9392505050565b6060612067605083901c69ffffffffffffffffffff1661208d84611ffb565b859190612393565b604080516101008101825267cbbb9d5dc1059ed8815267629a292a367cd5076020820152679159015a3070dd179181019190915267152fecd8f70e59396060828101919091526767332667ffc00b316080830152678eb44a876858151160a083015267db0c2e0d64f98fa760c08301526747b5481dbefa4fa460e08301529061212085858584612777565b80516020808301516040808501516060860151608087015160a088015184517fffffffffffffffff00000000000000000000000000000000000000000000000060c0998a1b81169882019890985295881b8716602887015292871b8616603086015290861b85166038850152851b84169183019190915290921b1660488201526050016040516020818303038152906040529150509392505050565b6121cf6121c7612fe5565b838386613100565b612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c696420736967000000000000000000000000000000000000000000604482015260640161083a565b505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161083a565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006120678383604060016133b1565b6000612067836123518461236e565b612707565b6000612067836123658461236e565b604060016133b1565b600061237982611ffb565b610f8c9069ffffffffffffffffffff605085901c16615773565b82516060906123a28385615773565b111561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b8167ffffffffffffffff8111156124235761242361503e565b6040519080825280601f01601f19166020018201604052801561244d576020820181803683370190505b50905060208082019085850101612465828286613683565b50509392505050565b60608161247c85600d615773565b6124869190615773565b67ffffffffffffffff81111561249e5761249e61503e565b6040519080825280601f01601f1916602001820160405280156124c8576020820181803683370190505b509050608460f81b816000815181106124e3576124e3615512565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350606a60f81b8160018151811061252a5761252a615512565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f40000000000000000000000000000000000000000000000000000000000000008161258686600c615773565b8151811061259657612596615512565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060408051808201909152600a81527f5369676e617475726531000000000000000000000000000000000000000000006020808301918252838101919088810190870161261d612615856002615773565b84600a613683565b61263261262b85600c615773565b838b613683565b6126528961264186600d615773565b61264b9190615773565b8289613683565b5050505050949350505050565b91016020012090565b600054610100900460ff166126ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161083a565b6110f56136f8565b6000612067838360a060016133b1565b6000612067836127268461236e565b606060016133b1565b60006120678361273e8461236e565b604060006133b1565b6000612067836127568461236e565b600060016133b1565b60006120678361276e8461236e565b608060016133b1565b60408051610a008101825267428a2f98d728ae228152677137449123ef65cd602082015267b5c0fbcfec4d3b2f9181019190915267e9b5dba58189dbbc6060820152673956c25bf348b53860808201526759f111f1b605d01960a082015267923f82a4af194f9b60c082015267ab1c5ed5da6d811860e082015267d807aa98a30302426101008201526712835b0145706fbe61012082015267243185be4ee4b28c61014082015267550c7dc3d5ffb4e26101608201526772be5d74f27b896f6101808201526780deb1fe3b1696b16101a0820152679bdc06a725c712356101c082015267c19bf174cf6926946101e082015267e49b69c19ef14ad261020082015267efbe4786384f25e3610220820152670fc19dc68b8cd5b561024082015267240ca1cc77ac9c65610260820152672de92c6f592b0275610280820152674a7484aa6ea6e4836102a0820152675cb0a9dcbd41fbd46102c08201526776f988da831153b56102e082015267983e5152ee66dfab61030082015267a831c66d2db4321061032082015267b00327c898fb213f61034082015267bf597fc7beef0ee461036082015267c6e00bf33da88fc261038082015267d5a79147930aa7256103a08201526706ca6351e003826f6103c082015267142929670a0e6e706103e08201526727b70a8546d22ffc610400820152672e1b21385c26c926610420820152674d2c6dfc5ac42aed6104408201526753380d139d95b3df61046082015267650a73548baf63de61048082015267766a0abb3c77b2a86104a08201526781c2c92e47edaee66104c08201526792722c851482353b6104e082015267a2bfe8a14cf1036461050082015267a81a664bbc42300161052082015267c24b8b70d0f8979161054082015267c76c51a30654be3061056082015267d192e819d6ef521861058082015267d69906245565a9106105a082015267f40e35855771202a6105c082015267106aa07032bbd1b86105e08201526719a4c116b8d2d0c8610600820152671e376c085141ab53610620820152672748774cdf8eeb996106408201526734b0bcb5e19b48a861066082015267391c0cb3c5c95a63610680820152674ed8aa4ae3418acb6106a0820152675b9cca4f7763e3736106c082015267682e6ff3d6b2b8a36106e082015267748f82ee5defb2fc6107008201526778a5636f43172f606107208201526784c87814a1f0ab72610740820152678cc702081a6439ec6107608201526790befffa23631e2861078082015267a4506cebde82bde96107a082015267bef9a3f7b2c679156107c082015267c67178f2e372532b6107e082015267ca273eceea26619c61080082015267d186b8c721c0c20761082082015267eada7dd6cde0eb1e61084082015267f57d4f7fee6ed1786108608201526706f067aa72176fba610880820152670a637dc5a2c898a66108a082015267113f9804bef90dae6108c0820152671b710b35131c471b6108e08201526728db77f523047d846109008201526732caab7b40c72493610920820152673c9ebe0a15c9bebc61094082015267431d67c49c100d4c610960820152674cc5d4becb3e42b661098082015267597f299cfc657e2a6109a0820152675fcb6fab3ad6faec6109c0820152676c44198c4a4758176109e08201526000612c36868686613798565b905060808151612c4691906157ba565b15612cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50414444494e475f4552524f5200000000000000000000000000000000000000604482015260640161083a565b612cb5614f95565b612cbd614fb4565b612cc5614fd3565b6000612cd26080896157ce565b612cdd9060806157e2565b905060005b85518201811015612fd85781811015612d0757612d028b84838d016138a7565b612d14565b612d1486848484036138a7565b60005b6010811015612d6557838160108110612d3257612d32615512565b6020020151868260508110612d4957612d49615512565b67ffffffffffffffff9092166020929092020152600101612d17565b5060105b6050811015612e1b57856010820360508110612d8757612d87615512565b6020020151612dae87600f840360508110612da457612da4615512565b602002015161390e565b876007840360508110612dc357612dc3615512565b6020020151612dea896002860360508110612de057612de0615512565b602002015161393d565b010101868260508110612dff57612dff615512565b67ffffffffffffffff9092166020929092020152600101612d69565b5060005b6008811015612e6d57888160088110612e3a57612e3a615512565b6020020151858260088110612e5157612e51615512565b67ffffffffffffffff9092166020929092020152600101612e1f565b5060005b6050811015612f7b576000868260508110612e8e57612e8e615512565b6020020151898360508110612ea557612ea5615512565b6020020151608088015160a089015160c08a01518219169116186080890151612ecd90613964565b89600760200201510101010190506000612f06878260200201518860016020020151896002602002015180821690831691909216181890565b8751612f1190613987565b60c08901805167ffffffffffffffff90811660e08c015260a08b018051821690925260808b018051821690925260608b0180518701821690925260408b018051821690925260208b01805182169092528a5181169091529101909201909116865250600101612e71565b5060005b6008811015612fcf57848160088110612f9a57612f9a615512565b6020020151898260088110612fb157612fb1615512565b6020020180519190910167ffffffffffffffff169052600101612f7f565b50608001612ce2565b5050505050505050505050565b6130256040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101408101909152603060e082018181528291615ac16101008401398152602001604051806060016040528060308152602001615a01603091398152602001604051806060016040528060308152602001615a91603091398152602001604051806060016040528060308152602001615a31603091398152602001604051806060016040528060308152602001615b21603091398152602001604051806060016040528060308152602001615af1603091398152602001604051806060016040528060308152602001615a61603091399052919050565b600061312d6040518060800160405280600081526020016000815260200160008152602001600081525090565b613136846139aa565b60208301528152613146836139aa565b6060830152604080830191909152805160e08101909152865160009190819061316e90613a5d565b81526020016131808960200151613a5d565b81526020016131928960400151613a5d565b81526020016131a48960600151613a5d565b81526020016131b68960800151613a5d565b81526020016131c88960a00151613a5d565b81526020016131da8960c00151613a5d565b815250905060006131ee8260800151613af3565b835160208101519051919250159015168061321b5750600061321884600001518460a00151613b69565b12155b80613239575061323983602001516000602082015191511591141690565b806132555750600061325384602001518460c00151613b69565b135b1561326657600093505050506133a9565b6132888183608001518460000151856020015187604001518860600151613c0f565b61329857600093505050506133a9565b865160308110156132dc5760408051603080825260608201909252600091602082018180368337509192506132d991505060208a0183830360500184613cf3565b97505b5060006132fb826132ec8a613a5d565b86602001518660a00151613d01565b9050600061331783866000015187602001518760a00151613d01565b905060006133256003613e12565b905060006133518587608001518489600001518a604001518b606001518d604001518e60600151613e34565b905061336a85876080015184896000015185898961421b565b9050809450819550505050506133a16133898484848860800151613d01565b86516020808201519083015191519251911491141690565b955050505050505b949350505050565b6000808585815181106133c6576133c6615512565b602001015160f81c60f81b60e060f81b1660f81c905060008686815181106133f0576133f0615512565b60209101015160f81c601f16905060ff821660e0036134a45783158061341a57508060ff16601614155b613480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6e756c6c2076616c756520666f7220726571756972656420656c656d656e7400604482015260640161083a565b61349b60ff83831716613494886001615773565b60501b1790565b925050506133a9565b8460ff168260ff1614613513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f756e657870656374656420747970650000000000000000000000000000000000604482015260640161083a565b8060ff166018036135655761349b60ff8316613530886002615773565b8961353c8a6001615773565b8151811061354c5761354c615512565b016020015160f81c60a01b60509190911b919091171790565b8060ff166019036135ac5761349b60ff8316613582886003615773565b6135976135908a6001615773565b8b906143a5565b61ffff1660a01b60509190911b919091171790565b8060ff16601a036135f55761349b60ff83166135c9886005615773565b6135de6135d78a6001615773565b8b90614428565b63ffffffff1660a01b60509190911b919091171790565b8060ff16601b036136425761349b60ff8316613612886009615773565b6136276136208a6001615773565b8b906144ab565b67ffffffffffffffff1660a01b60509190911b919091171790565b61367860ff8316613654886001615773565b60501b1774ff000000000000000000000000000000000000000060a084901b161790565b979650505050505050565b602081106136bb578151835261369a602084615773565b92506136a7602083615773565b91506136b460208261575c565b9050613683565b801561223557600060016136d083602061575c565b6136dc9061010061593f565b6136e6919061575c565b83518551821691191617845250505050565b600054610100900460ff1661378f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161083a565b6110f5336122bb565b606060006137a78360086157e2565b60c01b905060006137b96080856157ba565b9050600060708210156137d8576137d182607761575c565b90506137e6565b6137e38260f761575c565b90505b60008167ffffffffffffffff8111156138015761380161503e565b6040519080825280601f01601f19166020018201604052801561382b576020820181803683370190505b50905060006138508461383e898b615773565b613848919061575c565b8a9086612393565b60405190915061388a9082907f8000000000000000000000000000000000000000000000000000000000000000908590899060200161594b565b604051602081830303815290604052955050505050509392505050565b60005b6010811015613908576138d26138c18260086157e2565b6138cb9084615773565b85906144ab565b8382601081106138e4576138e4615512565b67ffffffffffffffff909216602092909202015261390181615570565b90506138aa565b50505050565b600060078267ffffffffffffffff16901c61392a83600861452e565b61393584600161452e565b181892915050565b600060068267ffffffffffffffff16901c61395983603d61452e565b61393584601361452e565b600061397182602961452e565b61397c83601261452e565b61393584600e61452e565b600061399482602761452e565b61399f83602261452e565b61393584601c61452e565b6000808251606014613a18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f742037363800000000000000000000000000000000000000604482015260640161083a565b60408051608081018252925082019050600082526020830151601083015260308301516020830152600081526050830151601082015260608301516020820152915091565b60008151603014613aca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f742033383400000000000000000000000000000000000000604482015260640161083a565b604080518082019091529050600081526020820151601082015260308201516020820152919050565b6000613b0761036060408051918201905290565b6060610120820152602061014082018190526040610160830181905260016101e0840152845161020084015284820180516102208501526102408401829052610260840192909252610280830152925161030082015291516103208301525090565b815181516000919080821115613b8457600192505050610f8c565b80821015613bb6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610f8c565b50506020838101519083015180821115613bd557600192505050610f8c565b80821015613c07577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610f8c565b505092915050565b602082015182516000911590151680613c3657506020868101519084015187518551149114165b80613c48575060208201518251159015165b80613c6157506020868101519083015187518451149114165b15613c6e57506000613ce9565b6000613c7c8884600261456b565b90506000613c8c8986600361456b565b6020880151885191925015901516613cb657613cb381613cad8b888b6145b0565b8a6146a2565b90505b6020860151865115901516613cd357613cd081878a6146a2565b90505b6020818101519083015191519251911491141690505b9695505050505050565b8082828560045afa50505050565b6000613d0e858484614706565b9050613dd38482876060018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b60608552602085602001526040856040015260018560c0015281518560e0015260208201518561010001526040816101208760055afa50949350505050565b6000613e246040808051918201905290565b6000815260208101929092525090565b613e3c614ff2565b613e4585614794565b613e4e85614794565b613e586001613e12565b608084018051604081019290925260208281019390935292905290518051910151613e98918b918b918b918b91908760045b6020020151604001516147bb565b61010084018051604080820193909352602081810194909452939093526080840151805181840151919092015193518051930151613ef0948e948e948e948e949193909290918a60085b602002015160400151614978565b6101808401516040810191909152602081019190915252613f1083614794565b613f1983614794565b613f236001613e12565b60208085018051604081019390935282820193909352929052518051910151613f57918b918b918b918b9190876001613e8a565b6040808501519081019190915260208181019290925291909152808201518051910151613faf918b918b918b918b91908760015b60209081029190910151604090810151908a015180519201519091908a6002613ee2565b606084015160408101919091526020818101929092529190915260808201518051910151614006918b918b918b918b91908760045b60209081029190910151604001518982015180519201519091908a6001613ee2565b60a08401516040810191909152602081810192909252919091526080820151805191015161403f918b918b918b918b9190876004613f8b565b60c084015160408101919091526020818101929092529190915260808201518051910151614097918b918b918b918b91908760045b602090810291909101516040015160608a015180519201519091908a6003613ee2565b60e084015160408101919091526020818101929092529190915261010082015180519101516140d1918b918b918b918b9190876008613fe4565b610120840151604081019190915260208181019290925291909152610100820151805191015161410c918b918b918b918b9190876008613f8b565b6101408401516040810191909152602081810192909252919091526101008201518051910151614147918b918b918b918b9190876008614074565b6101608401516040810191909152602081810192909252919091526101808201518051910151614182918b918b918b918b919087600c613fe4565b6101a084015160408101919091526020818101929092529190915261018082015180519101516141bd918b918b918b918b919087600c613f8b565b6101c084015160408101919091526020818101929092529190915261018082015180519101516141f8918b918b918b918b919087600c614074565b6101e0840151604081019190915260208101919091525298975050505050505050565b8151815160009182918291829161423183613e12565b955061423d6000613e12565b94506142496001613e12565b935060025b60b881116142f4576142658e8e8e8e8b8b8b6147bb565b9198509650945061427b8e8e8e8e8b8b8b6147bb565b9198509650945060b881900382811c6003169084901c60021b600c1617935083156142ec5760008a85601081106142b4576142b4615512565b602002015190506142e38f8f8f8f8560005b6020020151866001602002015187600260200201518f8f8f614978565b91995097509550505b60020161424e565b5050506020868101519086015160025b61010081116143935761431c8e8e8e8e8b8b8b6147bb565b919850965094506143328e8e8e8e8b8b8b6147bb565b9198509650945061010081900382811c6003169084901c60021b600c16179350831561438b5760008a856010811061436c5761436c615512565b602002015190506143828f8f8f8f8560006142c6565b91995097509550505b600201614304565b505050505b9750975097945050505050565b60006143b2826002615773565b8351101561441c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160f01c90565b6000614435826004615773565b8351101561449f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160e01c90565b60006144b8826008615773565b83511015614522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160c01c90565b600067ffffffffffffffff8381169083161c61454b8360406159d7565b67ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b600061457d6040808051918201905290565b9050610240840193508251846060015260208301518460800152818460a001526040816101008660055afa509392505050565b60006145c26040808051918201905290565b9050614688838361018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040816101208660055afa509392505050565b60006146b46040808051918201905290565b60208581015185820151810191830182905285518751019110018152905060006146de8284613b69565b1261206757602080820180519184015182039081905283518351929091119103038152612067565b60006147186040808051918201905290565b905061474c826147286002613e12565b60208281015190820151810360c089018190529151925191119190030360a0860152565b604084526040846020015260408460400152825184606001526020830151846080015281518460e0015260208201518461010001526040816101208660055afa509392505050565b60006147a66040808051918201905290565b90508151815260208201516020820152919050565b60008060006147d4866000602082015191511591141690565b80156147e7575060208501518551159015165b15614815576147f66000613e12565b6148006000613e12565b61480a6001613e12565b925092509250614398565b60006148228b87876145b0565b905061482e818b614ad1565b6148398b82896145b0565b93506148468b8588614b1b565b614850848b614ad1565b61485c8b88600261456b565b96506148698b888b6145b0565b92506148778b86600261456b565b94506148848b868a614b1b565b61488f83868c614bf7565b61489b8b84600261456b565b91506148a887858c614c4d565b60006148b48b89614c6c565b90506148c183828d614bf7565b6020808c015181850151810391830182905284518d519290911091030381526148ec8886838e614ca4565b6148f78c8986614b1b565b6149028c88846145b0565b96506149108c886002614cf4565b61491a878c614ad1565b6020808c015181890151810391830182905288518d519290911091030381526149458489838e614ca4565b6149518c868486614d23565b61495e8c84846002614e00565b6149698c8484614b1b565b50509750975097945050505050565b6000806000614991896000602082015191511591141690565b80156149a4575060208801518851159015165b156149cf576149b286614794565b6149bb86614794565b6149c486614794565b925092509250614ac1565b602086015186511590151680156149ed575060208501518551159015165b15614a0d576149fb89614794565b614a0489614794565b6149c489614794565b614a188d89866145b0565b9250614a258d86896145b0565b9150614a328d8a866145b0565b9050614a3f8d87896145b0565b6020808201519083015182518451939850911491141615614a9e5760208281015190840151835185511491141615614a80576149c48d8d8d8d8d8d8d6147bb565b614a8a6000613e12565b614a946000613e12565b6149c46001613e12565b614aa98d88866145b0565b9950614aba8d8b838f898789614e30565b9250925092505b9a509a509a975050505050505050565b6020820180518351600190811b60ff83901c1785521b90526000614af58383613b69565b1261168c5760208281018051918301518203908190529151835191909211919003039052565b614bdf828261018086018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120830192506040826101208560055afa50505050565b614c198383602082810180519183015182019081905291518351019110019052565b6000614c258483613b69565b1261223557602080840180519183015182039081905282518551929091119103038352505050565b6020808301518351600190811b60ff83901c1786521b90840152614c19565b6000614c7e6040808051918201905290565b602080850151818501518103918301829052845186519290911091030381529050610f8c565b602083810151838201518101918601829052835185510191100184526000614ccc8583613b69565b1261390857602080850180519183015182039081905282518651929091119103038452613908565b610240830192508151836060015260208201518360800152808360a001526040826101008560055afa50505050565b614de7828261018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040836101208660055afa5050505050565b610240840193508151846060015260208201518460800152808460a001526040836101008660055afa5050505050565b600080600080614e408887614c6c565b9050614e4d85828a6146a2565b6020808a0151818a0151810391840182905289518b519290911091030382529250614e7989828a6146a2565b93506000614e898c86600261456b565b9050614e978c85600261456b565b9250614ea48c848d614b1b565b614eaf888b8b6146a2565b9750614ebc8c8983614b1b565b6020808a0151818a0151810391840182905289518b51929091109103038252614ee683838b614bf7565b6000614ef38d83886145b0565b9050614f008d8786614b1b565b614f0b8d8c846145b0565b6020808c015181870151810391860182905286518d519290911091030384529a50614f378b848c614bf7565b614f428d868d614b1b565b614f4d8d88836145b0565b6020808c015181830151810391860182905282518d519290911091030384529650614f7985848c614bf7565b614f858d85838f614d23565b5050509750975097945050505050565b60405180610a0001604052806050906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b6040518061020001604052806010905b61500a615020565b8152602001906001900390816150025790505090565b60405180606001604052806003906020820280368337509192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156150905761509061503e565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156150dd576150dd61503e565b604052919050565b600067ffffffffffffffff8211156150ff576150ff61503e565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261513c57600080fd5b813561514f61514a826150e5565b615096565b81815284602083860101111561516457600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561519457600080fd5b823567ffffffffffffffff808211156151ac57600080fd5b6151b88683870161512b565b935060208501359150808211156151ce57600080fd5b506151db8582860161512b565b9150509250929050565b600081518084526020808501945080840160005b83811015615215578151875295820195908201906001016151f9565b509495945050505050565b602081528151602082015260006020830151615248604084018267ffffffffffffffff169052565b5060408301516060830152606083015161012080608085015261526f6101408501836151e5565b9150608085015160a085015260a08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030160c08601526152b483826151e5565b60c087015160e08781019190915287015161010080880191909152909601519190940152509192915050565b6000602082840312156152f257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461206757600080fd5b60006020828403121561532857600080fd5b5035919050565b60008083601f84011261534157600080fd5b50813567ffffffffffffffff81111561535957600080fd5b60208301915083602082850101111561537157600080fd5b9250929050565b6000806020838503121561538b57600080fd5b823567ffffffffffffffff8111156153a257600080fd5b6153ae8582860161532f565b90969095509350505050565b60005b838110156153d55781810151838201526020016153bd565b838111156139085750506000910152565b600081518084526153fe8160208601602086016153ba565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061206760208301846153e6565b60006020828403121561545557600080fd5b813567ffffffffffffffff81111561546c57600080fd5b6133a98482850161512b565b60408152600061548b60408301856153e6565b828103602084015261549d81856153e6565b95945050505050565b600080600080604085870312156154bc57600080fd5b843567ffffffffffffffff808211156154d457600080fd5b6154e08883890161532f565b909650945060208701359150808211156154f957600080fd5b506155068782880161532f565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155a1576155a1615541565b5060010190565b6040815260006155bb60408301856153e6565b6020838203818501528185518084528284019150828160051b85010183880160005b83811015615629577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08784030185526156178383516153e6565b948601949250908501906001016155dd565b50909998505050505050505050565b8051600781900b811461564a57600080fd5b919050565b600082601f83011261566057600080fd5b815161566e61514a826150e5565b81815284602083860101111561568357600080fd5b6133a98260208301602087016153ba565b6000602082840312156156a657600080fd5b815167ffffffffffffffff808211156156be57600080fd5b9083019060a082860312156156d257600080fd5b6156da61506d565b825180151581146156ea57600080fd5b8152602083015182811681146156ff57600080fd5b602082015261571060408401615638565b60408201526060830151606082015260808301518281111561573157600080fd5b61573d8782860161564f565b60808301525095945050505050565b8183823760009101908152919050565b60008282101561576e5761576e615541565b500390565b6000821982111561578657615786615541565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826157c9576157c961578b565b500690565b6000826157dd576157dd61578b565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561581a5761581a615541565b500290565b600181815b8085111561587857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561585e5761585e615541565b8085161561586b57918102915b93841c9390800290615824565b509250929050565b60008261588f57506001610f8c565b8161589c57506000610f8c565b81600181146158b257600281146158bc576158d8565b6001915050610f8c565b60ff8411156158cd576158cd615541565b50506001821b610f8c565b5060208310610133831016604e8410600b84101617156158fb575081810a610f8c565b615905838361581f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561593757615937615541565b029392505050565b60006120678383615880565b6000855161595d818460208a016153ba565b7fff00000000000000000000000000000000000000000000000000000000000000861690830190815284516159998160018401602089016153ba565b8082019150507fffffffffffffffff000000000000000000000000000000000000000000000000841660018201526009810191505095945050505050565b600067ffffffffffffffff838116908316818110156159f8576159f8615541565b03939250505056feb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5fffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffcffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffffa164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // SystemConfigGlobalABI is the input ABI used to generate the binding from. diff --git a/deployments/84532-deploy.json b/deployments/84532-deploy.json index 82c99df..9fefd3a 100644 --- a/deployments/84532-deploy.json +++ b/deployments/84532-deploy.json @@ -27,7 +27,7 @@ "SuperchainConfig": "0xC77dB710C47b6e294D3d544572a10187e8Ef6b2C", "SuperchainConfigProxy": "0xCf940f9c053092d07EB62DaB59D0AFddF426dE67", "SystemConfig": "0x8aB8559E6C661eFEB0a44C0f08E180CEe344dABE", - "SystemConfigGlobal": "0xc536C770BBEAfadb8dc8a0A1809A62cE96e7D822", + "SystemConfigGlobal": "0x0933e802B0977fe6287C48a0F601b39244118E04", "SystemConfigGlobalProxy": "0x53200eC3d6E91E7Ba1fD1087D38430F43501C9Fb", "SystemConfigProxy": "0x57708f73fF01e8697799B38f47Fbd65bDf9138Bc", "SystemOwnerSafe": "0xFCD4AfF397A2F9D2a435B64AdA1A70efC59310aD" diff --git a/register-signer/main.go b/register-signer/main.go index 59f2995..12794a1 100644 --- a/register-signer/main.go +++ b/register-signer/main.go @@ -96,6 +96,22 @@ func main() { panic(err) } + pub, err := crypto.UnmarshalPubkey(res.Document.PublicKey) + if err != nil { + panic(err) + } + signerAddr := crypto.PubkeyToAddress(*pub) + validSigner, err := systemConfigGlobal.ValidSigners(&bind.CallOpts{}, signerAddr) + if err != nil { + panic(err) + } + fmt.Printf("Public key: %s\n", hexutil.Encode(res.Document.PublicKey)) + fmt.Printf("Signer: %s\n", signerAddr.String()) + if validSigner { + fmt.Printf("Signer already registered: %s\n", signerAddr.String()) + return + } + certManagerAddr, err := systemConfigGlobal.CertManager(&bind.CallOpts{}) if err != nil { panic(err) diff --git a/src/SystemConfigGlobal.sol b/src/SystemConfigGlobal.sol index 7fe5533..737a99d 100644 --- a/src/SystemConfigGlobal.sol +++ b/src/SystemConfigGlobal.sol @@ -5,11 +5,14 @@ pragma solidity ^0.8.0; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import {ISemver} from "@eth-optimism-bedrock/src/universal/interfaces/ISemver.sol"; import {NitroValidator} from "@nitro-validator/NitroValidator.sol"; -import {CborDecode} from "@nitro-validator/CborDecode.sol"; +import {LibBytes} from "@nitro-validator/LibBytes.sol"; +import {LibCborElement, CborElement, CborDecode} from "@nitro-validator/CborDecode.sol"; import {ICertManager} from "@nitro-validator/ICertManager.sol"; contract SystemConfigGlobal is OwnableUpgradeable, ISemver, NitroValidator { + using LibBytes for bytes; using CborDecode for bytes; + using LibCborElement for CborElement; uint256 public constant MAX_AGE = 60 minutes; @@ -56,8 +59,8 @@ contract SystemConfigGlobal is OwnableUpgradeable, ISemver, NitroValidator { require(ptrs.timestamp + MAX_AGE > block.timestamp, "attestation too old"); - bytes memory publicKey = attestationTbs.slice(ptrs.publicKey); - address enclaveAddress = address(uint160(uint256(keccak256(publicKey)))); + bytes32 publicKeyHash = attestationTbs.keccak(ptrs.publicKey.start() + 1, ptrs.publicKey.length() - 1); + address enclaveAddress = address(uint160(uint256(publicKeyHash))); validSigners[enclaveAddress] = true; } diff --git a/test/SystemConfigGlobal.t.sol b/test/SystemConfigGlobal.t.sol index 898f7b8..ba9c6fd 100644 --- a/test/SystemConfigGlobal.t.sol +++ b/test/SystemConfigGlobal.t.sol @@ -26,7 +26,7 @@ contract SystemConfigGlobalTest is Test { (bytes memory attestationTbs, bytes memory signature) = systemConfigGlobal.decodeAttestationTbs(attestation); systemConfigGlobal.registerSigner(attestationTbs, signature); - address expectedSigner = 0xe04d808785d2BBdE18E9D0C01c05FB8CE0711f2d; + address expectedSigner = 0x874a4c5675cd4850dB08bD9A1e3184ED239087e4; assertTrue(systemConfigGlobal.validSigners(expectedSigner)); } }