hotshot_contract_adapter/bindings/
plonk_verifier.rs

1///Module containing a contract's types and functions.
2/**
3
4```solidity
5library BN254 {
6    type BaseField is uint256;
7    type ScalarField is uint256;
8    struct G1Point { BaseField x; BaseField y; }
9}
10```*/
11#[allow(
12    non_camel_case_types,
13    non_snake_case,
14    clippy::pub_underscore_fields,
15    clippy::style,
16    clippy::empty_structs_with_brackets
17)]
18pub mod BN254 {
19    use super::*;
20    use alloy::sol_types as alloy_sol_types;
21    #[derive(serde::Serialize, serde::Deserialize)]
22    #[derive(Default, Debug, PartialEq, Eq, Hash)]
23    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
24    #[derive(Clone)]
25    pub struct BaseField(alloy::sol_types::private::primitives::aliases::U256);
26    const _: () = {
27        use alloy::sol_types as alloy_sol_types;
28        #[automatically_derived]
29        impl alloy_sol_types::private::SolTypeValue<BaseField>
30        for alloy::sol_types::private::primitives::aliases::U256 {
31            #[inline]
32            fn stv_to_tokens(
33                &self,
34            ) -> <alloy::sol_types::sol_data::Uint<
35                256,
36            > as alloy_sol_types::SolType>::Token<'_> {
37                alloy_sol_types::private::SolTypeValue::<
38                    alloy::sol_types::sol_data::Uint<256>,
39                >::stv_to_tokens(self)
40            }
41            #[inline]
42            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
43                <alloy::sol_types::sol_data::Uint<
44                    256,
45                > as alloy_sol_types::SolType>::tokenize(self)
46                    .0
47            }
48            #[inline]
49            fn stv_abi_encode_packed_to(
50                &self,
51                out: &mut alloy_sol_types::private::Vec<u8>,
52            ) {
53                <alloy::sol_types::sol_data::Uint<
54                    256,
55                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
56            }
57            #[inline]
58            fn stv_abi_packed_encoded_size(&self) -> usize {
59                <alloy::sol_types::sol_data::Uint<
60                    256,
61                > as alloy_sol_types::SolType>::abi_encoded_size(self)
62            }
63        }
64        #[automatically_derived]
65        impl BaseField {
66            /// The Solidity type name.
67            pub const NAME: &'static str = stringify!(@ name);
68            /// Convert from the underlying value type.
69            #[inline]
70            pub const fn from_underlying(
71                value: alloy::sol_types::private::primitives::aliases::U256,
72            ) -> Self {
73                Self(value)
74            }
75            /// Return the underlying value.
76            #[inline]
77            pub const fn into_underlying(
78                self,
79            ) -> alloy::sol_types::private::primitives::aliases::U256 {
80                self.0
81            }
82            /// Return the single encoding of this value, delegating to the
83            /// underlying type.
84            #[inline]
85            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
86                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
87            }
88            /// Return the packed encoding of this value, delegating to the
89            /// underlying type.
90            #[inline]
91            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
92                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
93            }
94        }
95        #[automatically_derived]
96        impl From<alloy::sol_types::private::primitives::aliases::U256> for BaseField {
97            fn from(
98                value: alloy::sol_types::private::primitives::aliases::U256,
99            ) -> Self {
100                Self::from_underlying(value)
101            }
102        }
103        #[automatically_derived]
104        impl From<BaseField> for alloy::sol_types::private::primitives::aliases::U256 {
105            fn from(value: BaseField) -> Self {
106                value.into_underlying()
107            }
108        }
109        #[automatically_derived]
110        impl alloy_sol_types::SolType for BaseField {
111            type RustType = alloy::sol_types::private::primitives::aliases::U256;
112            type Token<'a> = <alloy::sol_types::sol_data::Uint<
113                256,
114            > as alloy_sol_types::SolType>::Token<'a>;
115            const SOL_NAME: &'static str = Self::NAME;
116            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
117                256,
118            > as alloy_sol_types::SolType>::ENCODED_SIZE;
119            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
120                256,
121            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
122            #[inline]
123            fn valid_token(token: &Self::Token<'_>) -> bool {
124                Self::type_check(token).is_ok()
125            }
126            #[inline]
127            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
128                <alloy::sol_types::sol_data::Uint<
129                    256,
130                > as alloy_sol_types::SolType>::type_check(token)
131            }
132            #[inline]
133            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
134                <alloy::sol_types::sol_data::Uint<
135                    256,
136                > as alloy_sol_types::SolType>::detokenize(token)
137            }
138        }
139        #[automatically_derived]
140        impl alloy_sol_types::EventTopic for BaseField {
141            #[inline]
142            fn topic_preimage_length(rust: &Self::RustType) -> usize {
143                <alloy::sol_types::sol_data::Uint<
144                    256,
145                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
146            }
147            #[inline]
148            fn encode_topic_preimage(
149                rust: &Self::RustType,
150                out: &mut alloy_sol_types::private::Vec<u8>,
151            ) {
152                <alloy::sol_types::sol_data::Uint<
153                    256,
154                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
155            }
156            #[inline]
157            fn encode_topic(
158                rust: &Self::RustType,
159            ) -> alloy_sol_types::abi::token::WordToken {
160                <alloy::sol_types::sol_data::Uint<
161                    256,
162                > as alloy_sol_types::EventTopic>::encode_topic(rust)
163            }
164        }
165    };
166    #[derive(serde::Serialize, serde::Deserialize)]
167    #[derive(Default, Debug, PartialEq, Eq, Hash)]
168    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
169    #[derive(Clone)]
170    pub struct ScalarField(alloy::sol_types::private::primitives::aliases::U256);
171    const _: () = {
172        use alloy::sol_types as alloy_sol_types;
173        #[automatically_derived]
174        impl alloy_sol_types::private::SolTypeValue<ScalarField>
175        for alloy::sol_types::private::primitives::aliases::U256 {
176            #[inline]
177            fn stv_to_tokens(
178                &self,
179            ) -> <alloy::sol_types::sol_data::Uint<
180                256,
181            > as alloy_sol_types::SolType>::Token<'_> {
182                alloy_sol_types::private::SolTypeValue::<
183                    alloy::sol_types::sol_data::Uint<256>,
184                >::stv_to_tokens(self)
185            }
186            #[inline]
187            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
188                <alloy::sol_types::sol_data::Uint<
189                    256,
190                > as alloy_sol_types::SolType>::tokenize(self)
191                    .0
192            }
193            #[inline]
194            fn stv_abi_encode_packed_to(
195                &self,
196                out: &mut alloy_sol_types::private::Vec<u8>,
197            ) {
198                <alloy::sol_types::sol_data::Uint<
199                    256,
200                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
201            }
202            #[inline]
203            fn stv_abi_packed_encoded_size(&self) -> usize {
204                <alloy::sol_types::sol_data::Uint<
205                    256,
206                > as alloy_sol_types::SolType>::abi_encoded_size(self)
207            }
208        }
209        #[automatically_derived]
210        impl ScalarField {
211            /// The Solidity type name.
212            pub const NAME: &'static str = stringify!(@ name);
213            /// Convert from the underlying value type.
214            #[inline]
215            pub const fn from_underlying(
216                value: alloy::sol_types::private::primitives::aliases::U256,
217            ) -> Self {
218                Self(value)
219            }
220            /// Return the underlying value.
221            #[inline]
222            pub const fn into_underlying(
223                self,
224            ) -> alloy::sol_types::private::primitives::aliases::U256 {
225                self.0
226            }
227            /// Return the single encoding of this value, delegating to the
228            /// underlying type.
229            #[inline]
230            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
231                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
232            }
233            /// Return the packed encoding of this value, delegating to the
234            /// underlying type.
235            #[inline]
236            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
237                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
238            }
239        }
240        #[automatically_derived]
241        impl From<alloy::sol_types::private::primitives::aliases::U256> for ScalarField {
242            fn from(
243                value: alloy::sol_types::private::primitives::aliases::U256,
244            ) -> Self {
245                Self::from_underlying(value)
246            }
247        }
248        #[automatically_derived]
249        impl From<ScalarField> for alloy::sol_types::private::primitives::aliases::U256 {
250            fn from(value: ScalarField) -> Self {
251                value.into_underlying()
252            }
253        }
254        #[automatically_derived]
255        impl alloy_sol_types::SolType for ScalarField {
256            type RustType = alloy::sol_types::private::primitives::aliases::U256;
257            type Token<'a> = <alloy::sol_types::sol_data::Uint<
258                256,
259            > as alloy_sol_types::SolType>::Token<'a>;
260            const SOL_NAME: &'static str = Self::NAME;
261            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
262                256,
263            > as alloy_sol_types::SolType>::ENCODED_SIZE;
264            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
265                256,
266            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
267            #[inline]
268            fn valid_token(token: &Self::Token<'_>) -> bool {
269                Self::type_check(token).is_ok()
270            }
271            #[inline]
272            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
273                <alloy::sol_types::sol_data::Uint<
274                    256,
275                > as alloy_sol_types::SolType>::type_check(token)
276            }
277            #[inline]
278            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
279                <alloy::sol_types::sol_data::Uint<
280                    256,
281                > as alloy_sol_types::SolType>::detokenize(token)
282            }
283        }
284        #[automatically_derived]
285        impl alloy_sol_types::EventTopic for ScalarField {
286            #[inline]
287            fn topic_preimage_length(rust: &Self::RustType) -> usize {
288                <alloy::sol_types::sol_data::Uint<
289                    256,
290                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
291            }
292            #[inline]
293            fn encode_topic_preimage(
294                rust: &Self::RustType,
295                out: &mut alloy_sol_types::private::Vec<u8>,
296            ) {
297                <alloy::sol_types::sol_data::Uint<
298                    256,
299                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
300            }
301            #[inline]
302            fn encode_topic(
303                rust: &Self::RustType,
304            ) -> alloy_sol_types::abi::token::WordToken {
305                <alloy::sol_types::sol_data::Uint<
306                    256,
307                > as alloy_sol_types::EventTopic>::encode_topic(rust)
308            }
309        }
310    };
311    #[derive(serde::Serialize, serde::Deserialize)]
312    #[derive(Default, Debug, PartialEq, Eq, Hash)]
313    /**```solidity
314struct G1Point { BaseField x; BaseField y; }
315```*/
316    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
317    #[derive(Clone)]
318    pub struct G1Point {
319        #[allow(missing_docs)]
320        pub x: <BaseField as alloy::sol_types::SolType>::RustType,
321        #[allow(missing_docs)]
322        pub y: <BaseField as alloy::sol_types::SolType>::RustType,
323    }
324    #[allow(
325        non_camel_case_types,
326        non_snake_case,
327        clippy::pub_underscore_fields,
328        clippy::style
329    )]
330    const _: () = {
331        use alloy::sol_types as alloy_sol_types;
332        #[doc(hidden)]
333        type UnderlyingSolTuple<'a> = (BaseField, BaseField);
334        #[doc(hidden)]
335        type UnderlyingRustTuple<'a> = (
336            <BaseField as alloy::sol_types::SolType>::RustType,
337            <BaseField as alloy::sol_types::SolType>::RustType,
338        );
339        #[cfg(test)]
340        #[allow(dead_code, unreachable_patterns)]
341        fn _type_assertion(
342            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
343        ) {
344            match _t {
345                alloy_sol_types::private::AssertTypeEq::<
346                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
347                >(_) => {}
348            }
349        }
350        #[automatically_derived]
351        #[doc(hidden)]
352        impl ::core::convert::From<G1Point> for UnderlyingRustTuple<'_> {
353            fn from(value: G1Point) -> Self {
354                (value.x, value.y)
355            }
356        }
357        #[automatically_derived]
358        #[doc(hidden)]
359        impl ::core::convert::From<UnderlyingRustTuple<'_>> for G1Point {
360            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
361                Self { x: tuple.0, y: tuple.1 }
362            }
363        }
364        #[automatically_derived]
365        impl alloy_sol_types::SolValue for G1Point {
366            type SolType = Self;
367        }
368        #[automatically_derived]
369        impl alloy_sol_types::private::SolTypeValue<Self> for G1Point {
370            #[inline]
371            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
372                (
373                    <BaseField as alloy_sol_types::SolType>::tokenize(&self.x),
374                    <BaseField as alloy_sol_types::SolType>::tokenize(&self.y),
375                )
376            }
377            #[inline]
378            fn stv_abi_encoded_size(&self) -> usize {
379                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
380                    return size;
381                }
382                let tuple = <UnderlyingRustTuple<
383                    '_,
384                > as ::core::convert::From<Self>>::from(self.clone());
385                <UnderlyingSolTuple<
386                    '_,
387                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
388            }
389            #[inline]
390            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
391                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
392            }
393            #[inline]
394            fn stv_abi_encode_packed_to(
395                &self,
396                out: &mut alloy_sol_types::private::Vec<u8>,
397            ) {
398                let tuple = <UnderlyingRustTuple<
399                    '_,
400                > as ::core::convert::From<Self>>::from(self.clone());
401                <UnderlyingSolTuple<
402                    '_,
403                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
404            }
405            #[inline]
406            fn stv_abi_packed_encoded_size(&self) -> usize {
407                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
408                    return size;
409                }
410                let tuple = <UnderlyingRustTuple<
411                    '_,
412                > as ::core::convert::From<Self>>::from(self.clone());
413                <UnderlyingSolTuple<
414                    '_,
415                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
416            }
417        }
418        #[automatically_derived]
419        impl alloy_sol_types::SolType for G1Point {
420            type RustType = Self;
421            type Token<'a> = <UnderlyingSolTuple<
422                'a,
423            > as alloy_sol_types::SolType>::Token<'a>;
424            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
425            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
426                '_,
427            > as alloy_sol_types::SolType>::ENCODED_SIZE;
428            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
429                '_,
430            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
431            #[inline]
432            fn valid_token(token: &Self::Token<'_>) -> bool {
433                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
434            }
435            #[inline]
436            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
437                let tuple = <UnderlyingSolTuple<
438                    '_,
439                > as alloy_sol_types::SolType>::detokenize(token);
440                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
441            }
442        }
443        #[automatically_derived]
444        impl alloy_sol_types::SolStruct for G1Point {
445            const NAME: &'static str = "G1Point";
446            #[inline]
447            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
448                alloy_sol_types::private::Cow::Borrowed("G1Point(uint256 x,uint256 y)")
449            }
450            #[inline]
451            fn eip712_components() -> alloy_sol_types::private::Vec<
452                alloy_sol_types::private::Cow<'static, str>,
453            > {
454                alloy_sol_types::private::Vec::new()
455            }
456            #[inline]
457            fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
458                <Self as alloy_sol_types::SolStruct>::eip712_root_type()
459            }
460            #[inline]
461            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
462                [
463                    <BaseField as alloy_sol_types::SolType>::eip712_data_word(&self.x).0,
464                    <BaseField as alloy_sol_types::SolType>::eip712_data_word(&self.y).0,
465                ]
466                    .concat()
467            }
468        }
469        #[automatically_derived]
470        impl alloy_sol_types::EventTopic for G1Point {
471            #[inline]
472            fn topic_preimage_length(rust: &Self::RustType) -> usize {
473                0usize
474                    + <BaseField as alloy_sol_types::EventTopic>::topic_preimage_length(
475                        &rust.x,
476                    )
477                    + <BaseField as alloy_sol_types::EventTopic>::topic_preimage_length(
478                        &rust.y,
479                    )
480            }
481            #[inline]
482            fn encode_topic_preimage(
483                rust: &Self::RustType,
484                out: &mut alloy_sol_types::private::Vec<u8>,
485            ) {
486                out.reserve(
487                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
488                );
489                <BaseField as alloy_sol_types::EventTopic>::encode_topic_preimage(
490                    &rust.x,
491                    out,
492                );
493                <BaseField as alloy_sol_types::EventTopic>::encode_topic_preimage(
494                    &rust.y,
495                    out,
496                );
497            }
498            #[inline]
499            fn encode_topic(
500                rust: &Self::RustType,
501            ) -> alloy_sol_types::abi::token::WordToken {
502                let mut out = alloy_sol_types::private::Vec::new();
503                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
504                    rust,
505                    &mut out,
506                );
507                alloy_sol_types::abi::token::WordToken(
508                    alloy_sol_types::private::keccak256(out),
509                )
510            }
511        }
512    };
513    use alloy::contract as alloy_contract;
514    /**Creates a new wrapper around an on-chain [`BN254`](self) contract instance.
515
516See the [wrapper's documentation](`BN254Instance`) for more details.*/
517    #[inline]
518    pub const fn new<
519        P: alloy_contract::private::Provider<N>,
520        N: alloy_contract::private::Network,
521    >(address: alloy_sol_types::private::Address, provider: P) -> BN254Instance<P, N> {
522        BN254Instance::<P, N>::new(address, provider)
523    }
524    /**A [`BN254`](self) instance.
525
526Contains type-safe methods for interacting with an on-chain instance of the
527[`BN254`](self) contract located at a given `address`, using a given
528provider `P`.
529
530If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
531documentation on how to provide it), the `deploy` and `deploy_builder` methods can
532be used to deploy a new instance of the contract.
533
534See the [module-level documentation](self) for all the available methods.*/
535    #[derive(Clone)]
536    pub struct BN254Instance<P, N = alloy_contract::private::Ethereum> {
537        address: alloy_sol_types::private::Address,
538        provider: P,
539        _network: ::core::marker::PhantomData<N>,
540    }
541    #[automatically_derived]
542    impl<P, N> ::core::fmt::Debug for BN254Instance<P, N> {
543        #[inline]
544        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
545            f.debug_tuple("BN254Instance").field(&self.address).finish()
546        }
547    }
548    /// Instantiation and getters/setters.
549    #[automatically_derived]
550    impl<
551        P: alloy_contract::private::Provider<N>,
552        N: alloy_contract::private::Network,
553    > BN254Instance<P, N> {
554        /**Creates a new wrapper around an on-chain [`BN254`](self) contract instance.
555
556See the [wrapper's documentation](`BN254Instance`) for more details.*/
557        #[inline]
558        pub const fn new(
559            address: alloy_sol_types::private::Address,
560            provider: P,
561        ) -> Self {
562            Self {
563                address,
564                provider,
565                _network: ::core::marker::PhantomData,
566            }
567        }
568        /// Returns a reference to the address.
569        #[inline]
570        pub const fn address(&self) -> &alloy_sol_types::private::Address {
571            &self.address
572        }
573        /// Sets the address.
574        #[inline]
575        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
576            self.address = address;
577        }
578        /// Sets the address and returns `self`.
579        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
580            self.set_address(address);
581            self
582        }
583        /// Returns a reference to the provider.
584        #[inline]
585        pub const fn provider(&self) -> &P {
586            &self.provider
587        }
588    }
589    impl<P: ::core::clone::Clone, N> BN254Instance<&P, N> {
590        /// Clones the provider and returns a new instance with the cloned provider.
591        #[inline]
592        pub fn with_cloned_provider(self) -> BN254Instance<P, N> {
593            BN254Instance {
594                address: self.address,
595                provider: ::core::clone::Clone::clone(&self.provider),
596                _network: ::core::marker::PhantomData,
597            }
598        }
599    }
600    /// Function calls.
601    #[automatically_derived]
602    impl<
603        P: alloy_contract::private::Provider<N>,
604        N: alloy_contract::private::Network,
605    > BN254Instance<P, N> {
606        /// Creates a new call builder using this contract instance's provider and address.
607        ///
608        /// Note that the call can be any function call, not just those defined in this
609        /// contract. Prefer using the other methods for building type-safe contract calls.
610        pub fn call_builder<C: alloy_sol_types::SolCall>(
611            &self,
612            call: &C,
613        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
614            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
615        }
616    }
617    /// Event filters.
618    #[automatically_derived]
619    impl<
620        P: alloy_contract::private::Provider<N>,
621        N: alloy_contract::private::Network,
622    > BN254Instance<P, N> {
623        /// Creates a new event filter using this contract instance's provider and address.
624        ///
625        /// Note that the type can be any event, not just those defined in this contract.
626        /// Prefer using the other methods for building type-safe event filters.
627        pub fn event_filter<E: alloy_sol_types::SolEvent>(
628            &self,
629        ) -> alloy_contract::Event<&P, E, N> {
630            alloy_contract::Event::new_sol(&self.provider, &self.address)
631        }
632    }
633}
634///Module containing a contract's types and functions.
635/**
636
637```solidity
638library IPlonkVerifier {
639    struct PlonkProof { BN254.G1Point wire0; BN254.G1Point wire1; BN254.G1Point wire2; BN254.G1Point wire3; BN254.G1Point wire4; BN254.G1Point prodPerm; BN254.G1Point split0; BN254.G1Point split1; BN254.G1Point split2; BN254.G1Point split3; BN254.G1Point split4; BN254.G1Point zeta; BN254.G1Point zetaOmega; BN254.ScalarField wireEval0; BN254.ScalarField wireEval1; BN254.ScalarField wireEval2; BN254.ScalarField wireEval3; BN254.ScalarField wireEval4; BN254.ScalarField sigmaEval0; BN254.ScalarField sigmaEval1; BN254.ScalarField sigmaEval2; BN254.ScalarField sigmaEval3; BN254.ScalarField prodPermZetaOmegaEval; }
640    struct VerifyingKey { uint256 domainSize; uint256 numInputs; BN254.G1Point sigma0; BN254.G1Point sigma1; BN254.G1Point sigma2; BN254.G1Point sigma3; BN254.G1Point sigma4; BN254.G1Point q1; BN254.G1Point q2; BN254.G1Point q3; BN254.G1Point q4; BN254.G1Point qM12; BN254.G1Point qM34; BN254.G1Point qO; BN254.G1Point qC; BN254.G1Point qH1; BN254.G1Point qH2; BN254.G1Point qH3; BN254.G1Point qH4; BN254.G1Point qEcc; bytes32 g2LSB; bytes32 g2MSB; }
641}
642```*/
643#[allow(
644    non_camel_case_types,
645    non_snake_case,
646    clippy::pub_underscore_fields,
647    clippy::style,
648    clippy::empty_structs_with_brackets
649)]
650pub mod IPlonkVerifier {
651    use super::*;
652    use alloy::sol_types as alloy_sol_types;
653    #[derive(serde::Serialize, serde::Deserialize)]
654    #[derive()]
655    /**```solidity
656struct PlonkProof { BN254.G1Point wire0; BN254.G1Point wire1; BN254.G1Point wire2; BN254.G1Point wire3; BN254.G1Point wire4; BN254.G1Point prodPerm; BN254.G1Point split0; BN254.G1Point split1; BN254.G1Point split2; BN254.G1Point split3; BN254.G1Point split4; BN254.G1Point zeta; BN254.G1Point zetaOmega; BN254.ScalarField wireEval0; BN254.ScalarField wireEval1; BN254.ScalarField wireEval2; BN254.ScalarField wireEval3; BN254.ScalarField wireEval4; BN254.ScalarField sigmaEval0; BN254.ScalarField sigmaEval1; BN254.ScalarField sigmaEval2; BN254.ScalarField sigmaEval3; BN254.ScalarField prodPermZetaOmegaEval; }
657```*/
658    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
659    #[derive(Clone)]
660    pub struct PlonkProof {
661        #[allow(missing_docs)]
662        pub wire0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
663        #[allow(missing_docs)]
664        pub wire1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
665        #[allow(missing_docs)]
666        pub wire2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
667        #[allow(missing_docs)]
668        pub wire3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
669        #[allow(missing_docs)]
670        pub wire4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
671        #[allow(missing_docs)]
672        pub prodPerm: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
673        #[allow(missing_docs)]
674        pub split0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
675        #[allow(missing_docs)]
676        pub split1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
677        #[allow(missing_docs)]
678        pub split2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
679        #[allow(missing_docs)]
680        pub split3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
681        #[allow(missing_docs)]
682        pub split4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
683        #[allow(missing_docs)]
684        pub zeta: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
685        #[allow(missing_docs)]
686        pub zetaOmega: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
687        #[allow(missing_docs)]
688        pub wireEval0: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
689        #[allow(missing_docs)]
690        pub wireEval1: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
691        #[allow(missing_docs)]
692        pub wireEval2: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
693        #[allow(missing_docs)]
694        pub wireEval3: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
695        #[allow(missing_docs)]
696        pub wireEval4: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
697        #[allow(missing_docs)]
698        pub sigmaEval0: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
699        #[allow(missing_docs)]
700        pub sigmaEval1: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
701        #[allow(missing_docs)]
702        pub sigmaEval2: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
703        #[allow(missing_docs)]
704        pub sigmaEval3: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
705        #[allow(missing_docs)]
706        pub prodPermZetaOmegaEval: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
707    }
708    #[allow(
709        non_camel_case_types,
710        non_snake_case,
711        clippy::pub_underscore_fields,
712        clippy::style
713    )]
714    const _: () = {
715        use alloy::sol_types as alloy_sol_types;
716        #[doc(hidden)]
717        type UnderlyingSolTuple<'a> = (
718            BN254::G1Point,
719            BN254::G1Point,
720            BN254::G1Point,
721            BN254::G1Point,
722            BN254::G1Point,
723            BN254::G1Point,
724            BN254::G1Point,
725            BN254::G1Point,
726            BN254::G1Point,
727            BN254::G1Point,
728            BN254::G1Point,
729            BN254::G1Point,
730            BN254::G1Point,
731            BN254::ScalarField,
732            BN254::ScalarField,
733            BN254::ScalarField,
734            BN254::ScalarField,
735            BN254::ScalarField,
736            BN254::ScalarField,
737            BN254::ScalarField,
738            BN254::ScalarField,
739            BN254::ScalarField,
740            BN254::ScalarField,
741        );
742        #[doc(hidden)]
743        type UnderlyingRustTuple<'a> = (
744            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
745            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
746            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
747            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
748            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
749            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
750            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
751            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
752            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
753            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
754            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
755            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
756            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
757            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
758            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
759            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
760            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
761            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
762            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
763            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
764            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
765            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
766            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
767        );
768        #[cfg(test)]
769        #[allow(dead_code, unreachable_patterns)]
770        fn _type_assertion(
771            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
772        ) {
773            match _t {
774                alloy_sol_types::private::AssertTypeEq::<
775                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
776                >(_) => {}
777            }
778        }
779        #[automatically_derived]
780        #[doc(hidden)]
781        impl ::core::convert::From<PlonkProof> for UnderlyingRustTuple<'_> {
782            fn from(value: PlonkProof) -> Self {
783                (
784                    value.wire0,
785                    value.wire1,
786                    value.wire2,
787                    value.wire3,
788                    value.wire4,
789                    value.prodPerm,
790                    value.split0,
791                    value.split1,
792                    value.split2,
793                    value.split3,
794                    value.split4,
795                    value.zeta,
796                    value.zetaOmega,
797                    value.wireEval0,
798                    value.wireEval1,
799                    value.wireEval2,
800                    value.wireEval3,
801                    value.wireEval4,
802                    value.sigmaEval0,
803                    value.sigmaEval1,
804                    value.sigmaEval2,
805                    value.sigmaEval3,
806                    value.prodPermZetaOmegaEval,
807                )
808            }
809        }
810        #[automatically_derived]
811        #[doc(hidden)]
812        impl ::core::convert::From<UnderlyingRustTuple<'_>> for PlonkProof {
813            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
814                Self {
815                    wire0: tuple.0,
816                    wire1: tuple.1,
817                    wire2: tuple.2,
818                    wire3: tuple.3,
819                    wire4: tuple.4,
820                    prodPerm: tuple.5,
821                    split0: tuple.6,
822                    split1: tuple.7,
823                    split2: tuple.8,
824                    split3: tuple.9,
825                    split4: tuple.10,
826                    zeta: tuple.11,
827                    zetaOmega: tuple.12,
828                    wireEval0: tuple.13,
829                    wireEval1: tuple.14,
830                    wireEval2: tuple.15,
831                    wireEval3: tuple.16,
832                    wireEval4: tuple.17,
833                    sigmaEval0: tuple.18,
834                    sigmaEval1: tuple.19,
835                    sigmaEval2: tuple.20,
836                    sigmaEval3: tuple.21,
837                    prodPermZetaOmegaEval: tuple.22,
838                }
839            }
840        }
841        #[automatically_derived]
842        impl alloy_sol_types::SolValue for PlonkProof {
843            type SolType = Self;
844        }
845        #[automatically_derived]
846        impl alloy_sol_types::private::SolTypeValue<Self> for PlonkProof {
847            #[inline]
848            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
849                (
850                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire0),
851                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire1),
852                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire2),
853                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire3),
854                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire4),
855                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(
856                        &self.prodPerm,
857                    ),
858                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split0),
859                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split1),
860                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split2),
861                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split3),
862                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split4),
863                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.zeta),
864                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(
865                        &self.zetaOmega,
866                    ),
867                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
868                        &self.wireEval0,
869                    ),
870                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
871                        &self.wireEval1,
872                    ),
873                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
874                        &self.wireEval2,
875                    ),
876                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
877                        &self.wireEval3,
878                    ),
879                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
880                        &self.wireEval4,
881                    ),
882                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
883                        &self.sigmaEval0,
884                    ),
885                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
886                        &self.sigmaEval1,
887                    ),
888                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
889                        &self.sigmaEval2,
890                    ),
891                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
892                        &self.sigmaEval3,
893                    ),
894                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
895                        &self.prodPermZetaOmegaEval,
896                    ),
897                )
898            }
899            #[inline]
900            fn stv_abi_encoded_size(&self) -> usize {
901                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
902                    return size;
903                }
904                let tuple = <UnderlyingRustTuple<
905                    '_,
906                > as ::core::convert::From<Self>>::from(self.clone());
907                <UnderlyingSolTuple<
908                    '_,
909                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
910            }
911            #[inline]
912            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
913                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
914            }
915            #[inline]
916            fn stv_abi_encode_packed_to(
917                &self,
918                out: &mut alloy_sol_types::private::Vec<u8>,
919            ) {
920                let tuple = <UnderlyingRustTuple<
921                    '_,
922                > as ::core::convert::From<Self>>::from(self.clone());
923                <UnderlyingSolTuple<
924                    '_,
925                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
926            }
927            #[inline]
928            fn stv_abi_packed_encoded_size(&self) -> usize {
929                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
930                    return size;
931                }
932                let tuple = <UnderlyingRustTuple<
933                    '_,
934                > as ::core::convert::From<Self>>::from(self.clone());
935                <UnderlyingSolTuple<
936                    '_,
937                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
938            }
939        }
940        #[automatically_derived]
941        impl alloy_sol_types::SolType for PlonkProof {
942            type RustType = Self;
943            type Token<'a> = <UnderlyingSolTuple<
944                'a,
945            > as alloy_sol_types::SolType>::Token<'a>;
946            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
947            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
948                '_,
949            > as alloy_sol_types::SolType>::ENCODED_SIZE;
950            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
951                '_,
952            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
953            #[inline]
954            fn valid_token(token: &Self::Token<'_>) -> bool {
955                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
956            }
957            #[inline]
958            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
959                let tuple = <UnderlyingSolTuple<
960                    '_,
961                > as alloy_sol_types::SolType>::detokenize(token);
962                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
963            }
964        }
965        #[automatically_derived]
966        impl alloy_sol_types::SolStruct for PlonkProof {
967            const NAME: &'static str = "PlonkProof";
968            #[inline]
969            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
970                alloy_sol_types::private::Cow::Borrowed(
971                    "PlonkProof(G1Point wire0,G1Point wire1,G1Point wire2,G1Point wire3,G1Point wire4,G1Point prodPerm,G1Point split0,G1Point split1,G1Point split2,G1Point split3,G1Point split4,G1Point zeta,G1Point zetaOmega,uint256 wireEval0,uint256 wireEval1,uint256 wireEval2,uint256 wireEval3,uint256 wireEval4,uint256 sigmaEval0,uint256 sigmaEval1,uint256 sigmaEval2,uint256 sigmaEval3,uint256 prodPermZetaOmegaEval)",
972                )
973            }
974            #[inline]
975            fn eip712_components() -> alloy_sol_types::private::Vec<
976                alloy_sol_types::private::Cow<'static, str>,
977            > {
978                let mut components = alloy_sol_types::private::Vec::with_capacity(13);
979                components
980                    .push(
981                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
982                    );
983                components
984                    .extend(
985                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
986                    );
987                components
988                    .push(
989                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
990                    );
991                components
992                    .extend(
993                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
994                    );
995                components
996                    .push(
997                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
998                    );
999                components
1000                    .extend(
1001                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1002                    );
1003                components
1004                    .push(
1005                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1006                    );
1007                components
1008                    .extend(
1009                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1010                    );
1011                components
1012                    .push(
1013                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1014                    );
1015                components
1016                    .extend(
1017                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1018                    );
1019                components
1020                    .push(
1021                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1022                    );
1023                components
1024                    .extend(
1025                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1026                    );
1027                components
1028                    .push(
1029                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1030                    );
1031                components
1032                    .extend(
1033                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1034                    );
1035                components
1036                    .push(
1037                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1038                    );
1039                components
1040                    .extend(
1041                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1042                    );
1043                components
1044                    .push(
1045                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1046                    );
1047                components
1048                    .extend(
1049                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1050                    );
1051                components
1052                    .push(
1053                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1054                    );
1055                components
1056                    .extend(
1057                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1058                    );
1059                components
1060                    .push(
1061                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1062                    );
1063                components
1064                    .extend(
1065                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1066                    );
1067                components
1068                    .push(
1069                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1070                    );
1071                components
1072                    .extend(
1073                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1074                    );
1075                components
1076                    .push(
1077                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1078                    );
1079                components
1080                    .extend(
1081                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1082                    );
1083                components
1084            }
1085            #[inline]
1086            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
1087                [
1088                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1089                            &self.wire0,
1090                        )
1091                        .0,
1092                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1093                            &self.wire1,
1094                        )
1095                        .0,
1096                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1097                            &self.wire2,
1098                        )
1099                        .0,
1100                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1101                            &self.wire3,
1102                        )
1103                        .0,
1104                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1105                            &self.wire4,
1106                        )
1107                        .0,
1108                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1109                            &self.prodPerm,
1110                        )
1111                        .0,
1112                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1113                            &self.split0,
1114                        )
1115                        .0,
1116                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1117                            &self.split1,
1118                        )
1119                        .0,
1120                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1121                            &self.split2,
1122                        )
1123                        .0,
1124                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1125                            &self.split3,
1126                        )
1127                        .0,
1128                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1129                            &self.split4,
1130                        )
1131                        .0,
1132                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1133                            &self.zeta,
1134                        )
1135                        .0,
1136                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1137                            &self.zetaOmega,
1138                        )
1139                        .0,
1140                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1141                            &self.wireEval0,
1142                        )
1143                        .0,
1144                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1145                            &self.wireEval1,
1146                        )
1147                        .0,
1148                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1149                            &self.wireEval2,
1150                        )
1151                        .0,
1152                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1153                            &self.wireEval3,
1154                        )
1155                        .0,
1156                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1157                            &self.wireEval4,
1158                        )
1159                        .0,
1160                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1161                            &self.sigmaEval0,
1162                        )
1163                        .0,
1164                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1165                            &self.sigmaEval1,
1166                        )
1167                        .0,
1168                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1169                            &self.sigmaEval2,
1170                        )
1171                        .0,
1172                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1173                            &self.sigmaEval3,
1174                        )
1175                        .0,
1176                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1177                            &self.prodPermZetaOmegaEval,
1178                        )
1179                        .0,
1180                ]
1181                    .concat()
1182            }
1183        }
1184        #[automatically_derived]
1185        impl alloy_sol_types::EventTopic for PlonkProof {
1186            #[inline]
1187            fn topic_preimage_length(rust: &Self::RustType) -> usize {
1188                0usize
1189                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1190                        &rust.wire0,
1191                    )
1192                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1193                        &rust.wire1,
1194                    )
1195                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1196                        &rust.wire2,
1197                    )
1198                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1199                        &rust.wire3,
1200                    )
1201                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1202                        &rust.wire4,
1203                    )
1204                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1205                        &rust.prodPerm,
1206                    )
1207                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1208                        &rust.split0,
1209                    )
1210                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1211                        &rust.split1,
1212                    )
1213                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1214                        &rust.split2,
1215                    )
1216                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1217                        &rust.split3,
1218                    )
1219                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1220                        &rust.split4,
1221                    )
1222                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1223                        &rust.zeta,
1224                    )
1225                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1226                        &rust.zetaOmega,
1227                    )
1228                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1229                        &rust.wireEval0,
1230                    )
1231                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1232                        &rust.wireEval1,
1233                    )
1234                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1235                        &rust.wireEval2,
1236                    )
1237                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1238                        &rust.wireEval3,
1239                    )
1240                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1241                        &rust.wireEval4,
1242                    )
1243                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1244                        &rust.sigmaEval0,
1245                    )
1246                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1247                        &rust.sigmaEval1,
1248                    )
1249                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1250                        &rust.sigmaEval2,
1251                    )
1252                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1253                        &rust.sigmaEval3,
1254                    )
1255                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1256                        &rust.prodPermZetaOmegaEval,
1257                    )
1258            }
1259            #[inline]
1260            fn encode_topic_preimage(
1261                rust: &Self::RustType,
1262                out: &mut alloy_sol_types::private::Vec<u8>,
1263            ) {
1264                out.reserve(
1265                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
1266                );
1267                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1268                    &rust.wire0,
1269                    out,
1270                );
1271                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1272                    &rust.wire1,
1273                    out,
1274                );
1275                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1276                    &rust.wire2,
1277                    out,
1278                );
1279                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1280                    &rust.wire3,
1281                    out,
1282                );
1283                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1284                    &rust.wire4,
1285                    out,
1286                );
1287                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1288                    &rust.prodPerm,
1289                    out,
1290                );
1291                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1292                    &rust.split0,
1293                    out,
1294                );
1295                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1296                    &rust.split1,
1297                    out,
1298                );
1299                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1300                    &rust.split2,
1301                    out,
1302                );
1303                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1304                    &rust.split3,
1305                    out,
1306                );
1307                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1308                    &rust.split4,
1309                    out,
1310                );
1311                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1312                    &rust.zeta,
1313                    out,
1314                );
1315                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1316                    &rust.zetaOmega,
1317                    out,
1318                );
1319                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1320                    &rust.wireEval0,
1321                    out,
1322                );
1323                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1324                    &rust.wireEval1,
1325                    out,
1326                );
1327                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1328                    &rust.wireEval2,
1329                    out,
1330                );
1331                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1332                    &rust.wireEval3,
1333                    out,
1334                );
1335                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1336                    &rust.wireEval4,
1337                    out,
1338                );
1339                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1340                    &rust.sigmaEval0,
1341                    out,
1342                );
1343                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1344                    &rust.sigmaEval1,
1345                    out,
1346                );
1347                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1348                    &rust.sigmaEval2,
1349                    out,
1350                );
1351                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1352                    &rust.sigmaEval3,
1353                    out,
1354                );
1355                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1356                    &rust.prodPermZetaOmegaEval,
1357                    out,
1358                );
1359            }
1360            #[inline]
1361            fn encode_topic(
1362                rust: &Self::RustType,
1363            ) -> alloy_sol_types::abi::token::WordToken {
1364                let mut out = alloy_sol_types::private::Vec::new();
1365                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
1366                    rust,
1367                    &mut out,
1368                );
1369                alloy_sol_types::abi::token::WordToken(
1370                    alloy_sol_types::private::keccak256(out),
1371                )
1372            }
1373        }
1374    };
1375    #[derive(serde::Serialize, serde::Deserialize)]
1376    #[derive()]
1377    /**```solidity
1378struct VerifyingKey { uint256 domainSize; uint256 numInputs; BN254.G1Point sigma0; BN254.G1Point sigma1; BN254.G1Point sigma2; BN254.G1Point sigma3; BN254.G1Point sigma4; BN254.G1Point q1; BN254.G1Point q2; BN254.G1Point q3; BN254.G1Point q4; BN254.G1Point qM12; BN254.G1Point qM34; BN254.G1Point qO; BN254.G1Point qC; BN254.G1Point qH1; BN254.G1Point qH2; BN254.G1Point qH3; BN254.G1Point qH4; BN254.G1Point qEcc; bytes32 g2LSB; bytes32 g2MSB; }
1379```*/
1380    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1381    #[derive(Clone)]
1382    pub struct VerifyingKey {
1383        #[allow(missing_docs)]
1384        pub domainSize: alloy::sol_types::private::primitives::aliases::U256,
1385        #[allow(missing_docs)]
1386        pub numInputs: alloy::sol_types::private::primitives::aliases::U256,
1387        #[allow(missing_docs)]
1388        pub sigma0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1389        #[allow(missing_docs)]
1390        pub sigma1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1391        #[allow(missing_docs)]
1392        pub sigma2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1393        #[allow(missing_docs)]
1394        pub sigma3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1395        #[allow(missing_docs)]
1396        pub sigma4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1397        #[allow(missing_docs)]
1398        pub q1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1399        #[allow(missing_docs)]
1400        pub q2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1401        #[allow(missing_docs)]
1402        pub q3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1403        #[allow(missing_docs)]
1404        pub q4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1405        #[allow(missing_docs)]
1406        pub qM12: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1407        #[allow(missing_docs)]
1408        pub qM34: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1409        #[allow(missing_docs)]
1410        pub qO: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1411        #[allow(missing_docs)]
1412        pub qC: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1413        #[allow(missing_docs)]
1414        pub qH1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1415        #[allow(missing_docs)]
1416        pub qH2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1417        #[allow(missing_docs)]
1418        pub qH3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1419        #[allow(missing_docs)]
1420        pub qH4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1421        #[allow(missing_docs)]
1422        pub qEcc: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1423        #[allow(missing_docs)]
1424        pub g2LSB: alloy::sol_types::private::FixedBytes<32>,
1425        #[allow(missing_docs)]
1426        pub g2MSB: alloy::sol_types::private::FixedBytes<32>,
1427    }
1428    #[allow(
1429        non_camel_case_types,
1430        non_snake_case,
1431        clippy::pub_underscore_fields,
1432        clippy::style
1433    )]
1434    const _: () = {
1435        use alloy::sol_types as alloy_sol_types;
1436        #[doc(hidden)]
1437        type UnderlyingSolTuple<'a> = (
1438            alloy::sol_types::sol_data::Uint<256>,
1439            alloy::sol_types::sol_data::Uint<256>,
1440            BN254::G1Point,
1441            BN254::G1Point,
1442            BN254::G1Point,
1443            BN254::G1Point,
1444            BN254::G1Point,
1445            BN254::G1Point,
1446            BN254::G1Point,
1447            BN254::G1Point,
1448            BN254::G1Point,
1449            BN254::G1Point,
1450            BN254::G1Point,
1451            BN254::G1Point,
1452            BN254::G1Point,
1453            BN254::G1Point,
1454            BN254::G1Point,
1455            BN254::G1Point,
1456            BN254::G1Point,
1457            BN254::G1Point,
1458            alloy::sol_types::sol_data::FixedBytes<32>,
1459            alloy::sol_types::sol_data::FixedBytes<32>,
1460        );
1461        #[doc(hidden)]
1462        type UnderlyingRustTuple<'a> = (
1463            alloy::sol_types::private::primitives::aliases::U256,
1464            alloy::sol_types::private::primitives::aliases::U256,
1465            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1466            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1467            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1468            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1469            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1470            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1471            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1472            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1473            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1474            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1475            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1476            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1477            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1478            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1479            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1480            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1481            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1482            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1483            alloy::sol_types::private::FixedBytes<32>,
1484            alloy::sol_types::private::FixedBytes<32>,
1485        );
1486        #[cfg(test)]
1487        #[allow(dead_code, unreachable_patterns)]
1488        fn _type_assertion(
1489            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1490        ) {
1491            match _t {
1492                alloy_sol_types::private::AssertTypeEq::<
1493                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1494                >(_) => {}
1495            }
1496        }
1497        #[automatically_derived]
1498        #[doc(hidden)]
1499        impl ::core::convert::From<VerifyingKey> for UnderlyingRustTuple<'_> {
1500            fn from(value: VerifyingKey) -> Self {
1501                (
1502                    value.domainSize,
1503                    value.numInputs,
1504                    value.sigma0,
1505                    value.sigma1,
1506                    value.sigma2,
1507                    value.sigma3,
1508                    value.sigma4,
1509                    value.q1,
1510                    value.q2,
1511                    value.q3,
1512                    value.q4,
1513                    value.qM12,
1514                    value.qM34,
1515                    value.qO,
1516                    value.qC,
1517                    value.qH1,
1518                    value.qH2,
1519                    value.qH3,
1520                    value.qH4,
1521                    value.qEcc,
1522                    value.g2LSB,
1523                    value.g2MSB,
1524                )
1525            }
1526        }
1527        #[automatically_derived]
1528        #[doc(hidden)]
1529        impl ::core::convert::From<UnderlyingRustTuple<'_>> for VerifyingKey {
1530            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1531                Self {
1532                    domainSize: tuple.0,
1533                    numInputs: tuple.1,
1534                    sigma0: tuple.2,
1535                    sigma1: tuple.3,
1536                    sigma2: tuple.4,
1537                    sigma3: tuple.5,
1538                    sigma4: tuple.6,
1539                    q1: tuple.7,
1540                    q2: tuple.8,
1541                    q3: tuple.9,
1542                    q4: tuple.10,
1543                    qM12: tuple.11,
1544                    qM34: tuple.12,
1545                    qO: tuple.13,
1546                    qC: tuple.14,
1547                    qH1: tuple.15,
1548                    qH2: tuple.16,
1549                    qH3: tuple.17,
1550                    qH4: tuple.18,
1551                    qEcc: tuple.19,
1552                    g2LSB: tuple.20,
1553                    g2MSB: tuple.21,
1554                }
1555            }
1556        }
1557        #[automatically_derived]
1558        impl alloy_sol_types::SolValue for VerifyingKey {
1559            type SolType = Self;
1560        }
1561        #[automatically_derived]
1562        impl alloy_sol_types::private::SolTypeValue<Self> for VerifyingKey {
1563            #[inline]
1564            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
1565                (
1566                    <alloy::sol_types::sol_data::Uint<
1567                        256,
1568                    > as alloy_sol_types::SolType>::tokenize(&self.domainSize),
1569                    <alloy::sol_types::sol_data::Uint<
1570                        256,
1571                    > as alloy_sol_types::SolType>::tokenize(&self.numInputs),
1572                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma0),
1573                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma1),
1574                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma2),
1575                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma3),
1576                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma4),
1577                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q1),
1578                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q2),
1579                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q3),
1580                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q4),
1581                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qM12),
1582                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qM34),
1583                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qO),
1584                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qC),
1585                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH1),
1586                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH2),
1587                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH3),
1588                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH4),
1589                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qEcc),
1590                    <alloy::sol_types::sol_data::FixedBytes<
1591                        32,
1592                    > as alloy_sol_types::SolType>::tokenize(&self.g2LSB),
1593                    <alloy::sol_types::sol_data::FixedBytes<
1594                        32,
1595                    > as alloy_sol_types::SolType>::tokenize(&self.g2MSB),
1596                )
1597            }
1598            #[inline]
1599            fn stv_abi_encoded_size(&self) -> usize {
1600                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
1601                    return size;
1602                }
1603                let tuple = <UnderlyingRustTuple<
1604                    '_,
1605                > as ::core::convert::From<Self>>::from(self.clone());
1606                <UnderlyingSolTuple<
1607                    '_,
1608                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
1609            }
1610            #[inline]
1611            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
1612                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
1613            }
1614            #[inline]
1615            fn stv_abi_encode_packed_to(
1616                &self,
1617                out: &mut alloy_sol_types::private::Vec<u8>,
1618            ) {
1619                let tuple = <UnderlyingRustTuple<
1620                    '_,
1621                > as ::core::convert::From<Self>>::from(self.clone());
1622                <UnderlyingSolTuple<
1623                    '_,
1624                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
1625            }
1626            #[inline]
1627            fn stv_abi_packed_encoded_size(&self) -> usize {
1628                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
1629                    return size;
1630                }
1631                let tuple = <UnderlyingRustTuple<
1632                    '_,
1633                > as ::core::convert::From<Self>>::from(self.clone());
1634                <UnderlyingSolTuple<
1635                    '_,
1636                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
1637            }
1638        }
1639        #[automatically_derived]
1640        impl alloy_sol_types::SolType for VerifyingKey {
1641            type RustType = Self;
1642            type Token<'a> = <UnderlyingSolTuple<
1643                'a,
1644            > as alloy_sol_types::SolType>::Token<'a>;
1645            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
1646            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
1647                '_,
1648            > as alloy_sol_types::SolType>::ENCODED_SIZE;
1649            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
1650                '_,
1651            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
1652            #[inline]
1653            fn valid_token(token: &Self::Token<'_>) -> bool {
1654                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
1655            }
1656            #[inline]
1657            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
1658                let tuple = <UnderlyingSolTuple<
1659                    '_,
1660                > as alloy_sol_types::SolType>::detokenize(token);
1661                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
1662            }
1663        }
1664        #[automatically_derived]
1665        impl alloy_sol_types::SolStruct for VerifyingKey {
1666            const NAME: &'static str = "VerifyingKey";
1667            #[inline]
1668            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
1669                alloy_sol_types::private::Cow::Borrowed(
1670                    "VerifyingKey(uint256 domainSize,uint256 numInputs,G1Point sigma0,G1Point sigma1,G1Point sigma2,G1Point sigma3,G1Point sigma4,G1Point q1,G1Point q2,G1Point q3,G1Point q4,G1Point qM12,G1Point qM34,G1Point qO,G1Point qC,G1Point qH1,G1Point qH2,G1Point qH3,G1Point qH4,G1Point qEcc,bytes32 g2LSB,bytes32 g2MSB)",
1671                )
1672            }
1673            #[inline]
1674            fn eip712_components() -> alloy_sol_types::private::Vec<
1675                alloy_sol_types::private::Cow<'static, str>,
1676            > {
1677                let mut components = alloy_sol_types::private::Vec::with_capacity(18);
1678                components
1679                    .push(
1680                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1681                    );
1682                components
1683                    .extend(
1684                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1685                    );
1686                components
1687                    .push(
1688                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1689                    );
1690                components
1691                    .extend(
1692                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1693                    );
1694                components
1695                    .push(
1696                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1697                    );
1698                components
1699                    .extend(
1700                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1701                    );
1702                components
1703                    .push(
1704                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1705                    );
1706                components
1707                    .extend(
1708                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1709                    );
1710                components
1711                    .push(
1712                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1713                    );
1714                components
1715                    .extend(
1716                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1717                    );
1718                components
1719                    .push(
1720                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1721                    );
1722                components
1723                    .extend(
1724                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1725                    );
1726                components
1727                    .push(
1728                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1729                    );
1730                components
1731                    .extend(
1732                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1733                    );
1734                components
1735                    .push(
1736                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1737                    );
1738                components
1739                    .extend(
1740                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1741                    );
1742                components
1743                    .push(
1744                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1745                    );
1746                components
1747                    .extend(
1748                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1749                    );
1750                components
1751                    .push(
1752                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1753                    );
1754                components
1755                    .extend(
1756                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1757                    );
1758                components
1759                    .push(
1760                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1761                    );
1762                components
1763                    .extend(
1764                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1765                    );
1766                components
1767                    .push(
1768                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1769                    );
1770                components
1771                    .extend(
1772                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1773                    );
1774                components
1775                    .push(
1776                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1777                    );
1778                components
1779                    .extend(
1780                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1781                    );
1782                components
1783                    .push(
1784                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1785                    );
1786                components
1787                    .extend(
1788                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1789                    );
1790                components
1791                    .push(
1792                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1793                    );
1794                components
1795                    .extend(
1796                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1797                    );
1798                components
1799                    .push(
1800                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1801                    );
1802                components
1803                    .extend(
1804                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1805                    );
1806                components
1807                    .push(
1808                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1809                    );
1810                components
1811                    .extend(
1812                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1813                    );
1814                components
1815                    .push(
1816                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1817                    );
1818                components
1819                    .extend(
1820                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1821                    );
1822                components
1823            }
1824            #[inline]
1825            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
1826                [
1827                    <alloy::sol_types::sol_data::Uint<
1828                        256,
1829                    > as alloy_sol_types::SolType>::eip712_data_word(&self.domainSize)
1830                        .0,
1831                    <alloy::sol_types::sol_data::Uint<
1832                        256,
1833                    > as alloy_sol_types::SolType>::eip712_data_word(&self.numInputs)
1834                        .0,
1835                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1836                            &self.sigma0,
1837                        )
1838                        .0,
1839                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1840                            &self.sigma1,
1841                        )
1842                        .0,
1843                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1844                            &self.sigma2,
1845                        )
1846                        .0,
1847                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1848                            &self.sigma3,
1849                        )
1850                        .0,
1851                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1852                            &self.sigma4,
1853                        )
1854                        .0,
1855                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1856                            &self.q1,
1857                        )
1858                        .0,
1859                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1860                            &self.q2,
1861                        )
1862                        .0,
1863                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1864                            &self.q3,
1865                        )
1866                        .0,
1867                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1868                            &self.q4,
1869                        )
1870                        .0,
1871                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1872                            &self.qM12,
1873                        )
1874                        .0,
1875                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1876                            &self.qM34,
1877                        )
1878                        .0,
1879                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1880                            &self.qO,
1881                        )
1882                        .0,
1883                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1884                            &self.qC,
1885                        )
1886                        .0,
1887                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1888                            &self.qH1,
1889                        )
1890                        .0,
1891                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1892                            &self.qH2,
1893                        )
1894                        .0,
1895                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1896                            &self.qH3,
1897                        )
1898                        .0,
1899                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1900                            &self.qH4,
1901                        )
1902                        .0,
1903                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1904                            &self.qEcc,
1905                        )
1906                        .0,
1907                    <alloy::sol_types::sol_data::FixedBytes<
1908                        32,
1909                    > as alloy_sol_types::SolType>::eip712_data_word(&self.g2LSB)
1910                        .0,
1911                    <alloy::sol_types::sol_data::FixedBytes<
1912                        32,
1913                    > as alloy_sol_types::SolType>::eip712_data_word(&self.g2MSB)
1914                        .0,
1915                ]
1916                    .concat()
1917            }
1918        }
1919        #[automatically_derived]
1920        impl alloy_sol_types::EventTopic for VerifyingKey {
1921            #[inline]
1922            fn topic_preimage_length(rust: &Self::RustType) -> usize {
1923                0usize
1924                    + <alloy::sol_types::sol_data::Uint<
1925                        256,
1926                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
1927                        &rust.domainSize,
1928                    )
1929                    + <alloy::sol_types::sol_data::Uint<
1930                        256,
1931                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
1932                        &rust.numInputs,
1933                    )
1934                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1935                        &rust.sigma0,
1936                    )
1937                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1938                        &rust.sigma1,
1939                    )
1940                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1941                        &rust.sigma2,
1942                    )
1943                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1944                        &rust.sigma3,
1945                    )
1946                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1947                        &rust.sigma4,
1948                    )
1949                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1950                        &rust.q1,
1951                    )
1952                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1953                        &rust.q2,
1954                    )
1955                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1956                        &rust.q3,
1957                    )
1958                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1959                        &rust.q4,
1960                    )
1961                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1962                        &rust.qM12,
1963                    )
1964                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1965                        &rust.qM34,
1966                    )
1967                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1968                        &rust.qO,
1969                    )
1970                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1971                        &rust.qC,
1972                    )
1973                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1974                        &rust.qH1,
1975                    )
1976                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1977                        &rust.qH2,
1978                    )
1979                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1980                        &rust.qH3,
1981                    )
1982                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1983                        &rust.qH4,
1984                    )
1985                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1986                        &rust.qEcc,
1987                    )
1988                    + <alloy::sol_types::sol_data::FixedBytes<
1989                        32,
1990                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.g2LSB)
1991                    + <alloy::sol_types::sol_data::FixedBytes<
1992                        32,
1993                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.g2MSB)
1994            }
1995            #[inline]
1996            fn encode_topic_preimage(
1997                rust: &Self::RustType,
1998                out: &mut alloy_sol_types::private::Vec<u8>,
1999            ) {
2000                out.reserve(
2001                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
2002                );
2003                <alloy::sol_types::sol_data::Uint<
2004                    256,
2005                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2006                    &rust.domainSize,
2007                    out,
2008                );
2009                <alloy::sol_types::sol_data::Uint<
2010                    256,
2011                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2012                    &rust.numInputs,
2013                    out,
2014                );
2015                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2016                    &rust.sigma0,
2017                    out,
2018                );
2019                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2020                    &rust.sigma1,
2021                    out,
2022                );
2023                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2024                    &rust.sigma2,
2025                    out,
2026                );
2027                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2028                    &rust.sigma3,
2029                    out,
2030                );
2031                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2032                    &rust.sigma4,
2033                    out,
2034                );
2035                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2036                    &rust.q1,
2037                    out,
2038                );
2039                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2040                    &rust.q2,
2041                    out,
2042                );
2043                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2044                    &rust.q3,
2045                    out,
2046                );
2047                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2048                    &rust.q4,
2049                    out,
2050                );
2051                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2052                    &rust.qM12,
2053                    out,
2054                );
2055                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2056                    &rust.qM34,
2057                    out,
2058                );
2059                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2060                    &rust.qO,
2061                    out,
2062                );
2063                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2064                    &rust.qC,
2065                    out,
2066                );
2067                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2068                    &rust.qH1,
2069                    out,
2070                );
2071                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2072                    &rust.qH2,
2073                    out,
2074                );
2075                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2076                    &rust.qH3,
2077                    out,
2078                );
2079                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2080                    &rust.qH4,
2081                    out,
2082                );
2083                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2084                    &rust.qEcc,
2085                    out,
2086                );
2087                <alloy::sol_types::sol_data::FixedBytes<
2088                    32,
2089                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2090                    &rust.g2LSB,
2091                    out,
2092                );
2093                <alloy::sol_types::sol_data::FixedBytes<
2094                    32,
2095                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2096                    &rust.g2MSB,
2097                    out,
2098                );
2099            }
2100            #[inline]
2101            fn encode_topic(
2102                rust: &Self::RustType,
2103            ) -> alloy_sol_types::abi::token::WordToken {
2104                let mut out = alloy_sol_types::private::Vec::new();
2105                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
2106                    rust,
2107                    &mut out,
2108                );
2109                alloy_sol_types::abi::token::WordToken(
2110                    alloy_sol_types::private::keccak256(out),
2111                )
2112            }
2113        }
2114    };
2115    use alloy::contract as alloy_contract;
2116    /**Creates a new wrapper around an on-chain [`IPlonkVerifier`](self) contract instance.
2117
2118See the [wrapper's documentation](`IPlonkVerifierInstance`) for more details.*/
2119    #[inline]
2120    pub const fn new<
2121        P: alloy_contract::private::Provider<N>,
2122        N: alloy_contract::private::Network,
2123    >(
2124        address: alloy_sol_types::private::Address,
2125        provider: P,
2126    ) -> IPlonkVerifierInstance<P, N> {
2127        IPlonkVerifierInstance::<P, N>::new(address, provider)
2128    }
2129    /**A [`IPlonkVerifier`](self) instance.
2130
2131Contains type-safe methods for interacting with an on-chain instance of the
2132[`IPlonkVerifier`](self) contract located at a given `address`, using a given
2133provider `P`.
2134
2135If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
2136documentation on how to provide it), the `deploy` and `deploy_builder` methods can
2137be used to deploy a new instance of the contract.
2138
2139See the [module-level documentation](self) for all the available methods.*/
2140    #[derive(Clone)]
2141    pub struct IPlonkVerifierInstance<P, N = alloy_contract::private::Ethereum> {
2142        address: alloy_sol_types::private::Address,
2143        provider: P,
2144        _network: ::core::marker::PhantomData<N>,
2145    }
2146    #[automatically_derived]
2147    impl<P, N> ::core::fmt::Debug for IPlonkVerifierInstance<P, N> {
2148        #[inline]
2149        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
2150            f.debug_tuple("IPlonkVerifierInstance").field(&self.address).finish()
2151        }
2152    }
2153    /// Instantiation and getters/setters.
2154    #[automatically_derived]
2155    impl<
2156        P: alloy_contract::private::Provider<N>,
2157        N: alloy_contract::private::Network,
2158    > IPlonkVerifierInstance<P, N> {
2159        /**Creates a new wrapper around an on-chain [`IPlonkVerifier`](self) contract instance.
2160
2161See the [wrapper's documentation](`IPlonkVerifierInstance`) for more details.*/
2162        #[inline]
2163        pub const fn new(
2164            address: alloy_sol_types::private::Address,
2165            provider: P,
2166        ) -> Self {
2167            Self {
2168                address,
2169                provider,
2170                _network: ::core::marker::PhantomData,
2171            }
2172        }
2173        /// Returns a reference to the address.
2174        #[inline]
2175        pub const fn address(&self) -> &alloy_sol_types::private::Address {
2176            &self.address
2177        }
2178        /// Sets the address.
2179        #[inline]
2180        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
2181            self.address = address;
2182        }
2183        /// Sets the address and returns `self`.
2184        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
2185            self.set_address(address);
2186            self
2187        }
2188        /// Returns a reference to the provider.
2189        #[inline]
2190        pub const fn provider(&self) -> &P {
2191            &self.provider
2192        }
2193    }
2194    impl<P: ::core::clone::Clone, N> IPlonkVerifierInstance<&P, N> {
2195        /// Clones the provider and returns a new instance with the cloned provider.
2196        #[inline]
2197        pub fn with_cloned_provider(self) -> IPlonkVerifierInstance<P, N> {
2198            IPlonkVerifierInstance {
2199                address: self.address,
2200                provider: ::core::clone::Clone::clone(&self.provider),
2201                _network: ::core::marker::PhantomData,
2202            }
2203        }
2204    }
2205    /// Function calls.
2206    #[automatically_derived]
2207    impl<
2208        P: alloy_contract::private::Provider<N>,
2209        N: alloy_contract::private::Network,
2210    > IPlonkVerifierInstance<P, N> {
2211        /// Creates a new call builder using this contract instance's provider and address.
2212        ///
2213        /// Note that the call can be any function call, not just those defined in this
2214        /// contract. Prefer using the other methods for building type-safe contract calls.
2215        pub fn call_builder<C: alloy_sol_types::SolCall>(
2216            &self,
2217            call: &C,
2218        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
2219            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
2220        }
2221    }
2222    /// Event filters.
2223    #[automatically_derived]
2224    impl<
2225        P: alloy_contract::private::Provider<N>,
2226        N: alloy_contract::private::Network,
2227    > IPlonkVerifierInstance<P, N> {
2228        /// Creates a new event filter using this contract instance's provider and address.
2229        ///
2230        /// Note that the type can be any event, not just those defined in this contract.
2231        /// Prefer using the other methods for building type-safe event filters.
2232        pub fn event_filter<E: alloy_sol_types::SolEvent>(
2233            &self,
2234        ) -> alloy_contract::Event<&P, E, N> {
2235            alloy_contract::Event::new_sol(&self.provider, &self.address)
2236        }
2237    }
2238}
2239/**
2240
2241Generated by the following Solidity interface...
2242```solidity
2243library BN254 {
2244    type BaseField is uint256;
2245    type ScalarField is uint256;
2246    struct G1Point {
2247        BaseField x;
2248        BaseField y;
2249    }
2250}
2251
2252library IPlonkVerifier {
2253    struct PlonkProof {
2254        BN254.G1Point wire0;
2255        BN254.G1Point wire1;
2256        BN254.G1Point wire2;
2257        BN254.G1Point wire3;
2258        BN254.G1Point wire4;
2259        BN254.G1Point prodPerm;
2260        BN254.G1Point split0;
2261        BN254.G1Point split1;
2262        BN254.G1Point split2;
2263        BN254.G1Point split3;
2264        BN254.G1Point split4;
2265        BN254.G1Point zeta;
2266        BN254.G1Point zetaOmega;
2267        BN254.ScalarField wireEval0;
2268        BN254.ScalarField wireEval1;
2269        BN254.ScalarField wireEval2;
2270        BN254.ScalarField wireEval3;
2271        BN254.ScalarField wireEval4;
2272        BN254.ScalarField sigmaEval0;
2273        BN254.ScalarField sigmaEval1;
2274        BN254.ScalarField sigmaEval2;
2275        BN254.ScalarField sigmaEval3;
2276        BN254.ScalarField prodPermZetaOmegaEval;
2277    }
2278    struct VerifyingKey {
2279        uint256 domainSize;
2280        uint256 numInputs;
2281        BN254.G1Point sigma0;
2282        BN254.G1Point sigma1;
2283        BN254.G1Point sigma2;
2284        BN254.G1Point sigma3;
2285        BN254.G1Point sigma4;
2286        BN254.G1Point q1;
2287        BN254.G1Point q2;
2288        BN254.G1Point q3;
2289        BN254.G1Point q4;
2290        BN254.G1Point qM12;
2291        BN254.G1Point qM34;
2292        BN254.G1Point qO;
2293        BN254.G1Point qC;
2294        BN254.G1Point qH1;
2295        BN254.G1Point qH2;
2296        BN254.G1Point qH3;
2297        BN254.G1Point qH4;
2298        BN254.G1Point qEcc;
2299        bytes32 g2LSB;
2300        bytes32 g2MSB;
2301    }
2302}
2303
2304interface PlonkVerifier {
2305    error BN254G1AddFailed();
2306    error BN254PairingProdFailed();
2307    error BN254ScalarInvZero();
2308    error BN254ScalarMulFailed();
2309    error InvalidG1();
2310    error InvalidPlonkArgs();
2311    error InvalidScalar();
2312    error PowPrecompileFailed();
2313    error UnsupportedDegree();
2314    error WrongPlonkVK();
2315
2316    function verify(IPlonkVerifier.VerifyingKey memory verifyingKey, uint256[7] memory publicInput, IPlonkVerifier.PlonkProof memory proof) external view returns (bool);
2317}
2318```
2319
2320...which was generated by the following JSON ABI:
2321```json
2322[
2323  {
2324    "type": "function",
2325    "name": "verify",
2326    "inputs": [
2327      {
2328        "name": "verifyingKey",
2329        "type": "tuple",
2330        "internalType": "struct IPlonkVerifier.VerifyingKey",
2331        "components": [
2332          {
2333            "name": "domainSize",
2334            "type": "uint256",
2335            "internalType": "uint256"
2336          },
2337          {
2338            "name": "numInputs",
2339            "type": "uint256",
2340            "internalType": "uint256"
2341          },
2342          {
2343            "name": "sigma0",
2344            "type": "tuple",
2345            "internalType": "struct BN254.G1Point",
2346            "components": [
2347              {
2348                "name": "x",
2349                "type": "uint256",
2350                "internalType": "BN254.BaseField"
2351              },
2352              {
2353                "name": "y",
2354                "type": "uint256",
2355                "internalType": "BN254.BaseField"
2356              }
2357            ]
2358          },
2359          {
2360            "name": "sigma1",
2361            "type": "tuple",
2362            "internalType": "struct BN254.G1Point",
2363            "components": [
2364              {
2365                "name": "x",
2366                "type": "uint256",
2367                "internalType": "BN254.BaseField"
2368              },
2369              {
2370                "name": "y",
2371                "type": "uint256",
2372                "internalType": "BN254.BaseField"
2373              }
2374            ]
2375          },
2376          {
2377            "name": "sigma2",
2378            "type": "tuple",
2379            "internalType": "struct BN254.G1Point",
2380            "components": [
2381              {
2382                "name": "x",
2383                "type": "uint256",
2384                "internalType": "BN254.BaseField"
2385              },
2386              {
2387                "name": "y",
2388                "type": "uint256",
2389                "internalType": "BN254.BaseField"
2390              }
2391            ]
2392          },
2393          {
2394            "name": "sigma3",
2395            "type": "tuple",
2396            "internalType": "struct BN254.G1Point",
2397            "components": [
2398              {
2399                "name": "x",
2400                "type": "uint256",
2401                "internalType": "BN254.BaseField"
2402              },
2403              {
2404                "name": "y",
2405                "type": "uint256",
2406                "internalType": "BN254.BaseField"
2407              }
2408            ]
2409          },
2410          {
2411            "name": "sigma4",
2412            "type": "tuple",
2413            "internalType": "struct BN254.G1Point",
2414            "components": [
2415              {
2416                "name": "x",
2417                "type": "uint256",
2418                "internalType": "BN254.BaseField"
2419              },
2420              {
2421                "name": "y",
2422                "type": "uint256",
2423                "internalType": "BN254.BaseField"
2424              }
2425            ]
2426          },
2427          {
2428            "name": "q1",
2429            "type": "tuple",
2430            "internalType": "struct BN254.G1Point",
2431            "components": [
2432              {
2433                "name": "x",
2434                "type": "uint256",
2435                "internalType": "BN254.BaseField"
2436              },
2437              {
2438                "name": "y",
2439                "type": "uint256",
2440                "internalType": "BN254.BaseField"
2441              }
2442            ]
2443          },
2444          {
2445            "name": "q2",
2446            "type": "tuple",
2447            "internalType": "struct BN254.G1Point",
2448            "components": [
2449              {
2450                "name": "x",
2451                "type": "uint256",
2452                "internalType": "BN254.BaseField"
2453              },
2454              {
2455                "name": "y",
2456                "type": "uint256",
2457                "internalType": "BN254.BaseField"
2458              }
2459            ]
2460          },
2461          {
2462            "name": "q3",
2463            "type": "tuple",
2464            "internalType": "struct BN254.G1Point",
2465            "components": [
2466              {
2467                "name": "x",
2468                "type": "uint256",
2469                "internalType": "BN254.BaseField"
2470              },
2471              {
2472                "name": "y",
2473                "type": "uint256",
2474                "internalType": "BN254.BaseField"
2475              }
2476            ]
2477          },
2478          {
2479            "name": "q4",
2480            "type": "tuple",
2481            "internalType": "struct BN254.G1Point",
2482            "components": [
2483              {
2484                "name": "x",
2485                "type": "uint256",
2486                "internalType": "BN254.BaseField"
2487              },
2488              {
2489                "name": "y",
2490                "type": "uint256",
2491                "internalType": "BN254.BaseField"
2492              }
2493            ]
2494          },
2495          {
2496            "name": "qM12",
2497            "type": "tuple",
2498            "internalType": "struct BN254.G1Point",
2499            "components": [
2500              {
2501                "name": "x",
2502                "type": "uint256",
2503                "internalType": "BN254.BaseField"
2504              },
2505              {
2506                "name": "y",
2507                "type": "uint256",
2508                "internalType": "BN254.BaseField"
2509              }
2510            ]
2511          },
2512          {
2513            "name": "qM34",
2514            "type": "tuple",
2515            "internalType": "struct BN254.G1Point",
2516            "components": [
2517              {
2518                "name": "x",
2519                "type": "uint256",
2520                "internalType": "BN254.BaseField"
2521              },
2522              {
2523                "name": "y",
2524                "type": "uint256",
2525                "internalType": "BN254.BaseField"
2526              }
2527            ]
2528          },
2529          {
2530            "name": "qO",
2531            "type": "tuple",
2532            "internalType": "struct BN254.G1Point",
2533            "components": [
2534              {
2535                "name": "x",
2536                "type": "uint256",
2537                "internalType": "BN254.BaseField"
2538              },
2539              {
2540                "name": "y",
2541                "type": "uint256",
2542                "internalType": "BN254.BaseField"
2543              }
2544            ]
2545          },
2546          {
2547            "name": "qC",
2548            "type": "tuple",
2549            "internalType": "struct BN254.G1Point",
2550            "components": [
2551              {
2552                "name": "x",
2553                "type": "uint256",
2554                "internalType": "BN254.BaseField"
2555              },
2556              {
2557                "name": "y",
2558                "type": "uint256",
2559                "internalType": "BN254.BaseField"
2560              }
2561            ]
2562          },
2563          {
2564            "name": "qH1",
2565            "type": "tuple",
2566            "internalType": "struct BN254.G1Point",
2567            "components": [
2568              {
2569                "name": "x",
2570                "type": "uint256",
2571                "internalType": "BN254.BaseField"
2572              },
2573              {
2574                "name": "y",
2575                "type": "uint256",
2576                "internalType": "BN254.BaseField"
2577              }
2578            ]
2579          },
2580          {
2581            "name": "qH2",
2582            "type": "tuple",
2583            "internalType": "struct BN254.G1Point",
2584            "components": [
2585              {
2586                "name": "x",
2587                "type": "uint256",
2588                "internalType": "BN254.BaseField"
2589              },
2590              {
2591                "name": "y",
2592                "type": "uint256",
2593                "internalType": "BN254.BaseField"
2594              }
2595            ]
2596          },
2597          {
2598            "name": "qH3",
2599            "type": "tuple",
2600            "internalType": "struct BN254.G1Point",
2601            "components": [
2602              {
2603                "name": "x",
2604                "type": "uint256",
2605                "internalType": "BN254.BaseField"
2606              },
2607              {
2608                "name": "y",
2609                "type": "uint256",
2610                "internalType": "BN254.BaseField"
2611              }
2612            ]
2613          },
2614          {
2615            "name": "qH4",
2616            "type": "tuple",
2617            "internalType": "struct BN254.G1Point",
2618            "components": [
2619              {
2620                "name": "x",
2621                "type": "uint256",
2622                "internalType": "BN254.BaseField"
2623              },
2624              {
2625                "name": "y",
2626                "type": "uint256",
2627                "internalType": "BN254.BaseField"
2628              }
2629            ]
2630          },
2631          {
2632            "name": "qEcc",
2633            "type": "tuple",
2634            "internalType": "struct BN254.G1Point",
2635            "components": [
2636              {
2637                "name": "x",
2638                "type": "uint256",
2639                "internalType": "BN254.BaseField"
2640              },
2641              {
2642                "name": "y",
2643                "type": "uint256",
2644                "internalType": "BN254.BaseField"
2645              }
2646            ]
2647          },
2648          {
2649            "name": "g2LSB",
2650            "type": "bytes32",
2651            "internalType": "bytes32"
2652          },
2653          {
2654            "name": "g2MSB",
2655            "type": "bytes32",
2656            "internalType": "bytes32"
2657          }
2658        ]
2659      },
2660      {
2661        "name": "publicInput",
2662        "type": "uint256[7]",
2663        "internalType": "uint256[7]"
2664      },
2665      {
2666        "name": "proof",
2667        "type": "tuple",
2668        "internalType": "struct IPlonkVerifier.PlonkProof",
2669        "components": [
2670          {
2671            "name": "wire0",
2672            "type": "tuple",
2673            "internalType": "struct BN254.G1Point",
2674            "components": [
2675              {
2676                "name": "x",
2677                "type": "uint256",
2678                "internalType": "BN254.BaseField"
2679              },
2680              {
2681                "name": "y",
2682                "type": "uint256",
2683                "internalType": "BN254.BaseField"
2684              }
2685            ]
2686          },
2687          {
2688            "name": "wire1",
2689            "type": "tuple",
2690            "internalType": "struct BN254.G1Point",
2691            "components": [
2692              {
2693                "name": "x",
2694                "type": "uint256",
2695                "internalType": "BN254.BaseField"
2696              },
2697              {
2698                "name": "y",
2699                "type": "uint256",
2700                "internalType": "BN254.BaseField"
2701              }
2702            ]
2703          },
2704          {
2705            "name": "wire2",
2706            "type": "tuple",
2707            "internalType": "struct BN254.G1Point",
2708            "components": [
2709              {
2710                "name": "x",
2711                "type": "uint256",
2712                "internalType": "BN254.BaseField"
2713              },
2714              {
2715                "name": "y",
2716                "type": "uint256",
2717                "internalType": "BN254.BaseField"
2718              }
2719            ]
2720          },
2721          {
2722            "name": "wire3",
2723            "type": "tuple",
2724            "internalType": "struct BN254.G1Point",
2725            "components": [
2726              {
2727                "name": "x",
2728                "type": "uint256",
2729                "internalType": "BN254.BaseField"
2730              },
2731              {
2732                "name": "y",
2733                "type": "uint256",
2734                "internalType": "BN254.BaseField"
2735              }
2736            ]
2737          },
2738          {
2739            "name": "wire4",
2740            "type": "tuple",
2741            "internalType": "struct BN254.G1Point",
2742            "components": [
2743              {
2744                "name": "x",
2745                "type": "uint256",
2746                "internalType": "BN254.BaseField"
2747              },
2748              {
2749                "name": "y",
2750                "type": "uint256",
2751                "internalType": "BN254.BaseField"
2752              }
2753            ]
2754          },
2755          {
2756            "name": "prodPerm",
2757            "type": "tuple",
2758            "internalType": "struct BN254.G1Point",
2759            "components": [
2760              {
2761                "name": "x",
2762                "type": "uint256",
2763                "internalType": "BN254.BaseField"
2764              },
2765              {
2766                "name": "y",
2767                "type": "uint256",
2768                "internalType": "BN254.BaseField"
2769              }
2770            ]
2771          },
2772          {
2773            "name": "split0",
2774            "type": "tuple",
2775            "internalType": "struct BN254.G1Point",
2776            "components": [
2777              {
2778                "name": "x",
2779                "type": "uint256",
2780                "internalType": "BN254.BaseField"
2781              },
2782              {
2783                "name": "y",
2784                "type": "uint256",
2785                "internalType": "BN254.BaseField"
2786              }
2787            ]
2788          },
2789          {
2790            "name": "split1",
2791            "type": "tuple",
2792            "internalType": "struct BN254.G1Point",
2793            "components": [
2794              {
2795                "name": "x",
2796                "type": "uint256",
2797                "internalType": "BN254.BaseField"
2798              },
2799              {
2800                "name": "y",
2801                "type": "uint256",
2802                "internalType": "BN254.BaseField"
2803              }
2804            ]
2805          },
2806          {
2807            "name": "split2",
2808            "type": "tuple",
2809            "internalType": "struct BN254.G1Point",
2810            "components": [
2811              {
2812                "name": "x",
2813                "type": "uint256",
2814                "internalType": "BN254.BaseField"
2815              },
2816              {
2817                "name": "y",
2818                "type": "uint256",
2819                "internalType": "BN254.BaseField"
2820              }
2821            ]
2822          },
2823          {
2824            "name": "split3",
2825            "type": "tuple",
2826            "internalType": "struct BN254.G1Point",
2827            "components": [
2828              {
2829                "name": "x",
2830                "type": "uint256",
2831                "internalType": "BN254.BaseField"
2832              },
2833              {
2834                "name": "y",
2835                "type": "uint256",
2836                "internalType": "BN254.BaseField"
2837              }
2838            ]
2839          },
2840          {
2841            "name": "split4",
2842            "type": "tuple",
2843            "internalType": "struct BN254.G1Point",
2844            "components": [
2845              {
2846                "name": "x",
2847                "type": "uint256",
2848                "internalType": "BN254.BaseField"
2849              },
2850              {
2851                "name": "y",
2852                "type": "uint256",
2853                "internalType": "BN254.BaseField"
2854              }
2855            ]
2856          },
2857          {
2858            "name": "zeta",
2859            "type": "tuple",
2860            "internalType": "struct BN254.G1Point",
2861            "components": [
2862              {
2863                "name": "x",
2864                "type": "uint256",
2865                "internalType": "BN254.BaseField"
2866              },
2867              {
2868                "name": "y",
2869                "type": "uint256",
2870                "internalType": "BN254.BaseField"
2871              }
2872            ]
2873          },
2874          {
2875            "name": "zetaOmega",
2876            "type": "tuple",
2877            "internalType": "struct BN254.G1Point",
2878            "components": [
2879              {
2880                "name": "x",
2881                "type": "uint256",
2882                "internalType": "BN254.BaseField"
2883              },
2884              {
2885                "name": "y",
2886                "type": "uint256",
2887                "internalType": "BN254.BaseField"
2888              }
2889            ]
2890          },
2891          {
2892            "name": "wireEval0",
2893            "type": "uint256",
2894            "internalType": "BN254.ScalarField"
2895          },
2896          {
2897            "name": "wireEval1",
2898            "type": "uint256",
2899            "internalType": "BN254.ScalarField"
2900          },
2901          {
2902            "name": "wireEval2",
2903            "type": "uint256",
2904            "internalType": "BN254.ScalarField"
2905          },
2906          {
2907            "name": "wireEval3",
2908            "type": "uint256",
2909            "internalType": "BN254.ScalarField"
2910          },
2911          {
2912            "name": "wireEval4",
2913            "type": "uint256",
2914            "internalType": "BN254.ScalarField"
2915          },
2916          {
2917            "name": "sigmaEval0",
2918            "type": "uint256",
2919            "internalType": "BN254.ScalarField"
2920          },
2921          {
2922            "name": "sigmaEval1",
2923            "type": "uint256",
2924            "internalType": "BN254.ScalarField"
2925          },
2926          {
2927            "name": "sigmaEval2",
2928            "type": "uint256",
2929            "internalType": "BN254.ScalarField"
2930          },
2931          {
2932            "name": "sigmaEval3",
2933            "type": "uint256",
2934            "internalType": "BN254.ScalarField"
2935          },
2936          {
2937            "name": "prodPermZetaOmegaEval",
2938            "type": "uint256",
2939            "internalType": "BN254.ScalarField"
2940          }
2941        ]
2942      }
2943    ],
2944    "outputs": [
2945      {
2946        "name": "",
2947        "type": "bool",
2948        "internalType": "bool"
2949      }
2950    ],
2951    "stateMutability": "view"
2952  },
2953  {
2954    "type": "error",
2955    "name": "BN254G1AddFailed",
2956    "inputs": []
2957  },
2958  {
2959    "type": "error",
2960    "name": "BN254PairingProdFailed",
2961    "inputs": []
2962  },
2963  {
2964    "type": "error",
2965    "name": "BN254ScalarInvZero",
2966    "inputs": []
2967  },
2968  {
2969    "type": "error",
2970    "name": "BN254ScalarMulFailed",
2971    "inputs": []
2972  },
2973  {
2974    "type": "error",
2975    "name": "InvalidG1",
2976    "inputs": []
2977  },
2978  {
2979    "type": "error",
2980    "name": "InvalidPlonkArgs",
2981    "inputs": []
2982  },
2983  {
2984    "type": "error",
2985    "name": "InvalidScalar",
2986    "inputs": []
2987  },
2988  {
2989    "type": "error",
2990    "name": "PowPrecompileFailed",
2991    "inputs": []
2992  },
2993  {
2994    "type": "error",
2995    "name": "UnsupportedDegree",
2996    "inputs": []
2997  },
2998  {
2999    "type": "error",
3000    "name": "WrongPlonkVK",
3001    "inputs": []
3002  }
3003]
3004```*/
3005#[allow(
3006    non_camel_case_types,
3007    non_snake_case,
3008    clippy::pub_underscore_fields,
3009    clippy::style,
3010    clippy::empty_structs_with_brackets
3011)]
3012pub mod PlonkVerifier {
3013    use super::*;
3014    use alloy::sol_types as alloy_sol_types;
3015    /// The creation / init bytecode of the contract.
3016    ///
3017    /// ```text
3018    ///0x61217e610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce537a7714610038575b5f5ffd5b61004b610046366004611f0c565b61005f565b604051901515815260200160405180910390f35b5f610069826100d0565b610079835f5b602002015161020b565b61008483600161006f565b61008f83600261006f565b61009a83600361006f565b6100a583600461006f565b6100b083600561006f565b6100bb83600661006f565b6100c684848461023d565b90505b9392505050565b80516100db90610431565b6100e88160200151610431565b6100f58160400151610431565b6101028160600151610431565b61010f8160800151610431565b61011c8160a00151610431565b6101298160c00151610431565b6101368160e00151610431565b610144816101000151610431565b610152816101200151610431565b610160816101400151610431565b61016e816101600151610431565b61017c816101800151610431565b61018a816101a0015161020b565b610198816101c0015161020b565b6101a6816101e0015161020b565b6101b481610200015161020b565b6101c281610220015161020b565b6101d081610240015161020b565b6101de81610260015161020b565b6101ec81610280015161020b565b6101fa816102a0015161020b565b610208816102c0015161020b565b50565b5f5160206121525f395f51905f528110806102395760405163016c173360e21b815260040160405180910390fd5b5050565b5f8360200151600714610263576040516320fa9d8960e11b815260040160405180910390fd5b5f61026f8585856104b0565b90505f61027e865f0151610a10565b90505f610290828460a0015188610dee565b90506102ad60405180604001604052805f81526020015f81525090565b604080518082019091525f80825260208201526102e18761016001516102dc8961018001518860e00151610e4b565b610eae565b91505f5f6102f18b88878c610f15565b91509150610302816102dc8461114d565b925061031b836102dc8b61016001518a60a00151610e4b565b60a08801516040880151602001519194505f5160206121525f395f51905f52918290820990508160e08a01518209905061035e856102dc8d610180015184610e4b565b94505f60405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061041f87826104128961114d565b61041a6111ea565b6112b7565b9e9d5050505050505050505050505050565b805160208201515f917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4791159015161561046a57505050565b8251602084015182600384858586098509088382830914838210848410161693505050816104ab5760405163279e345360e21b815260040160405180910390fd5b505050565b6104f06040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5f5160206121525f395f51905f529050604051602081015f815260fe60e01b8152865160c01b6004820152602087015160c01b600c82015261028087015160208201526102a08701516040820152600160608201527f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a60808201527f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02560a08201527f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a60c08201527f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e88160e082015260e087015180516101008301526020810151610120830152506101008701518051610140830152602081015161016083015250610120870151805161018083015260208101516101a08301525061014087015180516101c083015260208101516101e083015250610160870151805161020083015260208101516102208301525061018087015180516102408301526020810151610260830152506101e0870151805161028083015260208101516102a08301525061020087015180516102c083015260208101516102e083015250610220870151805161030083015260208101516103208301525061024087015180516103408301526020810151610360830152506101a0870151805161038083015260208101516103a0830152506101c087015180516103c083015260208101516103e0830152506102608701518051610400830152602081015161042083015250604087015180516104408301526020810151610460830152506060870151805161048083015260208101516104a083015250608087015180516104c083015260208101516104e08301525060a0870151805161050083015260208101516105208301525060c08701518051610540830152602081015161056083015250855161058082015260208601516105a082015260408601516105c082015260608601516105e0820152608086015161060082015260a086015161062082015260c086015161064082015284518051610660830152602081015161068083015250602085015180516106a083015260208101516106c083015250604085015180516106e083015260208101516107008301525060608501518051610720830152602081015161074083015250608085015180516107608301526020810151610780830152505f82526107c08220825282825106606085015260208220825282825106608085015260a085015180518252602081015160208301525060608220808352838106855283818209848282099150806020870152508060408601525060c085015180518252602081015160208301525060e085015180516040830152602081015160608301525061010085015180516080830152602081015160a083015250610120850151805160c0830152602081015160e0830152506101408501518051610100830152602081015161012083015250610160822082528282510660a08501526101a085015181526101c085015160208201526101e085015160408201526102008501516060820152610220850151608082015261024085015160a082015261026085015160c082015261028085015160e08201526102a08501516101008201526102c0850151610120820152610160822082528282510660c08501526101608501518051825260208101516020830152506101808501518051604083015260208101516060830152505060a0812082810660e08501525050509392505050565b610a18611be9565b816201000003610b57576040518060600160405280601081526020017f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c100181526020016040518060e00160405280600181526020017eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b781526020017f2d1ba66f5941dc91017171fa69ec2bd0022a2a2d4115a009a93458fd4e26ecfb81526020017f086812a00ac43ea801669c640171203c41a496671bfbc065ac8db24d52cf31e581526020017f2d965651cdd9e4811f4e51b80ddca8a8b4a93ee17420aae6adaa01c2617c6e8581526020017f12597a56c2e438620b9041b98992ae0d4e705b780057bf7766a2767cece16e1d81526020017f02d94117cd17bcf1290fd67c01155dd40807857dff4a5a0b4dc67befa8aa34fd8152508152509050919050565b816210000003610c97576040518060600160405280601481526020017f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c10181526020016040518060e00160405280600181526020017f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785781526020017f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd81526020017f2087ea2cd664278608fb0ebdb820907f598502c81b6690c185e2bf15cb935f4281526020017f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e081526020017f05a2c85cfc591789605cae818e37dd4161eef9aa666bec6fe4288d09e6d2341881526020017f11f70e5363258ff4f0d716a653e1dc41f1c64484d7f4b6e219d6377614a3905c8152508152509050919050565b81602003610dd5576040518060600160405280600581526020017f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e75080000181526020016040518060e00160405280600181526020017f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d081526020017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b81526020017f1277ae6415f0ef18f2ba5fb162c39eb7311f386e2d26d64401f4a25da77c253b81526020017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8081526020017f2fbd4dd2976be55d1a163aa9820fb88dfac5ddce77e1872e90632027327a5ebe81526020017f107aab49e65a67f9da9cd2abf78be38bd9dc1d5db39f81de36bcfa5b4b0390438152508152509050919050565b60405163e2ef09e560e01b815260040160405180910390fd5b610e0f60405180606001604052805f81526020015f81526020015f81525090565b610e198484611368565b808252610e2990859085906113b9565b60208201528051610e3f90859084908690611428565b60408201529392505050565b604080518082019091525f8082526020820152610e66611c0d565b835181526020808501519082015260408082018490525f908360608460075afa905080610ea65760405163033b714d60e31b815260040160405180910390fd5b505092915050565b604080518082019091525f8082526020820152610ec9611c2b565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460065afa905080610ea65760405163302aedb560e11b815260040160405180910390fd5b604080518082019091525f8082526020820152604080518082019091525f80825260208201525f610f4887878787611576565b90505f5160206121525f395f51905f525f610f64888789611a40565b9050610f7081836120f9565b60c08901516101a088015191925090819084908190830984089250610f9c856102dc8a5f015184610e4b565b955083828209905083846101c08a0151830984089250610fc4866102dc8a6020015184610e4b565b955083828209905083846101e08a0151830984089250610fec866102dc8a6040015184610e4b565b955083828209905083846102008a0151830984089250611014866102dc8a6060015184610e4b565b955083828209905083846102208a015183098408925061103c866102dc8a6080015184610e4b565b955083828209905083846102408a0151830984089250611064866102dc8d6040015184610e4b565b955083828209905083846102608a015183098408925061108c866102dc8d6060015184610e4b565b955083828209905083846102808a01518309840892506110b4866102dc8d6080015184610e4b565b955083828209905083846102a08a01518309840892506110dc866102dc8d60a0015184610e4b565b95505f8a60e00151905084856102c08b0151830985089350611106876102dc8b60a0015184610e4b565b965061113c6111366040805180820182525f80825260209182015281518083019092526001825260029082015290565b85610e4b565b975050505050505094509492505050565b604080518082019091525f8082526020820152815160208301511590151615611174575090565b6040518060400160405280835f015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516111b89190612132565b6111e2907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476120f9565b905292915050565b61121160405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f5191508061135a5760405163c206334f60e01b815260040160405180910390fd5b50151590505b949350505050565b81515f905f5160206121525f395f51905f52908380156113a9578493505f5b8281101561139d57838586099450600101611387565b506001840393506113b0565b6001830393505b50505092915050565b5f826001036113ca575060016100c9565b815f036113d857505f6100c9565b60208401515f5160206121525f395f51905f52905f908281860990508580156114065760018703925061140d565b6001840392505b5061141782611b2b565b915082828209979650505050505050565b5f5f5160206121525f395f51905f528282036114a15760015f5b60078110156114965781860361147357868160078110611464576114646120e5565b60200201519350505050611360565b82806114815761148161211e565b60408901516020015183099150600101611442565b505f92505050611360565b6114a9611c49565b6040870151600160c0838101828152920190805b60078110156114ea5760208403935085868a85518903088309808552601f199093019291506001016114bd565b505050505f5f5f90506001838960408c01515f5b600781101561153e578882518a85518c88518a0909098981880896505088898d84518c0308860994506020938401939283019291909101906001016114fe565b50505050809250505f61155083611b2b565b905060208a015185818909965050848187099550848287099a9950505050505050505050565b604080518082019091525f80825260208201525f5f5f5f5f5f5160206121525f395f51905f52905060808901518160208a015160208c0151099550895194508160a08b015160608c0151099350816101a089015185089250818184089250818584099450817f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a85099250816101c089015184089250818184089250818584099450817f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02585099250816101e089015184089250818184089250818584099450817f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a850992508161020089015184089250818184089250818584099450817f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881850992508161022089015184089250818184089250508084830993508084860894506116e38760a0015186610e4b565b9550885160608a015160808b0151838284099750836102c08b015189099750836102408b015183099550836101a08b015187089550838187089550838689099750836102608b015183099550836101c08b015187089550838187089550838689099750836102808b015183099550836101e08b015187089550838187089550838689099750836102a08b015183099550836102008b0151870895508381870895505050508083860994506117aa866102dc8c60c0015188856117a591906120f9565b610e4b565b95506117c3866102dc8c60e001518a6101a00151610e4b565b95506117dd866102dc8c61010001518a6101c00151610e4b565b95506117f7866102dc8c61012001518a6101e00151610e4b565b9550611811866102dc8c61014001518a6102000151610e4b565b9550806101c08801516101a0890151099250611836866102dc8c610160015186610e4b565b9550806102008801516101e089015109925061185b866102dc8c610180015186610e4b565b95506101a0870151925080838409915080828309915080828409925061188a866102dc8c6101e0015186610e4b565b95506101c087015192508083840991508082830991508082840992506118b9866102dc8c610200015186610e4b565b95506101e087015192508083840991508082830991508082840992506118e8866102dc8c610220015186610e4b565b95506102008701519250808384099150808283099150808284099250611917866102dc8c610240015186610e4b565b9550611934866102dc8c6101a001516117a58b6102200151611bbd565b9550611945868b6101c00151610eae565b9550806101c08801516101a0890151099250806101e0880151840992508061020088015184099250806102208801518409925061198b866102dc8c610260015186610e4b565b9550611999885f0151611bbd565b94506119ad866102dc8960c0015188610e4b565b955080600189510860a08a01519093508190800991508082840992508083860994506119e1866102dc8960e0015188610e4b565b95508083860994506119fc866102dc89610100015188610e4b565b9550808386099450611a17866102dc89610120015188610e4b565b9550808386099450611a32866102dc89610140015188610e4b565b9a9950505050505050505050565b5f5f5f5160206121525f395f51905f5290505f836020015190505f846040015190505f60019050606088015160808901516101a08901516102408a01518788898387098a868608088609945050506101c08901516102608a01518788898387098a868608088609945050506101e08901516102808a01518788898387098a868608088609945050506102008901516102a08a01518788898387098a8686080886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b5f815f03611b4c5760405163d6dbbb0d60e01b815260040160405180910390fd5b5f5f5f5160206121525f395f51905f52905060405160208152602080820152602060408201528460608201526002820360808201528160a082015260205f60c08360055afa9250505f51925081611bb657604051630c9d3e9960e21b815260040160405180910390fd5b5050919050565b5f5f5160206121525f395f51905f52821560018114611be0578382039250611bb6565b505f9392505050565b60405180606001604052805f81526020015f8152602001611c08611c49565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040516102e0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b60405290565b6040516102c0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b5f60408284031215611cd9575f5ffd5b6040805190810167ffffffffffffffff81118282101715611cfc57611cfc611c67565b604052823581526020928301359281019290925250919050565b5f82601f830112611d25575f5ffd5b60405160e0810167ffffffffffffffff81118282101715611d4857611d48611c67565b6040528060e0840185811115611d5c575f5ffd5b845b81811015611d76578035835260209283019201611d5e565b509195945050505050565b5f6104808284031215611d92575f5ffd5b611d9a611c7b565b9050611da68383611cc9565b8152611db58360408401611cc9565b6020820152611dc78360808401611cc9565b6040820152611dd98360c08401611cc9565b6060820152611dec836101008401611cc9565b6080820152611dff836101408401611cc9565b60a0820152611e12836101808401611cc9565b60c0820152611e25836101c08401611cc9565b60e0820152611e38836102008401611cc9565b610100820152611e4c836102408401611cc9565b610120820152611e60836102808401611cc9565b610140820152611e74836102c08401611cc9565b610160820152611e88836103008401611cc9565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f5f838503610a60811215611f20575f5ffd5b610500811215611f2e575f5ffd5b50611f37611ca5565b8435815260208086013590820152611f528660408701611cc9565b6040820152611f648660808701611cc9565b6060820152611f768660c08701611cc9565b6080820152611f89866101008701611cc9565b60a0820152611f9c866101408701611cc9565b60c0820152611faf866101808701611cc9565b60e0820152611fc2866101c08701611cc9565b610100820152611fd6866102008701611cc9565b610120820152611fea866102408701611cc9565b610140820152611ffe866102808701611cc9565b610160820152612012866102c08701611cc9565b610180820152612026866103008701611cc9565b6101a082015261203a866103408701611cc9565b6101c082015261204e866103808701611cc9565b6101e0820152612062866103c08701611cc9565b610200820152612076866104008701611cc9565b61022082015261208a866104408701611cc9565b61024082015261209e866104808701611cc9565b6102608201526104c08501356102808201526104e08501356102a082015292506120cc856105008601611d16565b91506120dc856105e08601611d81565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561211857634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261214c57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a
3019    /// ```
3020    #[rustfmt::skip]
3021    #[allow(clippy::all)]
3022    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
3023        b"a!~a\x004`\x0B\x82\x82\x829\x80Q_\x1A`s\x14`(WcNH{q`\xE0\x1B_R_`\x04R`$_\xFD[0_R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x004W_5`\xE0\x1C\x80c\xCESzw\x14a\08W[__\xFD[a\0Ka\0F6`\x04a\x1F\x0CV[a\0_V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_a\0i\x82a\0\xD0V[a\0y\x83_[` \x02\x01Qa\x02\x0BV[a\0\x84\x83`\x01a\0oV[a\0\x8F\x83`\x02a\0oV[a\0\x9A\x83`\x03a\0oV[a\0\xA5\x83`\x04a\0oV[a\0\xB0\x83`\x05a\0oV[a\0\xBB\x83`\x06a\0oV[a\0\xC6\x84\x84\x84a\x02=V[\x90P[\x93\x92PPPV[\x80Qa\0\xDB\x90a\x041V[a\0\xE8\x81` \x01Qa\x041V[a\0\xF5\x81`@\x01Qa\x041V[a\x01\x02\x81``\x01Qa\x041V[a\x01\x0F\x81`\x80\x01Qa\x041V[a\x01\x1C\x81`\xA0\x01Qa\x041V[a\x01)\x81`\xC0\x01Qa\x041V[a\x016\x81`\xE0\x01Qa\x041V[a\x01D\x81a\x01\0\x01Qa\x041V[a\x01R\x81a\x01 \x01Qa\x041V[a\x01`\x81a\x01@\x01Qa\x041V[a\x01n\x81a\x01`\x01Qa\x041V[a\x01|\x81a\x01\x80\x01Qa\x041V[a\x01\x8A\x81a\x01\xA0\x01Qa\x02\x0BV[a\x01\x98\x81a\x01\xC0\x01Qa\x02\x0BV[a\x01\xA6\x81a\x01\xE0\x01Qa\x02\x0BV[a\x01\xB4\x81a\x02\0\x01Qa\x02\x0BV[a\x01\xC2\x81a\x02 \x01Qa\x02\x0BV[a\x01\xD0\x81a\x02@\x01Qa\x02\x0BV[a\x01\xDE\x81a\x02`\x01Qa\x02\x0BV[a\x01\xEC\x81a\x02\x80\x01Qa\x02\x0BV[a\x01\xFA\x81a\x02\xA0\x01Qa\x02\x0BV[a\x02\x08\x81a\x02\xC0\x01Qa\x02\x0BV[PV[_Q` a!R_9_Q\x90_R\x81\x10\x80a\x029W`@Qc\x01l\x173`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[_\x83` \x01Q`\x07\x14a\x02cW`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_a\x02o\x85\x85\x85a\x04\xB0V[\x90P_a\x02~\x86_\x01Qa\n\x10V[\x90P_a\x02\x90\x82\x84`\xA0\x01Q\x88a\r\xEEV[\x90Pa\x02\xAD`@Q\x80`@\x01`@R\x80_\x81R` \x01_\x81RP\x90V[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x02\xE1\x87a\x01`\x01Qa\x02\xDC\x89a\x01\x80\x01Q\x88`\xE0\x01Qa\x0EKV[a\x0E\xAEV[\x91P__a\x02\xF1\x8B\x88\x87\x8Ca\x0F\x15V[\x91P\x91Pa\x03\x02\x81a\x02\xDC\x84a\x11MV[\x92Pa\x03\x1B\x83a\x02\xDC\x8Ba\x01`\x01Q\x8A`\xA0\x01Qa\x0EKV[`\xA0\x88\x01Q`@\x88\x01Q` \x01Q\x91\x94P_Q` a!R_9_Q\x90_R\x91\x82\x90\x82\t\x90P\x81`\xE0\x8A\x01Q\x82\t\x90Pa\x03^\x85a\x02\xDC\x8Da\x01\x80\x01Q\x84a\x0EKV[\x94P_`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\x04\x1F\x87\x82a\x04\x12\x89a\x11MV[a\x04\x1Aa\x11\xEAV[a\x12\xB7V[\x9E\x9DPPPPPPPPPPPPPPV[\x80Q` \x82\x01Q_\x91\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x91\x15\x90\x15\x16\x15a\x04jWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x04\xABW`@Qc'\x9E4S`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPV[a\x04\xF0`@Q\x80a\x01\0\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[__Q` a!R_9_Q\x90_R\x90P`@Q` \x81\x01_\x81R`\xFE`\xE0\x1B\x81R\x86Q`\xC0\x1B`\x04\x82\x01R` \x87\x01Q`\xC0\x1B`\x0C\x82\x01Ra\x02\x80\x87\x01Q` \x82\x01Ra\x02\xA0\x87\x01Q`@\x82\x01R`\x01``\x82\x01R\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ`\x80\x82\x01R\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%`\xA0\x82\x01R\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n`\xC0\x82\x01R\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81`\xE0\x82\x01R`\xE0\x87\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01\0\x87\x01Q\x80Qa\x01@\x83\x01R` \x81\x01Qa\x01`\x83\x01RPa\x01 \x87\x01Q\x80Qa\x01\x80\x83\x01R` \x81\x01Qa\x01\xA0\x83\x01RPa\x01@\x87\x01Q\x80Qa\x01\xC0\x83\x01R` \x81\x01Qa\x01\xE0\x83\x01RPa\x01`\x87\x01Q\x80Qa\x02\0\x83\x01R` \x81\x01Qa\x02 \x83\x01RPa\x01\x80\x87\x01Q\x80Qa\x02@\x83\x01R` \x81\x01Qa\x02`\x83\x01RPa\x01\xE0\x87\x01Q\x80Qa\x02\x80\x83\x01R` \x81\x01Qa\x02\xA0\x83\x01RPa\x02\0\x87\x01Q\x80Qa\x02\xC0\x83\x01R` \x81\x01Qa\x02\xE0\x83\x01RPa\x02 \x87\x01Q\x80Qa\x03\0\x83\x01R` \x81\x01Qa\x03 \x83\x01RPa\x02@\x87\x01Q\x80Qa\x03@\x83\x01R` \x81\x01Qa\x03`\x83\x01RPa\x01\xA0\x87\x01Q\x80Qa\x03\x80\x83\x01R` \x81\x01Qa\x03\xA0\x83\x01RPa\x01\xC0\x87\x01Q\x80Qa\x03\xC0\x83\x01R` \x81\x01Qa\x03\xE0\x83\x01RPa\x02`\x87\x01Q\x80Qa\x04\0\x83\x01R` \x81\x01Qa\x04 \x83\x01RP`@\x87\x01Q\x80Qa\x04@\x83\x01R` \x81\x01Qa\x04`\x83\x01RP``\x87\x01Q\x80Qa\x04\x80\x83\x01R` \x81\x01Qa\x04\xA0\x83\x01RP`\x80\x87\x01Q\x80Qa\x04\xC0\x83\x01R` \x81\x01Qa\x04\xE0\x83\x01RP`\xA0\x87\x01Q\x80Qa\x05\0\x83\x01R` \x81\x01Qa\x05 \x83\x01RP`\xC0\x87\x01Q\x80Qa\x05@\x83\x01R` \x81\x01Qa\x05`\x83\x01RP\x85Qa\x05\x80\x82\x01R` \x86\x01Qa\x05\xA0\x82\x01R`@\x86\x01Qa\x05\xC0\x82\x01R``\x86\x01Qa\x05\xE0\x82\x01R`\x80\x86\x01Qa\x06\0\x82\x01R`\xA0\x86\x01Qa\x06 \x82\x01R`\xC0\x86\x01Qa\x06@\x82\x01R\x84Q\x80Qa\x06`\x83\x01R` \x81\x01Qa\x06\x80\x83\x01RP` \x85\x01Q\x80Qa\x06\xA0\x83\x01R` \x81\x01Qa\x06\xC0\x83\x01RP`@\x85\x01Q\x80Qa\x06\xE0\x83\x01R` \x81\x01Qa\x07\0\x83\x01RP``\x85\x01Q\x80Qa\x07 \x83\x01R` \x81\x01Qa\x07@\x83\x01RP`\x80\x85\x01Q\x80Qa\x07`\x83\x01R` \x81\x01Qa\x07\x80\x83\x01RP_\x82Ra\x07\xC0\x82 \x82R\x82\x82Q\x06``\x85\x01R` \x82 \x82R\x82\x82Q\x06`\x80\x85\x01R`\xA0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP``\x82 \x80\x83R\x83\x81\x06\x85R\x83\x81\x82\t\x84\x82\x82\t\x91P\x80` \x87\x01RP\x80`@\x86\x01RP`\xC0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP`\xE0\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPa\x01\0\x85\x01Q\x80Q`\x80\x83\x01R` \x81\x01Q`\xA0\x83\x01RPa\x01 \x85\x01Q\x80Q`\xC0\x83\x01R` \x81\x01Q`\xE0\x83\x01RPa\x01@\x85\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01`\x82 \x82R\x82\x82Q\x06`\xA0\x85\x01Ra\x01\xA0\x85\x01Q\x81Ra\x01\xC0\x85\x01Q` \x82\x01Ra\x01\xE0\x85\x01Q`@\x82\x01Ra\x02\0\x85\x01Q``\x82\x01Ra\x02 \x85\x01Q`\x80\x82\x01Ra\x02@\x85\x01Q`\xA0\x82\x01Ra\x02`\x85\x01Q`\xC0\x82\x01Ra\x02\x80\x85\x01Q`\xE0\x82\x01Ra\x02\xA0\x85\x01Qa\x01\0\x82\x01Ra\x02\xC0\x85\x01Qa\x01 \x82\x01Ra\x01`\x82 \x82R\x82\x82Q\x06`\xC0\x85\x01Ra\x01`\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RPa\x01\x80\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPP`\xA0\x81 \x82\x81\x06`\xE0\x85\x01RPPP\x93\x92PPPV[a\n\x18a\x1B\xE9V[\x81b\x01\0\0\x03a\x0BWW`@Q\x80``\x01`@R\x80`\x10\x81R` \x01\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7\x81R` \x01\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB\x81R` \x01\x7F\x08h\x12\xA0\n\xC4>\xA8\x01f\x9Cd\x01q <A\xA4\x96g\x1B\xFB\xC0e\xAC\x8D\xB2MR\xCF1\xE5\x81R` \x01\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85\x81R` \x01\x7F\x12YzV\xC2\xE48b\x0B\x90A\xB9\x89\x92\xAE\rNp[x\0W\xBFwf\xA2v|\xEC\xE1n\x1D\x81R` \x01\x7F\x02\xD9A\x17\xCD\x17\xBC\xF1)\x0F\xD6|\x01\x15]\xD4\x08\x07\x85}\xFFJZ\x0BM\xC6{\xEF\xA8\xAA4\xFD\x81RP\x81RP\x90P\x91\x90PV[\x81b\x10\0\0\x03a\x0C\x97W`@Q\x80``\x01`@R\x80`\x14\x81R` \x01\x7F0dKl\x9CJr\x16\x9EM\xAA1}%\xF0E\x12\xAE\x15\xC5;4\xE8\xF5\xAC\xD8\xE1U\xD0\xA6\xC1\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F&\x12]\xA1\n\x0E\xD0c'P\x8A\xBA\x06\xD1\xE3\x03\xACaf2\xDB\xED4\x9FSB-\xA9S3xW\x81R` \x01\x7F\"`\xE7$\x84K\xCARQ\x82\x93S\x96\x8EI\x150RXA\x83WG:\\\x1DY\x7Fa?l\xBD\x81R` \x01\x7F \x87\xEA,\xD6d'\x86\x08\xFB\x0E\xBD\xB8 \x90\x7FY\x85\x02\xC8\x1Bf\x90\xC1\x85\xE2\xBF\x15\xCB\x93_B\x81R` \x01\x7F\x19\xDD\xBC\xAF:\x8DF\xC1\\\x01v\xFB\xB5\xB9^M\xC5p\x88\xFF\x13\xF4\xD1\xBD\x84\xC6\xBF\xA5}\xCD\xC0\xE0\x81R` \x01\x7F\x05\xA2\xC8\\\xFCY\x17\x89`\\\xAE\x81\x8E7\xDDAa\xEE\xF9\xAAfk\xECo\xE4(\x8D\t\xE6\xD24\x18\x81R` \x01\x7F\x11\xF7\x0ESc%\x8F\xF4\xF0\xD7\x16\xA6S\xE1\xDCA\xF1\xC6D\x84\xD7\xF4\xB6\xE2\x19\xD67v\x14\xA3\x90\\\x81RP\x81RP\x90P\x91\x90PV[\x81` \x03a\r\xD5W`@Q\x80``\x01`@R\x80`\x05\x81R` \x01\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0\x81R` \x01\x7F!\x08,\xA2\x16\xCB\xBFN\x1CnOE\x94\xDDP\x8C\x99m\xFB\xE1\x17N\xFB\x98\xB1\x15\t\xC6\xE3\x06F\x0B\x81R` \x01\x7F\x12w\xAEd\x15\xF0\xEF\x18\xF2\xBA_\xB1b\xC3\x9E\xB71\x1F8n-&\xD6D\x01\xF4\xA2]\xA7|%;\x81R` \x01\x7F+3}\xE1\xC8\xC1O\"\xEC\x9B\x9E/\x96\xAF\xEF6Rbsf\xF8\x17\n\n\x94\x8D\xADJ\xC1\xBD^\x80\x81R` \x01\x7F/\xBDM\xD2\x97k\xE5]\x1A\x16:\xA9\x82\x0F\xB8\x8D\xFA\xC5\xDD\xCEw\xE1\x87.\x90c '2z^\xBE\x81R` \x01\x7F\x10z\xABI\xE6Zg\xF9\xDA\x9C\xD2\xAB\xF7\x8B\xE3\x8B\xD9\xDC\x1D]\xB3\x9F\x81\xDE6\xBC\xFA[K\x03\x90C\x81RP\x81RP\x90P\x91\x90PV[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\x0F`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81RP\x90V[a\x0E\x19\x84\x84a\x13hV[\x80\x82Ra\x0E)\x90\x85\x90\x85\x90a\x13\xB9V[` \x82\x01R\x80Qa\x0E?\x90\x85\x90\x84\x90\x86\x90a\x14(V[`@\x82\x01R\x93\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0Efa\x1C\rV[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x80\x82\x01\x84\x90R_\x90\x83``\x84`\x07Z\xFA\x90P\x80a\x0E\xA6W`@Qc\x03;qM`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0E\xC9a\x1C+V[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x80\x84\x01\x91\x90\x91R\x90\x84\x01Q``\x83\x01R_\x90\x83`\x80\x84`\x06Z\xFA\x90P\x80a\x0E\xA6W`@Qc0*\xED\xB5`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x0FH\x87\x87\x87\x87a\x15vV[\x90P_Q` a!R_9_Q\x90_R_a\x0Fd\x88\x87\x89a\x1A@V[\x90Pa\x0Fp\x81\x83a \xF9V[`\xC0\x89\x01Qa\x01\xA0\x88\x01Q\x91\x92P\x90\x81\x90\x84\x90\x81\x90\x83\t\x84\x08\x92Pa\x0F\x9C\x85a\x02\xDC\x8A_\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xC0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xC4\x86a\x02\xDC\x8A` \x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xE0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xEC\x86a\x02\xDC\x8A`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x14\x86a\x02\xDC\x8A``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02 \x8A\x01Q\x83\t\x84\x08\x92Pa\x10<\x86a\x02\xDC\x8A`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02@\x8A\x01Q\x83\t\x84\x08\x92Pa\x10d\x86a\x02\xDC\x8D`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02`\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x8C\x86a\x02\xDC\x8D``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\x80\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xB4\x86a\x02\xDC\x8D`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\xA0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xDC\x86a\x02\xDC\x8D`\xA0\x01Q\x84a\x0EKV[\x95P_\x8A`\xE0\x01Q\x90P\x84\x85a\x02\xC0\x8B\x01Q\x83\t\x85\x08\x93Pa\x11\x06\x87a\x02\xDC\x8B`\xA0\x01Q\x84a\x0EKV[\x96Pa\x11<a\x116`@\x80Q\x80\x82\x01\x82R_\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x85a\x0EKV[\x97PPPPPPP\x94P\x94\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x11tWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x84` \x01Qa\x11\xB8\x91\x90a!2V[a\x11\xE2\x90\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDGa \xF9V[\x90R\x92\x91PPV[a\x12\x11`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[___`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x13ZW`@Qc\xC2\x063O`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[P\x15\x15\x90P[\x94\x93PPPPV[\x81Q_\x90_Q` a!R_9_Q\x90_R\x90\x83\x80\x15a\x13\xA9W\x84\x93P_[\x82\x81\x10\x15a\x13\x9DW\x83\x85\x86\t\x94P`\x01\x01a\x13\x87V[P`\x01\x84\x03\x93Pa\x13\xB0V[`\x01\x83\x03\x93P[PPP\x92\x91PPV[_\x82`\x01\x03a\x13\xCAWP`\x01a\0\xC9V[\x81_\x03a\x13\xD8WP_a\0\xC9V[` \x84\x01Q_Q` a!R_9_Q\x90_R\x90_\x90\x82\x81\x86\t\x90P\x85\x80\x15a\x14\x06W`\x01\x87\x03\x92Pa\x14\rV[`\x01\x84\x03\x92P[Pa\x14\x17\x82a\x1B+V[\x91P\x82\x82\x82\t\x97\x96PPPPPPPV[__Q` a!R_9_Q\x90_R\x82\x82\x03a\x14\xA1W`\x01_[`\x07\x81\x10\x15a\x14\x96W\x81\x86\x03a\x14sW\x86\x81`\x07\x81\x10a\x14dWa\x14da \xE5V[` \x02\x01Q\x93PPPPa\x13`V[\x82\x80a\x14\x81Wa\x14\x81a!\x1EV[`@\x89\x01Q` \x01Q\x83\t\x91P`\x01\x01a\x14BV[P_\x92PPPa\x13`V[a\x14\xA9a\x1CIV[`@\x87\x01Q`\x01`\xC0\x83\x81\x01\x82\x81R\x92\x01\x90\x80[`\x07\x81\x10\x15a\x14\xEAW` \x84\x03\x93P\x85\x86\x8A\x85Q\x89\x03\x08\x83\t\x80\x85R`\x1F\x19\x90\x93\x01\x92\x91P`\x01\x01a\x14\xBDV[PPPP___\x90P`\x01\x83\x89`@\x8C\x01Q_[`\x07\x81\x10\x15a\x15>W\x88\x82Q\x8A\x85Q\x8C\x88Q\x8A\t\t\t\x89\x81\x88\x08\x96PP\x88\x89\x8D\x84Q\x8C\x03\x08\x86\t\x94P` \x93\x84\x01\x93\x92\x83\x01\x92\x91\x90\x91\x01\x90`\x01\x01a\x14\xFEV[PPPP\x80\x92PP_a\x15P\x83a\x1B+V[\x90P` \x8A\x01Q\x85\x81\x89\t\x96PP\x84\x81\x87\t\x95P\x84\x82\x87\t\x9A\x99PPPPPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R______Q` a!R_9_Q\x90_R\x90P`\x80\x89\x01Q\x81` \x8A\x01Q` \x8C\x01Q\t\x95P\x89Q\x94P\x81`\xA0\x8B\x01Q``\x8C\x01Q\t\x93P\x81a\x01\xA0\x89\x01Q\x85\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ\x85\t\x92P\x81a\x01\xC0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%\x85\t\x92P\x81a\x01\xE0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n\x85\t\x92P\x81a\x02\0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81\x85\t\x92P\x81a\x02 \x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92PP\x80\x84\x83\t\x93P\x80\x84\x86\x08\x94Pa\x16\xE3\x87`\xA0\x01Q\x86a\x0EKV[\x95P\x88Q``\x8A\x01Q`\x80\x8B\x01Q\x83\x82\x84\t\x97P\x83a\x02\xC0\x8B\x01Q\x89\t\x97P\x83a\x02@\x8B\x01Q\x83\t\x95P\x83a\x01\xA0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02`\x8B\x01Q\x83\t\x95P\x83a\x01\xC0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\x80\x8B\x01Q\x83\t\x95P\x83a\x01\xE0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\xA0\x8B\x01Q\x83\t\x95P\x83a\x02\0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95PPPP\x80\x83\x86\t\x94Pa\x17\xAA\x86a\x02\xDC\x8C`\xC0\x01Q\x88\x85a\x17\xA5\x91\x90a \xF9V[a\x0EKV[\x95Pa\x17\xC3\x86a\x02\xDC\x8C`\xE0\x01Q\x8Aa\x01\xA0\x01Qa\x0EKV[\x95Pa\x17\xDD\x86a\x02\xDC\x8Ca\x01\0\x01Q\x8Aa\x01\xC0\x01Qa\x0EKV[\x95Pa\x17\xF7\x86a\x02\xDC\x8Ca\x01 \x01Q\x8Aa\x01\xE0\x01Qa\x0EKV[\x95Pa\x18\x11\x86a\x02\xDC\x8Ca\x01@\x01Q\x8Aa\x02\0\x01Qa\x0EKV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92Pa\x186\x86a\x02\xDC\x8Ca\x01`\x01Q\x86a\x0EKV[\x95P\x80a\x02\0\x88\x01Qa\x01\xE0\x89\x01Q\t\x92Pa\x18[\x86a\x02\xDC\x8Ca\x01\x80\x01Q\x86a\x0EKV[\x95Pa\x01\xA0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\x8A\x86a\x02\xDC\x8Ca\x01\xE0\x01Q\x86a\x0EKV[\x95Pa\x01\xC0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xB9\x86a\x02\xDC\x8Ca\x02\0\x01Q\x86a\x0EKV[\x95Pa\x01\xE0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xE8\x86a\x02\xDC\x8Ca\x02 \x01Q\x86a\x0EKV[\x95Pa\x02\0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\x17\x86a\x02\xDC\x8Ca\x02@\x01Q\x86a\x0EKV[\x95Pa\x194\x86a\x02\xDC\x8Ca\x01\xA0\x01Qa\x17\xA5\x8Ba\x02 \x01Qa\x1B\xBDV[\x95Pa\x19E\x86\x8Ba\x01\xC0\x01Qa\x0E\xAEV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92P\x80a\x01\xE0\x88\x01Q\x84\t\x92P\x80a\x02\0\x88\x01Q\x84\t\x92P\x80a\x02 \x88\x01Q\x84\t\x92Pa\x19\x8B\x86a\x02\xDC\x8Ca\x02`\x01Q\x86a\x0EKV[\x95Pa\x19\x99\x88_\x01Qa\x1B\xBDV[\x94Pa\x19\xAD\x86a\x02\xDC\x89`\xC0\x01Q\x88a\x0EKV[\x95P\x80`\x01\x89Q\x08`\xA0\x8A\x01Q\x90\x93P\x81\x90\x80\t\x91P\x80\x82\x84\t\x92P\x80\x83\x86\t\x94Pa\x19\xE1\x86a\x02\xDC\x89`\xE0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x19\xFC\x86a\x02\xDC\x89a\x01\0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A\x17\x86a\x02\xDC\x89a\x01 \x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A2\x86a\x02\xDC\x89a\x01@\x01Q\x88a\x0EKV[\x9A\x99PPPPPPPPPPV[___Q` a!R_9_Q\x90_R\x90P_\x83` \x01Q\x90P_\x84`@\x01Q\x90P_`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[_\x81_\x03a\x1BLW`@Qc\xD6\xDB\xBB\r`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[___Q` a!R_9_Q\x90_R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x82\x03`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x92PP_Q\x92P\x81a\x1B\xB6W`@Qc\x0C\x9D>\x99`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x91\x90PV[__Q` a!R_9_Q\x90_R\x82\x15`\x01\x81\x14a\x1B\xE0W\x83\x82\x03\x92Pa\x1B\xB6V[P_\x93\x92PPPV[`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01a\x1C\x08a\x1CIV[\x90R\x90V[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xE0\x01`@R\x80`\x07\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Qa\x02\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[`@R\x90V[`@Qa\x02\xC0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[_`@\x82\x84\x03\x12\x15a\x1C\xD9W__\xFD[`@\x80Q\x90\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\xFCWa\x1C\xFCa\x1CgV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x82`\x1F\x83\x01\x12a\x1D%W__\xFD[`@Q`\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1DHWa\x1DHa\x1CgV[`@R\x80`\xE0\x84\x01\x85\x81\x11\x15a\x1D\\W__\xFD[\x84[\x81\x81\x10\x15a\x1DvW\x805\x83R` \x92\x83\x01\x92\x01a\x1D^V[P\x91\x95\x94PPPPPV[_a\x04\x80\x82\x84\x03\x12\x15a\x1D\x92W__\xFD[a\x1D\x9Aa\x1C{V[\x90Pa\x1D\xA6\x83\x83a\x1C\xC9V[\x81Ra\x1D\xB5\x83`@\x84\x01a\x1C\xC9V[` \x82\x01Ra\x1D\xC7\x83`\x80\x84\x01a\x1C\xC9V[`@\x82\x01Ra\x1D\xD9\x83`\xC0\x84\x01a\x1C\xC9V[``\x82\x01Ra\x1D\xEC\x83a\x01\0\x84\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1D\xFF\x83a\x01@\x84\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1E\x12\x83a\x01\x80\x84\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1E%\x83a\x01\xC0\x84\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1E8\x83a\x02\0\x84\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1EL\x83a\x02@\x84\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1E`\x83a\x02\x80\x84\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1Et\x83a\x02\xC0\x84\x01a\x1C\xC9V[a\x01`\x82\x01Ra\x1E\x88\x83a\x03\0\x84\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra\x03@\x82\x015a\x01\xA0\x82\x01Ra\x03`\x82\x015a\x01\xC0\x82\x01Ra\x03\x80\x82\x015a\x01\xE0\x82\x01Ra\x03\xA0\x82\x015a\x02\0\x82\x01Ra\x03\xC0\x82\x015a\x02 \x82\x01Ra\x03\xE0\x82\x015a\x02@\x82\x01Ra\x04\0\x82\x015a\x02`\x82\x01Ra\x04 \x82\x015a\x02\x80\x82\x01Ra\x04@\x82\x015a\x02\xA0\x82\x01Ra\x04`\x90\x91\x015a\x02\xC0\x82\x01R\x91\x90PV[___\x83\x85\x03a\n`\x81\x12\x15a\x1F W__\xFD[a\x05\0\x81\x12\x15a\x1F.W__\xFD[Pa\x1F7a\x1C\xA5V[\x845\x81R` \x80\x86\x015\x90\x82\x01Ra\x1FR\x86`@\x87\x01a\x1C\xC9V[`@\x82\x01Ra\x1Fd\x86`\x80\x87\x01a\x1C\xC9V[``\x82\x01Ra\x1Fv\x86`\xC0\x87\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1F\x89\x86a\x01\0\x87\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1F\x9C\x86a\x01@\x87\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1F\xAF\x86a\x01\x80\x87\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1F\xC2\x86a\x01\xC0\x87\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1F\xD6\x86a\x02\0\x87\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1F\xEA\x86a\x02@\x87\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1F\xFE\x86a\x02\x80\x87\x01a\x1C\xC9V[a\x01`\x82\x01Ra \x12\x86a\x02\xC0\x87\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra &\x86a\x03\0\x87\x01a\x1C\xC9V[a\x01\xA0\x82\x01Ra :\x86a\x03@\x87\x01a\x1C\xC9V[a\x01\xC0\x82\x01Ra N\x86a\x03\x80\x87\x01a\x1C\xC9V[a\x01\xE0\x82\x01Ra b\x86a\x03\xC0\x87\x01a\x1C\xC9V[a\x02\0\x82\x01Ra v\x86a\x04\0\x87\x01a\x1C\xC9V[a\x02 \x82\x01Ra \x8A\x86a\x04@\x87\x01a\x1C\xC9V[a\x02@\x82\x01Ra \x9E\x86a\x04\x80\x87\x01a\x1C\xC9V[a\x02`\x82\x01Ra\x04\xC0\x85\x015a\x02\x80\x82\x01Ra\x04\xE0\x85\x015a\x02\xA0\x82\x01R\x92Pa \xCC\x85a\x05\0\x86\x01a\x1D\x16V[\x91Pa \xDC\x85a\x05\xE0\x86\x01a\x1D\x81V[\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[\x81\x81\x03\x81\x81\x11\x15a!\x18WcNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x92\x91PPV[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a!LWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V\xFE0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X](3\xE8Hy\xB9p\x91C\xE1\xF5\x93\xF0\0\0\x01\xA1dsolcC\0\x08\x1C\0\n",
3024    );
3025    /// The runtime bytecode of the contract, as deployed on the network.
3026    ///
3027    /// ```text
3028    ///0x7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce537a7714610038575b5f5ffd5b61004b610046366004611f0c565b61005f565b604051901515815260200160405180910390f35b5f610069826100d0565b610079835f5b602002015161020b565b61008483600161006f565b61008f83600261006f565b61009a83600361006f565b6100a583600461006f565b6100b083600561006f565b6100bb83600661006f565b6100c684848461023d565b90505b9392505050565b80516100db90610431565b6100e88160200151610431565b6100f58160400151610431565b6101028160600151610431565b61010f8160800151610431565b61011c8160a00151610431565b6101298160c00151610431565b6101368160e00151610431565b610144816101000151610431565b610152816101200151610431565b610160816101400151610431565b61016e816101600151610431565b61017c816101800151610431565b61018a816101a0015161020b565b610198816101c0015161020b565b6101a6816101e0015161020b565b6101b481610200015161020b565b6101c281610220015161020b565b6101d081610240015161020b565b6101de81610260015161020b565b6101ec81610280015161020b565b6101fa816102a0015161020b565b610208816102c0015161020b565b50565b5f5160206121525f395f51905f528110806102395760405163016c173360e21b815260040160405180910390fd5b5050565b5f8360200151600714610263576040516320fa9d8960e11b815260040160405180910390fd5b5f61026f8585856104b0565b90505f61027e865f0151610a10565b90505f610290828460a0015188610dee565b90506102ad60405180604001604052805f81526020015f81525090565b604080518082019091525f80825260208201526102e18761016001516102dc8961018001518860e00151610e4b565b610eae565b91505f5f6102f18b88878c610f15565b91509150610302816102dc8461114d565b925061031b836102dc8b61016001518a60a00151610e4b565b60a08801516040880151602001519194505f5160206121525f395f51905f52918290820990508160e08a01518209905061035e856102dc8d610180015184610e4b565b94505f60405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061041f87826104128961114d565b61041a6111ea565b6112b7565b9e9d5050505050505050505050505050565b805160208201515f917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4791159015161561046a57505050565b8251602084015182600384858586098509088382830914838210848410161693505050816104ab5760405163279e345360e21b815260040160405180910390fd5b505050565b6104f06040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5f5160206121525f395f51905f529050604051602081015f815260fe60e01b8152865160c01b6004820152602087015160c01b600c82015261028087015160208201526102a08701516040820152600160608201527f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a60808201527f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02560a08201527f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a60c08201527f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e88160e082015260e087015180516101008301526020810151610120830152506101008701518051610140830152602081015161016083015250610120870151805161018083015260208101516101a08301525061014087015180516101c083015260208101516101e083015250610160870151805161020083015260208101516102208301525061018087015180516102408301526020810151610260830152506101e0870151805161028083015260208101516102a08301525061020087015180516102c083015260208101516102e083015250610220870151805161030083015260208101516103208301525061024087015180516103408301526020810151610360830152506101a0870151805161038083015260208101516103a0830152506101c087015180516103c083015260208101516103e0830152506102608701518051610400830152602081015161042083015250604087015180516104408301526020810151610460830152506060870151805161048083015260208101516104a083015250608087015180516104c083015260208101516104e08301525060a0870151805161050083015260208101516105208301525060c08701518051610540830152602081015161056083015250855161058082015260208601516105a082015260408601516105c082015260608601516105e0820152608086015161060082015260a086015161062082015260c086015161064082015284518051610660830152602081015161068083015250602085015180516106a083015260208101516106c083015250604085015180516106e083015260208101516107008301525060608501518051610720830152602081015161074083015250608085015180516107608301526020810151610780830152505f82526107c08220825282825106606085015260208220825282825106608085015260a085015180518252602081015160208301525060608220808352838106855283818209848282099150806020870152508060408601525060c085015180518252602081015160208301525060e085015180516040830152602081015160608301525061010085015180516080830152602081015160a083015250610120850151805160c0830152602081015160e0830152506101408501518051610100830152602081015161012083015250610160822082528282510660a08501526101a085015181526101c085015160208201526101e085015160408201526102008501516060820152610220850151608082015261024085015160a082015261026085015160c082015261028085015160e08201526102a08501516101008201526102c0850151610120820152610160822082528282510660c08501526101608501518051825260208101516020830152506101808501518051604083015260208101516060830152505060a0812082810660e08501525050509392505050565b610a18611be9565b816201000003610b57576040518060600160405280601081526020017f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c100181526020016040518060e00160405280600181526020017eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b781526020017f2d1ba66f5941dc91017171fa69ec2bd0022a2a2d4115a009a93458fd4e26ecfb81526020017f086812a00ac43ea801669c640171203c41a496671bfbc065ac8db24d52cf31e581526020017f2d965651cdd9e4811f4e51b80ddca8a8b4a93ee17420aae6adaa01c2617c6e8581526020017f12597a56c2e438620b9041b98992ae0d4e705b780057bf7766a2767cece16e1d81526020017f02d94117cd17bcf1290fd67c01155dd40807857dff4a5a0b4dc67befa8aa34fd8152508152509050919050565b816210000003610c97576040518060600160405280601481526020017f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c10181526020016040518060e00160405280600181526020017f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785781526020017f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd81526020017f2087ea2cd664278608fb0ebdb820907f598502c81b6690c185e2bf15cb935f4281526020017f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e081526020017f05a2c85cfc591789605cae818e37dd4161eef9aa666bec6fe4288d09e6d2341881526020017f11f70e5363258ff4f0d716a653e1dc41f1c64484d7f4b6e219d6377614a3905c8152508152509050919050565b81602003610dd5576040518060600160405280600581526020017f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e75080000181526020016040518060e00160405280600181526020017f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d081526020017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b81526020017f1277ae6415f0ef18f2ba5fb162c39eb7311f386e2d26d64401f4a25da77c253b81526020017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8081526020017f2fbd4dd2976be55d1a163aa9820fb88dfac5ddce77e1872e90632027327a5ebe81526020017f107aab49e65a67f9da9cd2abf78be38bd9dc1d5db39f81de36bcfa5b4b0390438152508152509050919050565b60405163e2ef09e560e01b815260040160405180910390fd5b610e0f60405180606001604052805f81526020015f81526020015f81525090565b610e198484611368565b808252610e2990859085906113b9565b60208201528051610e3f90859084908690611428565b60408201529392505050565b604080518082019091525f8082526020820152610e66611c0d565b835181526020808501519082015260408082018490525f908360608460075afa905080610ea65760405163033b714d60e31b815260040160405180910390fd5b505092915050565b604080518082019091525f8082526020820152610ec9611c2b565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460065afa905080610ea65760405163302aedb560e11b815260040160405180910390fd5b604080518082019091525f8082526020820152604080518082019091525f80825260208201525f610f4887878787611576565b90505f5160206121525f395f51905f525f610f64888789611a40565b9050610f7081836120f9565b60c08901516101a088015191925090819084908190830984089250610f9c856102dc8a5f015184610e4b565b955083828209905083846101c08a0151830984089250610fc4866102dc8a6020015184610e4b565b955083828209905083846101e08a0151830984089250610fec866102dc8a6040015184610e4b565b955083828209905083846102008a0151830984089250611014866102dc8a6060015184610e4b565b955083828209905083846102208a015183098408925061103c866102dc8a6080015184610e4b565b955083828209905083846102408a0151830984089250611064866102dc8d6040015184610e4b565b955083828209905083846102608a015183098408925061108c866102dc8d6060015184610e4b565b955083828209905083846102808a01518309840892506110b4866102dc8d6080015184610e4b565b955083828209905083846102a08a01518309840892506110dc866102dc8d60a0015184610e4b565b95505f8a60e00151905084856102c08b0151830985089350611106876102dc8b60a0015184610e4b565b965061113c6111366040805180820182525f80825260209182015281518083019092526001825260029082015290565b85610e4b565b975050505050505094509492505050565b604080518082019091525f8082526020820152815160208301511590151615611174575090565b6040518060400160405280835f015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516111b89190612132565b6111e2907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476120f9565b905292915050565b61121160405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f5191508061135a5760405163c206334f60e01b815260040160405180910390fd5b50151590505b949350505050565b81515f905f5160206121525f395f51905f52908380156113a9578493505f5b8281101561139d57838586099450600101611387565b506001840393506113b0565b6001830393505b50505092915050565b5f826001036113ca575060016100c9565b815f036113d857505f6100c9565b60208401515f5160206121525f395f51905f52905f908281860990508580156114065760018703925061140d565b6001840392505b5061141782611b2b565b915082828209979650505050505050565b5f5f5160206121525f395f51905f528282036114a15760015f5b60078110156114965781860361147357868160078110611464576114646120e5565b60200201519350505050611360565b82806114815761148161211e565b60408901516020015183099150600101611442565b505f92505050611360565b6114a9611c49565b6040870151600160c0838101828152920190805b60078110156114ea5760208403935085868a85518903088309808552601f199093019291506001016114bd565b505050505f5f5f90506001838960408c01515f5b600781101561153e578882518a85518c88518a0909098981880896505088898d84518c0308860994506020938401939283019291909101906001016114fe565b50505050809250505f61155083611b2b565b905060208a015185818909965050848187099550848287099a9950505050505050505050565b604080518082019091525f80825260208201525f5f5f5f5f5f5160206121525f395f51905f52905060808901518160208a015160208c0151099550895194508160a08b015160608c0151099350816101a089015185089250818184089250818584099450817f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a85099250816101c089015184089250818184089250818584099450817f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02585099250816101e089015184089250818184089250818584099450817f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a850992508161020089015184089250818184089250818584099450817f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881850992508161022089015184089250818184089250508084830993508084860894506116e38760a0015186610e4b565b9550885160608a015160808b0151838284099750836102c08b015189099750836102408b015183099550836101a08b015187089550838187089550838689099750836102608b015183099550836101c08b015187089550838187089550838689099750836102808b015183099550836101e08b015187089550838187089550838689099750836102a08b015183099550836102008b0151870895508381870895505050508083860994506117aa866102dc8c60c0015188856117a591906120f9565b610e4b565b95506117c3866102dc8c60e001518a6101a00151610e4b565b95506117dd866102dc8c61010001518a6101c00151610e4b565b95506117f7866102dc8c61012001518a6101e00151610e4b565b9550611811866102dc8c61014001518a6102000151610e4b565b9550806101c08801516101a0890151099250611836866102dc8c610160015186610e4b565b9550806102008801516101e089015109925061185b866102dc8c610180015186610e4b565b95506101a0870151925080838409915080828309915080828409925061188a866102dc8c6101e0015186610e4b565b95506101c087015192508083840991508082830991508082840992506118b9866102dc8c610200015186610e4b565b95506101e087015192508083840991508082830991508082840992506118e8866102dc8c610220015186610e4b565b95506102008701519250808384099150808283099150808284099250611917866102dc8c610240015186610e4b565b9550611934866102dc8c6101a001516117a58b6102200151611bbd565b9550611945868b6101c00151610eae565b9550806101c08801516101a0890151099250806101e0880151840992508061020088015184099250806102208801518409925061198b866102dc8c610260015186610e4b565b9550611999885f0151611bbd565b94506119ad866102dc8960c0015188610e4b565b955080600189510860a08a01519093508190800991508082840992508083860994506119e1866102dc8960e0015188610e4b565b95508083860994506119fc866102dc89610100015188610e4b565b9550808386099450611a17866102dc89610120015188610e4b565b9550808386099450611a32866102dc89610140015188610e4b565b9a9950505050505050505050565b5f5f5f5160206121525f395f51905f5290505f836020015190505f846040015190505f60019050606088015160808901516101a08901516102408a01518788898387098a868608088609945050506101c08901516102608a01518788898387098a868608088609945050506101e08901516102808a01518788898387098a868608088609945050506102008901516102a08a01518788898387098a8686080886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b5f815f03611b4c5760405163d6dbbb0d60e01b815260040160405180910390fd5b5f5f5f5160206121525f395f51905f52905060405160208152602080820152602060408201528460608201526002820360808201528160a082015260205f60c08360055afa9250505f51925081611bb657604051630c9d3e9960e21b815260040160405180910390fd5b5050919050565b5f5f5160206121525f395f51905f52821560018114611be0578382039250611bb6565b505f9392505050565b60405180606001604052805f81526020015f8152602001611c08611c49565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040516102e0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b60405290565b6040516102c0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b5f60408284031215611cd9575f5ffd5b6040805190810167ffffffffffffffff81118282101715611cfc57611cfc611c67565b604052823581526020928301359281019290925250919050565b5f82601f830112611d25575f5ffd5b60405160e0810167ffffffffffffffff81118282101715611d4857611d48611c67565b6040528060e0840185811115611d5c575f5ffd5b845b81811015611d76578035835260209283019201611d5e565b509195945050505050565b5f6104808284031215611d92575f5ffd5b611d9a611c7b565b9050611da68383611cc9565b8152611db58360408401611cc9565b6020820152611dc78360808401611cc9565b6040820152611dd98360c08401611cc9565b6060820152611dec836101008401611cc9565b6080820152611dff836101408401611cc9565b60a0820152611e12836101808401611cc9565b60c0820152611e25836101c08401611cc9565b60e0820152611e38836102008401611cc9565b610100820152611e4c836102408401611cc9565b610120820152611e60836102808401611cc9565b610140820152611e74836102c08401611cc9565b610160820152611e88836103008401611cc9565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f5f838503610a60811215611f20575f5ffd5b610500811215611f2e575f5ffd5b50611f37611ca5565b8435815260208086013590820152611f528660408701611cc9565b6040820152611f648660808701611cc9565b6060820152611f768660c08701611cc9565b6080820152611f89866101008701611cc9565b60a0820152611f9c866101408701611cc9565b60c0820152611faf866101808701611cc9565b60e0820152611fc2866101c08701611cc9565b610100820152611fd6866102008701611cc9565b610120820152611fea866102408701611cc9565b610140820152611ffe866102808701611cc9565b610160820152612012866102c08701611cc9565b610180820152612026866103008701611cc9565b6101a082015261203a866103408701611cc9565b6101c082015261204e866103808701611cc9565b6101e0820152612062866103c08701611cc9565b610200820152612076866104008701611cc9565b61022082015261208a866104408701611cc9565b61024082015261209e866104808701611cc9565b6102608201526104c08501356102808201526104e08501356102a082015292506120cc856105008601611d16565b91506120dc856105e08601611d81565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561211857634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261214c57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a
3029    /// ```
3030    #[rustfmt::skip]
3031    #[allow(clippy::all)]
3032    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
3033        b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x004W_5`\xE0\x1C\x80c\xCESzw\x14a\08W[__\xFD[a\0Ka\0F6`\x04a\x1F\x0CV[a\0_V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_a\0i\x82a\0\xD0V[a\0y\x83_[` \x02\x01Qa\x02\x0BV[a\0\x84\x83`\x01a\0oV[a\0\x8F\x83`\x02a\0oV[a\0\x9A\x83`\x03a\0oV[a\0\xA5\x83`\x04a\0oV[a\0\xB0\x83`\x05a\0oV[a\0\xBB\x83`\x06a\0oV[a\0\xC6\x84\x84\x84a\x02=V[\x90P[\x93\x92PPPV[\x80Qa\0\xDB\x90a\x041V[a\0\xE8\x81` \x01Qa\x041V[a\0\xF5\x81`@\x01Qa\x041V[a\x01\x02\x81``\x01Qa\x041V[a\x01\x0F\x81`\x80\x01Qa\x041V[a\x01\x1C\x81`\xA0\x01Qa\x041V[a\x01)\x81`\xC0\x01Qa\x041V[a\x016\x81`\xE0\x01Qa\x041V[a\x01D\x81a\x01\0\x01Qa\x041V[a\x01R\x81a\x01 \x01Qa\x041V[a\x01`\x81a\x01@\x01Qa\x041V[a\x01n\x81a\x01`\x01Qa\x041V[a\x01|\x81a\x01\x80\x01Qa\x041V[a\x01\x8A\x81a\x01\xA0\x01Qa\x02\x0BV[a\x01\x98\x81a\x01\xC0\x01Qa\x02\x0BV[a\x01\xA6\x81a\x01\xE0\x01Qa\x02\x0BV[a\x01\xB4\x81a\x02\0\x01Qa\x02\x0BV[a\x01\xC2\x81a\x02 \x01Qa\x02\x0BV[a\x01\xD0\x81a\x02@\x01Qa\x02\x0BV[a\x01\xDE\x81a\x02`\x01Qa\x02\x0BV[a\x01\xEC\x81a\x02\x80\x01Qa\x02\x0BV[a\x01\xFA\x81a\x02\xA0\x01Qa\x02\x0BV[a\x02\x08\x81a\x02\xC0\x01Qa\x02\x0BV[PV[_Q` a!R_9_Q\x90_R\x81\x10\x80a\x029W`@Qc\x01l\x173`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[_\x83` \x01Q`\x07\x14a\x02cW`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_a\x02o\x85\x85\x85a\x04\xB0V[\x90P_a\x02~\x86_\x01Qa\n\x10V[\x90P_a\x02\x90\x82\x84`\xA0\x01Q\x88a\r\xEEV[\x90Pa\x02\xAD`@Q\x80`@\x01`@R\x80_\x81R` \x01_\x81RP\x90V[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x02\xE1\x87a\x01`\x01Qa\x02\xDC\x89a\x01\x80\x01Q\x88`\xE0\x01Qa\x0EKV[a\x0E\xAEV[\x91P__a\x02\xF1\x8B\x88\x87\x8Ca\x0F\x15V[\x91P\x91Pa\x03\x02\x81a\x02\xDC\x84a\x11MV[\x92Pa\x03\x1B\x83a\x02\xDC\x8Ba\x01`\x01Q\x8A`\xA0\x01Qa\x0EKV[`\xA0\x88\x01Q`@\x88\x01Q` \x01Q\x91\x94P_Q` a!R_9_Q\x90_R\x91\x82\x90\x82\t\x90P\x81`\xE0\x8A\x01Q\x82\t\x90Pa\x03^\x85a\x02\xDC\x8Da\x01\x80\x01Q\x84a\x0EKV[\x94P_`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\x04\x1F\x87\x82a\x04\x12\x89a\x11MV[a\x04\x1Aa\x11\xEAV[a\x12\xB7V[\x9E\x9DPPPPPPPPPPPPPPV[\x80Q` \x82\x01Q_\x91\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x91\x15\x90\x15\x16\x15a\x04jWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x04\xABW`@Qc'\x9E4S`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPV[a\x04\xF0`@Q\x80a\x01\0\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[__Q` a!R_9_Q\x90_R\x90P`@Q` \x81\x01_\x81R`\xFE`\xE0\x1B\x81R\x86Q`\xC0\x1B`\x04\x82\x01R` \x87\x01Q`\xC0\x1B`\x0C\x82\x01Ra\x02\x80\x87\x01Q` \x82\x01Ra\x02\xA0\x87\x01Q`@\x82\x01R`\x01``\x82\x01R\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ`\x80\x82\x01R\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%`\xA0\x82\x01R\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n`\xC0\x82\x01R\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81`\xE0\x82\x01R`\xE0\x87\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01\0\x87\x01Q\x80Qa\x01@\x83\x01R` \x81\x01Qa\x01`\x83\x01RPa\x01 \x87\x01Q\x80Qa\x01\x80\x83\x01R` \x81\x01Qa\x01\xA0\x83\x01RPa\x01@\x87\x01Q\x80Qa\x01\xC0\x83\x01R` \x81\x01Qa\x01\xE0\x83\x01RPa\x01`\x87\x01Q\x80Qa\x02\0\x83\x01R` \x81\x01Qa\x02 \x83\x01RPa\x01\x80\x87\x01Q\x80Qa\x02@\x83\x01R` \x81\x01Qa\x02`\x83\x01RPa\x01\xE0\x87\x01Q\x80Qa\x02\x80\x83\x01R` \x81\x01Qa\x02\xA0\x83\x01RPa\x02\0\x87\x01Q\x80Qa\x02\xC0\x83\x01R` \x81\x01Qa\x02\xE0\x83\x01RPa\x02 \x87\x01Q\x80Qa\x03\0\x83\x01R` \x81\x01Qa\x03 \x83\x01RPa\x02@\x87\x01Q\x80Qa\x03@\x83\x01R` \x81\x01Qa\x03`\x83\x01RPa\x01\xA0\x87\x01Q\x80Qa\x03\x80\x83\x01R` \x81\x01Qa\x03\xA0\x83\x01RPa\x01\xC0\x87\x01Q\x80Qa\x03\xC0\x83\x01R` \x81\x01Qa\x03\xE0\x83\x01RPa\x02`\x87\x01Q\x80Qa\x04\0\x83\x01R` \x81\x01Qa\x04 \x83\x01RP`@\x87\x01Q\x80Qa\x04@\x83\x01R` \x81\x01Qa\x04`\x83\x01RP``\x87\x01Q\x80Qa\x04\x80\x83\x01R` \x81\x01Qa\x04\xA0\x83\x01RP`\x80\x87\x01Q\x80Qa\x04\xC0\x83\x01R` \x81\x01Qa\x04\xE0\x83\x01RP`\xA0\x87\x01Q\x80Qa\x05\0\x83\x01R` \x81\x01Qa\x05 \x83\x01RP`\xC0\x87\x01Q\x80Qa\x05@\x83\x01R` \x81\x01Qa\x05`\x83\x01RP\x85Qa\x05\x80\x82\x01R` \x86\x01Qa\x05\xA0\x82\x01R`@\x86\x01Qa\x05\xC0\x82\x01R``\x86\x01Qa\x05\xE0\x82\x01R`\x80\x86\x01Qa\x06\0\x82\x01R`\xA0\x86\x01Qa\x06 \x82\x01R`\xC0\x86\x01Qa\x06@\x82\x01R\x84Q\x80Qa\x06`\x83\x01R` \x81\x01Qa\x06\x80\x83\x01RP` \x85\x01Q\x80Qa\x06\xA0\x83\x01R` \x81\x01Qa\x06\xC0\x83\x01RP`@\x85\x01Q\x80Qa\x06\xE0\x83\x01R` \x81\x01Qa\x07\0\x83\x01RP``\x85\x01Q\x80Qa\x07 \x83\x01R` \x81\x01Qa\x07@\x83\x01RP`\x80\x85\x01Q\x80Qa\x07`\x83\x01R` \x81\x01Qa\x07\x80\x83\x01RP_\x82Ra\x07\xC0\x82 \x82R\x82\x82Q\x06``\x85\x01R` \x82 \x82R\x82\x82Q\x06`\x80\x85\x01R`\xA0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP``\x82 \x80\x83R\x83\x81\x06\x85R\x83\x81\x82\t\x84\x82\x82\t\x91P\x80` \x87\x01RP\x80`@\x86\x01RP`\xC0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP`\xE0\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPa\x01\0\x85\x01Q\x80Q`\x80\x83\x01R` \x81\x01Q`\xA0\x83\x01RPa\x01 \x85\x01Q\x80Q`\xC0\x83\x01R` \x81\x01Q`\xE0\x83\x01RPa\x01@\x85\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01`\x82 \x82R\x82\x82Q\x06`\xA0\x85\x01Ra\x01\xA0\x85\x01Q\x81Ra\x01\xC0\x85\x01Q` \x82\x01Ra\x01\xE0\x85\x01Q`@\x82\x01Ra\x02\0\x85\x01Q``\x82\x01Ra\x02 \x85\x01Q`\x80\x82\x01Ra\x02@\x85\x01Q`\xA0\x82\x01Ra\x02`\x85\x01Q`\xC0\x82\x01Ra\x02\x80\x85\x01Q`\xE0\x82\x01Ra\x02\xA0\x85\x01Qa\x01\0\x82\x01Ra\x02\xC0\x85\x01Qa\x01 \x82\x01Ra\x01`\x82 \x82R\x82\x82Q\x06`\xC0\x85\x01Ra\x01`\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RPa\x01\x80\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPP`\xA0\x81 \x82\x81\x06`\xE0\x85\x01RPPP\x93\x92PPPV[a\n\x18a\x1B\xE9V[\x81b\x01\0\0\x03a\x0BWW`@Q\x80``\x01`@R\x80`\x10\x81R` \x01\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7\x81R` \x01\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB\x81R` \x01\x7F\x08h\x12\xA0\n\xC4>\xA8\x01f\x9Cd\x01q <A\xA4\x96g\x1B\xFB\xC0e\xAC\x8D\xB2MR\xCF1\xE5\x81R` \x01\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85\x81R` \x01\x7F\x12YzV\xC2\xE48b\x0B\x90A\xB9\x89\x92\xAE\rNp[x\0W\xBFwf\xA2v|\xEC\xE1n\x1D\x81R` \x01\x7F\x02\xD9A\x17\xCD\x17\xBC\xF1)\x0F\xD6|\x01\x15]\xD4\x08\x07\x85}\xFFJZ\x0BM\xC6{\xEF\xA8\xAA4\xFD\x81RP\x81RP\x90P\x91\x90PV[\x81b\x10\0\0\x03a\x0C\x97W`@Q\x80``\x01`@R\x80`\x14\x81R` \x01\x7F0dKl\x9CJr\x16\x9EM\xAA1}%\xF0E\x12\xAE\x15\xC5;4\xE8\xF5\xAC\xD8\xE1U\xD0\xA6\xC1\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F&\x12]\xA1\n\x0E\xD0c'P\x8A\xBA\x06\xD1\xE3\x03\xACaf2\xDB\xED4\x9FSB-\xA9S3xW\x81R` \x01\x7F\"`\xE7$\x84K\xCARQ\x82\x93S\x96\x8EI\x150RXA\x83WG:\\\x1DY\x7Fa?l\xBD\x81R` \x01\x7F \x87\xEA,\xD6d'\x86\x08\xFB\x0E\xBD\xB8 \x90\x7FY\x85\x02\xC8\x1Bf\x90\xC1\x85\xE2\xBF\x15\xCB\x93_B\x81R` \x01\x7F\x19\xDD\xBC\xAF:\x8DF\xC1\\\x01v\xFB\xB5\xB9^M\xC5p\x88\xFF\x13\xF4\xD1\xBD\x84\xC6\xBF\xA5}\xCD\xC0\xE0\x81R` \x01\x7F\x05\xA2\xC8\\\xFCY\x17\x89`\\\xAE\x81\x8E7\xDDAa\xEE\xF9\xAAfk\xECo\xE4(\x8D\t\xE6\xD24\x18\x81R` \x01\x7F\x11\xF7\x0ESc%\x8F\xF4\xF0\xD7\x16\xA6S\xE1\xDCA\xF1\xC6D\x84\xD7\xF4\xB6\xE2\x19\xD67v\x14\xA3\x90\\\x81RP\x81RP\x90P\x91\x90PV[\x81` \x03a\r\xD5W`@Q\x80``\x01`@R\x80`\x05\x81R` \x01\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0\x81R` \x01\x7F!\x08,\xA2\x16\xCB\xBFN\x1CnOE\x94\xDDP\x8C\x99m\xFB\xE1\x17N\xFB\x98\xB1\x15\t\xC6\xE3\x06F\x0B\x81R` \x01\x7F\x12w\xAEd\x15\xF0\xEF\x18\xF2\xBA_\xB1b\xC3\x9E\xB71\x1F8n-&\xD6D\x01\xF4\xA2]\xA7|%;\x81R` \x01\x7F+3}\xE1\xC8\xC1O\"\xEC\x9B\x9E/\x96\xAF\xEF6Rbsf\xF8\x17\n\n\x94\x8D\xADJ\xC1\xBD^\x80\x81R` \x01\x7F/\xBDM\xD2\x97k\xE5]\x1A\x16:\xA9\x82\x0F\xB8\x8D\xFA\xC5\xDD\xCEw\xE1\x87.\x90c '2z^\xBE\x81R` \x01\x7F\x10z\xABI\xE6Zg\xF9\xDA\x9C\xD2\xAB\xF7\x8B\xE3\x8B\xD9\xDC\x1D]\xB3\x9F\x81\xDE6\xBC\xFA[K\x03\x90C\x81RP\x81RP\x90P\x91\x90PV[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\x0F`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81RP\x90V[a\x0E\x19\x84\x84a\x13hV[\x80\x82Ra\x0E)\x90\x85\x90\x85\x90a\x13\xB9V[` \x82\x01R\x80Qa\x0E?\x90\x85\x90\x84\x90\x86\x90a\x14(V[`@\x82\x01R\x93\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0Efa\x1C\rV[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x80\x82\x01\x84\x90R_\x90\x83``\x84`\x07Z\xFA\x90P\x80a\x0E\xA6W`@Qc\x03;qM`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0E\xC9a\x1C+V[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x80\x84\x01\x91\x90\x91R\x90\x84\x01Q``\x83\x01R_\x90\x83`\x80\x84`\x06Z\xFA\x90P\x80a\x0E\xA6W`@Qc0*\xED\xB5`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x0FH\x87\x87\x87\x87a\x15vV[\x90P_Q` a!R_9_Q\x90_R_a\x0Fd\x88\x87\x89a\x1A@V[\x90Pa\x0Fp\x81\x83a \xF9V[`\xC0\x89\x01Qa\x01\xA0\x88\x01Q\x91\x92P\x90\x81\x90\x84\x90\x81\x90\x83\t\x84\x08\x92Pa\x0F\x9C\x85a\x02\xDC\x8A_\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xC0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xC4\x86a\x02\xDC\x8A` \x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xE0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xEC\x86a\x02\xDC\x8A`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x14\x86a\x02\xDC\x8A``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02 \x8A\x01Q\x83\t\x84\x08\x92Pa\x10<\x86a\x02\xDC\x8A`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02@\x8A\x01Q\x83\t\x84\x08\x92Pa\x10d\x86a\x02\xDC\x8D`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02`\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x8C\x86a\x02\xDC\x8D``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\x80\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xB4\x86a\x02\xDC\x8D`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\xA0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xDC\x86a\x02\xDC\x8D`\xA0\x01Q\x84a\x0EKV[\x95P_\x8A`\xE0\x01Q\x90P\x84\x85a\x02\xC0\x8B\x01Q\x83\t\x85\x08\x93Pa\x11\x06\x87a\x02\xDC\x8B`\xA0\x01Q\x84a\x0EKV[\x96Pa\x11<a\x116`@\x80Q\x80\x82\x01\x82R_\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x85a\x0EKV[\x97PPPPPPP\x94P\x94\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x11tWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x84` \x01Qa\x11\xB8\x91\x90a!2V[a\x11\xE2\x90\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDGa \xF9V[\x90R\x92\x91PPV[a\x12\x11`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[___`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x13ZW`@Qc\xC2\x063O`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[P\x15\x15\x90P[\x94\x93PPPPV[\x81Q_\x90_Q` a!R_9_Q\x90_R\x90\x83\x80\x15a\x13\xA9W\x84\x93P_[\x82\x81\x10\x15a\x13\x9DW\x83\x85\x86\t\x94P`\x01\x01a\x13\x87V[P`\x01\x84\x03\x93Pa\x13\xB0V[`\x01\x83\x03\x93P[PPP\x92\x91PPV[_\x82`\x01\x03a\x13\xCAWP`\x01a\0\xC9V[\x81_\x03a\x13\xD8WP_a\0\xC9V[` \x84\x01Q_Q` a!R_9_Q\x90_R\x90_\x90\x82\x81\x86\t\x90P\x85\x80\x15a\x14\x06W`\x01\x87\x03\x92Pa\x14\rV[`\x01\x84\x03\x92P[Pa\x14\x17\x82a\x1B+V[\x91P\x82\x82\x82\t\x97\x96PPPPPPPV[__Q` a!R_9_Q\x90_R\x82\x82\x03a\x14\xA1W`\x01_[`\x07\x81\x10\x15a\x14\x96W\x81\x86\x03a\x14sW\x86\x81`\x07\x81\x10a\x14dWa\x14da \xE5V[` \x02\x01Q\x93PPPPa\x13`V[\x82\x80a\x14\x81Wa\x14\x81a!\x1EV[`@\x89\x01Q` \x01Q\x83\t\x91P`\x01\x01a\x14BV[P_\x92PPPa\x13`V[a\x14\xA9a\x1CIV[`@\x87\x01Q`\x01`\xC0\x83\x81\x01\x82\x81R\x92\x01\x90\x80[`\x07\x81\x10\x15a\x14\xEAW` \x84\x03\x93P\x85\x86\x8A\x85Q\x89\x03\x08\x83\t\x80\x85R`\x1F\x19\x90\x93\x01\x92\x91P`\x01\x01a\x14\xBDV[PPPP___\x90P`\x01\x83\x89`@\x8C\x01Q_[`\x07\x81\x10\x15a\x15>W\x88\x82Q\x8A\x85Q\x8C\x88Q\x8A\t\t\t\x89\x81\x88\x08\x96PP\x88\x89\x8D\x84Q\x8C\x03\x08\x86\t\x94P` \x93\x84\x01\x93\x92\x83\x01\x92\x91\x90\x91\x01\x90`\x01\x01a\x14\xFEV[PPPP\x80\x92PP_a\x15P\x83a\x1B+V[\x90P` \x8A\x01Q\x85\x81\x89\t\x96PP\x84\x81\x87\t\x95P\x84\x82\x87\t\x9A\x99PPPPPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R______Q` a!R_9_Q\x90_R\x90P`\x80\x89\x01Q\x81` \x8A\x01Q` \x8C\x01Q\t\x95P\x89Q\x94P\x81`\xA0\x8B\x01Q``\x8C\x01Q\t\x93P\x81a\x01\xA0\x89\x01Q\x85\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ\x85\t\x92P\x81a\x01\xC0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%\x85\t\x92P\x81a\x01\xE0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n\x85\t\x92P\x81a\x02\0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81\x85\t\x92P\x81a\x02 \x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92PP\x80\x84\x83\t\x93P\x80\x84\x86\x08\x94Pa\x16\xE3\x87`\xA0\x01Q\x86a\x0EKV[\x95P\x88Q``\x8A\x01Q`\x80\x8B\x01Q\x83\x82\x84\t\x97P\x83a\x02\xC0\x8B\x01Q\x89\t\x97P\x83a\x02@\x8B\x01Q\x83\t\x95P\x83a\x01\xA0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02`\x8B\x01Q\x83\t\x95P\x83a\x01\xC0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\x80\x8B\x01Q\x83\t\x95P\x83a\x01\xE0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\xA0\x8B\x01Q\x83\t\x95P\x83a\x02\0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95PPPP\x80\x83\x86\t\x94Pa\x17\xAA\x86a\x02\xDC\x8C`\xC0\x01Q\x88\x85a\x17\xA5\x91\x90a \xF9V[a\x0EKV[\x95Pa\x17\xC3\x86a\x02\xDC\x8C`\xE0\x01Q\x8Aa\x01\xA0\x01Qa\x0EKV[\x95Pa\x17\xDD\x86a\x02\xDC\x8Ca\x01\0\x01Q\x8Aa\x01\xC0\x01Qa\x0EKV[\x95Pa\x17\xF7\x86a\x02\xDC\x8Ca\x01 \x01Q\x8Aa\x01\xE0\x01Qa\x0EKV[\x95Pa\x18\x11\x86a\x02\xDC\x8Ca\x01@\x01Q\x8Aa\x02\0\x01Qa\x0EKV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92Pa\x186\x86a\x02\xDC\x8Ca\x01`\x01Q\x86a\x0EKV[\x95P\x80a\x02\0\x88\x01Qa\x01\xE0\x89\x01Q\t\x92Pa\x18[\x86a\x02\xDC\x8Ca\x01\x80\x01Q\x86a\x0EKV[\x95Pa\x01\xA0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\x8A\x86a\x02\xDC\x8Ca\x01\xE0\x01Q\x86a\x0EKV[\x95Pa\x01\xC0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xB9\x86a\x02\xDC\x8Ca\x02\0\x01Q\x86a\x0EKV[\x95Pa\x01\xE0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xE8\x86a\x02\xDC\x8Ca\x02 \x01Q\x86a\x0EKV[\x95Pa\x02\0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\x17\x86a\x02\xDC\x8Ca\x02@\x01Q\x86a\x0EKV[\x95Pa\x194\x86a\x02\xDC\x8Ca\x01\xA0\x01Qa\x17\xA5\x8Ba\x02 \x01Qa\x1B\xBDV[\x95Pa\x19E\x86\x8Ba\x01\xC0\x01Qa\x0E\xAEV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92P\x80a\x01\xE0\x88\x01Q\x84\t\x92P\x80a\x02\0\x88\x01Q\x84\t\x92P\x80a\x02 \x88\x01Q\x84\t\x92Pa\x19\x8B\x86a\x02\xDC\x8Ca\x02`\x01Q\x86a\x0EKV[\x95Pa\x19\x99\x88_\x01Qa\x1B\xBDV[\x94Pa\x19\xAD\x86a\x02\xDC\x89`\xC0\x01Q\x88a\x0EKV[\x95P\x80`\x01\x89Q\x08`\xA0\x8A\x01Q\x90\x93P\x81\x90\x80\t\x91P\x80\x82\x84\t\x92P\x80\x83\x86\t\x94Pa\x19\xE1\x86a\x02\xDC\x89`\xE0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x19\xFC\x86a\x02\xDC\x89a\x01\0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A\x17\x86a\x02\xDC\x89a\x01 \x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A2\x86a\x02\xDC\x89a\x01@\x01Q\x88a\x0EKV[\x9A\x99PPPPPPPPPPV[___Q` a!R_9_Q\x90_R\x90P_\x83` \x01Q\x90P_\x84`@\x01Q\x90P_`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[_\x81_\x03a\x1BLW`@Qc\xD6\xDB\xBB\r`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[___Q` a!R_9_Q\x90_R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x82\x03`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x92PP_Q\x92P\x81a\x1B\xB6W`@Qc\x0C\x9D>\x99`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x91\x90PV[__Q` a!R_9_Q\x90_R\x82\x15`\x01\x81\x14a\x1B\xE0W\x83\x82\x03\x92Pa\x1B\xB6V[P_\x93\x92PPPV[`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01a\x1C\x08a\x1CIV[\x90R\x90V[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xE0\x01`@R\x80`\x07\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Qa\x02\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[`@R\x90V[`@Qa\x02\xC0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[_`@\x82\x84\x03\x12\x15a\x1C\xD9W__\xFD[`@\x80Q\x90\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\xFCWa\x1C\xFCa\x1CgV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x82`\x1F\x83\x01\x12a\x1D%W__\xFD[`@Q`\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1DHWa\x1DHa\x1CgV[`@R\x80`\xE0\x84\x01\x85\x81\x11\x15a\x1D\\W__\xFD[\x84[\x81\x81\x10\x15a\x1DvW\x805\x83R` \x92\x83\x01\x92\x01a\x1D^V[P\x91\x95\x94PPPPPV[_a\x04\x80\x82\x84\x03\x12\x15a\x1D\x92W__\xFD[a\x1D\x9Aa\x1C{V[\x90Pa\x1D\xA6\x83\x83a\x1C\xC9V[\x81Ra\x1D\xB5\x83`@\x84\x01a\x1C\xC9V[` \x82\x01Ra\x1D\xC7\x83`\x80\x84\x01a\x1C\xC9V[`@\x82\x01Ra\x1D\xD9\x83`\xC0\x84\x01a\x1C\xC9V[``\x82\x01Ra\x1D\xEC\x83a\x01\0\x84\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1D\xFF\x83a\x01@\x84\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1E\x12\x83a\x01\x80\x84\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1E%\x83a\x01\xC0\x84\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1E8\x83a\x02\0\x84\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1EL\x83a\x02@\x84\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1E`\x83a\x02\x80\x84\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1Et\x83a\x02\xC0\x84\x01a\x1C\xC9V[a\x01`\x82\x01Ra\x1E\x88\x83a\x03\0\x84\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra\x03@\x82\x015a\x01\xA0\x82\x01Ra\x03`\x82\x015a\x01\xC0\x82\x01Ra\x03\x80\x82\x015a\x01\xE0\x82\x01Ra\x03\xA0\x82\x015a\x02\0\x82\x01Ra\x03\xC0\x82\x015a\x02 \x82\x01Ra\x03\xE0\x82\x015a\x02@\x82\x01Ra\x04\0\x82\x015a\x02`\x82\x01Ra\x04 \x82\x015a\x02\x80\x82\x01Ra\x04@\x82\x015a\x02\xA0\x82\x01Ra\x04`\x90\x91\x015a\x02\xC0\x82\x01R\x91\x90PV[___\x83\x85\x03a\n`\x81\x12\x15a\x1F W__\xFD[a\x05\0\x81\x12\x15a\x1F.W__\xFD[Pa\x1F7a\x1C\xA5V[\x845\x81R` \x80\x86\x015\x90\x82\x01Ra\x1FR\x86`@\x87\x01a\x1C\xC9V[`@\x82\x01Ra\x1Fd\x86`\x80\x87\x01a\x1C\xC9V[``\x82\x01Ra\x1Fv\x86`\xC0\x87\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1F\x89\x86a\x01\0\x87\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1F\x9C\x86a\x01@\x87\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1F\xAF\x86a\x01\x80\x87\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1F\xC2\x86a\x01\xC0\x87\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1F\xD6\x86a\x02\0\x87\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1F\xEA\x86a\x02@\x87\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1F\xFE\x86a\x02\x80\x87\x01a\x1C\xC9V[a\x01`\x82\x01Ra \x12\x86a\x02\xC0\x87\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra &\x86a\x03\0\x87\x01a\x1C\xC9V[a\x01\xA0\x82\x01Ra :\x86a\x03@\x87\x01a\x1C\xC9V[a\x01\xC0\x82\x01Ra N\x86a\x03\x80\x87\x01a\x1C\xC9V[a\x01\xE0\x82\x01Ra b\x86a\x03\xC0\x87\x01a\x1C\xC9V[a\x02\0\x82\x01Ra v\x86a\x04\0\x87\x01a\x1C\xC9V[a\x02 \x82\x01Ra \x8A\x86a\x04@\x87\x01a\x1C\xC9V[a\x02@\x82\x01Ra \x9E\x86a\x04\x80\x87\x01a\x1C\xC9V[a\x02`\x82\x01Ra\x04\xC0\x85\x015a\x02\x80\x82\x01Ra\x04\xE0\x85\x015a\x02\xA0\x82\x01R\x92Pa \xCC\x85a\x05\0\x86\x01a\x1D\x16V[\x91Pa \xDC\x85a\x05\xE0\x86\x01a\x1D\x81V[\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[\x81\x81\x03\x81\x81\x11\x15a!\x18WcNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x92\x91PPV[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a!LWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V\xFE0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X](3\xE8Hy\xB9p\x91C\xE1\xF5\x93\xF0\0\0\x01\xA1dsolcC\0\x08\x1C\0\n",
3034    );
3035    #[derive(serde::Serialize, serde::Deserialize)]
3036    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3037    /**Custom error with signature `BN254G1AddFailed()` and selector `0x6055db6a`.
3038```solidity
3039error BN254G1AddFailed();
3040```*/
3041    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3042    #[derive(Clone)]
3043    pub struct BN254G1AddFailed;
3044    #[allow(
3045        non_camel_case_types,
3046        non_snake_case,
3047        clippy::pub_underscore_fields,
3048        clippy::style
3049    )]
3050    const _: () = {
3051        use alloy::sol_types as alloy_sol_types;
3052        #[doc(hidden)]
3053        type UnderlyingSolTuple<'a> = ();
3054        #[doc(hidden)]
3055        type UnderlyingRustTuple<'a> = ();
3056        #[cfg(test)]
3057        #[allow(dead_code, unreachable_patterns)]
3058        fn _type_assertion(
3059            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3060        ) {
3061            match _t {
3062                alloy_sol_types::private::AssertTypeEq::<
3063                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3064                >(_) => {}
3065            }
3066        }
3067        #[automatically_derived]
3068        #[doc(hidden)]
3069        impl ::core::convert::From<BN254G1AddFailed> for UnderlyingRustTuple<'_> {
3070            fn from(value: BN254G1AddFailed) -> Self {
3071                ()
3072            }
3073        }
3074        #[automatically_derived]
3075        #[doc(hidden)]
3076        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254G1AddFailed {
3077            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3078                Self
3079            }
3080        }
3081        #[automatically_derived]
3082        impl alloy_sol_types::SolError for BN254G1AddFailed {
3083            type Parameters<'a> = UnderlyingSolTuple<'a>;
3084            type Token<'a> = <Self::Parameters<
3085                'a,
3086            > as alloy_sol_types::SolType>::Token<'a>;
3087            const SIGNATURE: &'static str = "BN254G1AddFailed()";
3088            const SELECTOR: [u8; 4] = [96u8, 85u8, 219u8, 106u8];
3089            #[inline]
3090            fn new<'a>(
3091                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3092            ) -> Self {
3093                tuple.into()
3094            }
3095            #[inline]
3096            fn tokenize(&self) -> Self::Token<'_> {
3097                ()
3098            }
3099            #[inline]
3100            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3101                <Self::Parameters<
3102                    '_,
3103                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3104                    .map(Self::new)
3105            }
3106        }
3107    };
3108    #[derive(serde::Serialize, serde::Deserialize)]
3109    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3110    /**Custom error with signature `BN254PairingProdFailed()` and selector `0xc206334f`.
3111```solidity
3112error BN254PairingProdFailed();
3113```*/
3114    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3115    #[derive(Clone)]
3116    pub struct BN254PairingProdFailed;
3117    #[allow(
3118        non_camel_case_types,
3119        non_snake_case,
3120        clippy::pub_underscore_fields,
3121        clippy::style
3122    )]
3123    const _: () = {
3124        use alloy::sol_types as alloy_sol_types;
3125        #[doc(hidden)]
3126        type UnderlyingSolTuple<'a> = ();
3127        #[doc(hidden)]
3128        type UnderlyingRustTuple<'a> = ();
3129        #[cfg(test)]
3130        #[allow(dead_code, unreachable_patterns)]
3131        fn _type_assertion(
3132            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3133        ) {
3134            match _t {
3135                alloy_sol_types::private::AssertTypeEq::<
3136                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3137                >(_) => {}
3138            }
3139        }
3140        #[automatically_derived]
3141        #[doc(hidden)]
3142        impl ::core::convert::From<BN254PairingProdFailed> for UnderlyingRustTuple<'_> {
3143            fn from(value: BN254PairingProdFailed) -> Self {
3144                ()
3145            }
3146        }
3147        #[automatically_derived]
3148        #[doc(hidden)]
3149        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254PairingProdFailed {
3150            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3151                Self
3152            }
3153        }
3154        #[automatically_derived]
3155        impl alloy_sol_types::SolError for BN254PairingProdFailed {
3156            type Parameters<'a> = UnderlyingSolTuple<'a>;
3157            type Token<'a> = <Self::Parameters<
3158                'a,
3159            > as alloy_sol_types::SolType>::Token<'a>;
3160            const SIGNATURE: &'static str = "BN254PairingProdFailed()";
3161            const SELECTOR: [u8; 4] = [194u8, 6u8, 51u8, 79u8];
3162            #[inline]
3163            fn new<'a>(
3164                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3165            ) -> Self {
3166                tuple.into()
3167            }
3168            #[inline]
3169            fn tokenize(&self) -> Self::Token<'_> {
3170                ()
3171            }
3172            #[inline]
3173            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3174                <Self::Parameters<
3175                    '_,
3176                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3177                    .map(Self::new)
3178            }
3179        }
3180    };
3181    #[derive(serde::Serialize, serde::Deserialize)]
3182    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3183    /**Custom error with signature `BN254ScalarInvZero()` and selector `0xd6dbbb0d`.
3184```solidity
3185error BN254ScalarInvZero();
3186```*/
3187    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3188    #[derive(Clone)]
3189    pub struct BN254ScalarInvZero;
3190    #[allow(
3191        non_camel_case_types,
3192        non_snake_case,
3193        clippy::pub_underscore_fields,
3194        clippy::style
3195    )]
3196    const _: () = {
3197        use alloy::sol_types as alloy_sol_types;
3198        #[doc(hidden)]
3199        type UnderlyingSolTuple<'a> = ();
3200        #[doc(hidden)]
3201        type UnderlyingRustTuple<'a> = ();
3202        #[cfg(test)]
3203        #[allow(dead_code, unreachable_patterns)]
3204        fn _type_assertion(
3205            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3206        ) {
3207            match _t {
3208                alloy_sol_types::private::AssertTypeEq::<
3209                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3210                >(_) => {}
3211            }
3212        }
3213        #[automatically_derived]
3214        #[doc(hidden)]
3215        impl ::core::convert::From<BN254ScalarInvZero> for UnderlyingRustTuple<'_> {
3216            fn from(value: BN254ScalarInvZero) -> Self {
3217                ()
3218            }
3219        }
3220        #[automatically_derived]
3221        #[doc(hidden)]
3222        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254ScalarInvZero {
3223            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3224                Self
3225            }
3226        }
3227        #[automatically_derived]
3228        impl alloy_sol_types::SolError for BN254ScalarInvZero {
3229            type Parameters<'a> = UnderlyingSolTuple<'a>;
3230            type Token<'a> = <Self::Parameters<
3231                'a,
3232            > as alloy_sol_types::SolType>::Token<'a>;
3233            const SIGNATURE: &'static str = "BN254ScalarInvZero()";
3234            const SELECTOR: [u8; 4] = [214u8, 219u8, 187u8, 13u8];
3235            #[inline]
3236            fn new<'a>(
3237                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3238            ) -> Self {
3239                tuple.into()
3240            }
3241            #[inline]
3242            fn tokenize(&self) -> Self::Token<'_> {
3243                ()
3244            }
3245            #[inline]
3246            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3247                <Self::Parameters<
3248                    '_,
3249                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3250                    .map(Self::new)
3251            }
3252        }
3253    };
3254    #[derive(serde::Serialize, serde::Deserialize)]
3255    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3256    /**Custom error with signature `BN254ScalarMulFailed()` and selector `0x19db8a68`.
3257```solidity
3258error BN254ScalarMulFailed();
3259```*/
3260    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3261    #[derive(Clone)]
3262    pub struct BN254ScalarMulFailed;
3263    #[allow(
3264        non_camel_case_types,
3265        non_snake_case,
3266        clippy::pub_underscore_fields,
3267        clippy::style
3268    )]
3269    const _: () = {
3270        use alloy::sol_types as alloy_sol_types;
3271        #[doc(hidden)]
3272        type UnderlyingSolTuple<'a> = ();
3273        #[doc(hidden)]
3274        type UnderlyingRustTuple<'a> = ();
3275        #[cfg(test)]
3276        #[allow(dead_code, unreachable_patterns)]
3277        fn _type_assertion(
3278            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3279        ) {
3280            match _t {
3281                alloy_sol_types::private::AssertTypeEq::<
3282                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3283                >(_) => {}
3284            }
3285        }
3286        #[automatically_derived]
3287        #[doc(hidden)]
3288        impl ::core::convert::From<BN254ScalarMulFailed> for UnderlyingRustTuple<'_> {
3289            fn from(value: BN254ScalarMulFailed) -> Self {
3290                ()
3291            }
3292        }
3293        #[automatically_derived]
3294        #[doc(hidden)]
3295        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254ScalarMulFailed {
3296            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3297                Self
3298            }
3299        }
3300        #[automatically_derived]
3301        impl alloy_sol_types::SolError for BN254ScalarMulFailed {
3302            type Parameters<'a> = UnderlyingSolTuple<'a>;
3303            type Token<'a> = <Self::Parameters<
3304                'a,
3305            > as alloy_sol_types::SolType>::Token<'a>;
3306            const SIGNATURE: &'static str = "BN254ScalarMulFailed()";
3307            const SELECTOR: [u8; 4] = [25u8, 219u8, 138u8, 104u8];
3308            #[inline]
3309            fn new<'a>(
3310                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3311            ) -> Self {
3312                tuple.into()
3313            }
3314            #[inline]
3315            fn tokenize(&self) -> Self::Token<'_> {
3316                ()
3317            }
3318            #[inline]
3319            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3320                <Self::Parameters<
3321                    '_,
3322                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3323                    .map(Self::new)
3324            }
3325        }
3326    };
3327    #[derive(serde::Serialize, serde::Deserialize)]
3328    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3329    /**Custom error with signature `InvalidG1()` and selector `0x9e78d14c`.
3330```solidity
3331error InvalidG1();
3332```*/
3333    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3334    #[derive(Clone)]
3335    pub struct InvalidG1;
3336    #[allow(
3337        non_camel_case_types,
3338        non_snake_case,
3339        clippy::pub_underscore_fields,
3340        clippy::style
3341    )]
3342    const _: () = {
3343        use alloy::sol_types as alloy_sol_types;
3344        #[doc(hidden)]
3345        type UnderlyingSolTuple<'a> = ();
3346        #[doc(hidden)]
3347        type UnderlyingRustTuple<'a> = ();
3348        #[cfg(test)]
3349        #[allow(dead_code, unreachable_patterns)]
3350        fn _type_assertion(
3351            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3352        ) {
3353            match _t {
3354                alloy_sol_types::private::AssertTypeEq::<
3355                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3356                >(_) => {}
3357            }
3358        }
3359        #[automatically_derived]
3360        #[doc(hidden)]
3361        impl ::core::convert::From<InvalidG1> for UnderlyingRustTuple<'_> {
3362            fn from(value: InvalidG1) -> Self {
3363                ()
3364            }
3365        }
3366        #[automatically_derived]
3367        #[doc(hidden)]
3368        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidG1 {
3369            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3370                Self
3371            }
3372        }
3373        #[automatically_derived]
3374        impl alloy_sol_types::SolError for InvalidG1 {
3375            type Parameters<'a> = UnderlyingSolTuple<'a>;
3376            type Token<'a> = <Self::Parameters<
3377                'a,
3378            > as alloy_sol_types::SolType>::Token<'a>;
3379            const SIGNATURE: &'static str = "InvalidG1()";
3380            const SELECTOR: [u8; 4] = [158u8, 120u8, 209u8, 76u8];
3381            #[inline]
3382            fn new<'a>(
3383                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3384            ) -> Self {
3385                tuple.into()
3386            }
3387            #[inline]
3388            fn tokenize(&self) -> Self::Token<'_> {
3389                ()
3390            }
3391            #[inline]
3392            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3393                <Self::Parameters<
3394                    '_,
3395                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3396                    .map(Self::new)
3397            }
3398        }
3399    };
3400    #[derive(serde::Serialize, serde::Deserialize)]
3401    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3402    /**Custom error with signature `InvalidPlonkArgs()` and selector `0xfd9a2d1b`.
3403```solidity
3404error InvalidPlonkArgs();
3405```*/
3406    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3407    #[derive(Clone)]
3408    pub struct InvalidPlonkArgs;
3409    #[allow(
3410        non_camel_case_types,
3411        non_snake_case,
3412        clippy::pub_underscore_fields,
3413        clippy::style
3414    )]
3415    const _: () = {
3416        use alloy::sol_types as alloy_sol_types;
3417        #[doc(hidden)]
3418        type UnderlyingSolTuple<'a> = ();
3419        #[doc(hidden)]
3420        type UnderlyingRustTuple<'a> = ();
3421        #[cfg(test)]
3422        #[allow(dead_code, unreachable_patterns)]
3423        fn _type_assertion(
3424            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3425        ) {
3426            match _t {
3427                alloy_sol_types::private::AssertTypeEq::<
3428                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3429                >(_) => {}
3430            }
3431        }
3432        #[automatically_derived]
3433        #[doc(hidden)]
3434        impl ::core::convert::From<InvalidPlonkArgs> for UnderlyingRustTuple<'_> {
3435            fn from(value: InvalidPlonkArgs) -> Self {
3436                ()
3437            }
3438        }
3439        #[automatically_derived]
3440        #[doc(hidden)]
3441        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidPlonkArgs {
3442            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3443                Self
3444            }
3445        }
3446        #[automatically_derived]
3447        impl alloy_sol_types::SolError for InvalidPlonkArgs {
3448            type Parameters<'a> = UnderlyingSolTuple<'a>;
3449            type Token<'a> = <Self::Parameters<
3450                'a,
3451            > as alloy_sol_types::SolType>::Token<'a>;
3452            const SIGNATURE: &'static str = "InvalidPlonkArgs()";
3453            const SELECTOR: [u8; 4] = [253u8, 154u8, 45u8, 27u8];
3454            #[inline]
3455            fn new<'a>(
3456                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3457            ) -> Self {
3458                tuple.into()
3459            }
3460            #[inline]
3461            fn tokenize(&self) -> Self::Token<'_> {
3462                ()
3463            }
3464            #[inline]
3465            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3466                <Self::Parameters<
3467                    '_,
3468                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3469                    .map(Self::new)
3470            }
3471        }
3472    };
3473    #[derive(serde::Serialize, serde::Deserialize)]
3474    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3475    /**Custom error with signature `InvalidScalar()` and selector `0x05b05ccc`.
3476```solidity
3477error InvalidScalar();
3478```*/
3479    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3480    #[derive(Clone)]
3481    pub struct InvalidScalar;
3482    #[allow(
3483        non_camel_case_types,
3484        non_snake_case,
3485        clippy::pub_underscore_fields,
3486        clippy::style
3487    )]
3488    const _: () = {
3489        use alloy::sol_types as alloy_sol_types;
3490        #[doc(hidden)]
3491        type UnderlyingSolTuple<'a> = ();
3492        #[doc(hidden)]
3493        type UnderlyingRustTuple<'a> = ();
3494        #[cfg(test)]
3495        #[allow(dead_code, unreachable_patterns)]
3496        fn _type_assertion(
3497            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3498        ) {
3499            match _t {
3500                alloy_sol_types::private::AssertTypeEq::<
3501                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3502                >(_) => {}
3503            }
3504        }
3505        #[automatically_derived]
3506        #[doc(hidden)]
3507        impl ::core::convert::From<InvalidScalar> for UnderlyingRustTuple<'_> {
3508            fn from(value: InvalidScalar) -> Self {
3509                ()
3510            }
3511        }
3512        #[automatically_derived]
3513        #[doc(hidden)]
3514        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidScalar {
3515            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3516                Self
3517            }
3518        }
3519        #[automatically_derived]
3520        impl alloy_sol_types::SolError for InvalidScalar {
3521            type Parameters<'a> = UnderlyingSolTuple<'a>;
3522            type Token<'a> = <Self::Parameters<
3523                'a,
3524            > as alloy_sol_types::SolType>::Token<'a>;
3525            const SIGNATURE: &'static str = "InvalidScalar()";
3526            const SELECTOR: [u8; 4] = [5u8, 176u8, 92u8, 204u8];
3527            #[inline]
3528            fn new<'a>(
3529                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3530            ) -> Self {
3531                tuple.into()
3532            }
3533            #[inline]
3534            fn tokenize(&self) -> Self::Token<'_> {
3535                ()
3536            }
3537            #[inline]
3538            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3539                <Self::Parameters<
3540                    '_,
3541                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3542                    .map(Self::new)
3543            }
3544        }
3545    };
3546    #[derive(serde::Serialize, serde::Deserialize)]
3547    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3548    /**Custom error with signature `PowPrecompileFailed()` and selector `0x3274fa64`.
3549```solidity
3550error PowPrecompileFailed();
3551```*/
3552    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3553    #[derive(Clone)]
3554    pub struct PowPrecompileFailed;
3555    #[allow(
3556        non_camel_case_types,
3557        non_snake_case,
3558        clippy::pub_underscore_fields,
3559        clippy::style
3560    )]
3561    const _: () = {
3562        use alloy::sol_types as alloy_sol_types;
3563        #[doc(hidden)]
3564        type UnderlyingSolTuple<'a> = ();
3565        #[doc(hidden)]
3566        type UnderlyingRustTuple<'a> = ();
3567        #[cfg(test)]
3568        #[allow(dead_code, unreachable_patterns)]
3569        fn _type_assertion(
3570            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3571        ) {
3572            match _t {
3573                alloy_sol_types::private::AssertTypeEq::<
3574                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3575                >(_) => {}
3576            }
3577        }
3578        #[automatically_derived]
3579        #[doc(hidden)]
3580        impl ::core::convert::From<PowPrecompileFailed> for UnderlyingRustTuple<'_> {
3581            fn from(value: PowPrecompileFailed) -> Self {
3582                ()
3583            }
3584        }
3585        #[automatically_derived]
3586        #[doc(hidden)]
3587        impl ::core::convert::From<UnderlyingRustTuple<'_>> for PowPrecompileFailed {
3588            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3589                Self
3590            }
3591        }
3592        #[automatically_derived]
3593        impl alloy_sol_types::SolError for PowPrecompileFailed {
3594            type Parameters<'a> = UnderlyingSolTuple<'a>;
3595            type Token<'a> = <Self::Parameters<
3596                'a,
3597            > as alloy_sol_types::SolType>::Token<'a>;
3598            const SIGNATURE: &'static str = "PowPrecompileFailed()";
3599            const SELECTOR: [u8; 4] = [50u8, 116u8, 250u8, 100u8];
3600            #[inline]
3601            fn new<'a>(
3602                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3603            ) -> Self {
3604                tuple.into()
3605            }
3606            #[inline]
3607            fn tokenize(&self) -> Self::Token<'_> {
3608                ()
3609            }
3610            #[inline]
3611            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3612                <Self::Parameters<
3613                    '_,
3614                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3615                    .map(Self::new)
3616            }
3617        }
3618    };
3619    #[derive(serde::Serialize, serde::Deserialize)]
3620    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3621    /**Custom error with signature `UnsupportedDegree()` and selector `0xe2ef09e5`.
3622```solidity
3623error UnsupportedDegree();
3624```*/
3625    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3626    #[derive(Clone)]
3627    pub struct UnsupportedDegree;
3628    #[allow(
3629        non_camel_case_types,
3630        non_snake_case,
3631        clippy::pub_underscore_fields,
3632        clippy::style
3633    )]
3634    const _: () = {
3635        use alloy::sol_types as alloy_sol_types;
3636        #[doc(hidden)]
3637        type UnderlyingSolTuple<'a> = ();
3638        #[doc(hidden)]
3639        type UnderlyingRustTuple<'a> = ();
3640        #[cfg(test)]
3641        #[allow(dead_code, unreachable_patterns)]
3642        fn _type_assertion(
3643            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3644        ) {
3645            match _t {
3646                alloy_sol_types::private::AssertTypeEq::<
3647                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3648                >(_) => {}
3649            }
3650        }
3651        #[automatically_derived]
3652        #[doc(hidden)]
3653        impl ::core::convert::From<UnsupportedDegree> for UnderlyingRustTuple<'_> {
3654            fn from(value: UnsupportedDegree) -> Self {
3655                ()
3656            }
3657        }
3658        #[automatically_derived]
3659        #[doc(hidden)]
3660        impl ::core::convert::From<UnderlyingRustTuple<'_>> for UnsupportedDegree {
3661            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3662                Self
3663            }
3664        }
3665        #[automatically_derived]
3666        impl alloy_sol_types::SolError for UnsupportedDegree {
3667            type Parameters<'a> = UnderlyingSolTuple<'a>;
3668            type Token<'a> = <Self::Parameters<
3669                'a,
3670            > as alloy_sol_types::SolType>::Token<'a>;
3671            const SIGNATURE: &'static str = "UnsupportedDegree()";
3672            const SELECTOR: [u8; 4] = [226u8, 239u8, 9u8, 229u8];
3673            #[inline]
3674            fn new<'a>(
3675                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3676            ) -> Self {
3677                tuple.into()
3678            }
3679            #[inline]
3680            fn tokenize(&self) -> Self::Token<'_> {
3681                ()
3682            }
3683            #[inline]
3684            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3685                <Self::Parameters<
3686                    '_,
3687                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3688                    .map(Self::new)
3689            }
3690        }
3691    };
3692    #[derive(serde::Serialize, serde::Deserialize)]
3693    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3694    /**Custom error with signature `WrongPlonkVK()` and selector `0x41f53b12`.
3695```solidity
3696error WrongPlonkVK();
3697```*/
3698    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3699    #[derive(Clone)]
3700    pub struct WrongPlonkVK;
3701    #[allow(
3702        non_camel_case_types,
3703        non_snake_case,
3704        clippy::pub_underscore_fields,
3705        clippy::style
3706    )]
3707    const _: () = {
3708        use alloy::sol_types as alloy_sol_types;
3709        #[doc(hidden)]
3710        type UnderlyingSolTuple<'a> = ();
3711        #[doc(hidden)]
3712        type UnderlyingRustTuple<'a> = ();
3713        #[cfg(test)]
3714        #[allow(dead_code, unreachable_patterns)]
3715        fn _type_assertion(
3716            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3717        ) {
3718            match _t {
3719                alloy_sol_types::private::AssertTypeEq::<
3720                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3721                >(_) => {}
3722            }
3723        }
3724        #[automatically_derived]
3725        #[doc(hidden)]
3726        impl ::core::convert::From<WrongPlonkVK> for UnderlyingRustTuple<'_> {
3727            fn from(value: WrongPlonkVK) -> Self {
3728                ()
3729            }
3730        }
3731        #[automatically_derived]
3732        #[doc(hidden)]
3733        impl ::core::convert::From<UnderlyingRustTuple<'_>> for WrongPlonkVK {
3734            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3735                Self
3736            }
3737        }
3738        #[automatically_derived]
3739        impl alloy_sol_types::SolError for WrongPlonkVK {
3740            type Parameters<'a> = UnderlyingSolTuple<'a>;
3741            type Token<'a> = <Self::Parameters<
3742                'a,
3743            > as alloy_sol_types::SolType>::Token<'a>;
3744            const SIGNATURE: &'static str = "WrongPlonkVK()";
3745            const SELECTOR: [u8; 4] = [65u8, 245u8, 59u8, 18u8];
3746            #[inline]
3747            fn new<'a>(
3748                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3749            ) -> Self {
3750                tuple.into()
3751            }
3752            #[inline]
3753            fn tokenize(&self) -> Self::Token<'_> {
3754                ()
3755            }
3756            #[inline]
3757            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3758                <Self::Parameters<
3759                    '_,
3760                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3761                    .map(Self::new)
3762            }
3763        }
3764    };
3765    #[derive(serde::Serialize, serde::Deserialize)]
3766    #[derive()]
3767    /**Function with signature `verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0x77ae3f07`.
3768```solidity
3769function verify(IPlonkVerifier.VerifyingKey memory verifyingKey, uint256[7] memory publicInput, IPlonkVerifier.PlonkProof memory proof) external view returns (bool);
3770```*/
3771    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3772    #[derive(Clone)]
3773    pub struct verifyCall {
3774        #[allow(missing_docs)]
3775        pub verifyingKey: <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
3776        #[allow(missing_docs)]
3777        pub publicInput: [alloy::sol_types::private::primitives::aliases::U256; 7usize],
3778        #[allow(missing_docs)]
3779        pub proof: <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
3780    }
3781    #[derive(serde::Serialize, serde::Deserialize)]
3782    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3783    ///Container type for the return parameters of the [`verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))`](verifyCall) function.
3784    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3785    #[derive(Clone)]
3786    pub struct verifyReturn {
3787        #[allow(missing_docs)]
3788        pub _0: bool,
3789    }
3790    #[allow(
3791        non_camel_case_types,
3792        non_snake_case,
3793        clippy::pub_underscore_fields,
3794        clippy::style
3795    )]
3796    const _: () = {
3797        use alloy::sol_types as alloy_sol_types;
3798        {
3799            #[doc(hidden)]
3800            type UnderlyingSolTuple<'a> = (
3801                IPlonkVerifier::VerifyingKey,
3802                alloy::sol_types::sol_data::FixedArray<
3803                    alloy::sol_types::sol_data::Uint<256>,
3804                    7usize,
3805                >,
3806                IPlonkVerifier::PlonkProof,
3807            );
3808            #[doc(hidden)]
3809            type UnderlyingRustTuple<'a> = (
3810                <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
3811                [alloy::sol_types::private::primitives::aliases::U256; 7usize],
3812                <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
3813            );
3814            #[cfg(test)]
3815            #[allow(dead_code, unreachable_patterns)]
3816            fn _type_assertion(
3817                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3818            ) {
3819                match _t {
3820                    alloy_sol_types::private::AssertTypeEq::<
3821                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3822                    >(_) => {}
3823                }
3824            }
3825            #[automatically_derived]
3826            #[doc(hidden)]
3827            impl ::core::convert::From<verifyCall> for UnderlyingRustTuple<'_> {
3828                fn from(value: verifyCall) -> Self {
3829                    (value.verifyingKey, value.publicInput, value.proof)
3830                }
3831            }
3832            #[automatically_derived]
3833            #[doc(hidden)]
3834            impl ::core::convert::From<UnderlyingRustTuple<'_>> for verifyCall {
3835                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3836                    Self {
3837                        verifyingKey: tuple.0,
3838                        publicInput: tuple.1,
3839                        proof: tuple.2,
3840                    }
3841                }
3842            }
3843        }
3844        {
3845            #[doc(hidden)]
3846            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3847            #[doc(hidden)]
3848            type UnderlyingRustTuple<'a> = (bool,);
3849            #[cfg(test)]
3850            #[allow(dead_code, unreachable_patterns)]
3851            fn _type_assertion(
3852                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3853            ) {
3854                match _t {
3855                    alloy_sol_types::private::AssertTypeEq::<
3856                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3857                    >(_) => {}
3858                }
3859            }
3860            #[automatically_derived]
3861            #[doc(hidden)]
3862            impl ::core::convert::From<verifyReturn> for UnderlyingRustTuple<'_> {
3863                fn from(value: verifyReturn) -> Self {
3864                    (value._0,)
3865                }
3866            }
3867            #[automatically_derived]
3868            #[doc(hidden)]
3869            impl ::core::convert::From<UnderlyingRustTuple<'_>> for verifyReturn {
3870                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3871                    Self { _0: tuple.0 }
3872                }
3873            }
3874        }
3875        #[automatically_derived]
3876        impl alloy_sol_types::SolCall for verifyCall {
3877            type Parameters<'a> = (
3878                IPlonkVerifier::VerifyingKey,
3879                alloy::sol_types::sol_data::FixedArray<
3880                    alloy::sol_types::sol_data::Uint<256>,
3881                    7usize,
3882                >,
3883                IPlonkVerifier::PlonkProof,
3884            );
3885            type Token<'a> = <Self::Parameters<
3886                'a,
3887            > as alloy_sol_types::SolType>::Token<'a>;
3888            type Return = bool;
3889            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3890            type ReturnToken<'a> = <Self::ReturnTuple<
3891                'a,
3892            > as alloy_sol_types::SolType>::Token<'a>;
3893            const SIGNATURE: &'static str = "verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))";
3894            const SELECTOR: [u8; 4] = [119u8, 174u8, 63u8, 7u8];
3895            #[inline]
3896            fn new<'a>(
3897                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3898            ) -> Self {
3899                tuple.into()
3900            }
3901            #[inline]
3902            fn tokenize(&self) -> Self::Token<'_> {
3903                (
3904                    <IPlonkVerifier::VerifyingKey as alloy_sol_types::SolType>::tokenize(
3905                        &self.verifyingKey,
3906                    ),
3907                    <alloy::sol_types::sol_data::FixedArray<
3908                        alloy::sol_types::sol_data::Uint<256>,
3909                        7usize,
3910                    > as alloy_sol_types::SolType>::tokenize(&self.publicInput),
3911                    <IPlonkVerifier::PlonkProof as alloy_sol_types::SolType>::tokenize(
3912                        &self.proof,
3913                    ),
3914                )
3915            }
3916            #[inline]
3917            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3918                (
3919                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
3920                        ret,
3921                    ),
3922                )
3923            }
3924            #[inline]
3925            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3926                <Self::ReturnTuple<
3927                    '_,
3928                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3929                    .map(|r| {
3930                        let r: verifyReturn = r.into();
3931                        r._0
3932                    })
3933            }
3934            #[inline]
3935            fn abi_decode_returns_validate(
3936                data: &[u8],
3937            ) -> alloy_sol_types::Result<Self::Return> {
3938                <Self::ReturnTuple<
3939                    '_,
3940                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3941                    .map(|r| {
3942                        let r: verifyReturn = r.into();
3943                        r._0
3944                    })
3945            }
3946        }
3947    };
3948    ///Container for all the [`PlonkVerifier`](self) function calls.
3949    #[derive(serde::Serialize, serde::Deserialize)]
3950    #[derive()]
3951    pub enum PlonkVerifierCalls {
3952        #[allow(missing_docs)]
3953        verify(verifyCall),
3954    }
3955    #[automatically_derived]
3956    impl PlonkVerifierCalls {
3957        /// All the selectors of this enum.
3958        ///
3959        /// Note that the selectors might not be in the same order as the variants.
3960        /// No guarantees are made about the order of the selectors.
3961        ///
3962        /// Prefer using `SolInterface` methods instead.
3963        pub const SELECTORS: &'static [[u8; 4usize]] = &[[119u8, 174u8, 63u8, 7u8]];
3964    }
3965    #[automatically_derived]
3966    impl alloy_sol_types::SolInterface for PlonkVerifierCalls {
3967        const NAME: &'static str = "PlonkVerifierCalls";
3968        const MIN_DATA_LENGTH: usize = 672usize;
3969        const COUNT: usize = 1usize;
3970        #[inline]
3971        fn selector(&self) -> [u8; 4] {
3972            match self {
3973                Self::verify(_) => <verifyCall as alloy_sol_types::SolCall>::SELECTOR,
3974            }
3975        }
3976        #[inline]
3977        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
3978            Self::SELECTORS.get(i).copied()
3979        }
3980        #[inline]
3981        fn valid_selector(selector: [u8; 4]) -> bool {
3982            Self::SELECTORS.binary_search(&selector).is_ok()
3983        }
3984        #[inline]
3985        #[allow(non_snake_case)]
3986        fn abi_decode_raw(
3987            selector: [u8; 4],
3988            data: &[u8],
3989        ) -> alloy_sol_types::Result<Self> {
3990            static DECODE_SHIMS: &[fn(
3991                &[u8],
3992            ) -> alloy_sol_types::Result<PlonkVerifierCalls>] = &[
3993                {
3994                    fn verify(
3995                        data: &[u8],
3996                    ) -> alloy_sol_types::Result<PlonkVerifierCalls> {
3997                        <verifyCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
3998                            .map(PlonkVerifierCalls::verify)
3999                    }
4000                    verify
4001                },
4002            ];
4003            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
4004                return Err(
4005                    alloy_sol_types::Error::unknown_selector(
4006                        <Self as alloy_sol_types::SolInterface>::NAME,
4007                        selector,
4008                    ),
4009                );
4010            };
4011            DECODE_SHIMS[idx](data)
4012        }
4013        #[inline]
4014        #[allow(non_snake_case)]
4015        fn abi_decode_raw_validate(
4016            selector: [u8; 4],
4017            data: &[u8],
4018        ) -> alloy_sol_types::Result<Self> {
4019            static DECODE_VALIDATE_SHIMS: &[fn(
4020                &[u8],
4021            ) -> alloy_sol_types::Result<PlonkVerifierCalls>] = &[
4022                {
4023                    fn verify(
4024                        data: &[u8],
4025                    ) -> alloy_sol_types::Result<PlonkVerifierCalls> {
4026                        <verifyCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
4027                                data,
4028                            )
4029                            .map(PlonkVerifierCalls::verify)
4030                    }
4031                    verify
4032                },
4033            ];
4034            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
4035                return Err(
4036                    alloy_sol_types::Error::unknown_selector(
4037                        <Self as alloy_sol_types::SolInterface>::NAME,
4038                        selector,
4039                    ),
4040                );
4041            };
4042            DECODE_VALIDATE_SHIMS[idx](data)
4043        }
4044        #[inline]
4045        fn abi_encoded_size(&self) -> usize {
4046            match self {
4047                Self::verify(inner) => {
4048                    <verifyCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
4049                }
4050            }
4051        }
4052        #[inline]
4053        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
4054            match self {
4055                Self::verify(inner) => {
4056                    <verifyCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
4057                }
4058            }
4059        }
4060    }
4061    ///Container for all the [`PlonkVerifier`](self) custom errors.
4062    #[derive(serde::Serialize, serde::Deserialize)]
4063    #[derive(Debug, PartialEq, Eq, Hash)]
4064    pub enum PlonkVerifierErrors {
4065        #[allow(missing_docs)]
4066        BN254G1AddFailed(BN254G1AddFailed),
4067        #[allow(missing_docs)]
4068        BN254PairingProdFailed(BN254PairingProdFailed),
4069        #[allow(missing_docs)]
4070        BN254ScalarInvZero(BN254ScalarInvZero),
4071        #[allow(missing_docs)]
4072        BN254ScalarMulFailed(BN254ScalarMulFailed),
4073        #[allow(missing_docs)]
4074        InvalidG1(InvalidG1),
4075        #[allow(missing_docs)]
4076        InvalidPlonkArgs(InvalidPlonkArgs),
4077        #[allow(missing_docs)]
4078        InvalidScalar(InvalidScalar),
4079        #[allow(missing_docs)]
4080        PowPrecompileFailed(PowPrecompileFailed),
4081        #[allow(missing_docs)]
4082        UnsupportedDegree(UnsupportedDegree),
4083        #[allow(missing_docs)]
4084        WrongPlonkVK(WrongPlonkVK),
4085    }
4086    #[automatically_derived]
4087    impl PlonkVerifierErrors {
4088        /// All the selectors of this enum.
4089        ///
4090        /// Note that the selectors might not be in the same order as the variants.
4091        /// No guarantees are made about the order of the selectors.
4092        ///
4093        /// Prefer using `SolInterface` methods instead.
4094        pub const SELECTORS: &'static [[u8; 4usize]] = &[
4095            [5u8, 176u8, 92u8, 204u8],
4096            [25u8, 219u8, 138u8, 104u8],
4097            [50u8, 116u8, 250u8, 100u8],
4098            [65u8, 245u8, 59u8, 18u8],
4099            [96u8, 85u8, 219u8, 106u8],
4100            [158u8, 120u8, 209u8, 76u8],
4101            [194u8, 6u8, 51u8, 79u8],
4102            [214u8, 219u8, 187u8, 13u8],
4103            [226u8, 239u8, 9u8, 229u8],
4104            [253u8, 154u8, 45u8, 27u8],
4105        ];
4106    }
4107    #[automatically_derived]
4108    impl alloy_sol_types::SolInterface for PlonkVerifierErrors {
4109        const NAME: &'static str = "PlonkVerifierErrors";
4110        const MIN_DATA_LENGTH: usize = 0usize;
4111        const COUNT: usize = 10usize;
4112        #[inline]
4113        fn selector(&self) -> [u8; 4] {
4114            match self {
4115                Self::BN254G1AddFailed(_) => {
4116                    <BN254G1AddFailed as alloy_sol_types::SolError>::SELECTOR
4117                }
4118                Self::BN254PairingProdFailed(_) => {
4119                    <BN254PairingProdFailed as alloy_sol_types::SolError>::SELECTOR
4120                }
4121                Self::BN254ScalarInvZero(_) => {
4122                    <BN254ScalarInvZero as alloy_sol_types::SolError>::SELECTOR
4123                }
4124                Self::BN254ScalarMulFailed(_) => {
4125                    <BN254ScalarMulFailed as alloy_sol_types::SolError>::SELECTOR
4126                }
4127                Self::InvalidG1(_) => <InvalidG1 as alloy_sol_types::SolError>::SELECTOR,
4128                Self::InvalidPlonkArgs(_) => {
4129                    <InvalidPlonkArgs as alloy_sol_types::SolError>::SELECTOR
4130                }
4131                Self::InvalidScalar(_) => {
4132                    <InvalidScalar as alloy_sol_types::SolError>::SELECTOR
4133                }
4134                Self::PowPrecompileFailed(_) => {
4135                    <PowPrecompileFailed as alloy_sol_types::SolError>::SELECTOR
4136                }
4137                Self::UnsupportedDegree(_) => {
4138                    <UnsupportedDegree as alloy_sol_types::SolError>::SELECTOR
4139                }
4140                Self::WrongPlonkVK(_) => {
4141                    <WrongPlonkVK as alloy_sol_types::SolError>::SELECTOR
4142                }
4143            }
4144        }
4145        #[inline]
4146        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
4147            Self::SELECTORS.get(i).copied()
4148        }
4149        #[inline]
4150        fn valid_selector(selector: [u8; 4]) -> bool {
4151            Self::SELECTORS.binary_search(&selector).is_ok()
4152        }
4153        #[inline]
4154        #[allow(non_snake_case)]
4155        fn abi_decode_raw(
4156            selector: [u8; 4],
4157            data: &[u8],
4158        ) -> alloy_sol_types::Result<Self> {
4159            static DECODE_SHIMS: &[fn(
4160                &[u8],
4161            ) -> alloy_sol_types::Result<PlonkVerifierErrors>] = &[
4162                {
4163                    fn InvalidScalar(
4164                        data: &[u8],
4165                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4166                        <InvalidScalar as alloy_sol_types::SolError>::abi_decode_raw(
4167                                data,
4168                            )
4169                            .map(PlonkVerifierErrors::InvalidScalar)
4170                    }
4171                    InvalidScalar
4172                },
4173                {
4174                    fn BN254ScalarMulFailed(
4175                        data: &[u8],
4176                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4177                        <BN254ScalarMulFailed as alloy_sol_types::SolError>::abi_decode_raw(
4178                                data,
4179                            )
4180                            .map(PlonkVerifierErrors::BN254ScalarMulFailed)
4181                    }
4182                    BN254ScalarMulFailed
4183                },
4184                {
4185                    fn PowPrecompileFailed(
4186                        data: &[u8],
4187                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4188                        <PowPrecompileFailed as alloy_sol_types::SolError>::abi_decode_raw(
4189                                data,
4190                            )
4191                            .map(PlonkVerifierErrors::PowPrecompileFailed)
4192                    }
4193                    PowPrecompileFailed
4194                },
4195                {
4196                    fn WrongPlonkVK(
4197                        data: &[u8],
4198                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4199                        <WrongPlonkVK as alloy_sol_types::SolError>::abi_decode_raw(data)
4200                            .map(PlonkVerifierErrors::WrongPlonkVK)
4201                    }
4202                    WrongPlonkVK
4203                },
4204                {
4205                    fn BN254G1AddFailed(
4206                        data: &[u8],
4207                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4208                        <BN254G1AddFailed as alloy_sol_types::SolError>::abi_decode_raw(
4209                                data,
4210                            )
4211                            .map(PlonkVerifierErrors::BN254G1AddFailed)
4212                    }
4213                    BN254G1AddFailed
4214                },
4215                {
4216                    fn InvalidG1(
4217                        data: &[u8],
4218                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4219                        <InvalidG1 as alloy_sol_types::SolError>::abi_decode_raw(data)
4220                            .map(PlonkVerifierErrors::InvalidG1)
4221                    }
4222                    InvalidG1
4223                },
4224                {
4225                    fn BN254PairingProdFailed(
4226                        data: &[u8],
4227                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4228                        <BN254PairingProdFailed as alloy_sol_types::SolError>::abi_decode_raw(
4229                                data,
4230                            )
4231                            .map(PlonkVerifierErrors::BN254PairingProdFailed)
4232                    }
4233                    BN254PairingProdFailed
4234                },
4235                {
4236                    fn BN254ScalarInvZero(
4237                        data: &[u8],
4238                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4239                        <BN254ScalarInvZero as alloy_sol_types::SolError>::abi_decode_raw(
4240                                data,
4241                            )
4242                            .map(PlonkVerifierErrors::BN254ScalarInvZero)
4243                    }
4244                    BN254ScalarInvZero
4245                },
4246                {
4247                    fn UnsupportedDegree(
4248                        data: &[u8],
4249                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4250                        <UnsupportedDegree as alloy_sol_types::SolError>::abi_decode_raw(
4251                                data,
4252                            )
4253                            .map(PlonkVerifierErrors::UnsupportedDegree)
4254                    }
4255                    UnsupportedDegree
4256                },
4257                {
4258                    fn InvalidPlonkArgs(
4259                        data: &[u8],
4260                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4261                        <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_decode_raw(
4262                                data,
4263                            )
4264                            .map(PlonkVerifierErrors::InvalidPlonkArgs)
4265                    }
4266                    InvalidPlonkArgs
4267                },
4268            ];
4269            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
4270                return Err(
4271                    alloy_sol_types::Error::unknown_selector(
4272                        <Self as alloy_sol_types::SolInterface>::NAME,
4273                        selector,
4274                    ),
4275                );
4276            };
4277            DECODE_SHIMS[idx](data)
4278        }
4279        #[inline]
4280        #[allow(non_snake_case)]
4281        fn abi_decode_raw_validate(
4282            selector: [u8; 4],
4283            data: &[u8],
4284        ) -> alloy_sol_types::Result<Self> {
4285            static DECODE_VALIDATE_SHIMS: &[fn(
4286                &[u8],
4287            ) -> alloy_sol_types::Result<PlonkVerifierErrors>] = &[
4288                {
4289                    fn InvalidScalar(
4290                        data: &[u8],
4291                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4292                        <InvalidScalar as alloy_sol_types::SolError>::abi_decode_raw_validate(
4293                                data,
4294                            )
4295                            .map(PlonkVerifierErrors::InvalidScalar)
4296                    }
4297                    InvalidScalar
4298                },
4299                {
4300                    fn BN254ScalarMulFailed(
4301                        data: &[u8],
4302                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4303                        <BN254ScalarMulFailed as alloy_sol_types::SolError>::abi_decode_raw_validate(
4304                                data,
4305                            )
4306                            .map(PlonkVerifierErrors::BN254ScalarMulFailed)
4307                    }
4308                    BN254ScalarMulFailed
4309                },
4310                {
4311                    fn PowPrecompileFailed(
4312                        data: &[u8],
4313                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4314                        <PowPrecompileFailed as alloy_sol_types::SolError>::abi_decode_raw_validate(
4315                                data,
4316                            )
4317                            .map(PlonkVerifierErrors::PowPrecompileFailed)
4318                    }
4319                    PowPrecompileFailed
4320                },
4321                {
4322                    fn WrongPlonkVK(
4323                        data: &[u8],
4324                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4325                        <WrongPlonkVK as alloy_sol_types::SolError>::abi_decode_raw_validate(
4326                                data,
4327                            )
4328                            .map(PlonkVerifierErrors::WrongPlonkVK)
4329                    }
4330                    WrongPlonkVK
4331                },
4332                {
4333                    fn BN254G1AddFailed(
4334                        data: &[u8],
4335                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4336                        <BN254G1AddFailed as alloy_sol_types::SolError>::abi_decode_raw_validate(
4337                                data,
4338                            )
4339                            .map(PlonkVerifierErrors::BN254G1AddFailed)
4340                    }
4341                    BN254G1AddFailed
4342                },
4343                {
4344                    fn InvalidG1(
4345                        data: &[u8],
4346                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4347                        <InvalidG1 as alloy_sol_types::SolError>::abi_decode_raw_validate(
4348                                data,
4349                            )
4350                            .map(PlonkVerifierErrors::InvalidG1)
4351                    }
4352                    InvalidG1
4353                },
4354                {
4355                    fn BN254PairingProdFailed(
4356                        data: &[u8],
4357                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4358                        <BN254PairingProdFailed as alloy_sol_types::SolError>::abi_decode_raw_validate(
4359                                data,
4360                            )
4361                            .map(PlonkVerifierErrors::BN254PairingProdFailed)
4362                    }
4363                    BN254PairingProdFailed
4364                },
4365                {
4366                    fn BN254ScalarInvZero(
4367                        data: &[u8],
4368                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4369                        <BN254ScalarInvZero as alloy_sol_types::SolError>::abi_decode_raw_validate(
4370                                data,
4371                            )
4372                            .map(PlonkVerifierErrors::BN254ScalarInvZero)
4373                    }
4374                    BN254ScalarInvZero
4375                },
4376                {
4377                    fn UnsupportedDegree(
4378                        data: &[u8],
4379                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4380                        <UnsupportedDegree as alloy_sol_types::SolError>::abi_decode_raw_validate(
4381                                data,
4382                            )
4383                            .map(PlonkVerifierErrors::UnsupportedDegree)
4384                    }
4385                    UnsupportedDegree
4386                },
4387                {
4388                    fn InvalidPlonkArgs(
4389                        data: &[u8],
4390                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4391                        <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_decode_raw_validate(
4392                                data,
4393                            )
4394                            .map(PlonkVerifierErrors::InvalidPlonkArgs)
4395                    }
4396                    InvalidPlonkArgs
4397                },
4398            ];
4399            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
4400                return Err(
4401                    alloy_sol_types::Error::unknown_selector(
4402                        <Self as alloy_sol_types::SolInterface>::NAME,
4403                        selector,
4404                    ),
4405                );
4406            };
4407            DECODE_VALIDATE_SHIMS[idx](data)
4408        }
4409        #[inline]
4410        fn abi_encoded_size(&self) -> usize {
4411            match self {
4412                Self::BN254G1AddFailed(inner) => {
4413                    <BN254G1AddFailed as alloy_sol_types::SolError>::abi_encoded_size(
4414                        inner,
4415                    )
4416                }
4417                Self::BN254PairingProdFailed(inner) => {
4418                    <BN254PairingProdFailed as alloy_sol_types::SolError>::abi_encoded_size(
4419                        inner,
4420                    )
4421                }
4422                Self::BN254ScalarInvZero(inner) => {
4423                    <BN254ScalarInvZero as alloy_sol_types::SolError>::abi_encoded_size(
4424                        inner,
4425                    )
4426                }
4427                Self::BN254ScalarMulFailed(inner) => {
4428                    <BN254ScalarMulFailed as alloy_sol_types::SolError>::abi_encoded_size(
4429                        inner,
4430                    )
4431                }
4432                Self::InvalidG1(inner) => {
4433                    <InvalidG1 as alloy_sol_types::SolError>::abi_encoded_size(inner)
4434                }
4435                Self::InvalidPlonkArgs(inner) => {
4436                    <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_encoded_size(
4437                        inner,
4438                    )
4439                }
4440                Self::InvalidScalar(inner) => {
4441                    <InvalidScalar as alloy_sol_types::SolError>::abi_encoded_size(inner)
4442                }
4443                Self::PowPrecompileFailed(inner) => {
4444                    <PowPrecompileFailed as alloy_sol_types::SolError>::abi_encoded_size(
4445                        inner,
4446                    )
4447                }
4448                Self::UnsupportedDegree(inner) => {
4449                    <UnsupportedDegree as alloy_sol_types::SolError>::abi_encoded_size(
4450                        inner,
4451                    )
4452                }
4453                Self::WrongPlonkVK(inner) => {
4454                    <WrongPlonkVK as alloy_sol_types::SolError>::abi_encoded_size(inner)
4455                }
4456            }
4457        }
4458        #[inline]
4459        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
4460            match self {
4461                Self::BN254G1AddFailed(inner) => {
4462                    <BN254G1AddFailed as alloy_sol_types::SolError>::abi_encode_raw(
4463                        inner,
4464                        out,
4465                    )
4466                }
4467                Self::BN254PairingProdFailed(inner) => {
4468                    <BN254PairingProdFailed as alloy_sol_types::SolError>::abi_encode_raw(
4469                        inner,
4470                        out,
4471                    )
4472                }
4473                Self::BN254ScalarInvZero(inner) => {
4474                    <BN254ScalarInvZero as alloy_sol_types::SolError>::abi_encode_raw(
4475                        inner,
4476                        out,
4477                    )
4478                }
4479                Self::BN254ScalarMulFailed(inner) => {
4480                    <BN254ScalarMulFailed as alloy_sol_types::SolError>::abi_encode_raw(
4481                        inner,
4482                        out,
4483                    )
4484                }
4485                Self::InvalidG1(inner) => {
4486                    <InvalidG1 as alloy_sol_types::SolError>::abi_encode_raw(inner, out)
4487                }
4488                Self::InvalidPlonkArgs(inner) => {
4489                    <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_encode_raw(
4490                        inner,
4491                        out,
4492                    )
4493                }
4494                Self::InvalidScalar(inner) => {
4495                    <InvalidScalar as alloy_sol_types::SolError>::abi_encode_raw(
4496                        inner,
4497                        out,
4498                    )
4499                }
4500                Self::PowPrecompileFailed(inner) => {
4501                    <PowPrecompileFailed as alloy_sol_types::SolError>::abi_encode_raw(
4502                        inner,
4503                        out,
4504                    )
4505                }
4506                Self::UnsupportedDegree(inner) => {
4507                    <UnsupportedDegree as alloy_sol_types::SolError>::abi_encode_raw(
4508                        inner,
4509                        out,
4510                    )
4511                }
4512                Self::WrongPlonkVK(inner) => {
4513                    <WrongPlonkVK as alloy_sol_types::SolError>::abi_encode_raw(
4514                        inner,
4515                        out,
4516                    )
4517                }
4518            }
4519        }
4520    }
4521    use alloy::contract as alloy_contract;
4522    /**Creates a new wrapper around an on-chain [`PlonkVerifier`](self) contract instance.
4523
4524See the [wrapper's documentation](`PlonkVerifierInstance`) for more details.*/
4525    #[inline]
4526    pub const fn new<
4527        P: alloy_contract::private::Provider<N>,
4528        N: alloy_contract::private::Network,
4529    >(
4530        address: alloy_sol_types::private::Address,
4531        provider: P,
4532    ) -> PlonkVerifierInstance<P, N> {
4533        PlonkVerifierInstance::<P, N>::new(address, provider)
4534    }
4535    /**Deploys this contract using the given `provider` and constructor arguments, if any.
4536
4537Returns a new instance of the contract, if the deployment was successful.
4538
4539For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
4540    #[inline]
4541    pub fn deploy<
4542        P: alloy_contract::private::Provider<N>,
4543        N: alloy_contract::private::Network,
4544    >(
4545        provider: P,
4546    ) -> impl ::core::future::Future<
4547        Output = alloy_contract::Result<PlonkVerifierInstance<P, N>>,
4548    > {
4549        PlonkVerifierInstance::<P, N>::deploy(provider)
4550    }
4551    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
4552and constructor arguments, if any.
4553
4554This is a simple wrapper around creating a `RawCallBuilder` with the data set to
4555the bytecode concatenated with the constructor's ABI-encoded arguments.*/
4556    #[inline]
4557    pub fn deploy_builder<
4558        P: alloy_contract::private::Provider<N>,
4559        N: alloy_contract::private::Network,
4560    >(provider: P) -> alloy_contract::RawCallBuilder<P, N> {
4561        PlonkVerifierInstance::<P, N>::deploy_builder(provider)
4562    }
4563    /**A [`PlonkVerifier`](self) instance.
4564
4565Contains type-safe methods for interacting with an on-chain instance of the
4566[`PlonkVerifier`](self) contract located at a given `address`, using a given
4567provider `P`.
4568
4569If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
4570documentation on how to provide it), the `deploy` and `deploy_builder` methods can
4571be used to deploy a new instance of the contract.
4572
4573See the [module-level documentation](self) for all the available methods.*/
4574    #[derive(Clone)]
4575    pub struct PlonkVerifierInstance<P, N = alloy_contract::private::Ethereum> {
4576        address: alloy_sol_types::private::Address,
4577        provider: P,
4578        _network: ::core::marker::PhantomData<N>,
4579    }
4580    #[automatically_derived]
4581    impl<P, N> ::core::fmt::Debug for PlonkVerifierInstance<P, N> {
4582        #[inline]
4583        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
4584            f.debug_tuple("PlonkVerifierInstance").field(&self.address).finish()
4585        }
4586    }
4587    /// Instantiation and getters/setters.
4588    #[automatically_derived]
4589    impl<
4590        P: alloy_contract::private::Provider<N>,
4591        N: alloy_contract::private::Network,
4592    > PlonkVerifierInstance<P, N> {
4593        /**Creates a new wrapper around an on-chain [`PlonkVerifier`](self) contract instance.
4594
4595See the [wrapper's documentation](`PlonkVerifierInstance`) for more details.*/
4596        #[inline]
4597        pub const fn new(
4598            address: alloy_sol_types::private::Address,
4599            provider: P,
4600        ) -> Self {
4601            Self {
4602                address,
4603                provider,
4604                _network: ::core::marker::PhantomData,
4605            }
4606        }
4607        /**Deploys this contract using the given `provider` and constructor arguments, if any.
4608
4609Returns a new instance of the contract, if the deployment was successful.
4610
4611For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
4612        #[inline]
4613        pub async fn deploy(
4614            provider: P,
4615        ) -> alloy_contract::Result<PlonkVerifierInstance<P, N>> {
4616            let call_builder = Self::deploy_builder(provider);
4617            let contract_address = call_builder.deploy().await?;
4618            Ok(Self::new(contract_address, call_builder.provider))
4619        }
4620        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
4621and constructor arguments, if any.
4622
4623This is a simple wrapper around creating a `RawCallBuilder` with the data set to
4624the bytecode concatenated with the constructor's ABI-encoded arguments.*/
4625        #[inline]
4626        pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder<P, N> {
4627            alloy_contract::RawCallBuilder::new_raw_deploy(
4628                provider,
4629                ::core::clone::Clone::clone(&BYTECODE),
4630            )
4631        }
4632        /// Returns a reference to the address.
4633        #[inline]
4634        pub const fn address(&self) -> &alloy_sol_types::private::Address {
4635            &self.address
4636        }
4637        /// Sets the address.
4638        #[inline]
4639        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
4640            self.address = address;
4641        }
4642        /// Sets the address and returns `self`.
4643        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
4644            self.set_address(address);
4645            self
4646        }
4647        /// Returns a reference to the provider.
4648        #[inline]
4649        pub const fn provider(&self) -> &P {
4650            &self.provider
4651        }
4652    }
4653    impl<P: ::core::clone::Clone, N> PlonkVerifierInstance<&P, N> {
4654        /// Clones the provider and returns a new instance with the cloned provider.
4655        #[inline]
4656        pub fn with_cloned_provider(self) -> PlonkVerifierInstance<P, N> {
4657            PlonkVerifierInstance {
4658                address: self.address,
4659                provider: ::core::clone::Clone::clone(&self.provider),
4660                _network: ::core::marker::PhantomData,
4661            }
4662        }
4663    }
4664    /// Function calls.
4665    #[automatically_derived]
4666    impl<
4667        P: alloy_contract::private::Provider<N>,
4668        N: alloy_contract::private::Network,
4669    > PlonkVerifierInstance<P, N> {
4670        /// Creates a new call builder using this contract instance's provider and address.
4671        ///
4672        /// Note that the call can be any function call, not just those defined in this
4673        /// contract. Prefer using the other methods for building type-safe contract calls.
4674        pub fn call_builder<C: alloy_sol_types::SolCall>(
4675            &self,
4676            call: &C,
4677        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
4678            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
4679        }
4680        ///Creates a new call builder for the [`verify`] function.
4681        pub fn verify(
4682            &self,
4683            verifyingKey: <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
4684            publicInput: [alloy::sol_types::private::primitives::aliases::U256; 7usize],
4685            proof: <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
4686        ) -> alloy_contract::SolCallBuilder<&P, verifyCall, N> {
4687            self.call_builder(
4688                &verifyCall {
4689                    verifyingKey,
4690                    publicInput,
4691                    proof,
4692                },
4693            )
4694        }
4695    }
4696    /// Event filters.
4697    #[automatically_derived]
4698    impl<
4699        P: alloy_contract::private::Provider<N>,
4700        N: alloy_contract::private::Network,
4701    > PlonkVerifierInstance<P, N> {
4702        /// Creates a new event filter using this contract instance's provider and address.
4703        ///
4704        /// Note that the type can be any event, not just those defined in this contract.
4705        /// Prefer using the other methods for building type-safe event filters.
4706        pub fn event_filter<E: alloy_sol_types::SolEvent>(
4707            &self,
4708        ) -> alloy_contract::Event<&P, E, N> {
4709            alloy_contract::Event::new_sol(&self.provider, &self.address)
4710        }
4711    }
4712}