* Re: AIX & shared libstdc++ [not found] <3439FE5B.53F1D3CC.cygnus.egcs@msu.ru> @ 1997-10-07 3:15 ` Jason Merrill 1997-10-07 3:48 ` Andrey Slepuhin 1997-10-09 9:26 ` Andrey Slepuhin 0 siblings, 2 replies; 16+ messages in thread From: Jason Merrill @ 1997-10-07 3:15 UTC (permalink / raw) To: Andrey Slepuhin, egcs >>>>> Andrey Slepuhin <pooh@msu.ru> writes: > I tried to build egcs-970929 on AIX 4.2.1 configured with > --enable-shared > option. The resulting shared libstdc++ was only ~600K instead of ~3M > static one. > This is because AIX linker does not know what symbols must be exported. > PS: Passing option -unix to linker is incorrect on AIX, because AIX > linker recognize it as option -u with a parameter "nix". As a result > there are many linker warnings. GCC support for shared libraries on AIX requires GNU ld, which supports the -unix flag. Jason ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: AIX & shared libstdc++ 1997-10-07 3:15 ` AIX & shared libstdc++ Jason Merrill @ 1997-10-07 3:48 ` Andrey Slepuhin 1997-10-09 9:26 ` Andrey Slepuhin 1 sibling, 0 replies; 16+ messages in thread From: Andrey Slepuhin @ 1997-10-07 3:48 UTC (permalink / raw) To: Jason Merrill; +Cc: egcs Jason Merrill wrote: > GCC support for shared libraries on AIX requires GNU ld, which supports the > -unix flag. The following line: * configure.in: Don't configure --with-gnu-ld on AIX in file ChangeLog is not overrided yet (though it is dated Apr 25 1996 :-)). Does anybody checked whether current snapshot can be configured with this option? Can this be done with current version of binutils? And the last: is shared libraries support with native ld possible in principle? Andrey ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: AIX & shared libstdc++ 1997-10-07 3:15 ` AIX & shared libstdc++ Jason Merrill 1997-10-07 3:48 ` Andrey Slepuhin @ 1997-10-09 9:26 ` Andrey Slepuhin 1997-10-09 15:14 ` Ian Lance Taylor 1997-10-09 16:31 ` something wrong with template instantiation mechanics Oleg Krivosheev 1 sibling, 2 replies; 16+ messages in thread From: Andrey Slepuhin @ 1997-10-09 9:26 UTC (permalink / raw) To: Jason Merrill; +Cc: egcs Hi, I tried to compile egcs-971008 on AIX 4.2.1 configured with option --with-gnu-ld. 1) I had problems when installing binutils 2.8.1 because function finfo() already defined in unistd.h with parameters different from finfo() that comes with binutils distribution (solved by renaming this function and all calls to it). 2) Compilation was successful except the attempt of making unexistent target "libs" in libraries/soft-float/powerpc/libstdc++/Makefile (why???). Shared libstdc++ was created successfully with a size ~2.5M 3) Even the simple test program failed to run with message about exec format error due to bad text alignment. It seems to me that problem is not with egcs but with gnu ld which generates invalid executables. Any help is appreciated. Andrey. PS: egcs-970929, with manually built shared libstdc++ (with native ld) still works without errors. I just successfully compiled and tested omniORB2, and it seems that combination of shared libstdc++, multithreading and exceptions works fine. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: AIX & shared libstdc++ 1997-10-09 9:26 ` Andrey Slepuhin @ 1997-10-09 15:14 ` Ian Lance Taylor 1997-10-13 5:05 ` Andrey Slepuhin 1997-10-09 16:31 ` something wrong with template instantiation mechanics Oleg Krivosheev 1 sibling, 1 reply; 16+ messages in thread From: Ian Lance Taylor @ 1997-10-09 15:14 UTC (permalink / raw) To: pooh; +Cc: jason, egcs Date: Thu, 09 Oct 1997 20:01:20 +0400 From: Andrey Slepuhin <pooh@msu.ru> 3) Even the simple test program failed to run with message about exec format error due to bad text alignment. It seems to me that problem is not with egcs but with gnu ld which generates invalid executables. Any help is appreciated. You're right; the GNU linker doesn't work on AIX 4.2. It's possible that the appended patch to ld/emultempl/aix.em will fix the immediate problem. There may be other problems. Ian Index: aix.em =================================================================== RCS file: /cvs/cvsfiles/devo/ld/emultempl/aix.em,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- aix.em 1997/06/16 16:56:24 1.20 +++ aix.em 1997/09/04 16:43:35 1.21 @@ -361,8 +361,8 @@ exp_nameop (NAME, "."), exp_intop (0xfff))); t = exp_binop ('&', - exp_binop ('+', t, exp_intop (7)), - exp_intop (~ (bfd_vma) 7)); + exp_binop ('+', t, exp_intop (31)), + exp_intop (~ (bfd_vma) 31)); lang_section_start (".data", t); } break; @@ -382,8 +382,8 @@ exp_intop (val), exp_nameop (SIZEOF_HEADERS, NULL)); t = exp_binop ('&', - exp_binop ('+', t, exp_intop (7)), - exp_intop (~ (bfd_vma) 7)); + exp_binop ('+', t, exp_intop (31)), + exp_intop (~ (bfd_vma) 31)); lang_section_start (".text", t); } break; ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: AIX & shared libstdc++ 1997-10-09 15:14 ` Ian Lance Taylor @ 1997-10-13 5:05 ` Andrey Slepuhin 0 siblings, 0 replies; 16+ messages in thread From: Andrey Slepuhin @ 1997-10-13 5:05 UTC (permalink / raw) To: Ian Lance Taylor; +Cc: egcs Ian Lance Taylor wrote: > > Date: Thu, 09 Oct 1997 20:01:20 +0400 > From: Andrey Slepuhin <pooh@msu.ru> > > 3) Even the simple test program failed to run with message about exec > format error due to bad text alignment. > It seems to me that problem is not with egcs but with gnu ld which > generates > invalid executables. Any help is appreciated. > > You're right; the GNU linker doesn't work on AIX 4.2. It's possible > that the appended patch to ld/emultempl/aix.em will fix the immediate > problem. There may be other problems. Thanks for the help - it seems that your patch works fine. At least I just successfully build omniORB2 with egcs-971008 configured with --enable-shared --with-gnu-ld. The only problem was with multiple defined symbol _mutex_global_np in pthread.h (native linker ignores multiple defined symbols; this symbol is not defined as extern - this looks like IBM bug). Andrey. ^ permalink raw reply [flat|nested] 16+ messages in thread
* something wrong with template instantiation mechanics 1997-10-09 9:26 ` Andrey Slepuhin 1997-10-09 15:14 ` Ian Lance Taylor @ 1997-10-09 16:31 ` Oleg Krivosheev 1997-10-10 8:51 ` Joe Buck 1997-10-10 8:51 ` Joe Buck 1 sibling, 2 replies; 16+ messages in thread From: Oleg Krivosheev @ 1997-10-09 16:31 UTC (permalink / raw) To: Oleg Krivosheev; +Cc: Jason Merrill, egcs Hi, i've tried my code and lloks like tons of small inline template functions are not instantiated. drabble ~ $ c++ -v Reading specs from /home/room1/kriol/local/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/specs gcc version egcs-2.90.12 971008 (gcc2-970802 experimental) drabble ~ $ uname -a SunOS drabble 5.5.1 Generic_103640-08 sun4m sparc SUNW,SPARCstation-4 in a simple example: #include "typedefs.H" #include "Vector3D.H" int main( void ) { return 0; } void superdummy( void ) { TVector3D<double> ccc; ccc = 1.0; abs(ccc); } where abs(ccc) declared as template <class x> inline x abs( const TVector3D<x>& y ); is not instantiated: c++ -c test.ii nm -s test.o | c++filt | grep abs U abs(TVector3D<double> const &) i'd expect it to be instantiated and marked W i've enclosed full preprocessor output file. thanks OK ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics 1997-10-09 16:31 ` something wrong with template instantiation mechanics Oleg Krivosheev @ 1997-10-10 8:51 ` Joe Buck 1997-10-10 8:51 ` Oleg Krivosheev 1997-10-10 11:46 ` Oleg Krivosheev 1997-10-10 8:51 ` Joe Buck 1 sibling, 2 replies; 16+ messages in thread From: Joe Buck @ 1997-10-10 8:51 UTC (permalink / raw) To: Oleg Krivosheev; +Cc: egcs team > i've tried my code and lloks like tons of > small inline template functions are not > instantiated. I think that this is a consequence of the new rules: you have both non-template and template abs functions. Unfortunately, I'm confused by the new rules and not sure what is really supposed to change; I also think that there still may be some bugs in the code that implements them. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics 1997-10-10 8:51 ` Joe Buck @ 1997-10-10 8:51 ` Oleg Krivosheev 1997-10-10 8:51 ` Oleg Krivosheev [not found] ` <Pine.GSO.3.96.971009232426.6908A-100000.cygnus.egcs@drabble> 1997-10-10 11:46 ` Oleg Krivosheev 1 sibling, 2 replies; 16+ messages in thread From: Oleg Krivosheev @ 1997-10-10 8:51 UTC (permalink / raw) To: Joe Buck; +Cc: Oleg Krivosheev, egcs team Hi, On Thu, 9 Oct 1997, Joe Buck wrote: > > i've tried my code and lloks like tons of > > small inline template functions are not > > instantiated. > > I think that this is a consequence of the new rules: you have both > non-template and template abs functions. Unfortunately, I'm confused > by the new rules and not sure what is really supposed to change; I > also think that there still may be some bugs in the code that implements > them. sorry, i sent a bit misleading example - maybe you're right, i'm reading CD2 now. Still i believe there are bugs in template instantiation - if you change superdummy in the atached test.ii to void superdummy( void ) { TVector3D<double> ccc, ddd; ccc = 1.0; abs(ccc); ccc = ccc + ddd; } egcs will not be able instantiate op+( const TVector3D<double>&, const TVector3D<double>& ) ! drabble ~ $ nm -s test.o | c++filt | grep Vec 00000000 W TVector3D<double>::~TVector3D(void) 00000000 W TVector3D<double>::operator=(TVector3D<double> const &) 00000000 W TVector3D<double>::operator=(double) U operator+(TVector3D<double> const &, TVector3D<double> const &) 00000000 W TVector3D<double>::TVector3D(void) U abs(TVector3D<double> const &) there is no template/nontemplate op+ ix in the code. Can you verify this one? thanks OK ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics 1997-10-10 8:51 ` Oleg Krivosheev @ 1997-10-10 8:51 ` Oleg Krivosheev [not found] ` <Pine.GSO.3.96.971009232426.6908A-100000.cygnus.egcs@drabble> 1 sibling, 0 replies; 16+ messages in thread From: Oleg Krivosheev @ 1997-10-10 8:51 UTC (permalink / raw) To: Oleg Krivosheev; +Cc: Joe Buck, egcs team On Thu, 9 Oct 1997, Oleg Krivosheev wrote: > Date: Thu, 09 Oct 1997 22:17:58 -0500 (CDT) > > On Thu, 9 Oct 1997, Joe Buck wrote: > > > > i've tried my code and lloks like tons of > > > small inline template functions are not > > > instantiated. > > > > I think that this is a consequence of the new rules: you have both > > non-template and template abs functions. Unfortunately, I'm confused > > by the new rules and not sure what is really supposed to change; I > > also think that there still may be some bugs in the code that implements > > them. > > sorry, i sent a bit misleading example - maybe you're right, > i'm reading CD2 now. after reading CD2 and thinking a bit i still believe this is a bug: 14.8.3 Overload resolution [temp.over] .. For each function template, if the argument deduction succeeds, the deduced template-arguments are used to instan- tiate a single function template specialization which is added to the candidate functions set to be used in overload resolution. .. well, lloks like egcs deduces templates argument right, then it properly did everload resolution and choose template version of abs and generated call - but no function body itself is instantiated ! regards OK ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <Pine.GSO.3.96.971009232426.6908A-100000.cygnus.egcs@drabble>]
* Re: something wrong with template instantiation mechanics [not found] ` <Pine.GSO.3.96.971009232426.6908A-100000.cygnus.egcs@drabble> @ 1997-10-10 11:44 ` Jason Merrill 1997-10-10 17:21 ` Oleg Krivosheev 0 siblings, 1 reply; 16+ messages in thread From: Jason Merrill @ 1997-10-10 11:44 UTC (permalink / raw) To: Oleg Krivosheev, egcs >>>>> Oleg Krivosheev <kriol@fnal.gov> writes: > after reading CD2 and thinking a bit i still > believe this is a bug: > 14.8.3 Overload resolution [temp.over] > .. > For each function template, if the argument > deduction succeeds, the deduced template-arguments are used to instan- > tiate a single function template specialization which is added to the > candidate functions set to be used in overload resolution. > .. > well, lloks like egcs deduces templates argument right, Yes. > then it properly did everload resolution and > choose template version of abs No. It chose the non-template abs declared by the line friend numT abs( const TVector3D<numT>& ); Jason ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics 1997-10-10 11:44 ` Jason Merrill @ 1997-10-10 17:21 ` Oleg Krivosheev 1997-10-10 17:19 ` Jason Merrill 0 siblings, 1 reply; 16+ messages in thread From: Oleg Krivosheev @ 1997-10-10 17:21 UTC (permalink / raw) To: Jason Merrill; +Cc: Oleg Krivosheev, egcs hi, On Fri, 10 Oct 1997, Jason Merrill wrote: > >>>>> Oleg Krivosheev <kriol@fnal.gov> writes: > > > after reading CD2 and thinking a bit i still > > believe this is a bug: > > > 14.8.3 Overload resolution [temp.over] > > > .. > > For each function template, if the argument > > deduction succeeds, the deduced template-arguments are used to instan- > > tiate a single function template specialization which is added to the > > candidate functions set to be used in overload resolution. > > .. > > > well, lloks like egcs deduces templates argument right, > > Yes. > > > then it properly did everload resolution and > > choose template version of abs > > No. It chose the non-template abs declared by the line > > friend numT abs( const TVector3D<numT>& ); > hmm... ok, reading again CD2: 14.5.3 Friends [temp.friend] 1 A friend function of a class template can be a function template or an ordinary (non-template) function. [Example: template<class T> class task { // ... friend void next_time(); friend task<T>* preempt(task<T>*); friend task* prmt(task*); // task is task<T> friend class task<int>; // ... }; Here, next_time() and task<int> become friends of all task classes, and each task has appropriately typed functions preempt() and prmt() as friends. The preempt functions might be defined as a template as follows template<class T> task<T>* preempt(task<T>* t) { /* ... */ } --end example] it looks for me that i'v declared/defined abs and op+ in exactly the same manner as proposed in CD2. It worked just fine with egcs-2.90.10, so it's regression, IMO Just in case, i've enclosed below very small test case for op+: template <class T> class X { public: X( T ); X( const X<T>& ); ~X(); friend X<T> operator+( const X<T>&, const X<T>& ); private: T t_; }; template <class T> X<T>:: X( T t ): t_(t) { } template <class T> X<T>:: X( const X<T>& x ): t_(x.t_) { } template <class T> X<T>:: ~X() { } template <class T> X<T> operator+( const X<T>& a, const X<T>& b ) { return X<T>( a.t_ + b.t_ ); } main( void ) { } void dummy( void ) { X<int> x( 1 ); X<int> y( 2 ); x = x+y; } ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics 1997-10-10 17:21 ` Oleg Krivosheev @ 1997-10-10 17:19 ` Jason Merrill 0 siblings, 0 replies; 16+ messages in thread From: Jason Merrill @ 1997-10-10 17:19 UTC (permalink / raw) To: Oleg Krivosheev; +Cc: egcs >>>>> Oleg Krivosheev <kriol@fnal.gov> writes: > ok, reading again CD2: > as friends. The preempt functions might be defined as a template as > follows > template<class T> task<T>* preempt(task<T>* t) { /* ... */ } > it looks for me that i'v declared/defined > abs and op+ in exactly the same manner as proposed in CD2. That example is out of date, and is not normative in any case. But this is: 14.5.5 Function templates [temp.fct] 2 A function template can be overloaded with other function templates and with normal (non-template) functions. A normal function is not related to a function template (i.e., it is never considered to be a specialization), even if it has the same name and type as a poten- tially generated function template specialization.3) _________________________ 3) That is, declarations of non-template functions do not merely guide overload resolution of template functions with the same name. If such a non-template function is used in a program, it must be defined; it will not be implicitly instantiated using the function template defi- nition. Jason ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics 1997-10-10 8:51 ` Joe Buck 1997-10-10 8:51 ` Oleg Krivosheev @ 1997-10-10 11:46 ` Oleg Krivosheev 1997-10-10 20:46 ` Alexandre Oliva 1 sibling, 1 reply; 16+ messages in thread From: Oleg Krivosheev @ 1997-10-10 11:46 UTC (permalink / raw) To: Joe Buck; +Cc: egcs team well, i've reduced example to few lines: template <class T> class X { public: X( T ); X( const X<T>& ); ~X(); friend X<T> operator+( const X<T>&, const X<T>& ); private: T t_; }; template <class T> X<T>:: X( T t ): t_(t) { } template <class T> X<T>:: X( const X<T>& x ): t_(x.t_) { } template <class T> X<T>:: ~X() { } template <class T> X<T> operator+( const X<T>& a, const X<T>& b ) { return X<T>( a.t_ + b.t_ ); } main( void ) { } void dummy( void ) { X<int> x( 1 ); X<int> y( 2 ); x = x+y; } sparc-solaris2.5.1, gcc version egcs-2.90.12 971008 (gcc2-970802 experimental) jor-el ~ $ c++ -c test2.cc jor-el ~ $ nm -s test2.o |c++filt 00000000 W X<int>::~X(void) 00000030 ? __EXCEPTION_END__ 00000000 ? __EXCEPTION_TABLE__ 00000000 ? __FRAME_BEGIN__ U __builtin_delete 00000004 C __eh_cleanup 00000004 C __eh_in_catch 00000004 C __eh_pc 00000004 C __eh_type 00000004 C __eh_value U operator+(X<int> const &, X<int> const &) 00000000 W X<int>::X(int) U __throw 00000018 T dummy(void) 00000000 t gcc2_compiled. 00000000 T main U terminate(void) as one can see, op+ is not instantiated. regards OK ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics 1997-10-10 11:46 ` Oleg Krivosheev @ 1997-10-10 20:46 ` Alexandre Oliva 0 siblings, 0 replies; 16+ messages in thread From: Alexandre Oliva @ 1997-10-10 20:46 UTC (permalink / raw) To: Oleg Krivosheev; +Cc: Joe Buck, egcs team Oleg Krivosheev writes: > template <class T> class X { Here, you declare a non-template operator+ : > friend X<T> operator+( const X<T>&, const X<T>& ); > }; And here, you declare a define a template one: > template <class T> X<T> > operator+( const X<T>& a, const X<T>& b ) { > return X<T>( a.t_ + b.t_ ); > } And here, overload resolution chooses the non-template one. > x = x+y; > as one can see, op+ is not instantiated. It shouldn't, since it is not used at all. The non-template operator+ you use, OTOH, is not defined. You should have declared the template version of the function friend, like this: template <typename T> class X; template <typename T> X<T> operator+(const X<T>&, const X<T>&); template <typename T> class X { // note the angle brackets: // vv friend X<T> operator+<>(const X<T>&, const X<T>&); }; -- Alexandre Oliva mailto:oliva@dcc.unicamp.br mailto:aoliva@acm.org http://www.dcc.unicamp.br/~oliva Universidade Estadual de Campinas, SP, Brasil ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: something wrong with template instantiation mechanics 1997-10-09 16:31 ` something wrong with template instantiation mechanics Oleg Krivosheev 1997-10-10 8:51 ` Joe Buck @ 1997-10-10 8:51 ` Joe Buck 1 sibling, 0 replies; 16+ messages in thread From: Joe Buck @ 1997-10-10 8:51 UTC (permalink / raw) To: Oleg Krivosheev; +Cc: egcs team > This message is in MIME format. The first part should be readable text, > while the remaining parts are likely unreadable without MIME-aware tools. > Send mail to mime@docserver.cac.washington.edu for more info. > > ---559023410-1804928587-876430667=:6246 > Content-Type: TEXT/PLAIN; charset=US-ASCII > > > Hi, > > i've tried my code and lloks like tons of > small inline template functions are not > instantiated. > > drabble ~ $ c++ -v > Reading specs from > /home/room1/kriol/local/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/specs > gcc version egcs-2.90.12 971008 (gcc2-970802 experimental) > drabble ~ $ uname -a > SunOS drabble 5.5.1 Generic_103640-08 sun4m sparc SUNW,SPARCstation-4 > > in a simple example: > > #include "typedefs.H" > #include "Vector3D.H" > > int > main( void ) { > return 0; > } > > void > superdummy( void ) { > TVector3D<double> ccc; > ccc = 1.0; > abs(ccc); > } > > > where abs(ccc) declared as > > template <class x> inline x > abs( const TVector3D<x>& y ); > > is not instantiated: > > c++ -c test.ii > nm -s test.o | c++filt | grep abs > U abs(TVector3D<double> const &) > > i'd expect it to be instantiated and marked W > > i've enclosed full preprocessor output file. > > thanks > > OK > > ---559023410-1804928587-876430667=:6246 > Content-Type: TEXT/PLAIN; charset=US-ASCII; name="test.ii" > Content-Transfer-Encoding: BASE64 > Content-ID: <Pine.GSO.3.96.971009155747.6246B@drabble> > Content-Description: > > IyAxICJ0ZXN0LkMiDQojIDEgIi9ob21lL3Jvb20xL2tyaW9sL3dvcmsvUHJv > amVjdC9jb25maWcvc3BhcmMtc3VuLXNvbGFyaXMtZ2NjL2NvbmZpZ3VyYXRp > b24uaCIgMQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIDEg > InRlc3QuQyIgMg0KIyAxICIvaG9tZS9yb29tMS9rcmlvbC93b3JrL1Byb2pl > Y3QvaW5jbHVkZS90eXBlZGVmcy5IIiAxIDMNCiANCg0KDQoNCg0KDQoNCg0K > DQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgIHVjaGFyX3Q7DQp0eXBlZGVmIGNo > YXIgICAgICAgICAgIGNoYXJfdDsNCnR5cGVkZWYgaW50ICAgICAgICAgICAg > aW50X3Q7DQoNCnR5cGVkZWYgdW5zaWduZWQgaW50ICAgdWludF90Ow0KdHlw > ZWRlZiBsb25nICAgICAgICAgICBsb25nX3Q7DQoNCg0KdHlwZWRlZiBib29s > ICAgICAgICAgICBib29sX3Q7DQoNCg0KdHlwZWRlZiBmbG9hdCAgICAgICAg > ICBmbG9hdF90Ow0KdHlwZWRlZiBkb3VibGUgICAgICAgICBkb3VibGVfdDsN > Cg0KIA0KDQoNCg0KDQoNCg0KIyAxICJ0ZXN0LkMiIDINCg0KIyAxICIvaG9t > ZS9yb29tMS9rcmlvbC93b3JrL1Byb2plY3QvaW5jbHVkZS9WZWN0b3IzRC5I > IiAxIDMNCiANCg0KDQoNCg0KIyAxICIvaG9tZS9yb29tMS9rcmlvbC9sb2Nh > bC9pbmNsdWRlL2lvc3RyZWFtIiAxIDMNCiANCg0KDQoNCg0KIyAxICIvaG9t > ZS9yb29tMS9rcmlvbC9sb2NhbC9pbmNsdWRlL2crKy9pb3N0cmVhbS5oIiAx > IDMNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K > DQoNCg0KDQoNCg0KI3ByYWdtYSBpbnRlcmZhY2UNCg0KDQoNCiMgMSAiL2hv > bWUvcm9vbTEva3Jpb2wvbG9jYWwvaW5jbHVkZS9nKysvc3RyZWFtYnVmLmgi > IDEgMw0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K > DQoNCg0KDQoNCg0KDQoNCiNwcmFnbWEgaW50ZXJmYWNlDQoNCg0KICAgDQoN > Cg0KDQpleHRlcm4gIkMiIHsNCiMgMSAiL2hvbWUvcm9vbTEva3Jpb2wvbG9j > YWwvaW5jbHVkZS9nKysvbGliaW8uaCIgMSAzDQogDQoNCg0KDQoNCg0KDQoN > Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiMg > MSAiL2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvc3BhcmMtc3VuLXNvbGFyaXMy > LjUuMS9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMgNA0KICANCg0KDQoNCg0K > DQoNCg0KDQoNCnR5cGVkZWYgICAgICAgICAgaW50ICAgX0dfaW50OF90IF9f > YXR0cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsNCnR5cGVkZWYgdW5z > aWduZWQgaW50ICBfR191aW50OF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9f > KF9fUUlfXykpKTsNCnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQxNl90 > IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fSElfXykpKTsNCnR5cGVkZWYg > dW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18oKF9fbW9k > ZV9fKF9fSElfXykpKTsNCnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQz > Ml90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsNCnR5cGVk > ZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18oKF9f > bW9kZV9fKF9fU0lfXykpKTsNCnR5cGVkZWYgICAgICAgICAgaW50ICBfR19p > bnQ2NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsNCnR5 > cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQ2NF90IF9fYXR0cmlidXRlX18o > KF9fbW9kZV9fKF9fRElfXykpKTsNCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBs > b25nIGxvbmcgX0dfbGxvbmc7DQpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5z > aWduZWQgbG9uZyBsb25nIF9HX3VsbG9uZzsNCg0KDQoNCg0KDQoNCg0KdHlw > ZWRlZiBsb25nIF9HX2Nsb2NrX3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg > X0dfZGV2X3Q7DQp0eXBlZGVmIGxvbmcgX0dfZnBvc190Ow0KdHlwZWRlZiBs > b25nIF9HX2dpZF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX2lub190 > Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX21vZGVfdDsNCnR5cGVkZWYg > dW5zaWduZWQgbG9uZyBfR19ubGlua190Ow0KdHlwZWRlZiBsb25nIF9HX29m > Zl90Ow0KdHlwZWRlZiBsb25nIF9HX3BpZF90Ow0KDQoNCg0KdHlwZWRlZiBp > bnQgX0dfcHRyZGlmZl90Ow0KdHlwZWRlZiBpbnQgICBfR19zaWdzZXRfdDsN > Cg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3NpemVfdDsNCnR5cGVk > ZWYgbG9uZyBfR190aW1lX3Q7DQp0eXBlZGVmIGxvbmcgX0dfdWlkX3Q7DQp0 > eXBlZGVmIGxvbmcgaW50IF9HX3djaGFyX3Q7DQoNCg0KDQoNCg0KDQoNCg0K > DQoNCg0KDQoNCg0KDQp0eXBlZGVmIGludCBfR19zc2l6ZV90Ow0KdHlwZWRl > ZiB1bnNpZ25lZCBpbnQgX0dfd2ludF90Ow0KdHlwZWRlZiB2b2lkICogX0df > dmFfbGlzdDsNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyAz > MCAiL2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvaW5jbHVkZS9nKysvbGliaW8u > aCIgMiAzDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiMgNTEgIi9ob21l > L3Jvb20xL2tyaW9sL2xvY2FsL2luY2x1ZGUvZysrL2xpYmlvLmgiIDMNCg0K > DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0K > DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN > Cg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN > Cg0KDQoNCg0KDQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN > Cg0KDQoNCg0KDQoNCg0Kc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lP > X0ZJTEU7DQoNCiANCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoN > Cg0KdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7DQoNCg0KDQoNCiANCg0Kc3Ry > dWN0IF9JT19tYXJrZXIgew0KICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7 > DQogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7DQogICANCg0KICAgDQogIGlu > dCBfcG9zOw0KIyAxOTEgIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2luY2x1 > ZGUvZysrL2xpYmlvLmgiIDMNCg0KfTsNCg0Kc3RydWN0IF9JT19GSUxFIHsN > CiAgaW50IF9mbGFnczsJCSANCg0KDQogICANCiAgIA0KICBjaGFyKiBfSU9f > cmVhZF9wdHI7CSANCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgDQogIGNoYXIq > IF9JT19yZWFkX2Jhc2U7CSANCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSAN > CiAgY2hhciogX0lPX3dyaXRlX3B0cjsJIA0KICBjaGFyKiBfSU9fd3JpdGVf > ZW5kOwkgDQogIGNoYXIqIF9JT19idWZfYmFzZTsJIA0KICBjaGFyKiBfSU9f > YnVmX2VuZDsJIA0KICAgDQogIGNoYXIgKl9JT19zYXZlX2Jhc2U7ICANCiAg > Y2hhciAqX0lPX2JhY2t1cF9iYXNlOyAgIA0KICBjaGFyICpfSU9fc2F2ZV9l > bmQ7ICANCg0KICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7DQoNCiAg > c3RydWN0IF9JT19GSUxFICpfY2hhaW47DQoNCiAgaW50IF9maWxlbm87DQog > IGludCBfYmxrc2l6ZTsNCiAgX0dfb2ZmX3QgIF9vZmZzZXQ7DQoNCg0KICAg > DQogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOw0KICBjaGFyIF91bnVz > ZWQ7DQogIGNoYXIgX3Nob3J0YnVmWzFdOw0KDQogICANCg0KDQoNCg0KfTsN > Cg0KDQoNCg0KDQpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsNCmV4dGVybiBzdHJ1 > Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0XywgX0lP > X3N0ZGVycl87DQoNCg0KDQoNCg0KIA0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAg > X0dfc3NpemVfdCAgKCpyZWFkKSAgKHN0cnVjdCBfSU9fRklMRSAqLCB2b2lk > ICosIF9HX3NzaXplX3QgKSAgOw0KICBfR19zc2l6ZV90ICAoKndyaXRlKSAg > KHN0cnVjdCBfSU9fRklMRSAqLCBjb25zdCB2b2lkICosIF9HX3NzaXplX3Qg > KSAgOw0KICBfR19mcG9zX3QgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUg > KiwgX0dfb2ZmX3QgLCBpbnQpICA7DQogIGludCAoKmNsb3NlKSAgKHN0cnVj > dCBfSU9fRklMRSAqKSAgOw0KfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190 > Ow0KDQogDQpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlDQp7DQogIHN0cnVjdCBf > SU9fRklMRSBmaWxlOw0KICBjb25zdCB2b2lkICp2dGFibGU7DQogIHZvaWQg > KmNvb2tpZTsNCiAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBpb19mdW5j > dGlvbnM7DQp9Ow0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KZXh0ZXJuIGlu > dCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7DQpleHRlcm4gaW50IF9f > dWZsb3cgIChfSU9fRklMRSAqKSAgOw0KZXh0ZXJuIGludCBfX292ZXJmbG93 > ICAoX0lPX0ZJTEUgKiwgaW50KSAgOw0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN > Cg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgX0lPX2dldGMgIChfSU9fRklMRSAq > X19mcCkgIDsNCmV4dGVybiBpbnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9f > RklMRSAqX19mcCkgIDsNCmV4dGVybiBpbnQgX0lPX2Zlb2YgIChfSU9fRklM > RSAqX19mcCkgIDsNCmV4dGVybiBpbnQgX0lPX2ZlcnJvciAgKF9JT19GSUxF > ICpfX2ZwKSAgOw0KDQpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgIChf > SU9fRklMRSAqX19mcCkgIDsNCg0KIA0KDQoNCg0KZXh0ZXJuIHZvaWQgX0lP > X2Zsb2NrZmlsZSAgKF9JT19GSUxFICopICA7DQpleHRlcm4gdm9pZCBfSU9f > ZnVubG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgOw0KZXh0ZXJuIGludCBfSU9f > ZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsNCg0KDQoNCg0KDQoNCg0K > DQoNCg0KDQoNCg0KZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxF > ICosIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCAsIGludCAqKSAgOw0KZXh0 > ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFy > ICosIF9HX3ZhX2xpc3QgKSAgOw0KZXh0ZXJuIF9HX3NzaXplX3QgIF9JT19w > YWRuICAoX0lPX0ZJTEUgKiwgaW50LCBfR19zc2l6ZV90ICkgIDsNCmV4dGVy > biBfR19zaXplX3QgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwg > X0dfc2l6ZV90ICkgIDsNCg0KZXh0ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtv > ZmYgIChfSU9fRklMRSAqLCBfR19vZmZfdCAsIGludCwgaW50KSAgOw0KZXh0 > ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19m > cG9zX3QgLCBpbnQpICA7DQoNCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1 > cF9hcmVhICAoX0lPX0ZJTEUgKikgIDsNCg0KDQp9DQoNCg0KDQojIDM2ICIv > aG9tZS9yb29tMS9rcmlvbC9sb2NhbC9pbmNsdWRlL2crKy9zdHJlYW1idWYu > aCIgMiAzDQoNCn0NCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN > Cg0KDQoNCg0KDQoNCg0KZXh0ZXJuICJDKysiIHsNCmNsYXNzIGlzdHJlYW07 > ICANCmNsYXNzIG9zdHJlYW07IGNsYXNzIHN0cmVhbWJ1ZjsNCg0KIA0KDQoN > Cg0KdHlwZWRlZiBfR19vZmZfdCAgc3RyZWFtb2ZmOw0KdHlwZWRlZiBfR19m > cG9zX3QgIHN0cmVhbXBvczsNCnR5cGVkZWYgX0dfc3NpemVfdCAgc3RyZWFt > c2l6ZTsNCg0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fZm10ZmxhZ3M7DQp0 > eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19pb3N0YXRlOw0KDQpzdHJ1Y3QgX2lv > c19maWVsZHMNCnsgIA0KICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1ZjsNCiAgICBv > c3RyZWFtKiBfdGllOw0KICAgIGludCBfd2lkdGg7DQogICAgX19mbXRmbGFn > cyBfZmxhZ3M7DQogICAgc2hvcnQgIF9maWxsOw0KICAgIF9faW9zdGF0ZSBf > c3RhdGU7DQogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOw0KICAgIGludCBf > cHJlY2lzaW9uOw0KDQogICAgdm9pZCAqX2FycmF5czsgIA0KfTsNCg0KDQoN > Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiMgMTE1ICIvaG9tZS9yb29tMS9r > cmlvbC9sb2NhbC9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIgMw0KDQoNCmNs > YXNzIGlvcyA6IHB1YmxpYyBfaW9zX2ZpZWxkcyB7DQogIGlvcyYgb3BlcmF0 > b3I9KGlvcyYpOyAgIA0KICBpb3MgKGNvbnN0IGlvcyYpOyAgDQogIHB1Ymxp > YzoNCiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10ZmxhZ3M7DQogICAgdHlw > ZWRlZiBpbnQgaW9zdGF0ZTsNCiAgICB0eXBlZGVmIGludCBvcGVubW9kZTsN > CiAgICB0eXBlZGVmIGludCBzdHJlYW1zaXplOw0KICAgIGVudW0gaW9fc3Rh > dGUgew0KCWdvb2RiaXQgPSAwICwNCgllb2ZiaXQgPSAxICwNCglmYWlsYml0 > ID0gMiAsDQoJYmFkYml0ID0gNCAgfTsNCiAgICBlbnVtIG9wZW5fbW9kZSB7 > DQoJaW4gPSAxICwNCglvdXQgPSAyICwNCglhdGUgPSA0ICwNCglhcHAgPSA4 > ICwNCgl0cnVuYyA9IDE2ICwNCglub2NyZWF0ZSA9IDMyICwNCglub3JlcGxh > Y2UgPSA2NCAsDQoJYmluID0gMTI4ICwgIA0KCWJpbmFyeSA9IDEyOCAgfTsN > CiAgICBlbnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07DQogICAgdHlw > ZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7DQogICAgIA0KICAgIGVudW0g > eyBza2lwd3M9IDAxICwNCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGlu > dGVybmFsPSAwMTAgLA0KCSAgIGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9 > IDAxMDAgLA0KCSAgIHNob3diYXNlPSAwMjAwICwgc2hvd3BvaW50PSAwNDAw > ICwNCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bvcz0gMDIwMDAgLA0K > CSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAsDQoJICAg > dW5pdGJ1Zj0gMDIwMDAwICwgc3RkaW89IDA0MDAwMCANCg0KDQoNCgkgICB9 > Ow0KICAgIGVudW0geyAgDQoJYmFzZWZpZWxkPWRlYytvY3QraGV4LA0KCWZs > b2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLA0KCWFkanVzdGZpZWxkID0g > bGVmdCtyaWdodCtpbnRlcm5hbA0KICAgIH07DQoNCiMgMTY4ICIvaG9tZS9y > b29tMS9rcmlvbC9sb2NhbC9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIgMw0K > DQoNCiAgICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7IHJldHVybiBfdGllOyB9 > DQogICAgb3N0cmVhbSogdGllKG9zdHJlYW0qIHZhbCkgeyBvc3RyZWFtKiBz > YXZlPV90aWU7IF90aWU9dmFsOyByZXR1cm4gc2F2ZTsgfQ0KDQogICAgIA0K > ICAgIHNob3J0ICBmaWxsKCkgY29uc3QgeyByZXR1cm4gKHNob3J0IClfZmls > bDsgfQ0KICAgIHNob3J0ICBmaWxsKHNob3J0ICBuZXdmKQ0KCXtzaG9ydCAg > b2xkZiA9IChzaG9ydCApX2ZpbGw7IF9maWxsID0gKGNoYXIpbmV3ZjsgcmV0 > dXJuIG9sZGY7fQ0KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1 > cm4gX2ZsYWdzOyB9DQogICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3 > X3ZhbCkgew0KCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9 > IG5ld192YWw7IHJldHVybiBvbGRfdmFsOyB9DQogICAgaW50IHByZWNpc2lv > bigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNpb247IH0NCiAgICBpbnQgcHJl > Y2lzaW9uKGludCBuZXdwKSB7DQoJdW5zaWduZWQgc2hvcnQgb2xkcCA9IF9w > cmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsN > CglyZXR1cm4gb2xkcDsgfQ0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3Mg > dmFsKSB7DQoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsNCglfZmxhZ3Mg > fD0gdmFsOyByZXR1cm4gb2xkYml0czsgfQ0KICAgIGZtdGZsYWdzIHNldGYo > Zm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7DQoJZm10ZmxhZ3Mgb2xk > Yml0cyA9IF9mbGFnczsNCglfZmxhZ3MgPSAoX2ZsYWdzICYgfm1hc2spIHwg > KHZhbCAmIG1hc2spOyByZXR1cm4gb2xkYml0czsgfQ0KICAgIGZtdGZsYWdz > IHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7DQoJZm10ZmxhZ3Mgb2xkYml0cyA9 > IF9mbGFnczsNCglfZmxhZ3MgJj0gfm1hc2s7IHJldHVybiBvbGRiaXRzOyB9 > DQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9DQog > ICAgaW50IHdpZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93 > aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0NCg0KDQoNCg0KICAgIHZvaWQg > X3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0NCg0KICAgIHZvaWQgY2xlYXIo > aW9zdGF0ZSBzdGF0ZSA9IDApIHsNCglfc3RhdGUgPSBfc3RyYnVmID8gc3Rh > dGUgOiBzdGF0ZXxiYWRiaXQ7DQoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25z > KSBfdGhyb3dfZmFpbHVyZSgpOyB9DQogICAgdm9pZCBzZXQoaW9zdGF0ZSBm > bGFnKSB7IF9zdGF0ZSB8PSBmbGFnOw0KCWlmIChfc3RhdGUgJiBfZXhjZXB0 > aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQ0KICAgIHZvaWQgc2V0c3RhdGUo > aW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOyAgDQoJaWYgKF9zdGF0 > ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9DQogICAgaW50 > IGdvb2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQ0KICAgIGlu > dCBlb2YoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsg > fQ0KICAgIGludCBmYWlsKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgKGlv > czo6YmFkYml0fGlvczo6ZmFpbGJpdCk7IH0NCiAgICBpbnQgYmFkKCkgY29u > c3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0NCiAgICBpb3N0 > YXRlIHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0NCiAgICBv > cGVyYXRvciB2b2lkKigpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lk > KikwIDogKHZvaWQqKSgtMSk7IH0NCiAgICBpbnQgb3BlcmF0b3IhKCkgY29u > c3QgeyByZXR1cm4gZmFpbCgpOyB9DQogICAgaW9zdGF0ZSBleGNlcHRpb25z > KCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0NCiAgICB2b2lkIGV4 > Y2VwdGlvbnMoaW9zdGF0ZSBlbmFibGUpIHsNCglfZXhjZXB0aW9ucyA9IGVu > YWJsZTsNCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWls > dXJlKCk7IH0NCg0KICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJl > dHVybiBfc3RyYnVmOyB9DQogICAgc3RyZWFtYnVmKiByZGJ1ZihzdHJlYW1i > dWYgKl9zKSB7DQogICAgICBzdHJlYW1idWYgKl9vbGQgPSBfc3RyYnVmOyBf > c3RyYnVmID0gX3M7IGNsZWFyICgpOyByZXR1cm4gX29sZDsgfQ0KDQogICAg > c3RhdGljIGludCBzeW5jX3dpdGhfc3RkaW8oaW50IG9uKTsNCiAgICBzdGF0 > aWMgdm9pZCBzeW5jX3dpdGhfc3RkaW8oKSB7IHN5bmNfd2l0aF9zdGRpbygx > KTsgfQ0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOw0KICAgIHN0 > YXRpYyBpbnQgeGFsbG9jKCk7DQogICAgdm9pZComIHB3b3JkKGludCk7DQog > ICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsNCiAgICBsb25nJiBpd29yZChp > bnQpOw0KICAgIGxvbmcgaXdvcmQoaW50KSBjb25zdDsNCg0KDQoNCg0KDQoN > Cg0KDQoNCiAgICAgDQogICAgY2xhc3MgSW5pdCB7DQogICAgcHVibGljOg0K > ICAgICAgSW5pdCAoKSB7IH0NCiAgICB9Ow0KDQogIHByb3RlY3RlZDoNCiAg > ICBpbmxpbmUgaW9zKHN0cmVhbWJ1Ziogc2IgPSAwLCBvc3RyZWFtKiB0aWVf > dG8gPSAwKTsNCiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7DQogICAgaW5s > aW5lIHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAw > KTsNCn07DQoNCg0KDQoNCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vla19k > aXI7DQoNCg0KIA0KIA0KIA0KIA0KIA0KDQogDQogDQpjbGFzcyBzdHJlYW1t > YXJrZXIgOiBwcml2YXRlIF9JT19tYXJrZXIgew0KICAgIGZyaWVuZCBjbGFz > cyBzdHJlYW1idWY7DQogICAgdm9pZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQp > IHsgX3BvcyA9IG9mZnNldDsgfQ0KICBwdWJsaWM6DQogICAgc3RyZWFtbWFy > a2VyKHN0cmVhbWJ1ZiAqc2IpOw0KICAgIH5zdHJlYW1tYXJrZXIoKTsNCiAg > ICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gIDE7IH0NCiAgICBpbnQgZGVsdGEo > c3RyZWFtbWFya2VyJik7DQogICAgaW50IGRlbHRhKCk7DQp9Ow0KDQpzdHJ1 > Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsgIA0KICAgIGZyaWVu > ZCBjbGFzcyBpb3M7DQogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07DQogICAg > ZnJpZW5kIGNsYXNzIG9zdHJlYW07DQogICAgZnJpZW5kIGNsYXNzIHN0cmVh > bW1hcmtlcjsNCiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJu > ICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQ0KICBw > cm90ZWN0ZWQ6DQogICAgc3RhdGljIHN0cmVhbWJ1ZiogX2xpc3RfYWxsOyAg > DQogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0N > CiAgICB2b2lkIF91bl9saW5rKCk7DQogICAgdm9pZCBfbGlua19pbigpOw0K > ICAgIGNoYXIqIGdwdHIoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX2ZsYWdz > ICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0N > CiAgICBjaGFyKiBwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX3B0 > cjsgfQ0KICAgIGNoYXIqIGVncHRyKCkgY29uc3QNCiAgICAgIHsgcmV0dXJu > IF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9l > bmQ7IH0NCiAgICBjaGFyKiBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193 > cml0ZV9lbmQ7IH0NCiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJu > IF9JT193cml0ZV9iYXNlOyB9DQogICAgY2hhciogZWJhY2soKSBjb25zdA0K > ICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jh > c2UgOiBfSU9fcmVhZF9iYXNlO30NCiAgICBjaGFyKiBiYXNlKCkgY29uc3Qg > eyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9DQogICAgY2hhciogZWJ1ZigpIGNv > bnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9DQogICAgaW50IGJsZW4oKSBj > b25zdCB7IHJldHVybiBfSU9fYnVmX2VuZCAtIF9JT19idWZfYmFzZTsgfQ0K > ICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0cisr > ID0gYzsgfQ0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9 > DQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBmbCA9IF9mbGFncyA7IF9m > bGFncyAgPSBmOyByZXR1cm4gZmw7fQ0KICAgIHZvaWQgeHNldGZsYWdzKGlu > dCBmKSB7IF9mbGFncyAgfD0gZjsgfQ0KICAgIHZvaWQgeHNldGZsYWdzKGlu > dCBmLCBpbnQgbWFzaykNCiAgICAgIHsgX2ZsYWdzICA9IChfZmxhZ3MgICYg > fm1hc2spIHwgKGYgJiBtYXNrKTsgfQ0KICAgIHZvaWQgZ2J1bXAoaW50IG4p > DQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9 > bik6KF9JT19yZWFkX3B0cis9bik7fQ0KICAgIHZvaWQgcGJ1bXAoaW50IG4p > IHsgX0lPX3dyaXRlX3B0ciArPSBuOyB9DQogICAgdm9pZCBzZXRiKGNoYXIq > IGIsIGNoYXIqIGViLCBpbnQgYT0wKTsNCiAgICB2b2lkIHNldHAoY2hhciog > cCwgY2hhciogZXApDQogICAgICB7IF9JT193cml0ZV9iYXNlPV9JT193cml0 > ZV9wdHI9cDsgX0lPX3dyaXRlX2VuZD1lcDsgfQ0KICAgIHZvaWQgc2V0Zyhj > aGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsNCiAgICAgIGlmIChfZmxh > Z3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgDQog > ICAgICBfSU9fcmVhZF9iYXNlID0gZWI7IF9JT19yZWFkX3B0ciA9IGc7IF9J > T19yZWFkX2VuZCA9IGVnOyB9DQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJl > dHVybiBfc2hvcnRidWY7IH0NCg0KICAgIGludCBpbl9iYWNrdXAoKSB7IHJl > dHVybiBfZmxhZ3MgJiAweDEwMCA7IH0NCiAgICAgDQogICAgY2hhciAqR2Jh > c2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBf > SU9fcmVhZF9iYXNlOyB9DQogICAgIA0KICAgIGNoYXIgKmVHcHRyKCkgeyBy > ZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9l > bmQ7IH0NCiAgICAgDQogICAgY2hhciAqQmJhc2UoKSB7IHJldHVybiBpbl9i > YWNrdXAoKSA/IF9JT19yZWFkX2Jhc2UgOiBfSU9fc2F2ZV9iYXNlOyB9DQog > ICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQ0K > ICAgICANCiAgICBjaGFyICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgp > ID8gX0lPX3JlYWRfZW5kIDogX0lPX3NhdmVfZW5kOyB9DQogICAgY2hhciAq > TmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9DQogICAgY2hhciAq > ZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2ZV9lbmQ7IH0NCiAgICBpbnQgaGF2 > ZV9iYWNrdXAoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IChfX251bGwp > IDsgfQ0KICAgIGludCBoYXZlX21hcmtlcnMoKSB7IHJldHVybiBfbWFya2Vy > cyAhPSAoX19udWxsKSA7IH0NCiAgICB2b2lkIGZyZWVfYmFja3VwX2FyZWEo > KTsNCiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICANCiAgICBpbnQgcHV0 > X21vZGUoKSB7IHJldHVybiBfZmxhZ3MgJiAweDgwMCA7IH0NCiAgICBpbnQg > c3dpdGNoX3RvX2dldF9tb2RlKCk7DQogICAgDQogICAgc3RyZWFtYnVmKGlu > dCBmbGFncz0wKTsNCiAgcHVibGljOg0KICAgIHN0YXRpYyBpbnQgZmx1c2hf > YWxsKCk7DQogICAgc3RhdGljIHZvaWQgZmx1c2hfYWxsX2xpbmVidWZmZXJl > ZCgpOyAgDQogICAgdmlydHVhbCB+c3RyZWFtYnVmKCk7DQogICAgdmlydHVh > bCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7ICANCiAgICB2aXJ0dWFs > IGludCB1bmRlcmZsb3coKTsgIA0KICAgIHZpcnR1YWwgaW50IHVmbG93KCk7 > ICANCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOw0KIA0KICAg > IHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3Ry > ZWFtc2l6ZSBuKTsNCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNo > YXIqIHMsIHN0cmVhbXNpemUgbik7DQogICAgdmlydHVhbCBzdHJlYW1wb3Mg > c2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjpp > bnxpb3M6Om91dCk7DQogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla3Bvcyhz > dHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOw0K > DQogICAgc3RyZWFtcG9zIHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVr > X2RpciBkLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KQ0KICAgICAgeyBy > ZXR1cm4gX0lPX3NlZWtvZmYgKHRoaXMsIG8sIGQsIG1vZGUpOyB9DQogICAg > c3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUg > PSBpb3M6OmlufGlvczo6b3V0KQ0KICAgICAgeyByZXR1cm4gX0lPX3NlZWtw > b3MgKHRoaXMsIHBvcywgbW9kZSk7IH0NCiAgICBzdHJlYW1wb3Mgc3NlZWtv > ZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9z > OjpvdXQpOw0KICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9z > LCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOw0KICAgIHZpcnR1YWwg > c3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7DQogICAgdmly > dHVhbCBpbnQgc3luYygpOw0KICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUo > KTsNCg0KICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmssIGlu > dCBkZWx0YSA9IDApOw0KICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsNCiAg > ICBpbnQgc3VuZ2V0YygpOw0KICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1 > cm4gX2ZsYWdzICYgMiAgPyAxIDogMDsgfQ0KICAgIGludCBsaW5lYnVmZmVy > ZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQ0KICAg > IHZvaWQgdW5idWZmZXJlZChpbnQgaSkNCgl7IGlmIChpKSBfZmxhZ3MgfD0g > MiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsgfQ0KICAgIHZvaWQgbGluZWJ1ZmZl > cmVkKGludCBpKQ0KCXsgaWYgKGkpIF9mbGFncyB8PSAweDIwMCA7IGVsc2Ug > X2ZsYWdzICY9IH4weDIwMCA7IH0NCiAgICBpbnQgYWxsb2NhdGUoKSB7ICAN > CglpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7DQoJZWxz > ZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9DQogICAgIA0KICAgIHZvaWQgYWxs > b2NidWYoKSB7IGlmIChiYXNlKCkgPT0gKF9fbnVsbCkgKSBkb2FsbG9jYnVm > KCk7IH0NCiAgICB2b2lkIGRvYWxsb2NidWYoKTsNCiAgICBpbnQgaW5fYXZh > aWwoKSB7IHJldHVybiBfSU9fcmVhZF9lbmQgLSBfSU9fcmVhZF9wdHI7IH0N > CiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRy > IC0gX0lPX3dyaXRlX2Jhc2U7IH0NCiAgICBzdHJlYW1zaXplIHNwdXRuKGNv > bnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNwdXRuKHMs > IG4pOyB9DQogICAgc3RyZWFtc2l6ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1z > aXplIG4pIHsgcmV0dXJuIF9JT19wYWRuKHRoaXMsIHBhZCwgbik7IH0NCiAg > ICBzdHJlYW1zaXplIHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyBy > ZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9DQogICAgaW50IGlnbm9y > ZShpbnQpOw0KICAgIGludCBnZXRfY29sdW1uKCk7DQogICAgaW50IHNldF9j > b2x1bW4oaW50KTsNCiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1ZiwgX0df > c2l6ZV90ICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7DQog > ICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlz > KTsgfQ0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0aGlz > KTsgfQ0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICApLT5f > SU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9f > dW5kZXJmbG93ICggIHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5z > aWduZWQgY2hhciAqKSAoICB0aGlzICApLT5fSU9fcmVhZF9wdHIpICA7IH0N > CiAgICBpbnQgc25leHRjKCkgew0KCWlmIChfSU9fcmVhZF9wdHIgPj0gX0lP > X3JlYWRfZW5kICYmIF9fdW5kZXJmbG93KHRoaXMpID09ICgtMSkgKQ0KCSAg > cmV0dXJuICgtMSkgOw0KCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBz > Z2V0YygpOyB9DQogICAgdm9pZCBzdG9zc2MoKSB7IGlmIChfSU9fcmVhZF9w > dHIgPCBfSU9fcmVhZF9lbmQpIF9JT19yZWFkX3B0cisrOyB9DQogICAgaW50 > IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwLCBpb3Mq > IHN0cmVhbSA9IChfX251bGwpICk7DQogICAgaW50IHNjYW4oY2hhciBjb25z > dCAqZm10MCAuLi4pOw0KICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQw > LCBfR192YV9saXN0ICBhcCk7DQogICAgaW50IGZvcm0oY2hhciBjb25zdCAq > Zm10MCAuLi4pOw0KDQoNCg0KDQogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5 > c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsNCiAgICB2aXJ0 > dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1z > aXplKTsNCiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1v > ZmYsIF9zZWVrX2Rpcik7DQogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7 > DQogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOyAgDQp9Ow0KDQog > DQogDQoNCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsNCiAg > cHJvdGVjdGVkOg0KICAgIHZvaWQgaW5pdCgpOw0KICBwdWJsaWM6DQogICAg > c3RhdGljIGNvbnN0IGludCBvcGVucHJvdDsgIA0KICAgIGZpbGVidWYoKTsN > CiAgICBmaWxlYnVmKGludCBmZCk7DQogICAgZmlsZWJ1ZihpbnQgZmQsIGNo > YXIqIHAsIGludCBsZW4pOw0KDQoNCg0KICAgIH5maWxlYnVmKCk7DQogICAg > ZmlsZWJ1ZiogYXR0YWNoKGludCBmZCk7DQogICAgZmlsZWJ1Ziogb3Blbihj > b25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSk7DQogICAg > ZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVu > bW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOw0KICAgIHZpcnR1YWwgaW50 > IHVuZGVyZmxvdygpOw0KICAgIHZpcnR1YWwgaW50IG92ZXJmbG93KGludCBj > ID0gKC0xKSApOw0KICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4g > X2ZpbGVubyA+PSAwOyB9DQogICAgaW50IGZkKCkgY29uc3QgeyByZXR1cm4g > aXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9DQogICAgZmlsZWJ1Ziog > Y2xvc2UoKTsNCiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7DQogICAg > dmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2Rp > ciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7DQogICAgdmlydHVhbCBz > dHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsNCiAgICBzdHJl > YW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOw0K > ICAgIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7 > DQogICAgdmlydHVhbCBpbnQgc3luYygpOw0KICBwcm90ZWN0ZWQ6ICANCiAN > CiAgICBpbnQgaXNfcmVhZGluZygpIHsgcmV0dXJuIGViYWNrKCkgIT0gZWdw > dHIoKTsgfQ0KICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFk > aW5nKCkgPyAgZ3B0cigpIDogcHB0cigpOyB9DQogICAgIA0KICAgIGNoYXIq > IGZpbGVfcHRyKCkgeyByZXR1cm4gZUdwdHIoKTsgfQ0KICAgICANCiAgICB2 > aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1z > aXplIHNpemUpOw0KICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0 > cmVhbW9mZiwgX3NlZWtfZGlyKTsNCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUg > c3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsNCiAgICB2aXJ0 > dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICANCiAgICB2aXJ0dWFsIGludCBz > eXNfY2xvc2UoKTsNCg0KDQoNCg0KfTsNCg0KaW5saW5lIHZvaWQgaW9zOjpp > bml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgew0KCQlfc3Rh > dGUgPSBzYiA/IGlvczo6Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0 > aW9ucz0wOw0KCQlfc3RyYnVmPXNiOyBfdGllID0gdGllX3RvOyBfd2lkdGg9 > MDsgX2ZpbGw9JyAnOw0KDQoJCV9mbGFncz1pb3M6OnNraXB3c3xpb3M6OmRl > YzsNCg0KDQoNCgkJX3ByZWNpc2lvbj02OyBfYXJyYXlzID0gMDsgfQ0KDQpp > bmxpbmUgaW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3Rv > KSB7IGluaXQoc2IsIHRpZV90byk7IH0NCg0KaW5saW5lIGlvczo6fmlvcygp > IHsNCg0KDQoNCiAgICBpZiAoX2FycmF5cykgZGVsZXRlIFtdIF9hcnJheXM7 > DQp9DQp9ICANCg0KIyAzMSAiL2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvaW5j > bHVkZS9nKysvaW9zdHJlYW0uaCIgMiAzDQoNCg0KZXh0ZXJuICJDKysiIHsN > CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07DQp0eXBlZGVmIGlvcyYg > KCpfX21hbmlwKShpb3MmKTsNCnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5p > cCkoaXN0cmVhbSYpOw0KdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShv > c3RyZWFtJik7DQoNCmV4dGVybiBpc3RyZWFtJiB3cyhpc3RyZWFtJiBpbnMp > Ow0KZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mIG91dHMpOw0KZXh0 > ZXJuIG9zdHJlYW0mIGVuZGwob3N0cmVhbSYgb3V0cyk7DQpleHRlcm4gb3N0 > cmVhbSYgZW5kcyhvc3RyZWFtJiBvdXRzKTsNCg0KY2xhc3Mgb3N0cmVhbSA6 > IHZpcnR1YWwgcHVibGljIGlvcw0Kew0KICAgICANCiAgICB2b2lkIGRvX29z > ZngoKTsNCiAgcHVibGljOg0KICAgIG9zdHJlYW0oKSB7IH0NCiAgICBvc3Ry > ZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZWQ9IChfX251bGwpICk7 > DQogICAgaW50IG9wZngoKSB7DQoJaWYgKCFnb29kKCkpIHJldHVybiAwOw0K > CWVsc2UgeyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsgIDsgcmV0dXJuIDE7 > fSB9DQogICAgdm9pZCBvc2Z4KCkgeyAgOw0KCQkgIGlmIChmbGFncygpICYg > KGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkNCgkJICAgICAgZG9fb3NmeCgp > OyB9DQogICAgb3N0cmVhbSYgZmx1c2goKTsNCiAgICBvc3RyZWFtJiBwdXQo > Y2hhciBjKSB7IF9zdHJidWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0N > Cg0KDQoNCg0KDQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hhciAqcywg > c3RyZWFtc2l6ZSBuKTsNCiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNp > Z25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pDQogICAgICB7IHJldHVybiB3 > cml0ZSgoY29uc3QgY2hhciopcywgbik7fQ0KICAgIG9zdHJlYW0mIHdyaXRl > KGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pDQogICAgICB7 > IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQ0KICAgIG9zdHJl > YW0mIHdyaXRlKGNvbnN0IHZvaWQgKnMsIHN0cmVhbXNpemUgbikNCiAgICAg > IHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9DQogICAgb3N0 > cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsNCiAgICBvc3RyZWFtJiBzZWVrcChz > dHJlYW1vZmYsIF9zZWVrX2Rpcik7DQogICAgc3RyZWFtcG9zIHRlbGxwKCk7 > DQogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsN > CiAgICBvc3RyZWFtJiB2Zm9ybShjb25zdCBjaGFyICpmb3JtYXQsIF9HX3Zh > X2xpc3QgIGFyZ3MpOw0KDQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjaGFy > IGMpOw0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBj > KSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0NCiAgICBvc3RyZWFt > JiBvcGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykg > PDwgKGNoYXIpYzsgfQ0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qg > Y2hhciAqcyk7DQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNp > Z25lZCBjaGFyICpzKQ0KCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNo > YXIqKXM7IH0NCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNpZ25l > ZCBjaGFyICpzKQ0KCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIq > KXM7IH0NCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHZvaWQgKnAp > Ow0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOw0KICAgIG9zdHJl > YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4pOw0KICAgIG9zdHJlYW0m > IG9wZXJhdG9yPDwobG9uZyBuKTsNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8 > KHVuc2lnbmVkIGxvbmcgbik7DQoNCiAgICBfX2V4dGVuc2lvbl9fIG9zdHJl > YW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOw0KICAgIF9fZXh0ZW5zaW9u > X18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgbik7 > DQoNCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4g > b3BlcmF0b3I8PCgoaW50KW4pO30NCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8 > KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgodW5zaWdu > ZWQgaW50KW4pO30NCg0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBi > KSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0NCg0KICAgIG9zdHJl > YW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOw0KICAgIG9zdHJlYW0mIG9wZXJh > dG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91YmxlKW4p > OyB9DQoNCg0KDQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGRvdWJs > ZSBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0NCg0KICAg > IG9zdHJlYW0mIG9wZXJhdG9yPDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4g > KCpmdW5jKSgqdGhpcyk7IH0NCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9f > bWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQ0K > ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RyZWFtYnVmKik7DQoNCg0KDQp9 > Ow0KDQpjbGFzcyBpc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zDQp7DQog > ICAgIA0KcHJvdGVjdGVkOg0KICAgIF9HX3NpemVfdCAgX2djb3VudDsNCg0K > ICAgIGludCBfc2tpcF93cygpOw0KICBwdWJsaWM6DQogICAgaXN0cmVhbSgp > OiBfZ2NvdW50ICgwKSB7IH0NCiAgICBpc3RyZWFtKHN0cmVhbWJ1Ziogc2Is > IG9zdHJlYW0qdGllZD0gKF9fbnVsbCkgKTsNCiAgICBpc3RyZWFtJiBnZXQo > Y2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7DQogICAg > aXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hh > ciBkZWxpbSA9ICdcbicpDQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxl > biwgZGVsaW0pOyB9DQogICAgaXN0cmVhbSYgZ2V0KGNoYXImIGMpOw0KICAg > IGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyJiBjKSB7IHJldHVybiBnZXQo > KGNoYXImKWMpOyB9DQogICAgaXN0cmVhbSYgZ2V0bGluZShjaGFyKiBwdHIs > IGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsNCiAgICBpc3RyZWFtJiBn > ZXRsaW5lKHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxp > bSA9ICdcbicpDQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4s > IGRlbGltKTsgfQ0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciYgYykg > IHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0NCiAgICBpc3RyZWFtJiBnZXQo > c2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicp > DQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9DQog > ICAgaXN0cmVhbSYgZ2V0bGluZShzaWduZWQgY2hhciogcHRyLCBpbnQgbGVu > LCBjaGFyIGRlbGltID0gJ1xuJykNCgl7IHJldHVybiBnZXRsaW5lKChjaGFy > KilwdHIsIGxlbiwgZGVsaW0pOyB9DQogICAgaXN0cmVhbSYgcmVhZChjaGFy > ICpwdHIsIHN0cmVhbXNpemUgbik7DQogICAgaXN0cmVhbSYgcmVhZCh1bnNp > Z25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikNCiAgICAgIHsgcmV0dXJu > IHJlYWQoKGNoYXIqKXB0ciwgbik7IH0NCiAgICBpc3RyZWFtJiByZWFkKHNp > Z25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikNCiAgICAgIHsgcmV0dXJu > IHJlYWQoKGNoYXIqKXB0ciwgbik7IH0NCiAgICBpc3RyZWFtJiByZWFkKHZv > aWQgKnB0ciwgc3RyZWFtc2l6ZSBuKQ0KICAgICAgeyByZXR1cm4gcmVhZCgo > Y2hhciopcHRyLCBuKTsgfQ0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYm > IHNiLCBjaGFyIGRlbGltID0gJ1xuJyk7DQogICAgaXN0cmVhbSYgZ2V0cyhj > aGFyICoqcywgY2hhciBkZWxpbSA9ICdcbicpOw0KICAgIGludCBpcGZ4KGlu > dCBuZWVkID0gMCkgew0KCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxi > aXQpOyByZXR1cm4gMDsgfQ0KCWVsc2Ugew0KCSAgIDsNCgkgIGlmIChfdGll > ICYmIChuZWVkID09IDAgfHwgcmRidWYoKS0+aW5fYXZhaWwoKSA8IG5lZWQp > KSBfdGllLT5mbHVzaCgpOw0KCSAgaWYgKCFuZWVkICYmIChmbGFncygpICYg > aW9zOjpza2lwd3MpKSByZXR1cm4gX3NraXBfd3MoKTsNCgkgIGVsc2UgcmV0 > dXJuIDE7DQoJfQ0KICAgIH0NCiAgICBpbnQgaXBmeDAoKSB7ICANCglpZiAo > IWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0NCgll > bHNlIHsNCgkgICA7DQoJICBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsNCgkg > IGlmIChmbGFncygpICYgaW9zOjpza2lwd3MpIHJldHVybiBfc2tpcF93cygp > Ow0KCSAgZWxzZSByZXR1cm4gMTsNCgl9DQogICAgfQ0KICAgIGludCBpcGZ4 > MSgpIHsgIA0KCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyBy > ZXR1cm4gMDsgfQ0KCWVsc2Ugew0KCSAgIDsNCgkgIGlmIChfdGllICYmIHJk > YnVmKCktPmluX2F2YWlsKCkgPT0gMCkgX3RpZS0+Zmx1c2goKTsNCgkgIHJl > dHVybiAxOw0KCX0NCiAgICB9DQogICAgdm9pZCBpc2Z4KCkgeyAgOyB9DQog > ICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7DQoJ > CWVsc2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5zYnVtcGMoKTsNCgkJICAgICAg > IGlmIChjaCA9PSAoLTEpICkgc2V0KGlvczo6ZW9mYml0KTsNCgkJICAgICAg > IHJldHVybiBjaDsNCgkJICAgICB9IH0NCiAgICBpbnQgcGVlaygpOw0KICAg > IF9HX3NpemVfdCAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQ0KICAg > IGlzdHJlYW0mIGlnbm9yZShpbnQgbj0xLCBpbnQgZGVsaW0gPSAoLTEpICk7 > DQogICAgaW50IHN5bmMgKCk7DQogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFt > cG9zKTsNCiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVrX2Rp > cik7DQogICAgc3RyZWFtcG9zIHRlbGxnKCk7DQogICAgaXN0cmVhbSYgcHV0 > YmFjayhjaGFyIGNoKSB7DQoJaWYgKGdvb2QoKSAmJiBfc3RyYnVmLT5zcHV0 > YmFja2MoY2gpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7DQoJcmV0 > dXJuICp0aGlzO30NCiAgICBpc3RyZWFtJiB1bmdldCgpIHsNCglpZiAoZ29v > ZCgpICYmIF9zdHJidWYtPnN1bmdldGMoKSA9PSAoLTEpICkgY2xlYXIoaW9z > OjpiYWRiaXQpOw0KCXJldHVybiAqdGhpczt9DQogICAgaXN0cmVhbSYgc2Nh > bihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsNCiAgICBpc3RyZWFtJiB2c2Nh > bihjb25zdCBjaGFyICpmb3JtYXQsIF9HX3ZhX2xpc3QgIGFyZ3MpOw0KDQoN > Cg0KDQoNCg0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOw0KICAg > IGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciogcCkgeyByZXR1 > cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0NCiAgICBpc3RyZWFtJiBvcGVy > YXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNo > YXIqKXApOyB9DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsN > CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXImIGMpIHty > ZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQ0KICAgIGlzdHJlYW0mIG9w > ZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+Pigo > Y2hhciYpYyk7fQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7DQog > ICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nJik7DQoNCiAgICBfX2V4dGVu > c2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBsb25nJik7DQogICAg > X19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxv > bmcgbG9uZyYpOw0KDQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYp > Ow0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7DQog > ICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7DQogICAg > aXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYpOw0KDQogICAg > aXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7DQoNCiAgICBpc3RyZWFtJiBv > cGVyYXRvcj4+KGZsb2F0Jik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihk > b3VibGUmKTsNCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91Ymxl > Jik7DQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7 > KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9DQogICAgaXN0cmVhbSYg > b3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0 > aGlzKTsgfQ0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7 > DQp9Ow0KDQpjbGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBwdWJs > aWMgb3N0cmVhbQ0Kew0KICBwdWJsaWM6DQogICAgaW9zdHJlYW0oKSB7IH0N > CiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IChf > X251bGwpICk7DQp9Ow0KDQpjbGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWdu > IDogcHVibGljIGlzdHJlYW0gew0KcHVibGljOg0KICBfSU9faXN0cmVhbV93 > aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYpOw0KICBfSU9faXN0cmVh > bV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2ln > biYgcmhzKQ0KICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8 > aXN0cmVhbSY+IChyaHMpKTsgfQ0KfTsNCg0KY2xhc3MgX0lPX29zdHJlYW1f > d2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsNCnB1YmxpYzoNCiAgX0lP > X29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsNCiAg > X0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3RyZWFt > X3dpdGhhc3NpZ24mIHJocykNCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0 > YXRpY19jYXN0PG9zdHJlYW0mPiAocmhzKSk7IH0NCn07DQoNCmV4dGVybiBf > SU9faXN0cmVhbV93aXRoYXNzaWduIGNpbjsNCiANCmV4dGVybiBfSU9fb3N0 > cmVhbV93aXRoYXNzaWduIGNvdXQsIGNlcnI7DQoNCmV4dGVybiBfSU9fb3N0 > cmVhbV93aXRoYXNzaWduIGNsb2cNCg0KDQoNCjsNCg0KZXh0ZXJuIGlzdHJl > YW0mIGxvY2soaXN0cmVhbSYgaW5zKTsNCmV4dGVybiBpc3RyZWFtJiB1bmxv > Y2soaXN0cmVhbSYgaW5zKTsNCmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJl > YW0mIG91dHMpOw0KZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBv > dXRzKTsNCg0Kc3RydWN0IElvc3RyZWFtX2luaXQgeyB9IDsgICANCg0KaW5s > aW5lIGlvcyYgZGVjKGlvcyYgaSkNCnsgaS5zZXRmKGlvczo6ZGVjLCBpb3M6 > OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9DQppbmxpbmUg > aW9zJiBoZXgoaW9zJiBpKQ0KeyBpLnNldGYoaW9zOjpoZXgsIGlvczo6ZGVj > fGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0NCmlubGluZSBpb3Mm > IG9jdChpb3MmIGkpDQp7IGkuc2V0Zihpb3M6Om9jdCwgaW9zOjpkZWN8aW9z > OjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQ0KfSAgDQoNCg0KIyA2ICIv > aG9tZS9yb29tMS9rcmlvbC9sb2NhbC9pbmNsdWRlL2lvc3RyZWFtIiAyIDMN > Cg0KDQoNCiMgNiAiL2hvbWUvcm9vbTEva3Jpb2wvd29yay9Qcm9qZWN0L2lu > Y2x1ZGUvVmVjdG9yM0QuSCIgMiAzDQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8 > Y2xhc3MgbnVtVD4gY2xhc3MgVFF1YXRlcm5pb247DQoNCnRlbXBsYXRlIDxj > bGFzcyBudW1UPg0KY2xhc3MgVFZlY3RvcjNEIHsNCiAgICANCiAgcHVibGlj > Og0KICANCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCg0KICAgIFRW > ZWN0b3IzRCggdm9pZCApOw0KDQogICAgVFZlY3RvcjNEKCBudW1UIGRUICk7 > DQoNCiAgICBUVmVjdG9yM0QoIG51bVQgZFgsIG51bVQgZFksIG51bVQgZFog > KTsNCg0KICAgIFRWZWN0b3IzRCggY29uc3QgbnVtVCogcGRYICk7DQoNCiAg > ICBUVmVjdG9yM0QoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgcmhzICk7DQog > IA0KICAgIH5UVmVjdG9yM0QoKTsNCiAgICAgIA0KICAgICAgICANCiAgICAg > ICAgDQogICAgICAgIA0KDQogICAgVFZlY3RvcjNEPG51bVQ+JiAgIG9wZXJh > dG9yID0gKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIHJocyApOw0KICAgIFRW > ZWN0b3IzRDxudW1UPiYgICBvcGVyYXRvciA9ICggbnVtVCBkVCApOw0KDQog > ICAgbnVtVCYgICAgICBvcGVyYXRvcltdKCBpbnQgaUlkeCApOw0KICAgIA0K > ICAgIFRWZWN0b3IzRDxudW1UPiAgICBvcGVyYXRvciAtICggdm9pZCApOw0K > DQogICAgVFZlY3RvcjNEPG51bVQ+JiAgIG9wZXJhdG9yICs9ICggY29uc3Qg > VFZlY3RvcjNEPG51bVQ+JiByaHMgKTsNCiAgICBUVmVjdG9yM0Q8bnVtVD4m > ICAgb3BlcmF0b3IgKz0gKCBudW1UIGRUICk7DQoNCiAgICBUVmVjdG9yM0Q8 > bnVtVD4mICAgb3BlcmF0b3IgLT0gKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4m > IHJocyApOw0KICAgIFRWZWN0b3IzRDxudW1UPiYgICBvcGVyYXRvciAtPSAo > IG51bVQgZFQgKTsNCg0KICAgIFRWZWN0b3IzRDxudW1UPiYgICBvcGVyYXRv > ciAqPSAoIG51bVQgZFQgKTsNCiAgICBUVmVjdG9yM0Q8bnVtVD4mICAgb3Bl > cmF0b3IgLz0gKCBudW1UIGRUICk7DQoNCiAgICB2b2lkIG5vcm1hbGl6ZSgg > dm9pZCApOw0KDQogICAgdm9pZCBzZXRYKCBudW1UIGRYICk7DQogICAgdm9p > ZCBzZXRZKCBudW1UIGRZICk7DQogICAgdm9pZCBzZXRaKCBudW1UIGRaICk7 > DQoNCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCg0KICAgIG51bVQg > ICAgICBvcGVyYXRvcltdKCBpbnQgaUlkeCApIGNvbnN0Ow0KICAgIA0KICAg > IG51bVQgICAgICBkWCggdm9pZCApIGNvbnN0OyAgICANCiAgICBudW1UICAg > ICAgZFkoIHZvaWQgKSBjb25zdDsNCiAgICBudW1UICAgICAgZFooIHZvaWQg > KSBjb25zdDsNCg0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KDQog > ICAgZnJpZW5kIGNsYXNzICBUUXVhdGVybmlvbjxudW1UPjsNCg0KICAgIGZy > aWVuZCBUVmVjdG9yM0Q8bnVtVD4gb3BlcmF0b3IgKyAoIGNvbnN0IFRWZWN0 > b3IzRDxudW1UPiYsIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgKTsNCiAgICBm > cmllbmQgVFZlY3RvcjNEPG51bVQ+IG9wZXJhdG9yICsgKCBjb25zdCBUVmVj > dG9yM0Q8bnVtVD4mLCBudW1UICk7DQogICAgZnJpZW5kIFRWZWN0b3IzRDxu > dW1UPiBvcGVyYXRvciArICggbnVtVCwgY29uc3QgVFZlY3RvcjNEPG51bVQ+ > JiApOw0KICAgIGZyaWVuZCBUVmVjdG9yM0Q8bnVtVD4gb3BlcmF0b3IgLSAo > IGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIGNvbnN0IFRWZWN0b3IzRDxudW1U > PiYgKTsNCiAgICBmcmllbmQgVFZlY3RvcjNEPG51bVQ+IG9wZXJhdG9yIC0g > KCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mLCBudW1UICk7DQogICAgZnJpZW5k > IFRWZWN0b3IzRDxudW1UPiBvcGVyYXRvciAtICggbnVtVCwgY29uc3QgVFZl > Y3RvcjNEPG51bVQ+JiApOw0KICAgIGZyaWVuZCBUVmVjdG9yM0Q8bnVtVD4g > b3BlcmF0b3IgKiAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIG51bVQgKTsN > CiAgICBmcmllbmQgVFZlY3RvcjNEPG51bVQ+IG9wZXJhdG9yICogKCBudW1U > LCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mICk7DQogICAgZnJpZW5kIG51bVQg > ICAgICAgICAgICBvcGVyYXRvciAqICggY29uc3QgVFZlY3RvcjNEPG51bVQ+ > JiwgY29uc3QgVFZlY3RvcjNEPG51bVQ+JiApOyAgDQogICAgDQogICAgZnJp > ZW5kIFRWZWN0b3IzRDxudW1UPiBvcGVyYXRvciAvICggY29uc3QgVFZlY3Rv > cjNEPG51bVQ+JiwgbnVtVCApOw0KICAgIGZyaWVuZCBUVmVjdG9yM0Q8bnVt > VD4gb3BlcmF0b3IgXiAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIGNvbnN0 > IFRWZWN0b3IzRDxudW1UPiYgKTsNCiAgICANCiAgICBmcmllbmQgYm9vbF90 > IG9wZXJhdG9yICE9ICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIGNv > bnN0IFRWZWN0b3IzRDxudW1UPiYgcmhzICk7DQogICAgZnJpZW5kIGJvb2xf > dCBvcGVyYXRvciAhPSAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIG51bVQg > KTsNCiAgICBmcmllbmQgYm9vbF90IG9wZXJhdG9yICE9ICggbnVtVCwgY29u > c3QgVFZlY3RvcjNEPG51bVQ+JiApOw0KICAgIA0KICAgIGZyaWVuZCBib29s > X3Qgb3BlcmF0b3IgPT0gKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mLCBjb25z > dCBUVmVjdG9yM0Q8bnVtVD4mICk7DQogICAgZnJpZW5kIGJvb2xfdCBvcGVy > YXRvciA9PSAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIG51bVQgKTsNCiAg > ICBmcmllbmQgYm9vbF90IG9wZXJhdG9yID09ICggbnVtVCwgY29uc3QgVFZl > Y3RvcjNEPG51bVQ+JiApOw0KICAgIA0KICAgIGZyaWVuZCBudW1UICAgICAg > ICAgICAgYWJzKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mICk7ICAgICAgDQog > ICAgZnJpZW5kIG51bVQgICAgICAgICAgICBub3JtKCBjb25zdCBUVmVjdG9y > M0Q8bnVtVD4mICk7ICAgICANCiAgICBmcmllbmQgbnVtVCAgICAgICAgICAg > IGFic190cmFucyggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiApOw0KICAgIGZy > aWVuZCBudW1UICAgICAgICAgICAgbm9ybV90cmFucyggY29uc3QgVFZlY3Rv > cjNEPG51bVQ+JiApOw0KICAgIGZyaWVuZCBudW1UICAgICAgICAgICAgYW5n > bGUoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYsIGNvbnN0IFRWZWN0b3IzRDxu > dW1UPiYgKTsNCiAgICBmcmllbmQgVFZlY3RvcjNEPG51bVQ+IHVuaXQoIGNv > bnN0IFRWZWN0b3IzRCYgKTsNCg0KICAgICAgICANCiAgICAgICAgDQogICAg > ICAgIA0KDQogICAgZnJpZW5kIGlzdHJlYW0mIG9wZXJhdG9yID4+ICggaXN0 > cmVhbSYgaXMsIFRWZWN0b3IzRDxudW1UPiYgKTsNCiAgICBmcmllbmQgb3N0 > cmVhbSYgb3BlcmF0b3IgPDwgKCBvc3RyZWFtJiBvcywgY29uc3QgVFZlY3Rv > cjNEPG51bVQ+JiApOw0KDQogIHByaXZhdGU6DQoNCiAgICBudW1UIGRYXzsN > CiAgICBudW1UIGRZXzsNCiAgICBudW1UIGRaXzsNCg0KfTsNCg0KIA0KIA0K > IA0KDQojIDEgIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2luY2x1ZGUvZysr > L2NtYXRoIiAxIDMNCiANCiANCg0KDQoNCg0KIyAxICIvaG9tZS9yb29tMS9r > cmlvbC9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNS4x > L2VnY3MtMi45MC4xMi9pbmNsdWRlL21hdGguaCIgMSAzIDQNCiANCg0KDQoN > Cg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KI3ByYWdtYSBpZGVudAkiQCgj > KW1hdGguaAkyLjUJOTUvMDIvMDciDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K > DQoNCg0KDQogDQoNCg0KdHlwZWRlZiB1bmlvbiBfaF92YWwgew0KICAJdW5z > aWduZWQgbG9uZyBfaVsyXTsNCglkb3VibGUgX2Q7DQp9IF9oX3ZhbDsNCg0K > DQpleHRlcm4gY29uc3QgX2hfdmFsIF9faHVnZV92YWw7DQoNCg0KDQoNCg0K > DQoNCg0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K > ZXh0ZXJuIGludCBzaWduZ2FtOw0KDQoNCg0KDQogDQoNCg0KZW51bSB2ZXJz > aW9uIHtsaWJtX2llZWUgPSAtMSwgY19pc3N1ZV80LCBhbnNpXzEsIHN0cmlj > dF9hbnNpfTsNCg0KDQpleHRlcm4gY29uc3QgZW51bSB2ZXJzaW9uIF9saWJf > dmVyc2lvbjsNCg0KDQoNCg0KDQoNCg0Kc3RydWN0IF9fbWF0aF9leGNlcHRp > b24gIHsNCg0KDQoNCglpbnQgdHlwZTsNCgljaGFyICpuYW1lOw0KCWRvdWJs > ZSBhcmcxOw0KCWRvdWJsZSBhcmcyOw0KCWRvdWJsZSByZXR2YWw7DQp9Ow0K > DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN > Cg0KDQoNCg0KDQogDQoNCg0KZXh0ZXJuIGRvdWJsZSBhY29zICAoZG91Ymxl > KSAgOw0KZXh0ZXJuIGRvdWJsZSBhc2luICAoZG91YmxlKSAgOw0KZXh0ZXJu > IGRvdWJsZSBhdGFuICAoZG91YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBhdGFu > MiAgKGRvdWJsZSwgZG91YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBjb3MgIChk > b3VibGUpICA7DQpleHRlcm4gZG91YmxlIHNpbiAgKGRvdWJsZSkgIDsNCmV4 > dGVybiBkb3VibGUgdGFuICAoZG91YmxlKSAgOw0KDQpleHRlcm4gZG91Ymxl > IGNvc2ggIChkb3VibGUpICA7DQpleHRlcm4gZG91YmxlIHNpbmggIChkb3Vi > bGUpICA7DQpleHRlcm4gZG91YmxlIHRhbmggIChkb3VibGUpICA7DQoNCmV4 > dGVybiBkb3VibGUgZXhwICAoZG91YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBm > cmV4cCAgKGRvdWJsZSwgaW50ICopICA7DQpleHRlcm4gZG91YmxlIGxkZXhw > ICAoZG91YmxlLCBpbnQpICA7DQpleHRlcm4gZG91YmxlIGxvZyAgKGRvdWJs > ZSkgIDsNCmV4dGVybiBkb3VibGUgbG9nMTAgIChkb3VibGUpICA7DQpleHRl > cm4gZG91YmxlIG1vZGYgIChkb3VibGUsIGRvdWJsZSAqKSAgOw0KDQpleHRl > cm4gZG91YmxlIHBvdyAgKGRvdWJsZSwgZG91YmxlKSAgOw0KZXh0ZXJuIGRv > dWJsZSBzcXJ0ICAoZG91YmxlKSAgOw0KDQpleHRlcm4gZG91YmxlIGNlaWwg > IChkb3VibGUpICA7DQpleHRlcm4gZG91YmxlIGZhYnMgIChkb3VibGUpICA7 > DQpleHRlcm4gZG91YmxlIGZsb29yICAoZG91YmxlKSAgOw0KZXh0ZXJuIGRv > dWJsZSBmbW9kICAoZG91YmxlLCBkb3VibGUpICA7DQoNCg0KDQogDQoNCg0K > ZXh0ZXJuIGRvdWJsZSBlcmYgIChkb3VibGUpICA7DQpleHRlcm4gZG91Ymxl > IGVyZmMgIChkb3VibGUpICA7DQpleHRlcm4gZG91YmxlIGdhbW1hICAoZG91 > YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBoeXBvdCAgKGRvdWJsZSwgZG91Ymxl > KSAgOw0KZXh0ZXJuIGludCBpc25hbiAgKGRvdWJsZSkgIDsNCmV4dGVybiBk > b3VibGUgajAgIChkb3VibGUpICA7DQpleHRlcm4gZG91YmxlIGoxICAoZG91 > YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBqbiAgKGludCwgZG91YmxlKSAgOw0K > ZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgIChkb3VibGUpICA7DQpleHRlcm4gZG91 > YmxlIHkwICAoZG91YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSB5MSAgKGRvdWJs > ZSkgIDsNCmV4dGVybiBkb3VibGUgeW4gIChpbnQsIGRvdWJsZSkgIDsNCg0K > DQoNCiANCg0KDQpleHRlcm4gZG91YmxlIGFjb3NoICAoZG91YmxlKSAgOw0K > ZXh0ZXJuIGRvdWJsZSBhc2luaCAgKGRvdWJsZSkgIDsNCmV4dGVybiBkb3Vi > bGUgYXRhbmggIChkb3VibGUpICA7DQpleHRlcm4gZG91YmxlIGNicnQgIChk > b3VibGUpICA7DQpleHRlcm4gZG91YmxlIGxvZ2IgIChkb3VibGUpICA7DQpl > eHRlcm4gZG91YmxlIG5leHRhZnRlciAgKGRvdWJsZSwgZG91YmxlKSAgOw0K > ZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgIChkb3VibGUsIGRvdWJsZSkgIDsN > CmV4dGVybiBkb3VibGUgc2NhbGIgIChkb3VibGUsIGRvdWJsZSkgIDsNCg0K > IA0KDQoNCmV4dGVybiBkb3VibGUgZXhwbTEgIChkb3VibGUpICA7DQpleHRl > cm4gaW50IGlsb2diICAoZG91YmxlKSAgOw0KZXh0ZXJuIGRvdWJsZSBsb2cx > cCAgKGRvdWJsZSkgIDsNCmV4dGVybiBkb3VibGUgcmludCAgKGRvdWJsZSkg > IDsNCg0KDQoNCiANCg0KDQoNCg0KDQpleHRlcm4gaW50IG1hdGhlcnIgIChz > dHJ1Y3QgX19tYXRoX2V4Y2VwdGlvbiAgKikgIDsNCg0KDQoNCg0KIA0KDQoN > CmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgIChkb3VibGUpICA7DQoNCiAN > Cg0KDQpleHRlcm4gZG91YmxlIGNvcHlzaWduICAoZG91YmxlLCBkb3VibGUp > ICA7DQpleHRlcm4gZG91YmxlIHNjYWxibiAgKGRvdWJsZSwgaW50KSAgOw0K > DQogDQoNCg0KDQoNCg0KDQoNCg0KIA0KDQoNCmV4dGVybiBmbG9hdCBtb2Rm > ZiAgKGZsb2F0LCBmbG9hdCAqKSAgOw0KDQojIDEgIi9ob21lL3Jvb20xL2ty > aW9sL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi41LjEv > ZWdjcy0yLjkwLjEyL2luY2x1ZGUvZmxvYXRpbmdwb2ludC5oIiAxIDMgNA0K > IA0KIA0KDQogDQogDQogDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0K > I3ByYWdtYSBpZGVudAkiQCgjKWZsb2F0aW5ncG9pbnQuaAkyLjQgOTQvMDYv > MDkiDQoNCiANCg0KDQoNCg0KIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIDEg > Ii9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 > bi1zb2xhcmlzMi41LjEvZWdjcy0yLjkwLjEyL2luY2x1ZGUvc3RkaW8uaCIg > MSAzIDQNCiANCiANCg0KIA0KIA0KIA0KDQogDQoNCg0KDQoNCg0KDQojcHJh > Z21hIGlkZW50CSJAKCMpc3RkaW8uaAkxLjM5CTk1LzEyLzA0IFNNSSIJDQoN > CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0 > DQogDQogDQoNCiANCiANCiANCg0KDQoNCg0KI3ByYWdtYSBpZGVudAkiQCgj > KWZlYXR1cmVfdGVzdHMuaAkxLjcJOTQvMTIvMDYgU01JIg0KDQoNCmV4dGVy > biAiQyIgew0KDQoNCiANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCn0NCg0K > DQoNCiMgMTcgIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2xpYi9nY2MtbGli > L3NwYXJjLXN1bi1zb2xhcmlzMi41LjEvZWdjcy0yLjkwLjEyL2luY2x1ZGUv > c3RkaW8uaCIgMiAzIDQNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3ZhX2xp > c3QuaCIgMSAzIDQNCiANCg0KDQoNCg0KDQoNCg0KI3ByYWdtYSBpZGVudAki > QCgjKXZhX2xpc3QuaAkxLjYJOTYvMDEvMjYgU01JIg0KDQogDQoNCg0KDQoN > Cg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgew0KDQoNCiMgNDEgIi91c3IvaW5j > bHVkZS9zeXMvdmFfbGlzdC5oIiAzIDQNCg0KDQoNCnR5cGVkZWYgdm9pZCAq > X192YV9saXN0Ow0KDQoNCg0KDQoNCg0KDQp9DQoNCg0KDQojIDE4ICIvaG9t > ZS9yb29tMS9rcmlvbC9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s > YXJpczIuNS4xL2VnY3MtMi45MC4xMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0 > DQoNCg0KDQpleHRlcm4gIkMiIHsNCg0KDQoNCg0KdHlwZWRlZiB1bnNpZ25l > ZCBpbnQJc2l6ZV90Ow0KDQoNCnR5cGVkZWYgbG9uZwlmcG9zX3Q7DQoNCg0K > DQoNCg0KDQoNCg0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAN > Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyA4MSAi > L2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu > LXNvbGFyaXMyLjUuMS9lZ2NzLTIuOTAuMTIvaW5jbHVkZS9zdGRpby5oIiAz > IDQNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN > Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K > DQoNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QJIA0Kew0KDQoNCg0K > DQoJaW50CQlfY250OwkgDQoJdW5zaWduZWQgY2hhcgkqX3B0cjsJIA0KDQoJ > dW5zaWduZWQgY2hhcgkqX2Jhc2U7CSANCgl1bnNpZ25lZCBjaGFyCV9mbGFn > OwkgDQoJdW5zaWduZWQgY2hhcglfZmlsZTsJIA0KfSBGSUxFOw0KDQoNCmV4 > dGVybiBGSUxFCQlfX2lvYlsyMCBdOw0KDQoNCg0KZXh0ZXJuIEZJTEUJCSpf > bGFzdGJ1ZjsNCmV4dGVybiB1bnNpZ25lZCBjaGFyCSpfYnVmZW5kdGFiW107 > DQoNCmV4dGVybiB1bnNpZ25lZCBjaGFyCSBfc2lidWZbXSwgX3NvYnVmW107 > DQoNCg0KDQoNCmV4dGVybiBpbnQJcmVtb3ZlKGNvbnN0IGNoYXIgKik7DQpl > eHRlcm4gaW50CXJlbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7 > DQpleHRlcm4gRklMRQkqdG1wZmlsZSh2b2lkKTsNCmV4dGVybiBjaGFyCSp0 > bXBuYW0oY2hhciAqKTsNCg0KZXh0ZXJuIGNoYXIJKnRtcG5hbV9yKGNoYXIg > Kik7DQoNCmV4dGVybiBpbnQJZmNsb3NlKEZJTEUgKik7DQpleHRlcm4gaW50 > CWZmbHVzaChGSUxFICopOw0KZXh0ZXJuIEZJTEUJKmZvcGVuKGNvbnN0IGNo > YXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBGSUxFCSpmcmVvcGVuKGNv > bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOw0KZXh0ZXJuIHZv > aWQJc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsNCmV4dGVybiBpbnQJc2V0dmJ1 > ZihGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOw0KIA0KZXh0ZXJuIGlu > dAlmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOw0KIA0KZXh0 > ZXJuIGludAlmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7DQog > DQpleHRlcm4gaW50CXByaW50Zihjb25zdCBjaGFyICosIC4uLik7DQogDQpl > eHRlcm4gaW50CXNjYW5mKGNvbnN0IGNoYXIgKiwgLi4uKTsNCiANCmV4dGVy > biBpbnQJc3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCiAN > CmV4dGVybiBpbnQJc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq > LCAuLi4pOw0KZXh0ZXJuIGludAl2ZnByaW50ZihGSUxFICosIGNvbnN0IGNo > YXIgKiwgX192YV9saXN0KTsNCmV4dGVybiBpbnQJdnByaW50Zihjb25zdCBj > aGFyICosIF9fdmFfbGlzdCk7DQpleHRlcm4gaW50CXZzcHJpbnRmKGNoYXIg > KiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOw0KZXh0ZXJuIGludAlmZ2V0 > YyhGSUxFICopOw0KZXh0ZXJuIGNoYXIJKmZnZXRzKGNoYXIgKiwgaW50LCBG > SUxFICopOw0KZXh0ZXJuIGludAlmcHV0YyhpbnQsIEZJTEUgKik7DQpleHRl > cm4gaW50CWZwdXRzKGNvbnN0IGNoYXIgKiwgRklMRSAqKTsNCmV4dGVybiBp > bnQJZ2V0YyhGSUxFICopOw0KZXh0ZXJuIGludAlnZXRjaGFyKHZvaWQpOw0K > ZXh0ZXJuIGNoYXIJKmdldHMoY2hhciAqKTsNCmV4dGVybiBpbnQJcHV0Yyhp > bnQsIEZJTEUgKik7DQpleHRlcm4gaW50CXB1dGNoYXIoaW50KTsNCmV4dGVy > biBpbnQJcHV0cyhjb25zdCBjaGFyICopOw0KZXh0ZXJuIGludAl1bmdldGMo > aW50LCBGSUxFICopOw0KZXh0ZXJuIHNpemVfdAlmcmVhZCh2b2lkICosIHNp > emVfdCwgc2l6ZV90LCBGSUxFICopOw0KZXh0ZXJuIHNpemVfdAlmd3JpdGUo > Y29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsNCmV4dGVy > biBpbnQJZmdldHBvcyhGSUxFICosIGZwb3NfdCAqKTsNCmV4dGVybiBpbnQJ > ZnNlZWsoRklMRSAqLCBsb25nLCBpbnQpOw0KZXh0ZXJuIGludAlmc2V0cG9z > KEZJTEUgKiwgY29uc3QgZnBvc190ICopOw0KZXh0ZXJuIGxvbmcJZnRlbGwo > RklMRSAqKTsNCmV4dGVybiB2b2lkCXJld2luZChGSUxFICopOw0KZXh0ZXJu > IHZvaWQJY2xlYXJlcnIoRklMRSAqKTsNCmV4dGVybiBpbnQJZmVvZihGSUxF > ICopOw0KZXh0ZXJuIGludAlmZXJyb3IoRklMRSAqKTsNCmV4dGVybiB2b2lk > CXBlcnJvcihjb25zdCBjaGFyICopOw0KDQpleHRlcm4gaW50CV9fZmlsYnVm > KEZJTEUgKik7DQpleHRlcm4gaW50CV9fZmxzYnVmKGludCwgRklMRSAqKTsN > Cg0KIA0KDQoNCg0KDQoNCmV4dGVybiBGSUxFCSpmZG9wZW4oaW50LCBjb25z > dCBjaGFyICopOw0KZXh0ZXJuIGNoYXIJKmN0ZXJtaWQoY2hhciAqKTsNCmV4 > dGVybiBpbnQJZmlsZW5vKEZJTEUgKik7DQoNCg0KDQogDQoNCg0KDQoNCmV4 > dGVybiB2b2lkCWZsb2NrZmlsZShGSUxFICopOw0KZXh0ZXJuIGludAlmdHJ5 > bG9ja2ZpbGUoRklMRSAqKTsNCmV4dGVybiB2b2lkCWZ1bmxvY2tmaWxlKEZJ > TEUgKik7DQpleHRlcm4gaW50CWdldGNfdW5sb2NrZWQoRklMRSAqKTsNCmV4 > dGVybiBpbnQJZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKTsNCmV4dGVybiBpbnQJ > cHV0Y191bmxvY2tlZChpbnQsIEZJTEUgKik7DQpleHRlcm4gaW50CXB1dGNo > YXJfdW5sb2NrZWQoaW50KTsNCg0KDQoNCiANCg0KDQoNCg0KZXh0ZXJuIEZJ > TEUJKnBvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVy > biBjaGFyCSpjdXNlcmlkKGNoYXIgKik7DQpleHRlcm4gY2hhcgkqdGVtcG5h > bShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50CWdl > dG9wdChpbnQsIGNoYXIgKmNvbnN0ICosIGNvbnN0IGNoYXIgKik7DQoNCmV4 > dGVybiBpbnQJZ2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICosIGNo > YXIgKiopOw0KDQpleHRlcm4gY2hhcgkqb3B0YXJnOw0KZXh0ZXJuIGludAlv > cHRpbmQsIG9wdGVyciwgb3B0b3B0Ow0KZXh0ZXJuIGludAlnZXR3KEZJTEUg > Kik7DQpleHRlcm4gaW50CXB1dHcoaW50LCBGSUxFICopOw0KZXh0ZXJuIGlu > dAlwY2xvc2UoRklMRSAqKTsNCg0KDQoNCiMgMzQzICIvaG9tZS9yb29tMS9r > cmlvbC9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNS4x > L2VnY3MtMi45MC4xMi9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0KDQoNCiANCg0K > DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN > Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K > DQoNCg0KDQoNCg0KDQoNCg0KDQp9DQoNCg0KDQojIDMzICIvaG9tZS9yb29t > MS9rcmlvbC9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu > NS4xL2VnY3MtMi45MC4xMi9pbmNsdWRlL2Zsb2F0aW5ncG9pbnQuaCIgMiAz > IDQNCg0KDQojIDEgIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2xpYi9nY2Mt > bGliL3NwYXJjLXN1bi1zb2xhcmlzMi41LjEvZWdjcy0yLjkwLjEyL2luY2x1 > ZGUvc3lzL2llZWVmcC5oIiAxIDMgNA0KIA0KDQoNCg0KDQoNCg0KI3ByYWdt > YSBpZGVudAkiQCgjKWllZWVmcC5oCTIuNyA5NC8xMS8wOSINCg0KDQpleHRl > cm4gIkMiIHsNCg0KDQogDQoNCg0KDQplbnVtIGZwX2RpcmVjdGlvbl90eXBl > IHsJIA0KCWZwX25lYXJlc3QJPSAwLA0KCWZwX3RvemVybwk9IDEsDQoJZnBf > cG9zaXRpdmUJPSAyLA0KCWZwX25lZ2F0aXZlCT0gMw0KfTsNCg0KZW51bSBm > cF9wcmVjaXNpb25fdHlwZSB7CSANCglmcF9leHRlbmRlZAk9IDAsDQoJZnBf > c2luZ2xlCT0gMSwNCglmcF9kb3VibGUJPSAyLA0KCWZwX3ByZWNpc2lvbl8z > CT0gMw0KfTsNCg0KZW51bSBmcF9leGNlcHRpb25fdHlwZSB7CSANCglmcF9p > bmV4YWN0CT0gMCwNCglmcF9kaXZpc2lvbgk9IDEsDQoJZnBfdW5kZXJmbG93 > CT0gMiwNCglmcF9vdmVyZmxvdwk9IDMsDQoJZnBfaW52YWxpZAk9IDQNCn07 > DQoNCmVudW0gZnBfdHJhcF9lbmFibGVfdHlwZSB7CSANCglmcF90cmFwX2lu > ZXhhY3QJPSAwLA0KCWZwX3RyYXBfZGl2aXNpb24JPSAxLA0KCWZwX3RyYXBf > dW5kZXJmbG93CT0gMiwNCglmcF90cmFwX292ZXJmbG93CT0gMywNCglmcF90 > cmFwX2ludmFsaWQJPSA0DQp9Ow0KDQoNCiMgODEgIi9ob21lL3Jvb20xL2ty > aW9sL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi41LjEv > ZWdjcy0yLjkwLjEyL2luY2x1ZGUvc3lzL2llZWVmcC5oIiAzIDQNCg0KDQoj > IDEyMiAiL2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvbGliL2djYy1saWIvc3Bh > cmMtc3VuLXNvbGFyaXMyLjUuMS9lZ2NzLTIuOTAuMTIvaW5jbHVkZS9zeXMv > aWVlZWZwLmgiIDMgNA0KDQoNCmVudW0gZnBfY2xhc3NfdHlwZSB7CQkgDQoJ > ZnBfemVybwkJPSAwLA0KCWZwX3N1Ym5vcm1hbAk9IDEsDQoJZnBfbm9ybWFs > CT0gMiwNCglmcF9pbmZpbml0eSAgIAk9IDMsDQoJZnBfcXVpZXQJPSA0LA0K > CWZwX3NpZ25hbGluZwk9IDUNCn07DQoNCg0KfQ0KDQoNCg0KIyAzNSAiL2hv > bWUvcm9vbTEva3Jpb2wvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv > bGFyaXMyLjUuMS9lZ2NzLTIuOTAuMTIvaW5jbHVkZS9mbG9hdGluZ3BvaW50 > LmgiIDIgMyA0DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KdHlwZWRl > ZiBpbnQgc2lnZnBlX2NvZGVfdHlwZTsJIA0KDQp0eXBlZGVmIHZvaWQgKCpz > aWdmcGVfaGFuZGxlcl90eXBlKSgpOwkgDQoNCg0KDQoNCg0KZXh0ZXJuIHNp > Z2ZwZV9oYW5kbGVyX3R5cGUgc2lnZnBlICAoc2lnZnBlX2NvZGVfdHlwZSwg > c2lnZnBlX2hhbmRsZXJfdHlwZSkgIDsNCg0KIA0KDQoNCnR5cGVkZWYgZmxv > YXQgc2luZ2xlOwkJCQ0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBleHRlbmRl > ZFszXTsNCg0KDQp0eXBlZGVmIGxvbmcgZG91YmxlIHF1YWRydXBsZTsJIA0K > DQp0eXBlZGVmIHVuc2lnbmVkIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlOw0K > CQkJCSANCg0KDQoNCiANCg0KDQoNCg0KdHlwZWRlZiBjaGFyIGRlY2ltYWxf > c3RyaW5nWzUxMiBdOwkNCgkJCQkgDQoNCnR5cGVkZWYgc3RydWN0IHsNCgll > bnVtIGZwX2NsYXNzX3R5cGUgZnBjbGFzczsNCglpbnQJc2lnbjsNCglpbnQJ > ZXhwb25lbnQ7DQoJZGVjaW1hbF9zdHJpbmcgZHM7CSANCg0KDQoJaW50CW1v > cmU7CQkgDQoNCg0KCWludCAJbmRpZ2l0czsJIA0KDQoNCn0gZGVjaW1hbF9y > ZWNvcmQ7DQoNCmVudW0gZGVjaW1hbF9mb3JtIHsNCglmaXhlZF9mb3JtLAkJ > IA0KDQoNCglmbG9hdGluZ19mb3JtCQkgDQoNCn07DQoNCnR5cGVkZWYgc3Ry > dWN0IHsNCgllbnVtIGZwX2RpcmVjdGlvbl90eXBlIHJkOwkNCgkJCQkgDQoJ > ZW51bSBkZWNpbWFsX2Zvcm0gZGY7CSANCg0KCWludCBuZGlnaXRzOwkJIA0K > fSBkZWNpbWFsX21vZGU7DQoNCmVudW0gZGVjaW1hbF9zdHJpbmdfZm9ybSB7 > CSANCglpbnZhbGlkX2Zvcm0sCQkgDQoJd2hpdGVzcGFjZV9mb3JtLAkgDQoJ > Zml4ZWRfaW50X2Zvcm0sCQkgDQoJZml4ZWRfaW50ZG90X2Zvcm0sCSANCglm > aXhlZF9kb3RmcmFjX2Zvcm0sCSANCglmaXhlZF9pbnRkb3RmcmFjX2Zvcm0s > CSANCglmbG9hdGluZ19pbnRfZm9ybSwJIAkNCglmbG9hdGluZ19pbnRkb3Rf > Zm9ybSwJIA0KCWZsb2F0aW5nX2RvdGZyYWNfZm9ybSwJIA0KCWZsb2F0aW5n > X2ludGRvdGZyYWNfZm9ybSwgDQoJaW5mX2Zvcm0sCQkgDQoJaW5maW5pdHlf > Zm9ybSwJCSANCgluYW5fZm9ybSwJCSANCgluYW5zdHJpbmdfZm9ybQkJIA0K > fTsNCg0KZXh0ZXJuIHZvaWQgc2luZ2xlX3RvX2RlY2ltYWwgIChzaW5nbGUg > KiwgZGVjaW1hbF9tb2RlICosIGRlY2ltYWxfcmVjb3JkICosDQoJCQkJZnBf > ZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKikgIDsNCmV4dGVybiB2b2lkIGRvdWJs > ZV90b19kZWNpbWFsICAoZG91YmxlICosIGRlY2ltYWxfbW9kZSAqLCBkZWNp > bWFsX3JlY29yZCAqLA0KCQkJCWZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICop > ICA7DQpleHRlcm4gdm9pZCBleHRlbmRlZF90b19kZWNpbWFsICAoZXh0ZW5k > ZWQgKiwgZGVjaW1hbF9tb2RlICosDQoJCQkJZGVjaW1hbF9yZWNvcmQgKiwg > ZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKikgIDsNCmV4dGVybiB2b2lkIHF1 > YWRydXBsZV90b19kZWNpbWFsICAocXVhZHJ1cGxlICosIGRlY2ltYWxfbW9k > ZSAqLA0KCQkJCWRlY2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVs > ZF90eXBlICopICA7DQoNCmV4dGVybiB2b2lkIGRlY2ltYWxfdG9fc2luZ2xl > ICAoc2luZ2xlICosIGRlY2ltYWxfbW9kZSAqLCBkZWNpbWFsX3JlY29yZCAq > LA0KCQkJCWZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopICA7DQpleHRlcm4g > dm9pZCBkZWNpbWFsX3RvX2RvdWJsZSAgKGRvdWJsZSAqLCBkZWNpbWFsX21v > ZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwNCgkJCQlmcF9leGNlcHRpb25fZmll > bGRfdHlwZSAqKSAgOw0KZXh0ZXJuIHZvaWQgZGVjaW1hbF90b19leHRlbmRl > ZCAgKGV4dGVuZGVkICosIGRlY2ltYWxfbW9kZSAqLA0KCQkJCWRlY2ltYWxf > cmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopICA7DQpleHRl > cm4gdm9pZCBkZWNpbWFsX3RvX3F1YWRydXBsZSAgKHF1YWRydXBsZSAqLCBk > ZWNpbWFsX21vZGUgKiwNCgkJCQlkZWNpbWFsX3JlY29yZCAqLCBmcF9leGNl > cHRpb25fZmllbGRfdHlwZSAqKSAgOw0KDQpleHRlcm4gdm9pZCBzdHJpbmdf > dG9fZGVjaW1hbCAgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29y > ZCAqLA0KCQkJCWVudW0gZGVjaW1hbF9zdHJpbmdfZm9ybSAqLCBjaGFyICoq > KSAgOw0KZXh0ZXJuIHZvaWQgZnVuY190b19kZWNpbWFsICAoY2hhciAqKiwg > aW50LCBpbnQsIGRlY2ltYWxfcmVjb3JkICosDQoJCQkJZW51bSBkZWNpbWFs > X3N0cmluZ19mb3JtICosIGNoYXIgKiosDQoJCQkJaW50ICgqKSh2b2lkKSwg > aW50ICosIGludCAoKikoaW50KSkgIDsNCmV4dGVybiB2b2lkIGZpbGVfdG9f > ZGVjaW1hbCAgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29yZCAq > LA0KCQkJCWVudW0gZGVjaW1hbF9zdHJpbmdfZm9ybSAqLCBjaGFyICoqLA0K > CQkJCUZJTEUgKiwgaW50ICopICA7DQoNCmV4dGVybiBjaGFyICpzZWNvbnZl > cnQgIChzaW5nbGUgKiwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKikgIDsN > CmV4dGVybiBjaGFyICpzZmNvbnZlcnQgIChzaW5nbGUgKiwgaW50LCBpbnQg > KiwgaW50ICosIGNoYXIgKikgIDsNCmV4dGVybiBjaGFyICpzZ2NvbnZlcnQg > IChzaW5nbGUgKiwgaW50LCBpbnQsIGNoYXIgKikgIDsNCmV4dGVybiBjaGFy > ICplY29udmVydCAgKGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIg > KikgIDsNCmV4dGVybiBjaGFyICpmY29udmVydCAgKGRvdWJsZSwgaW50LCBp > bnQgKiwgaW50ICosIGNoYXIgKikgIDsNCmV4dGVybiBjaGFyICpnY29udmVy > dCAgKGRvdWJsZSwgaW50LCBpbnQsIGNoYXIgKikgIDsNCmV4dGVybiBjaGFy > ICpxZWNvbnZlcnQgIChxdWFkcnVwbGUgKiwgaW50LCBpbnQgKiwgaW50ICos > IGNoYXIgKikgIDsNCmV4dGVybiBjaGFyICpxZmNvbnZlcnQgIChxdWFkcnVw > bGUgKiwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKikgIDsNCmV4dGVybiBj > aGFyICpxZ2NvbnZlcnQgIChxdWFkcnVwbGUgKiwgaW50LCBpbnQsIGNoYXIg > KikgIDsNCg0KZXh0ZXJuIGNoYXIgKmVjdnQgIChkb3VibGUsIGludCwgaW50 > ICosIGludCAqKSAgOw0KZXh0ZXJuIGNoYXIgKmZjdnQgIChkb3VibGUsIGlu > dCwgaW50ICosIGludCAqKSAgOw0KZXh0ZXJuIGNoYXIgKmdjdnQgIChkb3Vi > bGUsIGludCwgY2hhciAqKSAgOw0KDQogDQoNCg0KDQpleHRlcm4gZG91Ymxl > IGF0b2YgIChjb25zdCBjaGFyICopICA7DQpleHRlcm4gZG91YmxlIHN0cnRv > ZCAgKGNvbnN0IGNoYXIgKiwgY2hhciAqKikgIDsNCg0KDQp9DQoNCg0KDQoj > IDIzMCAiL2hvbWUvcm9vbTEva3Jpb2wvbG9jYWwvbGliL2djYy1saWIvc3Bh > cmMtc3VuLXNvbGFyaXMyLjUuMS9lZ2NzLTIuOTAuMTIvaW5jbHVkZS9tYXRo > LmgiIDIgMyA0DQoNCg0KDQoNCg0KfQ0KDQoNCg0KIyA3ICIvaG9tZS9yb29t > MS9rcmlvbC9sb2NhbC9pbmNsdWRlL2crKy9jbWF0aCIgMiAzDQoNCg0KDQoj > cHJhZ21hIGludGVyZmFjZSAiY21hdGgiDQoNCg0KZXh0ZXJuICJDKysiIHsN > CiMgMzggIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2luY2x1ZGUvZysrL2Nt > YXRoIiAzDQoNCg0KaW5saW5lIGZsb2F0ICBhYnMgKGZsb2F0ICB4KSB7IHJl > dHVybiBmYWJzICh4KTsgfQ0KDQppbmxpbmUgZG91YmxlIGFicyAoZG91Ymxl > IHgpIHsgcmV0dXJuIGZhYnMgKHgpOyB9DQoNCg0KIyA3MSAiL2hvbWUvcm9v > bTEva3Jpb2wvbG9jYWwvaW5jbHVkZS9nKysvY21hdGgiIDMNCg0KaW5saW5l > IGxvbmcgZG91YmxlIGFicyAobG9uZyBkb3VibGUgeCkgeyByZXR1cm4gZmFi > cyAoeCk7IH0NCg0KfSAgDQoNCg0KIyAxMjQgIi9ob21lL3Jvb20xL2tyaW9s > L3dvcmsvUHJvamVjdC9pbmNsdWRlL1ZlY3RvcjNELkgiIDIgMw0KDQoNCiAg > ICANCiAgICANCiAgICANCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGlu > ZQ0KVFZlY3RvcjNEPG51bVQ+OjpUVmVjdG9yM0QoIHZvaWQgKSB7DQp9DQoN > CnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUNClRWZWN0b3IzRDxudW1U > Pjo6VFZlY3RvcjNEKCBudW1UIGRUICk6DQogIGRYXyhkVCksIGRZXyhkVCks > IGRaXyhkVCkgew0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5l > DQpUVmVjdG9yM0Q8bnVtVD46OlRWZWN0b3IzRCggbnVtVCBkWCwgbnVtVCBk > WSwgbnVtVCBkWiApOg0KICBkWF8oZFgpLCBkWV8oZFkpLCBkWl8oZFopIHsN > Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZQ0KVFZlY3RvcjNE > PG51bVQ+OjpUVmVjdG9yM0QoIGNvbnN0IG51bVQqIHBkWCApOg0KICBkWF8o > IHBkWFswXSApLCBkWV8oIHBkWFsxXSApLCBkWl8oIHBkWFsyXSApIHsNCn0N > Cg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZQ0KVFZlY3RvcjNEPG51 > bVQ+OjpUVmVjdG9yM0QoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgcmhzICk6 > DQogIGRYXyggcmhzLmRYXyApLA0KICBkWV8oIHJocy5kWV8gKSwNCiAgZFpf > KCByaHMuZFpfICkgew0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5s > aW5lDQpUVmVjdG9yM0Q8bnVtVD46On5UVmVjdG9yM0QoKSB7DQp9DQoNCiAg > ICANCiAgICANCiAgICANCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGlu > ZSBudW1UJg0KVFZlY3RvcjNEPG51bVQ+OjpvcGVyYXRvcltdKCBpbnQgaUlk > eCApIHsNCiAgcmV0dXJuICggKiggKCZkWF8pICsgaUlkeCApICk7ICAgDQp9 > DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51 > bVQ+Jg0KVFZlY3RvcjNEPG51bVQ+OjpvcGVyYXRvciA9ICggY29uc3QgVFZl > Y3RvcjNEPG51bVQ+JiB0aGVWZWN0b3IgKSB7DQogIA0KICBkWF8gPSB0aGVW > ZWN0b3IuZFhfOw0KICBkWV8gPSB0aGVWZWN0b3IuZFlfOw0KICBkWl8gPSB0 > aGVWZWN0b3IuZFpfOw0KICANCiAgcmV0dXJuICgqdGhpcyk7DQp9DQoNCnRl > bXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+Jg0K > VFZlY3RvcjNEPG51bVQ+OjpvcGVyYXRvciA9ICggbnVtVCBkVCApIHsNCiAg > DQogIGRYXyA9IGRUOw0KICBkWV8gPSBkVDsNCiAgZFpfID0gZFQ7DQogIA0K > ICByZXR1cm4gKCp0aGlzKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+ > IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4NClRWZWN0b3IzRDxudW1UPjo6b3Bl > cmF0b3IgLSAoIHZvaWQgKSB7DQogIHJldHVybiBUVmVjdG9yM0Q8bnVtVD4o > IC1kWF8sIC1kWV8sIC1kWl8gKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51 > bVQ+IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4mDQpUVmVjdG9yM0Q8bnVtVD46 > Om9wZXJhdG9yICs9ICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiByaHMgKSB7 > DQogIA0KICBkWF8gKz0gcmhzLmRYXzsNCiAgZFlfICs9IHJocy5kWV87DQog > IGRaXyArPSByaHMuZFpfOw0KICANCiAgcmV0dXJuICgqdGhpcyk7DQp9DQoN > CnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+ > Jg0KVFZlY3RvcjNEPG51bVQ+OjpvcGVyYXRvciArPSAoIG51bVQgZFQgKSB7 > DQogIA0KICBkWF8gKz0gZFQ7DQogIGRZXyArPSBkVDsNCiAgZFpfICs9IGRU > Ow0KICANCiAgcmV0dXJuICgqdGhpcyk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz > cyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+Jg0KVFZlY3RvcjNEPG51 > bVQ+OjpvcGVyYXRvciAtPSAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgcmhz > ICkgew0KICANCiAgZFhfIC09IHJocy5kWF87DQogIGRZXyAtPSByaHMuZFlf > Ow0KICBkWl8gLT0gcmhzLmRaXzsNCiAgDQogIHJldHVybiAoKnRoaXMpOw0K > fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIFRWZWN0b3IzRDxu > dW1UPiYNClRWZWN0b3IzRDxudW1UPjo6b3BlcmF0b3IgLT0gKCBudW1UIGRU > ICkgew0KICANCiAgZFhfIC09IGRUOw0KICBkWV8gLT0gZFQ7DQogIGRaXyAt > PSBkVDsNCiAgDQogIHJldHVybiAoKnRoaXMpOw0KfQ0KDQp0ZW1wbGF0ZSA8 > Y2xhc3MgbnVtVD4gaW5saW5lIFRWZWN0b3IzRDxudW1UPiYNClRWZWN0b3Iz > RDxudW1UPjo6b3BlcmF0b3IgKj0gKCBudW1UIGRUICkgew0KICANCiAgZFhf > ICo9IGRUOw0KICBkWV8gKj0gZFQ7DQogIGRaXyAqPSBkVDsNCiAgDQogIHJl > dHVybiAoKnRoaXMpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5s > aW5lIFRWZWN0b3IzRDxudW1UPiYNClRWZWN0b3IzRDxudW1UPjo6b3BlcmF0 > b3IgLz0gKCBudW1UIGRUICkgew0KICBkWF8gLz0gZFQ7DQogIGRZXyAvPSBk > VDsNCiAgZFpfIC89IGRUOw0KICByZXR1cm4gKCp0aGlzKTsNCn0NCg0KdGVt > cGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSB2b2lkDQpUVmVjdG9yM0Q8bnVt > VD46Om5vcm1hbGl6ZSggdm9pZCApIHsNCiAgbnVtVCBkTiAgPSA6OnNxcnQo > IGRYXypkWF8gKyBkWV8qZFlfICsgZFpfKmRaXyApOw0KICBkWF8gICAgIC89 > IGROOw0KICBkWV8gICAgIC89IGROOw0KICBkWl8gICAgIC89IGROOw0KfQ0K > DQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIHZvaWQNClRWZWN0b3Iz > RDxudW1UPjo6c2V0WCggbnVtVCBkWCApIHsNCiAgZFhfID0gZFg7DQp9DQoN > CnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgdm9pZA0KVFZlY3RvcjNE > PG51bVQ+OjpzZXRZKCBudW1UIGRZICkgew0KICBkWV8gPSBkWTsNCn0NCg0K > dGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSB2b2lkDQpUVmVjdG9yM0Q8 > bnVtVD46OnNldFooIG51bVQgZFogKSB7DQogIGRaXyA9IGRaOw0KfQ0KDQog > ICAgDQogICAgDQogICAgDQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxp > bmUgbnVtVA0KVFZlY3RvcjNEPG51bVQ+OjpvcGVyYXRvcltdKCBpbnQgaUlk > eCApIGNvbnN0IHsNCiAgcmV0dXJuICggKiggJihkWF8pICsgaUlkeCApICk7 > ICAgDQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgbnVtVA0K > VFZlY3RvcjNEPG51bVQ+OjpkWCggdm9pZCApIGNvbnN0IHsNCiAgcmV0dXJu > IGRYXzsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSBudW1U > DQpUVmVjdG9yM0Q8bnVtVD46OmRZKCB2b2lkICkgY29uc3Qgew0KICByZXR1 > cm4gZFlfOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIG51 > bVQNClRWZWN0b3IzRDxudW1UPjo6ZFooIHZvaWQgKSBjb25zdCB7DQogIHJl > dHVybiBkWl87DQp9DQoNCiAgICANCiAgICANCiAgICANCg0KdGVtcGxhdGUg > PGNsYXNzIG51bVQ+IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4NCm9wZXJhdG9y > ICsgKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIGxocywgY29uc3QgVFZlY3Rv > cjNEPG51bVQ+JiByaHMgKSB7DQogIHJldHVybiBUVmVjdG9yM0Q8bnVtVD4o > IGxocy5kWF8gKyByaHMuZFhfLA0KICAgICAgICAgICAgICAgICAgICAgICAg > ICBsaHMuZFlfICsgcmhzLmRZXywNCiAgICAgICAgICAgICAgICAgICAgICAg > ICAgbGhzLmRaXyArIHJocy5kWl8gKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz > IG51bVQ+IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4gDQpvcGVyYXRvciArICgg > Y29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIG51bVQgZFggKSB7DQogIHJl > dHVybiBUVmVjdG9yM0Q8bnVtVD4oIGxocy5kWF8gKyBkWCwNCiAgICAgICAg > ICAgICAgICAgICAgICAgICAgbGhzLmRZXyArIGRYLA0KICAgICAgICAgICAg > ICAgICAgICAgICAgICBsaHMuZFpfICsgZFggKTsNCn0NCg0KdGVtcGxhdGUg > PGNsYXNzIG51bVQ+IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4gDQpvcGVyYXRv > ciArICggbnVtVCBkWCwgY29uc3QgVFZlY3RvcjNEPG51bVQ+JiByaHMgKSB7 > DQogIHJldHVybiBUVmVjdG9yM0Q8bnVtVD4oIHJocy5kWF8gKyBkWCwNCiAg > ICAgICAgICAgICAgICAgICAgICAgICAgcmhzLmRZXyArIGRYLA0KICAgICAg > ICAgICAgICAgICAgICAgICAgICByaHMuZFpfICsgZFggKTsNCn0NCg0KdGVt > cGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSBUVmVjdG9yM0Q8bnVtVD4gDQpv > cGVyYXRvciAtICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIGNvbnN0 > IFRWZWN0b3IzRDxudW1UPiYgcmhzICkgew0KICByZXR1cm4gVFZlY3RvcjNE > PG51bVQ+KCBsaHMuZFhfIC0gcmhzLmRYXywNCiAgICAgICAgICAgICAgICAg > ICAgICAgICAgbGhzLmRZXyAtIHJocy5kWV8sDQogICAgICAgICAgICAgICAg > ICAgICAgICAgIGxocy5kWl8gLSByaHMuZFpfICk7DQp9DQoNCnRlbXBsYXRl > IDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+IA0Kb3BlcmF0 > b3IgLSAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgbGhzLCBudW1UIGRYICkg > ew0KICByZXR1cm4gVFZlY3RvcjNEPG51bVQ+KCBsaHMuZFhfIC0gZFgsDQog > ICAgICAgICAgICAgICAgICAgICAgICAgIGxocy5kWV8gLSBkWCwNCiAgICAg > ICAgICAgICAgICAgICAgICAgICAgbGhzLmRaXyAtIGRYICk7DQp9DQoNCnRl > bXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+IA0K > b3BlcmF0b3IgLSAoIG51bVQgZFgsIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYg > cmhzICkgew0KICByZXR1cm4gVFZlY3RvcjNEPG51bVQ+KCAtcmhzLmRYXyAr > IGRYLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAtcmhzLmRZXyArIGRY > LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAtcmhzLmRaXyArIGRYICk7 > DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNE > PG51bVQ+IA0Kb3BlcmF0b3IgKiAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYg > bGhzICwgbnVtVCBkWCApIHsNCiAgcmV0dXJuIFRWZWN0b3IzRDxudW1UPigg > bGhzLmRYXyAqIGRYLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsaHMu > ZFlfICogZFgsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxocy5kWl8g > KiBkWCApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIFRW > ZWN0b3IzRDxudW1UPiANCm9wZXJhdG9yICogKCBudW1UIGRYLCBjb25zdCBU > VmVjdG9yM0Q8bnVtVD4mIHJocyApIHsNCiAgcmV0dXJuIFRWZWN0b3IzRDxu > dW1UPiggcmhzLmRYXyAqIGRYLA0KICAgICAgICAgICAgICAgICAgICAgICAg > ICByaHMuZFlfICogZFgsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHJo > cy5kWl8gKiBkWCApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5s > aW5lIG51bVQNCm9wZXJhdG9yICogKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4m > IGxocywgY29uc3QgVFZlY3RvcjNEPG51bVQ+JiByaHMgKSB7ICAgDQogIHJl > dHVybiAoIGxocy5kWF8gKiByaHMuZFhfICsgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICANCiAgICAgICAgICAgbGhzLmRZXyAqIHJocy5kWV8gKw0K > ICAgICAgICAgICBsaHMuZFpfICogcmhzLmRaXyAgICk7DQp9DQoNCnRlbXBs > YXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+IA0Kb3Bl > cmF0b3IgLyAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgbGhzLCBudW1UIGRY > ICkgew0KICByZXR1cm4gVFZlY3RvcjNEPG51bVQ+KCBsaHMuZFhfIC8gZFgs > DQogICAgICAgICAgICAgICAgICAgICAgICAgIGxocy5kWV8gLyBkWCwNCiAg > ICAgICAgICAgICAgICAgICAgICAgICAgbGhzLmRaXyAvIGRYICk7DQp9DQoN > CnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgVFZlY3RvcjNEPG51bVQ+ > DQpvcGVyYXRvciBeICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIGNv > bnN0IFRWZWN0b3IzRDxudW1UPiYgcmhzICkgeyAgDQogIHJldHVybiBUVmVj > dG9yM0Q8bnVtVD4oIGxocy5kWV8gKiByaHMuZFpfIC0gbGhzLmRaXyAqIHJo > cy5kWV8sDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxocy5kWl8gKiBy > aHMuZFhfIC0gbGhzLmRYXyAqIHJocy5kWl8sDQogICAgICAgICAgICAgICAg > ICAgICAgICAgIGxocy5kWF8gKiByaHMuZFlfIC0gbGhzLmRZXyAqIHJocy5k > WF8gICk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgYm9v > bF90IA0Kb3BlcmF0b3IgIT0gKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIGxl > ZnQsDQogICAgICAgICAgICAgIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgcmln > aHQgKSB7DQogIHJldHVybiAoIChsZWZ0LmRYXyAhPSByaWdodC5kWF8pIHx8 > DQogICAgICAgICAgIChsZWZ0LmRZXyAhPSByaWdodC5kWV8pIHx8DQogICAg > ICAgICAgIChsZWZ0LmRaXyAhPSByaWdodC5kWl8pICAgICk7DQp9DQoNCnRl > bXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgYm9vbF90DQpvcGVyYXRvciAh > PSAoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYgbGhzLCBudW1UIHJocyApIHsN > CiAgcmV0dXJuICggKCBsaHMuZFhfICE9IHJocyApIHx8DQogICAgICAgICAg > ICggbGhzLmRZXyAhPSByaHMgKSB8fA0KICAgICAgICAgICAoIGxocy5kWl8g > IT0gcmhzICkgICAgKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlu > bGluZSBib29sX3QNCm9wZXJhdG9yICE9ICggbnVtVCBsaHMsIGNvbnN0IFRW > ZWN0b3IzRDxudW1UPiYgcmhzICkgew0KICByZXR1cm4gKCAoIGxocyAhPSBy > aHMuZFhfICkgfHwNCiAgICAgICAgICAgKCBsaHMgIT0gcmhzLmRZXyApIHx8 > DQogICAgICAgICAgICggbGhzICE9IHJocy5kWl8gKSAgICApOw0KfQ0KDQp0 > ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIGJvb2xfdCANCm9wZXJhdG9y > ID09ICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIGNvbnN0IFRWZWN0 > b3IzRDxudW1UPiYgcmhzICkgew0KICByZXR1cm4gKCAobGhzLmRYXyA9PSBy > aHMuZFhfKSAmJg0KICAgICAgICAgICAobGhzLmRZXyA9PSByaHMuZFlfKSAm > Jg0KICAgICAgICAgICAobGhzLmRaXyA9PSByaHMuZFpfKSAgICApOw0KfQ0K > DQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIGJvb2xfdCANCm9wZXJh > dG9yID09ICggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMsIG51bVQgZFgg > KSB7DQogIHJldHVybiAoIChsaHMuZFhfID09IGRYKSAmJg0KICAgICAgICAg > ICAobGhzLmRZXyA9PSBkWCkgJiYNCiAgICAgICAgICAgKGxocy5kWl8gPT0g > ZFgpICAgICk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUg > Ym9vbF90IA0Kb3BlcmF0b3IgPT0gKCBudW1UIGRYLCBjb25zdCBUVmVjdG9y > M0Q8bnVtVD4mIHJocyApIHsNCiAgcmV0dXJuICggKHJocy5kWF8gPT0gZFgp > ICYmDQogICAgICAgICAgIChyaHMuZFlfID09IGRYKSAmJg0KICAgICAgICAg > ICAocmhzLmRaXyA9PSBkWCkgICAgKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz > IG51bVQ+IGlubGluZSBudW1UDQphYnMoIGNvbnN0IFRWZWN0b3IzRDxudW1U > PiYgbGhzICkgew0KICByZXR1cm4gOjpzcXJ0KCBsaHMuZFhfKmxocy5kWF8g > KyBsaHMuZFlfKmxocy5kWV8gKyBsaHMuZFpfKmxocy5kWl8gKTsNCn0NCg0K > dGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSBudW1UDQpub3JtKCBjb25z > dCBUVmVjdG9yM0Q8bnVtVD4mIGxocyApIHsNCiAgcmV0dXJuICggbGhzLmRY > XypsaHMuZFhfICsgbGhzLmRZXypsaHMuZFlfICsgbGhzLmRaXypsaHMuZFpf > ICk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgbnVtVA0K > YWJzX3RyYW5zKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIGxocyApIHsNCiAg > cmV0dXJuIDo6c3FydCggbGhzLmRYXypsaHMuZFhfICsgbGhzLmRZXypsaHMu > ZFlfICk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBudW1UPiBpbmxpbmUgbnVt > VA0Kbm9ybV90cmFucyggY29uc3QgVFZlY3RvcjNEPG51bVQ+JiBsaHMgKSB7 > DQogIHJldHVybiAoIGxocy5kWF8qbGhzLmRYXyArIGxocy5kWV8qbGhzLmRZ > XyApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgbnVtVD4gaW5saW5lIG51bVQN > CmFuZ2xlKCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIGxocywgY29uc3QgVFZl > Y3RvcjNEPG51bVQ+JiByaHMgKSB7DQogIHJldHVybiAoIDo6YWNvcyggKCBs > aHMgKiByaHMgKSAvIDo6c3FydCggbm9ybSggbGhzICkgKiBub3JtKCByaHMg > KSApICkgKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIG51bVQ+IGlubGluZSBU > VmVjdG9yM0Q8bnVtVD4NCnVuaXQoIGNvbnN0IFRWZWN0b3IzRDxudW1UPiYg > bGhzICkgew0KICBudW1UIGROb3JtID0gOjpzcXJ0KCBsaHMuZFhfKmxocy5k > WF8gKyBsaHMuZFlfKmxocy5kWV8gKyBsaHMuZFpfKmxocy5kWl8gKTsNCiAg > cmV0dXJuIFRWZWN0b3IzRDxudW1UPiggbGhzLmRYXyAvIGROb3JtLA0KICAg > ICAgICAgICAgICAgICAgICAgICAgICBsaHMuZFlfIC8gZE5vcm0sDQogICAg > ICAgICAgICAgICAgICAgICAgICAgIGxocy5kWl8gLyBkTm9ybSApOw0KfQ0K > DQoNCiMgMSAiL2hvbWUvcm9vbTEva3Jpb2wvd29yay9Qcm9qZWN0L2luY2x1 > ZGUvVmVjdG9yM0QuaUMiIDEgMw0KIA0KDQoNCg0KICAgIA0KICAgIA0KICAg > IA0KDQoNCiMgMSAiL2hvbWUvcm9vbTEva3Jpb2wvd29yay9Qcm9qZWN0L2lu > Y2x1ZGUvZm9ybWF0LkgiIDEgMw0KIA0KDQoNCg0KDQoNCiMgMSAiL2hvbWUv > cm9vbTEva3Jpb2wvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy > aXMyLjUuMS9lZ2NzLTIuOTAuMTIvaW5jbHVkZS92YWx1ZXMuaCIgMSAzIDQN > CiANCiANCg0KIA0KIA0KIA0KDQoNCg0KDQojcHJhZ21hIGlkZW50CSJAKCMp > dmFsdWVzLmgJMS4xMwk5NC8wNy8yOSBTTUkiCQ0KDQoNCmV4dGVybiAiQyIg > ew0KDQoNCiANCg0KDQoNCg0KIA0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoN > Cg0KDQoNCg0KDQoNCg0KIA0KDQoNCg0KDQogDQoNCg0KDQoNCg0KDQoNCg0K > DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiANCg0K > DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN > Cg0KIyAxMjQgIi9ob21lL3Jvb20xL2tyaW9sL2xvY2FsL2xpYi9nY2MtbGli > L3NwYXJjLXN1bi1zb2xhcmlzMi41LjEvZWdjcy0yLjkwLjEyL2luY2x1ZGUv > dmFsdWVzLmgiIDMgNA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K > DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCn0NCg0KDQoNCiMg > NyAiL2hvbWUvcm9vbTEva3Jpb2wvd29yay9Qcm9qZWN0L2luY2x1ZGUvZm9y > bWF0LkgiIDIgMw0KDQoNCg0KDQoNCg0KY2xhc3MgZm9ybWF0IHsNCiAgICAN > CiAgcHVibGljOg0KICAgIA0KICAgIGVudW0gew0KICAgICAgICAgICAgZGVm > ZmxhZ3MgPWlvczo6c2tpcHdzIHwNCiAgICAgICAgICAgICAgICAgICAgICBp > b3M6OnJpZ2h0IHwNCiAgICAgICAgICAgICAgICAgICAgICBpb3M6OmRlYyB8 > DQogICAgICAgICAgICAgICAgICAgICAgaW9zOjpzaG93cG9pbnQgfA0KICAg > ICAgICAgICAgICAgICAgICAgIGlvczo6Zml4ZWQsDQogICAgICAgICAgICBk > ZWZwcmVjICA9NCwNCiAgICAgICAgICAgIGRlZndpZHRoID0wLA0KICAgICAg > ICAgICAgZGVmZmlsbCAgPScgJw0KICAgIH07DQoNCiAgICAgICAgDQogICAg > ICAgIA0KICAgICAgICANCg0KICAgIGZvcm1hdCggaW9zJiBpICk7DQogIA0K > ICAgIGZvcm1hdCggbG9uZ190IGwsIGludF90IHcsIGludF90IHAsIGNoYXJf > dCBmICk7DQogIA0KICAgIGZvcm1hdCggbG9uZ190IGwsIGNoYXJfdCBmICk7 > DQogIA0KICAgIGZvcm1hdCggbG9uZ190IGwgKTsNCiAgDQogICAgZm9ybWF0 > KCBpbnRfdCB3LCBpbnRfdCBwLCBjaGFyX3QgZiApOw0KDQogICAgZm9ybWF0 > KCBsb25nX3QgbCwgaW50X3QgdywgaW50X3QgcCApOw0KICAgIA0KICAgIGZv > cm1hdCggY2hhcl90IGwsIGludF90IHcsIGludF90IHAgKTsNCiAgDQogICAg > Zm9ybWF0KCBpbnRfdCB3LCBpbnRfdCBwICk7DQogIA0KICAgIGZvcm1hdCgg > Y2hhcl90IGYgKTsNCg0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0K > ICANCiAgICB2b2lkIHNldCggaW9zJiBmICkgY29uc3Q7DQoNCiAgcHJpdmF0 > ZToNCiAgICANCiAgICBlbnVtIHsgeGZpID0gMSwgeHdkID0gMiwgeHByID0g > NCwgeGZsID0gOCwgeGFsID0gMTUgfTsNCiAgICANCiAgICBsb25nX3QgZmxh > Z3M7DQogICAgaW50X3QgIHdpZHRoOw0KICAgIGludF90ICBwcmVjaXNpb247 > DQogICAgY2hhcl90IGZpbGw7DQogICAgY2hhcl90IHh4eDsNCn07DQoNCiAN > CiANCiANCg0KICAgIA0KICAgIA0KICAgIA0KDQppbmxpbmUNCmZvcm1hdDo6 > Zm9ybWF0KCBpb3MmIGkgKToNCiAgZmxhZ3MoICAgICBpLmZsYWdzKCkgKSwN > CiAgd2lkdGgoICAgICBpLndpZHRoKCkgKSwNCiAgcHJlY2lzaW9uKCBpLnBy > ZWNpc2lvbigpICksDQogIGZpbGwoICAgICAgaS5maWxsKCkgKSwNCiAgeHh4 > KCB4YWwgKSAgICAgICAgICAgeyAgDQp9DQoNCmlubGluZQ0KZm9ybWF0Ojpm > b3JtYXQoIGxvbmdfdCBsLCBpbnRfdCB3LCBpbnRfdCBwLCBjaGFyX3QgZiAp > Og0KICBmbGFncyggbCApLA0KICB3aWR0aCggdyApLA0KICBwcmVjaXNpb24o > IHAgKSwNCiAgZmlsbCggZiApLA0KICB4eHgoIHhhbCApIHsNCn0NCiAgDQpp > bmxpbmUNCmZvcm1hdDo6Zm9ybWF0KCBsb25nX3QgbCwgY2hhcl90IGYgKToN > CiAgZmxhZ3MoIGwgKSwNCiAgd2lkdGgoIGRlZndpZHRoICksDQogIHByZWNp > c2lvbiggZGVmcHJlYyApLA0KICBmaWxsKCBmICksDQogIHh4eCggeGZsIHwg > eGZpICkgew0KfQ0KDQppbmxpbmUNCmZvcm1hdDo6Zm9ybWF0KCBsb25nX3Qg > bCApOg0KICBmbGFncyggbCApLA0KICB3aWR0aCggZGVmd2lkdGggKSwNCiAg > cHJlY2lzaW9uKCBkZWZwcmVjICksDQogIGZpbGwoIGRlZmZpbGwgKSwNCiAg > eHh4KCB4ZmwgKSB7DQp9DQogIA0KaW5saW5lDQpmb3JtYXQ6OmZvcm1hdCgg > aW50X3QgdywgaW50X3QgcCwgY2hhcl90IGYgKToNCiAgZmxhZ3MoIGRlZmZs > YWdzICksDQogIHdpZHRoKCB3ICksDQogIHByZWNpc2lvbiggcCApLA0KICBm > aWxsKCBmICksDQogIHh4eCggeGZpIHwgeHdkIHwgeHByICkgew0KfQ0KDQpp > bmxpbmUNCmZvcm1hdDo6Zm9ybWF0KCBsb25nX3QgbCwgaW50X3QgdywgaW50 > X3QgcCApOg0KICBmbGFncyggbCApLA0KICB3aWR0aCggdyApLA0KICBwcmVj > aXNpb24oIHAgKSwNCiAgZmlsbCggZGVmZmlsbCApLA0KICB4eHgoIHhmbCB8 > IHh3ZCB8IHhwciApIHsNCn0NCg0KaW5saW5lDQpmb3JtYXQ6OmZvcm1hdCgg > aW50X3QgdywgaW50X3QgcCApOg0KICBmbGFncyggZGVmZmxhZ3MgKSwNCiAg > d2lkdGgoIHcgKSwNCiAgcHJlY2lzaW9uKCBwICksDQogIGZpbGwoIGRlZmZp > bGwgKSwNCiAgeHh4KCB4d2QgfCB4cHIgKSB7DQp9DQogIA0KaW5saW5lDQpm > b3JtYXQ6OmZvcm1hdCggY2hhcl90IGYgKToNCiAgZmxhZ3MoIGRlZmZsYWdz > ICksDQogIHdpZHRoKCBkZWZ3aWR0aCApLA0KICBwcmVjaXNpb24oIGRlZnBy > ZWMgKSwNCiAgZmlsbCggZiApLA0KICB4eHgoIHhmaSApIHsNCn0NCg0KaW5s > aW5lIG9zdHJlYW0mDQpvcGVyYXRvcjw8KCBvc3RyZWFtJiBvcywgY29uc3Qg > Zm9ybWF0JiBmbXQgKSB7IA0KICBmbXQuc2V0KCBvcyApOyByZXR1cm4gb3M7 > DQp9DQoNCg0KIyAxMCAiL2hvbWUvcm9vbTEva3Jpb2wvd29yay9Qcm9qZWN0 > L2luY2x1ZGUvVmVjdG9yM0QuaUMiIDIgMw0KDQoNCg0KdGVtcGxhdGUgPGNs > YXNzIG51bVQ+IGlzdHJlYW0mDQpvcGVyYXRvciA+PiAoIGlzdHJlYW0mIGlz > LCBUVmVjdG9yM0Q8bnVtVD4mIHJocyApIHsNCiAgaXMgPj4gcmhzLmRYXyA+ > PiByaHMuZFlfID4+IHJocy5kWl87DQogIHJldHVybiBpczsNCn0NCg0KdGVt > cGxhdGUgPGNsYXNzIG51bVQ+IG9zdHJlYW0mDQpvcGVyYXRvciA8PCAoIG9z > dHJlYW0mIG9zLCBjb25zdCBUVmVjdG9yM0Q8bnVtVD4mIHJocyApIHsNCiAg > DQogIGNvbnN0IGNoYXIqIHNlcGFyYXRvciA9ICIgICI7DQogIA0KICBvcyA8 > PCBmb3JtYXQoICdFJywgMTgsIDEyICkgPDwgcmhzLmRYXyA8PCBzZXBhcmF0 > b3INCiAgICAgPDwgZm9ybWF0KCAnRScsIDE4LCAxMiApIDw8IHJocy5kWV8g > PDwgc2VwYXJhdG9yDQogICAgIDw8IGZvcm1hdCggJ0UnLCAxOCwgMTIgKSA8 > PCByaHMuZFpfIDsNCiAgDQogIHJldHVybiBvczsNCn0NCiMgNDU3ICIvaG9t > ZS9yb29tMS9rcmlvbC93b3JrL1Byb2plY3QvaW5jbHVkZS9WZWN0b3IzRC5I > IiAyIDMNCg0KDQoNCnR5cGVkZWYgVFZlY3RvcjNEPGRvdWJsZV90PiBUVmVj > dG9yM0RfdDsNCg0KDQojIDIgInRlc3QuQyIgMg0KDQoNCmludA0KbWFpbigg > dm9pZCApIHsNCiAgcmV0dXJuIDA7DQp9DQoNCnZvaWQNCnN1cGVyZHVtbXko > IHZvaWQgKSB7DQogIFRWZWN0b3IzRDxkb3VibGU+IGNjYzsNCiAgY2NjID0g > MS4wOw0KICBhYnMoY2NjKTsNCn0NCg== > ---559023410-1804928587-876430667=:6246-- > ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <orbu0tza3m.fsf@sunsite.dcc.unicamp.br>]
* Re: something wrong with template instantiation mechanics [not found] <orbu0tza3m.fsf@sunsite.dcc.unicamp.br> @ 1997-10-13 13:41 ` Oleg Krivosheev 0 siblings, 0 replies; 16+ messages in thread From: Oleg Krivosheev @ 1997-10-13 13:41 UTC (permalink / raw) To: Alexandre Oliva; +Cc: egcs, stl Hi, All i admit being wrong - looks like g++ works according to draft. There is another closely related problem: Tons of code in SGI STL use old style declaration. From iterator.h: template<....> class reverse_iterator { .... friend bool operator==(const self& x, const self& y); friend bool operator<(const self& x, const self& y); friend Distance operator-(const self& x, const self& y); friend self operator+(Distance n, const self& x); .... }; template <....> bool operator==( .... ) { } etc After fixing my stuff so g++ instantiates all what i asked for, i'm getting tons of uninstantiated op==, op!= etc for some iterators. thanks OK ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~1997-10-13 13:41 UTC | newest] Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <3439FE5B.53F1D3CC.cygnus.egcs@msu.ru> 1997-10-07 3:15 ` AIX & shared libstdc++ Jason Merrill 1997-10-07 3:48 ` Andrey Slepuhin 1997-10-09 9:26 ` Andrey Slepuhin 1997-10-09 15:14 ` Ian Lance Taylor 1997-10-13 5:05 ` Andrey Slepuhin 1997-10-09 16:31 ` something wrong with template instantiation mechanics Oleg Krivosheev 1997-10-10 8:51 ` Joe Buck 1997-10-10 8:51 ` Oleg Krivosheev 1997-10-10 8:51 ` Oleg Krivosheev [not found] ` <Pine.GSO.3.96.971009232426.6908A-100000.cygnus.egcs@drabble> 1997-10-10 11:44 ` Jason Merrill 1997-10-10 17:21 ` Oleg Krivosheev 1997-10-10 17:19 ` Jason Merrill 1997-10-10 11:46 ` Oleg Krivosheev 1997-10-10 20:46 ` Alexandre Oliva 1997-10-10 8:51 ` Joe Buck [not found] <orbu0tza3m.fsf@sunsite.dcc.unicamp.br> 1997-10-13 13:41 ` Oleg Krivosheev
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).