From octave-maintainers-request at bevo dot che dot wisc dot edu Wed Jan 31 22:27:06 2001 Subject: Patch [Re: ISO C++ and Octave] From: Mumit Khan To: octave-maintainers at bevo dot che dot wisc dot edu Date: Wed, 31 Jan 2001 22:27:03 -0600 (CST) 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 at docserver dot cac dot washington dot edu for more info. --2006041544-959030623-981001623=:9500 Content-Type: TEXT/PLAIN; charset=US-ASCII Here's the set of changes to make octave-2.1.33 work with both the old and new GNU compilers -- using egcs-1.1.2 as the "old" and gcc-2.97 dev as the "new" one, on i686-pc-linux-gnu (RedHat 6.2 + all the updates). Octave built with egcs-1.1.2 shows no regressions. There are 15 failures with the development compiler, and I'm not surprised there aren't more. Listed at the end. Generated files -- configure and config.h.in -- not included. Also not included are the trivial changes to liboctave/*.{cc,h}, which JWE may have fixed already. Few changes worth mentioning: 1. Always compile with exceptions and rtti. RTTI is needed for the way we extract the file descriptor from a stream, and I didn't want to use the old code. Exceptions will be needed in all future versions of the runtime (in theory you shouldn't, but various bugs pop up when you try it, especially with the streams). 2. It's just too hard to maintain the explicit instantiations between releases. Once libstdc++-v3 stabilizes, it's doable, but I would not bother with it now. Only adds -fno-implicit templates for older compilers. FYI, gcc-2.95.2+ potentially produces leaner code on ELF and a few other systems if you let it instantiate the templates instead of doing it explicitly. Has a lot to do with just what needs to be instantiated in each template. 3. The file descriptor for a filebuf is kept in c_file_ptr_buf now, and portable between old and new library. Now that I've changed the order of the base classes to avoid having to add -Wno-reorder ... 4. I've been able to tweak things so that we don't need macros to distinguish old vs compliant library (CXX_ISO_COMPLIANT_LIBRARY), but a few places remain: c_file_ptr_buf implementation is notable in that respect. Also, I didn't feel like messing with chmod/umask etc to work the 0664 issue in the old library (oct-fstrm.cc). 5. The change: - octave_base_scalar (ST s) + octave_base_scalar (const ST& s) : octave_base_value (), scalar (s) { } ov-scalar-base.{h,cc} is to work around a ICE in gcc-2.97. Ah, the troubles with gcc and complex numbers. If it breaks on Linux, sure to break with a much louder bang on Alphas. 6. I may have confused ::real vs std::real in a few places. Worth a quick look. 7. I half-expected the math failures, but don't like the rest such as sscanf and fopen one. Will double check. exp(1+1i) fails for example. Haven't had a chance to look at the reason yet. Native configuration is i686-pc-linux-gnu === octave tests === Schedule of variations: unix FAIL: octave.test/arith/exp-2.m FAIL: octave.test/arith/sqrt-1.m FAIL: octave.test/arith/sqrt-2.m FAIL: octave.test/arith/abs-1.m FAIL: octave.test/arith/abs-2.m FAIL: octave.test/arith/arg-1.m FAIL: octave.test/arith/arg-2.m FAIL: octave.test/arith/cosh-1.m FAIL: octave.test/arith/tanh-1.m FAIL: octave.test/arith/sech-1.m FAIL: octave.test/arith/coth-1.m FAIL: octave.test/arith/acoth-1.m FAIL: octave.test/io/sscanf-1.m FAIL: octave.test/io/fopen-1.m FAIL: octave.test/string/hex2dec-1.m === octave Summary === # of expected passes 1237 # of unexpected failures 15 ../src/octave version 2.1.33 (i686-pc-linux-gnu) Oh, and just so you know -- gcc-2.97 is slow enough to make my 1 GHz Linux box feel like one of those old SPARC 2's. --2006041544-959030623-981001623=:9500 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="toplevel.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Toplevel patch VGhlIGFjbG9jYWwubTQsIHBhcnQgb2YgY29uZmlndXJlLmluIGFuZCBNYWtl Y29uZi5pbiBjaGFuZ2VzIG1heSBoYXZlDQphbHJlYWR5IGJlZW4gYXBwbGll ZC4NCg0KMjAwMS0wMS0zMSAgTXVtaXQgS2hhbiAgPGtoYW5AbmFub3RlY2gu d2lzYy5lZHU+DQoNCgkqIGFjbG9jYWwubTQgKE9DVEFWRV9DWFhfSVNPX0NP TVBMSUFOVF9MSUJSQVJZKTogTmV3IG1hY3JvLg0KCSogY29uZmlndXJlLmlu OiBVc2UuIA0KCShYVFJBX0NYWEZMQUdTKTogRG9uJ3QgYWRkIC1mbm8tcnR0 aSBhbmQgLWZuby1leGNlcHRpb25zLg0KCUNvbmRpdGlvbmFsaXplIC1mbm8t aW1wbGljaXQtdGVtcGxhdGVzLg0KCSogYWNjb25maWcuaC5pbiAoQ1hYX0lT T19DT01QTElBTlRfTElCUkFSWSk6IEFkZC4NCgkqIE1ha2Vjb25mLmluOiBT dHJpcCBkaXJlY3RvcnkgcG9ydGlvbiBmcm9tIHRhcmdldCB3aGVuIGJ1aWxk aW5nDQoJZGVwZW5kZW5jaWVzLg0KDQpJbmRleDogYWNsb2NhbC5tNA0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lcy9raGFuL3Ny Yy9tYXRoL0NWU1JPT1Qvb2N0YXZlLXRlc3QvYWNsb2NhbC5tNCx2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMS4xLjINCmRpZmYgLXUgLTMgLXAgLXIxLjEu MS4yIGFjbG9jYWwubTQNCi0tLSBhY2xvY2FsLm00CTIwMDEvMDEvMzAgMDQ6 NDE6NDEJMS4xLjEuMg0KKysrIGFjbG9jYWwubTQJMjAwMS8wMS8zMSAxNjo1 MzoxMA0KQEAgLTkzMSwzICs5MzEsNDAgQEAgRU9GDQogICAgIEFDX0RFRklO RShDWFhfUFJFUEVORFNfVU5ERVJTQ09SRSkNCiAgIGZpDQogXSkNCitkbmwN CitkbmwgU2VlIGlmIHRoZSBDKysgbGlicmFyeSBpcyBJU08gY29tcGxpYW50 Lg0KK2RubCBGSVhNRTogVGhpcyBpcyBvYnZpb3VzbHkgdmVyeSBzaW1wbGlz dGljLCBhbmQgdHJpdmlhbGx5IGZvb2xlZC4NCitkbmwNCitkbmwgT0NUQVZF X0NYWF9JU09fQ09NUExJQU5UX0xJQlJBUlkNCitBQ19ERUZVTihPQ1RBVkVf Q1hYX0lTT19DT01QTElBTlRfTElCUkFSWSwgWw0KKyAgQUNfUkVRVUlSRShb QUNfUFJPR19DWFhdKQ0KKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBDKysgbGli cmFyeSBpcyBJU08gY29tcGxpYW50XSkNCisgIEFDX0NBQ0hFX1ZBTChvY3Rh dmVfY3ZfY3h4X2lzb19jb21wbGlhbnRfbGlicmFyeSwgWw0KKyAgICBBQ19M QU5HX1NBVkUNCisgICAgQUNfTEFOR19DUExVU1BMVVMNCisgICAgcm0gLWYg Y29uZnRlc3QuaA0KKyAgICBmb3IgaW5jIGluIGFsZ29yaXRobSBiaXRzZXQg Y2Fzc2VydCBjY3R5cGUgY2Vycm5vIGNmbG9hdCBjaXNvNjQ2IFwNCisJY2xp bWl0cyBjbG9jYWxlIGNtYXRoIGNvbXBsZXggY3NldGptcCBjc2lnbmFsIGNz dGRhcmcgY3N0ZGRlZiBcDQorCWNzdGRpbyBjc3RkbGliIGNzdHJpbmcgY3Rp bWUgY3djaGFyIGN3Y3R5cGUgZGVxdWUgZXhjZXB0aW9uIFwNCisJZnN0cmVh bSBmdW5jdGlvbmFsIGlvbWFuaXAgaW9zIGlvc2Z3ZCBpb3N0cmVhbSBpc3Ry ZWFtIGl0ZXJhdG9yIFwNCisJbGltaXRzIGxpc3QgbG9jYWxlIG1hcCBtZW1v cnkgbmV3IG51bWVyaWMgb3N0cmVhbSBxdWV1ZSBzZXQgXA0KKwlzc3RyZWFt IHN0YWNrIHN0ZGV4Y2VwdCBzdHJlYW1idWYgc3RyaW5nIHN0cnN0cmVhbSB0 eXBlaW5mbyBcDQorCXV0aWxpdHkgdmFsYXJyYXkgdmVjdG9yOyBkbw0KKyAg ICAgIGVjaG8gIiNpbmNsdWRlIDwkaW5jPiIgPj4gY29uZnRlc3QuaA0KKyAg ICBkb25lDQorICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSAiY29uZnRlc3Qu aCJdLCBbDQorICAgICAgICBzdGQ6OmJpdHNldDw1MD4gZmxhZ3M7DQorICAg ICAgICBmbGFncy5zZXQoKTsNCisgICAgICAgIGludCBkaWdpdHMgPSBzdGQ6 Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHM7DQorICAg ICAgICBkaWdpdHMgPSAwOw0KKyAgICAgIF0sDQorICAgICAgb2N0YXZlX2N2 X2N4eF9pc29fY29tcGxpYW50X2xpYnJhcnk9eWVzLA0KKyAgICAgIG9jdGF2 ZV9jdl9jeHhfaXNvX2NvbXBsaWFudF9saWJyYXJ5PW5vDQorICAgICkNCisg ICAgQUNfTEFOR19SRVNUT1JFDQorICBdKQ0KKyAgQUNfTVNHX1JFU1VMVCgk b2N0YXZlX2N2X2N4eF9pc29fY29tcGxpYW50X2xpYnJhcnkpDQorICBpZiB0 ZXN0ICRvY3RhdmVfY3ZfY3h4X2lzb19jb21wbGlhbnRfbGlicmFyeSA9IHll czsgdGhlbg0KKyAgICBBQ19ERUZJTkUoQ1hYX0lTT19DT01QTElBTlRfTElC UkFSWSkNCisgIGZpDQorXSkNCkluZGV4OiBjb25maWd1cmUuaW4NCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZXMva2hhbi9zcmMv bWF0aC9DVlNST09UL29jdGF2ZS10ZXN0L2NvbmZpZ3VyZS5pbix2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMS4xLjINCmRpZmYgLXUgLTMgLXAgLXIxLjEu MS4yIGNvbmZpZ3VyZS5pbg0KLS0tIGNvbmZpZ3VyZS5pbgkyMDAxLzAxLzMw IDA0OjQxOjQxCTEuMS4xLjINCisrKyBjb25maWd1cmUuaW4JMjAwMS8wMi8w MSAwMzoyNTowOQ0KQEAgLTE4NCwxMiArMTg0LDIxIEBAIEFDX1BST0dfQ1hY Q1BQDQogZ3h4X3ZlcnNpb249YCRDWFggLXYgMj4mMSB8IGdyZXAgIl4uKmcu LiB2ZXJzaW9uIiB8IFwNCiAgIHNlZCAtZSAncy9eLipnLi4gdmVyc2lvbiAq Ly8nIC1lICdzL2N5Z251cy0vLycgLWUgJ3MvZWdjcy0vLydgDQogDQorY3h4 X2F1dG9faW5zdGFudGlhdGVfdGVtcGxhdGVzPW5vDQogY2FzZSAiJGd4eF92 ZXJzaW9uIiBpbg0KIGNoYW5nZXF1b3RlKCwpZG5sDQogICAxLiogfCAyLlsw MTIzNDU2XS4qIHwgMi43LlswMV0qKQ0KIGNoYW5nZXF1b3RlKFssXSlkbmwN CiAgICAgQUNfTVNHX0VSUk9SKFtnKysgdmVyc2lvbiAkZ3h4X3ZlcnNpb24g d2lsbCBub3Qgd29yayB0byBjb21waWxlIE9jdGF2ZV0pDQogICA7Ow0KK2No YW5nZXF1b3RlKCwpZG5sDQorICAyLjgqIHwgMi45WzEtNl0qKQ0KK2NoYW5n ZXF1b3RlKFssXSlkbmwNCisgICAgY3h4X2F1dG9faW5zdGFudGlhdGVfdGVt cGxhdGVzPW5vDQorICA7Ow0KKyAgKikNCisgICAgY3h4X2F1dG9faW5zdGFu dGlhdGVfdGVtcGxhdGVzPXllcw0KKyAgOzsNCiBlc2FjDQogDQogQ1hYX1ZF UlNJT049DQpAQCAtMTk5LDYgKzIwOCw3IEBAIGZpDQogQUNfU1VCU1QoQ1hY X1ZFUlNJT04pDQogDQogT0NUQVZFX0NYWF9ORVdfRlJJRU5EX1RFTVBMQVRF X0RFQ0wNCitPQ1RBVkVfQ1hYX0lTT19DT01QTElBTlRfTElCUkFSWQ0KIA0K ICMjIyBTZWUgd2hpY2ggQyBjb21waWxlciB0byB1c2UgKHdlIGV4cGVjdCB0 byBmaW5kIGdjYykuDQogDQpAQCAtMjc0LDE5ICsyODQsMjEgQEAgZXNhYw0K ICMjIyBPY3RhdmUgZG9lc24ndCB1c2UgcnVuLXRpbWUgdHlwZSBpZGVudGlm aWNhdGlvbiBvciBleGNlcHRpb25zIHlldCwNCiAjIyMgc28gZGlzYWJsZSB0 aGVtIGZvciBzb21ld2hhdCBmYXN0ZXIgYW5kIHNtYWxsZXIgY29kZS4NCiAN Ci1PQ1RBVkVfQ1hYX0ZMQUcoLWZuby1ydHRpLCBbDQotICBYVFJBX0NYWEZM QUdTPSIkWFRSQV9DWFhGTEFHUyAtZm5vLXJ0dGkiDQotICBBQ19NU0dfUkVT VUxUKFthZGRpbmcgLWZuby1ydHRpIHRvIFhUUkFfQ1hYRkxBR1NdKV0pDQot DQotT0NUQVZFX0NYWF9GTEFHKC1mbm8tZXhjZXB0aW9ucywgWw0KLSAgWFRS QV9DWFhGTEFHUz0iJFhUUkFfQ1hYRkxBR1MgLWZuby1leGNlcHRpb25zIg0K LSAgQUNfTVNHX1JFU1VMVChbYWRkaW5nIC1mbm8tZXhjZXB0aW9ucyB0byBY VFJBX0NYWEZMQUdTXSldKQ0KK2RubCBPQ1RBVkVfQ1hYX0ZMQUcoLWZuby1y dHRpLCBbDQorZG5sICAgWFRSQV9DWFhGTEFHUz0iJFhUUkFfQ1hYRkxBR1Mg LWZuby1ydHRpIg0KK2RubCAgIEFDX01TR19SRVNVTFQoW2FkZGluZyAtZm5v LXJ0dGkgdG8gWFRSQV9DWFhGTEFHU10pXSkNCitkbmwgDQorZG5sIE9DVEFW RV9DWFhfRkxBRygtZm5vLWV4Y2VwdGlvbnMsIFsNCitkbmwgICBYVFJBX0NY WEZMQUdTPSIkWFRSQV9DWFhGTEFHUyAtZm5vLWV4Y2VwdGlvbnMiDQorZG5s ICAgQUNfTVNHX1JFU1VMVChbYWRkaW5nIC1mbm8tZXhjZXB0aW9ucyB0byBY VFJBX0NYWEZMQUdTXSldKQ0KIA0KICMjIyBXZSBkbyBvdXIgb3duIHRlbXBs YXRlIGluc3RhbnRpYXRpb24uDQogDQotT0NUQVZFX0NYWF9GTEFHKC1mbm8t aW1wbGljaXQtdGVtcGxhdGVzLCBbDQotICBYVFJBX0NYWEZMQUdTPSIkWFRS QV9DWFhGTEFHUyAtZm5vLWltcGxpY2l0LXRlbXBsYXRlcyINCi0gIEFDX01T R19SRVNVTFQoW2FkZGluZyAtZm5vLWltcGxpY2l0LXRlbXBsYXRlcyB0byBY VFJBX0NYWEZMQUdTXSldKQ0KK2lmIHRlc3QgIiRjeHhfYXV0b19pbnN0YW50 aWF0ZV90ZW1wbGF0ZXMiID0gIm5vIjsgdGhlbg0KKyAgT0NUQVZFX0NYWF9G TEFHKC1mbm8taW1wbGljaXQtdGVtcGxhdGVzLCBbDQorICAgIFhUUkFfQ1hY RkxBR1M9IiRYVFJBX0NYWEZMQUdTIC1mbm8taW1wbGljaXQtdGVtcGxhdGVz Ig0KKyAgICBBQ19NU0dfUkVTVUxUKFthZGRpbmcgLWZuby1pbXBsaWNpdC10 ZW1wbGF0ZXMgdG8gWFRSQV9DWFhGTEFHU10pXSkNCitmaQ0KIA0KIEFDX1NV QlNUKFhUUkFfQ0ZMQUdTKQ0KIEFDX1NVQlNUKFhUUkFfQ1hYRkxBR1MpDQpJ bmRleDogYWNjb25maWcuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT IGZpbGU6IC9ob21lcy9raGFuL3NyYy9tYXRoL0NWU1JPT1Qvb2N0YXZlLXRl c3QvYWNjb25maWcuaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEN CmRpZmYgLXUgLTMgLXAgLXIxLjEuMS4xIGFjY29uZmlnLmgNCi0tLSBhY2Nv bmZpZy5oCTIwMDAvMTIvMjcgMTc6Mzk6NTgJMS4xLjEuMQ0KKysrIGFjY29u ZmlnLmgJMjAwMS8wMS8zMSAyMDoxNjo0OQ0KQEAgLTE0LDYgKzE0LDkgQEAN CiAgICBpbnRlcm5hbCBhcnJheSBhbmQgbWF0cml4IGNsYXNzZXMuICovDQog I3VuZGVmIEJPVU5EU19DSEVDS0lORw0KIA0KKy8qIERlZmluZSBpZiB5b3Vy IEMrKyBydW50aW1lIGxpYnJhcnkgaXMgSVNPIGNvbXBsaWFudC4gKi8NCisj dW5kZWYgQ1hYX0lTT19DT01QTElBTlRfTElCUkFSWQ0KKw0KIC8qIERlZmlu ZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGA8Picgc3R1ZmYgZm9yIHRl bXBsYXRlIGZyaWVuZHMuICovDQogI3VuZGVmIENYWF9ORVdfRlJJRU5EX1RF TVBMQVRFX0RFQ0wNCiANCkluZGV4OiBNYWtlY29uZi5pbg0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lcy9raGFuL3NyYy9tYXRo L0NWU1JPT1Qvb2N0YXZlLXRlc3QvTWFrZWNvbmYuaW4sdg0KcmV0cmlldmlu ZyByZXZpc2lvbiAxLjEuMS4xDQpkaWZmIC11IC0zIC1wIC1yMS4xLjEuMSBN YWtlY29uZi5pbg0KLS0tIE1ha2Vjb25mLmluCTIwMDAvMTIvMjcgMTc6Mzk6 NTgJMS4xLjEuMQ0KKysrIE1ha2Vjb25mLmluCTIwMDEvMDEvMzEgMTc6Mjg6 MzkNCkBAIC0zMDEsNyArMzAxLDggQEAgcGljLyUubyA6ICUuY2MNCiAJQGVj aG8gbWFraW5nICRAIGZyb20gJDwNCiAJQHJtIC1mICRADQogCUAkKENYWCkg LU0gJChDUFBGTEFHUykgJChBTExfQ1hYRkxBR1MpICQ8IHwgXA0KLQkgIHNl ZCAtZSAncywkKlwubyxwaWMvJiAmICRALGcnID4gJEAudG1wDQorCSAgc2Vk IC1lICdzLF5bXjpdKi9cKC4qXC5vXCk6LFwxOiwnIFwNCisJICAgICAgLWUg J3MsJCpcLm8scGljLyYgJiAkQCxnJyA+ICRALnRtcA0KIAlAbXYgJEAudG1w ICRADQogDQogIyBBbmQgb25lIGZvciAuYyBmaWxlcy50b286DQpAQCAtMzEw LDcgKzMxMSw4IEBAIHBpYy8lLm8gOiAlLmNjDQogCUBlY2hvIG1ha2luZyAk QCBmcm9tICQ8DQogCUBybSAtZiAkQA0KIAlAJChDQykgLU0gJChDUFBGTEFH UykgJChBTExfQ0ZMQUdTKSAkPCB8IFwNCi0JICBzZWQgLWUgJ3MsJCpcLm8s cGljLyYgJiAkQCxnJyA+ICRALnRtcA0KKwkgIHNlZCAtZSAncyxeW146XSov XCguKlwub1wpOixcMTosJyBcDQorCSAgICAgIC1lICdzLCQqXC5vLHBpYy8m ICYgJEAsZycgPiAkQC50bXANCiAJQG12ICRALnRtcCAkQA0KIA0KIGRlZmlu ZSBkby1zdWJkaXItZm9yLWNvbW1hbmQNCg== --2006041544-959030623-981001623=:9500 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="src.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: src directory patch QXBvbG9naWVzIGZvciB0aGUgdGhlIGluY29tcGxldGUgY2hhbmdlbG9nLCBi dXQgSSBuZWVkIHRvIGdldCBzb21lIHJlYWwNCndvcmsgZG9uZS4gSG9wZWZ1 bGx5IEknbGwgYSBjaGFuY2UgdG8gc3VibWl0IGEgcmVhbCBvbmUgaW4gdGhl IG5leHQNCmZldyBkYXlzLg0KDQoyMDAxLTAxLTMxICBNdW1pdCBLaGFuICA8 a2hhbkBuYW5vdGVjaC53aXNjLmVkdT4NCg0KCSogYy1maWxlLXB0ci1zdHJl YW0uaDogQWRkIElTTyBDKysgY29uZm9ybWFuY2UuDQoJKiBjLWZpbGUtcHRy LXN0cmVhbS5jYzogTGlrZXdpc2UuDQoJKiBlcnJvci5jYzogTGlrZXdpc2Uu DQoJKiBmaWxlLWlvLmNjOiBMaWtld2lzZS4NCgkqIGhlbHAuY2M6IExpa2V3 aXNlLg0KCSogbG9hZC1zYXZlLmNjOiBMaWtld2lzZS4NCgkqIG9jdC1mc3Ry bS5jYzogTGlrZXdpc2UuDQoJKiBvY3QtZnN0cm0uaDogTGlrZXdpc2UuDQoJ KiBvY3QtaW9zdHJtLmNjOiBMaWtld2lzZS4NCgkqIG9jdC1pb3N0cm0uaDog TGlrZXdpc2UuDQoJKiBvY3Qtc3Rkc3RybS5jYzogTGlrZXdpc2UuDQoJKiBv Y3Qtc3Rkc3RybS5oOiBMaWtld2lzZS4NCgkqIG9jdC1zdHJlYW0uY2M6IExp a2V3aXNlLg0KCSogb2N0LXN0cmVhbS5oOiBMaWtld2lzZS4NCgkqIG9jdC1z dHJzdHJtLmNjOiBMaWtld2lzZS4NCgkqIG9jdC1zdHJzdHJtLmg6IExpa2V3 aXNlLg0KCSogb3YtYmFzZS1zY2FsYXIuaDogTGlrZXdpc2UuDQoJKiBvdi1j b21wbGV4LmNjOiBMaWtld2lzZS4NCgkqIG92LWN4LW1hdC5jYzogTGlrZXdp c2UuDQoJKiBwYWdlci5jYzogTGlrZXdpc2UuDQoJKiBwci1vdXRwdXQuY2M6 IExpa2V3aXNlLg0KCSogcHJvY3N0cmVhbS5oOiBMaWtld2lzZS4NCgkqIHB0 LXByLWNvZGUuY2M6IExpa2V3aXNlLg0KCSogdXRpbHMuY2M6IExpa2V3aXNl Lg0KDQoNCkluZGV4OiBzcmMvYy1maWxlLXB0ci1zdHJlYW0uaA0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lcy9raGFuL3NyYy9t YXRoL0NWU1JPT1Qvb2N0YXZlLXRlc3Qvc3JjL2MtZmlsZS1wdHItc3RyZWFt Lmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xDQpkaWZmIC11IC0z IC1wIC1yMS4xLjEuMSBjLWZpbGUtcHRyLXN0cmVhbS5oDQotLS0gc3JjL2Mt ZmlsZS1wdHItc3RyZWFtLmgJMjAwMC8xMi8yNyAxNzo0MDowMAkxLjEuMS4x DQorKysgc3JjL2MtZmlsZS1wdHItc3RyZWFtLmgJMjAwMS8wMi8wMSAwMDox MDowOQ0KQEAgLTI4LDI5ICsyOCwzOCBAQCBTb2Z0d2FyZSBGb3VuZGF0aW9u LCA1OSBUZW1wbGUgUGxhY2UgLSBTDQogI2VuZGlmDQogDQogI2luY2x1ZGUg PGlvc3RyZWFtPg0KLSNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxm c3RyZWFtPg0KKyNpbmNsdWRlIDxjc3RkaW8+DQogDQogY2xhc3MNCiBjX2Zp bGVfcHRyX2J1ZiA6IHB1YmxpYyBzdGQ6OmZpbGVidWYNCiB7DQogcHVibGlj Og0KIA0KKyNpZiAhQ1hYX0lTT19DT01QTElBTlRfTElCUkFSWQ0KKyAgdHlw ZWRlZiBpbnQgaW50X3R5cGU7DQorI2VuZGlmDQorDQogICB0eXBlZGVmIGlu dCAoKmNsb3NlX2ZjbikgKEZJTEUgKik7DQogDQogICBGSUxFKiBzdGRpb2Zp bGUgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGY7IH0NCiANCiAgIGNfZmlsZV9w dHJfYnVmIChGSUxFICpmX2FyZywgY2xvc2VfZmNuIGNmX2FyZyA9IDo6ZmNs b3NlKQ0KLSAgICA6IHN0ZDo6ZmlsZWJ1ZiAoZl9hcmcgPyBmaWxlbm8gKGZf YXJnKSA6IC0xKSwgZiAoZl9hcmcpLCBjZiAoY2ZfYXJnKSB7IH0NCisgICAg OiBzdGQ6OmZpbGVidWYgKGZfYXJnID8gZmlsZW5vIChmX2FyZykgOiAtMSwN CisgICAgICAgICAgICAgICAgICAgIDAsIHN0ZDo6aW9zOjppbiB8IHN0ZDo6 aW9zOjpvdXQpLA0KKyAgICBmIChmX2FyZyksIGNmIChjZl9hcmcpLA0KKyAg ICBmZCAoZl9hcmcgPyBmaWxlbm8gKGZfYXJnKSA6IC0xKQ0KKyAgICB7IH0N CiANCiAgIH5jX2ZpbGVfcHRyX2J1ZiAodm9pZCk7DQogDQotICBpbnQgb3Zl cmZsb3cgKGludCk7DQorICBpbnRfdHlwZSBvdmVyZmxvdyAoaW50X3R5cGUp Ow0KIA0KLSAgaW50IHVuZGVyZmxvdyAodm9pZCk7DQorICBpbnRfdHlwZSB1 bmRlcmZsb3cgKHZvaWQpOw0KIA0KLSAgaW50IHVmbG93ICh2b2lkKTsNCisg IGludF90eXBlIHVmbG93ICh2b2lkKTsNCiANCi0gIGludCBwYmFja2ZhaWwg KGludCk7DQorICBpbnRfdHlwZSBwYmFja2ZhaWwgKGludF90eXBlKTsNCiAN CiAgIHN0ZDo6c3RyZWFtc2l6ZSB4c3B1dG4gKGNvbnN0IGNoYXIqLCBzdGQ6 OnN0cmVhbXNpemUpOw0KIA0KQEAgLTY4LDExICs3NywxNyBAQCBwdWJsaWM6 DQogDQogICBpbnQgY2xvc2UgKHZvaWQpOw0KIA0KKyAgaW50IGZpbGVfbnVt YmVyICgpIGNvbnN0IHsgcmV0dXJuIGZkOyB9DQorDQogcHJvdGVjdGVkOg0K IA0KICAgRklMRSAqZjsNCiANCiAgIGNsb3NlX2ZjbiBjZjsNCisNCitwcml2 YXRlOg0KKw0KKyAgaW50IGZkOw0KIH07DQogDQogY2xhc3MNCkBAIC04MSw3 ICs5Niw3IEBAIGlfY19maWxlX3B0cl9zdHJlYW0gOiBwdWJsaWMgc3RkOjpp c3RyZWENCiBwdWJsaWM6DQogDQogICBpX2NfZmlsZV9wdHJfc3RyZWFtIChG SUxFKiBmLCBjX2ZpbGVfcHRyX2J1Zjo6Y2xvc2VfZmNuIGNmID0gOjpmY2xv c2UpDQotICAgIDogc3RkOjppc3RyZWFtICgpLCBidWYgKG5ldyBjX2ZpbGVf cHRyX2J1ZiAoZiwgY2YpKSB7IGluaXQgKGJ1Zik7IH0NCisgICAgOiBzdGQ6 OmlzdHJlYW0gKDApLCBidWYgKG5ldyBjX2ZpbGVfcHRyX2J1ZiAoZiwgY2Yp KSB7IGluaXQgKGJ1Zik7IH0NCiANCiAgIH5pX2NfZmlsZV9wdHJfc3RyZWFt ICh2b2lkKSB7IGRlbGV0ZSBidWY7IGJ1ZiA9IDA7IH0NCiANCkBAIC0xMDAs NyArMTE1LDcgQEAgb19jX2ZpbGVfcHRyX3N0cmVhbSA6IHB1YmxpYyBzdGQ6 Om9zdHJlYQ0KIHB1YmxpYzoNCiANCiAgIG9fY19maWxlX3B0cl9zdHJlYW0g KEZJTEUqIGYsIGNfZmlsZV9wdHJfYnVmOjpjbG9zZV9mY24gY2YgPSA6OmZj bG9zZSkNCi0gICAgOiBzdGQ6Om9zdHJlYW0gKCksIGJ1ZiAobmV3IGNfZmls ZV9wdHJfYnVmIChmLCBjZikpIHsgaW5pdCAoYnVmKTsgfQ0KKyAgICA6IHN0 ZDo6b3N0cmVhbSAoMCksIGJ1ZiAobmV3IGNfZmlsZV9wdHJfYnVmIChmLCBj ZikpIHsgaW5pdCAoYnVmKTsgfQ0KIA0KICAgfm9fY19maWxlX3B0cl9zdHJl YW0gKHZvaWQpIHsgZGVsZXRlIGJ1ZjsgYnVmID0gMDsgfQ0KIA0KSW5kZXg6 IHNyYy9jLWZpbGUtcHRyLXN0cmVhbS5jYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KUkNTIGZpbGU6IC9ob21lcy9raGFuL3NyYy9tYXRoL0NWU1JPT1Qv b2N0YXZlLXRlc3Qvc3JjL2MtZmlsZS1wdHItc3RyZWFtLmNjLHYNCnJldHJp ZXZpbmcgcmV2aXNpb24gMS4xLjEuMQ0KZGlmZiAtdSAtMyAtcCAtcjEuMS4x LjEgYy1maWxlLXB0ci1zdHJlYW0uY2MNCi0tLSBzcmMvYy1maWxlLXB0ci1z dHJlYW0uY2MJMjAwMC8xMi8yNyAxNzo0MDowMAkxLjEuMS4xDQorKysgc3Jj L2MtZmlsZS1wdHItc3RyZWFtLmNjCTIwMDEvMDEvMzEgMTk6MDM6NDANCkBA IC00OSwzNCArNDksNTAgQEAgY19maWxlX3B0cl9idWY6On5jX2ZpbGVfcHRy X2J1ZiAodm9pZCkNCiANCiAvLyBYWFggRklYTUUgWFhYIC0tIEknbSBzdXJl IHRoZXJlIGlzIHJvb20gZm9yIGltcHJvdmVtZW50IGhlcmUuLi4NCiANCi1p bnQNCi1jX2ZpbGVfcHRyX2J1Zjo6b3ZlcmZsb3cgKGludCBjKQ0KK2NfZmls ZV9wdHJfYnVmOjppbnRfdHlwZQ0KK2NfZmlsZV9wdHJfYnVmOjpvdmVyZmxv dyAoaW50X3R5cGUgYykNCiB7DQorI2lmIENYWF9JU09fQ09NUExJQU5UX0xJ QlJBUlkNCiAgIGlmIChmKQ0KKyAgICByZXR1cm4gKGMgIT0gdHJhaXRzX3R5 cGU6OmVvZiAoKSkgPyBmcHV0YyAoYywgZikgOiBmbHVzaCAoKTsNCisgIGVs c2UNCisgICAgcmV0dXJuIHRyYWl0c190eXBlOjpub3RfZW9mIChjKTsNCisj ZWxzZSAvKiBDWFhfSVNPX0NPTVBMSUFOVF9MSUJSQVJZICovDQorICBpZiAo ZikNCiAgICAgcmV0dXJuIChjICE9IEVPRikgPyBmcHV0YyAoYywgZikgOiBm bHVzaCAoKTsNCiAgIGVsc2UNCiAgICAgcmV0dXJuIEVPRjsNCisjZW5kaWYg LyogQ1hYX0lTT19DT01QTElBTlRfTElCUkFSWSAqLw0KIH0NCiANCi1pbnQN CitjX2ZpbGVfcHRyX2J1Zjo6aW50X3R5cGUNCiBjX2ZpbGVfcHRyX2J1Zjo6 dW5kZXJmbG93ICh2b2lkKQ0KIHsNCiAgIGlmIChmKQ0KICAgICByZXR1cm4g ZmdldGMgKGYpOw0KICAgZWxzZQ0KKyNpZiBDWFhfSVNPX0NPTVBMSUFOVF9M SUJSQVJZDQorICAgIHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mICgpOw0KKyNl bHNlIC8qIENYWF9JU09fQ09NUExJQU5UX0xJQlJBUlkgKi8NCiAgICAgcmV0 dXJuIEVPRjsNCisjZW5kaWYgLyogQ1hYX0lTT19DT01QTElBTlRfTElCUkFS WSAqLw0KIH0NCiANCi1pbnQNCitjX2ZpbGVfcHRyX2J1Zjo6aW50X3R5cGUN CiBjX2ZpbGVfcHRyX2J1Zjo6dWZsb3cgKHZvaWQpDQogew0KICAgcmV0dXJu IHVuZGVyZmxvdyAoKTsNCiB9DQogDQotaW50DQotY19maWxlX3B0cl9idWY6 OnBiYWNrZmFpbCAoaW50IGMpDQorY19maWxlX3B0cl9idWY6OmludF90eXBl DQorY19maWxlX3B0cl9idWY6OnBiYWNrZmFpbCAoaW50X3R5cGUgYykNCiB7 DQorI2lmIENYWF9JU09fQ09NUExJQU5UX0xJQlJBUlkNCisgIHJldHVybiAo YyAhPSB0cmFpdHNfdHlwZTo6ZW9mICgpICYmIGYpID8gdW5nZXRjIChjLCBm KSA6IA0KKyAgICB0cmFpdHNfdHlwZTo6bm90X2VvZiAoYyk7DQorI2Vsc2Ug LyogQ1hYX0lTT19DT01QTElBTlRfTElCUkFSWSAqLw0KICAgcmV0dXJuIChj ICE9IEVPRiAmJiBmKSA/IHVuZ2V0YyAoYywgZikgOiBFT0Y7DQorI2VuZGlm IC8qIENYWF9JU09fQ09NUExJQU5UX0xJQlJBUlkgKi8NCiB9DQogDQogc3Rk OjpzdHJlYW1zaXplDQpJbmRleDogc3JjL2Vycm9yLmNjDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWVzL2toYW4vc3JjL21hdGgv Q1ZTUk9PVC9vY3RhdmUtdGVzdC9zcmMvZXJyb3IuY2Msdg0KcmV0cmlldmlu ZyByZXZpc2lvbiAxLjEuMS4yDQpkaWZmIC11IC0zIC1wIC1yMS4xLjEuMiBl cnJvci5jYw0KLS0tIHNyYy9lcnJvci5jYwkyMDAxLzAxLzMwIDA0OjQxOjQ4 CTEuMS4xLjINCisrKyBzcmMvZXJyb3IuY2MJMjAwMS8wMS8zMCAxODowODo1 OA0KQEAgLTI4NCw3ICsyODQsNyBAQCBwcl93aGVyZSAoY29uc3QgY2hhciAq bmFtZSkNCiANCiAgICAgICBjdXJyX3N0YXRlbWVudC0+YWNjZXB0ICh0cGMp Ow0KIA0KLSAgICAgIG91dHB1dF9idWYgPDwgIlxuIiA8PCBlbmRzOw0KKyAg ICAgIG91dHB1dF9idWYgPDwgIlxuIiA8PCBzdGQ6OmVuZHM7DQogDQogICAg ICAgY2hhciAqbXNnID0gb3V0cHV0X2J1Zi5zdHIgKCk7DQogDQpJbmRleDog c3JjL2ZpbGUtaW8uY2MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBm aWxlOiAvaG9tZXMva2hhbi9zcmMvbWF0aC9DVlNST09UL29jdGF2ZS10ZXN0 L3NyYy9maWxlLWlvLmNjLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEu MQ0KZGlmZiAtdSAtMyAtcCAtcjEuMS4xLjEgZmlsZS1pby5jYw0KLS0tIHNy Yy9maWxlLWlvLmNjCTIwMDAvMTIvMjcgMTc6NDA6MDAJMS4xLjEuMQ0KKysr IHNyYy9maWxlLWlvLmNjCTIwMDEvMDEvMzEgMDQ6NTY6MTMNCkBAIC0zMTgs NyArMzE4LDkgQEAgZG9fc3RyZWFtX29wZW4gKGNvbnN0IHN0ZDo6c3RyaW5n JiBuYW1lLA0KIAlvY3RfbWFjaF9pbmZvOjpzdHJpbmdfdG9fZmxvYXRfZm9y bWF0IChhcmNoKTsNCiANCiAgICAgICBpZiAoISBlcnJvcl9zdGF0ZSkNCi0J cmV0dmFsID0gb2N0YXZlX2ZzdHJlYW06OmNyZWF0ZSAobmFtZSwgbWQsIGZs dF9mbXQpOw0KKwlyZXR2YWwgPSBvY3RhdmVfZnN0cmVhbTo6Y3JlYXRlIChu YW1lLA0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0 aWNfY2FzdDxzdGQ6Omlvczo6b3Blbm1vZGU+IChtZCksIA0KKwkJCQkJIGZs dF9mbXQpOw0KICAgICB9DQogDQogICByZXR1cm4gcmV0dmFsOw0KSW5kZXg6 IHNyYy9oZWxwLmNjDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls ZTogL2hvbWVzL2toYW4vc3JjL21hdGgvQ1ZTUk9PVC9vY3RhdmUtdGVzdC9z cmMvaGVscC5jYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjENCmRp ZmYgLXUgLTMgLXAgLXIxLjEuMS4xIGhlbHAuY2MNCi0tLSBzcmMvaGVscC5j YwkyMDAwLzEyLzI3IDE3OjQwOjAwCTEuMS4xLjENCisrKyBzcmMvaGVscC5j YwkyMDAxLzAxLzMwIDE4OjEwOjQwDQpAQCAtNjM5LDcgKzYzOSw3IEBAIGRp c3BsYXlfaGVscF90ZXh0IChzdGQ6Om9zdHJlYW0mIG9zLCBjb24NCiAJCSA8 PCAiU2VlIGFsc286IFxcYXJnc1xcLlxuIg0KICAgICAgICAgICAgICAgICAg PDwgIkBlbmQgbWFjcm9cbiI7DQogDQotCSAgZmlsdGVyIDw8IG1zZy5zdWJz dHIgKHBvcysxKSA8PCBlbmRsOw0KKwkgIGZpbHRlciA8PCBtc2cuc3Vic3Ry IChwb3MrMSkgPDwgc3RkOjplbmRsOw0KIA0KIAkgIGludCBzdGF0dXMgPSBm aWx0ZXIuY2xvc2UgKCk7DQogDQpJbmRleDogc3JjL2xvYWQtc2F2ZS5jYw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lcy9raGFu L3NyYy9tYXRoL0NWU1JPT1Qvb2N0YXZlLXRlc3Qvc3JjL2xvYWQtc2F2ZS5j Yyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjENCmRpZmYgLXUgLTMg LXAgLXIxLjEuMS4xIGxvYWQtc2F2ZS5jYw0KLS0tIHNyYy9sb2FkLXNhdmUu Y2MJMjAwMC8xMi8yNyAxNzo0MDowMAkxLjEuMS4xDQorKysgc3JjL2xvYWQt c2F2ZS5jYwkyMDAxLzAxLzMxIDE2OjA2OjAxDQpAQCAtMjc3Miw3ICsyNzcy LDcgQEAgcmVhZF9tYXQ1X2JpbmFyeV9maWxlX2hlYWRlciAoc3RkOjppc3Ry ZQ0KIC8vIFJldHVybiBUUlVFIGlmIE5BTUUgbWF0Y2hlcyBvbmUgb2YgdGhl IGdpdmVuIGdsb2JiaW5nIFBBVFRFUk5TLg0KIA0KIHN0YXRpYyBib29sDQot bWF0Y2hlc19wYXR0ZXJucyAoY29uc3Qgc3RkOjpzdHJpbmdfdmVjdG9yJiBw YXR0ZXJucywgaW50IHBhdF9pZHgsDQorbWF0Y2hlc19wYXR0ZXJucyAoY29u c3Qgc3RyaW5nX3ZlY3RvciYgcGF0dGVybnMsIGludCBwYXRfaWR4LA0KIAkJ ICBpbnQgbnVtX3BhdCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpDQogew0K ICAgZm9yIChpbnQgaSA9IHBhdF9pZHg7IGkgPCBudW1fcGF0OyBpKyspDQpA QCAtMzI4Nyw3ICszMjg3LDcgQEAgbGlzdHMgb2YgbGlzdHMgb2YgbWF0cmlj ZXMsIG9yIC4uLikuXG5cDQogCXsNCiAJICBpKys7DQogDQotCSAgdW5zaWdu ZWQgbW9kZSA9IHN0ZDo6aW9zOjppbjsNCisJICBzdGQ6Omlvczo6b3Blbm1v ZGUgbW9kZSA9IHN0ZDo6aW9zOjppbjsNCiAJICBpZiAoZm9ybWF0ID09IExT X0JJTkFSWSB8fA0KIAkgICAgICBmb3JtYXQgPT0gTFNfTUFUX0JJTkFSWSB8 fA0KIAkgICAgICBmb3JtYXQgPT0gTFNfTUFUNV9CSU5BUlkpDQpAQCAtNDA4 MSw3ICs0MDgxLDcgQEAgc2F2ZV9tYXQ1X2JpbmFyeV9lbGVtZW50IChzdGQ6 Om9zdHJlYW0mIA0KICAgRk9VUl9CWVRFX0lOVCBqdW5rPTA7DQogICBGT1VS X0JZVEVfSU5UIG5yOw0KICAgRk9VUl9CWVRFX0lOVCBuYzsNCi0gIHN0cmVh bXBvcyBmaXh1cCwgY29udGluOw0KKyAgc3RkOjpzdHJlYW1wb3MgZml4dXAs IGNvbnRpbjsNCiANCiAgIC8vIGVsZW1lbnQgdHlwZSBhbmQgbGVuZ3RoDQog ICBmaXh1cCA9IG9zLnRlbGxwICgpOw0KQEAgLTQyMzEsNyArNDIzMSw3IEBA IHNhdmVfbWF0NV9iaW5hcnlfZWxlbWVudCAoc3RkOjpvc3RyZWFtJiANCiAJ Zm9yIChpID0gbS5maXJzdCAoKTsgaTsgbS5uZXh0IChpKSkNCiAJICB7DQog CSAgICAvLyB3cml0ZSB0aGUgbmFtZSBvZiBlYWNoIGVsZW1lbnQNCi0JICAg IHN0cmluZyB0c3RyID0gbS5rZXkgKGkpOw0KKwkgICAgc3RkOjpzdHJpbmcg dHN0ciA9IG0ua2V5IChpKTsNCiAJICAgIG1lbXNldCAoYnVmLCAwLCAzMik7 DQogCSAgICBzdHJuY3B5IChidWYsIHRzdHIuY19zdHIgKCksIDMxKTsgLy8g b25seSAzMSBjaGFyIG5hbWVzIHBlcm1pdHRlZA0KIAkgICAgb3Mud3JpdGUg KGJ1ZiwgMzIpOw0KQEAgLTQ4MTAsNyArNDgxMCw3IEBAIHdyaXRlX2hlYWRl ciAoc3RkOjpvc3RyZWFtJiBvcywgbG9hZF9zYXYNCiB9DQogDQogc3RhdGlj IHZvaWQNCi1zYXZlX3ZhcnMgKGNvbnN0IHN0ZDo6c3RyaW5nX3ZlY3RvciYg YXJndiwgaW50IGFyZ3ZfaWR4LCBpbnQgYXJnYywNCitzYXZlX3ZhcnMgKGNv bnN0IHN0cmluZ192ZWN0b3ImIGFyZ3YsIGludCBhcmd2X2lkeCwgaW50IGFy Z2MsDQogCSAgIHN0ZDo6b3N0cmVhbSYgb3MsIGJvb2wgc2F2ZV9idWlsdGlu cywgbG9hZF9zYXZlX2Zvcm1hdCBmbXQsDQogCSAgIGJvb2wgc2F2ZV9hc19m bG9hdHMsIGJvb2wgd3JpdGVfaGVhZGVyX2luZm8pDQogew0KQEAgLTQ4NDYs NyArNDg0Niw3IEBAIHNhdmVfdXNlcl92YXJpYWJsZXMgKHZvaWQpDQogDQog ICAgICAgbG9hZF9zYXZlX2Zvcm1hdCBmb3JtYXQgPSBnZXRfZGVmYXVsdF9z YXZlX2Zvcm1hdCAoKTsNCiANCi0gICAgICB1bnNpZ25lZCBtb2RlID0gc3Rk Ojppb3M6Om91dHxzdGQ6Omlvczo6dHJ1bmM7DQorICAgICAgc3RkOjppb3M6 Om9wZW5tb2RlIG1vZGUgPSBzdGQ6Omlvczo6b3V0fHN0ZDo6aW9zOjp0cnVu YzsNCiAgICAgICBpZiAoZm9ybWF0ID09IExTX0JJTkFSWSB8fA0KIAkgIGZv cm1hdCA9PSBMU19NQVRfQklOQVJZIHx8DQogCSAgZm9ybWF0ID09IExTX01B VDVfQklOQVJZKQ0KQEAgLTUwODgsNyArNTA4OCw3IEBAIHRoZSBmaWxlIEBm aWxle2RhdGF9IGluIE9jdGF2ZSdzIGJpbmFyeSANCiANCiAgICAgICBpKys7 DQogDQotICAgICAgdW5zaWduZWQgbW9kZSA9IHN0ZDo6aW9zOjpvdXQ7DQor ICAgICAgc3RkOjppb3M6Om9wZW5tb2RlIG1vZGUgPSBzdGQ6Omlvczo6b3V0 Ow0KICAgICAgIGlmIChmb3JtYXQgPT0gTFNfQklOQVJZIHx8DQogCSAgZm9y bWF0ID09IExTX01BVF9CSU5BUlkgfHwNCiAJICBmb3JtYXQgPT0gTFNfTUFU NV9CSU5BUlkpDQpAQCAtNTEyMyw3ICs1MTIzLDggQEAgdGhlIGZpbGUgQGZp bGV7ZGF0YX0gaW4gT2N0YXZlJ3MgYmluYXJ5IA0KIAkgIGlmIChmaWxlKQ0K IAkgICAgew0KIAkgICAgICBib29sIHdyaXRlX2hlYWRlcl9pbmZvDQotCQk9 ICggKGZpbGUucmRidWYgKCkpLT5zZWVrb2ZmICgwLCBzdGQ6Omlvczo6Y3Vy KSA9PSAwKTsNCisJCT0gKCAoZmlsZS5yZGJ1ZiAoKSktPnB1YnNlZWtvZmYg KDAsIHN0ZDo6aW9zOjpjdXIpIA0KKwkJICAgPT0gc3RhdGljX2Nhc3Q8c3Rk OjpzdHJlYW1wb3M+ICgwKSk7DQogCSAgICAgIA0KIAkgICAgICBzYXZlX3Zh cnMgKGFyZ3YsIGksIGFyZ2MsIGZpbGUsIHNhdmVfYnVpbHRpbnMsIGZvcm1h dCwNCiAJCQkgc2F2ZV9hc19mbG9hdHMsIHdyaXRlX2hlYWRlcl9pbmZvKTsN CkBAIC01MjI2LDcgKzUyMjcsNyBAQCBkZWZhdWx0X3NhdmVfZm9ybWF0ICh2 b2lkKQ0KICAgcmV0dXJuIHN0YXR1czsNCiB9DQogDQotc3RhdGljIHN0cmlu Zw0KK3N0YXRpYyBzdGQ6OnN0cmluZw0KIGRlZmF1bHRfc2F2ZV9oZWFkZXJf Zm9ybWF0ICh2b2lkKQ0KIHsNCiAgIHJldHVybg0KSW5kZXg6IHNyYy9vY3Qt ZnN0cm0uY2MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv aG9tZXMva2hhbi9zcmMvbWF0aC9DVlNST09UL29jdGF2ZS10ZXN0L3NyYy9v Y3QtZnN0cm0uY2Msdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xDQpk aWZmIC11IC0zIC1wIC1yMS4xLjEuMSBvY3QtZnN0cm0uY2MNCi0tLSBzcmMv b2N0LWZzdHJtLmNjCTIwMDAvMTIvMjcgMTc6NDA6MDAJMS4xLjEuMQ0KKysr IHNyYy9vY3QtZnN0cm0uY2MJMjAwMS8wMi8wMSAwMzoxNzo1Mw0KQEAgLTQy LDExICs0MiwxOSBAQCBvY3RhdmVfZnN0cmVhbTo6b2N0YXZlX2ZzdHJlYW0g KGNvbnN0IHN0DQogCQkJCW9jdF9tYWNoX2luZm86OmZsb2F0X2Zvcm1hdCBm bHRfZm10KQ0KICAgOiBvY3RhdmVfYmFzZV9zdHJlYW0gKGFyZ19tZCwgZmx0 X2ZtdCksIG5tIChubV9hcmcpDQogew0KKw0KKyNpZiBDWFhfSVNPX0NPTVBM SUFOVF9MSUJSQVJZDQorDQorICBmcy5vcGVuIChubS5jX3N0ciAoKSwgYXJn X21kKTsNCisNCisjZWxzZQ0KICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCBwcm90 ZWN0aW9uIG9mIDA2NjQgc28gdGhhdCB1bWFzayB3aWxsIGFwcGVhciB0bw0K ICAgLy8gZG8gdGhlIHJpZ2h0IHRoaW5nLg0KIA0KICAgZnMub3BlbiAobm0u Y19zdHIgKCksIGFyZ19tZCwgMDY2Nik7DQogDQorI2VuZGlmDQorDQogICBp ZiAoISBmcykNCiAgICAgew0KICAgICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7 DQpAQCAtNTgsNyArNjYsNyBAQCBvY3RhdmVfZnN0cmVhbTo6b2N0YXZlX2Zz dHJlYW0gKGNvbnN0IHN0DQogLy8gUG9zaXRpb24gYSBzdHJlYW0gYXQgT0ZG U0VUIHJlbGF0aXZlIHRvIE9SSUdJTi4NCiANCiBpbnQNCi1vY3RhdmVfZnN0 cmVhbTo6c2VlayAoc3RkOjpzdHJlYW1vZmYgb2Zmc2V0LCBzdGQ6Omlvczo6 c2Vla19kaXIgb3JpZ2luKQ0KK29jdGF2ZV9mc3RyZWFtOjpzZWVrIChzdGQ6 OnN0cmVhbW9mZiBvZmZzZXQsIHN0ZDo6aW9zOjpzZWVrZGlyIG9yaWdpbikN CiB7DQogICBpbnQgcmV0dmFsID0gLTE7DQogDQpJbmRleDogc3JjL29jdC1m c3RybS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hv bWVzL2toYW4vc3JjL21hdGgvQ1ZTUk9PVC9vY3RhdmUtdGVzdC9zcmMvb2N0 LWZzdHJtLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xDQpkaWZm IC11IC0zIC1wIC1yMS4xLjEuMSBvY3QtZnN0cm0uaA0KLS0tIHNyYy9vY3Qt ZnN0cm0uaAkyMDAwLzEyLzI3IDE3OjQwOjAwCTEuMS4xLjENCisrKyBzcmMv b2N0LWZzdHJtLmgJMjAwMS8wMS8zMSAwNDo1MjoyMA0KQEAgLTI0LDYgKzI0 LDcgQEAgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0g Uw0KICNkZWZpbmUgb2N0YXZlX29jdGF2ZV9mc3RyZWFtX2ggMQ0KIA0KICNp bmNsdWRlIDxmc3RyZWFtPg0KKyNpbmNsdWRlIDxzdHJpbmc+DQogDQogI2lu Y2x1ZGUgIm9jdC1zdHJlYW0uaCINCiANCkBAIC00NCw3ICs0NSw3IEBAIHB1 YmxpYzoNCiANCiAgIC8vIFBvc2l0aW9uIGEgc3RyZWFtIGF0IE9GRlNFVCBy ZWxhdGl2ZSB0byBPUklHSU4uDQogDQotICBpbnQgc2VlayAoc3RkOjpzdHJl YW1vZmYgb2Zmc2V0LCBzdGQ6Omlvczo6c2Vla19kaXIgb3JpZ2luKTsNCisg IGludCBzZWVrIChzdGQ6OnN0cmVhbW9mZiBvZmZzZXQsIHN0ZDo6aW9zOjpz ZWVrZGlyIG9yaWdpbik7DQogDQogICAvLyBSZXR1cm4gY3VycmVudCBzdHJl YW0gcG9zaXRpb24uDQogDQpJbmRleDogc3JjL29jdC1pb3N0cm0uY2MNCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZXMva2hhbi9z cmMvbWF0aC9DVlNST09UL29jdGF2ZS10ZXN0L3NyYy9vY3QtaW9zdHJtLmNj LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQ0KZGlmZiAtdSAtMyAt cCAtcjEuMS4xLjEgb2N0LWlvc3RybS5jYw0KLS0tIHNyYy9vY3QtaW9zdHJt LmNjCTIwMDAvMTIvMjcgMTc6NDA6MDAJMS4xLjEuMQ0KKysrIHNyYy9vY3Qt aW9zdHJtLmNjCTIwMDEvMDEvMzEgMTU6Mjg6MDINCkBAIC0zMCw3ICszMCw3 IEBAIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFMN CiAvLyBQb3NpdGlvbiBhIHN0cmVhbSBhdCBPRkZTRVQgcmVsYXRpdmUgdG8g T1JJR0lOLg0KIA0KIGludA0KLW9jdGF2ZV9iYXNlX2lvc3RyZWFtOjpzZWVr IChzdGQ6OnN0cmVhbW9mZiwgc3RkOjppb3M6OnNlZWtfZGlyKQ0KK29jdGF2 ZV9iYXNlX2lvc3RyZWFtOjpzZWVrIChzdGQ6OnN0cmVhbW9mZiwgc3RkOjpp b3M6OnNlZWtkaXIpDQogew0KICAgaW52YWxpZF9vcGVyYXRpb24gKCk7DQog ICByZXR1cm4gLTE7DQpJbmRleDogc3JjL29jdC1pb3N0cm0uaA0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lcy9raGFuL3NyYy9t YXRoL0NWU1JPT1Qvb2N0YXZlLXRlc3Qvc3JjL29jdC1pb3N0cm0uaCx2DQpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjENCmRpZmYgLXUgLTMgLXAgLXIx LjEuMS4xIG9jdC1pb3N0cm0uaA0KLS0tIHNyYy9vY3QtaW9zdHJtLmgJMjAw MC8xMi8yNyAxNzo0MDowMAkxLjEuMS4xDQorKysgc3JjL29jdC1pb3N0cm0u aAkyMDAxLzAxLzMxIDA0OjUyOjU4DQpAQCAtNDAsNyArNDAsNyBAQCBwdWJs aWM6DQogDQogICAvLyBQb3NpdGlvbiBhIHN0cmVhbSBhdCBPRkZTRVQgcmVs YXRpdmUgdG8gT1JJR0lOLg0KIA0KLSAgaW50IHNlZWsgKHN0ZDo6c3RyZWFt b2ZmIG9mZnNldCwgc3RkOjppb3M6OnNlZWtfZGlyIG9yaWdpbik7DQorICBp bnQgc2VlayAoc3RkOjpzdHJlYW1vZmYgb2Zmc2V0LCBzdGQ6Omlvczo6c2Vl a2RpciBvcmlnaW4pOw0KIA0KICAgLy8gUmV0dXJuIGN1cnJlbnQgc3RyZWFt IHBvc2l0aW9uLg0KIA0KSW5kZXg6IHNyYy9vY3Qtc3Rkc3RybS5jYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lcy9raGFuL3Ny Yy9tYXRoL0NWU1JPT1Qvb2N0YXZlLXRlc3Qvc3JjL29jdC1zdGRzdHJtLmNj LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQ0KZGlmZiAtdSAtMyAt cCAtcjEuMS4xLjEgb2N0LXN0ZHN0cm0uY2MNCi0tLSBzcmMvb2N0LXN0ZHN0 cm0uY2MJMjAwMC8xMi8yNyAxNzo0MDowMAkxLjEuMS4xDQorKysgc3JjL29j dC1zdGRzdHJtLmNjCTIwMDEvMDEvMzEgMTU6Mjg6MTgNCkBAIC0zMSw3ICsz MSw3IEBAIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAt IFMNCiAvLyBQb3NpdGlvbiBhIHN0cmVhbSBhdCBPRkZTRVQgcmVsYXRpdmUg dG8gT1JJR0lOLg0KIA0KIGludA0KLW9jdGF2ZV9iYXNlX3N0ZGlvc3RyZWFt OjpzZWVrIChzdGQ6OnN0cmVhbW9mZiBvZmZzZXQsIHN0ZDo6aW9zOjpzZWVr X2RpciBvcmlnaW4pDQorb2N0YXZlX2Jhc2Vfc3RkaW9zdHJlYW06OnNlZWsg KHN0ZDo6c3RyZWFtb2ZmIG9mZnNldCwgc3RkOjppb3M6OnNlZWtkaXIgb3Jp Z2luKQ0KIHsNCiAgIGludCByZXR2YWwgPSAtMTsNCiANCkluZGV4OiBzcmMv b2N0LXN0ZHN0cm0uaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZp bGU6IC9ob21lcy9raGFuL3NyYy9tYXRoL0NWU1JPT1Qvb2N0YXZlLXRlc3Qv c3JjL29jdC1zdGRzdHJtLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEu MS4xDQpkaWZmIC11IC0zIC1wIC1yMS4xLjEuMSBvY3Qtc3Rkc3RybS5oDQot LS0gc3JjL29jdC1zdGRzdHJtLmgJMjAwMC8xMi8yNyAxNzo0MDowMAkxLjEu MS4xDQorKysgc3JjL29jdC1zdGRzdHJtLmgJMjAwMS8wMS8zMSAwNDo1Mzoz Nw0KQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOg0KIA0KICAgLy8gUG9zaXRp b24gYSBzdHJlYW0gYXQgT0ZGU0VUIHJlbGF0aXZlIHRvIE9SSUdJTi4NCiAN Ci0gIGludCBzZWVrIChzdGQ6OnN0cmVhbW9mZiBvZmZzZXQsIHN0ZDo6aW9z OjpzZWVrX2RpciBvcmlnaW4pOw0KKyAgaW50IHNlZWsgKHN0ZDo6c3RyZWFt b2ZmIG9mZnNldCwgc3RkOjppb3M6OnNlZWtkaXIgb3JpZ2luKTsNCiANCiAg IC8vIFJldHVybiBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbi4NCiANCkluZGV4 OiBzcmMvb2N0LXN0cmVhbS5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC9ob21lcy9raGFuL3NyYy9tYXRoL0NWU1JPT1Qvb2N0YXZl LXRlc3Qvc3JjL29jdC1zdHJlYW0uY2Msdg0KcmV0cmlldmluZyByZXZpc2lv biAxLjEuMS4xDQpkaWZmIC11IC0zIC1wIC1yMS4xLjEuMSBvY3Qtc3RyZWFt LmNjDQotLS0gc3JjL29jdC1zdHJlYW0uY2MJMjAwMC8xMi8yNyAxNzo0MDow MAkxLjEuMS4xDQorKysgc3JjL29jdC1zdHJlYW0uY2MJMjAwMS8wMi8wMSAw MzoxNToyMw0KQEAgLTM5LDYgKzM5LDcgQEAgU29mdHdhcmUgRm91bmRhdGlv biwgNTkgVGVtcGxlIFBsYWNlIC0gUw0KIA0KICNpbmNsdWRlICJlcnJvci5o Ig0KICNpbmNsdWRlICJpbnB1dC5oIg0KKyNpbmNsdWRlICJvY3Qtc3Rkc3Ry bS5oIg0KICNpbmNsdWRlICJvY3Qtc3RyZWFtLmgiDQogI2luY2x1ZGUgIm9j dC1vYmouaCINCiAjaW5jbHVkZSAidXRpbHMuaCINCkBAIC04OTQsMTAgKzg5 NSwxOCBAQCBvY3RhdmVfYmFzZV9zdHJlYW06OmZpbGVfbnVtYmVyICh2b2lk KQ0KICAgc3RkOjppc3RyZWFtICppcyA9IGlucHV0X3N0cmVhbSAoKTsNCiAg IHN0ZDo6b3N0cmVhbSAqb3MgPSBvdXRwdXRfc3RyZWFtICgpOw0KIA0KLSAg Ly8gWFhYIEZJWE1FIFhYWCAtLSB0aGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdh eS4uLg0KLSAgaW50IGlfZmlkID0gaXMgPyAoKHN0ZDo6ZmlsZWJ1ZiAqKSAo aXMtPnJkYnVmICgpKSktPmZkICgpIDogLTE7DQotICBpbnQgb19maWQgPSBv cyA/ICgoc3RkOjpmaWxlYnVmICopIChvcy0+cmRidWYgKCkpKS0+ZmQgKCkg OiAtMTsNCisgIC8vIFRoZXJlIGlzIG5vIHN0YW5kYXJkIHdheSB0byBnZXQg dGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGZyb20gDQorICAvLyBz dGQ6OmZpbGVidWYgKG5vciBpbiB0aGUgR05VIGxpYnN0ZGMrKy12MyBpbXBs ZW1lbnRhdGlvbikuIFdlIGNhY2hlDQorICAvLyB0aGUgZGVzY3JpcHRvciBp biBjX2ZpbGVfcHRyX2J1ZiwgYW5kIHRoZW4gZXh0cmFjdCBpdCBoZXJlLg0K Kw0KKyAgY19maWxlX3B0cl9idWYgKmlidWYgPSBpcyA/DQorICAgIGR5bmFt aWNfY2FzdDxjX2ZpbGVfcHRyX2J1ZiAqPiAoaXMtPnJkYnVmICgpKSA6IDA7 DQorICBjX2ZpbGVfcHRyX2J1ZiAqb2J1ZiA9IG9zID8NCisgICAgZHluYW1p Y19jYXN0PGNfZmlsZV9wdHJfYnVmICo+IChvcy0+cmRidWYgKCkpIDogMDsN CiANCisgIGludCBpX2ZpZCA9IGlidWYgPyBpYnVmLT5maWxlX251bWJlciAo KSA6IC0xOw0KKyAgaW50IG9fZmlkID0gb2J1ZiA/IG9idWYtPmZpbGVfbnVt YmVyICgpIDogLTE7DQorDQogICBpZiAoaV9maWQgPj0gMCkNCiAgICAgew0K ICAgICAgIGlmIChvX2ZpZCA+PSAwKQ0KQEAgLTEwNTUsNyArMTA2NCw3IEBA IG9jdGF2ZV9iYXNlX3N0cmVhbTo6cmVhZCAoY29uc3QgTWF0cml4JiANCiAg IHJldHVybiByZXR2YWw7DQogfQ0KIA0KLSNpZiBkZWZpbmVkIChfX0dOVUdf XykNCisjaWYgZGVmaW5lZCAoX19HTlVHX18pICYmICFDWFhfSVNPX0NPTVBM SUFOVF9MSUJSQVJZDQogDQogI2RlZmluZSBPQ1RBVkVfU0NBTihpcywgZm10 LCBhcmcpIGlzLnNjYW4gKChmbXQpLnRleHQsIGFyZykNCiANCkBAIC0yNTEz LDcgKzI1MjIsNyBAQCBvY3RhdmVfc3RyZWFtOjpnZXRzIChjb25zdCBvY3Rh dmVfdmFsdWUmDQogfQ0KIA0KIGludA0KLW9jdGF2ZV9zdHJlYW06OnNlZWsg KHN0ZDo6c3RyZWFtb2ZmIG9mZnNldCwgc3RkOjppb3M6OnNlZWtfZGlyIG9y aWdpbikNCitvY3RhdmVfc3RyZWFtOjpzZWVrIChzdGQ6OnN0cmVhbW9mZiBv ZmZzZXQsIHN0ZDo6aW9zOjpzZWVrZGlyIG9yaWdpbikNCiB7DQogICBpbnQg cmV0dmFsID0gLTE7DQogDQpAQCAtMjUzNSw3ICsyNTQ0LDcgQEAgb2N0YXZl X3N0cmVhbTo6c2VlayAoY29uc3Qgb2N0YXZlX3ZhbHVlJg0KIA0KICAgaWYg KCEgY29udl9lcnIpDQogICAgIHsNCi0gICAgICBzdGQ6Omlvczo6c2Vla19k aXIgb3JpZ2luID0gc3RkOjppb3M6OmJlZzsNCisgICAgICBzdGQ6Omlvczo6 c2Vla2RpciBvcmlnaW4gPSBzdGQ6Omlvczo6YmVnOw0KIA0KICAgICAgIGlm ICh0Y19vcmlnaW4uaXNfc3RyaW5nICgpKQ0KIAl7DQpAQCAtMjc2NSw2MiAr Mjc3NCwzNiBAQCBzdGQ6OnN0cmluZw0KIG9jdGF2ZV9zdHJlYW06Om1vZGVf YXNfc3RyaW5nIChpbnQgbW9kZSkNCiB7DQogICBzdGQ6OnN0cmluZyByZXR2 YWwgPSAiPz8/IjsNCi0NCi0gIHN3aXRjaCAobW9kZSkNCi0gICAgew0KLSAg ICBjYXNlIHN0ZDo6aW9zOjppbjoNCi0gICAgICByZXR2YWwgPSAiciI7DQot ICAgICAgYnJlYWs7DQotDQotICAgIGNhc2Ugc3RkOjppb3M6Om91dDoNCi0g ICAgY2FzZSBzdGQ6Omlvczo6b3V0IHwgc3RkOjppb3M6OnRydW5jOg0KLSAg ICAgIHJldHZhbCA9ICJ3IjsNCi0gICAgICBicmVhazsNCi0NCi0gICAgY2Fz ZSBzdGQ6Omlvczo6b3V0IHwgc3RkOjppb3M6OmFwcDoNCi0gICAgICByZXR2 YWwgPSAiYSI7DQotICAgICAgYnJlYWs7DQorICBzdGQ6Omlvczo6b3Blbm1v ZGUgaW5fbW9kZSA9IHN0YXRpY19jYXN0PHN0ZDo6aW9zOjpvcGVubW9kZT4g KG1vZGUpOw0KIA0KLSAgICBjYXNlIHN0ZDo6aW9zOjppbiB8IHN0ZDo6aW9z OjpvdXQ6DQotICAgICAgcmV0dmFsID0gInIrIjsNCi0gICAgICBicmVhazsN Ci0NCi0gICAgY2FzZSBzdGQ6Omlvczo6aW4gfCBzdGQ6Omlvczo6b3V0IHwg c3RkOjppb3M6OnRydW5jOg0KLSAgICAgIHJldHZhbCA9ICJ3KyI7DQotICAg ICAgYnJlYWs7DQotDQotICAgIGNhc2Ugc3RkOjppb3M6OmluIHwgc3RkOjpp b3M6Om91dCB8IHN0ZDo6aW9zOjphcHA6DQotICAgICAgcmV0dmFsID0gImEr IjsNCi0gICAgICBicmVhazsNCi0NCi0gICAgY2FzZSBzdGQ6Omlvczo6aW4g fCBzdGQ6Omlvczo6YmluYXJ5Og0KLSAgICAgIHJldHZhbCA9ICJyYiI7DQot ICAgICAgYnJlYWs7DQotDQotICAgIGNhc2Ugc3RkOjppb3M6Om91dCB8IHN0 ZDo6aW9zOjpiaW5hcnk6DQotICAgIGNhc2Ugc3RkOjppb3M6Om91dCB8IHN0 ZDo6aW9zOjp0cnVuYyB8IHN0ZDo6aW9zOjpiaW5hcnk6DQotICAgICAgcmV0 dmFsID0gIndiIjsNCi0gICAgICBicmVhazsNCi0NCi0gICAgY2FzZSBzdGQ6 Omlvczo6b3V0IHwgc3RkOjppb3M6OmFwcCB8IHN0ZDo6aW9zOjpiaW5hcnk6 DQotICAgICAgcmV0dmFsID0gImFiIjsNCi0gICAgICBicmVhazsNCi0NCi0g ICAgY2FzZSBzdGQ6Omlvczo6aW4gfCBzdGQ6Omlvczo6b3V0IHwgc3RkOjpp b3M6OmJpbmFyeToNCi0gICAgICByZXR2YWwgPSAicitiIjsNCi0gICAgICBi cmVhazsNCi0NCi0gICAgY2FzZSBzdGQ6Omlvczo6aW4gfCBzdGQ6Omlvczo6 b3V0IHwgc3RkOjppb3M6OnRydW5jIHwgc3RkOjppb3M6OmJpbmFyeToNCi0g ICAgICByZXR2YWwgPSAidytiIjsNCi0gICAgICBicmVhazsNCi0NCi0gICAg Y2FzZSBzdGQ6Omlvczo6aW4gfCBzdGQ6Omlvczo6b3V0IHwgc3RkOjppb3M6 OmFwcCB8IHN0ZDo6aW9zOjpiaW5hcnk6DQotICAgICAgcmV0dmFsID0gImEr YiI7DQotICAgICAgYnJlYWs7DQotDQotICAgIGRlZmF1bHQ6DQotICAgICAg YnJlYWs7DQotICAgIH0NCisgIGlmIChpbl9tb2RlID09IHN0ZDo6aW9zOjpp bikNCisgICAgcmV0dmFsID0gInIiOw0KKyAgZWxzZSBpZiAoaW5fbW9kZSA9 PSBzdGQ6Omlvczo6b3V0IA0KKyAgICAgICAgICAgfHwgaW5fbW9kZSA9PSBz dGQ6Omlvczo6b3V0IHwgc3RkOjppb3M6OnRydW5jKQ0KKyAgICByZXR2YWwg PSAidyI7DQorICBlbHNlIGlmIChpbl9tb2RlID09IHN0ZDo6aW9zOjpvdXQg fCBzdGQ6Omlvczo6YXBwKQ0KKyAgICByZXR2YWwgPSAiYSI7DQorICBlbHNl IGlmIChpbl9tb2RlID09IHN0ZDo6aW9zOjppbiB8IHN0ZDo6aW9zOjpvdXQp DQorICAgIHJldHZhbCA9ICJyKyI7DQorICBlbHNlIGlmIChpbl9tb2RlID09 IHN0ZDo6aW9zOjppbiB8IHN0ZDo6aW9zOjpvdXQgfCBzdGQ6Omlvczo6dHJ1 bmMpDQorICAgIHJldHZhbCA9ICJ3KyI7DQorICBlbHNlIGlmIChpbl9tb2Rl ID09IHN0ZDo6aW9zOjppbiB8IHN0ZDo6aW9zOjpvdXQgfCBzdGQ6Omlvczo6 YXBwKQ0KKyAgICByZXR2YWwgPSAiYSsiOw0KKyAgZWxzZSBpZiAoaW5fbW9k ZSA9PSBzdGQ6Omlvczo6aW4gfCBzdGQ6Omlvczo6YmluYXJ5KQ0KKyAgICBy ZXR2YWwgPSAicmIiOw0KKyAgZWxzZSBpZiAoaW5fbW9kZSA9PSBzdGQ6Omlv czo6b3V0IHwgc3RkOjppb3M6OmJpbmFyeQ0KKyAgICAgICAgICAgfHwgaW5f bW9kZSA9PSBzdGQ6Omlvczo6b3V0IHwgc3RkOjppb3M6OnRydW5jIHwgc3Rk Ojppb3M6OmJpbmFyeSkNCisgICAgcmV0dmFsID0gIndiIjsNCisgIGVsc2Ug aWYgKGluX21vZGUgPT0gc3RkOjppb3M6Om91dCB8IHN0ZDo6aW9zOjphcHAg fCBzdGQ6Omlvczo6YmluYXJ5KQ0KKyAgICByZXR2YWwgPSAiYWIiOw0KKyAg ZWxzZSBpZiAoaW5fbW9kZSA9PSBzdGQ6Omlvczo6aW4gfCBzdGQ6Omlvczo6 b3V0IHwgc3RkOjppb3M6OmJpbmFyeSkNCisgICAgcmV0dmFsID0gInIrYiI7 DQorICBlbHNlIGlmIChpbl9tb2RlID09IHN0ZDo6aW9zOjppbiB8IHN0ZDo6 aW9zOjpvdXQgfCBzdGQ6Omlvczo6dHJ1bmMgDQorICAgICAgICAgICB8IHN0 ZDo6aW9zOjpiaW5hcnkpDQorICAgIHJldHZhbCA9ICJ3K2IiOw0KKyAgZWxz ZSBpZiAoaW5fbW9kZSA9PSBzdGQ6Omlvczo6aW4gfCBzdGQ6Omlvczo6b3V0 IHwgc3RkOjppb3M6OmFwcA0KKyAgICAgICAgICAgfCBzdGQ6Omlvczo6Ymlu YXJ5KQ0KKyAgICByZXR2YWwgPSAiYStiIjsNCiANCiAgIHJldHVybiByZXR2 YWw7DQogfQ0KSW5kZXg6IHNyYy9vY3Qtc3RyZWFtLmgNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZXMva2hhbi9zcmMvbWF0aC9D VlNST09UL29jdGF2ZS10ZXN0L3NyYy9vY3Qtc3RyZWFtLmgsdg0KcmV0cmll dmluZyByZXZpc2lvbiAxLjEuMS4xDQpkaWZmIC11IC0zIC1wIC1yMS4xLjEu MSBvY3Qtc3RyZWFtLmgNCi0tLSBzcmMvb2N0LXN0cmVhbS5oCTIwMDAvMTIv MjcgMTc6NDA6MDAJMS4xLjEuMQ0KKysrIHNyYy9vY3Qtc3RyZWFtLmgJMjAw MS8wMS8zMSAwMTo1NTowMw0KQEAgLTMzNCw3ICszMzQsNyBAQCBwdWJsaWM6 DQogDQogICAvLyBQb3NpdGlvbiBhIHN0cmVhbSBhdCBPRkZTRVQgcmVsYXRp dmUgdG8gT1JJR0lOLg0KIA0KLSAgdmlydHVhbCBpbnQgc2VlayAoc3RkOjpz dHJlYW1vZmYgb2Zmc2V0LCBzdGQ6Omlvczo6c2Vla19kaXIgb3JpZ2luKSA9 IDA7DQorICB2aXJ0dWFsIGludCBzZWVrIChzdGQ6OnN0cmVhbW9mZiBvZmZz ZXQsIHN0ZDo6aW9zOjpzZWVrZGlyIG9yaWdpbikgPSAwOw0KIA0KICAgLy8g UmV0dXJuIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uLg0KIA0KQEAgLTUwMiw3 ICs1MDIsNyBAQCBwdWJsaWM6DQogICBzdGQ6OnN0cmluZyBnZXRzIChpbnQg bWF4X2xlbiwgYm9vbCYgZXJyKTsNCiAgIHN0ZDo6c3RyaW5nIGdldHMgKGNv bnN0IG9jdGF2ZV92YWx1ZSYgbWF4X2xlbiwgYm9vbCYgZXJyKTsNCiANCi0g IGludCBzZWVrIChzdGQ6OnN0cmVhbW9mZiBvZmZzZXQsIHN0ZDo6aW9zOjpz ZWVrX2RpciBvcmlnaW4pOw0KKyAgaW50IHNlZWsgKHN0ZDo6c3RyZWFtb2Zm IG9mZnNldCwgc3RkOjppb3M6OnNlZWtkaXIgb3JpZ2luKTsNCiAgIGludCBz ZWVrIChjb25zdCBvY3RhdmVfdmFsdWUmIG9mZnNldCwgY29uc3Qgb2N0YXZl X3ZhbHVlJiBvcmlnaW4pOw0KIA0KICAgbG9uZyB0ZWxsICh2b2lkKSBjb25z dDsNCkluZGV4OiBzcmMvb2N0LXN0cnN0cm0uY2MNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZXMva2hhbi9zcmMvbWF0aC9DVlNS T09UL29jdGF2ZS10ZXN0L3NyYy9vY3Qtc3Ryc3RybS5jYyx2DQpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMS4xLjENCmRpZmYgLXUgLTMgLXAgLXIxLjEuMS4x IG9jdC1zdHJzdHJtLmNjDQotLS0gc3JjL29jdC1zdHJzdHJtLmNjCTIwMDAv MTIvMjcgMTc6NDA6MDAJMS4xLjEuMQ0KKysrIHNyYy9vY3Qtc3Ryc3RybS5j YwkyMDAxLzAxLzMxIDE1OjI4OjA5DQpAQCAtMjksNyArMjksNyBAQCBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTDQogLy8gUG9z aXRpb24gYSBzdHJlYW0gYXQgT0ZGU0VUIHJlbGF0aXZlIHRvIE9SSUdJTi4N CiANCiBpbnQNCi1vY3RhdmVfYmFzZV9zdHJzdHJlYW06OnNlZWsgKHN0ZDo6 c3RyZWFtb2ZmIG9mZnNldCwgc3RkOjppb3M6OnNlZWtfZGlyIG9yaWdpbikN CitvY3RhdmVfYmFzZV9zdHJzdHJlYW06OnNlZWsgKHN0ZDo6c3RyZWFtb2Zm IG9mZnNldCwgc3RkOjppb3M6OnNlZWtkaXIgb3JpZ2luKQ0KIHsNCiAgIGlu dCByZXR2YWwgPSAtMTsNCiANCkluZGV4OiBzcmMvb2N0LXN0cnN0cm0uaA0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lcy9raGFu L3NyYy9tYXRoL0NWU1JPT1Qvb2N0YXZlLXRlc3Qvc3JjL29jdC1zdHJzdHJt Lmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xDQpkaWZmIC11IC0z IC1wIC1yMS4xLjEuMSBvY3Qtc3Ryc3RybS5oDQotLS0gc3JjL29jdC1zdHJz dHJtLmgJMjAwMC8xMi8yNyAxNzo0MDowMAkxLjEuMS4xDQorKysgc3JjL29j dC1zdHJzdHJtLmgJMjAwMS8wMS8zMSAwNDo1Mzo0MQ0KQEAgLTQwLDcgKzQw LDcgQEAgcHVibGljOg0KIA0KICAgLy8gUG9zaXRpb24gYSBzdHJlYW0gYXQg T0ZGU0VUIHJlbGF0aXZlIHRvIE9SSUdJTi4NCiANCi0gIGludCBzZWVrIChz dGQ6OnN0cmVhbW9mZiBvZmZzZXQsIHN0ZDo6aW9zOjpzZWVrX2RpciBvcmln aW4pOw0KKyAgaW50IHNlZWsgKHN0ZDo6c3RyZWFtb2ZmIG9mZnNldCwgc3Rk Ojppb3M6OnNlZWtkaXIgb3JpZ2luKTsNCiANCiAgIC8vIFJldHVybiBjdXJy ZW50IHN0cmVhbSBwb3NpdGlvbi4NCiANCkluZGV4OiBzcmMvb3YtYmFzZS1z Y2FsYXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9o b21lcy9raGFuL3NyYy9tYXRoL0NWU1JPT1Qvb2N0YXZlLXRlc3Qvc3JjL292 LWJhc2Utc2NhbGFyLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4x DQpkaWZmIC11IC0zIC1wIC1yMS4xLjEuMSBvdi1iYXNlLXNjYWxhci5oDQot LS0gc3JjL292LWJhc2Utc2NhbGFyLmgJMjAwMC8xMi8yNyAxNzo0MDowMAkx LjEuMS4xDQorKysgc3JjL292LWJhc2Utc2NhbGFyLmgJMjAwMS8wMS8zMSAx NjozMjo0Mw0KQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOg0KICAgb2N0YXZl X2Jhc2Vfc2NhbGFyICh2b2lkKQ0KICAgICA6IG9jdGF2ZV9iYXNlX3ZhbHVl ICgpIHsgfQ0KIA0KLSAgb2N0YXZlX2Jhc2Vfc2NhbGFyIChTVCBzKQ0KKyAg b2N0YXZlX2Jhc2Vfc2NhbGFyIChjb25zdCBTVCYgcykNCiAgICAgOiBvY3Rh dmVfYmFzZV92YWx1ZSAoKSwgc2NhbGFyIChzKSB7IH0NCiANCiAgIG9jdGF2 ZV9iYXNlX3NjYWxhciAoY29uc3Qgb2N0YXZlX2Jhc2Vfc2NhbGFyJiBzKQ0K SW5kZXg6IHNyYy9vdi1jb21wbGV4LmNjDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQpSQ1MgZmlsZTogL2hvbWVzL2toYW4vc3JjL21hdGgvQ1ZTUk9PVC9v Y3RhdmUtdGVzdC9zcmMvb3YtY29tcGxleC5jYyx2DQpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMS4xLjENCmRpZmYgLXUgLTMgLXAgLXIxLjEuMS4xIG92LWNv bXBsZXguY2MNCi0tLSBzcmMvb3YtY29tcGxleC5jYwkyMDAwLzEyLzI3IDE3 OjQwOjAwCTEuMS4xLjENCisrKyBzcmMvb3YtY29tcGxleC5jYwkyMDAxLzAx LzMxIDE2OjU0OjI5DQpAQCAtNTUsNyArNTUsNyBAQCBvY3RhdmVfY29tcGxl eDo6dHJ5X25hcnJvd2luZ19jb252ZXJzaW9uDQogICBvY3RhdmVfdmFsdWUg KnJldHZhbCA9IDA7DQogDQogICBpZiAoaW1hZyAoc2NhbGFyKSA9PSAwLjAp DQotICAgIHJldHZhbCA9IG5ldyBvY3RhdmVfc2NhbGFyICg6OnJlYWwgKHNj YWxhcikpOw0KKyAgICByZXR2YWwgPSBuZXcgb2N0YXZlX3NjYWxhciAocmVh bCAoc2NhbGFyKSk7DQogDQogICByZXR1cm4gcmV0dmFsOw0KIH0NCkBAIC0x MTMsNyArMTEzLDcgQEAgb2N0YXZlX2NvbXBsZXg6OmRvdWJsZV92YWx1ZSAo Ym9vbCBmb3JjZQ0KICAgICBncmlwZV9pbXBsaWNpdF9jb252ZXJzaW9uICgi Y29tcGxleCBzY2FsYXIiLCAicmVhbCBzY2FsYXIiKTsNCiANCiAgIGlmIChm bGFnKQ0KLSAgICByZXR2YWwgPSA6OnJlYWwgKHNjYWxhcik7DQorICAgIHJl dHZhbCA9IHN0ZDo6cmVhbCAoc2NhbGFyKTsNCiAgIGVsc2UNCiAgICAgZ3Jp cGVfaW52YWxpZF9jb252ZXJzaW9uICgiY29tcGxleCBzY2FsYXIiLCAicmVh bCBzY2FsYXIiKTsNCiANCkBAIC0xMzQsNyArMTM0LDcgQEAgb2N0YXZlX2Nv bXBsZXg6Om1hdHJpeF92YWx1ZSAoYm9vbCBmb3JjZQ0KICAgICBncmlwZV9p bXBsaWNpdF9jb252ZXJzaW9uICgiY29tcGxleCBzY2FsYXIiLCAicmVhbCBt YXRyaXgiKTsNCiANCiAgIGlmIChmbGFnKQ0KLSAgICByZXR2YWwgPSBNYXRy aXggKDEsIDEsIDo6cmVhbCAoc2NhbGFyKSk7DQorICAgIHJldHZhbCA9IE1h dHJpeCAoMSwgMSwgc3RkOjpyZWFsIChzY2FsYXIpKTsNCiAgIGVsc2UNCiAg ICAgZ3JpcGVfaW52YWxpZF9jb252ZXJzaW9uICgiY29tcGxleCBzY2FsYXIi LCAicmVhbCBtYXRyaXgiKTsNCiANCkluZGV4OiBzcmMvb3YtY3gtbWF0LmNj DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWVzL2to YW4vc3JjL21hdGgvQ1ZTUk9PVC9vY3RhdmUtdGVzdC9zcmMvb3YtY3gtbWF0 LmNjLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMg0KZGlmZiAtdSAt MyAtcCAtcjEuMS4xLjIgb3YtY3gtbWF0LmNjDQotLS0gc3JjL292LWN4LW1h dC5jYwkyMDAxLzAxLzMwIDA0OjQxOjQ4CTEuMS4xLjINCisrKyBzcmMvb3Yt Y3gtbWF0LmNjCTIwMDEvMDEvMzEgMTU6NDY6NTQNCkBAIC02NCw3ICs2NCw3 IEBAIG9jdGF2ZV9jb21wbGV4X21hdHJpeDo6dHJ5X25hcnJvd2luZ19jb24N CiAgICAgICBDb21wbGV4IGMgPSBtYXRyaXggKDAsIDApOw0KIA0KICAgICAg IGlmIChpbWFnIChjKSA9PSAwLjApDQotCXJldHZhbCA9IG5ldyBvY3RhdmVf c2NhbGFyICg6OnJlYWwgKGMpKTsNCisJcmV0dmFsID0gbmV3IG9jdGF2ZV9z Y2FsYXIgKHN0ZDo6cmVhbCAoYykpOw0KICAgICAgIGVsc2UNCiAJcmV0dmFs ID0gbmV3IG9jdGF2ZV9jb21wbGV4IChjKTsNCiAgICAgfQ0KQEAgLTE4Miw3 ICsxODIsNyBAQCBvY3RhdmVfY29tcGxleF9tYXRyaXg6OmRvdWJsZV92YWx1 ZSAoYm9vDQogICAgIHsNCiAgICAgICBpZiAoKHJvd3MgKCkgPT0gMSAmJiBj b2x1bW5zICgpID09IDEpDQogCSAgfHwgKFZkb19mb3J0cmFuX2luZGV4aW5n ICYmIHJvd3MgKCkgPiAwICYmIGNvbHVtbnMgKCkgPiAwKSkNCi0JcmV0dmFs ID0gOjpyZWFsIChtYXRyaXggKDAsIDApKTsNCisJcmV0dmFsID0gc3RkOjpy ZWFsIChtYXRyaXggKDAsIDApKTsNCiAgICAgICBlbHNlDQogCWdyaXBlX2lu dmFsaWRfY29udmVyc2lvbiAoImNvbXBsZXggbWF0cml4IiwgInJlYWwgc2Nh bGFyIik7DQogICAgIH0NCkluZGV4OiBzcmMvcGFnZXIuY2MNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZXMva2hhbi9zcmMvbWF0 aC9DVlNST09UL29jdGF2ZS10ZXN0L3NyYy9wYWdlci5jYyx2DQpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMS4xLjINCmRpZmYgLXUgLTMgLXAgLXIxLjEuMS4y IHBhZ2VyLmNjDQotLS0gc3JjL3BhZ2VyLmNjCTIwMDEvMDEvMzAgMDQ6NDE6 NDgJMS4xLjEuMg0KKysrIHNyYy9wYWdlci5jYwkyMDAxLzAxLzMxIDE1OjQy OjA4DQpAQCAtMjg0LDcgKzI4NCw3IEBAIG9jdGF2ZV9kaWFyeV9idWY6OnN5 bmMgKHZvaWQpDQogDQogb2N0YXZlX3BhZ2VyX3N0cmVhbSAqb2N0YXZlX3Bh Z2VyX3N0cmVhbTo6aW5zdGFuY2UgPSAwOw0KIA0KLW9jdGF2ZV9wYWdlcl9z dHJlYW06Om9jdGF2ZV9wYWdlcl9zdHJlYW0gKHZvaWQpIDogc3RkOjpvc3Ry ZWFtICgpLCBwYiAoMCkNCitvY3RhdmVfcGFnZXJfc3RyZWFtOjpvY3RhdmVf cGFnZXJfc3RyZWFtICh2b2lkKSA6IHN0ZDo6b3N0cmVhbSAoMCksIHBiICgw KQ0KIHsNCiAgIHBiID0gbmV3IG9jdGF2ZV9wYWdlcl9idWY7DQogICByZGJ1 ZiAocGIpOw0KQEAgLTMyMiw3ICszMjIsNyBAQCBvY3RhdmVfcGFnZXJfc3Ry ZWFtOjpzZXRfZGlhcnlfc2tpcCAodm9pDQogDQogb2N0YXZlX2RpYXJ5X3N0 cmVhbSAqb2N0YXZlX2RpYXJ5X3N0cmVhbTo6aW5zdGFuY2UgPSAwOw0KIA0K LW9jdGF2ZV9kaWFyeV9zdHJlYW06Om9jdGF2ZV9kaWFyeV9zdHJlYW0gKHZv aWQpIDogc3RkOjpvc3RyZWFtICgpLCBkYiAoMCkNCitvY3RhdmVfZGlhcnlf c3RyZWFtOjpvY3RhdmVfZGlhcnlfc3RyZWFtICh2b2lkKSA6IHN0ZDo6b3N0 cmVhbSAoMCksIGRiICgwKQ0KIHsNCiAgIGRiID0gbmV3IG9jdGF2ZV9kaWFy eV9idWY7DQogICByZGJ1ZiAoZGIpOw0KSW5kZXg6IHNyYy9wci1vdXRwdXQu Y2MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZXMv a2hhbi9zcmMvbWF0aC9DVlNST09UL29jdGF2ZS10ZXN0L3NyYy9wci1vdXRw dXQuY2Msdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xDQpkaWZmIC11 IC0zIC1wIC1yMS4xLjEuMSBwci1vdXRwdXQuY2MNCi0tLSBzcmMvcHItb3V0 cHV0LmNjCTIwMDAvMTIvMjcgMTc6NDA6MDAJMS4xLjEuMQ0KKysrIHNyYy9w ci1vdXRwdXQuY2MJMjAwMS8wMS8zMSAxNTozNToyMQ0KQEAgLTE4NCw3ICsx ODQsOSBAQCBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtJiBvcywgY29uc3Qg cHJfDQogICBpZiAocGZmLmYucHJlYyA+PSAwKQ0KICAgICBvcyA8PCBzdGQ6 OnNldHByZWNpc2lvbiAocGZmLmYucHJlYyk7DQogDQotICBzdGQ6Omlvczo6 Zm10ZmxhZ3Mgb2ZsYWdzID0gb3MuZmxhZ3MgKHBmZi5mLmZtdCB8IHBmZi5m LnVwIHwgcGZmLmYuc3ApOw0KKyAgc3RkOjppb3M6OmZtdGZsYWdzIG9mbGFn cyA9IA0KKyAgICBvcy5mbGFncyAoc3RhdGljX2Nhc3Q8c3RkOjppb3M6OmZt dGZsYWdzPiANCisgICAgICAgICAgICAgIChwZmYuZi5mbXQgfCBwZmYuZi51 cCB8IHBmZi5mLnNwKSk7DQogDQogICBvcyA8PCBwZmYudmFsOw0KIA0KQEAg LTE4MjgsNyArMTgzMCw3IEBAIHJldHVybnMgdGhlIGZvcm1hdHRlZCBvdXRw dXQgaW4gYSBzdHJpbmcNCiANCiAgICAgICBpZiAoISBlcnJvcl9zdGF0ZSkN CiAJew0KLQkgIG9zdHJlYW0gKm9zcCA9IG9zLm91dHB1dF9zdHJlYW0gKCk7 DQorCSAgc3RkOjpvc3RyZWFtICpvc3AgPSBvcy5vdXRwdXRfc3RyZWFtICgp Ow0KIA0KIAkgIGlmIChvc3ApDQogCSAgICBhcmdzKDEpLnByaW50ICgqb3Nw KTsNCkluZGV4OiBzcmMvcHJvY3N0cmVhbS5oDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpSQ1MgZmlsZTogL2hvbWVzL2toYW4vc3JjL21hdGgvQ1ZTUk9P VC9vY3RhdmUtdGVzdC9zcmMvcHJvY3N0cmVhbS5oLHYNCnJldHJpZXZpbmcg cmV2aXNpb24gMS4xLjEuMQ0KZGlmZiAtdSAtMyAtcCAtcjEuMS4xLjEgcHJv Y3N0cmVhbS5oDQotLS0gc3JjL3Byb2NzdHJlYW0uaAkyMDAwLzEyLzI3IDE3 OjQwOjAwCTEuMS4xLjENCisrKyBzcmMvcHJvY3N0cmVhbS5oCTIwMDEvMDEv MzEgMTk6NTc6NDMNCkBAIC02NiwxNCArNjYsMTUgQEAgcHJpdmF0ZToNCiB9 Ow0KIA0KIGNsYXNzDQotaXByb2NzdHJlYW0gOiBwdWJsaWMgcHJvY3N0cmVh bWJhc2UsIHB1YmxpYyBzdGQ6OmlzdHJlYW0NCitpcHJvY3N0cmVhbSA6IHB1 YmxpYyBzdGQ6OmlzdHJlYW0sIHB1YmxpYyBwcm9jc3RyZWFtYmFzZQ0KKy8v IGlwcm9jc3RyZWFtIDogcHVibGljIHByb2NzdHJlYW1iYXNlLCBwdWJsaWMg c3RkOjppc3RyZWFtDQogew0KIHB1YmxpYzoNCiANCi0gIGlwcm9jc3RyZWFt ICh2b2lkKSA6IHByb2NzdHJlYW1iYXNlICgpIHsgfQ0KKyAgaXByb2NzdHJl YW0gKHZvaWQpIDogc3RkOjppc3RyZWFtICgwKSwgcHJvY3N0cmVhbWJhc2Ug KCkgeyB9DQogDQogICBpcHJvY3N0cmVhbSAoY29uc3QgY2hhciAqbmFtZSwg aW50IG1vZGUgPSBzdGQ6Omlvczo6aW4pDQotICAgIDogcHJvY3N0cmVhbWJh c2UgKG5hbWUsIG1vZGUpIHsgfQ0KKyAgICA6IHN0ZDo6aXN0cmVhbSAoMCks IHByb2NzdHJlYW1iYXNlIChuYW1lLCBtb2RlKSB7IH0NCiANCiAgIH5pcHJv Y3N0cmVhbSAodm9pZCkgeyB9DQogDQpAQCAtODgsMTQgKzg5LDE1IEBAIHBy aXZhdGU6DQogfTsNCiANCiBjbGFzcw0KLW9wcm9jc3RyZWFtIDogcHVibGlj IHByb2NzdHJlYW1iYXNlLCBwdWJsaWMgc3RkOjpvc3RyZWFtDQorb3Byb2Nz dHJlYW0gOiBwdWJsaWMgc3RkOjpvc3RyZWFtLCBwdWJsaWMgcHJvY3N0cmVh bWJhc2UNCisvLyBvcHJvY3N0cmVhbSA6IHB1YmxpYyBwcm9jc3RyZWFtYmFz ZSwgcHVibGljIHN0ZDo6b3N0cmVhbQ0KIHsNCiBwdWJsaWM6DQogIA0KLSAg b3Byb2NzdHJlYW0gKHZvaWQpIDogcHJvY3N0cmVhbWJhc2UgKCkgeyB9DQor ICBvcHJvY3N0cmVhbSAodm9pZCkgOiBzdGQ6Om9zdHJlYW0gKDApLCBwcm9j c3RyZWFtYmFzZSAoKSB7IH0NCiANCiAgIG9wcm9jc3RyZWFtIChjb25zdCBj aGFyICpuYW1lLCBpbnQgbW9kZSA9IHN0ZDo6aW9zOjpvdXQpDQotICAgIDog cHJvY3N0cmVhbWJhc2UobmFtZSwgbW9kZSkgeyB9DQorICAgIDogc3RkOjpv c3RyZWFtICgwKSwgcHJvY3N0cmVhbWJhc2UobmFtZSwgbW9kZSkgeyB9DQog DQogICB+b3Byb2NzdHJlYW0gKHZvaWQpIHsgfQ0KIA0KQEAgLTExMCwxNCAr MTEyLDE1IEBAIHByaXZhdGU6DQogfTsNCiANCiBjbGFzcw0KLXByb2NzdHJl YW0gOiBwdWJsaWMgcHJvY3N0cmVhbWJhc2UsIHB1YmxpYyBzdGQ6Omlvc3Ry ZWFtDQorcHJvY3N0cmVhbSA6IHB1YmxpYyBzdGQ6Omlvc3RyZWFtLCBwdWJs aWMgcHJvY3N0cmVhbWJhc2UNCisvLyBwcm9jc3RyZWFtIDogcHVibGljIHBy b2NzdHJlYW1iYXNlLCBwdWJsaWMgc3RkOjppb3N0cmVhbQ0KIHsNCiBwdWJs aWM6DQogDQotICBwcm9jc3RyZWFtICh2b2lkKSA6IHByb2NzdHJlYW1iYXNl ICgpIHsgfQ0KKyAgcHJvY3N0cmVhbSAodm9pZCkgOiBzdGQ6Omlvc3RyZWFt ICgwKSwgcHJvY3N0cmVhbWJhc2UgKCkgeyB9DQogDQogICBwcm9jc3RyZWFt IChjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZSkNCi0gICAgOiBwcm9jc3Ry ZWFtYmFzZSAobmFtZSwgbW9kZSkgeyB9DQorICAgIDogc3RkOjppb3N0cmVh bSAoMCksIHByb2NzdHJlYW1iYXNlIChuYW1lLCBtb2RlKSB7IH0NCiANCiAg IH5wcm9jc3RyZWFtICh2b2lkKSB7IH0NCiANCkluZGV4OiBzcmMvcHQtcHIt Y29kZS5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9o b21lcy9raGFuL3NyYy9tYXRoL0NWU1JPT1Qvb2N0YXZlLXRlc3Qvc3JjL3B0 LXByLWNvZGUuY2Msdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xDQpk aWZmIC11IC0zIC1wIC1yMS4xLjEuMSBwdC1wci1jb2RlLmNjDQotLS0gc3Jj L3B0LXByLWNvZGUuY2MJMjAwMC8xMi8yNyAxNzo0MDowMAkxLjEuMS4xDQor Kysgc3JjL3B0LXByLWNvZGUuY2MJMjAwMS8wMS8zMSAxNTozNjowNw0KQEAg LTEyNzQsNyArMTI3NCw3IEBAIHRyZWVfcHJpbnRfY29kZTo6cHJpbnRfY29t bWVudF9lbHQgKGNvbnMNCiANCiAgIGJvb2wgcHJldl9jaGFyX3dhc19uZXds aW5lID0gZmFsc2U7DQogDQotICBzdHJpbmcgY29tbWVudCA9IGVsdC50ZXh0 ICgpOw0KKyAgc3RkOjpzdHJpbmcgY29tbWVudCA9IGVsdC50ZXh0ICgpOw0K IA0KICAgc2l6ZV90IGxlbiA9IGNvbW1lbnQubGVuZ3RoICgpOw0KIA0KSW5k ZXg6IHNyYy91dGlscy5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT IGZpbGU6IC9ob21lcy9raGFuL3NyYy9tYXRoL0NWU1JPT1Qvb2N0YXZlLXRl c3Qvc3JjL3V0aWxzLmNjLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEu MQ0KZGlmZiAtdSAtMyAtcCAtcjEuMS4xLjEgdXRpbHMuY2MNCi0tLSBzcmMv dXRpbHMuY2MJMjAwMC8xMi8yNyAxNzo0MDowMAkxLjEuMS4xDQorKysgc3Jj L3V0aWxzLmNjCTIwMDEvMDEvMzEgMTk6Mjc6NTYNCkBAIC03MTgsMTMgKzcx OCwxMyBAQCBvY3RhdmVfdmZvcm1hdCAoc3RkOjpvc3RyZWFtJiBvcywgY29u c3QgDQogew0KICAgaW50IHJldHZhbCA9IC0xOw0KIA0KLSNpZiBkZWZpbmVk IChfX0dOVUdfXykNCisjaWYgZGVmaW5lZCAoX19HTlVHX18pICYmICFDWFhf SVNPX0NPTVBMSUFOVF9MSUJSQVJZDQogDQotICBvc3Ryc3RyZWFtIGJ1ZjsN CisgIHN0ZDo6b3N0cnN0cmVhbSBidWY7DQogDQogICBidWYudmZvcm0gKGZt dCwgYXJncyk7DQogDQotICBidWYgPDwgZW5kczsNCisgIGJ1ZiA8PCBzdGQ6 OmVuZHM7DQogDQogICBjaGFyICpzID0gYnVmLnN0ciAoKTsNCiANCg== --2006041544-959030623-981001623=:9500--