Skip to main content

cartesi_rollups_contracts/
application_factory.rs

1/**
2
3Generated by the following Solidity interface...
4```solidity
5interface ApplicationFactory {
6    event ApplicationCreated(address indexed outputsMerkleRootValidator, address appOwner, bytes32 templateHash, bytes dataAvailability, address appContract);
7
8    function calculateApplicationAddress(address outputsMerkleRootValidator, address appOwner, bytes32 templateHash, bytes memory dataAvailability, bytes32 salt) external view returns (address);
9    function newApplication(address outputsMerkleRootValidator, address appOwner, bytes32 templateHash, bytes memory dataAvailability, bytes32 salt) external returns (address);
10    function newApplication(address outputsMerkleRootValidator, address appOwner, bytes32 templateHash, bytes memory dataAvailability) external returns (address);
11}
12```
13
14...which was generated by the following JSON ABI:
15```json
16[
17  {
18    "type": "function",
19    "name": "calculateApplicationAddress",
20    "inputs": [
21      {
22        "name": "outputsMerkleRootValidator",
23        "type": "address",
24        "internalType": "contract IOutputsMerkleRootValidator"
25      },
26      {
27        "name": "appOwner",
28        "type": "address",
29        "internalType": "address"
30      },
31      {
32        "name": "templateHash",
33        "type": "bytes32",
34        "internalType": "bytes32"
35      },
36      {
37        "name": "dataAvailability",
38        "type": "bytes",
39        "internalType": "bytes"
40      },
41      {
42        "name": "salt",
43        "type": "bytes32",
44        "internalType": "bytes32"
45      }
46    ],
47    "outputs": [
48      {
49        "name": "",
50        "type": "address",
51        "internalType": "address"
52      }
53    ],
54    "stateMutability": "view"
55  },
56  {
57    "type": "function",
58    "name": "newApplication",
59    "inputs": [
60      {
61        "name": "outputsMerkleRootValidator",
62        "type": "address",
63        "internalType": "contract IOutputsMerkleRootValidator"
64      },
65      {
66        "name": "appOwner",
67        "type": "address",
68        "internalType": "address"
69      },
70      {
71        "name": "templateHash",
72        "type": "bytes32",
73        "internalType": "bytes32"
74      },
75      {
76        "name": "dataAvailability",
77        "type": "bytes",
78        "internalType": "bytes"
79      },
80      {
81        "name": "salt",
82        "type": "bytes32",
83        "internalType": "bytes32"
84      }
85    ],
86    "outputs": [
87      {
88        "name": "",
89        "type": "address",
90        "internalType": "contract IApplication"
91      }
92    ],
93    "stateMutability": "nonpayable"
94  },
95  {
96    "type": "function",
97    "name": "newApplication",
98    "inputs": [
99      {
100        "name": "outputsMerkleRootValidator",
101        "type": "address",
102        "internalType": "contract IOutputsMerkleRootValidator"
103      },
104      {
105        "name": "appOwner",
106        "type": "address",
107        "internalType": "address"
108      },
109      {
110        "name": "templateHash",
111        "type": "bytes32",
112        "internalType": "bytes32"
113      },
114      {
115        "name": "dataAvailability",
116        "type": "bytes",
117        "internalType": "bytes"
118      }
119    ],
120    "outputs": [
121      {
122        "name": "",
123        "type": "address",
124        "internalType": "contract IApplication"
125      }
126    ],
127    "stateMutability": "nonpayable"
128  },
129  {
130    "type": "event",
131    "name": "ApplicationCreated",
132    "inputs": [
133      {
134        "name": "outputsMerkleRootValidator",
135        "type": "address",
136        "indexed": true,
137        "internalType": "contract IOutputsMerkleRootValidator"
138      },
139      {
140        "name": "appOwner",
141        "type": "address",
142        "indexed": false,
143        "internalType": "address"
144      },
145      {
146        "name": "templateHash",
147        "type": "bytes32",
148        "indexed": false,
149        "internalType": "bytes32"
150      },
151      {
152        "name": "dataAvailability",
153        "type": "bytes",
154        "indexed": false,
155        "internalType": "bytes"
156      },
157      {
158        "name": "appContract",
159        "type": "address",
160        "indexed": false,
161        "internalType": "contract IApplication"
162      }
163    ],
164    "anonymous": false
165  }
166]
167```*/
168#[allow(
169    non_camel_case_types,
170    non_snake_case,
171    clippy::pub_underscore_fields,
172    clippy::style,
173    clippy::empty_structs_with_brackets
174)]
175pub mod ApplicationFactory {
176    use super::*;
177    use alloy::sol_types as alloy_sol_types;
178    /// The creation / init bytecode of the contract.
179    ///
180    /// ```text
181    ///0x608080604052346015576115d3908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c9081632cc3ef7c1461020b575080634269667b1461014957638d02370d1461003d575f80fd5b34610145576080366003190112610145576004356001600160a01b0381169081810361014557602435916001600160a01b0383168303610145576044359160643567ffffffffffffffff81116101455761009b9036906004016102a0565b939091604051906111bd8083019083821067ffffffffffffffff8311176101315785858a86956100d1958c956103e1893961034e565b03905ff09485156101265761011b7fd291ffe9436f2c57d5ce3e87ed33576f801053946651a2fb4fec5a406cf68cc59360209760018060a01b031696879160405195869586610382565b0390a2604051908152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b34610145576020600b6101dc826101ab610162366102ce565b979491969295909361019d6111bd95604051996101818789018c6103be565b878b52868b01976103e18939604051998a94888601978861034e565b03601f1981018752866103be565b60405194859383850197518091895e840190838201905f8252519283915e01015f815203601f1981018352826103be565b51902090604051916040830152838201523081520160ff8153605590206040516001600160a01b039091168152f35b3461014557610219366102ce565b9094959291926111bd80820182811067ffffffffffffffff82111761013157878686898c61024d9588976103e1893961034e565b03905ff59485156101265761011b7fd291ffe9436f2c57d5ce3e87ed33576f801053946651a2fb4fec5a406cf68cc59360209760018060a01b031696879160405195869560018060a01b03169886610382565b9181601f840112156101455782359167ffffffffffffffff8311610145576020838186019501011161014557565b9060a0600319830112610145576004356001600160a01b038116810361014557916024356001600160a01b03811681036101455791604435916064359067ffffffffffffffff821161014557610326916004016102a0565b909160843590565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b03918216815291166020820152604081019190915260806060820181905261037f9391019161032e565b90565b936103ae926060949297969760018060a01b03168652602086015260806040860152608085019161032e565b6001600160a01b03909416910152565b90601f8019910116810190811067ffffffffffffffff8211176101315760405256fe60c0604052346102b8576111bd80380380610019816102bc565b9283398101906080818303126102b85780516001600160a01b03811691908290036102b85760208101516001600160a01b038116908190036102b8576040820151606083015190926001600160401b0382116102b8570184601f820112156102b8578051906001600160401b0382116102915761009f601f8301601f19166020016102bc565b95828752602083830101116102b857815f9260208093018389015e8601015280156102a5575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600180554360805260a052600380546001600160a01b03191691909117905580516001600160401b03811161029157600454600181811c91168015610287575b602082101461027357601f8111610210575b50602091601f82116001146101b0579181925f926101a5575b50508160011b915f199060031b1c1916176004555b604051610edb90816102e2823960805181610687015260a051816105670152f35b015190505f8061016f565b601f1982169260045f52805f20915f5b8581106101f8575083600195106101e0575b505050811b01600455610184565b01515f1960f88460031b161c191690555f80806101d2565b919260206001819286850151815501940192016101c0565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c81019160208410610269575b601f0160051c01905b81811061025e5750610156565b5f8155600101610251565b9091508190610248565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610144565b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176102915760405256fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301ffc9a71461012957806308eb89ab14610124578063150b7a021461011f57806333137b761461011a57806361b12c6614610115578063715018a61461011057806371891db01461010b5780638da5cb5b14610106578063a94dfc5a14610101578063b3a1acd8146100fc578063bc197c81146100f7578063bf8abff8146100f2578063e64fab4d146100ed578063e88d39c0146100e8578063f02478de146100e3578063f23a6e61146100de5763f2fde38b0361000e576109c6565b61096d565b61087e565b61083d565b610820565b6107af565b610711565b610670565b610648565b610621565b6105e1565b61058a565b610550565b61034b565b610286565b610191565b3461017f57602036600319011261017f5760043563ffffffff60e01b811680910361017f57602090630271189760e51b811490811561016e575b506040519015158152f35b6301ffc9a760e01b1490505f610163565b5f80fd5b9081604091031261017f5790565b3461017f57604036600319011261017f576024356001600160401b03811161017f576101c4610018913690600401610183565b600435610a4f565b6001600160a01b0381160361017f57565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761021257604052565b6101dd565b6001600160401b03811161021257601f01601f191660200190565b92919261023e82610217565b9161024c60405193846101f1565b82948184528183011161017f578281602093845f960137010152565b9080601f8301121561017f5781602061028393359101610232565b90565b3461017f57608036600319011261017f576102a26004356101cc565b6102ad6024356101cc565b6064356001600160401b03811161017f576102cc903690600401610268565b50604051630a85bd0160e11b8152602090f35b604060031982011261017f57600435916001600160401b03831161017f578160238401121561017f578260040135926001600160401b03841161017f57826024858301011161017f576024019291602435906001600160401b03821161017f5761028391600401610183565b3461017f57610359366102df565b6002600193929354146105415761037f90600260015561037a818585610c0e565b610b26565b600483106105245761039a6103948484610b6b565b90610b96565b6103a5848085610b79565b916001600160e01b03191663237a816f60e01b810361049557506103e96001600160401b03841660ff6001918060081c5f526002602052161b60405f205416151590565b610471579361041c610465927fcad1f361c6e84664e892230291c8e8eb9555683e0a6a5ce8ea7b204ac0ac367696610d4d565b6104466001600160401b0384168060081c5f526002602052600160ff60405f2092161b8154179055565b610459610454600554610bcc565b600555565b60405193849384610bee565b0390a161001860018055565b5050604051637b97a6bb60e01b8152928392610491925060048401610b5a565b0390fd5b6310321e8b60e01b03610504576104cc6001600160401b03841660ff6001918060081c5f526002602052161b60405f205416151590565b61047157936104ff610465927fcad1f361c6e84664e892230291c8e8eb9555683e0a6a5ce8ea7b204ac0ac367696610ce8565b61041c565b5050604051636942600f60e11b8152928392610491925060048401610b5a565b50610491604051928392636942600f60e11b845260048401610b5a565b633ee5aeb560e01b5f5260045ffd5b3461017f575f36600319011261017f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461017f575f36600319011261017f576105a2610dbd565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017f57602036600319011261017f57602061061760043560ff6001918060081c5f526002602052161b60405f205416151590565b6040519015158152f35b3461017f575f36600319011261017f575f546040516001600160a01b039091168152602090f35b3461017f575f36600319011261017f576003546040516001600160a01b039091168152602090f35b3461017f575f36600319011261017f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b9080601f8301121561017f578135916001600160401b038311610212578260051b90604051936106dd60208401866101f1565b845260208085019282010192831161017f57602001905b8282106107015750505090565b81358152602091820191016106f4565b3461017f5760a036600319011261017f5761072d6004356101cc565b6107386024356101cc565b6044356001600160401b03811161017f576107579036906004016106aa565b506064356001600160401b03811161017f576107779036906004016106aa565b506084356001600160401b03811161017f57610797903690600401610268565b5060405163bc197c8160e01b815280602081015b0390f35b3461017f57602036600319011261017f577f6ad3188ba8f430fba0656cb0a7e839ab2020d5586ba11a1477d18f7092f8bece6004356107ed816101cc565b6107f5610dbd565b600380546001600160a01b0319166001600160a01b03929092169182179055604051908152602090a1005b3461017f575f36600319011261017f576020600554604051908152f35b3461017f5761001861084e366102df565b91610c0e565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b3461017f575f36600319011261017f576040515f6004548060011c9060018116908115610963575b60208310821461094f57828552602085019190811561093657506001146108e4575b6107ab846108d8818603826101f1565b60405191829182610854565b60045f9081529250907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b818410610922575050016108d8826108c8565b80548484015260209093019260010161090f565b60ff191682525090151560051b0190506108d8826108c8565b634e487b7160e01b5f52602260045260245ffd5b91607f16916108a6565b3461017f5760a036600319011261017f576109896004356101cc565b6109946024356101cc565b6084356001600160401b03811161017f576109b3903690600401610268565b5060405163f23a6e6160e01b8152602090f35b3461017f57602036600319011261017f576004356109e3816101cc565b6109eb610dbd565b6001600160a01b03168015610a3c575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b916020820191603f610a618483610c2c565b905003610b17576001600160401b03610a80610a889483969496610c2c565b949092610b26565b16935f925b84841015610ade57610ac56001918560051b85013590838916155f14610ace5790610abe915f5260205260405f2090565b9660011c90565b93019294610a8d565b610abe915f5260205260405f2090565b9350939050610aee915015610de3565b610afe610afa82610c61565b1590565b610b055750565b6344a192ff60e01b5f5260045260245ffd5b635d2c5e9b60e11b5f5260045ffd5b356001600160401b038116810361017f5790565b908060209392818452848401375f828201840152601f01601f1916010190565b916020610283938181520191610b3a565b9060041161017f5790600490565b909291928360041161017f57831161017f57600401916003190190565b356001600160e01b0319811692919060048210610bb1575050565b6001600160e01b031960049290920360031b82901b16169150565b5f198114610bda5760010190565b634e487b7160e01b5f52601160045260245ffd5b6040906001600160401b0361028395931681528160208201520191610b3a565b610c1e90610c2a93923691610232565b60208151910120610a4f565b565b903590601e198136030182121561017f57018035906001600160401b03821161017f57602001918160051b3603831361017f57565b600354604051633973219960e21b81523060048201526024810192909252602090829060449082906001600160a01b03165afa908115610cdd575f91610ca5575090565b90506020813d602011610cd5575b81610cc0602093836101f1565b8101031261017f5751801515810361017f5790565b3d9150610cb3565b6040513d5f823e3d90fd5b9081019060408183031261017f578035610d01816101cc565b6020820135916001600160401b03831161017f575f938493610d239201610268565b8051916020909101906001600160a01b03165af4610d3f610e2e565b9015610d485750565b610e94565b90810160608282031261017f578135610d65816101cc565b6020830135926040810135906001600160401b03821161017f57610d9e938592610d8f9201610268565b916001600160a01b0316610e5d565b919015610da9575050565b62fae2d560e21b5f5260045260245260445ffd5b5f546001600160a01b03163303610dd057565b63118cdaa760e01b5f523360045260245ffd5b15610dea57565b606460405162461bcd60e51b815260206004820152602060248201527f4c69624d65726b6c6533323a20696e646578206f7574206f6620626f756e64736044820152fd5b3d15610e58573d90610e3f82610217565b91610e4d60405193846101f1565b82523d5f602084013e565b606090565b909291924793848211610e8c575f928392602083519301915af1610e7f610e2e565b9015610d48575060019190565b5050505f9190565b80519081610ea0575f80fd5b602001fdfea2646970667358221220792581cdb4c619bae279f0c92e047aad61eb4cf6dc6fa58277baeef42718d57d64736f6c634300081e0033a2646970667358221220dbeec0f601cd75193104bedbc40c7ae49694cd51be7106d801f08f000e5730ee64736f6c634300081e0033
182    /// ```
183    #[rustfmt::skip]
184    #[allow(clippy::all)]
185    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
186        b"`\x80\x80`@R4`\x15Wa\x15\xD3\x90\x81a\0\x1A\x829\xF3[_\x80\xFD\xFE`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c,\xC3\xEF|\x14a\x02\x0BWP\x80cBif{\x14a\x01IWc\x8D\x027\r\x14a\0=W_\x80\xFD[4a\x01EW`\x806`\x03\x19\x01\x12a\x01EW`\x045`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x81\x03a\x01EW`$5\x91`\x01`\x01`\xA0\x1B\x03\x83\x16\x83\x03a\x01EW`D5\x91`d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01EWa\0\x9B\x906\x90`\x04\x01a\x02\xA0V[\x93\x90\x91`@Q\x90a\x11\xBD\x80\x83\x01\x90\x83\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x011W\x85\x85\x8A\x86\x95a\0\xD1\x95\x8C\x95a\x03\xE1\x899a\x03NV[\x03\x90_\xF0\x94\x85\x15a\x01&Wa\x01\x1B\x7F\xD2\x91\xFF\xE9Co,W\xD5\xCE>\x87\xED3Wo\x80\x10S\x94fQ\xA2\xFBO\xECZ@l\xF6\x8C\xC5\x93` \x97`\x01\x80`\xA0\x1B\x03\x16\x96\x87\x91`@Q\x95\x86\x95\x86a\x03\x82V[\x03\x90\xA2`@Q\x90\x81R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[_\x80\xFD[4a\x01EW` `\x0Ba\x01\xDC\x82a\x01\xABa\x01b6a\x02\xCEV[\x97\x94\x91\x96\x92\x95\x90\x93a\x01\x9Da\x11\xBD\x95`@Q\x99a\x01\x81\x87\x89\x01\x8Ca\x03\xBEV[\x87\x8BR\x86\x8B\x01\x97a\x03\xE1\x899`@Q\x99\x8A\x94\x88\x86\x01\x97\x88a\x03NV[\x03`\x1F\x19\x81\x01\x87R\x86a\x03\xBEV[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03`\x1F\x19\x81\x01\x83R\x82a\x03\xBEV[Q\x90 \x90`@Q\x91`@\x83\x01R\x83\x82\x01R0\x81R\x01`\xFF\x81S`U\x90 `@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R\xF3[4a\x01EWa\x02\x196a\x02\xCEV[\x90\x94\x95\x92\x91\x92a\x11\xBD\x80\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x011W\x87\x86\x86\x89\x8Ca\x02M\x95\x88\x97a\x03\xE1\x899a\x03NV[\x03\x90_\xF5\x94\x85\x15a\x01&Wa\x01\x1B\x7F\xD2\x91\xFF\xE9Co,W\xD5\xCE>\x87\xED3Wo\x80\x10S\x94fQ\xA2\xFBO\xECZ@l\xF6\x8C\xC5\x93` \x97`\x01\x80`\xA0\x1B\x03\x16\x96\x87\x91`@Q\x95\x86\x95`\x01\x80`\xA0\x1B\x03\x16\x98\x86a\x03\x82V[\x91\x81`\x1F\x84\x01\x12\x15a\x01EW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01EW` \x83\x81\x86\x01\x95\x01\x01\x11a\x01EWV[\x90`\xA0`\x03\x19\x83\x01\x12a\x01EW`\x045`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x03a\x01EW\x91`$5`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x03a\x01EW\x91`D5\x91`d5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01EWa\x03&\x91`\x04\x01a\x02\xA0V[\x90\x91`\x845\x90V[\x90\x80` \x93\x92\x81\x84R\x84\x84\x017_\x82\x82\x01\x84\x01R`\x1F\x01`\x1F\x19\x16\x01\x01\x90V[`\x01`\x01`\xA0\x1B\x03\x91\x82\x16\x81R\x91\x16` \x82\x01R`@\x81\x01\x91\x90\x91R`\x80``\x82\x01\x81\x90Ra\x03\x7F\x93\x91\x01\x91a\x03.V[\x90V[\x93a\x03\xAE\x92``\x94\x92\x97\x96\x97`\x01\x80`\xA0\x1B\x03\x16\x86R` \x86\x01R`\x80`@\x86\x01R`\x80\x85\x01\x91a\x03.V[`\x01`\x01`\xA0\x1B\x03\x90\x94\x16\x91\x01RV[\x90`\x1F\x80\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x011W`@RV\xFE`\xC0`@R4a\x02\xB8Wa\x11\xBD\x808\x03\x80a\0\x19\x81a\x02\xBCV[\x92\x839\x81\x01\x90`\x80\x81\x83\x03\x12a\x02\xB8W\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x91\x90\x82\x90\x03a\x02\xB8W` \x81\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x02\xB8W`@\x82\x01Q``\x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x02\xB8W\x01\x84`\x1F\x82\x01\x12\x15a\x02\xB8W\x80Q\x90`\x01`\x01`@\x1B\x03\x82\x11a\x02\x91Wa\0\x9F`\x1F\x83\x01`\x1F\x19\x16` \x01a\x02\xBCV[\x95\x82\x87R` \x83\x83\x01\x01\x11a\x02\xB8W\x81_\x92` \x80\x93\x01\x83\x89\x01^\x86\x01\x01R\x80\x15a\x02\xA5W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`\x01`\x01`\xA0\x1B\x03\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3`\x01\x80UC`\x80R`\xA0R`\x03\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16\x91\x90\x91\x17\x90U\x80Q`\x01`\x01`@\x1B\x03\x81\x11a\x02\x91W`\x04T`\x01\x81\x81\x1C\x91\x16\x80\x15a\x02\x87W[` \x82\x10\x14a\x02sW`\x1F\x81\x11a\x02\x10W[P` \x91`\x1F\x82\x11`\x01\x14a\x01\xB0W\x91\x81\x92_\x92a\x01\xA5W[PP\x81`\x01\x1B\x91_\x19\x90`\x03\x1B\x1C\x19\x16\x17`\x04U[`@Qa\x0E\xDB\x90\x81a\x02\xE2\x829`\x80Q\x81a\x06\x87\x01R`\xA0Q\x81a\x05g\x01R\xF3[\x01Q\x90P_\x80a\x01oV[`\x1F\x19\x82\x16\x92`\x04_R\x80_ \x91_[\x85\x81\x10a\x01\xF8WP\x83`\x01\x95\x10a\x01\xE0W[PPP\x81\x1B\x01`\x04Ua\x01\x84V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U_\x80\x80a\x01\xD2V[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x01\xC0V[`\x04_R\x7F\x8A5\xAC\xFB\xC1_\xF8\x1A9\xAE}4O\xD7\t\xF2\x8E\x86\0\xB4\xAA\x8Ce\xC6\xB6K\xFE\x7F\xE3k\xD1\x9B`\x1F\x83\x01`\x05\x1C\x81\x01\x91` \x84\x10a\x02iW[`\x1F\x01`\x05\x1C\x01\x90[\x81\x81\x10a\x02^WPa\x01VV[_\x81U`\x01\x01a\x02QV[\x90\x91P\x81\x90a\x02HV[cNH{q`\xE0\x1B_R`\"`\x04R`$_\xFD[\x90`\x7F\x16\x90a\x01DV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[`@Q\x91\x90`\x1F\x01`\x1F\x19\x16\x82\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x02\x91W`@RV\xFE`\x80`@R`\x046\x10\x15a\0\x1AW[6\x15a\0\x18W_\x80\xFD[\0[_5`\xE0\x1C\x80c\x01\xFF\xC9\xA7\x14a\x01)W\x80c\x08\xEB\x89\xAB\x14a\x01$W\x80c\x15\x0Bz\x02\x14a\x01\x1FW\x80c3\x13{v\x14a\x01\x1AW\x80ca\xB1,f\x14a\x01\x15W\x80cqP\x18\xA6\x14a\x01\x10W\x80cq\x89\x1D\xB0\x14a\x01\x0BW\x80c\x8D\xA5\xCB[\x14a\x01\x06W\x80c\xA9M\xFCZ\x14a\x01\x01W\x80c\xB3\xA1\xAC\xD8\x14a\0\xFCW\x80c\xBC\x19|\x81\x14a\0\xF7W\x80c\xBF\x8A\xBF\xF8\x14a\0\xF2W\x80c\xE6O\xABM\x14a\0\xEDW\x80c\xE8\x8D9\xC0\x14a\0\xE8W\x80c\xF0$x\xDE\x14a\0\xE3W\x80c\xF2:na\x14a\0\xDEWc\xF2\xFD\xE3\x8B\x03a\0\x0EWa\t\xC6V[a\tmV[a\x08~V[a\x08=V[a\x08 V[a\x07\xAFV[a\x07\x11V[a\x06pV[a\x06HV[a\x06!V[a\x05\xE1V[a\x05\x8AV[a\x05PV[a\x03KV[a\x02\x86V[a\x01\x91V[4a\x01\x7FW` 6`\x03\x19\x01\x12a\x01\x7FW`\x045c\xFF\xFF\xFF\xFF`\xE0\x1B\x81\x16\x80\x91\x03a\x01\x7FW` \x90c\x02q\x18\x97`\xE5\x1B\x81\x14\x90\x81\x15a\x01nW[P`@Q\x90\x15\x15\x81R\xF3[c\x01\xFF\xC9\xA7`\xE0\x1B\x14\x90P_a\x01cV[_\x80\xFD[\x90\x81`@\x91\x03\x12a\x01\x7FW\x90V[4a\x01\x7FW`@6`\x03\x19\x01\x12a\x01\x7FW`$5`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\x01\xC4a\0\x18\x916\x90`\x04\x01a\x01\x83V[`\x045a\nOV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x03a\x01\x7FWV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[\x90`\x1F\x80\x19\x91\x01\x16\x81\x01\x90\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17a\x02\x12W`@RV[a\x01\xDDV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\x12W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92a\x02>\x82a\x02\x17V[\x91a\x02L`@Q\x93\x84a\x01\xF1V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x01\x7FW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x01\x7FW\x81` a\x02\x83\x935\x91\x01a\x022V[\x90V[4a\x01\x7FW`\x806`\x03\x19\x01\x12a\x01\x7FWa\x02\xA2`\x045a\x01\xCCV[a\x02\xAD`$5a\x01\xCCV[`d5`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\x02\xCC\x906\x90`\x04\x01a\x02hV[P`@Qc\n\x85\xBD\x01`\xE1\x1B\x81R` \x90\xF3[`@`\x03\x19\x82\x01\x12a\x01\x7FW`\x045\x91`\x01`\x01`@\x1B\x03\x83\x11a\x01\x7FW\x81`#\x84\x01\x12\x15a\x01\x7FW\x82`\x04\x015\x92`\x01`\x01`@\x1B\x03\x84\x11a\x01\x7FW\x82`$\x85\x83\x01\x01\x11a\x01\x7FW`$\x01\x92\x91`$5\x90`\x01`\x01`@\x1B\x03\x82\x11a\x01\x7FWa\x02\x83\x91`\x04\x01a\x01\x83V[4a\x01\x7FWa\x03Y6a\x02\xDFV[`\x02`\x01\x93\x92\x93T\x14a\x05AWa\x03\x7F\x90`\x02`\x01Ua\x03z\x81\x85\x85a\x0C\x0EV[a\x0B&V[`\x04\x83\x10a\x05$Wa\x03\x9Aa\x03\x94\x84\x84a\x0BkV[\x90a\x0B\x96V[a\x03\xA5\x84\x80\x85a\x0ByV[\x91`\x01`\x01`\xE0\x1B\x03\x19\x16c#z\x81o`\xE0\x1B\x81\x03a\x04\x95WPa\x03\xE9`\x01`\x01`@\x1B\x03\x84\x16`\xFF`\x01\x91\x80`\x08\x1C_R`\x02` R\x16\x1B`@_ T\x16\x15\x15\x90V[a\x04qW\x93a\x04\x1Ca\x04e\x92\x7F\xCA\xD1\xF3a\xC6\xE8Fd\xE8\x92#\x02\x91\xC8\xE8\xEB\x95Uh>\nj\\\xE8\xEA{ J\xC0\xAC6v\x96a\rMV[a\x04F`\x01`\x01`@\x1B\x03\x84\x16\x80`\x08\x1C_R`\x02` R`\x01`\xFF`@_ \x92\x16\x1B\x81T\x17\x90UV[a\x04Ya\x04T`\x05Ta\x0B\xCCV[`\x05UV[`@Q\x93\x84\x93\x84a\x0B\xEEV[\x03\x90\xA1a\0\x18`\x01\x80UV[PP`@Qc{\x97\xA6\xBB`\xE0\x1B\x81R\x92\x83\x92a\x04\x91\x92P`\x04\x84\x01a\x0BZV[\x03\x90\xFD[c\x102\x1E\x8B`\xE0\x1B\x03a\x05\x04Wa\x04\xCC`\x01`\x01`@\x1B\x03\x84\x16`\xFF`\x01\x91\x80`\x08\x1C_R`\x02` R\x16\x1B`@_ T\x16\x15\x15\x90V[a\x04qW\x93a\x04\xFFa\x04e\x92\x7F\xCA\xD1\xF3a\xC6\xE8Fd\xE8\x92#\x02\x91\xC8\xE8\xEB\x95Uh>\nj\\\xE8\xEA{ J\xC0\xAC6v\x96a\x0C\xE8V[a\x04\x1CV[PP`@QciB`\x0F`\xE1\x1B\x81R\x92\x83\x92a\x04\x91\x92P`\x04\x84\x01a\x0BZV[Pa\x04\x91`@Q\x92\x83\x92ciB`\x0F`\xE1\x1B\x84R`\x04\x84\x01a\x0BZV[c>\xE5\xAE\xB5`\xE0\x1B_R`\x04_\xFD[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW` `@Q\x7F\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\0\0\0\0\x81R\xF3[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FWa\x05\xA2a\r\xBDV[_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x82U`\x01`\x01`\xA0\x1B\x03\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01\x7FW` 6`\x03\x19\x01\x12a\x01\x7FW` a\x06\x17`\x045`\xFF`\x01\x91\x80`\x08\x1C_R`\x02` R\x16\x1B`@_ T\x16\x15\x15\x90V[`@Q\x90\x15\x15\x81R\xF3[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW_T`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x90\xF3[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW`\x03T`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x90\xF3[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW` `@Q\x7F\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\0\0\0\0\x81R\xF3[\x90\x80`\x1F\x83\x01\x12\x15a\x01\x7FW\x815\x91`\x01`\x01`@\x1B\x03\x83\x11a\x02\x12W\x82`\x05\x1B\x90`@Q\x93a\x06\xDD` \x84\x01\x86a\x01\xF1V[\x84R` \x80\x85\x01\x92\x82\x01\x01\x92\x83\x11a\x01\x7FW` \x01\x90[\x82\x82\x10a\x07\x01WPPP\x90V[\x815\x81R` \x91\x82\x01\x91\x01a\x06\xF4V[4a\x01\x7FW`\xA06`\x03\x19\x01\x12a\x01\x7FWa\x07-`\x045a\x01\xCCV[a\x078`$5a\x01\xCCV[`D5`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\x07W\x906\x90`\x04\x01a\x06\xAAV[P`d5`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\x07w\x906\x90`\x04\x01a\x06\xAAV[P`\x845`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\x07\x97\x906\x90`\x04\x01a\x02hV[P`@Qc\xBC\x19|\x81`\xE0\x1B\x81R\x80` \x81\x01[\x03\x90\xF3[4a\x01\x7FW` 6`\x03\x19\x01\x12a\x01\x7FW\x7Fj\xD3\x18\x8B\xA8\xF40\xFB\xA0el\xB0\xA7\xE89\xAB  \xD5Xk\xA1\x1A\x14w\xD1\x8Fp\x92\xF8\xBE\xCE`\x045a\x07\xED\x81a\x01\xCCV[a\x07\xF5a\r\xBDV[`\x03\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U`@Q\x90\x81R` \x90\xA1\0[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW` `\x05T`@Q\x90\x81R\xF3[4a\x01\x7FWa\0\x18a\x08N6a\x02\xDFV[\x91a\x0C\x0EV[` `@\x92\x81\x83R\x80Q\x91\x82\x91\x82\x82\x86\x01R\x01\x84\x84\x01^_\x82\x82\x01\x84\x01R`\x1F\x01`\x1F\x19\x16\x01\x01\x90V[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW`@Q_`\x04T\x80`\x01\x1C\x90`\x01\x81\x16\x90\x81\x15a\tcW[` \x83\x10\x82\x14a\tOW\x82\x85R` \x85\x01\x91\x90\x81\x15a\t6WP`\x01\x14a\x08\xE4W[a\x07\xAB\x84a\x08\xD8\x81\x86\x03\x82a\x01\xF1V[`@Q\x91\x82\x91\x82a\x08TV[`\x04_\x90\x81R\x92P\x90\x7F\x8A5\xAC\xFB\xC1_\xF8\x1A9\xAE}4O\xD7\t\xF2\x8E\x86\0\xB4\xAA\x8Ce\xC6\xB6K\xFE\x7F\xE3k\xD1\x9B[\x81\x84\x10a\t\"WPP\x01a\x08\xD8\x82a\x08\xC8V[\x80T\x84\x84\x01R` \x90\x93\x01\x92`\x01\x01a\t\x0FV[`\xFF\x19\x16\x82RP\x90\x15\x15`\x05\x1B\x01\x90Pa\x08\xD8\x82a\x08\xC8V[cNH{q`\xE0\x1B_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x08\xA6V[4a\x01\x7FW`\xA06`\x03\x19\x01\x12a\x01\x7FWa\t\x89`\x045a\x01\xCCV[a\t\x94`$5a\x01\xCCV[`\x845`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\t\xB3\x906\x90`\x04\x01a\x02hV[P`@Qc\xF2:na`\xE0\x1B\x81R` \x90\xF3[4a\x01\x7FW` 6`\x03\x19\x01\x12a\x01\x7FW`\x045a\t\xE3\x81a\x01\xCCV[a\t\xEBa\r\xBDV[`\x01`\x01`\xA0\x1B\x03\x16\x80\x15a\n<W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`\x01`\x01`\xA0\x1B\x03\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\0[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[\x91` \x82\x01\x91`?a\na\x84\x83a\x0C,V[\x90P\x03a\x0B\x17W`\x01`\x01`@\x1B\x03a\n\x80a\n\x88\x94\x83\x96\x94\x96a\x0C,V[\x94\x90\x92a\x0B&V[\x16\x93_\x92[\x84\x84\x10\x15a\n\xDEWa\n\xC5`\x01\x91\x85`\x05\x1B\x85\x015\x90\x83\x89\x16\x15_\x14a\n\xCEW\x90a\n\xBE\x91_R` R`@_ \x90V[\x96`\x01\x1C\x90V[\x93\x01\x92\x94a\n\x8DV[a\n\xBE\x91_R` R`@_ \x90V[\x93P\x93\x90Pa\n\xEE\x91P\x15a\r\xE3V[a\n\xFEa\n\xFA\x82a\x0CaV[\x15\x90V[a\x0B\x05WPV[cD\xA1\x92\xFF`\xE0\x1B_R`\x04R`$_\xFD[c],^\x9B`\xE1\x1B_R`\x04_\xFD[5`\x01`\x01`@\x1B\x03\x81\x16\x81\x03a\x01\x7FW\x90V[\x90\x80` \x93\x92\x81\x84R\x84\x84\x017_\x82\x82\x01\x84\x01R`\x1F\x01`\x1F\x19\x16\x01\x01\x90V[\x91` a\x02\x83\x93\x81\x81R\x01\x91a\x0B:V[\x90`\x04\x11a\x01\x7FW\x90`\x04\x90V[\x90\x92\x91\x92\x83`\x04\x11a\x01\x7FW\x83\x11a\x01\x7FW`\x04\x01\x91`\x03\x19\x01\x90V[5`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x92\x91\x90`\x04\x82\x10a\x0B\xB1WPPV[`\x01`\x01`\xE0\x1B\x03\x19`\x04\x92\x90\x92\x03`\x03\x1B\x82\x90\x1B\x16\x16\x91PV[_\x19\x81\x14a\x0B\xDAW`\x01\x01\x90V[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[`@\x90`\x01`\x01`@\x1B\x03a\x02\x83\x95\x93\x16\x81R\x81` \x82\x01R\x01\x91a\x0B:V[a\x0C\x1E\x90a\x0C*\x93\x926\x91a\x022V[` \x81Q\x91\x01 a\nOV[V[\x905\x90`\x1E\x19\x816\x03\x01\x82\x12\x15a\x01\x7FW\x01\x805\x90`\x01`\x01`@\x1B\x03\x82\x11a\x01\x7FW` \x01\x91\x81`\x05\x1B6\x03\x83\x13a\x01\x7FWV[`\x03T`@Qc9s!\x99`\xE2\x1B\x81R0`\x04\x82\x01R`$\x81\x01\x92\x90\x92R` \x90\x82\x90`D\x90\x82\x90`\x01`\x01`\xA0\x1B\x03\x16Z\xFA\x90\x81\x15a\x0C\xDDW_\x91a\x0C\xA5WP\x90V[\x90P` \x81=` \x11a\x0C\xD5W[\x81a\x0C\xC0` \x93\x83a\x01\xF1V[\x81\x01\x03\x12a\x01\x7FWQ\x80\x15\x15\x81\x03a\x01\x7FW\x90V[=\x91Pa\x0C\xB3V[`@Q=_\x82>=\x90\xFD[\x90\x81\x01\x90`@\x81\x83\x03\x12a\x01\x7FW\x805a\r\x01\x81a\x01\xCCV[` \x82\x015\x91`\x01`\x01`@\x1B\x03\x83\x11a\x01\x7FW_\x93\x84\x93a\r#\x92\x01a\x02hV[\x80Q\x91` \x90\x91\x01\x90`\x01`\x01`\xA0\x1B\x03\x16Z\xF4a\r?a\x0E.V[\x90\x15a\rHWPV[a\x0E\x94V[\x90\x81\x01``\x82\x82\x03\x12a\x01\x7FW\x815a\re\x81a\x01\xCCV[` \x83\x015\x92`@\x81\x015\x90`\x01`\x01`@\x1B\x03\x82\x11a\x01\x7FWa\r\x9E\x93\x85\x92a\r\x8F\x92\x01a\x02hV[\x91`\x01`\x01`\xA0\x1B\x03\x16a\x0E]V[\x91\x90\x15a\r\xA9WPPV[b\xFA\xE2\xD5`\xE2\x1B_R`\x04R`$R`D_\xFD[_T`\x01`\x01`\xA0\x1B\x03\x163\x03a\r\xD0WV[c\x11\x8C\xDA\xA7`\xE0\x1B_R3`\x04R`$_\xFD[\x15a\r\xEAWV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FLibMerkle32: index out of bounds`D\x82\x01R\xFD[=\x15a\x0EXW=\x90a\x0E?\x82a\x02\x17V[\x91a\x0EM`@Q\x93\x84a\x01\xF1V[\x82R=_` \x84\x01>V[``\x90V[\x90\x92\x91\x92G\x93\x84\x82\x11a\x0E\x8CW_\x92\x83\x92` \x83Q\x93\x01\x91Z\xF1a\x0E\x7Fa\x0E.V[\x90\x15a\rHWP`\x01\x91\x90V[PPP_\x91\x90V[\x80Q\x90\x81a\x0E\xA0W_\x80\xFD[` \x01\xFD\xFE\xA2dipfsX\"\x12 y%\x81\xCD\xB4\xC6\x19\xBA\xE2y\xF0\xC9.\x04z\xADa\xEBL\xF6\xDCo\xA5\x82w\xBA\xEE\xF4'\x18\xD5}dsolcC\0\x08\x1E\x003\xA2dipfsX\"\x12 \xDB\xEE\xC0\xF6\x01\xCDu\x191\x04\xBE\xDB\xC4\x0Cz\xE4\x96\x94\xCDQ\xBEq\x06\xD8\x01\xF0\x8F\0\x0EW0\xEEdsolcC\0\x08\x1E\x003",
187    );
188    /// The runtime bytecode of the contract, as deployed on the network.
189    ///
190    /// ```text
191    ///0x6080806040526004361015610012575f80fd5b5f3560e01c9081632cc3ef7c1461020b575080634269667b1461014957638d02370d1461003d575f80fd5b34610145576080366003190112610145576004356001600160a01b0381169081810361014557602435916001600160a01b0383168303610145576044359160643567ffffffffffffffff81116101455761009b9036906004016102a0565b939091604051906111bd8083019083821067ffffffffffffffff8311176101315785858a86956100d1958c956103e1893961034e565b03905ff09485156101265761011b7fd291ffe9436f2c57d5ce3e87ed33576f801053946651a2fb4fec5a406cf68cc59360209760018060a01b031696879160405195869586610382565b0390a2604051908152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b34610145576020600b6101dc826101ab610162366102ce565b979491969295909361019d6111bd95604051996101818789018c6103be565b878b52868b01976103e18939604051998a94888601978861034e565b03601f1981018752866103be565b60405194859383850197518091895e840190838201905f8252519283915e01015f815203601f1981018352826103be565b51902090604051916040830152838201523081520160ff8153605590206040516001600160a01b039091168152f35b3461014557610219366102ce565b9094959291926111bd80820182811067ffffffffffffffff82111761013157878686898c61024d9588976103e1893961034e565b03905ff59485156101265761011b7fd291ffe9436f2c57d5ce3e87ed33576f801053946651a2fb4fec5a406cf68cc59360209760018060a01b031696879160405195869560018060a01b03169886610382565b9181601f840112156101455782359167ffffffffffffffff8311610145576020838186019501011161014557565b9060a0600319830112610145576004356001600160a01b038116810361014557916024356001600160a01b03811681036101455791604435916064359067ffffffffffffffff821161014557610326916004016102a0565b909160843590565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b03918216815291166020820152604081019190915260806060820181905261037f9391019161032e565b90565b936103ae926060949297969760018060a01b03168652602086015260806040860152608085019161032e565b6001600160a01b03909416910152565b90601f8019910116810190811067ffffffffffffffff8211176101315760405256fe60c0604052346102b8576111bd80380380610019816102bc565b9283398101906080818303126102b85780516001600160a01b03811691908290036102b85760208101516001600160a01b038116908190036102b8576040820151606083015190926001600160401b0382116102b8570184601f820112156102b8578051906001600160401b0382116102915761009f601f8301601f19166020016102bc565b95828752602083830101116102b857815f9260208093018389015e8601015280156102a5575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600180554360805260a052600380546001600160a01b03191691909117905580516001600160401b03811161029157600454600181811c91168015610287575b602082101461027357601f8111610210575b50602091601f82116001146101b0579181925f926101a5575b50508160011b915f199060031b1c1916176004555b604051610edb90816102e2823960805181610687015260a051816105670152f35b015190505f8061016f565b601f1982169260045f52805f20915f5b8581106101f8575083600195106101e0575b505050811b01600455610184565b01515f1960f88460031b161c191690555f80806101d2565b919260206001819286850151815501940192016101c0565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c81019160208410610269575b601f0160051c01905b81811061025e5750610156565b5f8155600101610251565b9091508190610248565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610144565b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176102915760405256fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301ffc9a71461012957806308eb89ab14610124578063150b7a021461011f57806333137b761461011a57806361b12c6614610115578063715018a61461011057806371891db01461010b5780638da5cb5b14610106578063a94dfc5a14610101578063b3a1acd8146100fc578063bc197c81146100f7578063bf8abff8146100f2578063e64fab4d146100ed578063e88d39c0146100e8578063f02478de146100e3578063f23a6e61146100de5763f2fde38b0361000e576109c6565b61096d565b61087e565b61083d565b610820565b6107af565b610711565b610670565b610648565b610621565b6105e1565b61058a565b610550565b61034b565b610286565b610191565b3461017f57602036600319011261017f5760043563ffffffff60e01b811680910361017f57602090630271189760e51b811490811561016e575b506040519015158152f35b6301ffc9a760e01b1490505f610163565b5f80fd5b9081604091031261017f5790565b3461017f57604036600319011261017f576024356001600160401b03811161017f576101c4610018913690600401610183565b600435610a4f565b6001600160a01b0381160361017f57565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761021257604052565b6101dd565b6001600160401b03811161021257601f01601f191660200190565b92919261023e82610217565b9161024c60405193846101f1565b82948184528183011161017f578281602093845f960137010152565b9080601f8301121561017f5781602061028393359101610232565b90565b3461017f57608036600319011261017f576102a26004356101cc565b6102ad6024356101cc565b6064356001600160401b03811161017f576102cc903690600401610268565b50604051630a85bd0160e11b8152602090f35b604060031982011261017f57600435916001600160401b03831161017f578160238401121561017f578260040135926001600160401b03841161017f57826024858301011161017f576024019291602435906001600160401b03821161017f5761028391600401610183565b3461017f57610359366102df565b6002600193929354146105415761037f90600260015561037a818585610c0e565b610b26565b600483106105245761039a6103948484610b6b565b90610b96565b6103a5848085610b79565b916001600160e01b03191663237a816f60e01b810361049557506103e96001600160401b03841660ff6001918060081c5f526002602052161b60405f205416151590565b610471579361041c610465927fcad1f361c6e84664e892230291c8e8eb9555683e0a6a5ce8ea7b204ac0ac367696610d4d565b6104466001600160401b0384168060081c5f526002602052600160ff60405f2092161b8154179055565b610459610454600554610bcc565b600555565b60405193849384610bee565b0390a161001860018055565b5050604051637b97a6bb60e01b8152928392610491925060048401610b5a565b0390fd5b6310321e8b60e01b03610504576104cc6001600160401b03841660ff6001918060081c5f526002602052161b60405f205416151590565b61047157936104ff610465927fcad1f361c6e84664e892230291c8e8eb9555683e0a6a5ce8ea7b204ac0ac367696610ce8565b61041c565b5050604051636942600f60e11b8152928392610491925060048401610b5a565b50610491604051928392636942600f60e11b845260048401610b5a565b633ee5aeb560e01b5f5260045ffd5b3461017f575f36600319011261017f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461017f575f36600319011261017f576105a2610dbd565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017f57602036600319011261017f57602061061760043560ff6001918060081c5f526002602052161b60405f205416151590565b6040519015158152f35b3461017f575f36600319011261017f575f546040516001600160a01b039091168152602090f35b3461017f575f36600319011261017f576003546040516001600160a01b039091168152602090f35b3461017f575f36600319011261017f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b9080601f8301121561017f578135916001600160401b038311610212578260051b90604051936106dd60208401866101f1565b845260208085019282010192831161017f57602001905b8282106107015750505090565b81358152602091820191016106f4565b3461017f5760a036600319011261017f5761072d6004356101cc565b6107386024356101cc565b6044356001600160401b03811161017f576107579036906004016106aa565b506064356001600160401b03811161017f576107779036906004016106aa565b506084356001600160401b03811161017f57610797903690600401610268565b5060405163bc197c8160e01b815280602081015b0390f35b3461017f57602036600319011261017f577f6ad3188ba8f430fba0656cb0a7e839ab2020d5586ba11a1477d18f7092f8bece6004356107ed816101cc565b6107f5610dbd565b600380546001600160a01b0319166001600160a01b03929092169182179055604051908152602090a1005b3461017f575f36600319011261017f576020600554604051908152f35b3461017f5761001861084e366102df565b91610c0e565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b3461017f575f36600319011261017f576040515f6004548060011c9060018116908115610963575b60208310821461094f57828552602085019190811561093657506001146108e4575b6107ab846108d8818603826101f1565b60405191829182610854565b60045f9081529250907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b818410610922575050016108d8826108c8565b80548484015260209093019260010161090f565b60ff191682525090151560051b0190506108d8826108c8565b634e487b7160e01b5f52602260045260245ffd5b91607f16916108a6565b3461017f5760a036600319011261017f576109896004356101cc565b6109946024356101cc565b6084356001600160401b03811161017f576109b3903690600401610268565b5060405163f23a6e6160e01b8152602090f35b3461017f57602036600319011261017f576004356109e3816101cc565b6109eb610dbd565b6001600160a01b03168015610a3c575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b916020820191603f610a618483610c2c565b905003610b17576001600160401b03610a80610a889483969496610c2c565b949092610b26565b16935f925b84841015610ade57610ac56001918560051b85013590838916155f14610ace5790610abe915f5260205260405f2090565b9660011c90565b93019294610a8d565b610abe915f5260205260405f2090565b9350939050610aee915015610de3565b610afe610afa82610c61565b1590565b610b055750565b6344a192ff60e01b5f5260045260245ffd5b635d2c5e9b60e11b5f5260045ffd5b356001600160401b038116810361017f5790565b908060209392818452848401375f828201840152601f01601f1916010190565b916020610283938181520191610b3a565b9060041161017f5790600490565b909291928360041161017f57831161017f57600401916003190190565b356001600160e01b0319811692919060048210610bb1575050565b6001600160e01b031960049290920360031b82901b16169150565b5f198114610bda5760010190565b634e487b7160e01b5f52601160045260245ffd5b6040906001600160401b0361028395931681528160208201520191610b3a565b610c1e90610c2a93923691610232565b60208151910120610a4f565b565b903590601e198136030182121561017f57018035906001600160401b03821161017f57602001918160051b3603831361017f57565b600354604051633973219960e21b81523060048201526024810192909252602090829060449082906001600160a01b03165afa908115610cdd575f91610ca5575090565b90506020813d602011610cd5575b81610cc0602093836101f1565b8101031261017f5751801515810361017f5790565b3d9150610cb3565b6040513d5f823e3d90fd5b9081019060408183031261017f578035610d01816101cc565b6020820135916001600160401b03831161017f575f938493610d239201610268565b8051916020909101906001600160a01b03165af4610d3f610e2e565b9015610d485750565b610e94565b90810160608282031261017f578135610d65816101cc565b6020830135926040810135906001600160401b03821161017f57610d9e938592610d8f9201610268565b916001600160a01b0316610e5d565b919015610da9575050565b62fae2d560e21b5f5260045260245260445ffd5b5f546001600160a01b03163303610dd057565b63118cdaa760e01b5f523360045260245ffd5b15610dea57565b606460405162461bcd60e51b815260206004820152602060248201527f4c69624d65726b6c6533323a20696e646578206f7574206f6620626f756e64736044820152fd5b3d15610e58573d90610e3f82610217565b91610e4d60405193846101f1565b82523d5f602084013e565b606090565b909291924793848211610e8c575f928392602083519301915af1610e7f610e2e565b9015610d48575060019190565b5050505f9190565b80519081610ea0575f80fd5b602001fdfea2646970667358221220792581cdb4c619bae279f0c92e047aad61eb4cf6dc6fa58277baeef42718d57d64736f6c634300081e0033a2646970667358221220dbeec0f601cd75193104bedbc40c7ae49694cd51be7106d801f08f000e5730ee64736f6c634300081e0033
192    /// ```
193    #[rustfmt::skip]
194    #[allow(clippy::all)]
195    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
196        b"`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c,\xC3\xEF|\x14a\x02\x0BWP\x80cBif{\x14a\x01IWc\x8D\x027\r\x14a\0=W_\x80\xFD[4a\x01EW`\x806`\x03\x19\x01\x12a\x01EW`\x045`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x81\x03a\x01EW`$5\x91`\x01`\x01`\xA0\x1B\x03\x83\x16\x83\x03a\x01EW`D5\x91`d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01EWa\0\x9B\x906\x90`\x04\x01a\x02\xA0V[\x93\x90\x91`@Q\x90a\x11\xBD\x80\x83\x01\x90\x83\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x011W\x85\x85\x8A\x86\x95a\0\xD1\x95\x8C\x95a\x03\xE1\x899a\x03NV[\x03\x90_\xF0\x94\x85\x15a\x01&Wa\x01\x1B\x7F\xD2\x91\xFF\xE9Co,W\xD5\xCE>\x87\xED3Wo\x80\x10S\x94fQ\xA2\xFBO\xECZ@l\xF6\x8C\xC5\x93` \x97`\x01\x80`\xA0\x1B\x03\x16\x96\x87\x91`@Q\x95\x86\x95\x86a\x03\x82V[\x03\x90\xA2`@Q\x90\x81R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[_\x80\xFD[4a\x01EW` `\x0Ba\x01\xDC\x82a\x01\xABa\x01b6a\x02\xCEV[\x97\x94\x91\x96\x92\x95\x90\x93a\x01\x9Da\x11\xBD\x95`@Q\x99a\x01\x81\x87\x89\x01\x8Ca\x03\xBEV[\x87\x8BR\x86\x8B\x01\x97a\x03\xE1\x899`@Q\x99\x8A\x94\x88\x86\x01\x97\x88a\x03NV[\x03`\x1F\x19\x81\x01\x87R\x86a\x03\xBEV[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03`\x1F\x19\x81\x01\x83R\x82a\x03\xBEV[Q\x90 \x90`@Q\x91`@\x83\x01R\x83\x82\x01R0\x81R\x01`\xFF\x81S`U\x90 `@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R\xF3[4a\x01EWa\x02\x196a\x02\xCEV[\x90\x94\x95\x92\x91\x92a\x11\xBD\x80\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x011W\x87\x86\x86\x89\x8Ca\x02M\x95\x88\x97a\x03\xE1\x899a\x03NV[\x03\x90_\xF5\x94\x85\x15a\x01&Wa\x01\x1B\x7F\xD2\x91\xFF\xE9Co,W\xD5\xCE>\x87\xED3Wo\x80\x10S\x94fQ\xA2\xFBO\xECZ@l\xF6\x8C\xC5\x93` \x97`\x01\x80`\xA0\x1B\x03\x16\x96\x87\x91`@Q\x95\x86\x95`\x01\x80`\xA0\x1B\x03\x16\x98\x86a\x03\x82V[\x91\x81`\x1F\x84\x01\x12\x15a\x01EW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01EW` \x83\x81\x86\x01\x95\x01\x01\x11a\x01EWV[\x90`\xA0`\x03\x19\x83\x01\x12a\x01EW`\x045`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x03a\x01EW\x91`$5`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x03a\x01EW\x91`D5\x91`d5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01EWa\x03&\x91`\x04\x01a\x02\xA0V[\x90\x91`\x845\x90V[\x90\x80` \x93\x92\x81\x84R\x84\x84\x017_\x82\x82\x01\x84\x01R`\x1F\x01`\x1F\x19\x16\x01\x01\x90V[`\x01`\x01`\xA0\x1B\x03\x91\x82\x16\x81R\x91\x16` \x82\x01R`@\x81\x01\x91\x90\x91R`\x80``\x82\x01\x81\x90Ra\x03\x7F\x93\x91\x01\x91a\x03.V[\x90V[\x93a\x03\xAE\x92``\x94\x92\x97\x96\x97`\x01\x80`\xA0\x1B\x03\x16\x86R` \x86\x01R`\x80`@\x86\x01R`\x80\x85\x01\x91a\x03.V[`\x01`\x01`\xA0\x1B\x03\x90\x94\x16\x91\x01RV[\x90`\x1F\x80\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x011W`@RV\xFE`\xC0`@R4a\x02\xB8Wa\x11\xBD\x808\x03\x80a\0\x19\x81a\x02\xBCV[\x92\x839\x81\x01\x90`\x80\x81\x83\x03\x12a\x02\xB8W\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x91\x90\x82\x90\x03a\x02\xB8W` \x81\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x02\xB8W`@\x82\x01Q``\x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x02\xB8W\x01\x84`\x1F\x82\x01\x12\x15a\x02\xB8W\x80Q\x90`\x01`\x01`@\x1B\x03\x82\x11a\x02\x91Wa\0\x9F`\x1F\x83\x01`\x1F\x19\x16` \x01a\x02\xBCV[\x95\x82\x87R` \x83\x83\x01\x01\x11a\x02\xB8W\x81_\x92` \x80\x93\x01\x83\x89\x01^\x86\x01\x01R\x80\x15a\x02\xA5W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`\x01`\x01`\xA0\x1B\x03\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3`\x01\x80UC`\x80R`\xA0R`\x03\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16\x91\x90\x91\x17\x90U\x80Q`\x01`\x01`@\x1B\x03\x81\x11a\x02\x91W`\x04T`\x01\x81\x81\x1C\x91\x16\x80\x15a\x02\x87W[` \x82\x10\x14a\x02sW`\x1F\x81\x11a\x02\x10W[P` \x91`\x1F\x82\x11`\x01\x14a\x01\xB0W\x91\x81\x92_\x92a\x01\xA5W[PP\x81`\x01\x1B\x91_\x19\x90`\x03\x1B\x1C\x19\x16\x17`\x04U[`@Qa\x0E\xDB\x90\x81a\x02\xE2\x829`\x80Q\x81a\x06\x87\x01R`\xA0Q\x81a\x05g\x01R\xF3[\x01Q\x90P_\x80a\x01oV[`\x1F\x19\x82\x16\x92`\x04_R\x80_ \x91_[\x85\x81\x10a\x01\xF8WP\x83`\x01\x95\x10a\x01\xE0W[PPP\x81\x1B\x01`\x04Ua\x01\x84V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U_\x80\x80a\x01\xD2V[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x01\xC0V[`\x04_R\x7F\x8A5\xAC\xFB\xC1_\xF8\x1A9\xAE}4O\xD7\t\xF2\x8E\x86\0\xB4\xAA\x8Ce\xC6\xB6K\xFE\x7F\xE3k\xD1\x9B`\x1F\x83\x01`\x05\x1C\x81\x01\x91` \x84\x10a\x02iW[`\x1F\x01`\x05\x1C\x01\x90[\x81\x81\x10a\x02^WPa\x01VV[_\x81U`\x01\x01a\x02QV[\x90\x91P\x81\x90a\x02HV[cNH{q`\xE0\x1B_R`\"`\x04R`$_\xFD[\x90`\x7F\x16\x90a\x01DV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[`@Q\x91\x90`\x1F\x01`\x1F\x19\x16\x82\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x02\x91W`@RV\xFE`\x80`@R`\x046\x10\x15a\0\x1AW[6\x15a\0\x18W_\x80\xFD[\0[_5`\xE0\x1C\x80c\x01\xFF\xC9\xA7\x14a\x01)W\x80c\x08\xEB\x89\xAB\x14a\x01$W\x80c\x15\x0Bz\x02\x14a\x01\x1FW\x80c3\x13{v\x14a\x01\x1AW\x80ca\xB1,f\x14a\x01\x15W\x80cqP\x18\xA6\x14a\x01\x10W\x80cq\x89\x1D\xB0\x14a\x01\x0BW\x80c\x8D\xA5\xCB[\x14a\x01\x06W\x80c\xA9M\xFCZ\x14a\x01\x01W\x80c\xB3\xA1\xAC\xD8\x14a\0\xFCW\x80c\xBC\x19|\x81\x14a\0\xF7W\x80c\xBF\x8A\xBF\xF8\x14a\0\xF2W\x80c\xE6O\xABM\x14a\0\xEDW\x80c\xE8\x8D9\xC0\x14a\0\xE8W\x80c\xF0$x\xDE\x14a\0\xE3W\x80c\xF2:na\x14a\0\xDEWc\xF2\xFD\xE3\x8B\x03a\0\x0EWa\t\xC6V[a\tmV[a\x08~V[a\x08=V[a\x08 V[a\x07\xAFV[a\x07\x11V[a\x06pV[a\x06HV[a\x06!V[a\x05\xE1V[a\x05\x8AV[a\x05PV[a\x03KV[a\x02\x86V[a\x01\x91V[4a\x01\x7FW` 6`\x03\x19\x01\x12a\x01\x7FW`\x045c\xFF\xFF\xFF\xFF`\xE0\x1B\x81\x16\x80\x91\x03a\x01\x7FW` \x90c\x02q\x18\x97`\xE5\x1B\x81\x14\x90\x81\x15a\x01nW[P`@Q\x90\x15\x15\x81R\xF3[c\x01\xFF\xC9\xA7`\xE0\x1B\x14\x90P_a\x01cV[_\x80\xFD[\x90\x81`@\x91\x03\x12a\x01\x7FW\x90V[4a\x01\x7FW`@6`\x03\x19\x01\x12a\x01\x7FW`$5`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\x01\xC4a\0\x18\x916\x90`\x04\x01a\x01\x83V[`\x045a\nOV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x03a\x01\x7FWV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[\x90`\x1F\x80\x19\x91\x01\x16\x81\x01\x90\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17a\x02\x12W`@RV[a\x01\xDDV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\x12W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92a\x02>\x82a\x02\x17V[\x91a\x02L`@Q\x93\x84a\x01\xF1V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x01\x7FW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x01\x7FW\x81` a\x02\x83\x935\x91\x01a\x022V[\x90V[4a\x01\x7FW`\x806`\x03\x19\x01\x12a\x01\x7FWa\x02\xA2`\x045a\x01\xCCV[a\x02\xAD`$5a\x01\xCCV[`d5`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\x02\xCC\x906\x90`\x04\x01a\x02hV[P`@Qc\n\x85\xBD\x01`\xE1\x1B\x81R` \x90\xF3[`@`\x03\x19\x82\x01\x12a\x01\x7FW`\x045\x91`\x01`\x01`@\x1B\x03\x83\x11a\x01\x7FW\x81`#\x84\x01\x12\x15a\x01\x7FW\x82`\x04\x015\x92`\x01`\x01`@\x1B\x03\x84\x11a\x01\x7FW\x82`$\x85\x83\x01\x01\x11a\x01\x7FW`$\x01\x92\x91`$5\x90`\x01`\x01`@\x1B\x03\x82\x11a\x01\x7FWa\x02\x83\x91`\x04\x01a\x01\x83V[4a\x01\x7FWa\x03Y6a\x02\xDFV[`\x02`\x01\x93\x92\x93T\x14a\x05AWa\x03\x7F\x90`\x02`\x01Ua\x03z\x81\x85\x85a\x0C\x0EV[a\x0B&V[`\x04\x83\x10a\x05$Wa\x03\x9Aa\x03\x94\x84\x84a\x0BkV[\x90a\x0B\x96V[a\x03\xA5\x84\x80\x85a\x0ByV[\x91`\x01`\x01`\xE0\x1B\x03\x19\x16c#z\x81o`\xE0\x1B\x81\x03a\x04\x95WPa\x03\xE9`\x01`\x01`@\x1B\x03\x84\x16`\xFF`\x01\x91\x80`\x08\x1C_R`\x02` R\x16\x1B`@_ T\x16\x15\x15\x90V[a\x04qW\x93a\x04\x1Ca\x04e\x92\x7F\xCA\xD1\xF3a\xC6\xE8Fd\xE8\x92#\x02\x91\xC8\xE8\xEB\x95Uh>\nj\\\xE8\xEA{ J\xC0\xAC6v\x96a\rMV[a\x04F`\x01`\x01`@\x1B\x03\x84\x16\x80`\x08\x1C_R`\x02` R`\x01`\xFF`@_ \x92\x16\x1B\x81T\x17\x90UV[a\x04Ya\x04T`\x05Ta\x0B\xCCV[`\x05UV[`@Q\x93\x84\x93\x84a\x0B\xEEV[\x03\x90\xA1a\0\x18`\x01\x80UV[PP`@Qc{\x97\xA6\xBB`\xE0\x1B\x81R\x92\x83\x92a\x04\x91\x92P`\x04\x84\x01a\x0BZV[\x03\x90\xFD[c\x102\x1E\x8B`\xE0\x1B\x03a\x05\x04Wa\x04\xCC`\x01`\x01`@\x1B\x03\x84\x16`\xFF`\x01\x91\x80`\x08\x1C_R`\x02` R\x16\x1B`@_ T\x16\x15\x15\x90V[a\x04qW\x93a\x04\xFFa\x04e\x92\x7F\xCA\xD1\xF3a\xC6\xE8Fd\xE8\x92#\x02\x91\xC8\xE8\xEB\x95Uh>\nj\\\xE8\xEA{ J\xC0\xAC6v\x96a\x0C\xE8V[a\x04\x1CV[PP`@QciB`\x0F`\xE1\x1B\x81R\x92\x83\x92a\x04\x91\x92P`\x04\x84\x01a\x0BZV[Pa\x04\x91`@Q\x92\x83\x92ciB`\x0F`\xE1\x1B\x84R`\x04\x84\x01a\x0BZV[c>\xE5\xAE\xB5`\xE0\x1B_R`\x04_\xFD[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW` `@Q\x7F\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\0\0\0\0\x81R\xF3[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FWa\x05\xA2a\r\xBDV[_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x82U`\x01`\x01`\xA0\x1B\x03\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01\x7FW` 6`\x03\x19\x01\x12a\x01\x7FW` a\x06\x17`\x045`\xFF`\x01\x91\x80`\x08\x1C_R`\x02` R\x16\x1B`@_ T\x16\x15\x15\x90V[`@Q\x90\x15\x15\x81R\xF3[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW_T`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x90\xF3[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW`\x03T`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x90\xF3[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW` `@Q\x7F\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\0\0\0\0\x81R\xF3[\x90\x80`\x1F\x83\x01\x12\x15a\x01\x7FW\x815\x91`\x01`\x01`@\x1B\x03\x83\x11a\x02\x12W\x82`\x05\x1B\x90`@Q\x93a\x06\xDD` \x84\x01\x86a\x01\xF1V[\x84R` \x80\x85\x01\x92\x82\x01\x01\x92\x83\x11a\x01\x7FW` \x01\x90[\x82\x82\x10a\x07\x01WPPP\x90V[\x815\x81R` \x91\x82\x01\x91\x01a\x06\xF4V[4a\x01\x7FW`\xA06`\x03\x19\x01\x12a\x01\x7FWa\x07-`\x045a\x01\xCCV[a\x078`$5a\x01\xCCV[`D5`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\x07W\x906\x90`\x04\x01a\x06\xAAV[P`d5`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\x07w\x906\x90`\x04\x01a\x06\xAAV[P`\x845`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\x07\x97\x906\x90`\x04\x01a\x02hV[P`@Qc\xBC\x19|\x81`\xE0\x1B\x81R\x80` \x81\x01[\x03\x90\xF3[4a\x01\x7FW` 6`\x03\x19\x01\x12a\x01\x7FW\x7Fj\xD3\x18\x8B\xA8\xF40\xFB\xA0el\xB0\xA7\xE89\xAB  \xD5Xk\xA1\x1A\x14w\xD1\x8Fp\x92\xF8\xBE\xCE`\x045a\x07\xED\x81a\x01\xCCV[a\x07\xF5a\r\xBDV[`\x03\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U`@Q\x90\x81R` \x90\xA1\0[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW` `\x05T`@Q\x90\x81R\xF3[4a\x01\x7FWa\0\x18a\x08N6a\x02\xDFV[\x91a\x0C\x0EV[` `@\x92\x81\x83R\x80Q\x91\x82\x91\x82\x82\x86\x01R\x01\x84\x84\x01^_\x82\x82\x01\x84\x01R`\x1F\x01`\x1F\x19\x16\x01\x01\x90V[4a\x01\x7FW_6`\x03\x19\x01\x12a\x01\x7FW`@Q_`\x04T\x80`\x01\x1C\x90`\x01\x81\x16\x90\x81\x15a\tcW[` \x83\x10\x82\x14a\tOW\x82\x85R` \x85\x01\x91\x90\x81\x15a\t6WP`\x01\x14a\x08\xE4W[a\x07\xAB\x84a\x08\xD8\x81\x86\x03\x82a\x01\xF1V[`@Q\x91\x82\x91\x82a\x08TV[`\x04_\x90\x81R\x92P\x90\x7F\x8A5\xAC\xFB\xC1_\xF8\x1A9\xAE}4O\xD7\t\xF2\x8E\x86\0\xB4\xAA\x8Ce\xC6\xB6K\xFE\x7F\xE3k\xD1\x9B[\x81\x84\x10a\t\"WPP\x01a\x08\xD8\x82a\x08\xC8V[\x80T\x84\x84\x01R` \x90\x93\x01\x92`\x01\x01a\t\x0FV[`\xFF\x19\x16\x82RP\x90\x15\x15`\x05\x1B\x01\x90Pa\x08\xD8\x82a\x08\xC8V[cNH{q`\xE0\x1B_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x08\xA6V[4a\x01\x7FW`\xA06`\x03\x19\x01\x12a\x01\x7FWa\t\x89`\x045a\x01\xCCV[a\t\x94`$5a\x01\xCCV[`\x845`\x01`\x01`@\x1B\x03\x81\x11a\x01\x7FWa\t\xB3\x906\x90`\x04\x01a\x02hV[P`@Qc\xF2:na`\xE0\x1B\x81R` \x90\xF3[4a\x01\x7FW` 6`\x03\x19\x01\x12a\x01\x7FW`\x045a\t\xE3\x81a\x01\xCCV[a\t\xEBa\r\xBDV[`\x01`\x01`\xA0\x1B\x03\x16\x80\x15a\n<W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`\x01`\x01`\xA0\x1B\x03\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\0[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[\x91` \x82\x01\x91`?a\na\x84\x83a\x0C,V[\x90P\x03a\x0B\x17W`\x01`\x01`@\x1B\x03a\n\x80a\n\x88\x94\x83\x96\x94\x96a\x0C,V[\x94\x90\x92a\x0B&V[\x16\x93_\x92[\x84\x84\x10\x15a\n\xDEWa\n\xC5`\x01\x91\x85`\x05\x1B\x85\x015\x90\x83\x89\x16\x15_\x14a\n\xCEW\x90a\n\xBE\x91_R` R`@_ \x90V[\x96`\x01\x1C\x90V[\x93\x01\x92\x94a\n\x8DV[a\n\xBE\x91_R` R`@_ \x90V[\x93P\x93\x90Pa\n\xEE\x91P\x15a\r\xE3V[a\n\xFEa\n\xFA\x82a\x0CaV[\x15\x90V[a\x0B\x05WPV[cD\xA1\x92\xFF`\xE0\x1B_R`\x04R`$_\xFD[c],^\x9B`\xE1\x1B_R`\x04_\xFD[5`\x01`\x01`@\x1B\x03\x81\x16\x81\x03a\x01\x7FW\x90V[\x90\x80` \x93\x92\x81\x84R\x84\x84\x017_\x82\x82\x01\x84\x01R`\x1F\x01`\x1F\x19\x16\x01\x01\x90V[\x91` a\x02\x83\x93\x81\x81R\x01\x91a\x0B:V[\x90`\x04\x11a\x01\x7FW\x90`\x04\x90V[\x90\x92\x91\x92\x83`\x04\x11a\x01\x7FW\x83\x11a\x01\x7FW`\x04\x01\x91`\x03\x19\x01\x90V[5`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x92\x91\x90`\x04\x82\x10a\x0B\xB1WPPV[`\x01`\x01`\xE0\x1B\x03\x19`\x04\x92\x90\x92\x03`\x03\x1B\x82\x90\x1B\x16\x16\x91PV[_\x19\x81\x14a\x0B\xDAW`\x01\x01\x90V[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[`@\x90`\x01`\x01`@\x1B\x03a\x02\x83\x95\x93\x16\x81R\x81` \x82\x01R\x01\x91a\x0B:V[a\x0C\x1E\x90a\x0C*\x93\x926\x91a\x022V[` \x81Q\x91\x01 a\nOV[V[\x905\x90`\x1E\x19\x816\x03\x01\x82\x12\x15a\x01\x7FW\x01\x805\x90`\x01`\x01`@\x1B\x03\x82\x11a\x01\x7FW` \x01\x91\x81`\x05\x1B6\x03\x83\x13a\x01\x7FWV[`\x03T`@Qc9s!\x99`\xE2\x1B\x81R0`\x04\x82\x01R`$\x81\x01\x92\x90\x92R` \x90\x82\x90`D\x90\x82\x90`\x01`\x01`\xA0\x1B\x03\x16Z\xFA\x90\x81\x15a\x0C\xDDW_\x91a\x0C\xA5WP\x90V[\x90P` \x81=` \x11a\x0C\xD5W[\x81a\x0C\xC0` \x93\x83a\x01\xF1V[\x81\x01\x03\x12a\x01\x7FWQ\x80\x15\x15\x81\x03a\x01\x7FW\x90V[=\x91Pa\x0C\xB3V[`@Q=_\x82>=\x90\xFD[\x90\x81\x01\x90`@\x81\x83\x03\x12a\x01\x7FW\x805a\r\x01\x81a\x01\xCCV[` \x82\x015\x91`\x01`\x01`@\x1B\x03\x83\x11a\x01\x7FW_\x93\x84\x93a\r#\x92\x01a\x02hV[\x80Q\x91` \x90\x91\x01\x90`\x01`\x01`\xA0\x1B\x03\x16Z\xF4a\r?a\x0E.V[\x90\x15a\rHWPV[a\x0E\x94V[\x90\x81\x01``\x82\x82\x03\x12a\x01\x7FW\x815a\re\x81a\x01\xCCV[` \x83\x015\x92`@\x81\x015\x90`\x01`\x01`@\x1B\x03\x82\x11a\x01\x7FWa\r\x9E\x93\x85\x92a\r\x8F\x92\x01a\x02hV[\x91`\x01`\x01`\xA0\x1B\x03\x16a\x0E]V[\x91\x90\x15a\r\xA9WPPV[b\xFA\xE2\xD5`\xE2\x1B_R`\x04R`$R`D_\xFD[_T`\x01`\x01`\xA0\x1B\x03\x163\x03a\r\xD0WV[c\x11\x8C\xDA\xA7`\xE0\x1B_R3`\x04R`$_\xFD[\x15a\r\xEAWV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FLibMerkle32: index out of bounds`D\x82\x01R\xFD[=\x15a\x0EXW=\x90a\x0E?\x82a\x02\x17V[\x91a\x0EM`@Q\x93\x84a\x01\xF1V[\x82R=_` \x84\x01>V[``\x90V[\x90\x92\x91\x92G\x93\x84\x82\x11a\x0E\x8CW_\x92\x83\x92` \x83Q\x93\x01\x91Z\xF1a\x0E\x7Fa\x0E.V[\x90\x15a\rHWP`\x01\x91\x90V[PPP_\x91\x90V[\x80Q\x90\x81a\x0E\xA0W_\x80\xFD[` \x01\xFD\xFE\xA2dipfsX\"\x12 y%\x81\xCD\xB4\xC6\x19\xBA\xE2y\xF0\xC9.\x04z\xADa\xEBL\xF6\xDCo\xA5\x82w\xBA\xEE\xF4'\x18\xD5}dsolcC\0\x08\x1E\x003\xA2dipfsX\"\x12 \xDB\xEE\xC0\xF6\x01\xCDu\x191\x04\xBE\xDB\xC4\x0Cz\xE4\x96\x94\xCDQ\xBEq\x06\xD8\x01\xF0\x8F\0\x0EW0\xEEdsolcC\0\x08\x1E\x003",
197    );
198    #[derive(serde::Serialize, serde::Deserialize)]
199    #[derive(Default, Debug, PartialEq, Eq, Hash)]
200    /**Event with signature `ApplicationCreated(address,address,bytes32,bytes,address)` and selector `0xd291ffe9436f2c57d5ce3e87ed33576f801053946651a2fb4fec5a406cf68cc5`.
201```solidity
202event ApplicationCreated(address indexed outputsMerkleRootValidator, address appOwner, bytes32 templateHash, bytes dataAvailability, address appContract);
203```*/
204    #[allow(
205        non_camel_case_types,
206        non_snake_case,
207        clippy::pub_underscore_fields,
208        clippy::style
209    )]
210    #[derive(Clone)]
211    pub struct ApplicationCreated {
212        #[allow(missing_docs)]
213        pub outputsMerkleRootValidator: alloy::sol_types::private::Address,
214        #[allow(missing_docs)]
215        pub appOwner: alloy::sol_types::private::Address,
216        #[allow(missing_docs)]
217        pub templateHash: alloy::sol_types::private::FixedBytes<32>,
218        #[allow(missing_docs)]
219        pub dataAvailability: alloy::sol_types::private::Bytes,
220        #[allow(missing_docs)]
221        pub appContract: alloy::sol_types::private::Address,
222    }
223    #[allow(
224        non_camel_case_types,
225        non_snake_case,
226        clippy::pub_underscore_fields,
227        clippy::style
228    )]
229    const _: () = {
230        use alloy::sol_types as alloy_sol_types;
231        #[automatically_derived]
232        impl alloy_sol_types::SolEvent for ApplicationCreated {
233            type DataTuple<'a> = (
234                alloy::sol_types::sol_data::Address,
235                alloy::sol_types::sol_data::FixedBytes<32>,
236                alloy::sol_types::sol_data::Bytes,
237                alloy::sol_types::sol_data::Address,
238            );
239            type DataToken<'a> = <Self::DataTuple<
240                'a,
241            > as alloy_sol_types::SolType>::Token<'a>;
242            type TopicList = (
243                alloy_sol_types::sol_data::FixedBytes<32>,
244                alloy::sol_types::sol_data::Address,
245            );
246            const SIGNATURE: &'static str = "ApplicationCreated(address,address,bytes32,bytes,address)";
247            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
248                210u8, 145u8, 255u8, 233u8, 67u8, 111u8, 44u8, 87u8, 213u8, 206u8, 62u8,
249                135u8, 237u8, 51u8, 87u8, 111u8, 128u8, 16u8, 83u8, 148u8, 102u8, 81u8,
250                162u8, 251u8, 79u8, 236u8, 90u8, 64u8, 108u8, 246u8, 140u8, 197u8,
251            ]);
252            const ANONYMOUS: bool = false;
253            #[allow(unused_variables)]
254            #[inline]
255            fn new(
256                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
257                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
258            ) -> Self {
259                Self {
260                    outputsMerkleRootValidator: topics.1,
261                    appOwner: data.0,
262                    templateHash: data.1,
263                    dataAvailability: data.2,
264                    appContract: data.3,
265                }
266            }
267            #[inline]
268            fn check_signature(
269                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
270            ) -> alloy_sol_types::Result<()> {
271                if topics.0 != Self::SIGNATURE_HASH {
272                    return Err(
273                        alloy_sol_types::Error::invalid_event_signature_hash(
274                            Self::SIGNATURE,
275                            topics.0,
276                            Self::SIGNATURE_HASH,
277                        ),
278                    );
279                }
280                Ok(())
281            }
282            #[inline]
283            fn tokenize_body(&self) -> Self::DataToken<'_> {
284                (
285                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
286                        &self.appOwner,
287                    ),
288                    <alloy::sol_types::sol_data::FixedBytes<
289                        32,
290                    > as alloy_sol_types::SolType>::tokenize(&self.templateHash),
291                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
292                        &self.dataAvailability,
293                    ),
294                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
295                        &self.appContract,
296                    ),
297                )
298            }
299            #[inline]
300            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
301                (Self::SIGNATURE_HASH.into(), self.outputsMerkleRootValidator.clone())
302            }
303            #[inline]
304            fn encode_topics_raw(
305                &self,
306                out: &mut [alloy_sol_types::abi::token::WordToken],
307            ) -> alloy_sol_types::Result<()> {
308                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
309                    return Err(alloy_sol_types::Error::Overrun);
310                }
311                out[0usize] = alloy_sol_types::abi::token::WordToken(
312                    Self::SIGNATURE_HASH,
313                );
314                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
315                    &self.outputsMerkleRootValidator,
316                );
317                Ok(())
318            }
319        }
320        #[automatically_derived]
321        impl alloy_sol_types::private::IntoLogData for ApplicationCreated {
322            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
323                From::from(self)
324            }
325            fn into_log_data(self) -> alloy_sol_types::private::LogData {
326                From::from(&self)
327            }
328        }
329        #[automatically_derived]
330        impl From<&ApplicationCreated> for alloy_sol_types::private::LogData {
331            #[inline]
332            fn from(this: &ApplicationCreated) -> alloy_sol_types::private::LogData {
333                alloy_sol_types::SolEvent::encode_log_data(this)
334            }
335        }
336    };
337    #[derive(serde::Serialize, serde::Deserialize)]
338    #[derive(Default, Debug, PartialEq, Eq, Hash)]
339    /**Function with signature `calculateApplicationAddress(address,address,bytes32,bytes,bytes32)` and selector `0x4269667b`.
340```solidity
341function calculateApplicationAddress(address outputsMerkleRootValidator, address appOwner, bytes32 templateHash, bytes memory dataAvailability, bytes32 salt) external view returns (address);
342```*/
343    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
344    #[derive(Clone)]
345    pub struct calculateApplicationAddressCall {
346        #[allow(missing_docs)]
347        pub outputsMerkleRootValidator: alloy::sol_types::private::Address,
348        #[allow(missing_docs)]
349        pub appOwner: alloy::sol_types::private::Address,
350        #[allow(missing_docs)]
351        pub templateHash: alloy::sol_types::private::FixedBytes<32>,
352        #[allow(missing_docs)]
353        pub dataAvailability: alloy::sol_types::private::Bytes,
354        #[allow(missing_docs)]
355        pub salt: alloy::sol_types::private::FixedBytes<32>,
356    }
357    #[derive(serde::Serialize, serde::Deserialize)]
358    #[derive(Default, Debug, PartialEq, Eq, Hash)]
359    ///Container type for the return parameters of the [`calculateApplicationAddress(address,address,bytes32,bytes,bytes32)`](calculateApplicationAddressCall) function.
360    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
361    #[derive(Clone)]
362    pub struct calculateApplicationAddressReturn {
363        #[allow(missing_docs)]
364        pub _0: alloy::sol_types::private::Address,
365    }
366    #[allow(
367        non_camel_case_types,
368        non_snake_case,
369        clippy::pub_underscore_fields,
370        clippy::style
371    )]
372    const _: () = {
373        use alloy::sol_types as alloy_sol_types;
374        {
375            #[doc(hidden)]
376            #[allow(dead_code)]
377            type UnderlyingSolTuple<'a> = (
378                alloy::sol_types::sol_data::Address,
379                alloy::sol_types::sol_data::Address,
380                alloy::sol_types::sol_data::FixedBytes<32>,
381                alloy::sol_types::sol_data::Bytes,
382                alloy::sol_types::sol_data::FixedBytes<32>,
383            );
384            #[doc(hidden)]
385            type UnderlyingRustTuple<'a> = (
386                alloy::sol_types::private::Address,
387                alloy::sol_types::private::Address,
388                alloy::sol_types::private::FixedBytes<32>,
389                alloy::sol_types::private::Bytes,
390                alloy::sol_types::private::FixedBytes<32>,
391            );
392            #[cfg(test)]
393            #[allow(dead_code, unreachable_patterns)]
394            fn _type_assertion(
395                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
396            ) {
397                match _t {
398                    alloy_sol_types::private::AssertTypeEq::<
399                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
400                    >(_) => {}
401                }
402            }
403            #[automatically_derived]
404            #[doc(hidden)]
405            impl ::core::convert::From<calculateApplicationAddressCall>
406            for UnderlyingRustTuple<'_> {
407                fn from(value: calculateApplicationAddressCall) -> Self {
408                    (
409                        value.outputsMerkleRootValidator,
410                        value.appOwner,
411                        value.templateHash,
412                        value.dataAvailability,
413                        value.salt,
414                    )
415                }
416            }
417            #[automatically_derived]
418            #[doc(hidden)]
419            impl ::core::convert::From<UnderlyingRustTuple<'_>>
420            for calculateApplicationAddressCall {
421                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
422                    Self {
423                        outputsMerkleRootValidator: tuple.0,
424                        appOwner: tuple.1,
425                        templateHash: tuple.2,
426                        dataAvailability: tuple.3,
427                        salt: tuple.4,
428                    }
429                }
430            }
431        }
432        {
433            #[doc(hidden)]
434            #[allow(dead_code)]
435            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
436            #[doc(hidden)]
437            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
438            #[cfg(test)]
439            #[allow(dead_code, unreachable_patterns)]
440            fn _type_assertion(
441                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
442            ) {
443                match _t {
444                    alloy_sol_types::private::AssertTypeEq::<
445                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
446                    >(_) => {}
447                }
448            }
449            #[automatically_derived]
450            #[doc(hidden)]
451            impl ::core::convert::From<calculateApplicationAddressReturn>
452            for UnderlyingRustTuple<'_> {
453                fn from(value: calculateApplicationAddressReturn) -> Self {
454                    (value._0,)
455                }
456            }
457            #[automatically_derived]
458            #[doc(hidden)]
459            impl ::core::convert::From<UnderlyingRustTuple<'_>>
460            for calculateApplicationAddressReturn {
461                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
462                    Self { _0: tuple.0 }
463                }
464            }
465        }
466        #[automatically_derived]
467        impl alloy_sol_types::SolCall for calculateApplicationAddressCall {
468            type Parameters<'a> = (
469                alloy::sol_types::sol_data::Address,
470                alloy::sol_types::sol_data::Address,
471                alloy::sol_types::sol_data::FixedBytes<32>,
472                alloy::sol_types::sol_data::Bytes,
473                alloy::sol_types::sol_data::FixedBytes<32>,
474            );
475            type Token<'a> = <Self::Parameters<
476                'a,
477            > as alloy_sol_types::SolType>::Token<'a>;
478            type Return = alloy::sol_types::private::Address;
479            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
480            type ReturnToken<'a> = <Self::ReturnTuple<
481                'a,
482            > as alloy_sol_types::SolType>::Token<'a>;
483            const SIGNATURE: &'static str = "calculateApplicationAddress(address,address,bytes32,bytes,bytes32)";
484            const SELECTOR: [u8; 4] = [66u8, 105u8, 102u8, 123u8];
485            #[inline]
486            fn new<'a>(
487                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
488            ) -> Self {
489                tuple.into()
490            }
491            #[inline]
492            fn tokenize(&self) -> Self::Token<'_> {
493                (
494                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
495                        &self.outputsMerkleRootValidator,
496                    ),
497                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
498                        &self.appOwner,
499                    ),
500                    <alloy::sol_types::sol_data::FixedBytes<
501                        32,
502                    > as alloy_sol_types::SolType>::tokenize(&self.templateHash),
503                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
504                        &self.dataAvailability,
505                    ),
506                    <alloy::sol_types::sol_data::FixedBytes<
507                        32,
508                    > as alloy_sol_types::SolType>::tokenize(&self.salt),
509                )
510            }
511            #[inline]
512            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
513                (
514                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
515                        ret,
516                    ),
517                )
518            }
519            #[inline]
520            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
521                <Self::ReturnTuple<
522                    '_,
523                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
524                    .map(|r| {
525                        let r: calculateApplicationAddressReturn = r.into();
526                        r._0
527                    })
528            }
529            #[inline]
530            fn abi_decode_returns_validate(
531                data: &[u8],
532            ) -> alloy_sol_types::Result<Self::Return> {
533                <Self::ReturnTuple<
534                    '_,
535                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
536                    .map(|r| {
537                        let r: calculateApplicationAddressReturn = r.into();
538                        r._0
539                    })
540            }
541        }
542    };
543    #[derive(serde::Serialize, serde::Deserialize)]
544    #[derive(Default, Debug, PartialEq, Eq, Hash)]
545    /**Function with signature `newApplication(address,address,bytes32,bytes,bytes32)` and selector `0x2cc3ef7c`.
546```solidity
547function newApplication(address outputsMerkleRootValidator, address appOwner, bytes32 templateHash, bytes memory dataAvailability, bytes32 salt) external returns (address);
548```*/
549    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
550    #[derive(Clone)]
551    pub struct newApplication_0Call {
552        #[allow(missing_docs)]
553        pub outputsMerkleRootValidator: alloy::sol_types::private::Address,
554        #[allow(missing_docs)]
555        pub appOwner: alloy::sol_types::private::Address,
556        #[allow(missing_docs)]
557        pub templateHash: alloy::sol_types::private::FixedBytes<32>,
558        #[allow(missing_docs)]
559        pub dataAvailability: alloy::sol_types::private::Bytes,
560        #[allow(missing_docs)]
561        pub salt: alloy::sol_types::private::FixedBytes<32>,
562    }
563    #[derive(serde::Serialize, serde::Deserialize)]
564    #[derive(Default, Debug, PartialEq, Eq, Hash)]
565    ///Container type for the return parameters of the [`newApplication(address,address,bytes32,bytes,bytes32)`](newApplication_0Call) function.
566    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
567    #[derive(Clone)]
568    pub struct newApplication_0Return {
569        #[allow(missing_docs)]
570        pub _0: alloy::sol_types::private::Address,
571    }
572    #[allow(
573        non_camel_case_types,
574        non_snake_case,
575        clippy::pub_underscore_fields,
576        clippy::style
577    )]
578    const _: () = {
579        use alloy::sol_types as alloy_sol_types;
580        {
581            #[doc(hidden)]
582            #[allow(dead_code)]
583            type UnderlyingSolTuple<'a> = (
584                alloy::sol_types::sol_data::Address,
585                alloy::sol_types::sol_data::Address,
586                alloy::sol_types::sol_data::FixedBytes<32>,
587                alloy::sol_types::sol_data::Bytes,
588                alloy::sol_types::sol_data::FixedBytes<32>,
589            );
590            #[doc(hidden)]
591            type UnderlyingRustTuple<'a> = (
592                alloy::sol_types::private::Address,
593                alloy::sol_types::private::Address,
594                alloy::sol_types::private::FixedBytes<32>,
595                alloy::sol_types::private::Bytes,
596                alloy::sol_types::private::FixedBytes<32>,
597            );
598            #[cfg(test)]
599            #[allow(dead_code, unreachable_patterns)]
600            fn _type_assertion(
601                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
602            ) {
603                match _t {
604                    alloy_sol_types::private::AssertTypeEq::<
605                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
606                    >(_) => {}
607                }
608            }
609            #[automatically_derived]
610            #[doc(hidden)]
611            impl ::core::convert::From<newApplication_0Call>
612            for UnderlyingRustTuple<'_> {
613                fn from(value: newApplication_0Call) -> Self {
614                    (
615                        value.outputsMerkleRootValidator,
616                        value.appOwner,
617                        value.templateHash,
618                        value.dataAvailability,
619                        value.salt,
620                    )
621                }
622            }
623            #[automatically_derived]
624            #[doc(hidden)]
625            impl ::core::convert::From<UnderlyingRustTuple<'_>>
626            for newApplication_0Call {
627                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
628                    Self {
629                        outputsMerkleRootValidator: tuple.0,
630                        appOwner: tuple.1,
631                        templateHash: tuple.2,
632                        dataAvailability: tuple.3,
633                        salt: tuple.4,
634                    }
635                }
636            }
637        }
638        {
639            #[doc(hidden)]
640            #[allow(dead_code)]
641            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
642            #[doc(hidden)]
643            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
644            #[cfg(test)]
645            #[allow(dead_code, unreachable_patterns)]
646            fn _type_assertion(
647                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
648            ) {
649                match _t {
650                    alloy_sol_types::private::AssertTypeEq::<
651                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
652                    >(_) => {}
653                }
654            }
655            #[automatically_derived]
656            #[doc(hidden)]
657            impl ::core::convert::From<newApplication_0Return>
658            for UnderlyingRustTuple<'_> {
659                fn from(value: newApplication_0Return) -> Self {
660                    (value._0,)
661                }
662            }
663            #[automatically_derived]
664            #[doc(hidden)]
665            impl ::core::convert::From<UnderlyingRustTuple<'_>>
666            for newApplication_0Return {
667                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
668                    Self { _0: tuple.0 }
669                }
670            }
671        }
672        #[automatically_derived]
673        impl alloy_sol_types::SolCall for newApplication_0Call {
674            type Parameters<'a> = (
675                alloy::sol_types::sol_data::Address,
676                alloy::sol_types::sol_data::Address,
677                alloy::sol_types::sol_data::FixedBytes<32>,
678                alloy::sol_types::sol_data::Bytes,
679                alloy::sol_types::sol_data::FixedBytes<32>,
680            );
681            type Token<'a> = <Self::Parameters<
682                'a,
683            > as alloy_sol_types::SolType>::Token<'a>;
684            type Return = alloy::sol_types::private::Address;
685            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
686            type ReturnToken<'a> = <Self::ReturnTuple<
687                'a,
688            > as alloy_sol_types::SolType>::Token<'a>;
689            const SIGNATURE: &'static str = "newApplication(address,address,bytes32,bytes,bytes32)";
690            const SELECTOR: [u8; 4] = [44u8, 195u8, 239u8, 124u8];
691            #[inline]
692            fn new<'a>(
693                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
694            ) -> Self {
695                tuple.into()
696            }
697            #[inline]
698            fn tokenize(&self) -> Self::Token<'_> {
699                (
700                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
701                        &self.outputsMerkleRootValidator,
702                    ),
703                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
704                        &self.appOwner,
705                    ),
706                    <alloy::sol_types::sol_data::FixedBytes<
707                        32,
708                    > as alloy_sol_types::SolType>::tokenize(&self.templateHash),
709                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
710                        &self.dataAvailability,
711                    ),
712                    <alloy::sol_types::sol_data::FixedBytes<
713                        32,
714                    > as alloy_sol_types::SolType>::tokenize(&self.salt),
715                )
716            }
717            #[inline]
718            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
719                (
720                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
721                        ret,
722                    ),
723                )
724            }
725            #[inline]
726            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
727                <Self::ReturnTuple<
728                    '_,
729                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
730                    .map(|r| {
731                        let r: newApplication_0Return = r.into();
732                        r._0
733                    })
734            }
735            #[inline]
736            fn abi_decode_returns_validate(
737                data: &[u8],
738            ) -> alloy_sol_types::Result<Self::Return> {
739                <Self::ReturnTuple<
740                    '_,
741                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
742                    .map(|r| {
743                        let r: newApplication_0Return = r.into();
744                        r._0
745                    })
746            }
747        }
748    };
749    #[derive(serde::Serialize, serde::Deserialize)]
750    #[derive(Default, Debug, PartialEq, Eq, Hash)]
751    /**Function with signature `newApplication(address,address,bytes32,bytes)` and selector `0x8d02370d`.
752```solidity
753function newApplication(address outputsMerkleRootValidator, address appOwner, bytes32 templateHash, bytes memory dataAvailability) external returns (address);
754```*/
755    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
756    #[derive(Clone)]
757    pub struct newApplication_1Call {
758        #[allow(missing_docs)]
759        pub outputsMerkleRootValidator: alloy::sol_types::private::Address,
760        #[allow(missing_docs)]
761        pub appOwner: alloy::sol_types::private::Address,
762        #[allow(missing_docs)]
763        pub templateHash: alloy::sol_types::private::FixedBytes<32>,
764        #[allow(missing_docs)]
765        pub dataAvailability: alloy::sol_types::private::Bytes,
766    }
767    #[derive(serde::Serialize, serde::Deserialize)]
768    #[derive(Default, Debug, PartialEq, Eq, Hash)]
769    ///Container type for the return parameters of the [`newApplication(address,address,bytes32,bytes)`](newApplication_1Call) function.
770    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
771    #[derive(Clone)]
772    pub struct newApplication_1Return {
773        #[allow(missing_docs)]
774        pub _0: alloy::sol_types::private::Address,
775    }
776    #[allow(
777        non_camel_case_types,
778        non_snake_case,
779        clippy::pub_underscore_fields,
780        clippy::style
781    )]
782    const _: () = {
783        use alloy::sol_types as alloy_sol_types;
784        {
785            #[doc(hidden)]
786            #[allow(dead_code)]
787            type UnderlyingSolTuple<'a> = (
788                alloy::sol_types::sol_data::Address,
789                alloy::sol_types::sol_data::Address,
790                alloy::sol_types::sol_data::FixedBytes<32>,
791                alloy::sol_types::sol_data::Bytes,
792            );
793            #[doc(hidden)]
794            type UnderlyingRustTuple<'a> = (
795                alloy::sol_types::private::Address,
796                alloy::sol_types::private::Address,
797                alloy::sol_types::private::FixedBytes<32>,
798                alloy::sol_types::private::Bytes,
799            );
800            #[cfg(test)]
801            #[allow(dead_code, unreachable_patterns)]
802            fn _type_assertion(
803                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
804            ) {
805                match _t {
806                    alloy_sol_types::private::AssertTypeEq::<
807                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
808                    >(_) => {}
809                }
810            }
811            #[automatically_derived]
812            #[doc(hidden)]
813            impl ::core::convert::From<newApplication_1Call>
814            for UnderlyingRustTuple<'_> {
815                fn from(value: newApplication_1Call) -> Self {
816                    (
817                        value.outputsMerkleRootValidator,
818                        value.appOwner,
819                        value.templateHash,
820                        value.dataAvailability,
821                    )
822                }
823            }
824            #[automatically_derived]
825            #[doc(hidden)]
826            impl ::core::convert::From<UnderlyingRustTuple<'_>>
827            for newApplication_1Call {
828                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
829                    Self {
830                        outputsMerkleRootValidator: tuple.0,
831                        appOwner: tuple.1,
832                        templateHash: tuple.2,
833                        dataAvailability: tuple.3,
834                    }
835                }
836            }
837        }
838        {
839            #[doc(hidden)]
840            #[allow(dead_code)]
841            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
842            #[doc(hidden)]
843            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
844            #[cfg(test)]
845            #[allow(dead_code, unreachable_patterns)]
846            fn _type_assertion(
847                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
848            ) {
849                match _t {
850                    alloy_sol_types::private::AssertTypeEq::<
851                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
852                    >(_) => {}
853                }
854            }
855            #[automatically_derived]
856            #[doc(hidden)]
857            impl ::core::convert::From<newApplication_1Return>
858            for UnderlyingRustTuple<'_> {
859                fn from(value: newApplication_1Return) -> Self {
860                    (value._0,)
861                }
862            }
863            #[automatically_derived]
864            #[doc(hidden)]
865            impl ::core::convert::From<UnderlyingRustTuple<'_>>
866            for newApplication_1Return {
867                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
868                    Self { _0: tuple.0 }
869                }
870            }
871        }
872        #[automatically_derived]
873        impl alloy_sol_types::SolCall for newApplication_1Call {
874            type Parameters<'a> = (
875                alloy::sol_types::sol_data::Address,
876                alloy::sol_types::sol_data::Address,
877                alloy::sol_types::sol_data::FixedBytes<32>,
878                alloy::sol_types::sol_data::Bytes,
879            );
880            type Token<'a> = <Self::Parameters<
881                'a,
882            > as alloy_sol_types::SolType>::Token<'a>;
883            type Return = alloy::sol_types::private::Address;
884            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
885            type ReturnToken<'a> = <Self::ReturnTuple<
886                'a,
887            > as alloy_sol_types::SolType>::Token<'a>;
888            const SIGNATURE: &'static str = "newApplication(address,address,bytes32,bytes)";
889            const SELECTOR: [u8; 4] = [141u8, 2u8, 55u8, 13u8];
890            #[inline]
891            fn new<'a>(
892                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
893            ) -> Self {
894                tuple.into()
895            }
896            #[inline]
897            fn tokenize(&self) -> Self::Token<'_> {
898                (
899                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
900                        &self.outputsMerkleRootValidator,
901                    ),
902                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
903                        &self.appOwner,
904                    ),
905                    <alloy::sol_types::sol_data::FixedBytes<
906                        32,
907                    > as alloy_sol_types::SolType>::tokenize(&self.templateHash),
908                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
909                        &self.dataAvailability,
910                    ),
911                )
912            }
913            #[inline]
914            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
915                (
916                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
917                        ret,
918                    ),
919                )
920            }
921            #[inline]
922            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
923                <Self::ReturnTuple<
924                    '_,
925                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
926                    .map(|r| {
927                        let r: newApplication_1Return = r.into();
928                        r._0
929                    })
930            }
931            #[inline]
932            fn abi_decode_returns_validate(
933                data: &[u8],
934            ) -> alloy_sol_types::Result<Self::Return> {
935                <Self::ReturnTuple<
936                    '_,
937                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
938                    .map(|r| {
939                        let r: newApplication_1Return = r.into();
940                        r._0
941                    })
942            }
943        }
944    };
945    ///Container for all the [`ApplicationFactory`](self) function calls.
946    #[derive(Clone)]
947    #[derive(serde::Serialize, serde::Deserialize)]
948    #[derive()]
949    pub enum ApplicationFactoryCalls {
950        #[allow(missing_docs)]
951        calculateApplicationAddress(calculateApplicationAddressCall),
952        #[allow(missing_docs)]
953        newApplication_0(newApplication_0Call),
954        #[allow(missing_docs)]
955        newApplication_1(newApplication_1Call),
956    }
957    impl ApplicationFactoryCalls {
958        /// All the selectors of this enum.
959        ///
960        /// Note that the selectors might not be in the same order as the variants.
961        /// No guarantees are made about the order of the selectors.
962        ///
963        /// Prefer using `SolInterface` methods instead.
964        pub const SELECTORS: &'static [[u8; 4usize]] = &[
965            [44u8, 195u8, 239u8, 124u8],
966            [66u8, 105u8, 102u8, 123u8],
967            [141u8, 2u8, 55u8, 13u8],
968        ];
969        /// The names of the variants in the same order as `SELECTORS`.
970        pub const VARIANT_NAMES: &'static [&'static str] = &[
971            ::core::stringify!(newApplication_0),
972            ::core::stringify!(calculateApplicationAddress),
973            ::core::stringify!(newApplication_1),
974        ];
975        /// The signatures in the same order as `SELECTORS`.
976        pub const SIGNATURES: &'static [&'static str] = &[
977            <newApplication_0Call as alloy_sol_types::SolCall>::SIGNATURE,
978            <calculateApplicationAddressCall as alloy_sol_types::SolCall>::SIGNATURE,
979            <newApplication_1Call as alloy_sol_types::SolCall>::SIGNATURE,
980        ];
981        /// Returns the signature for the given selector, if known.
982        #[inline]
983        pub fn signature_by_selector(
984            selector: [u8; 4usize],
985        ) -> ::core::option::Option<&'static str> {
986            match Self::SELECTORS.binary_search(&selector) {
987                ::core::result::Result::Ok(idx) => {
988                    ::core::option::Option::Some(Self::SIGNATURES[idx])
989                }
990                ::core::result::Result::Err(_) => ::core::option::Option::None,
991            }
992        }
993        /// Returns the enum variant name for the given selector, if known.
994        #[inline]
995        pub fn name_by_selector(
996            selector: [u8; 4usize],
997        ) -> ::core::option::Option<&'static str> {
998            let sig = Self::signature_by_selector(selector)?;
999            sig.split_once('(').map(|(name, _)| name)
1000        }
1001    }
1002    #[automatically_derived]
1003    impl alloy_sol_types::SolInterface for ApplicationFactoryCalls {
1004        const NAME: &'static str = "ApplicationFactoryCalls";
1005        const MIN_DATA_LENGTH: usize = 160usize;
1006        const COUNT: usize = 3usize;
1007        #[inline]
1008        fn selector(&self) -> [u8; 4] {
1009            match self {
1010                Self::calculateApplicationAddress(_) => {
1011                    <calculateApplicationAddressCall as alloy_sol_types::SolCall>::SELECTOR
1012                }
1013                Self::newApplication_0(_) => {
1014                    <newApplication_0Call as alloy_sol_types::SolCall>::SELECTOR
1015                }
1016                Self::newApplication_1(_) => {
1017                    <newApplication_1Call as alloy_sol_types::SolCall>::SELECTOR
1018                }
1019            }
1020        }
1021        #[inline]
1022        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
1023            Self::SELECTORS.get(i).copied()
1024        }
1025        #[inline]
1026        fn valid_selector(selector: [u8; 4]) -> bool {
1027            Self::SELECTORS.binary_search(&selector).is_ok()
1028        }
1029        #[inline]
1030        #[allow(non_snake_case)]
1031        fn abi_decode_raw(
1032            selector: [u8; 4],
1033            data: &[u8],
1034        ) -> alloy_sol_types::Result<Self> {
1035            static DECODE_SHIMS: &[fn(
1036                &[u8],
1037            ) -> alloy_sol_types::Result<ApplicationFactoryCalls>] = &[
1038                {
1039                    fn newApplication_0(
1040                        data: &[u8],
1041                    ) -> alloy_sol_types::Result<ApplicationFactoryCalls> {
1042                        <newApplication_0Call as alloy_sol_types::SolCall>::abi_decode_raw(
1043                                data,
1044                            )
1045                            .map(ApplicationFactoryCalls::newApplication_0)
1046                    }
1047                    newApplication_0
1048                },
1049                {
1050                    fn calculateApplicationAddress(
1051                        data: &[u8],
1052                    ) -> alloy_sol_types::Result<ApplicationFactoryCalls> {
1053                        <calculateApplicationAddressCall as alloy_sol_types::SolCall>::abi_decode_raw(
1054                                data,
1055                            )
1056                            .map(ApplicationFactoryCalls::calculateApplicationAddress)
1057                    }
1058                    calculateApplicationAddress
1059                },
1060                {
1061                    fn newApplication_1(
1062                        data: &[u8],
1063                    ) -> alloy_sol_types::Result<ApplicationFactoryCalls> {
1064                        <newApplication_1Call as alloy_sol_types::SolCall>::abi_decode_raw(
1065                                data,
1066                            )
1067                            .map(ApplicationFactoryCalls::newApplication_1)
1068                    }
1069                    newApplication_1
1070                },
1071            ];
1072            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
1073                return Err(
1074                    alloy_sol_types::Error::unknown_selector(
1075                        <Self as alloy_sol_types::SolInterface>::NAME,
1076                        selector,
1077                    ),
1078                );
1079            };
1080            DECODE_SHIMS[idx](data)
1081        }
1082        #[inline]
1083        #[allow(non_snake_case)]
1084        fn abi_decode_raw_validate(
1085            selector: [u8; 4],
1086            data: &[u8],
1087        ) -> alloy_sol_types::Result<Self> {
1088            static DECODE_VALIDATE_SHIMS: &[fn(
1089                &[u8],
1090            ) -> alloy_sol_types::Result<ApplicationFactoryCalls>] = &[
1091                {
1092                    fn newApplication_0(
1093                        data: &[u8],
1094                    ) -> alloy_sol_types::Result<ApplicationFactoryCalls> {
1095                        <newApplication_0Call as alloy_sol_types::SolCall>::abi_decode_raw_validate(
1096                                data,
1097                            )
1098                            .map(ApplicationFactoryCalls::newApplication_0)
1099                    }
1100                    newApplication_0
1101                },
1102                {
1103                    fn calculateApplicationAddress(
1104                        data: &[u8],
1105                    ) -> alloy_sol_types::Result<ApplicationFactoryCalls> {
1106                        <calculateApplicationAddressCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
1107                                data,
1108                            )
1109                            .map(ApplicationFactoryCalls::calculateApplicationAddress)
1110                    }
1111                    calculateApplicationAddress
1112                },
1113                {
1114                    fn newApplication_1(
1115                        data: &[u8],
1116                    ) -> alloy_sol_types::Result<ApplicationFactoryCalls> {
1117                        <newApplication_1Call as alloy_sol_types::SolCall>::abi_decode_raw_validate(
1118                                data,
1119                            )
1120                            .map(ApplicationFactoryCalls::newApplication_1)
1121                    }
1122                    newApplication_1
1123                },
1124            ];
1125            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
1126                return Err(
1127                    alloy_sol_types::Error::unknown_selector(
1128                        <Self as alloy_sol_types::SolInterface>::NAME,
1129                        selector,
1130                    ),
1131                );
1132            };
1133            DECODE_VALIDATE_SHIMS[idx](data)
1134        }
1135        #[inline]
1136        fn abi_encoded_size(&self) -> usize {
1137            match self {
1138                Self::calculateApplicationAddress(inner) => {
1139                    <calculateApplicationAddressCall as alloy_sol_types::SolCall>::abi_encoded_size(
1140                        inner,
1141                    )
1142                }
1143                Self::newApplication_0(inner) => {
1144                    <newApplication_0Call as alloy_sol_types::SolCall>::abi_encoded_size(
1145                        inner,
1146                    )
1147                }
1148                Self::newApplication_1(inner) => {
1149                    <newApplication_1Call as alloy_sol_types::SolCall>::abi_encoded_size(
1150                        inner,
1151                    )
1152                }
1153            }
1154        }
1155        #[inline]
1156        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
1157            match self {
1158                Self::calculateApplicationAddress(inner) => {
1159                    <calculateApplicationAddressCall as alloy_sol_types::SolCall>::abi_encode_raw(
1160                        inner,
1161                        out,
1162                    )
1163                }
1164                Self::newApplication_0(inner) => {
1165                    <newApplication_0Call as alloy_sol_types::SolCall>::abi_encode_raw(
1166                        inner,
1167                        out,
1168                    )
1169                }
1170                Self::newApplication_1(inner) => {
1171                    <newApplication_1Call as alloy_sol_types::SolCall>::abi_encode_raw(
1172                        inner,
1173                        out,
1174                    )
1175                }
1176            }
1177        }
1178    }
1179    ///Container for all the [`ApplicationFactory`](self) events.
1180    #[derive(Clone)]
1181    #[derive(serde::Serialize, serde::Deserialize)]
1182    #[derive(Debug, PartialEq, Eq, Hash)]
1183    pub enum ApplicationFactoryEvents {
1184        #[allow(missing_docs)]
1185        ApplicationCreated(ApplicationCreated),
1186    }
1187    impl ApplicationFactoryEvents {
1188        /// All the selectors of this enum.
1189        ///
1190        /// Note that the selectors might not be in the same order as the variants.
1191        /// No guarantees are made about the order of the selectors.
1192        ///
1193        /// Prefer using `SolInterface` methods instead.
1194        pub const SELECTORS: &'static [[u8; 32usize]] = &[
1195            [
1196                210u8, 145u8, 255u8, 233u8, 67u8, 111u8, 44u8, 87u8, 213u8, 206u8, 62u8,
1197                135u8, 237u8, 51u8, 87u8, 111u8, 128u8, 16u8, 83u8, 148u8, 102u8, 81u8,
1198                162u8, 251u8, 79u8, 236u8, 90u8, 64u8, 108u8, 246u8, 140u8, 197u8,
1199            ],
1200        ];
1201        /// The names of the variants in the same order as `SELECTORS`.
1202        pub const VARIANT_NAMES: &'static [&'static str] = &[
1203            ::core::stringify!(ApplicationCreated),
1204        ];
1205        /// The signatures in the same order as `SELECTORS`.
1206        pub const SIGNATURES: &'static [&'static str] = &[
1207            <ApplicationCreated as alloy_sol_types::SolEvent>::SIGNATURE,
1208        ];
1209        /// Returns the signature for the given selector, if known.
1210        #[inline]
1211        pub fn signature_by_selector(
1212            selector: [u8; 32usize],
1213        ) -> ::core::option::Option<&'static str> {
1214            match Self::SELECTORS.binary_search(&selector) {
1215                ::core::result::Result::Ok(idx) => {
1216                    ::core::option::Option::Some(Self::SIGNATURES[idx])
1217                }
1218                ::core::result::Result::Err(_) => ::core::option::Option::None,
1219            }
1220        }
1221        /// Returns the enum variant name for the given selector, if known.
1222        #[inline]
1223        pub fn name_by_selector(
1224            selector: [u8; 32usize],
1225        ) -> ::core::option::Option<&'static str> {
1226            let sig = Self::signature_by_selector(selector)?;
1227            sig.split_once('(').map(|(name, _)| name)
1228        }
1229    }
1230    #[automatically_derived]
1231    impl alloy_sol_types::SolEventInterface for ApplicationFactoryEvents {
1232        const NAME: &'static str = "ApplicationFactoryEvents";
1233        const COUNT: usize = 1usize;
1234        fn decode_raw_log(
1235            topics: &[alloy_sol_types::Word],
1236            data: &[u8],
1237        ) -> alloy_sol_types::Result<Self> {
1238            match topics.first().copied() {
1239                Some(
1240                    <ApplicationCreated as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
1241                ) => {
1242                    <ApplicationCreated as alloy_sol_types::SolEvent>::decode_raw_log(
1243                            topics,
1244                            data,
1245                        )
1246                        .map(Self::ApplicationCreated)
1247                }
1248                _ => {
1249                    alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog {
1250                        name: <Self as alloy_sol_types::SolEventInterface>::NAME,
1251                        log: alloy_sol_types::private::Box::new(
1252                            alloy_sol_types::private::LogData::new_unchecked(
1253                                topics.to_vec(),
1254                                data.to_vec().into(),
1255                            ),
1256                        ),
1257                    })
1258                }
1259            }
1260        }
1261    }
1262    #[automatically_derived]
1263    impl alloy_sol_types::private::IntoLogData for ApplicationFactoryEvents {
1264        fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1265            match self {
1266                Self::ApplicationCreated(inner) => {
1267                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
1268                }
1269            }
1270        }
1271        fn into_log_data(self) -> alloy_sol_types::private::LogData {
1272            match self {
1273                Self::ApplicationCreated(inner) => {
1274                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
1275                }
1276            }
1277        }
1278    }
1279    use alloy::contract as alloy_contract;
1280    /**Creates a new wrapper around an on-chain [`ApplicationFactory`](self) contract instance.
1281
1282See the [wrapper's documentation](`ApplicationFactoryInstance`) for more details.*/
1283    #[inline]
1284    pub const fn new<
1285        P: alloy_contract::private::Provider<N>,
1286        N: alloy_contract::private::Network,
1287    >(
1288        address: alloy_sol_types::private::Address,
1289        __provider: P,
1290    ) -> ApplicationFactoryInstance<P, N> {
1291        ApplicationFactoryInstance::<P, N>::new(address, __provider)
1292    }
1293    /**Deploys this contract using the given `provider` and constructor arguments, if any.
1294
1295Returns a new instance of the contract, if the deployment was successful.
1296
1297For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
1298    #[inline]
1299    pub fn deploy<
1300        P: alloy_contract::private::Provider<N>,
1301        N: alloy_contract::private::Network,
1302    >(
1303        __provider: P,
1304    ) -> impl ::core::future::Future<
1305        Output = alloy_contract::Result<ApplicationFactoryInstance<P, N>>,
1306    > {
1307        ApplicationFactoryInstance::<P, N>::deploy(__provider)
1308    }
1309    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
1310and constructor arguments, if any.
1311
1312This is a simple wrapper around creating a `RawCallBuilder` with the data set to
1313the bytecode concatenated with the constructor's ABI-encoded arguments.*/
1314    #[inline]
1315    pub fn deploy_builder<
1316        P: alloy_contract::private::Provider<N>,
1317        N: alloy_contract::private::Network,
1318    >(__provider: P) -> alloy_contract::RawCallBuilder<P, N> {
1319        ApplicationFactoryInstance::<P, N>::deploy_builder(__provider)
1320    }
1321    /**A [`ApplicationFactory`](self) instance.
1322
1323Contains type-safe methods for interacting with an on-chain instance of the
1324[`ApplicationFactory`](self) contract located at a given `address`, using a given
1325provider `P`.
1326
1327If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
1328documentation on how to provide it), the `deploy` and `deploy_builder` methods can
1329be used to deploy a new instance of the contract.
1330
1331See the [module-level documentation](self) for all the available methods.*/
1332    #[derive(Clone)]
1333    pub struct ApplicationFactoryInstance<P, N = alloy_contract::private::Ethereum> {
1334        address: alloy_sol_types::private::Address,
1335        provider: P,
1336        _network: ::core::marker::PhantomData<N>,
1337    }
1338    #[automatically_derived]
1339    impl<P, N> ::core::fmt::Debug for ApplicationFactoryInstance<P, N> {
1340        #[inline]
1341        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
1342            f.debug_tuple("ApplicationFactoryInstance").field(&self.address).finish()
1343        }
1344    }
1345    /// Instantiation and getters/setters.
1346    impl<
1347        P: alloy_contract::private::Provider<N>,
1348        N: alloy_contract::private::Network,
1349    > ApplicationFactoryInstance<P, N> {
1350        /**Creates a new wrapper around an on-chain [`ApplicationFactory`](self) contract instance.
1351
1352See the [wrapper's documentation](`ApplicationFactoryInstance`) for more details.*/
1353        #[inline]
1354        pub const fn new(
1355            address: alloy_sol_types::private::Address,
1356            __provider: P,
1357        ) -> Self {
1358            Self {
1359                address,
1360                provider: __provider,
1361                _network: ::core::marker::PhantomData,
1362            }
1363        }
1364        /**Deploys this contract using the given `provider` and constructor arguments, if any.
1365
1366Returns a new instance of the contract, if the deployment was successful.
1367
1368For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
1369        #[inline]
1370        pub async fn deploy(
1371            __provider: P,
1372        ) -> alloy_contract::Result<ApplicationFactoryInstance<P, N>> {
1373            let call_builder = Self::deploy_builder(__provider);
1374            let contract_address = call_builder.deploy().await?;
1375            Ok(Self::new(contract_address, call_builder.provider))
1376        }
1377        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
1378and constructor arguments, if any.
1379
1380This is a simple wrapper around creating a `RawCallBuilder` with the data set to
1381the bytecode concatenated with the constructor's ABI-encoded arguments.*/
1382        #[inline]
1383        pub fn deploy_builder(__provider: P) -> alloy_contract::RawCallBuilder<P, N> {
1384            alloy_contract::RawCallBuilder::new_raw_deploy(
1385                __provider,
1386                ::core::clone::Clone::clone(&BYTECODE),
1387            )
1388        }
1389        /// Returns a reference to the address.
1390        #[inline]
1391        pub const fn address(&self) -> &alloy_sol_types::private::Address {
1392            &self.address
1393        }
1394        /// Sets the address.
1395        #[inline]
1396        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
1397            self.address = address;
1398        }
1399        /// Sets the address and returns `self`.
1400        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
1401            self.set_address(address);
1402            self
1403        }
1404        /// Returns a reference to the provider.
1405        #[inline]
1406        pub const fn provider(&self) -> &P {
1407            &self.provider
1408        }
1409    }
1410    impl<P: ::core::clone::Clone, N> ApplicationFactoryInstance<&P, N> {
1411        /// Clones the provider and returns a new instance with the cloned provider.
1412        #[inline]
1413        pub fn with_cloned_provider(self) -> ApplicationFactoryInstance<P, N> {
1414            ApplicationFactoryInstance {
1415                address: self.address,
1416                provider: ::core::clone::Clone::clone(&self.provider),
1417                _network: ::core::marker::PhantomData,
1418            }
1419        }
1420    }
1421    /// Function calls.
1422    impl<
1423        P: alloy_contract::private::Provider<N>,
1424        N: alloy_contract::private::Network,
1425    > ApplicationFactoryInstance<P, N> {
1426        /// Creates a new call builder using this contract instance's provider and address.
1427        ///
1428        /// Note that the call can be any function call, not just those defined in this
1429        /// contract. Prefer using the other methods for building type-safe contract calls.
1430        pub fn call_builder<C: alloy_sol_types::SolCall>(
1431            &self,
1432            call: &C,
1433        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
1434            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
1435        }
1436        ///Creates a new call builder for the [`calculateApplicationAddress`] function.
1437        pub fn calculateApplicationAddress(
1438            &self,
1439            outputsMerkleRootValidator: alloy::sol_types::private::Address,
1440            appOwner: alloy::sol_types::private::Address,
1441            templateHash: alloy::sol_types::private::FixedBytes<32>,
1442            dataAvailability: alloy::sol_types::private::Bytes,
1443            salt: alloy::sol_types::private::FixedBytes<32>,
1444        ) -> alloy_contract::SolCallBuilder<&P, calculateApplicationAddressCall, N> {
1445            self.call_builder(
1446                &calculateApplicationAddressCall {
1447                    outputsMerkleRootValidator,
1448                    appOwner,
1449                    templateHash,
1450                    dataAvailability,
1451                    salt,
1452                },
1453            )
1454        }
1455        ///Creates a new call builder for the [`newApplication_0`] function.
1456        pub fn newApplication_0(
1457            &self,
1458            outputsMerkleRootValidator: alloy::sol_types::private::Address,
1459            appOwner: alloy::sol_types::private::Address,
1460            templateHash: alloy::sol_types::private::FixedBytes<32>,
1461            dataAvailability: alloy::sol_types::private::Bytes,
1462            salt: alloy::sol_types::private::FixedBytes<32>,
1463        ) -> alloy_contract::SolCallBuilder<&P, newApplication_0Call, N> {
1464            self.call_builder(
1465                &newApplication_0Call {
1466                    outputsMerkleRootValidator,
1467                    appOwner,
1468                    templateHash,
1469                    dataAvailability,
1470                    salt,
1471                },
1472            )
1473        }
1474        ///Creates a new call builder for the [`newApplication_1`] function.
1475        pub fn newApplication_1(
1476            &self,
1477            outputsMerkleRootValidator: alloy::sol_types::private::Address,
1478            appOwner: alloy::sol_types::private::Address,
1479            templateHash: alloy::sol_types::private::FixedBytes<32>,
1480            dataAvailability: alloy::sol_types::private::Bytes,
1481        ) -> alloy_contract::SolCallBuilder<&P, newApplication_1Call, N> {
1482            self.call_builder(
1483                &newApplication_1Call {
1484                    outputsMerkleRootValidator,
1485                    appOwner,
1486                    templateHash,
1487                    dataAvailability,
1488                },
1489            )
1490        }
1491    }
1492    /// Event filters.
1493    impl<
1494        P: alloy_contract::private::Provider<N>,
1495        N: alloy_contract::private::Network,
1496    > ApplicationFactoryInstance<P, N> {
1497        /// Creates a new event filter using this contract instance's provider and address.
1498        ///
1499        /// Note that the type can be any event, not just those defined in this contract.
1500        /// Prefer using the other methods for building type-safe event filters.
1501        pub fn event_filter<E: alloy_sol_types::SolEvent>(
1502            &self,
1503        ) -> alloy_contract::Event<&P, E, N> {
1504            alloy_contract::Event::new_sol(&self.provider, &self.address)
1505        }
1506        ///Creates a new event filter for the [`ApplicationCreated`] event.
1507        pub fn ApplicationCreated_filter(
1508            &self,
1509        ) -> alloy_contract::Event<&P, ApplicationCreated, N> {
1510            self.event_filter::<ApplicationCreated>()
1511        }
1512    }
1513}