Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lP5Gn-0007Gq-8x for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Mar 2021 15:18:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lP5Gm-00087F-0O for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Mar 2021 15:18:04 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lP5Gl-000878-Lv for pgsql-hackers@lists.postgresql.org; Wed, 24 Mar 2021 15:18:03 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lP5Gh-0001eZ-3B for pgsql-hackers@postgresql.org; Wed, 24 Mar 2021 15:18:03 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id 181186022B; Thu, 25 Mar 2021 00:17:53 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_fcf646c176967c9d7cc0ff178688c9ba" Date: Thu, 25 Mar 2021 00:17:53 +0900 From: torikoshia To: Kyotaro Horiguchi Cc: masao.fujii@oss.nttdata.com, pgsql-hackers@postgresql.org, tgl@sss.pgh.pa.us, gkokolatos@protonmail.com, kasahara.tatsuhito@gmail.com, craig@2ndquadrant.com Subject: Re: Get memory contexts of an arbitrary backend process In-Reply-To: <20210323.172433.1038800347387944240.horikyota.ntt@gmail.com> References: <70ae4b79eb8b0dcf42161c80a00e3f22@oss.nttdata.com> <49232304-1269-b2d4-c2ca-4b8683b29156@oss.nttdata.com> <2322ae15a675ba13368491ced3ea5fb4@oss.nttdata.com> <20210323.172433.1038800347387944240.horikyota.ntt@gmail.com> Message-ID: <0b0657d5febd0e46565a6bc9c62ba3f6@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com User-Agent: Roundcube Webmail/1.1.9 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_fcf646c176967c9d7cc0ff178688c9ba Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2021-03-23 17:24, Kyotaro Horiguchi wrote: Thanks for reviewing and suggestions! > At Mon, 22 Mar 2021 15:09:58 +0900, torikoshia > wrote in >> >> If MemoryContextStatsPrint(), i.e. showing 100 children at most is >> >> enough, this hard limit may be acceptable. >> > Can't this number be passed via shared memory? >> >> The attached patch uses static shared memory to pass the number. > > "pg_print_backend_memory_contexts" > > That name looks like as if it returns the result as text when used on > command-line. We could have pg_get_backend_memory_context(bool > dump_to_log (or where to dump), int limit). Or couldn't we name it > differently even in the ase we add a separate function? Redefined pg_get_backend_memory_contexts() as pg_get_backend_memory_contexts(pid, int max_children). When pid equals 0, pg_get_backend_memory_contexts() prints local memory contexts as original pg_get_backend_memory_contexts() does. In this case, 'max_children' is ignored. When 'pid' does not equal 0 and it is the PID of the client backend, memory contexts are logged through elog(). > > +/* > + * MaxChildrenPerContext > + * Max number of children to print per one parent context. > + */ > +int *MaxChildrenPerContext = NULL; > > Perhaps it'd be better to have a struct even if it consists only of > one member. (Aligned) C-int values are atomic so we can omit the > McxtPrintLock. (I don't think it's a problem even if it is modifed > while reading^^:) Fixed them. > + if(max_children <= 0) > + { > + ereport(WARNING, > + (errmsg("%d is invalid value", > max_children), > + errhint("second parameter is the number > of context and it must > be set to a value greater than or equal to 1"))); > > It's annoying to choose a number large enough when I want to dump > children unlimitedly. Couldn't we use 0 to specify "unlimited"? Modified as you suggested. > + (errmsg("%d is invalid value", > max_children), > + errhint("second parameter is the number > of context and it must > be set to a value greater than or equal to 1"))); > > For the main message, (I think) we usually spell the "%d is invalid > value" as "maximum number of children must be positive" or such. For > the hint, we don't need a copy of the primary section of the > documentation here. Modified it to "The maximum number of children must be greater than 0". > > I think we should ERROR out for invalid parameters, at least for > max_children. I'm not sure about pid since we might call it based on > pg_stat_activity.. Changed to ERROR out when the 'max_children' is less than 0. Regarding pid, I left it untouched considering the consistency with other signal sending functions such asĀ pg_cancel_backend(). > + if(!SendProcSignal(pid, PROCSIG_PRINT_MEMORY_CONTEXT, > InvalidBackendId)) > > We know the backendid of the process here. Added it. > > + if (is_dst_stderr) > + { > + for (i = 0; i <= level; i++) > + fprintf(stderr, " "); > > The fprintf path is used nowhere in the patch at all. It can be used > while attaching debugger but I'm not sure we need that code. The > footprint of this patch is largely shrinked by removing it. According to the past discussion[1], people wanted MemoryContextStats as it was, so I think it's better that MemoryContextStats can be used as before. > > + strcat(truncated_ident, delimiter); > > strcpy is sufficient here. And we don't need the delimiter to be a > variable. (we can copy a string literal into truncate_ident, then > count the length of truncate_ident, instead of the delimiter > variable.) True. > + $current_logfiles = slurp_file($node->data_dir . > '/current_logfiles'); > ... > +my $lfname = $current_logfiles; > +$lfname =~ s/^stderr //; > +chomp $lfname; > > $node->logfile is the current log file name. > > + 'target PID is not PostgreSQL server process'); > > Maybe "check if PID check is working" or such? And, we can do > something like the following to exercise in a more practical way. > > select pg_print_backend...(pid,) from pg_stat_activity where > backend_type = 'checkpointer'; It seems better. >> As documented, the current implementation allows that when multiple >> pg_print_backend_memory_contexts() called in succession or >> simultaneously, max_children can be the one of another >> pg_print_backend_memory_contexts(). >> I had tried to avoid this by adding some state information and using >> before_shmem_exit() in case of process termination for cleaning up the >> state information as in the patch I presented earlier, but since >> kill() >> returns success before the dumper called signal handler, it seemed >> there were times when we couldn't clean up the state. >> Since this happens only when multiple >> pg_print_backend_memory_contexts() >> are called and their specified number of children are different, and >> the >> effect is just the not intended number of children to print, it might >> be >> acceptable. > > I see it as a non-issue. Even though the behavior looks somewhat > strange, that usage is stranger than the behavior. Thanks for your comments! >> Or it might be better to wait for some seconds if num_chilren on >> shared >> memory is not the initialized value(meaning some other process is >> requesting to print memory contexts). >> >> >> Only superusers can call pg_print_backend_memory_contexts(). >> > + /* Only allow superusers to signal superuser-owned backends. */ >> > + if (superuser_arg(proc->roleId) && !superuser()) >> > The patch seems to allow even non-superuser to request to print the >> > memory >> > contexts if the target backend is owned by non-superuser. Is this >> > intentional? >> > I think that only superuser should be allowed to execute >> > pg_print_backend_memory_contexts() whoever owns the target backend. >> > Because that function can cause lots of log messages. >> >> Thanks, it's not intentional, modified it. > > By the way we can send a procsig to other than a client backend. And > most of the postgres processes are using the standard signal handler > and intializes the procsig facility. So some of such kind of processes > can dump the memory context information as-is. Otherwise we can add > CHECK_FOR_INTERRUPT to appropriate place to allow that. I'm not sure > how it is useful for other kind of processes, but it might be useful > for autovacuum workers. Yeah, I also think it's possible to get memory contexts other than the client backend. But I'm not sure whether people want to do it... [1] https://www.postgresql.org/message-id/906.1513707472%40sss.pgh.pa.us regards. --=_fcf646c176967c9d7cc0ff178688c9ba Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v3-0001-add-memorycontext-elog-print.patch Content-Disposition: attachment; filename=v3-0001-add-memorycontext-elog-print.patch; size=31082 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5z Z21sCmluZGV4IDFkMzQyOWZiZDkuLmE0MDE3YTA3NjAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMjQ4MjEsNiArMjQ4 MjEsMzcgQEAgU0VMRUNUIGNvbGxhdGlvbiBmb3IgKCdmb28nIENPTExBVEUgImRlX0RFIik7CiAg ICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KIAorICAgICAgPHJvdz4KKyAgICAg ICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1 cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfZ2V0X2JhY2tl bmRfbWVtb3J5X2NvbnRleHRzPC9wcmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAg ICAgPGZ1bmN0aW9uPnBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0czwvZnVuY3Rpb24+ICgK KyAgICAgICAgICA8cGFyYW1ldGVyPnBpZDwvcGFyYW1ldGVyPiA8dHlwZT5pbnRlZ2VyPC90eXBl PiwKKyAgICAgICAgICA8cGFyYW1ldGVyPm1heF9jaGlsZHJlbjwvcGFyYW1ldGVyPiA8dHlwZT5p bnRlZ2VyPC90eXBlPiApCisgICAgICAgIDxyZXR1cm52YWx1ZT5zZXRvZiByZWNvcmQ8L3JldHVy bnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgR2V0IG1lbW9y eSBjb250ZXh0cyB3aG9zZSBiYWNrZW5kIHByb2Nlc3MgaGFzIHRoZSBzcGVjaWZpZWQgcHJvY2Vz cyBJRC4KKyAgICAgICAgPHBhcmFtZXRlcj5tYXhfY2hpbGRyZW48L3BhcmFtZXRlcj4gbGltaXRz IHRoZSBtYXggbnVtYmVyIG9mIGNoaWxkcmVuCisgICAgICAgIHRvIHByaW50IHBlciBvbmUgcGFy ZW50IGNvbnRleHQuIDAgbWVhbnMgdW5saW1pdGVkLgorICAgICAgICBXaGVuIDxwYXJhbWV0ZXI+ cGlkPC9wYXJhbWV0ZXI+IGVxdWFscyAwLAorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2JhY2tl bmRfbWVtb3J5X2NvbnRleHRzPC9mdW5jdGlvbj4gZGlzcGxheXMgYWxsCisgICAgICAgIHRoZSBt ZW1vcnkgY29udGV4dHMgb2YgdGhlIGxvY2FsIHByb2Nlc3MgcmVnYXJkbGVzcyBvZgorICAgICAg ICA8cGFyYW1ldGVyPm1heF9jaGlsZHJlbjwvcGFyYW1ldGVyPi4gCisgICAgICAgIFdoZW4gPHBh cmFtZXRlcj5waWQ8L3BhcmFtZXRlcj4gZG9lcyBub3QgZXF1YWwgMCwKKyAgICAgICAgbWVtb3J5 IGNvbnRleHRzIHdpbGwgYmUgcHJpbnRlZCBiYXNlZCBvbiB0aGUgbG9nIGNvbmZpZ3VyYXRpb24g c2V0LgorICAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0icnVudGltZS1jb25maWctbG9nZ2luZyIv PiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgT25seSBzdXBlcnVzZXJzIGNhbiBjYWxs IHRoaXMgZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzcGVjaWZpZWQgcHJvY2VzcworICAgICAgICBp cyBub24tc3VwZXJ1c2VyIGJhY2tlbmQuCisgICAgICAgIE5vdGUgdGhhdCB3aGVuIG11bHRpcGxl CisgICAgICAgIDxmdW5jdGlvbj5wZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHM8L2Z1bmN0 aW9uPiBjYWxsZWQgaW4KKyAgICAgICAgc3VjY2Vzc2lvbiBvciBzaW11bHRhbmVvdXNseSwgPHBh cmFtZXRlcj5tYXhfY2hpbGRyZW48L3BhcmFtZXRlcj4gY2FuCisgICAgICAgIGJlIHRoZSBvbmUg b2YgYW5vdGhlcgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzPC9mdW5jdGlvbj4uCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KKwog ICAgICAgPHJvdz4KICAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEg cm9sZT0iZnVuY19zaWduYXR1cmUiPgogICAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IDBkY2E2NWRjN2IuLjQ4YTFhMGU5NTggMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAorKysgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKQEAgLTU1NSwxMCArNTU1LDEwIEBAIFJFVk9LRSBB TEwgT04gcGdfc2htZW1fYWxsb2NhdGlvbnMgRlJPTSBQVUJMSUM7CiBSRVZPS0UgRVhFQ1VURSBP TiBGVU5DVElPTiBwZ19nZXRfc2htZW1fYWxsb2NhdGlvbnMoKSBGUk9NIFBVQkxJQzsKIAogQ1JF QVRFIFZJRVcgcGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgQVMKLSAgICBTRUxFQ1QgKiBGUk9N IHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpOworICAgIFNFTEVDVCAqIEZST00gcGdf Z2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKDAsIDApOwogCiBSRVZPS0UgQUxMIE9OIHBnX2Jh Y2tlbmRfbWVtb3J5X2NvbnRleHRzIEZST00gUFVCTElDOwotUkVWT0tFIEVYRUNVVEUgT04gRlVO Q1RJT04gcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKCkgRlJPTSBQVUJMSUM7CitSRVZP S0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgRlJP TSBQVUJMSUM7CiAKIC0tIFN0YXRpc3RpY3Mgdmlld3MKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmlu ZGV4IDNlNGVjNTNhOTcuLmVkNTM5MzMyNGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAgLTQ2 LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFkdC5oIgogI2luY2x1ZGUgInN0 b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKKyNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgogCiAvKiBHVUNzICovCiBpbnQJCQlzaGFyZWRfbWVtb3J5X3R5cGUgPSBE RUZBVUxUX1NIQVJFRF9NRU1PUllfVFlQRTsKQEAgLTI2OSw2ICsyNzAsNyBAQCBDcmVhdGVTaGFy ZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiAJQlRyZWVTaG1lbUluaXQoKTsKIAlTeW5jU2Nh blNobWVtSW5pdCgpOwogCUFzeW5jU2htZW1Jbml0KCk7CisJTWN4dExvZ1NobWVtSW5pdCgpOwog CiAjaWZkZWYgRVhFQ19CQUNLRU5ECiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpp bmRleCBjNmE4ZDQ2MTFlLi5jNjFkNTA3OWUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3Np Z25hbC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKIC8qCiAgKiBUaGUgU0lHVVNSMSBzaWduYWwgaXMg bXVsdGlwbGV4ZWQgdG8gc3VwcG9ydCBzaWduYWxpbmcgbXVsdGlwbGUgZXZlbnQKQEAgLTQ0MCw2 ICs0NDEsMjAgQEAgSGFuZGxlUHJvY1NpZ25hbEJhcnJpZXJJbnRlcnJ1cHQodm9pZCkKIAkvKiBs YXRjaCB3aWxsIGJlIHNldCBieSBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlciAqLwogfQogCisv KgorICogSGFuZGxlUHJvY1NpZ25hbExvZ01lbW9yeUNvbnRleHQKKyAqCisgKiBIYW5kbGUgcmVj ZWlwdCBvZiBhbiBpbnRlcnJ1cHQgaW5kaWNhdGluZyBsb2dnaW5nIG1lbW9yeSBjb250ZXh0Lgor ICogU2lnbmFsIGhhbmRsZXIgcG9ydGlvbiBvZiBpbnRlcnJ1cHQgaGFuZGxpbmcuCisgKi8KK3N0 YXRpYyB2b2lkCitIYW5kbGVQcm9jU2lnbmFsTG9nTWVtb3J5Q29udGV4dCh2b2lkKQoreworCUlu dGVycnVwdFBlbmRpbmcgPSB0cnVlOworCUxvZ01lbW9yeUNvbnRleHRQZW5kaW5nID0gdHJ1ZTsK KwkvKiBsYXRjaCB3aWxsIGJlIHNldCBieSBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlciAqLwor fQorCiAvKgogICogUGVyZm9ybSBnbG9iYWwgYmFycmllciByZWxhdGVkIGludGVycnVwdCBjaGVj a2luZy4KICAqCkBAIC01ODAsNiArNTk1LDI3IEBAIFByb2Nlc3NQcm9jU2lnbmFsQmFycmllcih2 b2lkKQogCUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZNeVByb2NTaWduYWxTbG90LT5wc3Nf YmFycmllckNWKTsKIH0KIAorLyoKKyAqIFByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0 CisgKgkJVGhlIHBvcnRpb24gb2YgbG9nZ2luZyBtZW1vcnkgY29udGV4dCBpbnRlcnJ1cHQgaGFu ZGxpbmcgdGhhdCBydW5zCisgKgkJb3V0c2lkZSBvZiB0aGUgc2lnbmFsIGhhbmRsZXIuCisgKi8K K3ZvaWQKK1Byb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KHZvaWQpCit7CisJaW50CQlt YXhfY2hpbGRyZW47CisKKwlMb2dNZW1vcnlDb250ZXh0UGVuZGluZyA9IGZhbHNlOworCisJbWF4 X2NoaWxkcmVuID0gbWN4dExvZ0RhdGEtPm1heENoaWxkcmVuUGVyQ29udGV4dDsKKworCWVyZXBv cnQoTE9HLAorCQkoZXJybXNnKCJMb2dnaW5nIG1lbW9yeSBjb250ZXh0cyBvZiBQSUQgJWQuIE1h eCBudW1iZXIgb2YgY2hpbGRyZW4gcGVyIGNvbnRleHQgaXMgJWQiLCBNeVByb2NQaWQsIG1heF9j aGlsZHJlbikpKTsKKworCU1lbW9yeUNvbnRleHRTdGF0c0RldGFpbChUb3BNZW1vcnlDb250ZXh0 LCBtYXhfY2hpbGRyZW4sIGZhbHNlKTsKK30KKworCiAvKgogICogSWYgaXQgdHVybnMgb3V0IHRo YXQgd2UgY291bGRuJ3QgYWJzb3JiIG9uZSBvciBtb3JlIGJhcnJpZXIgdHlwZXMsIGVpdGhlcgog ICogYmVjYXVzZSB0aGUgYmFycmllci1wcm9jZXNzaW5nIGZ1bmN0aW9ucyByZXR1cm5lZCBmYWxz ZSBvciBkdWUgdG8gYW4gZXJyb3IsCkBAIC02NzUsNiArNzExLDkgQEAgcHJvY3NpZ25hbF9zaWd1 c3IxX2hhbmRsZXIoU0lHTkFMX0FSR1MpCiAJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX1JF Q09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTikpCiAJCVJlY292ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQo UFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9CVUZGRVJQSU4pOwogCisJaWYgKENoZWNrUHJvY1Np Z25hbChQUk9DU0lHX0xPR19NRU1PUllfQ09OVEVYVCkpCisJCUhhbmRsZVByb2NTaWduYWxMb2dN ZW1vcnlDb250ZXh0KCk7CisKIAlTZXRMYXRjaChNeUxhdGNoKTsKIAogCWVycm5vID0gc2F2ZV9l cnJubzsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNr ZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCAyYjFiNjgxMDlmLi5hZmFmM2IxY2NlIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9w b3N0Z3Jlcy5jCkBAIC0zMjk1LDYgKzMyOTUsOSBAQCBQcm9jZXNzSW50ZXJydXB0cyh2b2lkKQog CiAJaWYgKFBhcmFsbGVsTWVzc2FnZVBlbmRpbmcpCiAJCUhhbmRsZVBhcmFsbGVsTWVzc2FnZXMo KTsKKworCWlmIChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykKKwkJUHJvY2Vzc0xvZ01lbW9yeUNv bnRleHRJbnRlcnJ1cHQoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvbWN4dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKaW5kZXgg YzAyZmE0NzU1MC4uZGUyMDQwNjQwYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L21jeHRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwpAQCAt MTksNiArMTksNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm1iL3BnX3dj aGFyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9tY3h0 ZnVuY3MuaCIKIAogLyogLS0tLS0tLS0tLQogICogVGhlIG1heCBieXRlcyBmb3Igc2hvd2luZyBp ZGVudGlmaWVycyBvZiBNZW1vcnlDb250ZXh0LgpAQCAtNjEsNyArNjIsNyBAQCBQdXRNZW1vcnlD b250ZXh0c1N0YXRzVHVwbGVTdG9yZShUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3JlLAogCiAJLyog RXhhbWluZSB0aGUgY29udGV4dCBpdHNlbGYgKi8KIAltZW1zZXQoJnN0YXQsIDAsIHNpemVvZihz dGF0KSk7Ci0JKCpjb250ZXh0LT5tZXRob2RzLT5zdGF0cykgKGNvbnRleHQsIE5VTEwsICh2b2lk ICopICZsZXZlbCwgJnN0YXQpOworCSgqY29udGV4dC0+bWV0aG9kcy0+c3RhdHMpIChjb250ZXh0 LCBOVUxMLCAodm9pZCAqKSAmbGV2ZWwsICZzdGF0LCB0cnVlKTsKIAogCW1lbXNldCh2YWx1ZXMs IDAsIHNpemVvZih2YWx1ZXMpKTsKIAltZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOwpA QCAtMTE3LDYgKzExOCw5IEBAIFB1dE1lbW9yeUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlKFR1cGxl c3RvcmVzdGF0ZSAqdHVwc3RvcmUsCiBEYXR1bQogcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CisJaW50CQlwaWQgPSBQR19HRVRBUkdfSU5UMzIoMCk7 CisJaW50CQltYXhfY2hpbGRyZW4gPSBQR19HRVRBUkdfSU5UMzIoMSk7CisKIAlSZXR1cm5TZXRJ bmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CiAJVHVw bGVEZXNjCXR1cGRlc2M7CiAJVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZTsKQEAgLTE0Nyw4ICsx NTEsMTEgQEAgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKFBHX0ZVTkNUSU9OX0FSR1Mp CiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKLQlQdXRNZW1vcnlDb250 ZXh0c1N0YXRzVHVwbGVTdG9yZSh0dXBzdG9yZSwgdHVwZGVzYywKLQkJCQkJCQkJVG9wTWVtb3J5 Q29udGV4dCwgTlVMTCwgMCk7CisJaWYoIHBpZCA9PSAwKQorCQlQdXRNZW1vcnlDb250ZXh0c1N0 YXRzVHVwbGVTdG9yZSh0dXBzdG9yZSwgdHVwZGVzYywKKwkJCQkJCQkJCVRvcE1lbW9yeUNvbnRl eHQsIE5VTEwsIDApOworCWVsc2UKKwkJcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKHBp ZCwgbWF4X2NoaWxkcmVuKTsKIAogCS8qIGNsZWFuIHVwIGFuZCByZXR1cm4gdGhlIHR1cGxlc3Rv cmUgKi8KIAl0dXBsZXN0b3JlX2RvbmVzdG9yaW5nKHR1cHN0b3JlKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9n bG9iYWxzLmMKaW5kZXggNzNlMGE2NzJhZS4uNmMyNzA2NWY5NiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9n bG9iYWxzLmMKQEAgLTM0LDYgKzM0LDcgQEAgdm9sYXRpbGUgc2lnX2F0b21pY190IENsaWVudENv bm5lY3Rpb25Mb3N0ID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZUluVHJhbnNh Y3Rpb25TZXNzaW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNf dCBJZGxlU2Vzc2lvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWlj X3QgUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nID0gZmFsc2U7Cit2b2xhdGlsZSBzaWdfYXRvbWlj X3QgTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHVpbnQzMiBJbnRl cnJ1cHRIb2xkb2ZmQ291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIFF1ZXJ5Q2FuY2VsSG9sZG9m ZkNvdW50ID0gMDsKIHZvbGF0aWxlIHVpbnQzMiBDcml0U2VjdGlvbkNvdW50ID0gMDsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv bW1nci9hc2V0LmMKaW5kZXggZWM2YzEzMGQwZi4uOGU3ZmUwOWEwZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvbW1nci9hc2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9h c2V0LmMKQEAgLTI3Miw3ICsyNzIsOCBAQCBzdGF0aWMgU2l6ZSBBbGxvY1NldEdldENodW5rU3Bh Y2UoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpwb2ludGVyKTsKIHN0YXRpYyBib29sIEFs bG9jU2V0SXNFbXB0eShNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogc3RhdGljIHZvaWQgQWxsb2NT ZXRTdGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJCQkgIE1lbW9yeVN0YXRzUHJpbnRG dW5jIHByaW50ZnVuYywgdm9pZCAqcGFzc3RocnUsCi0JCQkJCQkgIE1lbW9yeUNvbnRleHRDb3Vu dGVycyAqdG90YWxzKTsKKwkJCQkJCSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJ CQkJCQkgIGJvb2wgaXNfZHN0X3N0ZGVycik7CiAKICNpZmRlZiBNRU1PUllfQ09OVEVYVF9DSEVD S0lORwogc3RhdGljIHZvaWQgQWxsb2NTZXRDaGVjayhNZW1vcnlDb250ZXh0IGNvbnRleHQpOwpA QCAtMTMzNiwxMSArMTMzNywxMiBAQCBBbGxvY1NldElzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250 ZXh0KQogICogcHJpbnRmdW5jOiBpZiBub3QgTlVMTCwgcGFzcyBhIGh1bWFuLXJlYWRhYmxlIHN0 YXRzIHN0cmluZyB0byB0aGlzLgogICogcGFzc3RocnU6IHBhc3MgdGhpcyBwb2ludGVyIHRocm91 Z2ggdG8gcHJpbnRmdW5jLgogICogdG90YWxzOiBpZiBub3QgTlVMTCwgYWRkIHN0YXRzIGFib3V0 IHRoaXMgY29udGV4dCBpbnRvICp0b3RhbHMuCisgKiBpc19kc3Rfc3RkZXJyOiBpcyB0aGUgb3V0 cHV0IHNob3VsZCBiZSBzdGRlcnIgb3IgZWxvZy4KICAqLwogc3RhdGljIHZvaWQKIEFsbG9jU2V0 U3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0LAogCQkJICBNZW1vcnlTdGF0c1ByaW50RnVuYyBw cmludGZ1bmMsIHZvaWQgKnBhc3N0aHJ1LAotCQkJICBNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRv dGFscykKKwkJCSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMsIGJvb2wgaXNfZHN0X3N0 ZGVycikKIHsKIAlBbGxvY1NldAlzZXQgPSAoQWxsb2NTZXQpIGNvbnRleHQ7CiAJU2l6ZQkJbmJs b2NrcyA9IDA7CkBAIC0xMzc5LDcgKzEzODEsNyBAQCBBbGxvY1NldFN0YXRzKE1lbW9yeUNvbnRl eHQgY29udGV4dCwKIAkJCQkgIiV6dSB0b3RhbCBpbiAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpk IGNodW5rcyk7ICV6dSB1c2VkIiwKIAkJCQkgdG90YWxzcGFjZSwgbmJsb2NrcywgZnJlZXNwYWNl LCBmcmVlY2h1bmtzLAogCQkJCSB0b3RhbHNwYWNlIC0gZnJlZXNwYWNlKTsKLQkJcHJpbnRmdW5j KGNvbnRleHQsIHBhc3N0aHJ1LCBzdGF0c19zdHJpbmcpOworCQlwcmludGZ1bmMoY29udGV4dCwg cGFzc3RocnUsIHN0YXRzX3N0cmluZywgaXNfZHN0X3N0ZGVycik7CiAJfQogCiAJaWYgKHRvdGFs cykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlvbi5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbW1nci9nZW5lcmF0aW9uLmMKaW5kZXggMmI5MDAzNDc2NC4uYjI4NjMw OGFhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9nZW5lcmF0aW9uLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9nZW5lcmF0aW9uLmMKQEAgLTE1NSw3ICsxNTUsOCBA QCBzdGF0aWMgU2l6ZSBHZW5lcmF0aW9uR2V0Q2h1bmtTcGFjZShNZW1vcnlDb250ZXh0IGNvbnRl eHQsIHZvaWQgKnBvaW50ZXIpOwogc3RhdGljIGJvb2wgR2VuZXJhdGlvbklzRW1wdHkoTWVtb3J5 Q29udGV4dCBjb250ZXh0KTsKIHN0YXRpYyB2b2lkIEdlbmVyYXRpb25TdGF0cyhNZW1vcnlDb250 ZXh0IGNvbnRleHQsCiAJCQkJCQkJTWVtb3J5U3RhdHNQcmludEZ1bmMgcHJpbnRmdW5jLCB2b2lk ICpwYXNzdGhydSwKLQkJCQkJCQlNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscyk7CisJCQkJ CQkJTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMsCisJCQkJCQkJYm9vbCBpc19kc3Rfc3Rk ZXJyKTsKIAogI2lmZGVmIE1FTU9SWV9DT05URVhUX0NIRUNLSU5HCiBzdGF0aWMgdm9pZCBHZW5l cmF0aW9uQ2hlY2soTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKQEAgLTY2NSw2ICs2NjYsNyBAQCBH ZW5lcmF0aW9uSXNFbXB0eShNZW1vcnlDb250ZXh0IGNvbnRleHQpCiAgKiBwcmludGZ1bmM6IGlm IG5vdCBOVUxMLCBwYXNzIGEgaHVtYW4tcmVhZGFibGUgc3RhdHMgc3RyaW5nIHRvIHRoaXMuCiAg KiBwYXNzdGhydTogcGFzcyB0aGlzIHBvaW50ZXIgdGhyb3VnaCB0byBwcmludGZ1bmMuCiAgKiB0 b3RhbHM6IGlmIG5vdCBOVUxMLCBhZGQgc3RhdHMgYWJvdXQgdGhpcyBjb250ZXh0IGludG8gKnRv dGFscy4KKyAqIGlzX2RzdF9zdGRlcnI6IGlzIHRoZSBvdXRwdXQgc2hvdWxkIGJlIHN0ZGVyciBv ciBlbG9nLgogICoKICAqIFhYWCBmcmVlc3BhY2Ugb25seSBhY2NvdW50cyBmb3IgZW1wdHkgc3Bh Y2UgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2ssIG5vdAogICogc3BhY2Ugb2YgZnJlZWQgY2h1bmtz ICh3aGljaCBpcyB1bmtub3duKS4KQEAgLTY3Miw3ICs2NzQsNyBAQCBHZW5lcmF0aW9uSXNFbXB0 eShNZW1vcnlDb250ZXh0IGNvbnRleHQpCiBzdGF0aWMgdm9pZAogR2VuZXJhdGlvblN0YXRzKE1l bW9yeUNvbnRleHQgY29udGV4dCwKIAkJCQlNZW1vcnlTdGF0c1ByaW50RnVuYyBwcmludGZ1bmMs IHZvaWQgKnBhc3N0aHJ1LAotCQkJCU1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzKQorCQkJ CU1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzLCBib29sIGlzX2RzdF9zdGRlcnIpCiB7CiAJ R2VuZXJhdGlvbkNvbnRleHQgKnNldCA9IChHZW5lcmF0aW9uQ29udGV4dCAqKSBjb250ZXh0Owog CVNpemUJCW5ibG9ja3MgPSAwOwpAQCAtNzA0LDcgKzcwNiw3IEBAIEdlbmVyYXRpb25TdGF0cyhN ZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJICIlenUgdG90YWwgaW4gJXpkIGJsb2NrcyAoJXpk IGNodW5rcyk7ICV6dSBmcmVlICglemQgY2h1bmtzKTsgJXp1IHVzZWQiLAogCQkJCSB0b3RhbHNw YWNlLCBuYmxvY2tzLCBuY2h1bmtzLCBmcmVlc3BhY2UsCiAJCQkJIG5mcmVlY2h1bmtzLCB0b3Rh bHNwYWNlIC0gZnJlZXNwYWNlKTsKLQkJcHJpbnRmdW5jKGNvbnRleHQsIHBhc3N0aHJ1LCBzdGF0 c19zdHJpbmcpOworCQlwcmludGZ1bmMoY29udGV4dCwgcGFzc3RocnUsIHN0YXRzX3N0cmluZywg aXNfZHN0X3N0ZGVycik7CiAJfQogCiAJaWYgKHRvdGFscykKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL21tZ3IvbWN4dC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMKaW5k ZXggODQ0NzJiOTE1OC4uZjAyMzMxYzM2YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv bW1nci9tY3h0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMKQEAgLTIzLDYg KzIzLDEwIEBACiAKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2Fy cmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCisjaW5jbHVkZSAidXRpbHMv Zm1ncnByb3Rvcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRp bHMvbWVtdXRpbHMuaCIKIApAQCAtMzcsNiArNDEsMTMgQEAKICAqLwogTWVtb3J5Q29udGV4dCBD dXJyZW50TWVtb3J5Q29udGV4dCA9IE5VTEw7CiAKKy8qCisgKiBNY3h0TG9nRGF0YQorICogCQlE YXRhIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gbWVtb3J5IGNvbnRleHQgbG9nZ2luZworICog CQlkdW1wZXIgYW5kIHJlcXVlc3Rvci4KKyAqLworTWN4dExvZ0RhdGEgKm1jeHRMb2dEYXRhID0g TlVMTDsKKwogLyoKICAqIFN0YW5kYXJkIHRvcC1sZXZlbCBjb250ZXh0cy4gRm9yIGEgZGVzY3Jp cHRpb24gb2YgdGhlIHB1cnBvc2Ugb2YgZWFjaAogICogb2YgdGhlc2UgY29udGV4dHMsIHJlZmVy IHRvIHNyYy9iYWNrZW5kL3V0aWxzL21tZ3IvUkVBRE1FCkBAIC01NSw5ICs2NiwxMSBAQCBNZW1v cnlDb250ZXh0IFBvcnRhbENvbnRleHQgPSBOVUxMOwogc3RhdGljIHZvaWQgTWVtb3J5Q29udGV4 dENhbGxSZXNldENhbGxiYWNrcyhNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogc3RhdGljIHZvaWQg TWVtb3J5Q29udGV4dFN0YXRzSW50ZXJuYWwoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbGV2 ZWwsCiAJCQkJCQkJCQkgICBib29sIHByaW50LCBpbnQgbWF4X2NoaWxkcmVuLAotCQkJCQkJCQkJ ICAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMpOworCQkJCQkJCQkJICAgTWVtb3J5Q29u dGV4dENvdW50ZXJzICp0b3RhbHMsCisJCQkJCQkJCQkgICBib29sIGlzX2RzdF9zdGRlcnIpOwog c3RhdGljIHZvaWQgTWVtb3J5Q29udGV4dFN0YXRzUHJpbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0 LCB2b2lkICpwYXNzdGhydSwKLQkJCQkJCQkJCWNvbnN0IGNoYXIgKnN0YXRzX3N0cmluZyk7CisJ CQkJCQkJCQljb25zdCBjaGFyICpzdGF0c19zdHJpbmcsCisJCQkJCQkJCQlib29sIGlzX2RzdF9z dGRlcnIpOwogCiAvKgogICogWW91IHNob3VsZCBub3QgZG8gbWVtb3J5IGFsbG9jYXRpb25zIHdp dGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24sIGJlY2F1c2UKQEAgLTQ4Nyw2ICs1MDAsODQgQEAgTWVt b3J5Q29udGV4dE1lbUFsbG9jYXRlZChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGJvb2wgcmVjdXJz ZSkKIAlyZXR1cm4gdG90YWw7CiB9CiAKKy8qCisgKiBNY3h0TG9nU2htZW1Jbml0CisgKgkgCUlu aXRpYWxpemUgc2hhcmVkIG1lbW9yeSBhcmVhCisgKi8KK3ZvaWQKK01jeHRMb2dTaG1lbUluaXQo dm9pZCkKK3sKKwlib29sCQlmb3VuZDsKKworCW1jeHRMb2dEYXRhID0gKE1jeHRMb2dEYXRhICop CisJCVNobWVtSW5pdFN0cnVjdCgiTWVtb3J5IENvbnRleHQgTG9nZ2luZyBEYXRhIiwKKwkJCQkJ CXNpemVvZihpbnQpLAorCQkJCQkJJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCXsKKwkJbWN4dExv Z0RhdGEtPm1heENoaWxkcmVuUGVyQ29udGV4dCA9IDA7CisJfQorfQorCisvKgorICogcGdfbG9n X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzCisgKgkJTG9nIG1lbW9yeSBjb250ZXh0cyBvZiB0aGUg c3BlY2lmaWVkIGJhY2tlbmQgcHJvY2Vzcy4KKyAqLworRGF0dW0KK3BnX2xvZ19iYWNrZW5kX21l bW9yeV9jb250ZXh0cyhpbnQgcGlkLCBpbnQgbWF4X2NoaWxkcmVuKQoreworCVBHUFJPQwkJKnBy b2MgPSBCYWNrZW5kUGlkR2V0UHJvYyhwaWQpOworCisJaWYobWF4X2NoaWxkcmVuIDwgMCkKKwl7 CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiVGhlIG1heGltdW0gbnVtYmVyIG9mIGNo aWxkcmVuIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAiKSkpOworCisJCVBHX1JF VFVSTl9CT09MKGZhbHNlKTsKKwl9CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgdGhlIHRhcmdl dCBwcm9jZXNzIGlzIFBvc3RncmVTUUwgYmFja2VuZCBwcm9jZXNzLgorCSAqLworCWlmIChwcm9j ID09IE5VTEwpCisJeworCQkvKgorCQkgKiBBY2NvcmRpbmcgdG8gdGhlIHRocmVhZCBiZWxvdywg aXQgbWlnaHQgYmUgYmV0dGVyIHRvCisJCSAqIGNoYW5nZSB0aGlzIG1lc3NhZ2UuCisJCSAqCisJ CSAqIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FMajJBQ1c3UnItUjdt QmNCUWlYV1BwJTNESlY1Y2hhampUZHVkTGlGNVljcFctQm1IaGclNDBtYWlsLmdtYWlsLmNvbQor CQkgKgorCQkgKiBVbnRpbCB0aGUgY29uY2x1c2lvbiBvZiB0aGUgZGlzY3Vzc2lvbiwgb3V0cHV0 IHRoZSBzYW1lCisJCSAqIG1lc3NhZ2UgYXMgcGdfY2FuY2VsX2JhY2tlbmQoKS4KKwkJICovCisJ CWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJQSUQgJWQgaXMgbm90IGEgUG9zdGdyZVNR TCBzZXJ2ZXIgcHJvY2VzcyIsIHBpZCkpKTsKKworCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJ fQorCisJLyogT25seSBhbGxvdyBzdXBlcnVzZXJzIHRvIHByaW50IG1lbW9yeSBjb250ZXh0cy4g Ki8KKwlpZiAoIXN1cGVydXNlcigpKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJj b2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJIGVycm1zZygibXVzdCBi ZSBhIHN1cGVydXNlciB0byBsb2cgbWVtb3J5IGNvbnRleHRzIikpKTsKKwkJUEdfUkVUVVJOX0JP T0woZmFsc2UpOworCX0KKworCW1jeHRMb2dEYXRhLT5tYXhDaGlsZHJlblBlckNvbnRleHQgPSBt YXhfY2hpbGRyZW47CisKKwlpZighU2VuZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX0xPR19NRU1P UllfQ09OVEVYVCwgcHJvYy0+YmFja2VuZElkKSkKKwkJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7CisJ ZWxzZQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coImZhaWxlZCB0byBzZW5k IHNpZ25hbDogJW0iKSkpOworCisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9Cit9CisKIC8q CiAgKiBNZW1vcnlDb250ZXh0U3RhdHMKICAqCQlQcmludCBzdGF0aXN0aWNzIGFib3V0IHRoZSBu YW1lZCBjb250ZXh0IGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzLgpAQCAtNDk5LDcgKzU5MCw3IEBA IHZvaWQKIE1lbW9yeUNvbnRleHRTdGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQpCiB7CiAJLyog QSBoYXJkLXdpcmVkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaXMgdXN1YWxseSBn b29kIGVub3VnaCAqLwotCU1lbW9yeUNvbnRleHRTdGF0c0RldGFpbChjb250ZXh0LCAxMDApOwor CU1lbW9yeUNvbnRleHRTdGF0c0RldGFpbChjb250ZXh0LCAxMDAsIHRydWUpOwogfQogCiAvKgpA QCAtNTA4LDE5ICs1OTksMjggQEAgTWVtb3J5Q29udGV4dFN0YXRzKE1lbW9yeUNvbnRleHQgY29u dGV4dCkKICAqIEVudHJ5IHBvaW50IGZvciB1c2UgaWYgeW91IHdhbnQgdG8gdmFyeSB0aGUgbnVt YmVyIG9mIGNoaWxkIGNvbnRleHRzIHNob3duLgogICovCiB2b2lkCi1NZW1vcnlDb250ZXh0U3Rh dHNEZXRhaWwoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbWF4X2NoaWxkcmVuKQorTWVtb3J5 Q29udGV4dFN0YXRzRGV0YWlsKE1lbW9yeUNvbnRleHQgY29udGV4dCwgaW50IG1heF9jaGlsZHJl biwgYm9vbCBpc19kc3Rfc3RkZXJyKQogewogCU1lbW9yeUNvbnRleHRDb3VudGVycyBncmFuZF90 b3RhbHM7CiAKIAltZW1zZXQoJmdyYW5kX3RvdGFscywgMCwgc2l6ZW9mKGdyYW5kX3RvdGFscykp OwogCi0JTWVtb3J5Q29udGV4dFN0YXRzSW50ZXJuYWwoY29udGV4dCwgMCwgdHJ1ZSwgbWF4X2No aWxkcmVuLCAmZ3JhbmRfdG90YWxzKTsKKwlNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChjb250 ZXh0LCAwLCB0cnVlLCBtYXhfY2hpbGRyZW4sICZncmFuZF90b3RhbHMsIGlzX2RzdF9zdGRlcnIp OwogCi0JZnByaW50ZihzdGRlcnIsCi0JCQkiR3JhbmQgdG90YWw6ICV6dSBieXRlcyBpbiAlemQg YmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2VkXG4iLAotCQkJZ3JhbmRfdG90 YWxzLnRvdGFsc3BhY2UsIGdyYW5kX3RvdGFscy5uYmxvY2tzLAotCQkJZ3JhbmRfdG90YWxzLmZy ZWVzcGFjZSwgZ3JhbmRfdG90YWxzLmZyZWVjaHVua3MsCi0JCQlncmFuZF90b3RhbHMudG90YWxz cGFjZSAtIGdyYW5kX3RvdGFscy5mcmVlc3BhY2UpOworCWlmIChpc19kc3Rfc3RkZXJyKQorCQlm cHJpbnRmKHN0ZGVyciwKKwkJCQkiR3JhbmQgdG90YWw6ICV6dSBieXRlcyBpbiAlemQgYmxvY2tz OyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2VkXG4iLAorCQkJCWdyYW5kX3RvdGFscy50 b3RhbHNwYWNlLCBncmFuZF90b3RhbHMubmJsb2NrcywKKwkJCQlncmFuZF90b3RhbHMuZnJlZXNw YWNlLCBncmFuZF90b3RhbHMuZnJlZWNodW5rcywKKwkJCQlncmFuZF90b3RhbHMudG90YWxzcGFj ZSAtIGdyYW5kX3RvdGFscy5mcmVlc3BhY2UpOworCWVsc2UKKwkJZXJlcG9ydChMT0dfU0VSVkVS X09OTFksCisJCQkJKGVycmhpZGVzdG10KHRydWUpLAorCQkJCWVycmhpZGVjb250ZXh0KHRydWUp LAorCQkJCWVycm1zZ19pbnRlcm5hbCgiR3JhbmQgdG90YWw6ICV6dSBieXRlcyBpbiAlemQgYmxv Y2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2VkIiwKKwkJCQlncmFuZF90b3RhbHMu dG90YWxzcGFjZSwgZ3JhbmRfdG90YWxzLm5ibG9ja3MsCisJCQkJZ3JhbmRfdG90YWxzLmZyZWVz cGFjZSwgZ3JhbmRfdG90YWxzLmZyZWVjaHVua3MsCisJCQkJZ3JhbmRfdG90YWxzLnRvdGFsc3Bh Y2UgLSBncmFuZF90b3RhbHMuZnJlZXNwYWNlKSkpOwogfQogCiAvKgpAQCAtNTMzLDcgKzYzMyw4 IEBAIE1lbW9yeUNvbnRleHRTdGF0c0RldGFpbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBt YXhfY2hpbGRyZW4pCiBzdGF0aWMgdm9pZAogTWVtb3J5Q29udGV4dFN0YXRzSW50ZXJuYWwoTWVt b3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbGV2ZWwsCiAJCQkJCQkgICBib29sIHByaW50LCBpbnQg bWF4X2NoaWxkcmVuLAotCQkJCQkJICAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0b3RhbHMpCisJ CQkJCQkgICBNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscywKKwkJCQkJCSAgIGJvb2wgaXNf ZHN0X3N0ZGVycikKIHsKIAlNZW1vcnlDb250ZXh0Q291bnRlcnMgbG9jYWxfdG90YWxzOwogCU1l bW9yeUNvbnRleHQgY2hpbGQ7CkBAIC01NDUsMTEgKzY0NiwxMyBAQCBNZW1vcnlDb250ZXh0U3Rh dHNJbnRlcm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBsZXZlbCwKIAljb250ZXh0LT5t ZXRob2RzLT5zdGF0cyhjb250ZXh0LAogCQkJCQkJCXByaW50ID8gTWVtb3J5Q29udGV4dFN0YXRz UHJpbnQgOiBOVUxMLAogCQkJCQkJCSh2b2lkICopICZsZXZlbCwKLQkJCQkJCQl0b3RhbHMpOwor CQkJCQkJCXRvdGFscywgaXNfZHN0X3N0ZGVycik7CiAKIAkvKgogCSAqIEV4YW1pbmUgY2hpbGRy ZW4uICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG1heF9jaGlsZHJlbiBvZiB0aGVtLCB3ZSBkbwog CSAqIG5vdCBwcmludCB0aGUgcmVzdCBleHBsaWNpdGx5LCBidXQganVzdCBzdW1tYXJpemUgdGhl bS4KKwkgKgorCSAqIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIDAgdG8gbWF4X2NoaWxkcmVuIG1lYW5z IHVtbGltaXRlZC4KIAkgKi8KIAltZW1zZXQoJmxvY2FsX3RvdGFscywgMCwgc2l6ZW9mKGxvY2Fs X3RvdGFscykpOwogCkBAIC01NTcsMzMgKzY2MCw1MCBAQCBNZW1vcnlDb250ZXh0U3RhdHNJbnRl cm5hbChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGludCBsZXZlbCwKIAkJIGNoaWxkICE9IE5VTEw7 CiAJCSBjaGlsZCA9IGNoaWxkLT5uZXh0Y2hpbGQsIGljaGlsZCsrKQogCXsKLQkJaWYgKGljaGls ZCA8IG1heF9jaGlsZHJlbikKKwkJaWYgKGljaGlsZCA8IG1heF9jaGlsZHJlbiB8fCBtYXhfY2hp bGRyZW4gPT0gMCkKIAkJCU1lbW9yeUNvbnRleHRTdGF0c0ludGVybmFsKGNoaWxkLCBsZXZlbCAr IDEsCiAJCQkJCQkJCQkgICBwcmludCwgbWF4X2NoaWxkcmVuLAotCQkJCQkJCQkJICAgdG90YWxz KTsKKwkJCQkJCQkJCSAgIHRvdGFscywKKwkJCQkJCQkJCSAgIGlzX2RzdF9zdGRlcnIpOwogCQll bHNlCiAJCQlNZW1vcnlDb250ZXh0U3RhdHNJbnRlcm5hbChjaGlsZCwgbGV2ZWwgKyAxLAogCQkJ CQkJCQkJICAgZmFsc2UsIG1heF9jaGlsZHJlbiwKLQkJCQkJCQkJCSAgICZsb2NhbF90b3RhbHMp OworCQkJCQkJCQkJICAgJmxvY2FsX3RvdGFscywKKwkJCQkJCQkJCSAgIGlzX2RzdF9zdGRlcnIp OwogCX0KIAotCS8qIERlYWwgd2l0aCBleGNlc3MgY2hpbGRyZW4gKi8KLQlpZiAoaWNoaWxkID4g bWF4X2NoaWxkcmVuKQorCS8qRGVhbCB3aXRoIGV4Y2VzcyBjaGlsZHJlbiAqLworCWlmIChpY2hp bGQgPiBtYXhfY2hpbGRyZW4gJiYgbWF4X2NoaWxkcmVuICE9IDApCiAJewogCQlpZiAocHJpbnQp CiAJCXsKIAkJCWludAkJCWk7CiAKLQkJCWZvciAoaSA9IDA7IGkgPD0gbGV2ZWw7IGkrKykKLQkJ CQlmcHJpbnRmKHN0ZGVyciwgIiAgIik7Ci0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJIiVkIG1v cmUgY2hpbGQgY29udGV4dHMgY29udGFpbmluZyAlenUgdG90YWwgaW4gJXpkIGJsb2NrczsgJXp1 IGZyZWUgKCV6ZCBjaHVua3MpOyAlenUgdXNlZFxuIiwKLQkJCQkJaWNoaWxkIC0gbWF4X2NoaWxk cmVuLAotCQkJCQlsb2NhbF90b3RhbHMudG90YWxzcGFjZSwKLQkJCQkJbG9jYWxfdG90YWxzLm5i bG9ja3MsCi0JCQkJCWxvY2FsX3RvdGFscy5mcmVlc3BhY2UsCi0JCQkJCWxvY2FsX3RvdGFscy5m cmVlY2h1bmtzLAotCQkJCQlsb2NhbF90b3RhbHMudG90YWxzcGFjZSAtIGxvY2FsX3RvdGFscy5m cmVlc3BhY2UpOworCQkJaWYgKGlzX2RzdF9zdGRlcnIpCisJCQl7CisJCQkJZm9yIChpID0gMDsg aSA8PSBsZXZlbDsgaSsrKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgIik7CisJCQkJZnByaW50 ZihzdGRlcnIsCisJCQkJCQkiJWQgbW9yZSBjaGlsZCBjb250ZXh0cyBjb250YWluaW5nICV6dSB0 b3RhbCBpbiAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1c2VkXG4iLAor CQkJCQkJaWNoaWxkIC0gbWF4X2NoaWxkcmVuLAorCQkJCQkJbG9jYWxfdG90YWxzLnRvdGFsc3Bh Y2UsCisJCQkJCQlsb2NhbF90b3RhbHMubmJsb2NrcywKKwkJCQkJCWxvY2FsX3RvdGFscy5mcmVl c3BhY2UsCisJCQkJCQlsb2NhbF90b3RhbHMuZnJlZWNodW5rcywKKwkJCQkJCWxvY2FsX3RvdGFs cy50b3RhbHNwYWNlIC0gbG9jYWxfdG90YWxzLmZyZWVzcGFjZSk7CisJCQl9CisJCQllbHNlCisJ CQkJZXJlcG9ydChMT0dfU0VSVkVSX09OTFksCisJCQkJCQkoZXJyaGlkZXN0bXQodHJ1ZSksCisJ CQkJCQllcnJoaWRlY29udGV4dCh0cnVlKSwKKwkJCQkJCWVycm1zZ19pbnRlcm5hbCgibGV2ZWw6 ICVkICVkIG1vcmUgY2hpbGQgY29udGV4dHMgY29udGFpbmluZyAlenUgdG90YWwgaW4gJXpkIGJs b2NrczsgJXp1IGZyZWUgKCV6ZCBjaHVua3MpOyAlenUgdXNlZCIsCisJCQkJCQlsZXZlbCwKKwkJ CQkJCWljaGlsZCAtIG1heF9jaGlsZHJlbiwKKwkJCQkJCWxvY2FsX3RvdGFscy50b3RhbHNwYWNl LAorCQkJCQkJbG9jYWxfdG90YWxzLm5ibG9ja3MsCisJCQkJCQlsb2NhbF90b3RhbHMuZnJlZXNw YWNlLAorCQkJCQkJbG9jYWxfdG90YWxzLmZyZWVjaHVua3MsCisJCQkJCQlsb2NhbF90b3RhbHMu dG90YWxzcGFjZSAtIGxvY2FsX3RvdGFscy5mcmVlc3BhY2UpKSk7CiAJCX0KIAogCQlpZiAodG90 YWxzKQpAQCAtNjA1LDEyICs3MjUsMTQgQEAgTWVtb3J5Q29udGV4dFN0YXRzSW50ZXJuYWwoTWVt b3J5Q29udGV4dCBjb250ZXh0LCBpbnQgbGV2ZWwsCiAgKi8KIHN0YXRpYyB2b2lkCiBNZW1vcnlD b250ZXh0U3RhdHNQcmludChNZW1vcnlDb250ZXh0IGNvbnRleHQsIHZvaWQgKnBhc3N0aHJ1LAot CQkJCQkJY29uc3QgY2hhciAqc3RhdHNfc3RyaW5nKQorCQkJCQkJY29uc3QgY2hhciAqc3RhdHNf c3RyaW5nLAorCQkJCQkJYm9vbCBpc19kc3Rfc3RkZXJyKQogewogCWludAkJCWxldmVsID0gKihp bnQgKikgcGFzc3RocnU7CiAJY29uc3QgY2hhciAqbmFtZSA9IGNvbnRleHQtPm5hbWU7CiAJY29u c3QgY2hhciAqaWRlbnQgPSBjb250ZXh0LT5pZGVudDsKIAlpbnQJCQlpOworCWNoYXIJCXRydW5j YXRlZF9pZGVudFsxMTBdOwogCiAJLyoKIAkgKiBJdCBzZWVtcyBwcmVmZXJhYmxlIHRvIGxhYmVs IGR5bmFoYXNoIGNvbnRleHRzIHdpdGgganVzdCB0aGUgaGFzaCB0YWJsZQpAQCAtNjIzLDkgKzc0 NSw4IEBAIE1lbW9yeUNvbnRleHRTdGF0c1ByaW50KE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9p ZCAqcGFzc3RocnUsCiAJCWlkZW50ID0gTlVMTDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgbGV2 ZWw7IGkrKykKLQkJZnByaW50ZihzdGRlcnIsICIgICIpOwotCWZwcmludGYoc3RkZXJyLCAiJXM6 ICVzIiwgbmFtZSwgc3RhdHNfc3RyaW5nKTsKKwl0cnVuY2F0ZWRfaWRlbnRbMF0gPSAnXDAnOwor CiAJaWYgKGlkZW50KQogCXsKIAkJLyoKQEAgLTYzNywyNCArNzU4LDQyIEBAIE1lbW9yeUNvbnRl eHRTdGF0c1ByaW50KE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAqcGFzc3RocnUsCiAJCWlu dAkJCWlkbGVuID0gc3RybGVuKGlkZW50KTsKIAkJYm9vbAkJdHJ1bmNhdGVkID0gZmFsc2U7CiAK KwkJc3RyY3B5KHRydW5jYXRlZF9pZGVudCwgIjogIik7CisKIAkJaWYgKGlkbGVuID4gMTAwKQog CQl7CiAJCQlpZGxlbiA9IHBnX21iY2xpcGxlbihpZGVudCwgaWRsZW4sIDEwMCk7CiAJCQl0cnVu Y2F0ZWQgPSB0cnVlOwogCQl9Ci0JCWZwcmludGYoc3RkZXJyLCAiOiAiKTsKKworCQlpID0gc3Ry bGVuKHRydW5jYXRlZF9pZGVudCk7CisKIAkJd2hpbGUgKGlkbGVuLS0gPiAwKQogCQl7CiAJCQl1 bnNpZ25lZCBjaGFyIGMgPSAqaWRlbnQrKzsKIAogCQkJaWYgKGMgPCAnICcpCiAJCQkJYyA9ICcg JzsKLQkJCWZwdXRjKGMsIHN0ZGVycik7CisJCQl0cnVuY2F0ZWRfaWRlbnRbaSsrXSA9IGM7CiAJ CX0KKwkJdHJ1bmNhdGVkX2lkZW50W2ldID0gJ1wwJzsKKwogCQlpZiAodHJ1bmNhdGVkKQotCQkJ ZnByaW50ZihzdGRlcnIsICIuLi4iKTsKKwkJCXN0cmNhdCh0cnVuY2F0ZWRfaWRlbnQsICIuLi4i KTsKKwl9CisKKwlpZiAoaXNfZHN0X3N0ZGVycikKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBsZXZl bDsgaSsrKQorCQkJZnByaW50ZihzdGRlcnIsICIgICIpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVz OiAlcyVzXG4iLCBuYW1lLCBzdGF0c19zdHJpbmcsIHRydW5jYXRlZF9pZGVudCk7CiAJfQotCWZw dXRjKCdcbicsIHN0ZGVycik7CisJZWxzZQorCQllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJ CQkoZXJyaGlkZXN0bXQodHJ1ZSksCisJCQkJIGVycmhpZGVjb250ZXh0KHRydWUpLAorCQkJCSBl cnJtc2dfaW50ZXJuYWwoImxldmVsOiAlZCAlczogJXMlcyIsCisJCQkJCQkJCQkgbGV2ZWwsIG5h bWUsIHN0YXRzX3N0cmluZywgdHJ1bmNhdGVkX2lkZW50KSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9zbGFiLmMgYi9zcmMvYmFja2VuZC91dGlscy9tbWdy L3NsYWIuYwppbmRleCA5MjEzYmU3Yzk1Li40NzliMDhiZWRkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9tbWdyL3NsYWIuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL3NsYWIu YwpAQCAtMTM1LDcgKzEzNSw4IEBAIHN0YXRpYyBTaXplIFNsYWJHZXRDaHVua1NwYWNlKE1lbW9y eUNvbnRleHQgY29udGV4dCwgdm9pZCAqcG9pbnRlcik7CiBzdGF0aWMgYm9vbCBTbGFiSXNFbXB0 eShNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogc3RhdGljIHZvaWQgU2xhYlN0YXRzKE1lbW9yeUNv bnRleHQgY29udGV4dCwKIAkJCQkJICBNZW1vcnlTdGF0c1ByaW50RnVuYyBwcmludGZ1bmMsIHZv aWQgKnBhc3N0aHJ1LAotCQkJCQkgIE1lbW9yeUNvbnRleHRDb3VudGVycyAqdG90YWxzKTsKKwkJ CQkJICBNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscywKKwkJCQkJICBib29sIGlzX2RzdF9z dGRlcnIpOwogI2lmZGVmIE1FTU9SWV9DT05URVhUX0NIRUNLSU5HCiBzdGF0aWMgdm9pZCBTbGFi Q2hlY2soTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKICNlbmRpZgpAQCAtNjMyLDExICs2MzMsMTMg QEAgU2xhYklzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogICogcHJpbnRmdW5jOiBpZiBu b3QgTlVMTCwgcGFzcyBhIGh1bWFuLXJlYWRhYmxlIHN0YXRzIHN0cmluZyB0byB0aGlzLgogICog cGFzc3RocnU6IHBhc3MgdGhpcyBwb2ludGVyIHRocm91Z2ggdG8gcHJpbnRmdW5jLgogICogdG90 YWxzOiBpZiBub3QgTlVMTCwgYWRkIHN0YXRzIGFib3V0IHRoaXMgY29udGV4dCBpbnRvICp0b3Rh bHMuCisgKiBpc19kc3Rfc3RkZXJyOiBpcyB0aGUgb3V0cHV0IHNob3VsZCBiZSBzdGRlcnIgb3Ig ZWxvZy4KICAqLwogc3RhdGljIHZvaWQKIFNsYWJTdGF0cyhNZW1vcnlDb250ZXh0IGNvbnRleHQs CiAJCSAgTWVtb3J5U3RhdHNQcmludEZ1bmMgcHJpbnRmdW5jLCB2b2lkICpwYXNzdGhydSwKLQkJ ICBNZW1vcnlDb250ZXh0Q291bnRlcnMgKnRvdGFscykKKwkJICBNZW1vcnlDb250ZXh0Q291bnRl cnMgKnRvdGFscywKKwkJICBib29sIGlzX2RzdF9zdGRlcnIpCiB7CiAJU2xhYkNvbnRleHQgKnNs YWIgPSBjYXN0Tm9kZShTbGFiQ29udGV4dCwgY29udGV4dCk7CiAJU2l6ZQkJbmJsb2NrcyA9IDA7 CkBAIC02NzEsNyArNjc0LDcgQEAgU2xhYlN0YXRzKE1lbW9yeUNvbnRleHQgY29udGV4dCwKIAkJ CQkgIiV6dSB0b3RhbCBpbiAlemQgYmxvY2tzOyAlenUgZnJlZSAoJXpkIGNodW5rcyk7ICV6dSB1 c2VkIiwKIAkJCQkgdG90YWxzcGFjZSwgbmJsb2NrcywgZnJlZXNwYWNlLCBmcmVlY2h1bmtzLAog CQkJCSB0b3RhbHNwYWNlIC0gZnJlZXNwYWNlKTsKLQkJcHJpbnRmdW5jKGNvbnRleHQsIHBhc3N0 aHJ1LCBzdGF0c19zdHJpbmcpOworCQlwcmludGZ1bmMoY29udGV4dCwgcGFzc3RocnUsIHN0YXRz X3N0cmluZywgaXNfZHN0X3N0ZGVycik7CiAJfQogCiAJaWYgKHRvdGFscykKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CmluZGV4IDQ2NGZhOGQ2MTQuLmZhMjA4ODkxMDUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdApAQCAtNzkyMSwxMiArNzkyMSwxNCBAQAogICBkZXNjciA9PiAnaW5mb3JtYXRpb24g YWJvdXQgYWxsIG1lbW9yeSBjb250ZXh0cyBvZiBsb2NhbCBiYWNrZW5kJywKICAgcHJvbmFtZSA9 PiAncGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJywgcHJvcm93cyA9PiAnMTAwJywKICAg cHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAncics Ci0gIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICcnLAotICBwcm9hbGxh cmd0eXBlcyA9PiAne3RleHQsdGV4dCx0ZXh0LGludDQsaW50OCxpbnQ4LGludDgsaW50OCxpbnQ4 fScsCi0gIHByb2FyZ21vZGVzID0+ICd7byxvLG8sbyxvLG8sbyxvLG99JywKLSAgcHJvYXJnbmFt ZXMgPT4gJ3tuYW1lLCBpZGVudCwgcGFyZW50LCBsZXZlbCwgdG90YWxfYnl0ZXMsIHRvdGFsX25i bG9ja3MsIGZyZWVfYnl0ZXMsIGZyZWVfY2h1bmtzLCB1c2VkX2J5dGVzfScsCisgIHByb3JldHR5 cGUgPT4gJ3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICdpbnQ0IGludDQnLAorICBwcm9hbGxhcmd0 eXBlcyA9PiAne2ludDQsaW50NCx0ZXh0LHRleHQsdGV4dCxpbnQ0LGludDgsaW50OCxpbnQ4LGlu dDgsaW50OH0nLAorICBwcm9hcmdtb2RlcyA9PiAne2ksaSxvLG8sbyxvLG8sbyxvLG8sb30nLAor ICBwcm9hcmduYW1lcyA9PiAne3BpZCwgbWF4X2NoaWxkcmVuLCBuYW1lLCBpZGVudCwgcGFyZW50 LCBsZXZlbCwgdG90YWxfYnl0ZXMsIHRvdGFsX25ibG9ja3MsIGZyZWVfYnl0ZXMsIGZyZWVfY2h1 bmtzLCB1c2VkX2J5dGVzfScsCiAgIHByb3NyYyA9PiAncGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2Nv bnRleHRzJyB9LAogCisjIHByaW50IG1lbW9yeSBjb250ZXh0IG9mIHNwZWNpZmllZCBiYWNrZW5k CisKICMgbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcgogeyBvaWQgPT4gJzEwNjYnLCBk ZXNjciA9PiAnbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcicsCiAgIHByb25hbWUgPT4g J2dlbmVyYXRlX3NlcmllcycsIHByb3Jvd3MgPT4gJzEwMDAnLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAwMTM4NTBh YzI4Li4wODE4MjI4MjNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysg Yi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtODQsNiArODQsNyBAQCBleHRlcm4gUEdETExJ TVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NEaWVQZW5kaW5nOwogZXh0ZXJuIFBHRExM SU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1l b3V0UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRs ZVNlc3Npb25UaW1lb3V0UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdf YXRvbWljX3QgUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nOworZXh0ZXJuIFBHRExMSU1QT1JUIHZv bGF0aWxlIHNpZ19hdG9taWNfdCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZzsKIAogZXh0ZXJuIFBH RExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBDbGllbnRDb25uZWN0aW9uTG9zdDsKIApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbWVtbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL21lbW5vZGVzLmgKaW5kZXggOTMzMWVmODBmZC4uODdhODUwMWMzNyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvbWVtbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9tZW1u b2Rlcy5oCkBAIC01Miw3ICs1Miw4IEBAIHR5cGVkZWYgc3RydWN0IE1lbW9yeUNvbnRleHRDb3Vu dGVycwogICovCiAKIHR5cGVkZWYgdm9pZCAoKk1lbW9yeVN0YXRzUHJpbnRGdW5jKSAoTWVtb3J5 Q29udGV4dCBjb250ZXh0LCB2b2lkICpwYXNzdGhydSwKLQkJCQkJCQkJCSAgY29uc3QgY2hhciAq c3RhdHNfc3RyaW5nKTsKKwkJCQkJCQkJCSAgY29uc3QgY2hhciAqc3RhdHNfc3RyaW5nLAorCQkJ CQkJCQkJICBib29sIGlzX2RzdF9zdGRlcnIpOwogCiB0eXBlZGVmIHN0cnVjdCBNZW1vcnlDb250 ZXh0TWV0aG9kcwogewpAQCAtNjYsNyArNjcsOCBAQCB0eXBlZGVmIHN0cnVjdCBNZW1vcnlDb250 ZXh0TWV0aG9kcwogCWJvb2wJCSgqaXNfZW1wdHkpIChNZW1vcnlDb250ZXh0IGNvbnRleHQpOwog CXZvaWQJCSgqc3RhdHMpIChNZW1vcnlDb250ZXh0IGNvbnRleHQsCiAJCQkJCQkgIE1lbW9yeVN0 YXRzUHJpbnRGdW5jIHByaW50ZnVuYywgdm9pZCAqcGFzc3RocnUsCi0JCQkJCQkgIE1lbW9yeUNv bnRleHRDb3VudGVycyAqdG90YWxzKTsKKwkJCQkJCSAgTWVtb3J5Q29udGV4dENvdW50ZXJzICp0 b3RhbHMsCisJCQkJCQkgIGJvb2wgaXNfZHN0X3N0ZGVycik7CiAjaWZkZWYgTUVNT1JZX0NPTlRF WFRfQ0hFQ0tJTkcKIAl2b2lkCQkoKmNoZWNrKSAoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKICNl bmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMv aW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCA0YWU3ZGMzM2I4Li4xMTQ0NTM2MDMx IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMv aW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaApAQCAtMzQsNiArMzQsOCBAQCB0eXBlZGVmIGVu dW0KIAlQUk9DU0lHX1BBUkFMTEVMX01FU1NBR0UsCS8qIG1lc3NhZ2UgZnJvbSBjb29wZXJhdGlu ZyBwYXJhbGxlbCBiYWNrZW5kICovCiAJUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9QUElORywJLyog YXNrIHdhbHNlbmRlcnMgdG8gcHJlcGFyZSBmb3Igc2h1dGRvd24gICovCiAJUFJPQ1NJR19CQVJS SUVSLAkJCS8qIGdsb2JhbCBiYXJyaWVyIGludGVycnVwdCAgKi8KKwlQUk9DU0lHX0xPR19NRU1P UllfQ09OVEVYVCwJCS8qIGFzayBzcGVjaWZpZWQgYmFja2VuZCB0byBsb2cgdGhlCisJCQkJCQkJ bWVtb3J5IGNvbnRleHQgKi8KIAogCS8qIFJlY292ZXJ5IGNvbmZsaWN0IHJlYXNvbnMgKi8KIAlQ Uk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFLApAQCAtNjksNiArNzEsNyBAQCBleHRl cm4gaW50CVNlbmRQcm9jU2lnbmFsKHBpZF90IHBpZCwgUHJvY1NpZ25hbFJlYXNvbiByZWFzb24s CiBleHRlcm4gdWludDY0IEVtaXRQcm9jU2lnbmFsQmFycmllcihQcm9jU2lnbmFsQmFycmllclR5 cGUgdHlwZSk7CiBleHRlcm4gdm9pZCBXYWl0Rm9yUHJvY1NpZ25hbEJhcnJpZXIodWludDY0IGdl bmVyYXRpb24pOwogZXh0ZXJuIHZvaWQgUHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVyKHZvaWQpOwor ZXh0ZXJuIHZvaWQgUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQodm9pZCk7CiAKIGV4 dGVybiB2b2lkIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvbWVtdXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L21lbXV0aWxzLmgKaW5kZXggMzZhYWU0ZTUxYy4uOTU5NmFhN2YxNCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvbWVtdXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9tZW11dGls cy5oCkBAIC00Niw2ICs0NiwxMiBAQAogI2RlZmluZSBBbGxvY0h1Z2VTaXplSXNWYWxpZChzaXpl KQkoKFNpemUpIChzaXplKSA8PSBNYXhBbGxvY0h1Z2VTaXplKQogCiAKK3R5cGVkZWYgc3RydWN0 IE1jeHRMb2dEYXRhCit7CisJLyogTWF4IG51bWJlciBvZiBjaGlsZHJlbiB0byBwcmludCBwZXIg b25lIHBhcmVudCBjb250ZXh0ICovCisJaW50CQltYXhDaGlsZHJlblBlckNvbnRleHQ7Cit9IE1j eHRMb2dEYXRhOworCiAvKgogICogU3RhbmRhcmQgdG9wLWxldmVsIG1lbW9yeSBjb250ZXh0cy4K ICAqCkBAIC02Myw2ICs2OSw4IEBAIGV4dGVybiBQR0RMTElNUE9SVCBNZW1vcnlDb250ZXh0IEN1 clRyYW5zYWN0aW9uQ29udGV4dDsKIC8qIFRoaXMgaXMgYSB0cmFuc2llbnQgbGluayB0byB0aGUg YWN0aXZlIHBvcnRhbCdzIG1lbW9yeSBjb250ZXh0OiAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIE1l bW9yeUNvbnRleHQgUG9ydGFsQ29udGV4dDsKIAorZXh0ZXJuIE1jeHRMb2dEYXRhICptY3h0TG9n RGF0YTsKKwogLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbWFjcm8gKi8KICNkZWZpbmUgTWVt b3J5Q29udGV4dFJlc2V0QW5kRGVsZXRlQ2hpbGRyZW4oY3R4KSBNZW1vcnlDb250ZXh0UmVzZXQo Y3R4KQogCkBAIC04NCw5ICs5MiwxMiBAQCBleHRlcm4gTWVtb3J5Q29udGV4dCBNZW1vcnlDb250 ZXh0R2V0UGFyZW50KE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBleHRlcm4gYm9vbCBNZW1vcnlD b250ZXh0SXNFbXB0eShNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogZXh0ZXJuIFNpemUgTWVtb3J5 Q29udGV4dE1lbUFsbG9jYXRlZChNZW1vcnlDb250ZXh0IGNvbnRleHQsIGJvb2wgcmVjdXJzZSk7 CiBleHRlcm4gdm9pZCBNZW1vcnlDb250ZXh0U3RhdHMoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsK LWV4dGVybiB2b2lkIE1lbW9yeUNvbnRleHRTdGF0c0RldGFpbChNZW1vcnlDb250ZXh0IGNvbnRl eHQsIGludCBtYXhfY2hpbGRyZW4pOworZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4dFN0YXRzRGV0 YWlsKE1lbW9yeUNvbnRleHQgY29udGV4dCwgaW50IG1heF9jaGlsZHJlbiwKKwkJCQkJCQkJCQli b29sIGlzX2RzdF9zdGRlcnIpOwogZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4dEFsbG93SW5Dcml0 aWNhbFNlY3Rpb24oTWVtb3J5Q29udGV4dCBjb250ZXh0LAogCQkJCQkJCQkJCQkJYm9vbCBhbGxv dyk7CitleHRlcm4gdm9pZCBNY3h0TG9nU2htZW1Jbml0KHZvaWQpOworZXh0ZXJuIERhdHVtIHBn X2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhpbnQgcGlkLCBpbnQgbWF4X2NoaWxkcmVuKTsK IAogI2lmZGVmIE1FTU9SWV9DT05URVhUX0NIRUNLSU5HCiBleHRlcm4gdm9pZCBNZW1vcnlDb250 ZXh0Q2hlY2soTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9taXNjL3QvMDAyX3ByaW50X21lbW9yeV9jb250ZXh0X3ZhbGlkYXRpb24ucGwg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAwMl9wcmludF9tZW1vcnlfY29udGV4dF92 YWxpZGF0aW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA1NmNl ZDFkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAw Ml9wcmludF9tZW1vcnlfY29udGV4dF92YWxpZGF0aW9uLnBsCkBAIC0wLDAgKzEsOTAgQEAKK3Vz ZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgUG9zdGdyZXNOb2RlOwordXNlIFRlc3RMaWI7 Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA0OworCisjIFNldCB1cCBub2RlIHdpdGggbG9nZ2lu ZyBjb2xsZWN0b3IKK215ICRub2RlID0gZ2V0X25ld19ub2RlKCdwcmltYXJ5Jyk7Ciskbm9kZS0+ aW5pdCgpOworJG5vZGUtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKKwls b2dnaW5nX2NvbGxlY3RvciA9IG9uCisJbGNfbWVzc2FnZXMgPSAnQycKKwl9KTsKKworJG5vZGUt PnN0YXJ0KCk7CisKKyMgVmVyaWZ5IHRoYXQgbG9nIG91dHB1dCBnZXRzIHRvIHRoZSBmaWxlCisk bm9kZS0+cHNxbCgncG9zdGdyZXMnLCAnc2VsZWN0IHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250 ZXh0cyhwZ19iYWNrZW5kX3BpZCgpLCAxMDApJyk7CisKKyMgbWlnaHQgbmVlZCB0byByZXRyeSBp ZiBsb2dnaW5nIGNvbGxlY3RvciBwcm9jZXNzIGlzIHNsb3cuLi4KK215ICRtYXhfYXR0ZW1wdHMg PSAxODAgKiAxMDsKKworbXkgJGN1cnJlbnRfbG9nZmlsZXM7Citmb3IgKG15ICRhdHRlbXB0cyA9 IDA7ICRhdHRlbXB0cyA8ICRtYXhfYXR0ZW1wdHM7ICRhdHRlbXB0cysrKQoreworCWV2YWwgewor CQkkY3VycmVudF9sb2dmaWxlcyA9IHNsdXJwX2ZpbGUoJG5vZGUtPmRhdGFfZGlyIC4gJy9jdXJy ZW50X2xvZ2ZpbGVzJyk7CisJfTsKKwlsYXN0IHVubGVzcyAkQDsKKwl1c2xlZXAoMTAwXzAwMCk7 Cit9CitkaWUgJEAgaWYgJEA7CisKK25vdGUgImN1cnJlbnRfbG9nZmlsZXMgPSAkY3VycmVudF9s b2dmaWxlcyI7CisKK2xpa2UoCisJJGN1cnJlbnRfbG9nZmlsZXMsCisJcXJ8XnN0ZGVyciBsb2cv cG9zdGdyZXNxbC0uKmxvZyR8LAorCSdjdXJyZW50X2xvZ2ZpbGVzIGlzIHNhbmUnKTsKKworbXkg JGxmbmFtZSA9ICRjdXJyZW50X2xvZ2ZpbGVzOworJGxmbmFtZSA9fiBzL15zdGRlcnIgLy87Citj aG9tcCAkbGZuYW1lOworCitteSAkbG9nZmlsZTsKK215ICRwcmludF9jb3VudDsKKworIyBWZXJp ZnkgdGhhdCB0aGUgYmFja3RyYWNlcyBvZiB0aGUgcHJvY2Vzc2VzIGFyZSBsb2dnZWQgaW50byBs b2dmaWxlLgorZm9yIChteSAkYXR0ZW1wdHMgPSAwOyAkYXR0ZW1wdHMgPCAkbWF4X2F0dGVtcHRz OyAkYXR0ZW1wdHMrKykKK3sKKwkkbG9nZmlsZSA9ICRub2RlLT5kYXRhX2RpciAuICcvJyAuICRs Zm5hbWU7CisJY2hvbXAgJGxvZ2ZpbGU7CisJcHJpbnQgImZpbGUgaXMgJGxvZ2ZpbGUiOworCW9w ZW4gbXkgJGZoLCAnPCcsICRsb2dmaWxlCisJICBvciBkaWUgIkNvdWxkIG5vdCBvcGVuICckbG9n ZmlsZScgJCEiOworCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KQorCXsKKwkJY2hvbXAgJGxpbmU7 CisJCWlmICgkbGluZSA9fiBtL0dyYW5kIHRvdGFsOiBcZCsgYnl0ZXMgaW4gXGQrIGJsb2Nrcy8p CisJCXsKKwkJCSRwcmludF9jb3VudCsrOworCQl9CisJfQorCWxhc3QgaWYgJHByaW50X2NvdW50 ID09IDE7CisJdXNsZWVwKDEwMF8wMDApOworfQorCitpcygkcHJpbnRfY291bnQsIDEsICdmb3Vu ZCBleHBlY3RlZCBtZW1vcnkgY29udGV4dCBwcmludCBpbiB0aGUgbG9nIGZpbGUnKTsKKworbXkg JG91dHB1dDsKKworJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgJ3NlbGVjdCBwZ19nZXRfYmFja2Vu ZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSwgLTEpJywKKwkJc3RkZXJyID0+IFwk b3V0cHV0KTsKKworbGlrZSgKKwkkb3V0cHV0LAorCXFyL1RoZSBtYXhpbXVtIG51bWJlciBvZiBj aGlsZHJlbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLywKKwknY2hlY2sgaWYg bWF4X2NoaWxkcmVuIGNoZWNrIGlzIHdvcmtpbmcnKTsKKworJG5vZGUtPnBzcWwoJ3Bvc3RncmVz JywKKwknc2VsZWN0IHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhwaWQsIDEwMCkgZnJv bSBwZ19zdGF0X2FjdGl2aXR5IHdoZXJlIGJhY2tlbmRfdHlwZSA9IFwnY2hlY2twb2ludGVyXCcn LAorCXN0ZGVyciA9PiBcJG91dHB1dCk7CisKK2xpa2UoCisJJG91dHB1dCwKKwlxci9QSUQgXGQr IGlzIG5vdCBhIFBvc3RncmVTUUwgc2VydmVyIHByb2Nlc3MvLAorCSdjaGVjayBpZiBQSUQgY2hl Y2sgaXMgd29ya2luZycpOworCiskbm9kZS0+c3RvcCgnZmFzdCcpOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3J1bGVzLm91dAppbmRleCA5YjEyY2MxMjJhLi41ODQxZTVjYzEyIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3J1bGVzLm91dApAQCAtMTMzMyw3ICsxMzMzLDcgQEAgcGdfYmFja2VuZF9tZW1v cnlfY29udGV4dHN8IFNFTEVDVCBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMubmFtZSwK ICAgICBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMuZnJlZV9ieXRlcywKICAgICBwZ19n ZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMuZnJlZV9jaHVua3MsCiAgICAgcGdfZ2V0X2JhY2tl bmRfbWVtb3J5X2NvbnRleHRzLnVzZWRfYnl0ZXMKLSAgIEZST00gcGdfZ2V0X2JhY2tlbmRfbWVt b3J5X2NvbnRleHRzKCkgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKG5hbWUsIGlkZW50 LCBwYXJlbnQsIGxldmVsLCB0b3RhbF9ieXRlcywgdG90YWxfbmJsb2NrcywgZnJlZV9ieXRlcywg ZnJlZV9jaHVua3MsIHVzZWRfYnl0ZXMpOworICAgRlJPTSBwZ19nZXRfYmFja2VuZF9tZW1vcnlf Y29udGV4dHMoMCwgMCkgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKG5hbWUsIGlkZW50 LCBwYXJlbnQsIGxldmVsLCB0b3RhbF9ieXRlcywgdG90YWxfbmJsb2NrcywgZnJlZV9ieXRlcywg ZnJlZV9jaHVua3MsIHVzZWRfYnl0ZXMpOwogcGdfY29uZmlnfCBTRUxFQ1QgcGdfY29uZmlnLm5h bWUsCiAgICAgcGdfY29uZmlnLnNldHRpbmcKICAgIEZST00gcGdfY29uZmlnKCkgcGdfY29uZmln KG5hbWUsIHNldHRpbmcpOwo= --=_fcf646c176967c9d7cc0ff178688c9ba--