3 txs
4 calls
constructor
constructor(address _presigner, string _mintDomain, address _bridgeAdmin)
functions
BRIDGE_ADMIN
viewfunction BRIDGE_ADMIN() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
engine
viewfunction engine() view returns (address)
getEthSignedMessageHash
purefunction getEthSignedMessageHash(bytes32 _messageHash) pure returns (bytes32)
getMessageHash
purefunction getMessageHash(tuple _payload) pure returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
importsProcessed
viewfunction importsProcessed(uint256, uint256) view returns (bool)
mintDomain
viewfunction mintDomain() view returns (bytes32)
nextID
viewfunction nextID() view returns (uint256)
presigner
viewfunction presigner() view returns (address)
recoverSigner
purefunction recoverSigner(bytes32 _ethSignedMessageHash, bytes _signature) pure returns (address)
splitSignature
purefunction splitSignature(bytes _sig) pure returns (bytes32 r, bytes32 s, uint8 v)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
userNonces
viewfunction userNonces(address) view returns (uint256)
validChains
viewfunction validChains(uint256) view returns (bool)
verify
viewfunction verify(tuple _payload, bytes _signature) view returns (bool)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
importEngines
nonpayablefunction importEngines(tuple _payload, bytes _authorisation)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
SendMyEngines
nonpayablefunction SendMyEngines(uint256[] tokenIds, uint256 _newChain)
setEngine
nonpayablefunction setEngine(address _engine)
setPresigner
nonpayablefunction setPresigner(address _presigner)
setValidChain
nonpayablefunction setValidChain(uint256 destination, bool valid)
events
ChainStatusUpdated
event ChainStatusUpdated(uint256 destination, bool valid)
EnginesReceived
event EnginesReceived(address receiver, uint256[] tokenIds, uint256 sendingChain, uint256 id)
EnginesSent
event EnginesSent(address sender, uint256[] tokenIds, uint256 destinationChain, uint256 id)
PresignerUpdated
event PresignerUpdated(address OldPresigner, address NewPresigner)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
creation bytecode
0x608060405234801561001057600080fd5b5060405161369138038061369183398181016040528101906100329190610565565b82600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fda83225e9bb851ed3a6ec0285b1e8a82ee526154200c60952a8b7cd5fafd6af86000846040516100a59291906105e3565b60405180910390a181805190602001206008819055506100eb7fde6b6bf2e0e938355317f81084c9bc87f0c95e5dcb102bcbcd68c4a36c955baa8261010860201b60201c565b506100ff6000801b3361010860201b60201c565b5050505061060c565b60008061011b848461015460201b60201c565b9050801561014a57610148836001600087815260200190815260200160002061025160201b90919060201c565b505b8091505092915050565b6000610166838361028760201b60201c565b61024657600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506101e36102f160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001905061024b565b600090505b92915050565b600061027f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6102f960201b60201c565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600061030b838361036f60201b60201c565b610364578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050610369565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103d1826103a6565b9050919050565b6103e1816103c6565b81146103ec57600080fd5b50565b6000815190506103fe816103d8565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6104578261040e565b810181811067ffffffffffffffff821117156104765761047561041f565b5b80604052505050565b6000610489610392565b9050610495828261044e565b919050565b600067ffffffffffffffff8211156104b5576104b461041f565b5b6104be8261040e565b9050602081019050919050565b60005b838110156104e95780820151818401526020810190506104ce565b60008484015250505050565b60006105086105038461049a565b61047f565b90508281526020810184848401111561052457610523610409565b5b61052f8482856104cb565b509392505050565b600082601f83011261054c5761054b610404565b5b815161055c8482602086016104f5565b91505092915050565b60008060006060848603121561057e5761057d61039c565b5b600061058c868287016103ef565b935050602084015167ffffffffffffffff8111156105ad576105ac6103a1565b5b6105b986828701610537565b92505060406105ca868287016103ef565b9150509250925092565b6105dd816103c6565b82525050565b60006040820190506105f860008301856105d4565b61060560208301846105d4565b9392505050565b6130768061061b6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637f2923ac116100f9578063b3c7c22e11610097578063d547741f11610071578063d547741f14610565578063f727f7a514610581578063f8f82c34146105b1578063fa540801146105cf576101c4565b8063b3c7c22e146104fb578063c9d4623f14610517578063ca15c87314610535576101c4565b806397aba7f9116100d357806397aba7f91461044b578063a217fddf1461047b578063a3246ad314610499578063a7bb5803146104c9576101c4565b80637f2923ac146103bb5780639010d07c146103eb57806391d148541461041b576101c4565b80632f7801f41161016657806351f143921161014057806351f14392146103215780635a5a654c1461033d57806368a5372a1461036d5780637e2d253e1461038b576101c4565b80632f7801f4146102b95780632fec6a9c146102e957806336568abe14610305576101c4565b80630e830e49116101a25780630e830e49146102335780631e96917d1461024f578063248a9ca31461026d5780632f2ff15d1461029d576101c4565b806301ffc9a7146101c957806303b14d0f146101f9578063070f9c7414610217575b600080fd5b6101e360048036038101906101de9190611d1f565b6105ff565b6040516101f09190611d67565b60405180910390f35b610201610679565b60405161020e9190611d9b565b60405180910390f35b610231600480360381019061022c9190611e14565b61069d565b005b61024d60048036038101906102489190611e14565b610767565b005b6102576108a8565b6040516102649190611e5a565b60405180910390f35b61028760048036038101906102829190611ea1565b6108ae565b6040516102949190611d9b565b60405180910390f35b6102b760048036038101906102b29190611ece565b6108cd565b005b6102d360048036038101906102ce9190611e14565b6108ef565b6040516102e09190611e5a565b60405180910390f35b61030360048036038101906102fe9190611f97565b610907565b005b61031f600480360381019061031a9190611ece565b610d2b565b005b61033b6004803603810190610336919061206b565b610da6565b005b610357600480360381019061035291906120ab565b610e39565b6040516103649190611d67565b60405180910390f35b610375610e59565b6040516103829190611d9b565b60405180910390f35b6103a560048036038101906103a09190612301565b610e5f565b6040516103b29190611d67565b60405180910390f35b6103d560048036038101906103d0919061237d565b610fa7565b6040516103e29190611d67565b60405180910390f35b610405600480360381019061040091906123bd565b610fd6565b604051610412919061240c565b60405180910390f35b61043560048036038101906104309190611ece565b611005565b6040516104429190611d67565b60405180910390f35b61046560048036038101906104609190612427565b61106f565b604051610472919061240c565b60405180910390f35b6104836110e0565b6040516104909190611d9b565b60405180910390f35b6104b360048036038101906104ae9190611ea1565b6110e7565b6040516104c09190612545565b60405180910390f35b6104e360048036038101906104de9190612567565b61110b565b6040516104f2939291906125d0565b60405180910390f35b6105156004803603810190610510919061265d565b6111de565b005b61051f6114e9565b60405161052c919061271c565b60405180910390f35b61054f600480360381019061054a9190611ea1565b61150f565b60405161055c9190611e5a565b60405180910390f35b61057f600480360381019061057a9190611ece565b611533565b005b61059b60048036038101906105969190612737565b611555565b6040516105a89190611d9b565b60405180910390f35b6105b9611585565b6040516105c6919061240c565b60405180910390f35b6105e960048036038101906105e49190611ea1565b6115ab565b6040516105f69190611d9b565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106725750610671826115db565b5b9050919050565b7fde6b6bf2e0e938355317f81084c9bc87f0c95e5dcb102bcbcd68c4a36c955baa81565b7fde6b6bf2e0e938355317f81084c9bc87f0c95e5dcb102bcbcd68c4a36c955baa6106c781611655565b7fda83225e9bb851ed3a6ec0285b1e8a82ee526154200c60952a8b7cd5fafd6af8600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360405161071a929190612780565b60405180910390a181600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7fde6b6bf2e0e938355317f81084c9bc87f0c95e5dcb102bcbcd68c4a36c955baa61079181611655565b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108216040518060400160405280601b81526020017f456e67696e652063616e206f6e6c7920626520736574206f6e63650000000000815250611669565b90610862576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108599190612828565b60405180910390fd5b5081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60045481565b6000806000838152602001908152602001600020600101549050919050565b6108d6826108ae565b6108df81611655565b6108e98383611692565b50505050565b60066020528060005260406000206000915090505481565b61091b836109149061284a565b8383610e5f565b6109596040518060400160405280600c81526020017f756e617574686f72697365640000000000000000000000000000000000000000815250611669565b9061099a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109919190612828565b60405180910390fd5b508260000160208101906109ae9190611e14565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109fd604051806060016040528060258152602001612ffa60259139611669565b90610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a359190612828565b60405180910390fd5b50600560008460600135815260200190815260200160002060008460c00135815260200190815260200160002060009054906101000a900460ff1615610ab86040518060400160405280601881526020017f696d706f727420616c72656164792070726f6365737365640000000000000000815250611669565b90610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af09190612828565b60405180910390fd5b50600854836040013514610b416040518060400160405280601981526020017f696e76616c696420646f6d61696e20696e207061796c6f616400000000000000815250611669565b90610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b799190612828565b60405180910390fd5b5046836080013514610bab60405180606001604052806022815260200161301f60229139611669565b90610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be39190612828565b60405180910390fd5b506001600560008560600135815260200190815260200160002060008560c00135815260200190815260200160002060006101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c956db85848060a00190610c80919061286c565b336040518463ffffffff1660e01b8152600401610c9f9392919061294a565b600060405180830381600087803b158015610cb957600080fd5b505af1158015610ccd573d6000803e3d6000fd5b505050507f17b2d7978db3aee39cddea0b518d75f9490e435ea12f6fcc63fc2de510606e6533848060a00190610d03919061286c565b86606001358760c00135604051610d1e95949392919061297c565b60405180910390a1505050565b610d336116d8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da182826116e0565b505050565b7fde6b6bf2e0e938355317f81084c9bc87f0c95e5dcb102bcbcd68c4a36c955baa610dd081611655565b816002600085815260200190815260200160002060006101000a81548160ff0219169083151502179055507f27ac1f8582df24c5a440380c6f532a5e3c80caf348beb3f6484f310f2c6bbd0b8383604051610e2c9291906129ca565b60405180910390a1505050565b60026020528060005260406000206000915054906101000a900460ff1681565b60085481565b60008360200151600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610ee56040518060400160405280600d81526020017f496e76616c6964206e6f6e636500000000000000000000000000000000000000815250611669565b90610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9190612828565b60405180910390fd5b506000610f3285611555565b90506000610f3f826115ab565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f8582878761106f565b73ffffffffffffffffffffffffffffffffffffffff1614925050509392505050565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000610ffd826001600086815260200190815260200160002061172690919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008060008061107f868661110b565b925092509250600187828585604051600081526020016040526040516110a894939291906129f3565b6020604051602081039080840390855afa1580156110ca573d6000803e3d6000fd5b5050506020604051035193505050509392505050565b6000801b81565b606061110460016000848152602001908152602001600020611740565b9050919050565b600080600060418585905014611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90612aaa565b60405180910390fd5b848460009060209261116a93929190612ad4565b906111759190612b27565b9250848460209060409261118b93929190612ad4565b906111969190612b27565b9150848460408181106111ac576111ab612b86565b5b9050013560f81c60f81b60f81c905060028160ff1610156111d757601b816111d49190612be4565b90505b9250925092565b806002600082815260200190815260200160002060009054906101000a900460ff1661123e6040518060400160405280601f81526020017f64657374696e6174696f6e20636861696e206e6f7420737570706f7274656400815250611669565b9061127f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112769190612828565b60405180910390fd5b5060005b848490508110156113fe573373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8787858181106112f6576112f5612b86565b5b905060200201356040518263ffffffff1660e01b81526004016113199190611e5a565b602060405180830381865afa158015611336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135a9190612c2e565b73ffffffffffffffffffffffffffffffffffffffff16146113af6040518060400160405280601c81526020017f596f7520646f206e6f74206f776e20746865736520656e67696e657300000000815250611669565b906113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e79190612828565b60405180910390fd5b508080600101915050611283565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b80f55c985856040518363ffffffff1660e01b815260040161145c929190612c5b565b600060405180830381600087803b15801561147657600080fd5b505af115801561148a573d6000803e3d6000fd5b505050507f9e377bdb3f2e4a4204b670d13820dce03b48913a891fad3eb77d8e96d82dfff433858585600460008154809291906114c690612c7f565b919050556040516114db95949392919061297c565b60405180910390a150505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061152c60016000848152602001908152602001600020611761565b9050919050565b61153c826108ae565b61154581611655565b61154f83836116e0565b50505050565b6000816040516020016115689190612e30565b604051602081830303815290604052805190602001209050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000816040516020016115be9190612eca565b604051602081830303815290604052805190602001209050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061164e575061164d82611776565b5b9050919050565b611666816116616116d8565b6117e0565b50565b60608160405160200161167c9190612f47565b6040516020818303038152906040529050919050565b60008061169f8484611831565b905080156116ce576116cc836001600087815260200190815260200160002061192290919063ffffffff16565b505b8091505092915050565b600033905090565b6000806116ed8484611952565b9050801561171c5761171a8360016000878152602001908152602001600020611a4490919063ffffffff16565b505b8091505092915050565b60006117358360000183611a74565b60001c905092915050565b6060600061175083600001611a9f565b905060608190508092505050919050565b600061176f82600001611afb565b9050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6117ea8282611005565b61182d5780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401611824929190612f6d565b60405180910390fd5b5050565b600061183d8383611005565b61191757600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506118b46116d8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001905061191c565b600090505b92915050565b600061194a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611b0c565b905092915050565b600061195e8383611005565b15611a3957600080600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506119d66116d8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611a3e565b600090505b92915050565b6000611a6c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611b7c565b905092915050565b6000826000018281548110611a8c57611a8b612b86565b5b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015611aef57602002820191906000526020600020905b815481526020019060010190808311611adb575b50505050509050919050565b600081600001805490509050919050565b6000611b188383611c90565b611b71578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611b76565b600090505b92915050565b60008083600101600084815260200190815260200160002054905060008114611c84576000600182611bae9190612f96565b9050600060018660000180549050611bc69190612f96565b9050808214611c35576000866000018281548110611be757611be6612b86565b5b9060005260206000200154905080876000018481548110611c0b57611c0a612b86565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480611c4957611c48612fca565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c8a565b60009150505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611cfc81611cc7565b8114611d0757600080fd5b50565b600081359050611d1981611cf3565b92915050565b600060208284031215611d3557611d34611cbd565b5b6000611d4384828501611d0a565b91505092915050565b60008115159050919050565b611d6181611d4c565b82525050565b6000602082019050611d7c6000830184611d58565b92915050565b6000819050919050565b611d9581611d82565b82525050565b6000602082019050611db06000830184611d8c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611de182611db6565b9050919050565b611df181611dd6565b8114611dfc57600080fd5b50565b600081359050611e0e81611de8565b92915050565b600060208284031215611e2a57611e29611cbd565b5b6000611e3884828501611dff565b91505092915050565b6000819050919050565b611e5481611e41565b82525050565b6000602082019050611e6f6000830184611e4b565b92915050565b611e7e81611d82565b8114611e8957600080fd5b50565b600081359050611e9b81611e75565b92915050565b600060208284031215611eb757611eb6611cbd565b5b6000611ec584828501611e8c565b91505092915050565b60008060408385031215611ee557611ee4611cbd565b5b6000611ef385828601611e8c565b9250506020611f0485828601611dff565b9150509250929050565b600080fd5b600060e08284031215611f2957611f28611f0e565b5b81905092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f5757611f56611f32565b5b8235905067ffffffffffffffff811115611f7457611f73611f37565b5b602083019150836001820283011115611f9057611f8f611f3c565b5b9250929050565b600080600060408486031215611fb057611faf611cbd565b5b600084013567ffffffffffffffff811115611fce57611fcd611cc2565b5b611fda86828701611f13565b935050602084013567ffffffffffffffff811115611ffb57611ffa611cc2565b5b61200786828701611f41565b92509250509250925092565b61201c81611e41565b811461202757600080fd5b50565b60008135905061203981612013565b92915050565b61204881611d4c565b811461205357600080fd5b50565b6000813590506120658161203f565b92915050565b6000806040838503121561208257612081611cbd565b5b60006120908582860161202a565b92505060206120a185828601612056565b9150509250929050565b6000602082840312156120c1576120c0611cbd565b5b60006120cf8482850161202a565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612126826120dd565b810181811067ffffffffffffffff82111715612145576121446120ee565b5b80604052505050565b6000612158611cb3565b9050612164828261211d565b919050565b600080fd5b600067ffffffffffffffff821115612189576121886120ee565b5b602082029050602081019050919050565b60006121ad6121a88461216e565b61214e565b905080838252602082019050602084028301858111156121d0576121cf611f3c565b5b835b818110156121f957806121e5888261202a565b8452602084019350506020810190506121d2565b5050509392505050565b600082601f83011261221857612217611f32565b5b813561222884826020860161219a565b91505092915050565b600060e08284031215612247576122466120d8565b5b61225160e061214e565b9050600061226184828501611dff565b60008301525060206122758482850161202a565b602083015250604061228984828501611e8c565b604083015250606061229d8482850161202a565b60608301525060806122b18482850161202a565b60808301525060a082013567ffffffffffffffff8111156122d5576122d4612169565b5b6122e184828501612203565b60a08301525060c06122f58482850161202a565b60c08301525092915050565b60008060006040848603121561231a57612319611cbd565b5b600084013567ffffffffffffffff81111561233857612337611cc2565b5b61234486828701612231565b935050602084013567ffffffffffffffff81111561236557612364611cc2565b5b61237186828701611f41565b92509250509250925092565b6000806040838503121561239457612393611cbd565b5b60006123a28582860161202a565b92505060206123b38582860161202a565b9150509250929050565b600080604083850312156123d4576123d3611cbd565b5b60006123e285828601611e8c565b92505060206123f38582860161202a565b9150509250929050565b61240681611dd6565b82525050565b600060208201905061242160008301846123fd565b92915050565b6000806000604084860312156124405761243f611cbd565b5b600061244e86828701611e8c565b935050602084013567ffffffffffffffff81111561246f5761246e611cc2565b5b61247b86828701611f41565b92509250509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6124bc81611dd6565b82525050565b60006124ce83836124b3565b60208301905092915050565b6000602082019050919050565b60006124f282612487565b6124fc8185612492565b9350612507836124a3565b8060005b8381101561253857815161251f88826124c2565b975061252a836124da565b92505060018101905061250b565b5085935050505092915050565b6000602082019050818103600083015261255f81846124e7565b905092915050565b6000806020838503121561257e5761257d611cbd565b5b600083013567ffffffffffffffff81111561259c5761259b611cc2565b5b6125a885828601611f41565b92509250509250929050565b600060ff82169050919050565b6125ca816125b4565b82525050565b60006060820190506125e56000830186611d8c565b6125f26020830185611d8c565b6125ff60408301846125c1565b949350505050565b60008083601f84011261261d5761261c611f32565b5b8235905067ffffffffffffffff81111561263a57612639611f37565b5b60208301915083602082028301111561265657612655611f3c565b5b9250929050565b60008060006040848603121561267657612675611cbd565b5b600084013567ffffffffffffffff81111561269457612693611cc2565b5b6126a086828701612607565b935093505060206126b38682870161202a565b9150509250925092565b6000819050919050565b60006126e26126dd6126d884611db6565b6126bd565b611db6565b9050919050565b60006126f4826126c7565b9050919050565b6000612706826126e9565b9050919050565b612716816126fb565b82525050565b6000602082019050612731600083018461270d565b92915050565b60006020828403121561274d5761274c611cbd565b5b600082013567ffffffffffffffff81111561276b5761276a611cc2565b5b61277784828501612231565b91505092915050565b600060408201905061279560008301856123fd565b6127a260208301846123fd565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127e35780820151818401526020810190506127c8565b60008484015250505050565b60006127fa826127a9565b61280481856127b4565b93506128148185602086016127c5565b61281d816120dd565b840191505092915050565b6000602082019050818103600083015261284281846127ef565b905092915050565b60006128563683612231565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126128895761288861285d565b5b80840192508235915067ffffffffffffffff8211156128ab576128aa612862565b5b6020830192506020820236038313156128c7576128c6612867565b5b509250929050565b600082825260208201905092915050565b600080fd5b82818337505050565b60006128fa83856128cf565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561292d5761292c6128e0565b5b60208302925061293e8385846128e5565b82840190509392505050565b600060408201905081810360008301526129658185876128ee565b905061297460208301846123fd565b949350505050565b600060808201905061299160008301886123fd565b81810360208301526129a48186886128ee565b90506129b36040830185611e4b565b6129c06060830184611e4b565b9695505050505050565b60006040820190506129df6000830185611e4b565b6129ec6020830184611d58565b9392505050565b6000608082019050612a086000830187611d8c565b612a1560208301866125c1565b612a226040830185611d8c565b612a2f6060830184611d8c565b95945050505050565b7f4d6174636861776172647353616c65202d20696e76616c6964207369676e617460008201527f757265206c656e67746800000000000000000000000000000000000000000000602082015250565b6000612a94602a836127b4565b9150612a9f82612a38565b604082019050919050565b60006020820190508181036000830152612ac381612a87565b9050919050565b600080fd5b600080fd5b60008085851115612ae857612ae7612aca565b5b83861115612af957612af8612acf565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b6000612b338383612b0f565b82612b3e8135611d82565b92506020821015612b7e57612b797fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802612b1a565b831692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bef826125b4565b9150612bfa836125b4565b9250828201905060ff811115612c1357612c12612bb5565b5b92915050565b600081519050612c2881611de8565b92915050565b600060208284031215612c4457612c43611cbd565b5b6000612c5284828501612c19565b91505092915050565b60006020820190508181036000830152612c768184866128ee565b90509392505050565b6000612c8a82611e41565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612cbc57612cbb612bb5565b5b600182019050919050565b612cd081611e41565b82525050565b612cdf81611d82565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000612d1d8383612cc7565b60208301905092915050565b6000602082019050919050565b6000612d4182612ce5565b612d4b8185612cf0565b9350612d5683612d01565b8060005b83811015612d87578151612d6e8882612d11565b9750612d7983612d29565b925050600181019050612d5a565b5085935050505092915050565b600060e083016000830151612dac60008601826124b3565b506020830151612dbf6020860182612cc7565b506040830151612dd26040860182612cd6565b506060830151612de56060860182612cc7565b506080830151612df86080860182612cc7565b5060a083015184820360a0860152612e108282612d36565b91505060c0830151612e2560c0860182612cc7565b508091505092915050565b60006020820190508181036000830152612e4a8184612d94565b905092915050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612e93601c83612e52565b9150612e9e82612e5d565b601c82019050919050565b6000819050919050565b612ec4612ebf82611d82565b612ea9565b82525050565b6000612ed582612e86565b9150612ee18284612eb3565b60208201915081905092915050565b7f47616c61786973427269646765203a2000000000000000000000000000000000815250565b6000612f21826127a9565b612f2b8185612e52565b9350612f3b8185602086016127c5565b80840191505092915050565b6000612f5282612ef0565b601082019150612f628284612f16565b915081905092915050565b6000604082019050612f8260008301856123fd565b612f8f6020830184611d8c565b9392505050565b6000612fa182611e41565b9150612fac83611e41565b9250828203905081811115612fc457612fc3612bb5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe74782063616e206f6e6c79206265207375626d697474656420627920746865206f776e6572746f6b656e73206e6f7420696e74656e64656420666f72207468697320636861696ea26469706673582212207b4754400f5bfff7cf9b402a6e7a2a37d6df4e69c4d7491f905f98c19003161064736f6c6343000819003300000000000000000000000046db7ff7efe2f660f7de6bf808020ebc3b46010f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000049396893d0cc273b6cbd0f3830fea35c5963fd09000000000000000000000000000000000000000000000000000000000000000e47414c415849535f425249444745000000000000000000000000000000000000