From f819a5849361502c2b37b2d1ab4da388fd96fe6b Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Fri, 26 Jul 2024 23:08:41 +0530 Subject: [PATCH] chore(contract): remove keypackage refs, regen bindings (#24) --- contracts/src/IScKeystore.sol | 12 +- contracts/src/ScKeystore.sol | 41 +- contracts/test/ScKeystore.t.sol | 12 +- crates/bindings/src/deploy.rs | 8 +- crates/bindings/src/isckeystore.rs | 652 +----------- crates/bindings/src/sckeystore.rs | 1561 ++++------------------------ 6 files changed, 214 insertions(+), 2072 deletions(-) diff --git a/contracts/src/IScKeystore.sol b/contracts/src/IScKeystore.sol index 5e2e4f0..a6d7988 100644 --- a/contracts/src/IScKeystore.sol +++ b/contracts/src/IScKeystore.sol @@ -1,24 +1,14 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.24; -struct KeyPackage { - // store serialized onchain - bytes[] data; -} - struct UserInfo { - uint256[] keyPackageIndices; bytes signaturePubKey; } interface IScKeystore { function userExists(address user) external view returns (bool); - function addUser(address user, bytes calldata signaturePubKey, KeyPackage calldata keyPackage) external; + function addUser(address user, bytes calldata signaturePubKey) external; function getUser(address user) external view returns (UserInfo memory); - - function addKeyPackage(KeyPackage calldata) external; - - function getAvailableKeyPackage(address user) external view returns (KeyPackage memory); } diff --git a/contracts/src/ScKeystore.sol b/contracts/src/ScKeystore.sol index 5f451c2..7d998f2 100644 --- a/contracts/src/ScKeystore.sol +++ b/contracts/src/ScKeystore.sol @@ -2,19 +2,16 @@ pragma solidity 0.8.24; import { Ownable } from "Openzeppelin/access/Ownable.sol"; -import { IScKeystore, UserInfo, KeyPackage } from "./IScKeystore.sol"; +import { IScKeystore, UserInfo } from "./IScKeystore.sol"; error UserAlreadyExists(); -error MalformedKeyPackage(); error MalformedUserInfo(); error UserDoesNotExist(); contract ScKeystore is Ownable, IScKeystore { event UserAdded(address user, bytes signaturePubKey); - event UserKeyPackageAdded(address indexed user, uint256 index); mapping(address user => UserInfo userInfo) private users; - KeyPackage[] private keyPackages; constructor(address initialOwner) Ownable(initialOwner) { } @@ -22,17 +19,11 @@ contract ScKeystore is Ownable, IScKeystore { return users[user].signaturePubKey.length > 0; } - function addUser(address user, bytes calldata signaturePubKey, KeyPackage calldata keyPackage) external onlyOwner { + function addUser(address user, bytes calldata signaturePubKey) external onlyOwner { if (signaturePubKey.length == 0) revert MalformedUserInfo(); - if (keyPackage.data.length == 0) revert MalformedKeyPackage(); if (userExists(user)) revert UserAlreadyExists(); - keyPackages.push(keyPackage); - uint256 keyPackageIndex = keyPackages.length - 1; - - users[user] = UserInfo(new uint256[](0), signaturePubKey); - users[user].signaturePubKey = signaturePubKey; - users[user].keyPackageIndices.push(keyPackageIndex); + users[user] = UserInfo(signaturePubKey); emit UserAdded(user, signaturePubKey); } @@ -40,30 +31,4 @@ contract ScKeystore is Ownable, IScKeystore { function getUser(address user) external view returns (UserInfo memory) { return users[user]; } - - function addKeyPackage(KeyPackage calldata keyPackage) external { - if (keyPackage.data.length == 0) revert MalformedKeyPackage(); - if (!userExists(msg.sender)) revert UserDoesNotExist(); - - keyPackages.push(keyPackage); - uint256 keyPackageIndex = keyPackages.length - 1; - users[msg.sender].keyPackageIndices.push(keyPackageIndex); - - emit UserKeyPackageAdded(msg.sender, keyPackageIndex); - } - - function getAvailableKeyPackage(address user) external view returns (KeyPackage memory) { - UserInfo memory userInfo = users[user]; - uint256 keyPackageIndex = userInfo.keyPackageIndices[userInfo.keyPackageIndices.length - 1]; - return keyPackages[keyPackageIndex]; - } - - function getAllKeyPackagesForUser(address user) external view returns (KeyPackage[] memory) { - UserInfo memory userInfo = users[user]; - KeyPackage[] memory userKeyPackages = new KeyPackage[](userInfo.keyPackageIndices.length); - for (uint256 i = 0; i < userInfo.keyPackageIndices.length; i++) { - userKeyPackages[i] = keyPackages[userInfo.keyPackageIndices[i]]; - } - return userKeyPackages; - } } diff --git a/contracts/test/ScKeystore.t.sol b/contracts/test/ScKeystore.t.sol index d79c57b..d52876b 100644 --- a/contracts/test/ScKeystore.t.sol +++ b/contracts/test/ScKeystore.t.sol @@ -18,8 +18,7 @@ contract ScKeystoreTest is Test { } function addUser() internal { - KeyPackage memory keyPackage = KeyPackage({ data: new bytes[](1) }); - s.addUser(address(this), "0x", keyPackage); + s.addUser(address(this), "0x"); } function test__owner() public view { @@ -32,7 +31,7 @@ contract ScKeystoreTest is Test { function test__addUser__reverts__whenUserInfoIsMalformed() public { vm.expectRevert(MalformedUserInfo.selector); - s.addUser(address(this), "", KeyPackage({ data: new bytes[](0) })); + s.addUser(address(this), ""); } function test__addUser__reverts__whenUserAlreadyExists() public { @@ -57,12 +56,5 @@ contract ScKeystoreTest is Test { addUser(); UserInfo memory userInfo = s.getUser(address(this)); assert(userInfo.signaturePubKey.length == 2); - assert(userInfo.keyPackageIndices.length == 1); - } - - function test__getAllKeyPackagesForUser__returnsKeyPackages__whenUserExists() public { - addUser(); - KeyPackage[] memory keyPackages = s.getAllKeyPackagesForUser(address(this)); - assert(keyPackages.length == 1); } } diff --git a/crates/bindings/src/deploy.rs b/crates/bindings/src/deploy.rs index b0a3644..fe51c91 100644 --- a/crates/bindings/src/deploy.rs +++ b/crates/bindings/src/deploy.rs @@ -57,22 +57,22 @@ pub mod Deploy { /// The creation / init bytecode of the contract. /// /// ```text - ///0x6080604052600c805462ff00ff19166201000117905534801561002157600080fd5b50604080516301587f9560e61b8152600481019190915260086044820152674554485f46524f4d60c01b606482015260006024820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d9063561fe54090608401602060405180830381865afa158015610096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ba9190610365565b90506001600160a01b038116156100f457600c80546301000000600160b81b03191663010000006001600160a01b0384160217905561025e565b6040805160608101909152603b808252737109709ecfa91a80626ff3989d68f67f5b1dd12d9163d145736c9161232860208301396040518263ffffffff1660e01b815260040161014491906103e5565b600060405180830381865afa158015610161573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610189919081019061042d565b600d906101969082610564565b50610232600d80546101a7906104d9565b80601f01602080910402602001604051908101604052809291908181526020018280546101d3906104d9565b80156102205780601f106101f557610100808354040283529160200191610220565b820191906000526020600020905b81548152906001019060200180831161020357829003601f168201915b5050505050600061026460201b60201c565b50600c80546001600160a01b039092166301000000026301000000600160b81b03199092169190911790555b50610664565b604051636229498b60e01b81526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90636229498b906102a29087908790600401610623565b602060405180830381865afa1580156102bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e3919061064b565b604051630884001960e21b815260048101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906322100064906024016020604051808303816000875af1158015610338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035c9190610365565b91509250929050565b60006020828403121561037757600080fd5b81516001600160a01b038116811461038e57600080fd5b9392505050565b60005b838110156103b0578181015183820152602001610398565b50506000910152565b600081518084526103d1816020860160208601610395565b601f01601f19169290920160200192915050565b6040815260086040820152674d4e454d4f4e494360c01b606082015260806020820152600061038e60808301846103b9565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561043f57600080fd5b81516001600160401b038082111561045657600080fd5b818401915084601f83011261046a57600080fd5b81518181111561047c5761047c610417565b604051601f8201601f19908116603f011681019083821181831017156104a4576104a4610417565b816040528281528760208487010111156104bd57600080fd5b6104ce836020830160208801610395565b979650505050505050565b600181811c908216806104ed57607f821691505b60208210810361050d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561055f576000816000526020600020601f850160051c8101602086101561053c5750805b601f850160051c820191505b8181101561055b57828155600101610548565b5050505b505050565b81516001600160401b0381111561057d5761057d610417565b6105918161058b84546104d9565b84610513565b602080601f8311600181146105c657600084156105ae5750858301515b600019600386901b1c1916600185901b17855561055b565b600085815260208120601f198616915b828110156105f5578886015182559484019460019091019084016105d6565b50858210156106135787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600061063660408301856103b9565b905063ffffffff831660208301529392505050565b60006020828403121561065d57600080fd5b5051919050565b611cb5806106736000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063522bb7041461003b578063f8ccbf4714610080575b600080fd5b61004e61004936600461029b565b6100a3565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152015b60405180910390f35b600c546100939062010000900460ff1681565b6040519015158152602001610077565b600c546040517f7fec2a8d000000000000000000000000000000000000000000000000000000008152630100000090910473ffffffffffffffffffffffffffffffffffffffff1660048201526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90637fec2a8d90602401600060405180830381600087803b15801561012d57600080fd5b505af1158015610141573d6000803e3d6000fd5b50505050600c60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161017490610281565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156101ad573d6000803e3d6000fd5b509050826040516101bd9061028e565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156101f6573d6000803e3d6000fd5b5091507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561026457600080fd5b505af1158015610278573d6000803e3d6000fd5b50505050915091565b610223806102d983390190565b6117b9806104fc83390190565b6000602082840312156102ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146102d157600080fd5b939250505056fe6080604052600c805462ff00ff19166201000117905534801561002157600080fd5b50604051610223380380610223833981016040819052610040916100f0565b6001600160a01b0381166100675760405163201616d160e21b815260040160405180910390fd5b600e80546001600160a01b0319166001600160a01b03831617905546617a69036100cb57604080516020808201835260009091528151908101909152600e546001600160a01b031690819052600d80546001600160a01b03191690911790556100ea565b604051630b13dbff60e01b815246600482015260240160405180910390fd5b50610120565b60006020828403121561010257600080fd5b81516001600160a01b038116811461011957600080fd5b9392505050565b60f58061012e6000396000f3fe6080604052348015600f57600080fd5b506004361060465760003560e01c806312900da814604b578063d7b6574514608f578063f8a8fd6d1460d2578063f8ccbf471460d4575b600080fd5b6040805160208082018352600090915281518082018352600e5473ffffffffffffffffffffffffffffffffffffffff16908190529151918252015b60405180910390f35b600d5460ae9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016086565b005b600c5460e69062010000900460ff1681565b6040519015158152602001608656608060405234801561001057600080fd5b506040516117b93803806117b983398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b6116bc806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063715018a611610076578063c8d178b21161005b578063c8d178b214610162578063f2fde38b14610175578063fe52f7961461018857600080fd5b8063715018a6146101305780638da5cb5b1461013a57600080fd5b80630e666e49146100a857806333cf520c146100d057806351ca7a9f146100f05780636f77926b14610110575b600080fd5b6100bb6100b6366004610d9a565b61019b565b60405190151581526020015b60405180910390f35b6100e36100de366004610d9a565b6101db565b6040516100c79190610ea6565b6101036100fe366004610d9a565b610438565b6040516100c79190610eb9565b61012361011e366004610d9a565b610707565b6040516100c79190610f2e565b61013861082d565b005b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100c7565b610138610170366004610fd0565b610841565b610138610183366004610d9a565b610aa9565b610138610196366004611078565b610b12565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020819052604082200180548291906101d1906110b5565b9050119050919050565b60408051602081019091526060815273ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832081518154606094810282018501845292810183815290939192849284919084018282801561025f57602002820191906000526020600020905b81548152602001906001019080831161024b575b50505050508152602001600182018054610278906110b5565b80601f01602080910402602001604051908101604052809291908181526020018280546102a4906110b5565b80156102f15780601f106102c6576101008083540402835291602001916102f1565b820191906000526020600020905b8154815290600101906020018083116102d457829003601f168201915b50505050508152505090506000816000015160018360000151516103159190611102565b8151811061032557610325611142565b602002602001015190506002818154811061034257610342611142565b9060005260206000200160405180602001604052908160008201805480602002602001604051908101604052809291908181526020016000905b8282101561042857838290600052602060002001805461039b906110b5565b80601f01602080910402602001604051908101604052809291908181526020018280546103c7906110b5565b80156104145780601f106103e957610100808354040283529160200191610414565b820191906000526020600020905b8154815290600101906020018083116103f757829003601f168201915b50505050508152602001906001019061037c565b5050509152509095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832081518154938402810160609081018452928101848152929493909283918390838801828280156104af57602002820191906000526020600020905b81548152602001906001019080831161049b575b505050505081526020016001820180546104c8906110b5565b80601f01602080910402602001604051908101604052809291908181526020018280546104f4906110b5565b80156105415780601f1061051657610100808354040283529160200191610541565b820191906000526020600020905b81548152906001019060200180831161052457829003601f168201915b5050505050815250509050600081600001515167ffffffffffffffff81111561056c5761056c611171565b6040519080825280602002602001820160405280156105ac57816020015b60408051602081019091526060815281526020019060019003908161058a5790505b50905060005b8251518110156106ff576002836000015182815181106105d4576105d4611142565b6020026020010151815481106105ec576105ec611142565b9060005260206000200160405180602001604052908160008201805480602002602001604051908101604052809291908181526020016000905b828210156106d2578382906000526020600020018054610645906110b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610671906110b5565b80156106be5780601f10610693576101008083540402835291602001916106be565b820191906000526020600020905b8154815290600101906020018083116106a157829003601f168201915b505050505081526020019060010190610626565b50505050815250508282815181106106ec576106ec611142565b60209081029190910101526001016105b2565b509392505050565b6040805180820182526060808252602080830182905273ffffffffffffffffffffffffffffffffffffffff85166000908152600182528490208451815492830281018401865294850182815293949390928492849184018282801561078b57602002820191906000526020600020905b815481526020019060010190808311610777575b505050505081526020016001820180546107a4906110b5565b80601f01602080910402602001604051908101604052809291908181526020018280546107d0906110b5565b801561081d5780601f106107f25761010080835404028352916020019161081d565b820191906000526020600020905b81548152906001019060200180831161080057829003601f168201915b5050505050815250509050919050565b610835610c49565b61083f6000610c9c565b565b610849610c49565b6000829003610884576040517ff969dd5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e81806111a0565b90506000036108c9576040517f2bc32b1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d28461019b565b15610909576040517fc344397e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805460018101825560009190915281907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161094782826113e8565b505060025460009061095b90600190611102565b604080516000818301908152606082018352815281516020601f880181900481028201810190935286815292935091818301918790879081908401838280828437600092018290525093909452505073ffffffffffffffffffffffffffffffffffffffff88168152600160209081526040909120835180519193506109e4928492910190610d11565b50602082015160018201906109f99082611534565b50505073ffffffffffffffffffffffffffffffffffffffff8516600090815260016020819052604090912001610a308486836112ce565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152600160208181526040808420805493840181558452922001829055517f3d3d05375966308799f27583173d73adad0e9648aac96d354b0d554a6ea8d57490610a9a90879087908790611652565b60405180910390a15050505050565b610ab1610c49565b73ffffffffffffffffffffffffffffffffffffffff8116610b06576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b610b0f81610c9c565b50565b610b1c81806111a0565b9050600003610b57576040517f2bc32b1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b603361019b565b610b96576040517f907b361f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805460018101825560009190915281907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01610bd482826113e8565b5050600254600090610be890600190611102565b33600081815260016020818152604080842080549384018155845292200183905551919250907fd594e1a09354af093e9bba3f535456e7e5b0345990e37c37e9c41bb57b9912ca90610c3d9084815260200190565b60405180910390a25050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461083f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610afd565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610d4c579160200282015b82811115610d4c578251825591602001919060010190610d31565b50610d58929150610d5c565b5090565b5b80821115610d585760008155600101610d5d565b803573ffffffffffffffffffffffffffffffffffffffff81168114610d9557600080fd5b919050565b600060208284031215610dac57600080fd5b610db582610d71565b9392505050565b6000815180845260005b81811015610de257602081850181015186830182015201610dc6565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6000602080840183516020865281815180845260408801915060408160051b890101935060208301925060005b81811015610e99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898603018352610e87858551610dbc565b94509285019291850191600101610e4d565b5092979650505050505050565b602081526000610db56020830184610e20565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015610e99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452610f1c858351610e20565b94509285019290850190600101610ee2565b6020808252825160408383015280516060840181905260009291820190839060808601905b80831015610f735783518252928401926001929092019190840190610f53565b50928601518584037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001604087015292610fad8185610dbc565b979650505050505050565b600060208284031215610fca57600080fd5b50919050565b60008060008060608587031215610fe657600080fd5b610fef85610d71565b9350602085013567ffffffffffffffff8082111561100c57600080fd5b818701915087601f83011261102057600080fd5b81358181111561102f57600080fd5b88602082850101111561104157600080fd5b60208301955080945050604087013591508082111561105f57600080fd5b5061106c87828801610fb8565b91505092959194509250565b60006020828403121561108a57600080fd5b813567ffffffffffffffff8111156110a157600080fd5b6110ad84828501610fb8565b949350505050565b600181811c908216806110c957607f821691505b602082108103610fca577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8181038181111561113c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126111d557600080fd5b83018035915067ffffffffffffffff8211156111f057600080fd5b6020019150600581901b360382131561120857600080fd5b9250929050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261124457600080fd5b83018035915067ffffffffffffffff82111561125f57600080fd5b60200191503681900382131561120857600080fd5b5b818110156112895760008155600101611275565b5050565b601f8211156112c957806000526020600020601f840160051c810160208510156112b45750805b6112c6601f850160051c830182611274565b50505b505050565b67ffffffffffffffff8311156112e6576112e6611171565b6112fa836112f483546110b5565b8361128d565b6000601f84116001811461134c57600085156113165750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556112c6565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561139b578685013582556020948501946001909201910161137b565b50868210156113d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b81357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261141a57600080fd5b8201803567ffffffffffffffff81111561143357600080fd5b602091820191600582811b360384131561144c57600080fd5b6801000000000000000083111561146557611465611171565b8454838655808410156114ed576000868152602081208581019083015b808210156114e95761149482546110b5565b80156114dd57601f808211600181146114af578585556114da565b6000858152602090206114cb8385018a1c820160018301611274565b50600085815260208120818755555b50505b50600182019150611482565b5050505b505060008481526020812084915b8481101561152a5761150d838761120f565b6115188183866112ce565b505091830191600191820191016114fb565b5050505050505050565b815167ffffffffffffffff81111561154e5761154e611171565b6115628161155c84546110b5565b8461128d565b602080601f8311600181146115b5576000841561157f5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561164a565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611602578886015182559484019460019091019084016115e3565b508582101561163e57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019291505056746573742074657374207465737420746573742074657374207465737420746573742074657374207465737420746573742074657374206a756e6b + ///0x6080604052600c805462ff00ff19166201000117905534801561002157600080fd5b50604080516301587f9560e61b8152600481019190915260086044820152674554485f46524f4d60c01b606482015260006024820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d9063561fe54090608401602060405180830381865afa158015610096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ba9190610365565b90506001600160a01b038116156100f457600c80546301000000600160b81b03191663010000006001600160a01b0384160217905561025e565b6040805160608101909152603b808252737109709ecfa91a80626ff3989d68f67f5b1dd12d9163d145736c916114ab60208301396040518263ffffffff1660e01b815260040161014491906103e5565b600060405180830381865afa158015610161573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610189919081019061042d565b600d906101969082610564565b50610232600d80546101a7906104d9565b80601f01602080910402602001604051908101604052809291908181526020018280546101d3906104d9565b80156102205780601f106101f557610100808354040283529160200191610220565b820191906000526020600020905b81548152906001019060200180831161020357829003601f168201915b5050505050600061026460201b60201c565b50600c80546001600160a01b039092166301000000026301000000600160b81b03199092169190911790555b50610664565b604051636229498b60e01b81526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90636229498b906102a29087908790600401610623565b602060405180830381865afa1580156102bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e3919061064b565b604051630884001960e21b815260048101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906322100064906024016020604051808303816000875af1158015610338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035c9190610365565b91509250929050565b60006020828403121561037757600080fd5b81516001600160a01b038116811461038e57600080fd5b9392505050565b60005b838110156103b0578181015183820152602001610398565b50506000910152565b600081518084526103d1816020860160208601610395565b601f01601f19169290920160200192915050565b6040815260086040820152674d4e454d4f4e494360c01b606082015260806020820152600061038e60808301846103b9565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561043f57600080fd5b81516001600160401b038082111561045657600080fd5b818401915084601f83011261046a57600080fd5b81518181111561047c5761047c610417565b604051601f8201601f19908116603f011681019083821181831017156104a4576104a4610417565b816040528281528760208487010111156104bd57600080fd5b6104ce836020830160208801610395565b979650505050505050565b600181811c908216806104ed57607f821691505b60208210810361050d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561055f576000816000526020600020601f850160051c8101602086101561053c5750805b601f850160051c820191505b8181101561055b57828155600101610548565b5050505b505050565b81516001600160401b0381111561057d5761057d610417565b6105918161058b84546104d9565b84610513565b602080601f8311600181146105c657600084156105ae5750858301515b600019600386901b1c1916600185901b17855561055b565b600085815260208120601f198616915b828110156105f5578886015182559484019460019091019084016105d6565b50858210156106135787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600061063660408301856103b9565b905063ffffffff831660208301529392505050565b60006020828403121561065d57600080fd5b5051919050565b610e38806106736000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063522bb7041461003b578063f8ccbf4714610080575b600080fd5b61004e61004936600461029b565b6100a3565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152015b60405180910390f35b600c546100939062010000900460ff1681565b6040519015158152602001610077565b600c546040517f7fec2a8d000000000000000000000000000000000000000000000000000000008152630100000090910473ffffffffffffffffffffffffffffffffffffffff1660048201526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90637fec2a8d90602401600060405180830381600087803b15801561012d57600080fd5b505af1158015610141573d6000803e3d6000fd5b50505050600c60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161017490610281565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156101ad573d6000803e3d6000fd5b509050826040516101bd9061028e565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156101f6573d6000803e3d6000fd5b5091507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561026457600080fd5b505af1158015610278573d6000803e3d6000fd5b50505050915091565b610223806102d983390190565b61093c806104fc83390190565b6000602082840312156102ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146102d157600080fd5b939250505056fe6080604052600c805462ff00ff19166201000117905534801561002157600080fd5b50604051610223380380610223833981016040819052610040916100f0565b6001600160a01b0381166100675760405163201616d160e21b815260040160405180910390fd5b600e80546001600160a01b0319166001600160a01b03831617905546617a69036100cb57604080516020808201835260009091528151908101909152600e546001600160a01b031690819052600d80546001600160a01b03191690911790556100ea565b604051630b13dbff60e01b815246600482015260240160405180910390fd5b50610120565b60006020828403121561010257600080fd5b81516001600160a01b038116811461011957600080fd5b9392505050565b60f58061012e6000396000f3fe6080604052348015600f57600080fd5b506004361060465760003560e01c806312900da814604b578063d7b6574514608f578063f8a8fd6d1460d2578063f8ccbf471460d4575b600080fd5b6040805160208082018352600090915281518082018352600e5473ffffffffffffffffffffffffffffffffffffffff16908190529151918252015b60405180910390f35b600d5460ae9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016086565b005b600c5460e69062010000900460ff1681565b6040519015158152602001608656608060405234801561001057600080fd5b5060405161093c38038061093c83398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b61083f806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638da5cb5b116100505780638da5cb5b146100c9578063e3eccd10146100f1578063f2fde38b1461010457600080fd5b80630e666e49146100775780636f77926b1461009f578063715018a6146100bf575b600080fd5b61008a6100853660046104cd565b610117565b60405190151581526020015b60405180910390f35b6100b26100ad3660046104cd565b610154565b60405161009691906104ef565b6100c761022a565b005b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b6100c76100ff366004610565565b61023e565b6100c76101123660046104cd565b610373565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120805482919061014a906105e8565b9050119050919050565b60408051602080820183526060825273ffffffffffffffffffffffffffffffffffffffff84166000908152600182528390208351918201909352825491929091829082906101a1906105e8565b80601f01602080910402602001604051908101604052809291908181526020018280546101cd906105e8565b801561021a5780601f106101ef5761010080835404028352916020019161021a565b820191906000526020600020905b8154815290600101906020018083116101fd57829003601f168201915b5050505050815250509050919050565b6102326103dc565b61023c600061042f565b565b6102466103dc565b6000819003610281576040517ff969dd5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028a83610117565b156102c1576040517fc344397e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020601f84018190048102820183018352810183815290918291908590859081908501838280828437600092018290525093909452505073ffffffffffffffffffffffffffffffffffffffff861681526001602052604090208251909150819061032f90826106bb565b509050507f3d3d05375966308799f27583173d73adad0e9648aac96d354b0d554a6ea8d574838383604051610366939291906107d5565b60405180910390a1505050565b61037b6103dc565b73ffffffffffffffffffffffffffffffffffffffff81166103d0576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b6103d98161042f565b50565b60005473ffffffffffffffffffffffffffffffffffffffff16331461023c576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016103c7565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104c857600080fd5b919050565b6000602082840312156104df57600080fd5b6104e8826104a4565b9392505050565b600060208083528351602080850152805180604086015260005b8181101561052557828101840151868201606001528301610509565b5060006060828701015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116860101935050505092915050565b60008060006040848603121561057a57600080fd5b610583846104a4565b9250602084013567ffffffffffffffff808211156105a057600080fd5b818601915086601f8301126105b457600080fd5b8135818111156105c357600080fd5b8760208285010111156105d557600080fd5b6020830194508093505050509250925092565b600181811c908216806105fc57607f821691505b602082108103610635577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f8211156106b6576000816000526020600020601f850160051c810160208610156106935750805b601f850160051c820191505b818110156106b25782815560010161069f565b5050505b505050565b815167ffffffffffffffff8111156106d5576106d561063b565b6106e9816106e384546105e8565b8461066a565b602080601f83116001811461073c57600084156107065750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556106b2565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156107895788860151825594840194600190910190840161076a565b50858210156107c557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019291505056746573742074657374207465737420746573742074657374207465737420746573742074657374207465737420746573742074657374206a756e6b /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x0C\x80Tb\xFF\0\xFF\x19\x16b\x01\0\x01\x17\x90U4\x80\x15a\0!W`\0\x80\xFD[P`@\x80Qc\x01X\x7F\x95`\xE6\x1B\x81R`\x04\x81\x01\x91\x90\x91R`\x08`D\x82\x01RgETH_FROM`\xC0\x1B`d\x82\x01R`\0`$\x82\x01\x81\x90R\x90sq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90cV\x1F\xE5@\x90`\x84\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\0\x96W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\0\xBA\x91\x90a\x03eV[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16\x15a\0\xF4W`\x0C\x80Tc\x01\0\0\0`\x01`\xB8\x1B\x03\x19\x16c\x01\0\0\0`\x01`\x01`\xA0\x1B\x03\x84\x16\x02\x17\x90Ua\x02^V[`@\x80Q``\x81\x01\x90\x91R`;\x80\x82Rsq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x91c\xD1Esl\x91a#(` \x83\x019`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x01D\x91\x90a\x03\xE5V[`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x01aW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x01\x89\x91\x90\x81\x01\x90a\x04-V[`\r\x90a\x01\x96\x90\x82a\x05dV[Pa\x022`\r\x80Ta\x01\xA7\x90a\x04\xD9V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x01\xD3\x90a\x04\xD9V[\x80\x15a\x02 W\x80`\x1F\x10a\x01\xF5Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x02 V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x02\x03W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP`\0a\x02d` \x1B` \x1CV[P`\x0C\x80T`\x01`\x01`\xA0\x1B\x03\x90\x92\x16c\x01\0\0\0\x02c\x01\0\0\0`\x01`\xB8\x1B\x03\x19\x90\x92\x16\x91\x90\x91\x17\x90U[Pa\x06dV[`@Qcb)I\x8B`\xE0\x1B\x81R`\0\x90\x81\x90sq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90cb)I\x8B\x90a\x02\xA2\x90\x87\x90\x87\x90`\x04\x01a\x06#V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x02\xBFW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x02\xE3\x91\x90a\x06KV[`@Qc\x08\x84\0\x19`\xE2\x1B\x81R`\x04\x81\x01\x82\x90R\x90\x91Psq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90c\"\x10\0d\x90`$\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x038W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\\\x91\x90a\x03eV[\x91P\x92P\x92\x90PV[`\0` \x82\x84\x03\x12\x15a\x03wW`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x03\x8EW`\0\x80\xFD[\x93\x92PPPV[`\0[\x83\x81\x10\x15a\x03\xB0W\x81\x81\x01Q\x83\x82\x01R` \x01a\x03\x98V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x03\xD1\x81` \x86\x01` \x86\x01a\x03\x95V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[`@\x81R`\x08`@\x82\x01RgMNEMONIC`\xC0\x1B``\x82\x01R`\x80` \x82\x01R`\0a\x03\x8E`\x80\x83\x01\x84a\x03\xB9V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0` \x82\x84\x03\x12\x15a\x04?W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x04VW`\0\x80\xFD[\x81\x84\x01\x91P\x84`\x1F\x83\x01\x12a\x04jW`\0\x80\xFD[\x81Q\x81\x81\x11\x15a\x04|Wa\x04|a\x04\x17V[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15a\x04\xA4Wa\x04\xA4a\x04\x17V[\x81`@R\x82\x81R\x87` \x84\x87\x01\x01\x11\x15a\x04\xBDW`\0\x80\xFD[a\x04\xCE\x83` \x83\x01` \x88\x01a\x03\x95V[\x97\x96PPPPPPPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x04\xEDW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x05\rWcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x05_W`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\x05=`\0\xFD[PPPP`\x0C`\x03\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Qa\x01t\x90a\x02\x81V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`@Q\x80\x91\x03\x90`\0\xF0\x80\x15\x80\x15a\x01\xADW=`\0\x80>=`\0\xFD[P\x90P\x82`@Qa\x01\xBD\x90a\x02\x8EV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`@Q\x80\x91\x03\x90`\0\xF0\x80\x15\x80\x15a\x01\xF6W=`\0\x80>=`\0\xFD[P\x91P\x7F\x88\\\xB6\x92@\xA95\xD62\xD7\x9C1q\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-`\0\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cv\xEA\xDD6`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x02dW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x02xW=`\0\x80>=`\0\xFD[PPPP\x91P\x91V[a\x02#\x80a\x02\xD9\x839\x01\x90V[a\x17\xB9\x80a\x04\xFC\x839\x01\x90V[`\0` \x82\x84\x03\x12\x15a\x02\xADW`\0\x80\xFD[\x815s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a\x02\xD1W`\0\x80\xFD[\x93\x92PPPV\xFE`\x80`@R`\x0C\x80Tb\xFF\0\xFF\x19\x16b\x01\0\x01\x17\x90U4\x80\x15a\0!W`\0\x80\xFD[P`@Qa\x02#8\x03\x80a\x02#\x839\x81\x01`@\x81\x90Ra\0@\x91a\0\xF0V[`\x01`\x01`\xA0\x1B\x03\x81\x16a\0gW`@Qc \x16\x16\xD1`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x0E\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90UFazi\x03a\0\xCBW`@\x80Q` \x80\x82\x01\x83R`\0\x90\x91R\x81Q\x90\x81\x01\x90\x91R`\x0ET`\x01`\x01`\xA0\x1B\x03\x16\x90\x81\x90R`\r\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16\x90\x91\x17\x90Ua\0\xEAV[`@Qc\x0B\x13\xDB\xFF`\xE0\x1B\x81RF`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[Pa\x01 V[`\0` \x82\x84\x03\x12\x15a\x01\x02W`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x01\x19W`\0\x80\xFD[\x93\x92PPPV[`\xF5\x80a\x01.`\09`\0\xF3\xFE`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[P`\x046\x10`FW`\x005`\xE0\x1C\x80c\x12\x90\r\xA8\x14`KW\x80c\xD7\xB6WE\x14`\x8FW\x80c\xF8\xA8\xFDm\x14`\xD2W\x80c\xF8\xCC\xBFG\x14`\xD4W[`\0\x80\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x90\x91R\x81Q\x80\x82\x01\x83R`\x0ETs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x81\x90R\x91Q\x91\x82R\x01[`@Q\x80\x91\x03\x90\xF3[`\rT`\xAE\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`\x86V[\0[`\x0CT`\xE6\x90b\x01\0\0\x90\x04`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01`\x86V`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x17\xB98\x03\x80a\x17\xB9\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\xBEV[\x80`\x01`\x01`\xA0\x1B\x03\x81\x16a\0^W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R`\0`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[a\0g\x81a\0nV[PPa\0\xEEV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\0` \x82\x84\x03\x12\x15a\0\xD0W`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\xE7W`\0\x80\xFD[\x93\x92PPPV[a\x16\xBC\x80a\0\xFD`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xA3W`\x005`\xE0\x1C\x80cqP\x18\xA6\x11a\0vW\x80c\xC8\xD1x\xB2\x11a\0[W\x80c\xC8\xD1x\xB2\x14a\x01bW\x80c\xF2\xFD\xE3\x8B\x14a\x01uW\x80c\xFER\xF7\x96\x14a\x01\x88W`\0\x80\xFD[\x80cqP\x18\xA6\x14a\x010W\x80c\x8D\xA5\xCB[\x14a\x01:W`\0\x80\xFD[\x80c\x0EfnI\x14a\0\xA8W\x80c3\xCFR\x0C\x14a\0\xD0W\x80cQ\xCAz\x9F\x14a\0\xF0W\x80cow\x92k\x14a\x01\x10W[`\0\x80\xFD[a\0\xBBa\0\xB66`\x04a\r\x9AV[a\x01\x9BV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xE3a\0\xDE6`\x04a\r\x9AV[a\x01\xDBV[`@Qa\0\xC7\x91\x90a\x0E\xA6V[a\x01\x03a\0\xFE6`\x04a\r\x9AV[a\x048V[`@Qa\0\xC7\x91\x90a\x0E\xB9V[a\x01#a\x01\x1E6`\x04a\r\x9AV[a\x07\x07V[`@Qa\0\xC7\x91\x90a\x0F.V[a\x018a\x08-V[\0[`\0T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\0\xC7V[a\x018a\x01p6`\x04a\x0F\xD0V[a\x08AV[a\x018a\x01\x836`\x04a\r\x9AV[a\n\xA9V[a\x018a\x01\x966`\x04a\x10xV[a\x0B\x12V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16`\0\x90\x81R`\x01` \x81\x90R`@\x82 \x01\x80T\x82\x91\x90a\x01\xD1\x90a\x10\xB5V[\x90P\x11\x90P\x91\x90PV[`@\x80Q` \x81\x01\x90\x91R``\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16`\0\x90\x81R`\x01` \x90\x81R`@\x80\x83 \x81Q\x81T``\x94\x81\x02\x82\x01\x85\x01\x84R\x92\x81\x01\x83\x81R\x90\x93\x91\x92\x84\x92\x84\x91\x90\x84\x01\x82\x82\x80\x15a\x02_W` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x02KW[PPPPP\x81R` \x01`\x01\x82\x01\x80Ta\x02x\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x02\xA4\x90a\x10\xB5V[\x80\x15a\x02\xF1W\x80`\x1F\x10a\x02\xC6Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x02\xF1V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x02\xD4W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P`\0\x81`\0\x01Q`\x01\x83`\0\x01QQa\x03\x15\x91\x90a\x11\x02V[\x81Q\x81\x10a\x03%Wa\x03%a\x11BV[` \x02` \x01\x01Q\x90P`\x02\x81\x81T\x81\x10a\x03BWa\x03Ba\x11BV[\x90`\0R` `\0 \x01`@Q\x80` \x01`@R\x90\x81`\0\x82\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01`\0\x90[\x82\x82\x10\x15a\x04(W\x83\x82\x90`\0R` `\0 \x01\x80Ta\x03\x9B\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x03\xC7\x90a\x10\xB5V[\x80\x15a\x04\x14W\x80`\x1F\x10a\x03\xE9Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x04\x14V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x03\xF7W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\x03|V[PPP\x91RP\x90\x95\x94PPPPPV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16`\0\x90\x81R`\x01` \x90\x81R`@\x80\x83 \x81Q\x81T\x93\x84\x02\x81\x01``\x90\x81\x01\x84R\x92\x81\x01\x84\x81R\x92\x94\x93\x90\x92\x83\x91\x83\x90\x83\x88\x01\x82\x82\x80\x15a\x04\xAFW` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x04\x9BW[PPPPP\x81R` \x01`\x01\x82\x01\x80Ta\x04\xC8\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x04\xF4\x90a\x10\xB5V[\x80\x15a\x05AW\x80`\x1F\x10a\x05\x16Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x05AV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x05$W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P`\0\x81`\0\x01QQg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x05lWa\x05la\x11qV[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x05\xACW\x81` \x01[`@\x80Q` \x81\x01\x90\x91R``\x81R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05\x8AW\x90P[P\x90P`\0[\x82QQ\x81\x10\x15a\x06\xFFW`\x02\x83`\0\x01Q\x82\x81Q\x81\x10a\x05\xD4Wa\x05\xD4a\x11BV[` \x02` \x01\x01Q\x81T\x81\x10a\x05\xECWa\x05\xECa\x11BV[\x90`\0R` `\0 \x01`@Q\x80` \x01`@R\x90\x81`\0\x82\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01`\0\x90[\x82\x82\x10\x15a\x06\xD2W\x83\x82\x90`\0R` `\0 \x01\x80Ta\x06E\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x06q\x90a\x10\xB5V[\x80\x15a\x06\xBEW\x80`\x1F\x10a\x06\x93Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x06\xBEV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x06\xA1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\x06&V[PPPP\x81RPP\x82\x82\x81Q\x81\x10a\x06\xECWa\x06\xECa\x11BV[` \x90\x81\x02\x91\x90\x91\x01\x01R`\x01\x01a\x05\xB2V[P\x93\x92PPPV[`@\x80Q\x80\x82\x01\x82R``\x80\x82R` \x80\x83\x01\x82\x90Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\0\x90\x81R`\x01\x82R\x84\x90 \x84Q\x81T\x92\x83\x02\x81\x01\x84\x01\x86R\x94\x85\x01\x82\x81R\x93\x94\x93\x90\x92\x84\x92\x84\x91\x84\x01\x82\x82\x80\x15a\x07\x8BW` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x07wW[PPPPP\x81R` \x01`\x01\x82\x01\x80Ta\x07\xA4\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x07\xD0\x90a\x10\xB5V[\x80\x15a\x08\x1DW\x80`\x1F\x10a\x07\xF2Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x08\x1DV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x08\0W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P\x91\x90PV[a\x085a\x0CIV[a\x08?`\0a\x0C\x9CV[V[a\x08Ia\x0CIV[`\0\x82\x90\x03a\x08\x84W`@Q\x7F\xF9i\xDDY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x08\x8E\x81\x80a\x11\xA0V[\x90P`\0\x03a\x08\xC9W`@Q\x7F+\xC3+\x16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x08\xD2\x84a\x01\x9BV[\x15a\t\tW`@Q\x7F\xC3D9~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x81\x90\x7F@W\x87\xFA\x12\xA8#\xE0\xF2\xB7c\x1C\xC4\x1B;\xA8\x82\x8B3!\xCA\x81\x11\x11\xFAu\xCD:\xA3\xBBZ\xCE\x01a\tG\x82\x82a\x13\xE8V[PP`\x02T`\0\x90a\t[\x90`\x01\x90a\x11\x02V[`@\x80Q`\0\x81\x83\x01\x90\x81R``\x82\x01\x83R\x81R\x81Q` `\x1F\x88\x01\x81\x90\x04\x81\x02\x82\x01\x81\x01\x90\x93R\x86\x81R\x92\x93P\x91\x81\x83\x01\x91\x87\x90\x87\x90\x81\x90\x84\x01\x83\x82\x80\x82\x847`\0\x92\x01\x82\x90RP\x93\x90\x94RPPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x81R`\x01` \x90\x81R`@\x90\x91 \x83Q\x80Q\x91\x93Pa\t\xE4\x92\x84\x92\x91\x01\x90a\r\x11V[P` \x82\x01Q`\x01\x82\x01\x90a\t\xF9\x90\x82a\x154V[PPPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\0\x90\x81R`\x01` \x81\x90R`@\x90\x91 \x01a\n0\x84\x86\x83a\x12\xCEV[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\0\x90\x81R`\x01` \x81\x81R`@\x80\x84 \x80T\x93\x84\x01\x81U\x84R\x92 \x01\x82\x90UQ\x7F==\x057Yf0\x87\x99\xF2u\x83\x17=s\xAD\xAD\x0E\x96H\xAA\xC9m5K\rUJn\xA8\xD5t\x90a\n\x9A\x90\x87\x90\x87\x90\x87\x90a\x16RV[`@Q\x80\x91\x03\x90\xA1PPPPPV[a\n\xB1a\x0CIV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16a\x0B\x06W`@Q\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\0`\x04\x82\x01R`$\x01[`@Q\x80\x91\x03\x90\xFD[a\x0B\x0F\x81a\x0C\x9CV[PV[a\x0B\x1C\x81\x80a\x11\xA0V[\x90P`\0\x03a\x0BWW`@Q\x7F+\xC3+\x16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0B`3a\x01\x9BV[a\x0B\x96W`@Q\x7F\x90{6\x1F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x81\x90\x7F@W\x87\xFA\x12\xA8#\xE0\xF2\xB7c\x1C\xC4\x1B;\xA8\x82\x8B3!\xCA\x81\x11\x11\xFAu\xCD:\xA3\xBBZ\xCE\x01a\x0B\xD4\x82\x82a\x13\xE8V[PP`\x02T`\0\x90a\x0B\xE8\x90`\x01\x90a\x11\x02V[3`\0\x81\x81R`\x01` \x81\x81R`@\x80\x84 \x80T\x93\x84\x01\x81U\x84R\x92 \x01\x83\x90UQ\x91\x92P\x90\x7F\xD5\x94\xE1\xA0\x93T\xAF\t>\x9B\xBA?STV\xE7\xE5\xB04Y\x90\xE3|7\xE9\xC4\x1B\xB5{\x99\x12\xCA\x90a\x0C=\x90\x84\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA2PPV[`\0Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163\x14a\x08?W`@Q\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R3`\x04\x82\x01R`$\x01a\n\xFDV[`\0\x80Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x81\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x82\x80T\x82\x82U\x90`\0R` `\0 \x90\x81\x01\x92\x82\x15a\rLW\x91` \x02\x82\x01[\x82\x81\x11\x15a\rLW\x82Q\x82U\x91` \x01\x91\x90`\x01\x01\x90a\r1V[Pa\rX\x92\x91Pa\r\\V[P\x90V[[\x80\x82\x11\x15a\rXW`\0\x81U`\x01\x01a\r]V[\x805s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a\r\x95W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\r\xACW`\0\x80\xFD[a\r\xB5\x82a\rqV[\x93\x92PPPV[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15a\r\xE2W` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01a\r\xC6V[P`\0` \x82\x86\x01\x01R` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[`\0` \x80\x84\x01\x83Q` \x86R\x81\x81Q\x80\x84R`@\x88\x01\x91P`@\x81`\x05\x1B\x89\x01\x01\x93P` \x83\x01\x92P`\0[\x81\x81\x10\x15a\x0E\x99W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x89\x86\x03\x01\x83Ra\x0E\x87\x85\x85Qa\r\xBCV[\x94P\x92\x85\x01\x92\x91\x85\x01\x91`\x01\x01a\x0EMV[P\x92\x97\x96PPPPPPPV[` \x81R`\0a\r\xB5` \x83\x01\x84a\x0E V[`\0` \x80\x83\x01` \x84R\x80\x85Q\x80\x83R`@\x86\x01\x91P`@\x81`\x05\x1B\x87\x01\x01\x92P` \x87\x01`\0[\x82\x81\x10\x15a\x0E\x99W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x88\x86\x03\x01\x84Ra\x0F\x1C\x85\x83Qa\x0E V[\x94P\x92\x85\x01\x92\x90\x85\x01\x90`\x01\x01a\x0E\xE2V[` \x80\x82R\x82Q`@\x83\x83\x01R\x80Q``\x84\x01\x81\x90R`\0\x92\x91\x82\x01\x90\x83\x90`\x80\x86\x01\x90[\x80\x83\x10\x15a\x0FsW\x83Q\x82R\x92\x84\x01\x92`\x01\x92\x90\x92\x01\x91\x90\x84\x01\x90a\x0FSV[P\x92\x86\x01Q\x85\x84\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x01`@\x87\x01R\x92a\x0F\xAD\x81\x85a\r\xBCV[\x97\x96PPPPPPPV[`\0` \x82\x84\x03\x12\x15a\x0F\xCAW`\0\x80\xFD[P\x91\x90PV[`\0\x80`\0\x80``\x85\x87\x03\x12\x15a\x0F\xE6W`\0\x80\xFD[a\x0F\xEF\x85a\rqV[\x93P` \x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x10\x0CW`\0\x80\xFD[\x81\x87\x01\x91P\x87`\x1F\x83\x01\x12a\x10 W`\0\x80\xFD[\x815\x81\x81\x11\x15a\x10/W`\0\x80\xFD[\x88` \x82\x85\x01\x01\x11\x15a\x10AW`\0\x80\xFD[` \x83\x01\x95P\x80\x94PP`@\x87\x015\x91P\x80\x82\x11\x15a\x10_W`\0\x80\xFD[Pa\x10l\x87\x82\x88\x01a\x0F\xB8V[\x91PP\x92\x95\x91\x94P\x92PV[`\0` \x82\x84\x03\x12\x15a\x10\x8AW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x10\xA1W`\0\x80\xFD[a\x10\xAD\x84\x82\x85\x01a\x0F\xB8V[\x94\x93PPPPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x10\xC9W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x0F\xCAW\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x81\x81\x03\x81\x81\x11\x15a\x11W\x87\x85\x01Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PP`\x01\x84`\x01\x1B\x01\x85U[PPPPPPV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x81R`@` \x82\x01R\x81`@\x82\x01R\x81\x83``\x83\x017`\0\x81\x83\x01``\x90\x81\x01\x91\x90\x91R`\x1F\x90\x92\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16\x01\x01\x92\x91PPVtest test test test test test test test test test test junk", + b"`\x80`@R`\x0C\x80Tb\xFF\0\xFF\x19\x16b\x01\0\x01\x17\x90U4\x80\x15a\0!W`\0\x80\xFD[P`@\x80Qc\x01X\x7F\x95`\xE6\x1B\x81R`\x04\x81\x01\x91\x90\x91R`\x08`D\x82\x01RgETH_FROM`\xC0\x1B`d\x82\x01R`\0`$\x82\x01\x81\x90R\x90sq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90cV\x1F\xE5@\x90`\x84\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\0\x96W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\0\xBA\x91\x90a\x03eV[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16\x15a\0\xF4W`\x0C\x80Tc\x01\0\0\0`\x01`\xB8\x1B\x03\x19\x16c\x01\0\0\0`\x01`\x01`\xA0\x1B\x03\x84\x16\x02\x17\x90Ua\x02^V[`@\x80Q``\x81\x01\x90\x91R`;\x80\x82Rsq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x91c\xD1Esl\x91a\x14\xAB` \x83\x019`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x01D\x91\x90a\x03\xE5V[`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x01aW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x01\x89\x91\x90\x81\x01\x90a\x04-V[`\r\x90a\x01\x96\x90\x82a\x05dV[Pa\x022`\r\x80Ta\x01\xA7\x90a\x04\xD9V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x01\xD3\x90a\x04\xD9V[\x80\x15a\x02 W\x80`\x1F\x10a\x01\xF5Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x02 V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x02\x03W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP`\0a\x02d` \x1B` \x1CV[P`\x0C\x80T`\x01`\x01`\xA0\x1B\x03\x90\x92\x16c\x01\0\0\0\x02c\x01\0\0\0`\x01`\xB8\x1B\x03\x19\x90\x92\x16\x91\x90\x91\x17\x90U[Pa\x06dV[`@Qcb)I\x8B`\xE0\x1B\x81R`\0\x90\x81\x90sq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90cb)I\x8B\x90a\x02\xA2\x90\x87\x90\x87\x90`\x04\x01a\x06#V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x02\xBFW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x02\xE3\x91\x90a\x06KV[`@Qc\x08\x84\0\x19`\xE2\x1B\x81R`\x04\x81\x01\x82\x90R\x90\x91Psq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90c\"\x10\0d\x90`$\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x038W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\\\x91\x90a\x03eV[\x91P\x92P\x92\x90PV[`\0` \x82\x84\x03\x12\x15a\x03wW`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x03\x8EW`\0\x80\xFD[\x93\x92PPPV[`\0[\x83\x81\x10\x15a\x03\xB0W\x81\x81\x01Q\x83\x82\x01R` \x01a\x03\x98V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x03\xD1\x81` \x86\x01` \x86\x01a\x03\x95V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[`@\x81R`\x08`@\x82\x01RgMNEMONIC`\xC0\x1B``\x82\x01R`\x80` \x82\x01R`\0a\x03\x8E`\x80\x83\x01\x84a\x03\xB9V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0` \x82\x84\x03\x12\x15a\x04?W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x04VW`\0\x80\xFD[\x81\x84\x01\x91P\x84`\x1F\x83\x01\x12a\x04jW`\0\x80\xFD[\x81Q\x81\x81\x11\x15a\x04|Wa\x04|a\x04\x17V[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15a\x04\xA4Wa\x04\xA4a\x04\x17V[\x81`@R\x82\x81R\x87` \x84\x87\x01\x01\x11\x15a\x04\xBDW`\0\x80\xFD[a\x04\xCE\x83` \x83\x01` \x88\x01a\x03\x95V[\x97\x96PPPPPPPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x04\xEDW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x05\rWcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x05_W`\0\x81`\0R` `\0 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\x05=`\0\xFD[PPPP`\x0C`\x03\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Qa\x01t\x90a\x02\x81V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`@Q\x80\x91\x03\x90`\0\xF0\x80\x15\x80\x15a\x01\xADW=`\0\x80>=`\0\xFD[P\x90P\x82`@Qa\x01\xBD\x90a\x02\x8EV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`@Q\x80\x91\x03\x90`\0\xF0\x80\x15\x80\x15a\x01\xF6W=`\0\x80>=`\0\xFD[P\x91P\x7F\x88\\\xB6\x92@\xA95\xD62\xD7\x9C1q\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-`\0\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cv\xEA\xDD6`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x02dW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x02xW=`\0\x80>=`\0\xFD[PPPP\x91P\x91V[a\x02#\x80a\x02\xD9\x839\x01\x90V[a\t<\x80a\x04\xFC\x839\x01\x90V[`\0` \x82\x84\x03\x12\x15a\x02\xADW`\0\x80\xFD[\x815s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a\x02\xD1W`\0\x80\xFD[\x93\x92PPPV\xFE`\x80`@R`\x0C\x80Tb\xFF\0\xFF\x19\x16b\x01\0\x01\x17\x90U4\x80\x15a\0!W`\0\x80\xFD[P`@Qa\x02#8\x03\x80a\x02#\x839\x81\x01`@\x81\x90Ra\0@\x91a\0\xF0V[`\x01`\x01`\xA0\x1B\x03\x81\x16a\0gW`@Qc \x16\x16\xD1`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x0E\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90UFazi\x03a\0\xCBW`@\x80Q` \x80\x82\x01\x83R`\0\x90\x91R\x81Q\x90\x81\x01\x90\x91R`\x0ET`\x01`\x01`\xA0\x1B\x03\x16\x90\x81\x90R`\r\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16\x90\x91\x17\x90Ua\0\xEAV[`@Qc\x0B\x13\xDB\xFF`\xE0\x1B\x81RF`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[Pa\x01 V[`\0` \x82\x84\x03\x12\x15a\x01\x02W`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x01\x19W`\0\x80\xFD[\x93\x92PPPV[`\xF5\x80a\x01.`\09`\0\xF3\xFE`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[P`\x046\x10`FW`\x005`\xE0\x1C\x80c\x12\x90\r\xA8\x14`KW\x80c\xD7\xB6WE\x14`\x8FW\x80c\xF8\xA8\xFDm\x14`\xD2W\x80c\xF8\xCC\xBFG\x14`\xD4W[`\0\x80\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x90\x91R\x81Q\x80\x82\x01\x83R`\x0ETs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x81\x90R\x91Q\x91\x82R\x01[`@Q\x80\x91\x03\x90\xF3[`\rT`\xAE\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`\x86V[\0[`\x0CT`\xE6\x90b\x01\0\0\x90\x04`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01`\x86V`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\t<8\x03\x80a\t<\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\xBEV[\x80`\x01`\x01`\xA0\x1B\x03\x81\x16a\0^W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R`\0`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[a\0g\x81a\0nV[PPa\0\xEEV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\0` \x82\x84\x03\x12\x15a\0\xD0W`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\xE7W`\0\x80\xFD[\x93\x92PPPV[a\x08?\x80a\0\xFD`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0rW`\x005`\xE0\x1C\x80c\x8D\xA5\xCB[\x11a\0PW\x80c\x8D\xA5\xCB[\x14a\0\xC9W\x80c\xE3\xEC\xCD\x10\x14a\0\xF1W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x04W`\0\x80\xFD[\x80c\x0EfnI\x14a\0wW\x80cow\x92k\x14a\0\x9FW\x80cqP\x18\xA6\x14a\0\xBFW[`\0\x80\xFD[a\0\x8Aa\0\x856`\x04a\x04\xCDV[a\x01\x17V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xB2a\0\xAD6`\x04a\x04\xCDV[a\x01TV[`@Qa\0\x96\x91\x90a\x04\xEFV[a\0\xC7a\x02*V[\0[`\0T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\0\x96V[a\0\xC7a\0\xFF6`\x04a\x05eV[a\x02>V[a\0\xC7a\x01\x126`\x04a\x04\xCDV[a\x03sV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16`\0\x90\x81R`\x01` R`@\x81 \x80T\x82\x91\x90a\x01J\x90a\x05\xE8V[\x90P\x11\x90P\x91\x90PV[`@\x80Q` \x80\x82\x01\x83R``\x82Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16`\0\x90\x81R`\x01\x82R\x83\x90 \x83Q\x91\x82\x01\x90\x93R\x82T\x91\x92\x90\x91\x82\x90\x82\x90a\x01\xA1\x90a\x05\xE8V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x01\xCD\x90a\x05\xE8V[\x80\x15a\x02\x1AW\x80`\x1F\x10a\x01\xEFWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x02\x1AV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x01\xFDW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P\x91\x90PV[a\x022a\x03\xDCV[a\x02<`\0a\x04/V[V[a\x02Fa\x03\xDCV[`\0\x81\x90\x03a\x02\x81W`@Q\x7F\xF9i\xDDY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x02\x8A\x83a\x01\x17V[\x15a\x02\xC1W`@Q\x7F\xC3D9~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q` `\x1F\x84\x01\x81\x90\x04\x81\x02\x82\x01\x83\x01\x83R\x81\x01\x83\x81R\x90\x91\x82\x91\x90\x85\x90\x85\x90\x81\x90\x85\x01\x83\x82\x80\x82\x847`\0\x92\x01\x82\x90RP\x93\x90\x94RPPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16\x81R`\x01` R`@\x90 \x82Q\x90\x91P\x81\x90a\x03/\x90\x82a\x06\xBBV[P\x90PP\x7F==\x057Yf0\x87\x99\xF2u\x83\x17=s\xAD\xAD\x0E\x96H\xAA\xC9m5K\rUJn\xA8\xD5t\x83\x83\x83`@Qa\x03f\x93\x92\x91\x90a\x07\xD5V[`@Q\x80\x91\x03\x90\xA1PPPV[a\x03{a\x03\xDCV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16a\x03\xD0W`@Q\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\0`\x04\x82\x01R`$\x01[`@Q\x80\x91\x03\x90\xFD[a\x03\xD9\x81a\x04/V[PV[`\0Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163\x14a\x02=`\0\xFD[PPPP`\x0C`\x03\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Qa\x01t\x90a\x02\x81V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`@Q\x80\x91\x03\x90`\0\xF0\x80\x15\x80\x15a\x01\xADW=`\0\x80>=`\0\xFD[P\x90P\x82`@Qa\x01\xBD\x90a\x02\x8EV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`@Q\x80\x91\x03\x90`\0\xF0\x80\x15\x80\x15a\x01\xF6W=`\0\x80>=`\0\xFD[P\x91P\x7F\x88\\\xB6\x92@\xA95\xD62\xD7\x9C1q\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-`\0\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cv\xEA\xDD6`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x02dW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x02xW=`\0\x80>=`\0\xFD[PPPP\x91P\x91V[a\x02#\x80a\x02\xD9\x839\x01\x90V[a\x17\xB9\x80a\x04\xFC\x839\x01\x90V[`\0` \x82\x84\x03\x12\x15a\x02\xADW`\0\x80\xFD[\x815s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a\x02\xD1W`\0\x80\xFD[\x93\x92PPPV\xFE`\x80`@R`\x0C\x80Tb\xFF\0\xFF\x19\x16b\x01\0\x01\x17\x90U4\x80\x15a\0!W`\0\x80\xFD[P`@Qa\x02#8\x03\x80a\x02#\x839\x81\x01`@\x81\x90Ra\0@\x91a\0\xF0V[`\x01`\x01`\xA0\x1B\x03\x81\x16a\0gW`@Qc \x16\x16\xD1`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x0E\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90UFazi\x03a\0\xCBW`@\x80Q` \x80\x82\x01\x83R`\0\x90\x91R\x81Q\x90\x81\x01\x90\x91R`\x0ET`\x01`\x01`\xA0\x1B\x03\x16\x90\x81\x90R`\r\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16\x90\x91\x17\x90Ua\0\xEAV[`@Qc\x0B\x13\xDB\xFF`\xE0\x1B\x81RF`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[Pa\x01 V[`\0` \x82\x84\x03\x12\x15a\x01\x02W`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x01\x19W`\0\x80\xFD[\x93\x92PPPV[`\xF5\x80a\x01.`\09`\0\xF3\xFE`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[P`\x046\x10`FW`\x005`\xE0\x1C\x80c\x12\x90\r\xA8\x14`KW\x80c\xD7\xB6WE\x14`\x8FW\x80c\xF8\xA8\xFDm\x14`\xD2W\x80c\xF8\xCC\xBFG\x14`\xD4W[`\0\x80\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x90\x91R\x81Q\x80\x82\x01\x83R`\x0ETs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x81\x90R\x91Q\x91\x82R\x01[`@Q\x80\x91\x03\x90\xF3[`\rT`\xAE\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`\x86V[\0[`\x0CT`\xE6\x90b\x01\0\0\x90\x04`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01`\x86V`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x17\xB98\x03\x80a\x17\xB9\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\xBEV[\x80`\x01`\x01`\xA0\x1B\x03\x81\x16a\0^W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R`\0`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[a\0g\x81a\0nV[PPa\0\xEEV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\0` \x82\x84\x03\x12\x15a\0\xD0W`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\xE7W`\0\x80\xFD[\x93\x92PPPV[a\x16\xBC\x80a\0\xFD`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xA3W`\x005`\xE0\x1C\x80cqP\x18\xA6\x11a\0vW\x80c\xC8\xD1x\xB2\x11a\0[W\x80c\xC8\xD1x\xB2\x14a\x01bW\x80c\xF2\xFD\xE3\x8B\x14a\x01uW\x80c\xFER\xF7\x96\x14a\x01\x88W`\0\x80\xFD[\x80cqP\x18\xA6\x14a\x010W\x80c\x8D\xA5\xCB[\x14a\x01:W`\0\x80\xFD[\x80c\x0EfnI\x14a\0\xA8W\x80c3\xCFR\x0C\x14a\0\xD0W\x80cQ\xCAz\x9F\x14a\0\xF0W\x80cow\x92k\x14a\x01\x10W[`\0\x80\xFD[a\0\xBBa\0\xB66`\x04a\r\x9AV[a\x01\x9BV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xE3a\0\xDE6`\x04a\r\x9AV[a\x01\xDBV[`@Qa\0\xC7\x91\x90a\x0E\xA6V[a\x01\x03a\0\xFE6`\x04a\r\x9AV[a\x048V[`@Qa\0\xC7\x91\x90a\x0E\xB9V[a\x01#a\x01\x1E6`\x04a\r\x9AV[a\x07\x07V[`@Qa\0\xC7\x91\x90a\x0F.V[a\x018a\x08-V[\0[`\0T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\0\xC7V[a\x018a\x01p6`\x04a\x0F\xD0V[a\x08AV[a\x018a\x01\x836`\x04a\r\x9AV[a\n\xA9V[a\x018a\x01\x966`\x04a\x10xV[a\x0B\x12V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16`\0\x90\x81R`\x01` \x81\x90R`@\x82 \x01\x80T\x82\x91\x90a\x01\xD1\x90a\x10\xB5V[\x90P\x11\x90P\x91\x90PV[`@\x80Q` \x81\x01\x90\x91R``\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16`\0\x90\x81R`\x01` \x90\x81R`@\x80\x83 \x81Q\x81T``\x94\x81\x02\x82\x01\x85\x01\x84R\x92\x81\x01\x83\x81R\x90\x93\x91\x92\x84\x92\x84\x91\x90\x84\x01\x82\x82\x80\x15a\x02_W` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x02KW[PPPPP\x81R` \x01`\x01\x82\x01\x80Ta\x02x\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x02\xA4\x90a\x10\xB5V[\x80\x15a\x02\xF1W\x80`\x1F\x10a\x02\xC6Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x02\xF1V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x02\xD4W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P`\0\x81`\0\x01Q`\x01\x83`\0\x01QQa\x03\x15\x91\x90a\x11\x02V[\x81Q\x81\x10a\x03%Wa\x03%a\x11BV[` \x02` \x01\x01Q\x90P`\x02\x81\x81T\x81\x10a\x03BWa\x03Ba\x11BV[\x90`\0R` `\0 \x01`@Q\x80` \x01`@R\x90\x81`\0\x82\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01`\0\x90[\x82\x82\x10\x15a\x04(W\x83\x82\x90`\0R` `\0 \x01\x80Ta\x03\x9B\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x03\xC7\x90a\x10\xB5V[\x80\x15a\x04\x14W\x80`\x1F\x10a\x03\xE9Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x04\x14V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x03\xF7W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\x03|V[PPP\x91RP\x90\x95\x94PPPPPV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16`\0\x90\x81R`\x01` \x90\x81R`@\x80\x83 \x81Q\x81T\x93\x84\x02\x81\x01``\x90\x81\x01\x84R\x92\x81\x01\x84\x81R\x92\x94\x93\x90\x92\x83\x91\x83\x90\x83\x88\x01\x82\x82\x80\x15a\x04\xAFW` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x04\x9BW[PPPPP\x81R` \x01`\x01\x82\x01\x80Ta\x04\xC8\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x04\xF4\x90a\x10\xB5V[\x80\x15a\x05AW\x80`\x1F\x10a\x05\x16Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x05AV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x05$W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P`\0\x81`\0\x01QQg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x05lWa\x05la\x11qV[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x05\xACW\x81` \x01[`@\x80Q` \x81\x01\x90\x91R``\x81R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05\x8AW\x90P[P\x90P`\0[\x82QQ\x81\x10\x15a\x06\xFFW`\x02\x83`\0\x01Q\x82\x81Q\x81\x10a\x05\xD4Wa\x05\xD4a\x11BV[` \x02` \x01\x01Q\x81T\x81\x10a\x05\xECWa\x05\xECa\x11BV[\x90`\0R` `\0 \x01`@Q\x80` \x01`@R\x90\x81`\0\x82\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01`\0\x90[\x82\x82\x10\x15a\x06\xD2W\x83\x82\x90`\0R` `\0 \x01\x80Ta\x06E\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x06q\x90a\x10\xB5V[\x80\x15a\x06\xBEW\x80`\x1F\x10a\x06\x93Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x06\xBEV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x06\xA1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\x06&V[PPPP\x81RPP\x82\x82\x81Q\x81\x10a\x06\xECWa\x06\xECa\x11BV[` \x90\x81\x02\x91\x90\x91\x01\x01R`\x01\x01a\x05\xB2V[P\x93\x92PPPV[`@\x80Q\x80\x82\x01\x82R``\x80\x82R` \x80\x83\x01\x82\x90Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\0\x90\x81R`\x01\x82R\x84\x90 \x84Q\x81T\x92\x83\x02\x81\x01\x84\x01\x86R\x94\x85\x01\x82\x81R\x93\x94\x93\x90\x92\x84\x92\x84\x91\x84\x01\x82\x82\x80\x15a\x07\x8BW` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x07wW[PPPPP\x81R` \x01`\x01\x82\x01\x80Ta\x07\xA4\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x07\xD0\x90a\x10\xB5V[\x80\x15a\x08\x1DW\x80`\x1F\x10a\x07\xF2Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x08\x1DV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x08\0W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P\x91\x90PV[a\x085a\x0CIV[a\x08?`\0a\x0C\x9CV[V[a\x08Ia\x0CIV[`\0\x82\x90\x03a\x08\x84W`@Q\x7F\xF9i\xDDY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x08\x8E\x81\x80a\x11\xA0V[\x90P`\0\x03a\x08\xC9W`@Q\x7F+\xC3+\x16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x08\xD2\x84a\x01\x9BV[\x15a\t\tW`@Q\x7F\xC3D9~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x81\x90\x7F@W\x87\xFA\x12\xA8#\xE0\xF2\xB7c\x1C\xC4\x1B;\xA8\x82\x8B3!\xCA\x81\x11\x11\xFAu\xCD:\xA3\xBBZ\xCE\x01a\tG\x82\x82a\x13\xE8V[PP`\x02T`\0\x90a\t[\x90`\x01\x90a\x11\x02V[`@\x80Q`\0\x81\x83\x01\x90\x81R``\x82\x01\x83R\x81R\x81Q` `\x1F\x88\x01\x81\x90\x04\x81\x02\x82\x01\x81\x01\x90\x93R\x86\x81R\x92\x93P\x91\x81\x83\x01\x91\x87\x90\x87\x90\x81\x90\x84\x01\x83\x82\x80\x82\x847`\0\x92\x01\x82\x90RP\x93\x90\x94RPPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x81R`\x01` \x90\x81R`@\x90\x91 \x83Q\x80Q\x91\x93Pa\t\xE4\x92\x84\x92\x91\x01\x90a\r\x11V[P` \x82\x01Q`\x01\x82\x01\x90a\t\xF9\x90\x82a\x154V[PPPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\0\x90\x81R`\x01` \x81\x90R`@\x90\x91 \x01a\n0\x84\x86\x83a\x12\xCEV[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\0\x90\x81R`\x01` \x81\x81R`@\x80\x84 \x80T\x93\x84\x01\x81U\x84R\x92 \x01\x82\x90UQ\x7F==\x057Yf0\x87\x99\xF2u\x83\x17=s\xAD\xAD\x0E\x96H\xAA\xC9m5K\rUJn\xA8\xD5t\x90a\n\x9A\x90\x87\x90\x87\x90\x87\x90a\x16RV[`@Q\x80\x91\x03\x90\xA1PPPPPV[a\n\xB1a\x0CIV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16a\x0B\x06W`@Q\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\0`\x04\x82\x01R`$\x01[`@Q\x80\x91\x03\x90\xFD[a\x0B\x0F\x81a\x0C\x9CV[PV[a\x0B\x1C\x81\x80a\x11\xA0V[\x90P`\0\x03a\x0BWW`@Q\x7F+\xC3+\x16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0B`3a\x01\x9BV[a\x0B\x96W`@Q\x7F\x90{6\x1F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x81\x90\x7F@W\x87\xFA\x12\xA8#\xE0\xF2\xB7c\x1C\xC4\x1B;\xA8\x82\x8B3!\xCA\x81\x11\x11\xFAu\xCD:\xA3\xBBZ\xCE\x01a\x0B\xD4\x82\x82a\x13\xE8V[PP`\x02T`\0\x90a\x0B\xE8\x90`\x01\x90a\x11\x02V[3`\0\x81\x81R`\x01` \x81\x81R`@\x80\x84 \x80T\x93\x84\x01\x81U\x84R\x92 \x01\x83\x90UQ\x91\x92P\x90\x7F\xD5\x94\xE1\xA0\x93T\xAF\t>\x9B\xBA?STV\xE7\xE5\xB04Y\x90\xE3|7\xE9\xC4\x1B\xB5{\x99\x12\xCA\x90a\x0C=\x90\x84\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA2PPV[`\0Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163\x14a\x08?W`@Q\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R3`\x04\x82\x01R`$\x01a\n\xFDV[`\0\x80Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x81\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x82\x80T\x82\x82U\x90`\0R` `\0 \x90\x81\x01\x92\x82\x15a\rLW\x91` \x02\x82\x01[\x82\x81\x11\x15a\rLW\x82Q\x82U\x91` \x01\x91\x90`\x01\x01\x90a\r1V[Pa\rX\x92\x91Pa\r\\V[P\x90V[[\x80\x82\x11\x15a\rXW`\0\x81U`\x01\x01a\r]V[\x805s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a\r\x95W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\r\xACW`\0\x80\xFD[a\r\xB5\x82a\rqV[\x93\x92PPPV[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15a\r\xE2W` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01a\r\xC6V[P`\0` \x82\x86\x01\x01R` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[`\0` \x80\x84\x01\x83Q` \x86R\x81\x81Q\x80\x84R`@\x88\x01\x91P`@\x81`\x05\x1B\x89\x01\x01\x93P` \x83\x01\x92P`\0[\x81\x81\x10\x15a\x0E\x99W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x89\x86\x03\x01\x83Ra\x0E\x87\x85\x85Qa\r\xBCV[\x94P\x92\x85\x01\x92\x91\x85\x01\x91`\x01\x01a\x0EMV[P\x92\x97\x96PPPPPPPV[` \x81R`\0a\r\xB5` \x83\x01\x84a\x0E V[`\0` \x80\x83\x01` \x84R\x80\x85Q\x80\x83R`@\x86\x01\x91P`@\x81`\x05\x1B\x87\x01\x01\x92P` \x87\x01`\0[\x82\x81\x10\x15a\x0E\x99W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x88\x86\x03\x01\x84Ra\x0F\x1C\x85\x83Qa\x0E V[\x94P\x92\x85\x01\x92\x90\x85\x01\x90`\x01\x01a\x0E\xE2V[` \x80\x82R\x82Q`@\x83\x83\x01R\x80Q``\x84\x01\x81\x90R`\0\x92\x91\x82\x01\x90\x83\x90`\x80\x86\x01\x90[\x80\x83\x10\x15a\x0FsW\x83Q\x82R\x92\x84\x01\x92`\x01\x92\x90\x92\x01\x91\x90\x84\x01\x90a\x0FSV[P\x92\x86\x01Q\x85\x84\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x01`@\x87\x01R\x92a\x0F\xAD\x81\x85a\r\xBCV[\x97\x96PPPPPPPV[`\0` \x82\x84\x03\x12\x15a\x0F\xCAW`\0\x80\xFD[P\x91\x90PV[`\0\x80`\0\x80``\x85\x87\x03\x12\x15a\x0F\xE6W`\0\x80\xFD[a\x0F\xEF\x85a\rqV[\x93P` \x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x10\x0CW`\0\x80\xFD[\x81\x87\x01\x91P\x87`\x1F\x83\x01\x12a\x10 W`\0\x80\xFD[\x815\x81\x81\x11\x15a\x10/W`\0\x80\xFD[\x88` \x82\x85\x01\x01\x11\x15a\x10AW`\0\x80\xFD[` \x83\x01\x95P\x80\x94PP`@\x87\x015\x91P\x80\x82\x11\x15a\x10_W`\0\x80\xFD[Pa\x10l\x87\x82\x88\x01a\x0F\xB8V[\x91PP\x92\x95\x91\x94P\x92PV[`\0` \x82\x84\x03\x12\x15a\x10\x8AW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x10\xA1W`\0\x80\xFD[a\x10\xAD\x84\x82\x85\x01a\x0F\xB8V[\x94\x93PPPPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x10\xC9W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x0F\xCAW\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x81\x81\x03\x81\x81\x11\x15a\x11W\x87\x85\x01Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PP`\x01\x84`\x01\x1B\x01\x85U[PPPPPPV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x81R`@` \x82\x01R\x81`@\x82\x01R\x81\x83``\x83\x017`\0\x81\x83\x01``\x90\x81\x01\x91\x90\x91R`\x1F\x90\x92\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16\x01\x01\x92\x91PPV", + b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x006W`\x005`\xE0\x1C\x80cR+\xB7\x04\x14a\0;W\x80c\xF8\xCC\xBFG\x14a\0\x80W[`\0\x80\xFD[a\0Na\0I6`\x04a\x02\x9BV[a\0\xA3V[`@\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x84\x16\x81R\x92\x90\x91\x16` \x83\x01R\x01[`@Q\x80\x91\x03\x90\xF3[`\x0CTa\0\x93\x90b\x01\0\0\x90\x04`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01a\0wV[`\x0CT`@Q\x7F\x7F\xEC*\x8D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rc\x01\0\0\0\x90\x91\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x04\x82\x01R`\0\x90\x81\x90sq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90c\x7F\xEC*\x8D\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x01-W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x01AW=`\0\x80>=`\0\xFD[PPPP`\x0C`\x03\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Qa\x01t\x90a\x02\x81V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`@Q\x80\x91\x03\x90`\0\xF0\x80\x15\x80\x15a\x01\xADW=`\0\x80>=`\0\xFD[P\x90P\x82`@Qa\x01\xBD\x90a\x02\x8EV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`@Q\x80\x91\x03\x90`\0\xF0\x80\x15\x80\x15a\x01\xF6W=`\0\x80>=`\0\xFD[P\x91P\x7F\x88\\\xB6\x92@\xA95\xD62\xD7\x9C1q\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-`\0\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cv\xEA\xDD6`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x02dW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x02xW=`\0\x80>=`\0\xFD[PPPP\x91P\x91V[a\x02#\x80a\x02\xD9\x839\x01\x90V[a\t<\x80a\x04\xFC\x839\x01\x90V[`\0` \x82\x84\x03\x12\x15a\x02\xADW`\0\x80\xFD[\x815s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a\x02\xD1W`\0\x80\xFD[\x93\x92PPPV\xFE`\x80`@R`\x0C\x80Tb\xFF\0\xFF\x19\x16b\x01\0\x01\x17\x90U4\x80\x15a\0!W`\0\x80\xFD[P`@Qa\x02#8\x03\x80a\x02#\x839\x81\x01`@\x81\x90Ra\0@\x91a\0\xF0V[`\x01`\x01`\xA0\x1B\x03\x81\x16a\0gW`@Qc \x16\x16\xD1`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x0E\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90UFazi\x03a\0\xCBW`@\x80Q` \x80\x82\x01\x83R`\0\x90\x91R\x81Q\x90\x81\x01\x90\x91R`\x0ET`\x01`\x01`\xA0\x1B\x03\x16\x90\x81\x90R`\r\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16\x90\x91\x17\x90Ua\0\xEAV[`@Qc\x0B\x13\xDB\xFF`\xE0\x1B\x81RF`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[Pa\x01 V[`\0` \x82\x84\x03\x12\x15a\x01\x02W`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x01\x19W`\0\x80\xFD[\x93\x92PPPV[`\xF5\x80a\x01.`\09`\0\xF3\xFE`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[P`\x046\x10`FW`\x005`\xE0\x1C\x80c\x12\x90\r\xA8\x14`KW\x80c\xD7\xB6WE\x14`\x8FW\x80c\xF8\xA8\xFDm\x14`\xD2W\x80c\xF8\xCC\xBFG\x14`\xD4W[`\0\x80\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x90\x91R\x81Q\x80\x82\x01\x83R`\x0ETs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x81\x90R\x91Q\x91\x82R\x01[`@Q\x80\x91\x03\x90\xF3[`\rT`\xAE\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01`\x86V[\0[`\x0CT`\xE6\x90b\x01\0\0\x90\x04`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01`\x86V`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\t<8\x03\x80a\t<\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\xBEV[\x80`\x01`\x01`\xA0\x1B\x03\x81\x16a\0^W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R`\0`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[a\0g\x81a\0nV[PPa\0\xEEV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\0` \x82\x84\x03\x12\x15a\0\xD0W`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\xE7W`\0\x80\xFD[\x93\x92PPPV[a\x08?\x80a\0\xFD`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0rW`\x005`\xE0\x1C\x80c\x8D\xA5\xCB[\x11a\0PW\x80c\x8D\xA5\xCB[\x14a\0\xC9W\x80c\xE3\xEC\xCD\x10\x14a\0\xF1W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x04W`\0\x80\xFD[\x80c\x0EfnI\x14a\0wW\x80cow\x92k\x14a\0\x9FW\x80cqP\x18\xA6\x14a\0\xBFW[`\0\x80\xFD[a\0\x8Aa\0\x856`\x04a\x04\xCDV[a\x01\x17V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xB2a\0\xAD6`\x04a\x04\xCDV[a\x01TV[`@Qa\0\x96\x91\x90a\x04\xEFV[a\0\xC7a\x02*V[\0[`\0T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\0\x96V[a\0\xC7a\0\xFF6`\x04a\x05eV[a\x02>V[a\0\xC7a\x01\x126`\x04a\x04\xCDV[a\x03sV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16`\0\x90\x81R`\x01` R`@\x81 \x80T\x82\x91\x90a\x01J\x90a\x05\xE8V[\x90P\x11\x90P\x91\x90PV[`@\x80Q` \x80\x82\x01\x83R``\x82Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16`\0\x90\x81R`\x01\x82R\x83\x90 \x83Q\x91\x82\x01\x90\x93R\x82T\x91\x92\x90\x91\x82\x90\x82\x90a\x01\xA1\x90a\x05\xE8V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x01\xCD\x90a\x05\xE8V[\x80\x15a\x02\x1AW\x80`\x1F\x10a\x01\xEFWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x02\x1AV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x01\xFDW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P\x91\x90PV[a\x022a\x03\xDCV[a\x02<`\0a\x04/V[V[a\x02Fa\x03\xDCV[`\0\x81\x90\x03a\x02\x81W`@Q\x7F\xF9i\xDDY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x02\x8A\x83a\x01\x17V[\x15a\x02\xC1W`@Q\x7F\xC3D9~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q` `\x1F\x84\x01\x81\x90\x04\x81\x02\x82\x01\x83\x01\x83R\x81\x01\x83\x81R\x90\x91\x82\x91\x90\x85\x90\x85\x90\x81\x90\x85\x01\x83\x82\x80\x82\x847`\0\x92\x01\x82\x90RP\x93\x90\x94RPPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16\x81R`\x01` R`@\x90 \x82Q\x90\x91P\x81\x90a\x03/\x90\x82a\x06\xBBV[P\x90PP\x7F==\x057Yf0\x87\x99\xF2u\x83\x17=s\xAD\xAD\x0E\x96H\xAA\xC9m5K\rUJn\xA8\xD5t\x83\x83\x83`@Qa\x03f\x93\x92\x91\x90a\x07\xD5V[`@Q\x80\x91\x03\x90\xA1PPPV[a\x03{a\x03\xDCV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16a\x03\xD0W`@Q\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\0`\x04\x82\x01R`$\x01[`@Q\x80\x91\x03\x90\xFD[a\x03\xD9\x81a\x04/V[PV[`\0Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163\x14a\x02, - } - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: KeyPackage) -> Self { - (value.data,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for KeyPackage { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { data: tuple.0 } - } - } - #[automatically_derived] - impl alloy_sol_types::SolValue for KeyPackage { - type SolType = Self; - } - #[automatically_derived] - impl alloy_sol_types::private::SolTypeValue for KeyPackage { - #[inline] - fn stv_to_tokens(&self) -> ::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.data), - ) - } - #[inline] - fn stv_abi_encoded_size(&self) -> usize { - if let Some(size) = ::ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encoded_size(&tuple) - } - #[inline] - fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { - ::eip712_hash_struct(self) - } - #[inline] - fn stv_abi_encode_packed_to( - &self, - out: &mut alloy_sol_types::private::Vec, - ) { - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out) - } - #[inline] - fn stv_abi_packed_encoded_size(&self) -> usize { - if let Some(size) = ::PACKED_ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolType for KeyPackage { - type RustType = Self; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SOL_NAME: &'static str = ::NAME; - const ENCODED_SIZE: Option = as alloy_sol_types::SolType>::ENCODED_SIZE; - const PACKED_ENCODED_SIZE: Option = as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; - #[inline] - fn valid_token(token: &Self::Token<'_>) -> bool { - as alloy_sol_types::SolType>::valid_token(token) - } - #[inline] - fn detokenize(token: Self::Token<'_>) -> Self::RustType { - let tuple = as alloy_sol_types::SolType>::detokenize(token); - >>::from(tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolStruct for KeyPackage { - const NAME: &'static str = "KeyPackage"; - #[inline] - fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { - alloy_sol_types::private::Cow::Borrowed("KeyPackage(bytes[] data)") - } - #[inline] - fn eip712_components() -> alloy_sol_types::private::Vec< - alloy_sol_types::private::Cow<'static, str>, - > { - alloy_sol_types::private::Vec::new() - } - #[inline] - fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { - ::eip712_root_type() - } - #[inline] - fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { - as alloy_sol_types::SolType>::eip712_data_word(&self.data) - .0 - .to_vec() - } - } - #[automatically_derived] - impl alloy_sol_types::EventTopic for KeyPackage { - #[inline] - fn topic_preimage_length(rust: &Self::RustType) -> usize { - 0usize - + as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.data) - } - #[inline] - fn encode_topic_preimage( - rust: &Self::RustType, - out: &mut alloy_sol_types::private::Vec, - ) { - out.reserve( - ::topic_preimage_length(rust), - ); - as alloy_sol_types::EventTopic>::encode_topic_preimage( - &rust.data, - out, - ); - } - #[inline] - fn encode_topic( - rust: &Self::RustType, - ) -> alloy_sol_types::abi::token::WordToken { - let mut out = alloy_sol_types::private::Vec::new(); - ::encode_topic_preimage( - rust, - &mut out, - ); - alloy_sol_types::abi::token::WordToken( - alloy_sol_types::private::keccak256(out), - ) - } - } - }; - /**```solidity -struct UserInfo { uint256[] keyPackageIndices; bytes signaturePubKey; } +struct UserInfo { bytes signaturePubKey; } ```*/ #[allow(non_camel_case_types, non_snake_case)] #[derive(Clone)] pub struct UserInfo { - pub keyPackageIndices: alloy::sol_types::private::Vec< - alloy::sol_types::private::U256, - >, pub signaturePubKey: alloy::sol_types::private::Bytes, } #[allow(non_camel_case_types, non_snake_case, clippy::style)] const _: () = { use alloy::sol_types as alloy_sol_types; #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Array>, - alloy::sol_types::sol_data::Bytes, - ); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Vec, - alloy::sol_types::private::Bytes, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -402,17 +135,14 @@ struct UserInfo { uint256[] keyPackageIndices; bytes signaturePubKey; } #[doc(hidden)] impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: UserInfo) -> Self { - (value.keyPackageIndices, value.signaturePubKey) + (value.signaturePubKey,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> for UserInfo { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - keyPackageIndices: tuple.0, - signaturePubKey: tuple.1, - } + Self { signaturePubKey: tuple.0 } } } #[automatically_derived] @@ -424,9 +154,6 @@ struct UserInfo { uint256[] keyPackageIndices; bytes signaturePubKey; } #[inline] fn stv_to_tokens(&self) -> ::Token<'_> { ( - , - > as alloy_sol_types::SolType>::tokenize(&self.keyPackageIndices), ::tokenize( &self.signaturePubKey, ), @@ -504,7 +231,7 @@ struct UserInfo { uint256[] keyPackageIndices; bytes signaturePubKey; } #[inline] fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { alloy_sol_types::private::Cow::Borrowed( - "UserInfo(uint256[] keyPackageIndices,bytes signaturePubKey)", + "UserInfo(bytes signaturePubKey)", ) } #[inline] @@ -519,19 +246,11 @@ struct UserInfo { uint256[] keyPackageIndices; bytes signaturePubKey; } } #[inline] fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { - [ - , - > as alloy_sol_types::SolType>::eip712_data_word( - &self.keyPackageIndices, - ) - .0, - ::eip712_data_word( - &self.signaturePubKey, - ) - .0, - ] - .concat() + ::eip712_data_word( + &self.signaturePubKey, + ) + .0 + .to_vec() } } #[automatically_derived] @@ -539,11 +258,6 @@ struct UserInfo { uint256[] keyPackageIndices; bytes signaturePubKey; } #[inline] fn topic_preimage_length(rust: &Self::RustType) -> usize { 0usize - + , - > as alloy_sol_types::EventTopic>::topic_preimage_length( - &rust.keyPackageIndices, - ) + ::topic_preimage_length( &rust.signaturePubKey, ) @@ -556,12 +270,6 @@ struct UserInfo { uint256[] keyPackageIndices; bytes signaturePubKey; } out.reserve( ::topic_preimage_length(rust), ); - , - > as alloy_sol_types::EventTopic>::encode_topic_preimage( - &rust.keyPackageIndices, - out, - ); ::encode_topic_preimage( &rust.signaturePubKey, out, @@ -582,133 +290,17 @@ struct UserInfo { uint256[] keyPackageIndices; bytes signaturePubKey; } } } }; - /**Function with signature `addKeyPackage((bytes[]))` and selector `0xfe52f796`. -```solidity -function addKeyPackage(KeyPackage memory) external; -```*/ - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct addKeyPackageCall { - pub _0: ::RustType, - } - ///Container type for the return parameters of the [`addKeyPackage((bytes[]))`](addKeyPackageCall) function. - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct addKeyPackageReturn {} - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (KeyPackage,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - ::RustType, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: addKeyPackageCall) -> Self { - (value._0,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for addKeyPackageCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: addKeyPackageReturn) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for addKeyPackageReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for addKeyPackageCall { - type Parameters<'a> = (KeyPackage,); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = addKeyPackageReturn; - type ReturnTuple<'a> = (); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "addKeyPackage((bytes[]))"; - const SELECTOR: [u8; 4] = [254u8, 82u8, 247u8, 150u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - (::tokenize(&self._0),) - } - #[inline] - fn abi_decode_returns( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data, validate) - .map(Into::into) - } - } - }; - /**Function with signature `addUser(address,bytes,(bytes[]))` and selector `0xc8d178b2`. + /**Function with signature `addUser(address,bytes)` and selector `0xe3eccd10`. ```solidity -function addUser(address user, bytes memory signaturePubKey, KeyPackage memory keyPackage) external; +function addUser(address user, bytes memory signaturePubKey) external; ```*/ #[allow(non_camel_case_types, non_snake_case)] #[derive(Clone)] pub struct addUserCall { pub user: alloy::sol_types::private::Address, pub signaturePubKey: alloy::sol_types::private::Bytes, - pub keyPackage: ::RustType, } - ///Container type for the return parameters of the [`addUser(address,bytes,(bytes[]))`](addUserCall) function. + ///Container type for the return parameters of the [`addUser(address,bytes)`](addUserCall) function. #[allow(non_camel_case_types, non_snake_case)] #[derive(Clone)] pub struct addUserReturn {} @@ -720,13 +312,11 @@ function addUser(address user, bytes memory signaturePubKey, KeyPackage memory k type UnderlyingSolTuple<'a> = ( alloy::sol_types::sol_data::Address, alloy::sol_types::sol_data::Bytes, - KeyPackage, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( alloy::sol_types::private::Address, alloy::sol_types::private::Bytes, - ::RustType, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -743,7 +333,7 @@ function addUser(address user, bytes memory signaturePubKey, KeyPackage memory k #[doc(hidden)] impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: addUserCall) -> Self { - (value.user, value.signaturePubKey, value.keyPackage) + (value.user, value.signaturePubKey) } } #[automatically_derived] @@ -753,7 +343,6 @@ function addUser(address user, bytes memory signaturePubKey, KeyPackage memory k Self { user: tuple.0, signaturePubKey: tuple.1, - keyPackage: tuple.2, } } } @@ -794,7 +383,6 @@ function addUser(address user, bytes memory signaturePubKey, KeyPackage memory k type Parameters<'a> = ( alloy::sol_types::sol_data::Address, alloy::sol_types::sol_data::Bytes, - KeyPackage, ); type Token<'a> = = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "addUser(address,bytes,(bytes[]))"; - const SELECTOR: [u8; 4] = [200u8, 209u8, 120u8, 178u8]; + const SIGNATURE: &'static str = "addUser(address,bytes)"; + const SELECTOR: [u8; 4] = [227u8, 236u8, 205u8, 16u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -821,132 +409,6 @@ function addUser(address user, bytes memory signaturePubKey, KeyPackage memory k ::tokenize( &self.signaturePubKey, ), - ::tokenize(&self.keyPackage), - ) - } - #[inline] - fn abi_decode_returns( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data, validate) - .map(Into::into) - } - } - }; - /**Function with signature `getAvailableKeyPackage(address)` and selector `0x33cf520c`. -```solidity -function getAvailableKeyPackage(address user) external view returns (KeyPackage memory); -```*/ - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct getAvailableKeyPackageCall { - pub user: alloy::sol_types::private::Address, - } - ///Container type for the return parameters of the [`getAvailableKeyPackage(address)`](getAvailableKeyPackageCall) function. - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct getAvailableKeyPackageReturn { - pub _0: ::RustType, - } - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getAvailableKeyPackageCall) -> Self { - (value.user,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for getAvailableKeyPackageCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { user: tuple.0 } - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (KeyPackage,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - ::RustType, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getAvailableKeyPackageReturn) -> Self { - (value._0,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for getAvailableKeyPackageReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for getAvailableKeyPackageCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Address,); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = getAvailableKeyPackageReturn; - type ReturnTuple<'a> = (KeyPackage,); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getAvailableKeyPackage(address)"; - const SELECTOR: [u8; 4] = [51u8, 207u8, 82u8, 12u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - ::tokenize( - &self.user, - ), ) } #[inline] @@ -1203,9 +665,7 @@ function userExists(address user) external view returns (bool); }; ///Container for all the [`IScKeystore`](self) function calls. pub enum IScKeystoreCalls { - addKeyPackage(addKeyPackageCall), addUser(addUserCall), - getAvailableKeyPackage(getAvailableKeyPackageCall), getUser(getUserCall), userExists(userExistsCall), } @@ -1219,27 +679,19 @@ function userExists(address user) external view returns (bool); /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 4usize]] = &[ [14u8, 102u8, 110u8, 73u8], - [51u8, 207u8, 82u8, 12u8], [111u8, 119u8, 146u8, 107u8], - [200u8, 209u8, 120u8, 178u8], - [254u8, 82u8, 247u8, 150u8], + [227u8, 236u8, 205u8, 16u8], ]; } #[automatically_derived] impl alloy_sol_types::SolInterface for IScKeystoreCalls { const NAME: &'static str = "IScKeystoreCalls"; const MIN_DATA_LENGTH: usize = 32usize; - const COUNT: usize = 5usize; + const COUNT: usize = 3usize; #[inline] fn selector(&self) -> [u8; 4] { match self { - Self::addKeyPackage(_) => { - ::SELECTOR - } Self::addUser(_) => ::SELECTOR, - Self::getAvailableKeyPackage(_) => { - ::SELECTOR - } Self::getUser(_) => ::SELECTOR, Self::userExists(_) => { ::SELECTOR @@ -1278,19 +730,6 @@ function userExists(address user) external view returns (bool); } userExists }, - { - fn getAvailableKeyPackage( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - validate, - ) - .map(IScKeystoreCalls::getAvailableKeyPackage) - } - getAvailableKeyPackage - }, { fn getUser( data: &[u8], @@ -1317,19 +756,6 @@ function userExists(address user) external view returns (bool); } addUser }, - { - fn addKeyPackage( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - validate, - ) - .map(IScKeystoreCalls::addKeyPackage) - } - addKeyPackage - }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -1344,19 +770,9 @@ function userExists(address user) external view returns (bool); #[inline] fn abi_encoded_size(&self) -> usize { match self { - Self::addKeyPackage(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::addUser(inner) => { ::abi_encoded_size(inner) } - Self::getAvailableKeyPackage(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::getUser(inner) => { ::abi_encoded_size(inner) } @@ -1368,21 +784,9 @@ function userExists(address user) external view returns (bool); #[inline] fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { match self { - Self::addKeyPackage(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::addUser(inner) => { ::abi_encode_raw(inner, out) } - Self::getAvailableKeyPackage(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::getUser(inner) => { ::abi_encode_raw(inner, out) } @@ -1559,35 +963,19 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder { alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) } - ///Creates a new call builder for the [`addKeyPackage`] function. - pub fn addKeyPackage( - &self, - _0: ::RustType, - ) -> alloy_contract::SolCallBuilder { - self.call_builder(&addKeyPackageCall { _0 }) - } ///Creates a new call builder for the [`addUser`] function. pub fn addUser( &self, user: alloy::sol_types::private::Address, signaturePubKey: alloy::sol_types::private::Bytes, - keyPackage: ::RustType, ) -> alloy_contract::SolCallBuilder { self.call_builder( &addUserCall { user, signaturePubKey, - keyPackage, }, ) } - ///Creates a new call builder for the [`getAvailableKeyPackage`] function. - pub fn getAvailableKeyPackage( - &self, - user: alloy::sol_types::private::Address, - ) -> alloy_contract::SolCallBuilder { - self.call_builder(&getAvailableKeyPackageCall { user }) - } ///Creates a new call builder for the [`getUser`] function. pub fn getUser( &self, diff --git a/crates/bindings/src/sckeystore.rs b/crates/bindings/src/sckeystore.rs index 4afa2b1..a5962ce 100644 --- a/crates/bindings/src/sckeystore.rs +++ b/crates/bindings/src/sckeystore.rs @@ -3,31 +3,21 @@ Generated by the following Solidity interface... ```solidity interface ScKeystore { - struct KeyPackage { - bytes[] data; - } struct UserInfo { - uint256[] keyPackageIndices; bytes signaturePubKey; } - error MalformedKeyPackage(); error MalformedUserInfo(); error OwnableInvalidOwner(address owner); error OwnableUnauthorizedAccount(address account); error UserAlreadyExists(); - error UserDoesNotExist(); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event UserAdded(address user, bytes signaturePubKey); - event UserKeyPackageAdded(address indexed user, uint256 index); constructor(address initialOwner); - function addKeyPackage(KeyPackage memory keyPackage) external; - function addUser(address user, bytes memory signaturePubKey, KeyPackage memory keyPackage) external; - function getAllKeyPackagesForUser(address user) external view returns (KeyPackage[] memory); - function getAvailableKeyPackage(address user) external view returns (KeyPackage memory); + function addUser(address user, bytes memory signaturePubKey) external; function getUser(address user) external view returns (UserInfo memory); function owner() external view returns (address); function renounceOwnership() external; @@ -50,26 +40,6 @@ interface ScKeystore { ], "stateMutability": "nonpayable" }, - { - "type": "function", - "name": "addKeyPackage", - "inputs": [ - { - "name": "keyPackage", - "type": "tuple", - "internalType": "struct KeyPackage", - "components": [ - { - "name": "data", - "type": "bytes[]", - "internalType": "bytes[]" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, { "type": "function", "name": "addUser", @@ -83,75 +53,11 @@ interface ScKeystore { "name": "signaturePubKey", "type": "bytes", "internalType": "bytes" - }, - { - "name": "keyPackage", - "type": "tuple", - "internalType": "struct KeyPackage", - "components": [ - { - "name": "data", - "type": "bytes[]", - "internalType": "bytes[]" - } - ] } ], "outputs": [], "stateMutability": "nonpayable" }, - { - "type": "function", - "name": "getAllKeyPackagesForUser", - "inputs": [ - { - "name": "user", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "internalType": "struct KeyPackage[]", - "components": [ - { - "name": "data", - "type": "bytes[]", - "internalType": "bytes[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getAvailableKeyPackage", - "inputs": [ - { - "name": "user", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct KeyPackage", - "components": [ - { - "name": "data", - "type": "bytes[]", - "internalType": "bytes[]" - } - ] - } - ], - "stateMutability": "view" - }, { "type": "function", "name": "getUser", @@ -168,11 +74,6 @@ interface ScKeystore { "type": "tuple", "internalType": "struct UserInfo", "components": [ - { - "name": "keyPackageIndices", - "type": "uint256[]", - "internalType": "uint256[]" - }, { "name": "signaturePubKey", "type": "bytes", @@ -273,30 +174,6 @@ interface ScKeystore { ], "anonymous": false }, - { - "type": "event", - "name": "UserKeyPackageAdded", - "inputs": [ - { - "name": "user", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "index", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "MalformedKeyPackage", - "inputs": [] - }, { "type": "error", "name": "MalformedUserInfo", @@ -328,11 +205,6 @@ interface ScKeystore { "type": "error", "name": "UserAlreadyExists", "inputs": [] - }, - { - "type": "error", - "name": "UserDoesNotExist", - "inputs": [] } ] ```*/ @@ -343,42 +215,38 @@ pub mod ScKeystore { /// The creation / init bytecode of the contract. /// /// ```text - ///0x608060405234801561001057600080fd5b506040516117b93803806117b983398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b6116bc806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063715018a611610076578063c8d178b21161005b578063c8d178b214610162578063f2fde38b14610175578063fe52f7961461018857600080fd5b8063715018a6146101305780638da5cb5b1461013a57600080fd5b80630e666e49146100a857806333cf520c146100d057806351ca7a9f146100f05780636f77926b14610110575b600080fd5b6100bb6100b6366004610d9a565b61019b565b60405190151581526020015b60405180910390f35b6100e36100de366004610d9a565b6101db565b6040516100c79190610ea6565b6101036100fe366004610d9a565b610438565b6040516100c79190610eb9565b61012361011e366004610d9a565b610707565b6040516100c79190610f2e565b61013861082d565b005b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100c7565b610138610170366004610fd0565b610841565b610138610183366004610d9a565b610aa9565b610138610196366004611078565b610b12565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020819052604082200180548291906101d1906110b5565b9050119050919050565b60408051602081019091526060815273ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832081518154606094810282018501845292810183815290939192849284919084018282801561025f57602002820191906000526020600020905b81548152602001906001019080831161024b575b50505050508152602001600182018054610278906110b5565b80601f01602080910402602001604051908101604052809291908181526020018280546102a4906110b5565b80156102f15780601f106102c6576101008083540402835291602001916102f1565b820191906000526020600020905b8154815290600101906020018083116102d457829003601f168201915b50505050508152505090506000816000015160018360000151516103159190611102565b8151811061032557610325611142565b602002602001015190506002818154811061034257610342611142565b9060005260206000200160405180602001604052908160008201805480602002602001604051908101604052809291908181526020016000905b8282101561042857838290600052602060002001805461039b906110b5565b80601f01602080910402602001604051908101604052809291908181526020018280546103c7906110b5565b80156104145780601f106103e957610100808354040283529160200191610414565b820191906000526020600020905b8154815290600101906020018083116103f757829003601f168201915b50505050508152602001906001019061037c565b5050509152509095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832081518154938402810160609081018452928101848152929493909283918390838801828280156104af57602002820191906000526020600020905b81548152602001906001019080831161049b575b505050505081526020016001820180546104c8906110b5565b80601f01602080910402602001604051908101604052809291908181526020018280546104f4906110b5565b80156105415780601f1061051657610100808354040283529160200191610541565b820191906000526020600020905b81548152906001019060200180831161052457829003601f168201915b5050505050815250509050600081600001515167ffffffffffffffff81111561056c5761056c611171565b6040519080825280602002602001820160405280156105ac57816020015b60408051602081019091526060815281526020019060019003908161058a5790505b50905060005b8251518110156106ff576002836000015182815181106105d4576105d4611142565b6020026020010151815481106105ec576105ec611142565b9060005260206000200160405180602001604052908160008201805480602002602001604051908101604052809291908181526020016000905b828210156106d2578382906000526020600020018054610645906110b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610671906110b5565b80156106be5780601f10610693576101008083540402835291602001916106be565b820191906000526020600020905b8154815290600101906020018083116106a157829003601f168201915b505050505081526020019060010190610626565b50505050815250508282815181106106ec576106ec611142565b60209081029190910101526001016105b2565b509392505050565b6040805180820182526060808252602080830182905273ffffffffffffffffffffffffffffffffffffffff85166000908152600182528490208451815492830281018401865294850182815293949390928492849184018282801561078b57602002820191906000526020600020905b815481526020019060010190808311610777575b505050505081526020016001820180546107a4906110b5565b80601f01602080910402602001604051908101604052809291908181526020018280546107d0906110b5565b801561081d5780601f106107f25761010080835404028352916020019161081d565b820191906000526020600020905b81548152906001019060200180831161080057829003601f168201915b5050505050815250509050919050565b610835610c49565b61083f6000610c9c565b565b610849610c49565b6000829003610884576040517ff969dd5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e81806111a0565b90506000036108c9576040517f2bc32b1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d28461019b565b15610909576040517fc344397e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805460018101825560009190915281907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161094782826113e8565b505060025460009061095b90600190611102565b604080516000818301908152606082018352815281516020601f880181900481028201810190935286815292935091818301918790879081908401838280828437600092018290525093909452505073ffffffffffffffffffffffffffffffffffffffff88168152600160209081526040909120835180519193506109e4928492910190610d11565b50602082015160018201906109f99082611534565b50505073ffffffffffffffffffffffffffffffffffffffff8516600090815260016020819052604090912001610a308486836112ce565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152600160208181526040808420805493840181558452922001829055517f3d3d05375966308799f27583173d73adad0e9648aac96d354b0d554a6ea8d57490610a9a90879087908790611652565b60405180910390a15050505050565b610ab1610c49565b73ffffffffffffffffffffffffffffffffffffffff8116610b06576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b610b0f81610c9c565b50565b610b1c81806111a0565b9050600003610b57576040517f2bc32b1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b603361019b565b610b96576040517f907b361f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805460018101825560009190915281907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01610bd482826113e8565b5050600254600090610be890600190611102565b33600081815260016020818152604080842080549384018155845292200183905551919250907fd594e1a09354af093e9bba3f535456e7e5b0345990e37c37e9c41bb57b9912ca90610c3d9084815260200190565b60405180910390a25050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461083f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610afd565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610d4c579160200282015b82811115610d4c578251825591602001919060010190610d31565b50610d58929150610d5c565b5090565b5b80821115610d585760008155600101610d5d565b803573ffffffffffffffffffffffffffffffffffffffff81168114610d9557600080fd5b919050565b600060208284031215610dac57600080fd5b610db582610d71565b9392505050565b6000815180845260005b81811015610de257602081850181015186830182015201610dc6565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6000602080840183516020865281815180845260408801915060408160051b890101935060208301925060005b81811015610e99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898603018352610e87858551610dbc565b94509285019291850191600101610e4d565b5092979650505050505050565b602081526000610db56020830184610e20565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015610e99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452610f1c858351610e20565b94509285019290850190600101610ee2565b6020808252825160408383015280516060840181905260009291820190839060808601905b80831015610f735783518252928401926001929092019190840190610f53565b50928601518584037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001604087015292610fad8185610dbc565b979650505050505050565b600060208284031215610fca57600080fd5b50919050565b60008060008060608587031215610fe657600080fd5b610fef85610d71565b9350602085013567ffffffffffffffff8082111561100c57600080fd5b818701915087601f83011261102057600080fd5b81358181111561102f57600080fd5b88602082850101111561104157600080fd5b60208301955080945050604087013591508082111561105f57600080fd5b5061106c87828801610fb8565b91505092959194509250565b60006020828403121561108a57600080fd5b813567ffffffffffffffff8111156110a157600080fd5b6110ad84828501610fb8565b949350505050565b600181811c908216806110c957607f821691505b602082108103610fca577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8181038181111561113c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126111d557600080fd5b83018035915067ffffffffffffffff8211156111f057600080fd5b6020019150600581901b360382131561120857600080fd5b9250929050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261124457600080fd5b83018035915067ffffffffffffffff82111561125f57600080fd5b60200191503681900382131561120857600080fd5b5b818110156112895760008155600101611275565b5050565b601f8211156112c957806000526020600020601f840160051c810160208510156112b45750805b6112c6601f850160051c830182611274565b50505b505050565b67ffffffffffffffff8311156112e6576112e6611171565b6112fa836112f483546110b5565b8361128d565b6000601f84116001811461134c57600085156113165750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556112c6565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561139b578685013582556020948501946001909201910161137b565b50868210156113d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b81357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261141a57600080fd5b8201803567ffffffffffffffff81111561143357600080fd5b602091820191600582811b360384131561144c57600080fd5b6801000000000000000083111561146557611465611171565b8454838655808410156114ed576000868152602081208581019083015b808210156114e95761149482546110b5565b80156114dd57601f808211600181146114af578585556114da565b6000858152602090206114cb8385018a1c820160018301611274565b50600085815260208120818755555b50505b50600182019150611482565b5050505b505060008481526020812084915b8481101561152a5761150d838761120f565b6115188183866112ce565b505091830191600191820191016114fb565b5050505050505050565b815167ffffffffffffffff81111561154e5761154e611171565b6115628161155c84546110b5565b8461128d565b602080601f8311600181146115b5576000841561157f5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561164a565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611602578886015182559484019460019091019084016115e3565b508582101561163e57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019291505056 + ///0x608060405234801561001057600080fd5b5060405161093c38038061093c83398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b61083f806100fd6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638da5cb5b116100505780638da5cb5b146100c9578063e3eccd10146100f1578063f2fde38b1461010457600080fd5b80630e666e49146100775780636f77926b1461009f578063715018a6146100bf575b600080fd5b61008a6100853660046104cd565b610117565b60405190151581526020015b60405180910390f35b6100b26100ad3660046104cd565b610154565b60405161009691906104ef565b6100c761022a565b005b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b6100c76100ff366004610565565b61023e565b6100c76101123660046104cd565b610373565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120805482919061014a906105e8565b9050119050919050565b60408051602080820183526060825273ffffffffffffffffffffffffffffffffffffffff84166000908152600182528390208351918201909352825491929091829082906101a1906105e8565b80601f01602080910402602001604051908101604052809291908181526020018280546101cd906105e8565b801561021a5780601f106101ef5761010080835404028352916020019161021a565b820191906000526020600020905b8154815290600101906020018083116101fd57829003601f168201915b5050505050815250509050919050565b6102326103dc565b61023c600061042f565b565b6102466103dc565b6000819003610281576040517ff969dd5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61028a83610117565b156102c1576040517fc344397e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020601f84018190048102820183018352810183815290918291908590859081908501838280828437600092018290525093909452505073ffffffffffffffffffffffffffffffffffffffff861681526001602052604090208251909150819061032f90826106bb565b509050507f3d3d05375966308799f27583173d73adad0e9648aac96d354b0d554a6ea8d574838383604051610366939291906107d5565b60405180910390a1505050565b61037b6103dc565b73ffffffffffffffffffffffffffffffffffffffff81166103d0576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b6103d98161042f565b50565b60005473ffffffffffffffffffffffffffffffffffffffff16331461023c576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016103c7565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104c857600080fd5b919050565b6000602082840312156104df57600080fd5b6104e8826104a4565b9392505050565b600060208083528351602080850152805180604086015260005b8181101561052557828101840151868201606001528301610509565b5060006060828701015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116860101935050505092915050565b60008060006040848603121561057a57600080fd5b610583846104a4565b9250602084013567ffffffffffffffff808211156105a057600080fd5b818601915086601f8301126105b457600080fd5b8135818111156105c357600080fd5b8760208285010111156105d557600080fd5b6020830194508093505050509250925092565b600181811c908216806105fc57607f821691505b602082108103610635577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f8211156106b6576000816000526020600020601f850160051c810160208610156106935750805b601f850160051c820191505b818110156106b25782815560010161069f565b5050505b505050565b815167ffffffffffffffff8111156106d5576106d561063b565b6106e9816106e384546105e8565b8461066a565b602080601f83116001811461073c57600084156107065750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556106b2565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156107895788860151825594840194600190910190840161076a565b50858210156107c557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019291505056 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x17\xB98\x03\x80a\x17\xB9\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\xBEV[\x80`\x01`\x01`\xA0\x1B\x03\x81\x16a\0^W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R`\0`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[a\0g\x81a\0nV[PPa\0\xEEV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\0` \x82\x84\x03\x12\x15a\0\xD0W`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\xE7W`\0\x80\xFD[\x93\x92PPPV[a\x16\xBC\x80a\0\xFD`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xA3W`\x005`\xE0\x1C\x80cqP\x18\xA6\x11a\0vW\x80c\xC8\xD1x\xB2\x11a\0[W\x80c\xC8\xD1x\xB2\x14a\x01bW\x80c\xF2\xFD\xE3\x8B\x14a\x01uW\x80c\xFER\xF7\x96\x14a\x01\x88W`\0\x80\xFD[\x80cqP\x18\xA6\x14a\x010W\x80c\x8D\xA5\xCB[\x14a\x01:W`\0\x80\xFD[\x80c\x0EfnI\x14a\0\xA8W\x80c3\xCFR\x0C\x14a\0\xD0W\x80cQ\xCAz\x9F\x14a\0\xF0W\x80cow\x92k\x14a\x01\x10W[`\0\x80\xFD[a\0\xBBa\0\xB66`\x04a\r\x9AV[a\x01\x9BV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xE3a\0\xDE6`\x04a\r\x9AV[a\x01\xDBV[`@Qa\0\xC7\x91\x90a\x0E\xA6V[a\x01\x03a\0\xFE6`\x04a\r\x9AV[a\x048V[`@Qa\0\xC7\x91\x90a\x0E\xB9V[a\x01#a\x01\x1E6`\x04a\r\x9AV[a\x07\x07V[`@Qa\0\xC7\x91\x90a\x0F.V[a\x018a\x08-V[\0[`\0T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\0\xC7V[a\x018a\x01p6`\x04a\x0F\xD0V[a\x08AV[a\x018a\x01\x836`\x04a\r\x9AV[a\n\xA9V[a\x018a\x01\x966`\x04a\x10xV[a\x0B\x12V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16`\0\x90\x81R`\x01` \x81\x90R`@\x82 \x01\x80T\x82\x91\x90a\x01\xD1\x90a\x10\xB5V[\x90P\x11\x90P\x91\x90PV[`@\x80Q` \x81\x01\x90\x91R``\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16`\0\x90\x81R`\x01` \x90\x81R`@\x80\x83 \x81Q\x81T``\x94\x81\x02\x82\x01\x85\x01\x84R\x92\x81\x01\x83\x81R\x90\x93\x91\x92\x84\x92\x84\x91\x90\x84\x01\x82\x82\x80\x15a\x02_W` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x02KW[PPPPP\x81R` \x01`\x01\x82\x01\x80Ta\x02x\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x02\xA4\x90a\x10\xB5V[\x80\x15a\x02\xF1W\x80`\x1F\x10a\x02\xC6Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x02\xF1V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x02\xD4W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P`\0\x81`\0\x01Q`\x01\x83`\0\x01QQa\x03\x15\x91\x90a\x11\x02V[\x81Q\x81\x10a\x03%Wa\x03%a\x11BV[` \x02` \x01\x01Q\x90P`\x02\x81\x81T\x81\x10a\x03BWa\x03Ba\x11BV[\x90`\0R` `\0 \x01`@Q\x80` \x01`@R\x90\x81`\0\x82\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01`\0\x90[\x82\x82\x10\x15a\x04(W\x83\x82\x90`\0R` `\0 \x01\x80Ta\x03\x9B\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x03\xC7\x90a\x10\xB5V[\x80\x15a\x04\x14W\x80`\x1F\x10a\x03\xE9Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x04\x14V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x03\xF7W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\x03|V[PPP\x91RP\x90\x95\x94PPPPPV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16`\0\x90\x81R`\x01` \x90\x81R`@\x80\x83 \x81Q\x81T\x93\x84\x02\x81\x01``\x90\x81\x01\x84R\x92\x81\x01\x84\x81R\x92\x94\x93\x90\x92\x83\x91\x83\x90\x83\x88\x01\x82\x82\x80\x15a\x04\xAFW` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x04\x9BW[PPPPP\x81R` \x01`\x01\x82\x01\x80Ta\x04\xC8\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x04\xF4\x90a\x10\xB5V[\x80\x15a\x05AW\x80`\x1F\x10a\x05\x16Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x05AV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x05$W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P`\0\x81`\0\x01QQg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x05lWa\x05la\x11qV[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x05\xACW\x81` \x01[`@\x80Q` \x81\x01\x90\x91R``\x81R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05\x8AW\x90P[P\x90P`\0[\x82QQ\x81\x10\x15a\x06\xFFW`\x02\x83`\0\x01Q\x82\x81Q\x81\x10a\x05\xD4Wa\x05\xD4a\x11BV[` \x02` \x01\x01Q\x81T\x81\x10a\x05\xECWa\x05\xECa\x11BV[\x90`\0R` `\0 \x01`@Q\x80` \x01`@R\x90\x81`\0\x82\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01`\0\x90[\x82\x82\x10\x15a\x06\xD2W\x83\x82\x90`\0R` `\0 \x01\x80Ta\x06E\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x06q\x90a\x10\xB5V[\x80\x15a\x06\xBEW\x80`\x1F\x10a\x06\x93Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x06\xBEV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x06\xA1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\x06&V[PPPP\x81RPP\x82\x82\x81Q\x81\x10a\x06\xECWa\x06\xECa\x11BV[` \x90\x81\x02\x91\x90\x91\x01\x01R`\x01\x01a\x05\xB2V[P\x93\x92PPPV[`@\x80Q\x80\x82\x01\x82R``\x80\x82R` \x80\x83\x01\x82\x90Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\0\x90\x81R`\x01\x82R\x84\x90 \x84Q\x81T\x92\x83\x02\x81\x01\x84\x01\x86R\x94\x85\x01\x82\x81R\x93\x94\x93\x90\x92\x84\x92\x84\x91\x84\x01\x82\x82\x80\x15a\x07\x8BW` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x07wW[PPPPP\x81R` \x01`\x01\x82\x01\x80Ta\x07\xA4\x90a\x10\xB5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x07\xD0\x90a\x10\xB5V[\x80\x15a\x08\x1DW\x80`\x1F\x10a\x07\xF2Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x08\x1DV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x08\0W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P\x91\x90PV[a\x085a\x0CIV[a\x08?`\0a\x0C\x9CV[V[a\x08Ia\x0CIV[`\0\x82\x90\x03a\x08\x84W`@Q\x7F\xF9i\xDDY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x08\x8E\x81\x80a\x11\xA0V[\x90P`\0\x03a\x08\xC9W`@Q\x7F+\xC3+\x16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x08\xD2\x84a\x01\x9BV[\x15a\t\tW`@Q\x7F\xC3D9~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x81\x90\x7F@W\x87\xFA\x12\xA8#\xE0\xF2\xB7c\x1C\xC4\x1B;\xA8\x82\x8B3!\xCA\x81\x11\x11\xFAu\xCD:\xA3\xBBZ\xCE\x01a\tG\x82\x82a\x13\xE8V[PP`\x02T`\0\x90a\t[\x90`\x01\x90a\x11\x02V[`@\x80Q`\0\x81\x83\x01\x90\x81R``\x82\x01\x83R\x81R\x81Q` `\x1F\x88\x01\x81\x90\x04\x81\x02\x82\x01\x81\x01\x90\x93R\x86\x81R\x92\x93P\x91\x81\x83\x01\x91\x87\x90\x87\x90\x81\x90\x84\x01\x83\x82\x80\x82\x847`\0\x92\x01\x82\x90RP\x93\x90\x94RPPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x81R`\x01` \x90\x81R`@\x90\x91 \x83Q\x80Q\x91\x93Pa\t\xE4\x92\x84\x92\x91\x01\x90a\r\x11V[P` \x82\x01Q`\x01\x82\x01\x90a\t\xF9\x90\x82a\x154V[PPPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\0\x90\x81R`\x01` \x81\x90R`@\x90\x91 \x01a\n0\x84\x86\x83a\x12\xCEV[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\0\x90\x81R`\x01` \x81\x81R`@\x80\x84 \x80T\x93\x84\x01\x81U\x84R\x92 \x01\x82\x90UQ\x7F==\x057Yf0\x87\x99\xF2u\x83\x17=s\xAD\xAD\x0E\x96H\xAA\xC9m5K\rUJn\xA8\xD5t\x90a\n\x9A\x90\x87\x90\x87\x90\x87\x90a\x16RV[`@Q\x80\x91\x03\x90\xA1PPPPPV[a\n\xB1a\x0CIV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16a\x0B\x06W`@Q\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\0`\x04\x82\x01R`$\x01[`@Q\x80\x91\x03\x90\xFD[a\x0B\x0F\x81a\x0C\x9CV[PV[a\x0B\x1C\x81\x80a\x11\xA0V[\x90P`\0\x03a\x0BWW`@Q\x7F+\xC3+\x16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0B`3a\x01\x9BV[a\x0B\x96W`@Q\x7F\x90{6\x1F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x81\x90\x7F@W\x87\xFA\x12\xA8#\xE0\xF2\xB7c\x1C\xC4\x1B;\xA8\x82\x8B3!\xCA\x81\x11\x11\xFAu\xCD:\xA3\xBBZ\xCE\x01a\x0B\xD4\x82\x82a\x13\xE8V[PP`\x02T`\0\x90a\x0B\xE8\x90`\x01\x90a\x11\x02V[3`\0\x81\x81R`\x01` \x81\x81R`@\x80\x84 \x80T\x93\x84\x01\x81U\x84R\x92 \x01\x83\x90UQ\x91\x92P\x90\x7F\xD5\x94\xE1\xA0\x93T\xAF\t>\x9B\xBA?STV\xE7\xE5\xB04Y\x90\xE3|7\xE9\xC4\x1B\xB5{\x99\x12\xCA\x90a\x0C=\x90\x84\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA2PPV[`\0Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163\x14a\x08?W`@Q\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R3`\x04\x82\x01R`$\x01a\n\xFDV[`\0\x80Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x81\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x82\x80T\x82\x82U\x90`\0R` `\0 \x90\x81\x01\x92\x82\x15a\rLW\x91` \x02\x82\x01[\x82\x81\x11\x15a\rLW\x82Q\x82U\x91` \x01\x91\x90`\x01\x01\x90a\r1V[Pa\rX\x92\x91Pa\r\\V[P\x90V[[\x80\x82\x11\x15a\rXW`\0\x81U`\x01\x01a\r]V[\x805s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a\r\x95W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\r\xACW`\0\x80\xFD[a\r\xB5\x82a\rqV[\x93\x92PPPV[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15a\r\xE2W` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01a\r\xC6V[P`\0` \x82\x86\x01\x01R` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[`\0` \x80\x84\x01\x83Q` \x86R\x81\x81Q\x80\x84R`@\x88\x01\x91P`@\x81`\x05\x1B\x89\x01\x01\x93P` \x83\x01\x92P`\0[\x81\x81\x10\x15a\x0E\x99W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x89\x86\x03\x01\x83Ra\x0E\x87\x85\x85Qa\r\xBCV[\x94P\x92\x85\x01\x92\x91\x85\x01\x91`\x01\x01a\x0EMV[P\x92\x97\x96PPPPPPPV[` \x81R`\0a\r\xB5` \x83\x01\x84a\x0E V[`\0` \x80\x83\x01` \x84R\x80\x85Q\x80\x83R`@\x86\x01\x91P`@\x81`\x05\x1B\x87\x01\x01\x92P` \x87\x01`\0[\x82\x81\x10\x15a\x0E\x99W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x88\x86\x03\x01\x84Ra\x0F\x1C\x85\x83Qa\x0E V[\x94P\x92\x85\x01\x92\x90\x85\x01\x90`\x01\x01a\x0E\xE2V[` \x80\x82R\x82Q`@\x83\x83\x01R\x80Q``\x84\x01\x81\x90R`\0\x92\x91\x82\x01\x90\x83\x90`\x80\x86\x01\x90[\x80\x83\x10\x15a\x0FsW\x83Q\x82R\x92\x84\x01\x92`\x01\x92\x90\x92\x01\x91\x90\x84\x01\x90a\x0FSV[P\x92\x86\x01Q\x85\x84\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x01`@\x87\x01R\x92a\x0F\xAD\x81\x85a\r\xBCV[\x97\x96PPPPPPPV[`\0` \x82\x84\x03\x12\x15a\x0F\xCAW`\0\x80\xFD[P\x91\x90PV[`\0\x80`\0\x80``\x85\x87\x03\x12\x15a\x0F\xE6W`\0\x80\xFD[a\x0F\xEF\x85a\rqV[\x93P` \x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x10\x0CW`\0\x80\xFD[\x81\x87\x01\x91P\x87`\x1F\x83\x01\x12a\x10 W`\0\x80\xFD[\x815\x81\x81\x11\x15a\x10/W`\0\x80\xFD[\x88` \x82\x85\x01\x01\x11\x15a\x10AW`\0\x80\xFD[` \x83\x01\x95P\x80\x94PP`@\x87\x015\x91P\x80\x82\x11\x15a\x10_W`\0\x80\xFD[Pa\x10l\x87\x82\x88\x01a\x0F\xB8V[\x91PP\x92\x95\x91\x94P\x92PV[`\0` \x82\x84\x03\x12\x15a\x10\x8AW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x10\xA1W`\0\x80\xFD[a\x10\xAD\x84\x82\x85\x01a\x0F\xB8V[\x94\x93PPPPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x10\xC9W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x0F\xCAW\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x81\x81\x03\x81\x81\x11\x15a\x11W\x87\x85\x01Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PP`\x01\x84`\x01\x1B\x01\x85U[PPPPPPV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x81R`@` \x82\x01R\x81`@\x82\x01R\x81\x83``\x83\x017`\0\x81\x83\x01``\x90\x81\x01\x91\x90\x91R`\x1F\x90\x92\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16\x01\x01\x92\x91PPV", + b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\t<8\x03\x80a\t<\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\xBEV[\x80`\x01`\x01`\xA0\x1B\x03\x81\x16a\0^W`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R`\0`\x04\x82\x01R`$\x01`@Q\x80\x91\x03\x90\xFD[a\0g\x81a\0nV[PPa\0\xEEV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\0` \x82\x84\x03\x12\x15a\0\xD0W`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\xE7W`\0\x80\xFD[\x93\x92PPPV[a\x08?\x80a\0\xFD`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0rW`\x005`\xE0\x1C\x80c\x8D\xA5\xCB[\x11a\0PW\x80c\x8D\xA5\xCB[\x14a\0\xC9W\x80c\xE3\xEC\xCD\x10\x14a\0\xF1W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x04W`\0\x80\xFD[\x80c\x0EfnI\x14a\0wW\x80cow\x92k\x14a\0\x9FW\x80cqP\x18\xA6\x14a\0\xBFW[`\0\x80\xFD[a\0\x8Aa\0\x856`\x04a\x04\xCDV[a\x01\x17V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xB2a\0\xAD6`\x04a\x04\xCDV[a\x01TV[`@Qa\0\x96\x91\x90a\x04\xEFV[a\0\xC7a\x02*V[\0[`\0T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\0\x96V[a\0\xC7a\0\xFF6`\x04a\x05eV[a\x02>V[a\0\xC7a\x01\x126`\x04a\x04\xCDV[a\x03sV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16`\0\x90\x81R`\x01` R`@\x81 \x80T\x82\x91\x90a\x01J\x90a\x05\xE8V[\x90P\x11\x90P\x91\x90PV[`@\x80Q` \x80\x82\x01\x83R``\x82Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16`\0\x90\x81R`\x01\x82R\x83\x90 \x83Q\x91\x82\x01\x90\x93R\x82T\x91\x92\x90\x91\x82\x90\x82\x90a\x01\xA1\x90a\x05\xE8V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x01\xCD\x90a\x05\xE8V[\x80\x15a\x02\x1AW\x80`\x1F\x10a\x01\xEFWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x02\x1AV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x01\xFDW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P\x91\x90PV[a\x022a\x03\xDCV[a\x02<`\0a\x04/V[V[a\x02Fa\x03\xDCV[`\0\x81\x90\x03a\x02\x81W`@Q\x7F\xF9i\xDDY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x02\x8A\x83a\x01\x17V[\x15a\x02\xC1W`@Q\x7F\xC3D9~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q` `\x1F\x84\x01\x81\x90\x04\x81\x02\x82\x01\x83\x01\x83R\x81\x01\x83\x81R\x90\x91\x82\x91\x90\x85\x90\x85\x90\x81\x90\x85\x01\x83\x82\x80\x82\x847`\0\x92\x01\x82\x90RP\x93\x90\x94RPPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16\x81R`\x01` R`@\x90 \x82Q\x90\x91P\x81\x90a\x03/\x90\x82a\x06\xBBV[P\x90PP\x7F==\x057Yf0\x87\x99\xF2u\x83\x17=s\xAD\xAD\x0E\x96H\xAA\xC9m5K\rUJn\xA8\xD5t\x83\x83\x83`@Qa\x03f\x93\x92\x91\x90a\x07\xD5V[`@Q\x80\x91\x03\x90\xA1PPPV[a\x03{a\x03\xDCV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16a\x03\xD0W`@Q\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\0`\x04\x82\x01R`$\x01[`@Q\x80\x91\x03\x90\xFD[a\x03\xD9\x81a\x04/V[PV[`\0Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163\x14a\x02\x9B\xBA?STV\xE7\xE5\xB04Y\x90\xE3|7\xE9\xC4\x1B\xB5{\x99\x12\xCA\x90a\x0C=\x90\x84\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA2PPV[`\0Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163\x14a\x08?W`@Q\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R3`\x04\x82\x01R`$\x01a\n\xFDV[`\0\x80Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x81\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[\x82\x80T\x82\x82U\x90`\0R` `\0 \x90\x81\x01\x92\x82\x15a\rLW\x91` \x02\x82\x01[\x82\x81\x11\x15a\rLW\x82Q\x82U\x91` \x01\x91\x90`\x01\x01\x90a\r1V[Pa\rX\x92\x91Pa\r\\V[P\x90V[[\x80\x82\x11\x15a\rXW`\0\x81U`\x01\x01a\r]V[\x805s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a\r\x95W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\r\xACW`\0\x80\xFD[a\r\xB5\x82a\rqV[\x93\x92PPPV[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15a\r\xE2W` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01a\r\xC6V[P`\0` \x82\x86\x01\x01R` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[`\0` \x80\x84\x01\x83Q` \x86R\x81\x81Q\x80\x84R`@\x88\x01\x91P`@\x81`\x05\x1B\x89\x01\x01\x93P` \x83\x01\x92P`\0[\x81\x81\x10\x15a\x0E\x99W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x89\x86\x03\x01\x83Ra\x0E\x87\x85\x85Qa\r\xBCV[\x94P\x92\x85\x01\x92\x91\x85\x01\x91`\x01\x01a\x0EMV[P\x92\x97\x96PPPPPPPV[` \x81R`\0a\r\xB5` \x83\x01\x84a\x0E V[`\0` \x80\x83\x01` \x84R\x80\x85Q\x80\x83R`@\x86\x01\x91P`@\x81`\x05\x1B\x87\x01\x01\x92P` \x87\x01`\0[\x82\x81\x10\x15a\x0E\x99W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x88\x86\x03\x01\x84Ra\x0F\x1C\x85\x83Qa\x0E V[\x94P\x92\x85\x01\x92\x90\x85\x01\x90`\x01\x01a\x0E\xE2V[` \x80\x82R\x82Q`@\x83\x83\x01R\x80Q``\x84\x01\x81\x90R`\0\x92\x91\x82\x01\x90\x83\x90`\x80\x86\x01\x90[\x80\x83\x10\x15a\x0FsW\x83Q\x82R\x92\x84\x01\x92`\x01\x92\x90\x92\x01\x91\x90\x84\x01\x90a\x0FSV[P\x92\x86\x01Q\x85\x84\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x01`@\x87\x01R\x92a\x0F\xAD\x81\x85a\r\xBCV[\x97\x96PPPPPPPV[`\0` \x82\x84\x03\x12\x15a\x0F\xCAW`\0\x80\xFD[P\x91\x90PV[`\0\x80`\0\x80``\x85\x87\x03\x12\x15a\x0F\xE6W`\0\x80\xFD[a\x0F\xEF\x85a\rqV[\x93P` \x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x10\x0CW`\0\x80\xFD[\x81\x87\x01\x91P\x87`\x1F\x83\x01\x12a\x10 W`\0\x80\xFD[\x815\x81\x81\x11\x15a\x10/W`\0\x80\xFD[\x88` \x82\x85\x01\x01\x11\x15a\x10AW`\0\x80\xFD[` \x83\x01\x95P\x80\x94PP`@\x87\x015\x91P\x80\x82\x11\x15a\x10_W`\0\x80\xFD[Pa\x10l\x87\x82\x88\x01a\x0F\xB8V[\x91PP\x92\x95\x91\x94P\x92PV[`\0` \x82\x84\x03\x12\x15a\x10\x8AW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x10\xA1W`\0\x80\xFD[a\x10\xAD\x84\x82\x85\x01a\x0F\xB8V[\x94\x93PPPPV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x10\xC9W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x0F\xCAW\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x81\x81\x03\x81\x81\x11\x15a\x11W\x87\x85\x01Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PP`\x01\x84`\x01\x1B\x01\x85U[PPPPPPV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x81R`@` \x82\x01R\x81`@\x82\x01R\x81\x83``\x83\x017`\0\x81\x83\x01``\x90\x81\x01\x91\x90\x91R`\x1F\x90\x92\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16\x01\x01\x92\x91PPV", + b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0rW`\x005`\xE0\x1C\x80c\x8D\xA5\xCB[\x11a\0PW\x80c\x8D\xA5\xCB[\x14a\0\xC9W\x80c\xE3\xEC\xCD\x10\x14a\0\xF1W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x04W`\0\x80\xFD[\x80c\x0EfnI\x14a\0wW\x80cow\x92k\x14a\0\x9FW\x80cqP\x18\xA6\x14a\0\xBFW[`\0\x80\xFD[a\0\x8Aa\0\x856`\x04a\x04\xCDV[a\x01\x17V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xB2a\0\xAD6`\x04a\x04\xCDV[a\x01TV[`@Qa\0\x96\x91\x90a\x04\xEFV[a\0\xC7a\x02*V[\0[`\0T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\0\x96V[a\0\xC7a\0\xFF6`\x04a\x05eV[a\x02>V[a\0\xC7a\x01\x126`\x04a\x04\xCDV[a\x03sV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16`\0\x90\x81R`\x01` R`@\x81 \x80T\x82\x91\x90a\x01J\x90a\x05\xE8V[\x90P\x11\x90P\x91\x90PV[`@\x80Q` \x80\x82\x01\x83R``\x82Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16`\0\x90\x81R`\x01\x82R\x83\x90 \x83Q\x91\x82\x01\x90\x93R\x82T\x91\x92\x90\x91\x82\x90\x82\x90a\x01\xA1\x90a\x05\xE8V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x01\xCD\x90a\x05\xE8V[\x80\x15a\x02\x1AW\x80`\x1F\x10a\x01\xEFWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x02\x1AV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x01\xFDW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x90P\x91\x90PV[a\x022a\x03\xDCV[a\x02<`\0a\x04/V[V[a\x02Fa\x03\xDCV[`\0\x81\x90\x03a\x02\x81W`@Q\x7F\xF9i\xDDY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x02\x8A\x83a\x01\x17V[\x15a\x02\xC1W`@Q\x7F\xC3D9~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q` `\x1F\x84\x01\x81\x90\x04\x81\x02\x82\x01\x83\x01\x83R\x81\x01\x83\x81R\x90\x91\x82\x91\x90\x85\x90\x85\x90\x81\x90\x85\x01\x83\x82\x80\x82\x847`\0\x92\x01\x82\x90RP\x93\x90\x94RPPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16\x81R`\x01` R`@\x90 \x82Q\x90\x91P\x81\x90a\x03/\x90\x82a\x06\xBBV[P\x90PP\x7F==\x057Yf0\x87\x99\xF2u\x83\x17=s\xAD\xAD\x0E\x96H\xAA\xC9m5K\rUJn\xA8\xD5t\x83\x83\x83`@Qa\x03f\x93\x92\x91\x90a\x07\xD5V[`@Q\x80\x91\x03\x90\xA1PPPV[a\x03{a\x03\xDCV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16a\x03\xD0W`@Q\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\0`\x04\x82\x01R`$\x01[`@Q\x80\x91\x03\x90\xFD[a\x03\xD9\x81a\x04/V[PV[`\0Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163\x14a\x02, + pub struct UserInfo { + pub signaturePubKey: alloy::sol_types::private::Bytes, } #[allow(non_camel_case_types, non_snake_case, clippy::style)] const _: () = { use alloy::sol_types as alloy_sol_types; #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Array, - ); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Vec, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -392,30 +260,30 @@ struct KeyPackage { bytes[] data; } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: KeyPackage) -> Self { - (value.data,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: UserInfo) -> Self { + (value.signaturePubKey,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for KeyPackage { + impl ::core::convert::From> for UserInfo { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { data: tuple.0 } + Self { signaturePubKey: tuple.0 } } } #[automatically_derived] - impl alloy_sol_types::SolValue for KeyPackage { + impl alloy_sol_types::SolValue for UserInfo { type SolType = Self; } #[automatically_derived] - impl alloy_sol_types::private::SolTypeValue for KeyPackage { + impl alloy_sol_types::private::SolTypeValue for UserInfo { #[inline] fn stv_to_tokens(&self) -> ::Token<'_> { ( - as alloy_sol_types::SolType>::tokenize(&self.data), + ::tokenize( + &self.signaturePubKey, + ), ) } #[inline] @@ -460,7 +328,7 @@ struct KeyPackage { bytes[] data; } } } #[automatically_derived] - impl alloy_sol_types::SolType for KeyPackage { + impl alloy_sol_types::SolType for UserInfo { type RustType = Self; type Token<'a> = alloy_sol_types::private::Cow<'static, str> { - alloy_sol_types::private::Cow::Borrowed("KeyPackage(bytes[] data)") + alloy_sol_types::private::Cow::Borrowed( + "UserInfo(bytes signaturePubKey)", + ) } #[inline] fn eip712_components() -> alloy_sol_types::private::Vec< @@ -503,21 +373,21 @@ struct KeyPackage { bytes[] data; } } #[inline] fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { - as alloy_sol_types::SolType>::eip712_data_word(&self.data) + ::eip712_data_word( + &self.signaturePubKey, + ) .0 .to_vec() } } #[automatically_derived] - impl alloy_sol_types::EventTopic for KeyPackage { + impl alloy_sol_types::EventTopic for UserInfo { #[inline] fn topic_preimage_length(rust: &Self::RustType) -> usize { 0usize - + as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.data) + + ::topic_preimage_length( + &rust.signaturePubKey, + ) } #[inline] fn encode_topic_preimage( @@ -527,10 +397,8 @@ struct KeyPackage { bytes[] data; } out.reserve( ::topic_preimage_length(rust), ); - as alloy_sol_types::EventTopic>::encode_topic_preimage( - &rust.data, + ::encode_topic_preimage( + &rust.signaturePubKey, out, ); } @@ -549,30 +417,20 @@ struct KeyPackage { bytes[] data; } } } }; - /**```solidity -struct UserInfo { uint256[] keyPackageIndices; bytes signaturePubKey; } + /**Custom error with signature `MalformedUserInfo()` and selector `0xf969dd59`. +```solidity +error MalformedUserInfo(); ```*/ #[allow(non_camel_case_types, non_snake_case)] #[derive(Clone)] - pub struct UserInfo { - pub keyPackageIndices: alloy::sol_types::private::Vec< - alloy::sol_types::private::U256, - >, - pub signaturePubKey: alloy::sol_types::private::Bytes, - } + pub struct MalformedUserInfo {} #[allow(non_camel_case_types, non_snake_case, clippy::style)] const _: () = { use alloy::sol_types as alloy_sol_types; #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Array>, - alloy::sol_types::sol_data::Bytes, - ); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Vec, - alloy::sol_types::private::Bytes, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -586,360 +444,92 @@ struct UserInfo { uint256[] keyPackageIndices; bytes signaturePubKey; } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: UserInfo) -> Self { - (value.keyPackageIndices, value.signaturePubKey) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: MalformedUserInfo) -> Self { + () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for UserInfo { + impl ::core::convert::From> for MalformedUserInfo { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - keyPackageIndices: tuple.0, - signaturePubKey: tuple.1, - } + Self {} } } #[automatically_derived] - impl alloy_sol_types::SolValue for UserInfo { - type SolType = Self; - } - #[automatically_derived] - impl alloy_sol_types::private::SolTypeValue for UserInfo { + impl alloy_sol_types::SolError for MalformedUserInfo { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "MalformedUserInfo()"; + const SELECTOR: [u8; 4] = [249u8, 105u8, 221u8, 89u8]; #[inline] - fn stv_to_tokens(&self) -> ::Token<'_> { - ( - , - > as alloy_sol_types::SolType>::tokenize(&self.keyPackageIndices), - ::tokenize( - &self.signaturePubKey, - ), - ) + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() } #[inline] - fn stv_abi_encoded_size(&self) -> usize { - if let Some(size) = ::ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encoded_size(&tuple) + fn tokenize(&self) -> Self::Token<'_> { + () } - #[inline] - fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { - ::eip712_hash_struct(self) + } + }; + /**Custom error with signature `OwnableInvalidOwner(address)` and selector `0x1e4fbdf7`. +```solidity +error OwnableInvalidOwner(address owner); +```*/ + #[allow(non_camel_case_types, non_snake_case)] + #[derive(Clone)] + pub struct OwnableInvalidOwner { + pub owner: alloy::sol_types::private::Address, + } + #[allow(non_camel_case_types, non_snake_case, clippy::style)] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} } - #[inline] - fn stv_abi_encode_packed_to( - &self, - out: &mut alloy_sol_types::private::Vec, - ) { - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out) + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OwnableInvalidOwner) -> Self { + (value.owner,) } - #[inline] - fn stv_abi_packed_encoded_size(&self) -> usize { - if let Some(size) = ::PACKED_ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple) + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OwnableInvalidOwner { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { owner: tuple.0 } } } #[automatically_derived] - impl alloy_sol_types::SolType for UserInfo { - type RustType = Self; - type Token<'a> = = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SOL_NAME: &'static str = ::NAME; - const ENCODED_SIZE: Option = as alloy_sol_types::SolType>::ENCODED_SIZE; - const PACKED_ENCODED_SIZE: Option = as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; + const SIGNATURE: &'static str = "OwnableInvalidOwner(address)"; + const SELECTOR: [u8; 4] = [30u8, 79u8, 189u8, 247u8]; #[inline] - fn valid_token(token: &Self::Token<'_>) -> bool { - as alloy_sol_types::SolType>::valid_token(token) - } - #[inline] - fn detokenize(token: Self::Token<'_>) -> Self::RustType { - let tuple = as alloy_sol_types::SolType>::detokenize(token); - >>::from(tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolStruct for UserInfo { - const NAME: &'static str = "UserInfo"; - #[inline] - fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { - alloy_sol_types::private::Cow::Borrowed( - "UserInfo(uint256[] keyPackageIndices,bytes signaturePubKey)", - ) - } - #[inline] - fn eip712_components() -> alloy_sol_types::private::Vec< - alloy_sol_types::private::Cow<'static, str>, - > { - alloy_sol_types::private::Vec::new() - } - #[inline] - fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { - ::eip712_root_type() - } - #[inline] - fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { - [ - , - > as alloy_sol_types::SolType>::eip712_data_word( - &self.keyPackageIndices, - ) - .0, - ::eip712_data_word( - &self.signaturePubKey, - ) - .0, - ] - .concat() - } - } - #[automatically_derived] - impl alloy_sol_types::EventTopic for UserInfo { - #[inline] - fn topic_preimage_length(rust: &Self::RustType) -> usize { - 0usize - + , - > as alloy_sol_types::EventTopic>::topic_preimage_length( - &rust.keyPackageIndices, - ) - + ::topic_preimage_length( - &rust.signaturePubKey, - ) - } - #[inline] - fn encode_topic_preimage( - rust: &Self::RustType, - out: &mut alloy_sol_types::private::Vec, - ) { - out.reserve( - ::topic_preimage_length(rust), - ); - , - > as alloy_sol_types::EventTopic>::encode_topic_preimage( - &rust.keyPackageIndices, - out, - ); - ::encode_topic_preimage( - &rust.signaturePubKey, - out, - ); - } - #[inline] - fn encode_topic( - rust: &Self::RustType, - ) -> alloy_sol_types::abi::token::WordToken { - let mut out = alloy_sol_types::private::Vec::new(); - ::encode_topic_preimage( - rust, - &mut out, - ); - alloy_sol_types::abi::token::WordToken( - alloy_sol_types::private::keccak256(out), - ) - } - } - }; - /**Custom error with signature `MalformedKeyPackage()` and selector `0x2bc32b16`. -```solidity -error MalformedKeyPackage(); -```*/ - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct MalformedKeyPackage {} - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: MalformedKeyPackage) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for MalformedKeyPackage { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} - } - } - #[automatically_derived] - impl alloy_sol_types::SolError for MalformedKeyPackage { - type Parameters<'a> = UnderlyingSolTuple<'a>; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "MalformedKeyPackage()"; - const SELECTOR: [u8; 4] = [43u8, 195u8, 43u8, 22u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - () - } - } - }; - /**Custom error with signature `MalformedUserInfo()` and selector `0xf969dd59`. -```solidity -error MalformedUserInfo(); -```*/ - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct MalformedUserInfo {} - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: MalformedUserInfo) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for MalformedUserInfo { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} - } - } - #[automatically_derived] - impl alloy_sol_types::SolError for MalformedUserInfo { - type Parameters<'a> = UnderlyingSolTuple<'a>; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "MalformedUserInfo()"; - const SELECTOR: [u8; 4] = [249u8, 105u8, 221u8, 89u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - () - } - } - }; - /**Custom error with signature `OwnableInvalidOwner(address)` and selector `0x1e4fbdf7`. -```solidity -error OwnableInvalidOwner(address owner); -```*/ - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct OwnableInvalidOwner { - pub owner: alloy::sol_types::private::Address, - } - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: OwnableInvalidOwner) -> Self { - (value.owner,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for OwnableInvalidOwner { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { owner: tuple.0 } - } - } - #[automatically_derived] - impl alloy_sol_types::SolError for OwnableInvalidOwner { - type Parameters<'a> = UnderlyingSolTuple<'a>; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "OwnableInvalidOwner(address)"; - const SELECTOR: [u8; 4] = [30u8, 79u8, 189u8, 247u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() } #[inline] fn tokenize(&self) -> Self::Token<'_> { @@ -1077,77 +667,18 @@ error UserAlreadyExists(); } } }; - /**Custom error with signature `UserDoesNotExist()` and selector `0x907b361f`. + /**Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`. ```solidity -error UserDoesNotExist(); +event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); ```*/ - #[allow(non_camel_case_types, non_snake_case)] + #[allow(non_camel_case_types, non_snake_case, clippy::style)] #[derive(Clone)] - pub struct UserDoesNotExist {} - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: UserDoesNotExist) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for UserDoesNotExist { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} - } - } - #[automatically_derived] - impl alloy_sol_types::SolError for UserDoesNotExist { - type Parameters<'a> = UnderlyingSolTuple<'a>; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "UserDoesNotExist()"; - const SELECTOR: [u8; 4] = [144u8, 123u8, 54u8, 31u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - () - } - } - }; - /**Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`. -```solidity -event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - #[derive(Clone)] - pub struct OwnershipTransferred { - #[allow(missing_docs)] - pub previousOwner: alloy::sol_types::private::Address, - #[allow(missing_docs)] - pub newOwner: alloy::sol_types::private::Address, - } + pub struct OwnershipTransferred { + #[allow(missing_docs)] + pub previousOwner: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } #[allow(non_camel_case_types, non_snake_case, clippy::style)] const _: () = { use alloy::sol_types as alloy_sol_types; @@ -1359,477 +890,32 @@ event UserAdded(address user, bytes signaturePubKey); Ok(()) } } - #[automatically_derived] - impl alloy_sol_types::private::IntoLogData for UserAdded { - fn to_log_data(&self) -> alloy_sol_types::private::LogData { - From::from(self) - } - fn into_log_data(self) -> alloy_sol_types::private::LogData { - From::from(&self) - } - } - #[automatically_derived] - impl From<&UserAdded> for alloy_sol_types::private::LogData { - #[inline] - fn from(this: &UserAdded) -> alloy_sol_types::private::LogData { - alloy_sol_types::SolEvent::encode_log_data(this) - } - } - }; - /**Event with signature `UserKeyPackageAdded(address,uint256)` and selector `0xd594e1a09354af093e9bba3f535456e7e5b0345990e37c37e9c41bb57b9912ca`. -```solidity -event UserKeyPackageAdded(address indexed user, uint256 index); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - #[derive(Clone)] - pub struct UserKeyPackageAdded { - #[allow(missing_docs)] - pub user: alloy::sol_types::private::Address, - #[allow(missing_docs)] - pub index: alloy::sol_types::private::U256, - } - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[automatically_derived] - impl alloy_sol_types::SolEvent for UserKeyPackageAdded { - type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); - type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - type TopicList = ( - alloy_sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Address, - ); - const SIGNATURE: &'static str = "UserKeyPackageAdded(address,uint256)"; - const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ - 213u8, - 148u8, - 225u8, - 160u8, - 147u8, - 84u8, - 175u8, - 9u8, - 62u8, - 155u8, - 186u8, - 63u8, - 83u8, - 84u8, - 86u8, - 231u8, - 229u8, - 176u8, - 52u8, - 89u8, - 144u8, - 227u8, - 124u8, - 55u8, - 233u8, - 196u8, - 27u8, - 181u8, - 123u8, - 153u8, - 18u8, - 202u8, - ]); - const ANONYMOUS: bool = false; - #[allow(unused_variables)] - #[inline] - fn new( - topics: ::RustType, - data: as alloy_sol_types::SolType>::RustType, - ) -> Self { - Self { - user: topics.1, - index: data.0, - } - } - #[inline] - fn tokenize_body(&self) -> Self::DataToken<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.index), - ) - } - #[inline] - fn topics(&self) -> ::RustType { - (Self::SIGNATURE_HASH.into(), self.user.clone()) - } - #[inline] - fn encode_topics_raw( - &self, - out: &mut [alloy_sol_types::abi::token::WordToken], - ) -> alloy_sol_types::Result<()> { - if out.len() < ::COUNT { - return Err(alloy_sol_types::Error::Overrun); - } - out[0usize] = alloy_sol_types::abi::token::WordToken( - Self::SIGNATURE_HASH, - ); - out[1usize] = ::encode_topic( - &self.user, - ); - Ok(()) - } - } - #[automatically_derived] - impl alloy_sol_types::private::IntoLogData for UserKeyPackageAdded { - fn to_log_data(&self) -> alloy_sol_types::private::LogData { - From::from(self) - } - fn into_log_data(self) -> alloy_sol_types::private::LogData { - From::from(&self) - } - } - #[automatically_derived] - impl From<&UserKeyPackageAdded> for alloy_sol_types::private::LogData { - #[inline] - fn from(this: &UserKeyPackageAdded) -> alloy_sol_types::private::LogData { - alloy_sol_types::SolEvent::encode_log_data(this) - } - } - }; - /**Constructor`. -```solidity -constructor(address initialOwner); -```*/ - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct constructorCall { - pub initialOwner: alloy::sol_types::private::Address, - } - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: constructorCall) -> Self { - (value.initialOwner,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for constructorCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { initialOwner: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolConstructor for constructorCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Address,); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - ::tokenize( - &self.initialOwner, - ), - ) - } - } - }; - /**Function with signature `addKeyPackage((bytes[]))` and selector `0xfe52f796`. -```solidity -function addKeyPackage(KeyPackage memory keyPackage) external; -```*/ - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct addKeyPackageCall { - pub keyPackage: ::RustType, - } - ///Container type for the return parameters of the [`addKeyPackage((bytes[]))`](addKeyPackageCall) function. - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct addKeyPackageReturn {} - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (KeyPackage,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - ::RustType, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: addKeyPackageCall) -> Self { - (value.keyPackage,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for addKeyPackageCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { keyPackage: tuple.0 } - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: addKeyPackageReturn) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for addKeyPackageReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for addKeyPackageCall { - type Parameters<'a> = (KeyPackage,); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = addKeyPackageReturn; - type ReturnTuple<'a> = (); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "addKeyPackage((bytes[]))"; - const SELECTOR: [u8; 4] = [254u8, 82u8, 247u8, 150u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - (::tokenize(&self.keyPackage),) - } - #[inline] - fn abi_decode_returns( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data, validate) - .map(Into::into) - } - } - }; - /**Function with signature `addUser(address,bytes,(bytes[]))` and selector `0xc8d178b2`. -```solidity -function addUser(address user, bytes memory signaturePubKey, KeyPackage memory keyPackage) external; -```*/ - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct addUserCall { - pub user: alloy::sol_types::private::Address, - pub signaturePubKey: alloy::sol_types::private::Bytes, - pub keyPackage: ::RustType, - } - ///Container type for the return parameters of the [`addUser(address,bytes,(bytes[]))`](addUserCall) function. - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct addUserReturn {} - #[allow(non_camel_case_types, non_snake_case, clippy::style)] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Address, - alloy::sol_types::sol_data::Bytes, - KeyPackage, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Address, - alloy::sol_types::private::Bytes, - ::RustType, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: addUserCall) -> Self { - (value.user, value.signaturePubKey, value.keyPackage) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for addUserCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - user: tuple.0, - signaturePubKey: tuple.1, - keyPackage: tuple.2, - } - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: addUserReturn) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for addUserReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for addUserCall { - type Parameters<'a> = ( - alloy::sol_types::sol_data::Address, - alloy::sol_types::sol_data::Bytes, - KeyPackage, - ); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = addUserReturn; - type ReturnTuple<'a> = (); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "addUser(address,bytes,(bytes[]))"; - const SELECTOR: [u8; 4] = [200u8, 209u8, 120u8, 178u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - ::tokenize( - &self.user, - ), - ::tokenize( - &self.signaturePubKey, - ), - ::tokenize(&self.keyPackage), - ) + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for UserAdded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&UserAdded> for alloy_sol_types::private::LogData { #[inline] - fn abi_decode_returns( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data, validate) - .map(Into::into) + fn from(this: &UserAdded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) } } }; - /**Function with signature `getAllKeyPackagesForUser(address)` and selector `0x51ca7a9f`. + /**Constructor`. ```solidity -function getAllKeyPackagesForUser(address user) external view returns (KeyPackage[] memory); +constructor(address initialOwner); ```*/ #[allow(non_camel_case_types, non_snake_case)] #[derive(Clone)] - pub struct getAllKeyPackagesForUserCall { - pub user: alloy::sol_types::private::Address, - } - ///Container type for the return parameters of the [`getAllKeyPackagesForUser(address)`](getAllKeyPackagesForUserCall) function. - #[allow(non_camel_case_types, non_snake_case)] - #[derive(Clone)] - pub struct getAllKeyPackagesForUserReturn { - pub _0: alloy::sol_types::private::Vec< - ::RustType, - >, + pub struct constructorCall { + pub initialOwner: alloy::sol_types::private::Address, } - #[allow(non_camel_case_types, non_snake_case, clippy::style)] const _: () = { use alloy::sol_types as alloy_sol_types; { @@ -1850,73 +936,25 @@ function getAllKeyPackagesForUser(address user) external view returns (KeyPackag } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getAllKeyPackagesForUserCall) -> Self { - (value.user,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for getAllKeyPackagesForUserCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { user: tuple.0 } - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Vec< - ::RustType, - >, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getAllKeyPackagesForUserReturn) -> Self { - (value._0,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: constructorCall) -> Self { + (value.initialOwner,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for getAllKeyPackagesForUserReturn { + impl ::core::convert::From> for constructorCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self { initialOwner: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for getAllKeyPackagesForUserCall { + impl alloy_sol_types::SolConstructor for constructorCall { type Parameters<'a> = (alloy::sol_types::sol_data::Address,); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = getAllKeyPackagesForUserReturn; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Array,); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getAllKeyPackagesForUser(address)"; - const SELECTOR: [u8; 4] = [81u8, 202u8, 122u8, 159u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -1927,45 +965,40 @@ function getAllKeyPackagesForUser(address user) external view returns (KeyPackag fn tokenize(&self) -> Self::Token<'_> { ( ::tokenize( - &self.user, + &self.initialOwner, ), ) } - #[inline] - fn abi_decode_returns( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data, validate) - .map(Into::into) - } } }; - /**Function with signature `getAvailableKeyPackage(address)` and selector `0x33cf520c`. + /**Function with signature `addUser(address,bytes)` and selector `0xe3eccd10`. ```solidity -function getAvailableKeyPackage(address user) external view returns (KeyPackage memory); +function addUser(address user, bytes memory signaturePubKey) external; ```*/ #[allow(non_camel_case_types, non_snake_case)] #[derive(Clone)] - pub struct getAvailableKeyPackageCall { + pub struct addUserCall { pub user: alloy::sol_types::private::Address, + pub signaturePubKey: alloy::sol_types::private::Bytes, } - ///Container type for the return parameters of the [`getAvailableKeyPackage(address)`](getAvailableKeyPackageCall) function. + ///Container type for the return parameters of the [`addUser(address,bytes)`](addUserCall) function. #[allow(non_camel_case_types, non_snake_case)] #[derive(Clone)] - pub struct getAvailableKeyPackageReturn { - pub _0: ::RustType, - } + pub struct addUserReturn {} #[allow(non_camel_case_types, non_snake_case, clippy::style)] const _: () = { use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -1979,28 +1012,27 @@ function getAvailableKeyPackage(address user) external view returns (KeyPackage } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getAvailableKeyPackageCall) -> Self { - (value.user,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: addUserCall) -> Self { + (value.user, value.signaturePubKey) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for getAvailableKeyPackageCall { + impl ::core::convert::From> for addUserCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { user: tuple.0 } + Self { + user: tuple.0, + signaturePubKey: tuple.1, + } } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (KeyPackage,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - ::RustType, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2014,34 +1046,35 @@ function getAvailableKeyPackage(address user) external view returns (KeyPackage } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getAvailableKeyPackageReturn) -> Self { - (value._0,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: addUserReturn) -> Self { + () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for getAvailableKeyPackageReturn { + impl ::core::convert::From> for addUserReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self {} } } } #[automatically_derived] - impl alloy_sol_types::SolCall for getAvailableKeyPackageCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + impl alloy_sol_types::SolCall for addUserCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = getAvailableKeyPackageReturn; - type ReturnTuple<'a> = (KeyPackage,); + type Return = addUserReturn; + type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getAvailableKeyPackage(address)"; - const SELECTOR: [u8; 4] = [51u8, 207u8, 82u8, 12u8]; + const SIGNATURE: &'static str = "addUser(address,bytes)"; + const SELECTOR: [u8; 4] = [227u8, 236u8, 205u8, 16u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2054,6 +1087,9 @@ function getAvailableKeyPackage(address user) external view returns (KeyPackage ::tokenize( &self.user, ), + ::tokenize( + &self.signaturePubKey, + ), ) } #[inline] @@ -2659,10 +1695,7 @@ function userExists(address user) external view returns (bool); }; ///Container for all the [`ScKeystore`](self) function calls. pub enum ScKeystoreCalls { - addKeyPackage(addKeyPackageCall), addUser(addUserCall), - getAllKeyPackagesForUser(getAllKeyPackagesForUserCall), - getAvailableKeyPackage(getAvailableKeyPackageCall), getUser(getUserCall), owner(ownerCall), renounceOwnership(renounceOwnershipCall), @@ -2679,34 +1712,22 @@ function userExists(address user) external view returns (bool); /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 4usize]] = &[ [14u8, 102u8, 110u8, 73u8], - [51u8, 207u8, 82u8, 12u8], - [81u8, 202u8, 122u8, 159u8], [111u8, 119u8, 146u8, 107u8], [113u8, 80u8, 24u8, 166u8], [141u8, 165u8, 203u8, 91u8], - [200u8, 209u8, 120u8, 178u8], + [227u8, 236u8, 205u8, 16u8], [242u8, 253u8, 227u8, 139u8], - [254u8, 82u8, 247u8, 150u8], ]; } #[automatically_derived] impl alloy_sol_types::SolInterface for ScKeystoreCalls { const NAME: &'static str = "ScKeystoreCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 9usize; + const COUNT: usize = 6usize; #[inline] fn selector(&self) -> [u8; 4] { match self { - Self::addKeyPackage(_) => { - ::SELECTOR - } Self::addUser(_) => ::SELECTOR, - Self::getAllKeyPackagesForUser(_) => { - ::SELECTOR - } - Self::getAvailableKeyPackage(_) => { - ::SELECTOR - } Self::getUser(_) => ::SELECTOR, Self::owner(_) => ::SELECTOR, Self::renounceOwnership(_) => { @@ -2752,32 +1773,6 @@ function userExists(address user) external view returns (bool); } userExists }, - { - fn getAvailableKeyPackage( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - validate, - ) - .map(ScKeystoreCalls::getAvailableKeyPackage) - } - getAvailableKeyPackage - }, - { - fn getAllKeyPackagesForUser( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - validate, - ) - .map(ScKeystoreCalls::getAllKeyPackagesForUser) - } - getAllKeyPackagesForUser - }, { fn getUser( data: &[u8], @@ -2843,19 +1838,6 @@ function userExists(address user) external view returns (bool); } transferOwnership }, - { - fn addKeyPackage( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - validate, - ) - .map(ScKeystoreCalls::addKeyPackage) - } - addKeyPackage - }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -2870,24 +1852,9 @@ function userExists(address user) external view returns (bool); #[inline] fn abi_encoded_size(&self) -> usize { match self { - Self::addKeyPackage(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::addUser(inner) => { ::abi_encoded_size(inner) } - Self::getAllKeyPackagesForUser(inner) => { - ::abi_encoded_size( - inner, - ) - } - Self::getAvailableKeyPackage(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::getUser(inner) => { ::abi_encoded_size(inner) } @@ -2912,27 +1879,9 @@ function userExists(address user) external view returns (bool); #[inline] fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { match self { - Self::addKeyPackage(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::addUser(inner) => { ::abi_encode_raw(inner, out) } - Self::getAllKeyPackagesForUser(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } - Self::getAvailableKeyPackage(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::getUser(inner) => { ::abi_encode_raw(inner, out) } @@ -2962,12 +1911,10 @@ function userExists(address user) external view returns (bool); } ///Container for all the [`ScKeystore`](self) custom errors. pub enum ScKeystoreErrors { - MalformedKeyPackage(MalformedKeyPackage), MalformedUserInfo(MalformedUserInfo), OwnableInvalidOwner(OwnableInvalidOwner), OwnableUnauthorizedAccount(OwnableUnauthorizedAccount), UserAlreadyExists(UserAlreadyExists), - UserDoesNotExist(UserDoesNotExist), } #[automatically_derived] impl ScKeystoreErrors { @@ -2980,8 +1927,6 @@ function userExists(address user) external view returns (bool); pub const SELECTORS: &'static [[u8; 4usize]] = &[ [17u8, 140u8, 218u8, 167u8], [30u8, 79u8, 189u8, 247u8], - [43u8, 195u8, 43u8, 22u8], - [144u8, 123u8, 54u8, 31u8], [195u8, 68u8, 57u8, 126u8], [249u8, 105u8, 221u8, 89u8], ]; @@ -2990,13 +1935,10 @@ function userExists(address user) external view returns (bool); impl alloy_sol_types::SolInterface for ScKeystoreErrors { const NAME: &'static str = "ScKeystoreErrors"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 6usize; + const COUNT: usize = 4usize; #[inline] fn selector(&self) -> [u8; 4] { match self { - Self::MalformedKeyPackage(_) => { - ::SELECTOR - } Self::MalformedUserInfo(_) => { ::SELECTOR } @@ -3009,9 +1951,6 @@ function userExists(address user) external view returns (bool); Self::UserAlreadyExists(_) => { ::SELECTOR } - Self::UserDoesNotExist(_) => { - ::SELECTOR - } } } #[inline] @@ -3059,32 +1998,6 @@ function userExists(address user) external view returns (bool); } OwnableInvalidOwner }, - { - fn MalformedKeyPackage( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - validate, - ) - .map(ScKeystoreErrors::MalformedKeyPackage) - } - MalformedKeyPackage - }, - { - fn UserDoesNotExist( - data: &[u8], - validate: bool, - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - validate, - ) - .map(ScKeystoreErrors::UserDoesNotExist) - } - UserDoesNotExist - }, { fn UserAlreadyExists( data: &[u8], @@ -3125,11 +2038,6 @@ function userExists(address user) external view returns (bool); #[inline] fn abi_encoded_size(&self) -> usize { match self { - Self::MalformedKeyPackage(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::MalformedUserInfo(inner) => { ::abi_encoded_size( inner, @@ -3150,22 +2058,11 @@ function userExists(address user) external view returns (bool); inner, ) } - Self::UserDoesNotExist(inner) => { - ::abi_encoded_size( - inner, - ) - } } } #[inline] fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { match self { - Self::MalformedKeyPackage(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::MalformedUserInfo(inner) => { ::abi_encode_raw( inner, @@ -3190,12 +2087,6 @@ function userExists(address user) external view returns (bool); out, ) } - Self::UserDoesNotExist(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } } } } @@ -3203,7 +2094,6 @@ function userExists(address user) external view returns (bool); pub enum ScKeystoreEvents { OwnershipTransferred(OwnershipTransferred), UserAdded(UserAdded), - UserKeyPackageAdded(UserKeyPackageAdded), } #[automatically_derived] impl ScKeystoreEvents { @@ -3282,46 +2172,12 @@ function userExists(address user) external view returns (bool); 87u8, 224u8, ], - [ - 213u8, - 148u8, - 225u8, - 160u8, - 147u8, - 84u8, - 175u8, - 9u8, - 62u8, - 155u8, - 186u8, - 63u8, - 83u8, - 84u8, - 86u8, - 231u8, - 229u8, - 176u8, - 52u8, - 89u8, - 144u8, - 227u8, - 124u8, - 55u8, - 233u8, - 196u8, - 27u8, - 181u8, - 123u8, - 153u8, - 18u8, - 202u8, - ], ]; } #[automatically_derived] impl alloy_sol_types::SolEventInterface for ScKeystoreEvents { const NAME: &'static str = "ScKeystoreEvents"; - const COUNT: usize = 3usize; + const COUNT: usize = 2usize; fn decode_raw_log( topics: &[alloy_sol_types::Word], data: &[u8], @@ -3346,16 +2202,6 @@ function userExists(address user) external view returns (bool); ) .map(Self::UserAdded) } - Some( - ::SIGNATURE_HASH, - ) => { - ::decode_raw_log( - topics, - data, - validate, - ) - .map(Self::UserKeyPackageAdded) - } _ => { alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { name: ::NAME, @@ -3380,9 +2226,6 @@ function userExists(address user) external view returns (bool); Self::UserAdded(inner) => { alloy_sol_types::private::IntoLogData::to_log_data(inner) } - Self::UserKeyPackageAdded(inner) => { - alloy_sol_types::private::IntoLogData::to_log_data(inner) - } } } fn into_log_data(self) -> alloy_sol_types::private::LogData { @@ -3393,9 +2236,6 @@ function userExists(address user) external view returns (bool); Self::UserAdded(inner) => { alloy_sol_types::private::IntoLogData::into_log_data(inner) } - Self::UserKeyPackageAdded(inner) => { - alloy_sol_types::private::IntoLogData::into_log_data(inner) - } } } } @@ -3578,46 +2418,19 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder { alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) } - ///Creates a new call builder for the [`addKeyPackage`] function. - pub fn addKeyPackage( - &self, - keyPackage: ::RustType, - ) -> alloy_contract::SolCallBuilder { - self.call_builder(&addKeyPackageCall { keyPackage }) - } ///Creates a new call builder for the [`addUser`] function. pub fn addUser( &self, user: alloy::sol_types::private::Address, signaturePubKey: alloy::sol_types::private::Bytes, - keyPackage: ::RustType, ) -> alloy_contract::SolCallBuilder { self.call_builder( &addUserCall { user, signaturePubKey, - keyPackage, - }, - ) - } - ///Creates a new call builder for the [`getAllKeyPackagesForUser`] function. - pub fn getAllKeyPackagesForUser( - &self, - user: alloy::sol_types::private::Address, - ) -> alloy_contract::SolCallBuilder { - self.call_builder( - &getAllKeyPackagesForUserCall { - user, }, ) } - ///Creates a new call builder for the [`getAvailableKeyPackage`] function. - pub fn getAvailableKeyPackage( - &self, - user: alloy::sol_types::private::Address, - ) -> alloy_contract::SolCallBuilder { - self.call_builder(&getAvailableKeyPackageCall { user }) - } ///Creates a new call builder for the [`getUser`] function. pub fn getUser( &self, @@ -3676,11 +2489,5 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ pub fn UserAdded_filter(&self) -> alloy_contract::Event { self.event_filter::() } - ///Creates a new event filter for the [`UserKeyPackageAdded`] event. - pub fn UserKeyPackageAdded_filter( - &self, - ) -> alloy_contract::Event { - self.event_filter::() - } } }