public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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
  1997-10-10  8:51         ` Oleg Krivosheev
  1997-10-10 11:46         ` Oleg Krivosheev
  1 sibling, 2 replies; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ messages in thread

* 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ messages in thread

* Re: AIX & shared libstdc++
  1997-10-07 23:14   ` Andrey Slepuhin
@ 1997-10-07 23:14     ` David Edelsohn
  0 siblings, 0 replies; 19+ messages in thread
From: David Edelsohn @ 1997-10-07 23:14 UTC (permalink / raw)
  To: pooh; +Cc: David Edelsohn, egcs

>>>>> Andrey Slepuhin writes:

Andrey> 1) I obtain many warnings about undefined symbols which are really class names
Andrey> themselves (for example, range_error), so I remove these symbols from export
Andrey> file.

	This may depend on the type of symbol.  I do not know how class
names appear as symbols and how this would appear in an exports list.  A
class name is not an actual method or member.

Andrey> 2) When linking programs with shared libstdc++, I obtain warnings about
Andrey> multiple defined symbols like __eh<something>. After removing these symbols
Andrey> all my test programs linked and worked fine.

	As mentioned in the README.RS6000 file, AIX 4.1 linker became much
more pedantic about warning of duplicate symbols.  These always have been
there and should not affect correctness of the resulting executable.

Andrey> 3) I am worried about shared libstdc++ size (2.3M instead of 3M static). This
Andrey> can be caused differences in library structure (for example a large number of
Andrey> separate modules in ar file), but I cannot check this.

	*Shrug*

David

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: AIX & shared libstdc++
  1997-10-07 11:41 ` David Edelsohn
@ 1997-10-07 23:14   ` Andrey Slepuhin
  1997-10-07 23:14     ` David Edelsohn
  0 siblings, 1 reply; 19+ messages in thread
From: Andrey Slepuhin @ 1997-10-07 23:14 UTC (permalink / raw)
  To: David Edelsohn; +Cc: egcs

David Edelsohn wrote:
>         I am somewhat surprised that -bexpall does not export all
> necessary symbols.  That is not the default because it can cause
> significant bloat and is not the way that XLC operates.  AIX linker
> performs garbage collection on symbols and removes any symbols which are
> not referenced or exported.  If -bexpall does not trivially work around
> the problem, one must use something like makeC++SharedLib.  Note: IBM's
> C++ compiler and G++ use different name mangling schemes, so assumptions
> about the internal structure of C++ symbols is incorrect.
Some times ago I experimented on building shared libs with GCC 2.7.2
and I had to hack makeC++SharedLib to do this. So, I was surprised that
I obtain export list without any problems. The only things I cannot
understand are the following:
1) I obtain many warnings about undefined symbols which are really class names
themselves (for example, range_error), so I remove these symbols from export
file.
2) When linking programs with shared libstdc++, I obtain warnings about
multiple defined symbols like __eh<something>. After removing these symbols
all my test programs linked and worked fine.
3) I am worried about shared libstdc++ size (2.3M instead of 3M static). This
can be caused differences in library structure (for example a large number of
separate modules in ar file), but I cannot check this.

> Andrey> PS: Passing option -unix to linker is incorrect on AIX, because AIX
> Andrey> linker
> Andrey> recognize it as option -u with a parameter "nix". As a result there
> Andrey> are
> Andrey> many linker warnings.
> 
>         Who is passing -unix option to linker?  That is not in the GCC
> specs.  Does libstdc++ assume that?

Yes. Jason Merrill said that this option is needed for gnu ld. Did you try
to build egcs configured with --with-gnu-ld option?

Andrey.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: AIX & shared libstdc++
  1997-10-07  2:18 AIX & shared libstdc++ Andrey Slepuhin
@ 1997-10-07 11:41 ` David Edelsohn
  1997-10-07 23:14   ` Andrey Slepuhin
  0 siblings, 1 reply; 19+ messages in thread
From: David Edelsohn @ 1997-10-07 11:41 UTC (permalink / raw)
  To: Andrey Slepuhin; +Cc: egcs

>>>>> Andrey Slepuhin writes:

Andrey> I tried to build egcs-970929 on AIX 4.2.1 configured with
Andrey> --enable-shared
Andrey> option. The resulting shared libstdc++ was only ~600K instead of ~3M
Andrey> static one.
Andrey> This is because AIX linker does not know what symbols must be exported.
Andrey> Passing option -bexpall to linker did not solve the problem, so I tried
Andrey> to build export file manually by hacking makeC++SharedLib script. After
Andrey> removing some symbols causing linker warnings from resulting export
Andrey> file,
Andrey> I obtain shared libstdc++ with size ~2.3M and I can successfully link my
Andrey> programs with this library.
Andrey> I'm not sure that all my operation were correct and I can't check if all
Andrey> necessary symbols are included into the export file. But it seems to me,
Andrey> that the only way to receive correct shared version of libstdc++ on AIX
Andrey> is to use explicit export file. Any help will be appreciated.

	I am somewhat surprised that -bexpall does not export all
necessary symbols.  That is not the default because it can cause
significant bloat and is not the way that XLC operates.  AIX linker
performs garbage collection on symbols and removes any symbols which are
not referenced or exported.  If -bexpall does not trivially work around
the problem, one must use something like makeC++SharedLib.  Note: IBM's
C++ compiler and G++ use different name mangling schemes, so assumptions
about the internal structure of C++ symbols is incorrect.

Andrey> PS: Passing option -unix to linker is incorrect on AIX, because AIX
Andrey> linker
Andrey> recognize it as option -u with a parameter "nix". As a result there
Andrey> are
Andrey> many linker warnings.

	Who is passing -unix option to linker?  That is not in the GCC
specs.  Does libstdc++ assume that?

David

^ permalink raw reply	[flat|nested] 19+ messages in thread

* AIX & shared libstdc++
@ 1997-10-07  2:18 Andrey Slepuhin
  1997-10-07 11:41 ` David Edelsohn
  0 siblings, 1 reply; 19+ messages in thread
From: Andrey Slepuhin @ 1997-10-07  2:18 UTC (permalink / raw)
  To: egcs

Hi,

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.
Passing option -bexpall to linker did not solve the problem, so I tried
to build export file manually by hacking makeC++SharedLib script. After
removing some symbols causing linker warnings from resulting export
file,
I obtain shared libstdc++ with size ~2.3M and I can successfully link my
programs with this library.
I'm not sure that all my operation were correct and I can't check if all
necessary symbols are included into the export file. But it seems to me,
that the only way to receive correct shared version of libstdc++ on AIX
is to use explicit export file. Any help will be appreciated.

Regards,

Andrey Slepuhin,
Moscow State University

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.

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~1997-10-13  5:05 UTC | newest]

Thread overview: 19+ 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       ` 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-07  2:18 AIX & shared libstdc++ Andrey Slepuhin
1997-10-07 11:41 ` David Edelsohn
1997-10-07 23:14   ` Andrey Slepuhin
1997-10-07 23:14     ` David Edelsohn

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).