Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rFgt6-00BUQZ-E9 for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Dec 2023 20:40:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rFgt4-0058Cw-Pk for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Dec 2023 20:40:22 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rFgpA-0053LP-Te for pgsql-hackers@lists.postgresql.org; Tue, 19 Dec 2023 20:36:21 +0000 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rFgp7-00Cqmy-Al for pgsql-hackers@postgresql.org; Tue, 19 Dec 2023 20:36:20 +0000 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-a2331caab22so408853066b.3 for ; Tue, 19 Dec 2023 12:36:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1703018176; x=1703622976; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=DFb2rL1W6kYd1xRDKFRmdbNtc9dcrY0Y50rmGu++kR4=; b=gVl/wbjTn443kfAHe8F75d9du5gULnNTa8lV+IzSjs8r7c7ZPWQfx4v8sTSNpLHVca SNQkkswwaeEUhUbKtPMO6yVkwBOviWw5x8+EbNalRIKFJLBhF0z8ul+xd1NlcnJQz+Uu ce/x3qp6fq4qH+OaqoGfxYrqgLnHzlFwB2yC+8ceYatu0cTpVAhW4t/M8iTHNC9sORdF N4iMN9hNJTDAZJtw1bhHb1JC/vbB2NcgjMCGvIa8Qy3DL0h2rapcwhp3GmopuGE0DpFE O0EugwONUIi8jLZq2sGORqc6QnjWIXkJ8nKW+Ozdze8O9ita3CczQCpICW16xE3+pBjw Iy7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703018176; x=1703622976; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=DFb2rL1W6kYd1xRDKFRmdbNtc9dcrY0Y50rmGu++kR4=; b=Lg1/XFKjpMqb8JV0NvlYBw5YHE+rALnMZeTzT6qe/mxvzHQ2yjxihdcjzlk9CpWvDc xf65ws9EWNcZVvkac7d2AOORb8axldxmUXWQWDzh5XeTsT+lE5hnlSmWzwU5j+AZLTPW PEiYgE6aWG8lcH/mxfiFoPhxt9ItdP0eY8wUxG0R0684LQkXwPeZAutHz9EKZsKJ97Wx CT9inMKEMJeQMAQVFLwFzxWjO9MSmeK7UR4rKsnTJ1fVHs31ydcMpZUve20Ar16BeKk1 ONnC/5br1hRz5un4oNFEf3+2Th4PsUuC7B2IRUJF+eDV9kEBsZRT7HTxt7qfbSnJkJPd 1d2Q== X-Gm-Message-State: AOJu0YyKUq1pUccRqscStTJd6bAU2sjcur3fp5gPI5uNxfG+7rBWqgS+ 1POB6NY2SbeBTelh+HLcNWdIKzKZFUpLeB/4tm+52Z79 X-Google-Smtp-Source: AGHT+IElm/9fam5aRkQfFRIpj4olBkkwn77mL3GndQdPF10KmDrg8ltxFjnBf9nbSKBc+Zi6RKPc+7a1cac1jtXNCzc= X-Received: by 2002:a17:906:2984:b0:a17:d7ea:f59e with SMTP id x4-20020a170906298400b00a17d7eaf59emr8394120eje.48.1703018175718; Tue, 19 Dec 2023 12:36:15 -0800 (PST) MIME-Version: 1.0 References: <202311131625.o7hzq3oukuyd@alvherre.pgsql> In-Reply-To: From: Robert Haas Date: Tue, 19 Dec 2023 15:36:03 -0500 Message-ID: Subject: Re: trying again to get incremental backup To: Jakub Wartak Cc: Alvaro Herrera , Andres Freund , Peter Eisentraut , Dilip Kumar , "pgsql-hackers@postgresql.org" Content-Type: multipart/mixed; boundary="00000000000069928c060ce2d17a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000069928c060ce2d17a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Dec 15, 2023 at 5:36=E2=80=AFAM Jakub Wartak wrote: > I've played with with initdb/pg_upgrade (17->17) and i don't get DBID > mismatch (of course they do differ after initdb), but i get this > instead: > > $ pg_basebackup -c fast -D /tmp/incr2.after.upgrade -p 5432 > --incremental /tmp/incr1.before.upgrade/backup_manifest > WARNING: aborting backup due to backend exiting before pg_backup_stop > was called > pg_basebackup: error: could not initiate base backup: ERROR: timeline > 2 found in manifest, but not in this server's history > pg_basebackup: removing data directory "/tmp/incr2.after.upgrade" > > Also in the manifest I don't see DBID ? > Maybe it's a nuisance and all I'm trying to see is that if an > automated cronjob with pg_basebackup --incremental hits a freshly > upgraded cluster, that error message without errhint() is going to > scare some Junior DBAs. Yeah. I think we should add the system identifier to the manifest, but I think that should be left for a future project, as I don't think the lack of it is a good reason to stop all progress here. When we have that, we can give more reliable error messages about system mismatches at an earlier stage. Unfortunately, I don't think that the timeline messages you're seeing here are going to apply in every case: suppose you have two unrelated servers that are both on timeline 1. I think you could use a base backup from one of those servers and use it as the basis for the incremental from the other, and I think that if you did it right you might fail to hit any sanity check that would block that. pg_combinebackup will realize there's a problem, because it has the whole cluster to work with, not just the manifest, and will notice the mismatching system identifiers, but that's kind of late to find out that you made a big mistake. However, right now, it's the best we can do. > The incrementals are being generated , but just for the first (0) > segment of the relation? I committed the first two patches from the series I posted yesterday. The first should fix this, and the second relocates parse_manifest.c. That patch hasn't changed in a while and seems unlikely to attract major objections. There's no real reason to commit it until we're ready to move forward with the main patches, but I think we're very close to that now, so I did. Here's a rebase for cfbot. --=20 Robert Haas EDB: http://www.enterprisedb.com --00000000000069928c060ce2d17a Content-Type: application/octet-stream; name="v16-0003-Add-new-pg_walsummary-tool.patch" Content-Disposition: attachment; filename="v16-0003-Add-new-pg_walsummary-tool.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqct14vd2 RnJvbSBmYzk2NGNlODg1NDllM2Q0NGY2NjQxNDk2NTY5YTZhNjcxNDViNWIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMjUgT2N0IDIwMjMgMTM6MDE6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNiAz LzRdIEFkZCBuZXcgcGdfd2Fsc3VtbWFyeSB0b29sLgoKVGhpcyBjYW4gZHVtcCB0aGUgY29udGVu dHMgb2YgV0FMIHN1bW1hcnkgZmlsZXMsIGVpdGhlciB0aG9zZSBpbgpwZ193YWwvc3VtbWFyaWVz LCBvciB0aGUgSU5DUkVNRU5UQUxfQkFDS1VQIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2YKYW4gaW5j cmVtZW50YWwgYmFja3VwIHByb3Blci4KClhYWC4gTmVlZHMgdGVzdHMuCi0tLQogZG9jL3NyYy9z Z21sL3JlZi9hbGxmaWxlcy5zZ21sICAgICAgICAgfCAgIDEgKwogZG9jL3NyYy9zZ21sL3JlZi9w Z193YWxzdW1tYXJ5LnNnbWwgICAgfCAxMjIgKysrKysrKysrKysKIGRvYy9zcmMvc2dtbC9yZWZl cmVuY2Uuc2dtbCAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fs c3VtbWFyaXplci5jIHwgICA0ICstCiBzcmMvYmluL01ha2VmaWxlICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvYmluL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvYmluL3BnX3dhbHN1bW1hcnkvLmdpdGlnbm9yZSAgICAgICB8ICAgMSArCiBzcmMv YmluL3BnX3dhbHN1bW1hcnkvTWFrZWZpbGUgICAgICAgICB8ICA0MiArKysrCiBzcmMvYmluL3Bn X3dhbHN1bW1hcnkvbWVzb24uYnVpbGQgICAgICB8ICAyNCArKysKIHNyYy9iaW4vcGdfd2Fsc3Vt bWFyeS9ubHMubWsgICAgICAgICAgIHwgICA2ICsKIHNyYy9iaW4vcGdfd2Fsc3VtbWFyeS9wZ193 YWxzdW1tYXJ5LmMgIHwgMjgwICsrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgIHwgICAyICsKIDEyIGZpbGVzIGNoYW5nZWQsIDQ4 MyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9z cmMvc2dtbC9yZWYvcGdfd2Fsc3VtbWFyeS5zZ21sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jp bi9wZ193YWxzdW1tYXJ5Ly5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3Bn X3dhbHN1bW1hcnkvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3dhbHN1 bW1hcnkvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3dhbHN1bW1h cnkvbmxzLm1rCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L3BnX3dh bHN1bW1hcnkuYwoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCBmZGE0NjkwZWFiLi40YTQyOTk5 YjE4IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sCkBAIC0yMTksNiArMjE5LDcgQEAgQ29tcGxldGUg bGlzdCBvZiB1c2FibGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCiA8IUVO VElUWSBwZ3Rlc3R0aW1pbmcgICAgICAgU1lTVEVNICJwZ3Rlc3R0aW1pbmcuc2dtbCI+CiA8IUVO VElUWSBwZ3VwZ3JhZGUgICAgICAgICAgU1lTVEVNICJwZ3VwZ3JhZGUuc2dtbCI+CiA8IUVOVElU WSBwZ3dhbGR1bXAgICAgICAgICAgU1lTVEVNICJwZ193YWxkdW1wLnNnbWwiPgorPCFFTlRJVFkg cGd3YWxzdW1tYXJ5ICAgICAgIFNZU1RFTSAicGdfd2Fsc3VtbWFyeS5zZ21sIj4KIDwhRU5USVRZ IHBvc3RncmVzICAgICAgICAgICBTWVNURU0gInBvc3RncmVzLXJlZi5zZ21sIj4KIDwhRU5USVRZ IHBzcWxSZWYgICAgICAgICAgICBTWVNURU0gInBzcWwtcmVmLnNnbWwiPgogPCFFTlRJVFkgcmVp bmRleGRiICAgICAgICAgIFNZU1RFTSAicmVpbmRleGRiLnNnbWwiPgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3JlZi9wZ193YWxzdW1tYXJ5LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3dh bHN1bW1hcnkuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45M2Uy NjVlYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ193YWxzdW1tYXJ5 LnNnbWwKQEAgLTAsMCArMSwxMjIgQEAKKzwhLS0KK2RvYy9zcmMvc2dtbC9yZWYvcGdfd2Fsc3Vt bWFyeS5zZ21sCitQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KKy0tPgorCis8cmVmZW50cnkgaWQ9 ImFwcC1wZ3dhbHN1bW1hcnkiPgorIDxpbmRleHRlcm0gem9uZT0iYXBwLXBnd2Fsc3VtbWFyeSI+ CisgIDxwcmltYXJ5PnBnX3dhbHN1bW1hcnk8L3ByaW1hcnk+CisgPC9pbmRleHRlcm0+CisKKyA8 cmVmbWV0YT4KKyAgPHJlZmVudHJ5dGl0bGU+PGFwcGxpY2F0aW9uPnBnX3dhbHN1bW1hcnk8L2Fw cGxpY2F0aW9uPjwvcmVmZW50cnl0aXRsZT4KKyAgPG1hbnZvbG51bT4xPC9tYW52b2xudW0+Cisg IDxyZWZtaXNjaW5mbz5BcHBsaWNhdGlvbjwvcmVmbWlzY2luZm8+CisgPC9yZWZtZXRhPgorCisg PHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPnBnX3dhbHN1bW1hcnk8L3JlZm5hbWU+CisgIDxyZWZw dXJwb3NlPnByaW50IGNvbnRlbnRzIG9mIFdBTCBzdW1tYXJ5IGZpbGVzPC9yZWZwdXJwb3NlPgor IDwvcmVmbmFtZWRpdj4KKworIDxyZWZzeW5vcHNpc2Rpdj4KKyAgPGNtZHN5bm9wc2lzPgorICAg PGNvbW1hbmQ+cGdfd2Fsc3VtbWFyeTwvY29tbWFuZD4KKyAgIDxhcmcgcmVwPSJyZXBlYXQiIGNo b2ljZT0ib3B0Ij48cmVwbGFjZWFibGU+b3B0aW9uPC9yZXBsYWNlYWJsZT48L2FyZz4KKyAgIDxh cmcgcmVwPSJyZXBlYXQiPjxyZXBsYWNlYWJsZT5maWxlPC9yZXBsYWNlYWJsZT48L2FyZz4KKyAg PC9jbWRzeW5vcHNpcz4KKyA8L3JlZnN5bm9wc2lzZGl2PgorCisgPHJlZnNlY3QxPgorICA8dGl0 bGU+RGVzY3JpcHRpb248L3RpdGxlPgorICA8cGFyYT4KKyAgIDxhcHBsaWNhdGlvbj5wZ193YWxz dW1tYXJ5PC9hcHBsaWNhdGlvbj4gaXMgdXNlZCB0byBwcmludCB0aGUgY29udGVudHMgb2YKKyAg IFdBTCBzdW1tYXJ5IGZpbGVzLiBUaGVzZSBiaW5hcnkgZmlsZXMgYXJlIGZvdW5kIHdpdGggdGhl CisgICA8bGl0ZXJhbD5wZ193YWwvc3VtbWFyaWVzPC9saXRlcmFsPiBzdWJkaXJlY3Rvcnkgb2Yg dGhlIGRhdGEgZGlyZWN0b3J5LAorICAgYW5kIGNhbiBiZSBjb252ZXJ0ZWQgdG8gdGV4dCB1c2lu ZyB0aGlzIHRvb2wuIFRoaXMgaXMgbm90IG9yZGluYXJpbHkKKyAgIG5lY2Vzc2FyeSwgc2luY2Ug V0FMIHN1bW1hcnkgZmlsZXMgcHJpbWFyaWx5IGV4aXN0IHRvIHN1cHBvcnQKKyAgIDxsaW5rIGxp bmtlbmQ9ImJhY2t1cC1pbmNyZW1lbnRhbC1iYWNrdXAiPmluY3JlbWVudGFsIGJhY2t1cDwvbGlu az4sCisgICBidXQgaXQgbWF5IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIFdBTCBzdW1tYXJ5IGZpbGUgaXMgaW5kZXhlZCBieSB0 YWJsZXNwYWNlIE9JRCwgcmVsYXRpb24gT0lELCBhbmQgcmVsYXRpb24KKyAgIGZvcmsuIEZvciBl YWNoIHJlbGF0aW9uIGZvcmssIGl0IHN0b3JlcyB0aGUgbGlzdCBvZiBibG9ja3MgdGhhdCB3ZXJl CisgICBtb2RpZmllZCBieSBXQUwgd2l0aGluIHRoZSByYW5nZSBzdW1tYXJpemVkIGluIHRoZSBm aWxlLiBJdCBjYW4gYWxzbworICAgc3RvcmUgYSAibGltaXQgYmxvY2ssIiB3aGljaCBpcyAwIGlm IHRoZSByZWxhdGlvbiBmb3JrIHdhcyBjcmVhdGVkIG9yCisgICB0cnVuY2F0ZWQgd2l0aGluIHRo ZSByZWxldmFudCBXQUwgcmFuZ2UsIGFuZCBvdGhlcndpc2UgdGhlIHNob3J0ZXN0IGxlbmd0aAor ICAgdG8gd2hpY2ggdGhlIHJlbGF0aW9uIGZvcmsgd2FzIHRydW5jYXRlZC4gSWYgdGhlIHJlbGF0 aW9uIGZvcmsgd2FzIG5vdAorICAgY3JlYXRlZCwgZGVsZXRlZCwgb3IgdHJ1bmNhdGVkIHdpdGhp biB0aGUgcmVsZXZhbnQgV0FMIHJhbmdlLCB0aGUgbGltaXQKKyAgIGJsb2NrIGlzIHVuZGVmaW5l ZCBvciBpbmZpbml0ZSBhbmQgd2lsbCBub3QgYmUgcHJpbnRlZCBieSB0aGlzIHRvb2wuCisgIDwv cGFyYT4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+T3B0aW9uczwvdGl0 bGU+CisKKyAgIDxwYXJhPgorICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICA8dGVybT48b3B0aW9uPi1pPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9w dGlvbj4tLWluZGl2dWR1YWw8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIDxsaXRlcmFsPnBnX3dhbHN1bW1hcnk8L2xp dGVyYWw+IHByaW50cyBvbmUgbGluZSBvZiBvdXRwdXQKKyAgICAgICAgZm9yIGVhY2ggcmFuZ2Ug b2Ygb25lIG9yIG1vcmUgY29uc2VjdXRpdmUgbW9kaWZpZWQgYmxvY2tzLiBUaGlzIGNhbgorICAg ICAgICBtYWtlIHRoZSBvdXRwdXQgYSBsb3QgYnJpZWZlciwgc2luY2UgYSByZWxhdGlvbiB3aGVy ZSBhbGwgYmxvY2tzIGZyb20KKyAgICAgICAgMCB0aHJvdWdoIDk5OSB3ZXJlIG1vZGlmaWVkIHdp bGwgcHJvZHVjZSBvbmx5IG9uZSBsaW5lIG9mIG91dHB1dCByYXRoZXIKKyAgICAgICAgdGhhbiAx MDAwIHNlcGFyYXRlIGxpbmVzLiBUaGlzIG9wdGlvbiByZXF1ZXN0cyBhIHNlcGFyYXRlIGxpbmUg b2YKKyAgICAgICAgb3V0cHV0IGZvciBldmVyeSBtb2RpZmllZCBibG9jay4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tcTwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDx0ZXJtPjxvcHRpb24+LS1xdWlldDwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4K KyAgICAgICA8cGFyYT4KKyAgICAgICAgRG8gbm90IHByaW50IGFueSBvdXRwdXQsIGV4Y2VwdCBm b3IgZXJyb3JzLiBUaGlzIGNhbiBiZSB1c2VmdWwKKyAgICAgICAgd2hlbiB5b3Ugd2FudCB0byBr bm93IHdoZXRoZXIgYSBXQUwgc3VtbWFyeSBmaWxlIGNhbiBiZSBzdWNjZXNzZnVsbHkKKyAgICAg ICAgcGFyc2VkIGJ1dCBkb24ndCBjYXJlIGFib3V0IHRoZSBjb250ZW50cy4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPjxvcHRpb24+LT88L29wdGlvbj48L3Rlcm0+CisgICAg ICAgPHRlcm0+PG9wdGlvbj4tLWhlbHA8L29wdGlvbj48L3Rlcm0+CisgICAgICAgPGxpc3RpdGVt PgorICAgICAgIDxwYXJhPgorICAgICAgIFNob3dzIGhlbHAgYWJvdXQgPGFwcGxpY2F0aW9uPnBn X3dhbHN1bW1hcnk8L2FwcGxpY2F0aW9uPiBjb21tYW5kIGxpbmUKKyAgICAgICBhcmd1bWVudHMs IGFuZCBleGl0cy4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgIDwvcGFyYT4KKworIDwvcmVm c2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5FbnZpcm9ubWVudDwvdGl0bGU+CisKKyAg PHBhcmE+CisgICBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPGVudmFyPlBHX0NPTE9SPC9lbnZh cj4gc3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlCisgICBjb2xvciBpbiBkaWFnbm9zdGljIG1lc3Nh Z2VzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCisgICA8bGl0ZXJhbD5hbHdheXM8L2xpdGVyYWw+LCA8 bGl0ZXJhbD5hdXRvPC9saXRlcmFsPiBhbmQKKyAgIDxsaXRlcmFsPm5ldmVyPC9saXRlcmFsPi4K KyAgPC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5TZWUgQWxz bzwvdGl0bGU+CisKKyAgPHNpbXBsZWxpc3QgdHlwZT0iaW5saW5lIj4KKyAgIDxtZW1iZXI+PHhy ZWYgbGlua2VuZD0iYXBwLXBnYmFzZWJhY2t1cCIvPjwvbWVtYmVyPgorICAgPG1lbWJlcj48eHJl ZiBsaW5rZW5kPSJhcHAtcGdjb21iaW5lYmFja3VwIi8+PC9tZW1iZXI+CisgIDwvc2ltcGxlbGlz dD4KKyA8L3JlZnNlY3QxPgorCis8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZmVyZW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sCmluZGV4IGEwN2Qy YjVlMDEuLmFhOTRmNmFkZjYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKQEAgLTI4OSw2ICsyODksNyBAQAog ICAgJnBndGVzdHRpbWluZzsKICAgICZwZ3VwZ3JhZGU7CiAgICAmcGd3YWxkdW1wOworICAgJnBn d2Fsc3VtbWFyeTsKICAgICZwb3N0Z3JlczsKIAogIDwvcmVmZXJlbmNlPgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwppbmRleCA3Yzg0MGMzNmIzLi45ZmExNTUzNDllIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYworKysgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwpAQCAtMjkwLDcgKzI5MCw3IEBAIFdh bFN1bW1hcml6ZXJNYWluKHZvaWQpCiAJCUZsdXNoRXJyb3JTdGF0ZSgpOwogCiAJCS8qIEZsdXNo IGFueSBsZWFrZWQgZGF0YSBpbiB0aGUgdG9wLWxldmVsIGNvbnRleHQgKi8KLQkJTWVtb3J5Q29u dGV4dFJlc2V0QW5kRGVsZXRlQ2hpbGRyZW4oY29udGV4dCk7CisJCU1lbW9yeUNvbnRleHRSZXNl dChjb250ZXh0KTsKIAogCQkvKiBOb3cgd2UgY2FuIGFsbG93IGludGVycnVwdHMgYWdhaW4gKi8K IAkJUkVTVU1FX0lOVEVSUlVQVFMoKTsKQEAgLTM0Miw3ICszNDIsNyBAQCBXYWxTdW1tYXJpemVy TWFpbih2b2lkKQogCQlYTG9nUmVjUHRyCWVuZF9vZl9zdW1tYXJ5X2xzbjsKIAogCQkvKiBGbHVz aCBhbnkgbGVha2VkIGRhdGEgaW4gdGhlIHRvcC1sZXZlbCBjb250ZXh0ICovCi0JCU1lbW9yeUNv bnRleHRSZXNldEFuZERlbGV0ZUNoaWxkcmVuKGNvbnRleHQpOworCQlNZW1vcnlDb250ZXh0UmVz ZXQoY29udGV4dCk7CiAKIAkJLyogUHJvY2VzcyBhbnkgc2lnbmFscyByZWNlaXZlZCByZWNlbnRs eS4gKi8KIAkJSGFuZGxlV2FsU3VtbWFyaXplckludGVycnVwdHMoKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vTWFrZWZpbGUgYi9zcmMvYmluL01ha2VmaWxlCmluZGV4IGFhMjIxMDkyNWUuLmY5OGY1 OGQzOWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9NYWtlZmls ZQpAQCAtMzEsNiArMzEsNyBAQCBTVUJESVJTID0gXAogCXBnX3VwZ3JhZGUgXAogCXBnX3Zlcmlm eWJhY2t1cCBcCiAJcGdfd2FsZHVtcCBcCisJcGdfd2Fsc3VtbWFyeSBcCiAJcGdiZW5jaCBcCiAJ cHNxbCBcCiAJc2NyaXB0cwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9tZXNvbi5idWlsZCBiL3NyYy9i aW4vbWVzb24uYnVpbGQKaW5kZXggNGNiNmZkNTliYi4uZDFlOWVmNDQwOSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL21lc29uLmJ1aWxkCkBAIC0xNyw2ICsx Nyw3IEBAIHN1YmRpcigncGdfdGVzdF90aW1pbmcnKQogc3ViZGlyKCdwZ191cGdyYWRlJykKIHN1 YmRpcigncGdfdmVyaWZ5YmFja3VwJykKIHN1YmRpcigncGdfd2FsZHVtcCcpCitzdWJkaXIoJ3Bn X3dhbHN1bW1hcnknKQogc3ViZGlyKCdwZ2JlbmNoJykKIHN1YmRpcigncGdldmVudCcpCiBzdWJk aXIoJ3BzcWwnKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxzdW1tYXJ5Ly5naXRpZ25vcmUg Yi9zcmMvYmluL3BnX3dhbHN1bW1hcnkvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi5kNzFlYzE5MmZhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9w Z193YWxzdW1tYXJ5Ly5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorcGdfd2Fsc3VtbWFyeQpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L01ha2VmaWxlIGIvc3JjL2Jpbi9wZ193YWxz dW1tYXJ5L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjg1 MmY3MjA4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3dhbHN1bW1hcnkvTWFrZWZp bGUKQEAgLTAsMCArMSw0MiBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgTWFrZWZpbGUgZm9y IHNyYy9iaW4vcGdfd2Fsc3VtbWFyeQorIworIyBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEK KyMKKyMgc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L01ha2VmaWxlCisjCisjLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorCitQR0ZJTEVERVNDID0gInBnX3dhbHN1bW1hcnkgLSBwcmludCBjb250ZW50cyBvZiBXQUwg c3VtbWFyeSBmaWxlcyIKK1BHQVBQSUNPTj13aW4zMgorCitzdWJkaXIgPSBzcmMvYmluL3BnX3dh bHN1bW1hcnkKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGly KS9zcmMvTWFrZWZpbGUuZ2xvYmFsCisKK292ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9z cmNkaXIpICQoQ1BQRkxBR1MpCitMREZMQUdTX0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRkaXIp L3NyYy9mZV91dGlscyAtbHBnZmV1dGlscworCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlw Z193YWxzdW1tYXJ5Lm8KKworYWxsOiBwZ193YWxzdW1tYXJ5CisKK3BnX3dhbHN1bW1hcnk6ICQo T0JKUykgfCBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscworCSQoQ0MpICQo Q0ZMQUdTKSAkXiAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKKwor CitpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMKKwkkKElOU1RBTExfUFJPR1JBTSkgcGdfd2Fsc3Vt bWFyeSQoWCkgJyQoREVTVERJUikkKGJpbmRpcikvcGdfd2Fsc3VtbWFyeSQoWCknCisKK2luc3Rh bGxkaXJzOgorCSQoTUtESVJfUCkgJyQoREVTVERJUikkKGJpbmRpciknCisKK3VuaW5zdGFsbDoK KwlybSAtZiAnJChERVNURElSKSQoYmluZGlyKS9wZ193YWxzdW1tYXJ5JChYKScKKworY2xlYW4g ZGlzdGNsZWFuIG1haW50YWluZXItY2xlYW46CisJcm0gLWYgcGdfd2Fsc3VtbWFyeSQoWCkgJChP QkpTKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L21lc29uLmJ1aWxkIGIvc3Jj L2Jpbi9wZ193YWxzdW1tYXJ5L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLmMyMDkyOTYwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3dh bHN1bW1hcnkvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwyNCBAQAorIyBDb3B5cmlnaHQgKGMpIDIw MjItMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfd2Fsc3Vt bWFyeV9zb3VyY2VzID0gZmlsZXMoCisgICdwZ193YWxzdW1tYXJ5LmMnLAorKQorCitpZiBob3N0 X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcGdfd2Fsc3VtbWFyeV9zb3VyY2VzICs9IHJjX2Jpbl9n ZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAncGdf d2Fsc3VtbWFyeScsCisgICAgJy0tRklMRURFU0MnLCAncGdfd2Fsc3VtbWFyeSAtIHByaW50IGNv bnRlbnRzIG9mIFdBTCBzdW1tYXJ5IGZpbGVzJyxdKQorZW5kaWYKKworcGdfd2Fsc3VtbWFyeSA9 IGV4ZWN1dGFibGUoJ3BnX3dhbHN1bW1hcnknLAorICBwZ193YWxzdW1tYXJ5X3NvdXJjZXMsCisg IGRlcGVuZGVuY2llczogW2Zyb250ZW5kX2NvZGVdLAorICBrd2FyZ3M6IGRlZmF1bHRfYmluX2Fy Z3MsCispCitiaW5fdGFyZ2V0cyArPSBwZ193YWxzdW1tYXJ5CisKK3Rlc3RzICs9IHsKKyAgJ25h bWUnOiAncGdfd2Fsc3VtbWFyeScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2Rpcigp LAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpCit9CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX3dhbHN1bW1hcnkvbmxzLm1rIGIvc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L25scy5tawpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mNDExZGNmZTllCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2Jpbi9wZ193YWxzdW1tYXJ5L25scy5tawpAQCAtMCwwICsxLDYgQEAK KyMgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL25scy5taworQ0FUQUxPR19OQU1FICAgICA9IHBn X3dhbHN1bW1hcnkKK0dFVFRFWFRfRklMRVMgICAgPSAkKEZST05URU5EX0NPTU1PTl9HRVRURVhU X0ZJTEVTKSBcCisJCSAgIHBnX3dhbHN1bW1hcnkuYworR0VUVEVYVF9UUklHR0VSUyA9ICQoRlJP TlRFTkRfQ09NTU9OX0dFVFRFWFRfVFJJR0dFUlMpCitHRVRURVhUX0ZMQUdTICAgID0gJChGUk9O VEVORF9DT01NT05fR0VUVEVYVF9GTEFHUykKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2Fsc3Vt bWFyeS9wZ193YWxzdW1tYXJ5LmMgYi9zcmMvYmluL3BnX3dhbHN1bW1hcnkvcGdfd2Fsc3VtbWFy eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBjMDIyNWVlYjgKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3dhbHN1bW1hcnkvcGdfd2Fsc3VtbWFyeS5jCkBA IC0wLDAgKzEsMjgwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ193YWxzdW1tYXJ5 LmMKKyAqCQlQcmludHMgdGhlIGNvbnRlbnRzIG9mIFdBTCBzdW1tYXJ5IGZpbGVzLgorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNy0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iaW4vcGdfd2Fsc3VtbWFyeS9w Z193YWxzdW1tYXJ5LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBv c3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgor CisjaW5jbHVkZSAiY29tbW9uL2Jsa3JlZnRhYmxlLmgiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dp bmcuaCIKKyNpbmNsdWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKKyNpbmNsdWRlICJsaWIv c3RyaW5naW5mby5oIgorI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCisKK3R5cGVkZWYgc3RydWN0 IHdzX29wdGlvbnMKK3sKKwlib29sCQlpbmRpdmlkdWFsOworCWJvb2wJCXF1aWV0OworfSB3c19v cHRpb25zOworCit0eXBlZGVmIHN0cnVjdCB3c19maWxlX2luZm8KK3sKKwlpbnQJCQlmZDsKKwlj aGFyCSAgICpmaWxlbmFtZTsKK30gd3NfZmlsZV9pbmZvOworCitzdGF0aWMgQmxvY2tOdW1iZXIg KmJsb2NrX2J1ZmZlciA9IE5VTEw7CitzdGF0aWMgdW5zaWduZWQgYmxvY2tfYnVmZmVyX3NpemUg PSA1MTI7CS8qIEluaXRpYWwgc2l6ZS4gKi8KKworc3RhdGljIHZvaWQgZHVtcF9vbmVfcmVsYXRp b24od3Nfb3B0aW9ucyAqb3B0LCBSZWxGaWxlTG9jYXRvciAqcmxvY2F0b3IsCisJCQkJCQkJICBG b3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGxpbWl0X2Jsb2NrLAorCQkJCQkJCSAgQmxv Y2tSZWZUYWJsZVJlYWRlciAqcmVhZGVyKTsKK3N0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAq cHJvZ25hbWUpOworc3RhdGljIGludAljb21wYXJlX2Jsb2NrX251bWJlcnMoY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYik7CitzdGF0aWMgaW50CXdhbHN1bW1hcnlfcmVhZF9jYWxsYmFjayh2 b2lkICpjYWxsYmFja19hcmcsIHZvaWQgKmRhdGEsCisJCQkJCQkJCQkgaW50IGxlbmd0aCk7Citz dGF0aWMgdm9pZCB3YWxzdW1tYXJ5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmNhbGxiYWNrX2FyZywg Y2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKKworLyoKKyAqIE1haW4g cHJvZ3JhbS4KKyAqLworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3Rh dGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisJCXsiaW5kaXZpZHVhbCIsIG5v X2FyZ3VtZW50LCBOVUxMLCAnaSd9LAorCQl7InF1aWV0Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdx J30sCisJCXtOVUxMLCAwLCBOVUxMLCAwfQorCX07CisKKwljb25zdCBjaGFyICpwcm9nbmFtZTsK KwlpbnQJCQlvcHRpbmRleDsKKwlpbnQJCQljOworCXdzX29wdGlvbnMJb3B0OworCisJbWVtc2V0 KCZvcHQsIDAsIHNpemVvZih3c19vcHRpb25zKSk7CisKKwlwZ19sb2dnaW5nX2luaXQoYXJndlsw XSk7CisJcHJvZ25hbWUgPSBnZXRfcHJvZ25hbWUoYXJndlswXSk7CisJaGFuZGxlX2hlbHBfdmVy c2lvbl9vcHRzKGFyZ2MsIGFyZ3YsIHByb2duYW1lLCBoZWxwKTsKKworCS8qIHByb2Nlc3MgY29t bWFuZC1saW5lIG9wdGlvbnMgKi8KKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2 LCAiZjppcXc6IiwKKwkJCQkJCQlsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQorCXsK KwkJc3dpdGNoIChjKQorCQl7CisJCQljYXNlICdpJzoKKwkJCQlvcHQuaW5kaXZpZHVhbCA9IHRy dWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdxJzoKKwkJCQlvcHQucXVpZXQgPSB0cnVlOworCQkJ CWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVtaXR0ZWQg YSBjb21wbGFpbnQgKi8KKwkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIg Zm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJCWV4aXQoMSk7CisJCX0KKwl9 CisKKwlpZiAob3B0aW5kID49IGFyZ2MpCisJeworCQlwZ19sb2dfZXJyb3IoIiVzOiBubyBpbnB1 dCBmaWxlcyBzcGVjaWZpZWQiLCBwcm9nbmFtZSk7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkg XCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXQo MSk7CisJfQorCisJd2hpbGUgKG9wdGluZCA8IGFyZ2MpCisJeworCQl3c19maWxlX2luZm8gd3M7 CisJCUJsb2NrUmVmVGFibGVSZWFkZXIgKnJlYWRlcjsKKwkJUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3I7CisJCUZvcmtOdW1iZXIJZm9ya251bTsKKwkJQmxvY2tOdW1iZXIgbGltaXRfYmxvY2s7CisK KwkJd3MuZmlsZW5hbWUgPSBhcmd2W29wdGluZCsrXTsKKwkJaWYgKCh3cy5mZCA9IG9wZW4od3Mu ZmlsZW5hbWUsIE9fUkRPTkxZIHwgUEdfQklOQVJZLCAwKSkgPCAwKQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIHdzLmZpbGVuYW1lKTsKKworCQlyZWFkZXIg PSBDcmVhdGVCbG9ja1JlZlRhYmxlUmVhZGVyKHdhbHN1bW1hcnlfcmVhZF9jYWxsYmFjaywgJndz LAorCQkJCQkJCQkJCSAgIHdzLmZpbGVuYW1lLAorCQkJCQkJCQkJCSAgIHdhbHN1bW1hcnlfZXJy b3JfY2FsbGJhY2ssIE5VTEwpOworCQl3aGlsZSAoQmxvY2tSZWZUYWJsZVJlYWRlck5leHRSZWxh dGlvbihyZWFkZXIsICZybG9jYXRvciwgJmZvcmtudW0sCisJCQkJCQkJCQkJCSAgICZsaW1pdF9i bG9jaykpCisJCQlkdW1wX29uZV9yZWxhdGlvbigmb3B0LCAmcmxvY2F0b3IsIGZvcmtudW0sIGxp bWl0X2Jsb2NrLCByZWFkZXIpOworCisJCURlc3Ryb3lCbG9ja1JlZlRhYmxlUmVhZGVyKHJlYWRl cik7CisJCWNsb3NlKHdzLmZkKTsKKwl9CisKKwlleGl0KDApOworfQorCisvKgorICogRHVtcCBk ZXRhaWxzIGZvciBvbmUgcmVsYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitkdW1wX29uZV9yZWxh dGlvbih3c19vcHRpb25zICpvcHQsIFJlbEZpbGVMb2NhdG9yICpybG9jYXRvciwKKwkJCQkgIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgbGltaXRfYmxvY2ssCisJCQkJICBCbG9ja1Jl ZlRhYmxlUmVhZGVyICpyZWFkZXIpCit7CisJdW5zaWduZWQJaSA9IDA7CisJdW5zaWduZWQJbmJs b2NrczsKKwlCbG9ja051bWJlciBzdGFydGJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCUJs b2NrTnVtYmVyIGVuZGJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCisJLyogRHVtcCBsaW1p dCBibG9jaywgaWYgYW55LiAqLworCWlmIChsaW1pdF9ibG9jayAhPSBJbnZhbGlkQmxvY2tOdW1i ZXIpCisJCXByaW50ZigiVFMgJXUsIERCICV1LCBSRUwgJXUsIEZPUksgJXM6IGxpbWl0ICV1XG4i LAorCQkJICAgcmxvY2F0b3ItPnNwY09pZCwgcmxvY2F0b3ItPmRiT2lkLCBybG9jYXRvci0+cmVs TnVtYmVyLAorCQkJICAgZm9ya05hbWVzW2ZvcmtudW1dLCBsaW1pdF9ibG9jayk7CisKKwkvKiBJ ZiB3ZSBoYXZlbid0IGFsbG9jYXRlZCBhIGJsb2NrIGJ1ZmZlciB5ZXQsIGRvIHRoYXQgbm93LiAq LworCWlmIChibG9ja19idWZmZXIgPT0gTlVMTCkKKwkJYmxvY2tfYnVmZmVyID0gcGFsbG9jX2Fy cmF5KEJsb2NrTnVtYmVyLCBibG9ja19idWZmZXJfc2l6ZSk7CisKKwkvKiBUcnkgdG8gZmlsbCB0 aGUgYmxvY2sgYnVmZmVyLiAqLworCW5ibG9ja3MgPSBCbG9ja1JlZlRhYmxlUmVhZGVyR2V0Qmxv Y2tzKHJlYWRlciwKKwkJCQkJCQkJCQkgICBibG9ja19idWZmZXIsCisJCQkJCQkJCQkJICAgYmxv Y2tfYnVmZmVyX3NpemUpOworCisJLyogSWYgd2UgZmlsbGVkIHRoZSBibG9jayBidWZmZXIgY29t cGxldGVseSwgd2UgbXVzdCBlbmxhcmdlIGl0LiAqLworCXdoaWxlIChuYmxvY2tzID49IGJsb2Nr X2J1ZmZlcl9zaXplKQorCXsKKwkJdW5zaWduZWQJbmV3X3NpemU7CisKKwkJLyogRG91YmxlIHRo ZSBzaXplLCBiZWluZyBjYXJlZnVsIGFib3V0IG92ZXJmbG93LiAqLworCQluZXdfc2l6ZSA9IGJs b2NrX2J1ZmZlcl9zaXplICogMjsKKwkJaWYgKG5ld19zaXplIDwgYmxvY2tfYnVmZmVyX3NpemUp CisJCQluZXdfc2l6ZSA9IFBHX1VJTlQzMl9NQVg7CisJCWJsb2NrX2J1ZmZlciA9IHJlcGFsbG9j X2FycmF5KGJsb2NrX2J1ZmZlciwgQmxvY2tOdW1iZXIsIG5ld19zaXplKTsKKworCQkvKiBUcnkg dG8gZmlsbCB0aGUgbmV3bHktYWxsb2NhdGVkIHNwYWNlLiAqLworCQluYmxvY2tzICs9CisJCQlC bG9ja1JlZlRhYmxlUmVhZGVyR2V0QmxvY2tzKHJlYWRlciwKKwkJCQkJCQkJCQkgYmxvY2tfYnVm ZmVyICsgYmxvY2tfYnVmZmVyX3NpemUsCisJCQkJCQkJCQkJIG5ld19zaXplIC0gYmxvY2tfYnVm ZmVyX3NpemUpOworCisJCS8qIFNhdmUgdGhlIG5ldyBzaXplIGZvciBsYXRlciBjYWxscy4gKi8K KwkJYmxvY2tfYnVmZmVyX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisKKwkvKiBJZiB3ZSBkb24ndCBu ZWVkIHRvIHByb2R1Y2UgYW55IG91dHB1dCwgc2tpcCB0aGUgcmVzdCBvZiB0aGlzLiAqLworCWlm IChvcHQtPnF1aWV0KQorCQlyZXR1cm47CisKKwkvKgorCSAqIFNvcnQgdGhlIHJldHVybmVkIGJs b2NrIG51bWJlcnMuIElmIHRoZSBibG9jayByZWZlcmVuY2UgdGFibGUgd2FzIHVzaW5nCisJICog dGhlIGJpdG1hcCByZXByZXNlbnRhdGlvbiBmb3IgYSBnaXZlbiBjaHVuaywgdGhlIGJsb2NrIG51 bWJlcnMgaW4gdGhhdAorCSAqIGNodW5rIHdpbGwgYWxyZWFkeSBiZSBzb3J0ZWQsIGJ1dCB3aGVu IHRoZSBhcnJheS1vZi1vZmZzZXRzCisJICogcmVwcmVzZW50YXRpb24gaXMgdXNlZCwgd2UgY2Fu IHJlY2VpdmUgYmxvY2sgbnVtYmVycyBoZXJlIG91dCBvZiBvcmRlci4KKwkgKi8KKwlxc29ydChi bG9ja19idWZmZXIsIG5ibG9ja3MsIHNpemVvZihCbG9ja051bWJlciksIGNvbXBhcmVfYmxvY2tf bnVtYmVycyk7CisKKwkvKiBEdW1wIGJsb2NrIHJlZmVyZW5jZXMuICovCisJd2hpbGUgKGkgPCBu YmxvY2tzKQorCXsKKwkJLyoKKwkJICogRmluZCB0aGUgbmV4dCByYW5nZSBvZiBibG9ja3MgdG8g cHJpbnQsIGJ1dCBpZiAtLWluZGl2aWR1YWwgd2FzCisJCSAqIHNwZWNpZmllZCwgdGhlbiBjb25z aWRlciBlYWNoIGJsb2NrIGEgc2VwYXJhdGUgcmFuZ2UuCisJCSAqLworCQlzdGFydGJsb2NrID0g ZW5kYmxvY2sgPSBibG9ja19idWZmZXJbaSsrXTsKKwkJaWYgKCFvcHQtPmluZGl2aWR1YWwpCisJ CXsKKwkJCXdoaWxlIChpIDwgbmJsb2NrcyAmJiBibG9ja19idWZmZXJbaV0gPT0gZW5kYmxvY2sg KyAxKQorCQkJeworCQkJCWVuZGJsb2NrKys7CisJCQkJaSsrOworCQkJfQorCQl9CisKKwkJLyog Rm9ybWF0IHRoaXMgcmFuZ2Ugb2YgYmxvY2sgbnVtYmVycyBhcyBhIHN0cmluZy4gKi8KKwkJaWYg KHN0YXJ0YmxvY2sgPT0gZW5kYmxvY2spCisJCQlwcmludGYoIlRTICV1LCBEQiAldSwgUkVMICV1 LCBGT1JLICVzOiBibG9jayAldVxuIiwKKwkJCQkgICBybG9jYXRvci0+c3BjT2lkLCBybG9jYXRv ci0+ZGJPaWQsIHJsb2NhdG9yLT5yZWxOdW1iZXIsCisJCQkJICAgZm9ya05hbWVzW2ZvcmtudW1d LCBzdGFydGJsb2NrKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJUUyAldSwgREIgJXUsIFJFTCAldSwg Rk9SSyAlczogYmxvY2tzICV1Li4ldVxuIiwKKwkJCQkgICBybG9jYXRvci0+c3BjT2lkLCBybG9j YXRvci0+ZGJPaWQsIHJsb2NhdG9yLT5yZWxOdW1iZXIsCisJCQkJICAgZm9ya05hbWVzW2Zvcmtu dW1dLCBzdGFydGJsb2NrLCBlbmRibG9jayk7CisJfQorfQorCisvKgorICogUXVpY2tzb3J0IGNv bXBhcmF0b3IgZm9yIGJsb2NrIG51bWJlcnMuCisgKi8KK3N0YXRpYyBpbnQKK2NvbXBhcmVfYmxv Y2tfbnVtYmVycyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCUJsb2NrTnVtYmVy IGFhID0gKihCbG9ja051bWJlciAqKSBhOworCUJsb2NrTnVtYmVyIGJiID0gKihCbG9ja051bWJl ciAqKSBiOworCisJaWYgKGFhID4gYmIpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGFhID09IGJi KQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoKKyAqIEVycm9yIGNh bGxiYWNrLgorICovCit2b2lkCit3YWxzdW1tYXJ5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmNhbGxi YWNrX2FyZywgY2hhciAqZm10LC4uLikKK3sKKwl2YV9saXN0CQlhcDsKKworCXZhX3N0YXJ0KGFw LCBmbXQpOworCXBnX2xvZ19nZW5lcmljX3YoUEdfTE9HX0VSUk9SLCBQR19MT0dfUFJJTUFSWSwg Zm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWV4aXQoMSk7Cit9CisKKy8qCisgKiBSZWFkIGNh bGxiYWNrLgorICovCitpbnQKK3dhbHN1bW1hcnlfcmVhZF9jYWxsYmFjayh2b2lkICpjYWxsYmFj a19hcmcsIHZvaWQgKmRhdGEsIGludCBsZW5ndGgpCit7CisJd3NfZmlsZV9pbmZvICp3cyA9IGNh bGxiYWNrX2FyZzsKKwlpbnQJCQlyYzsKKworCWlmICgocmMgPSByZWFkKHdzLT5mZCwgZGF0YSwg bGVuZ3RoKSkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVt Iiwgd3MtPmZpbGVuYW1lKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIGhlbHAKKyAqCisg KiBQcmludHMgaGVscCBwYWdlIGZvciB0aGUgcHJvZ3JhbQorICoKKyAqIHByb2duYW1lOiB0aGUg bmFtZSBvZiB0aGUgZXhlY3V0ZWQgcHJvZ3JhbSwgc3VjaCBhcyAicGdfd2Fsc3VtbWFyeSIKKyAq Lworc3RhdGljIHZvaWQKK2hlbHAoY29uc3QgY2hhciAqcHJvZ25hbWUpCit7CisJcHJpbnRmKF8o IiVzIHByaW50cyB0aGUgY29udGVudHMgb2YgYSBXQUwgc3VtbWFyeSBmaWxlLlxuXG4iKSwgcHJv Z25hbWUpOworCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKKwlwcmludGYoXygiICAlcyBbT1BUSU9O XS4uLiBGSUxFLi4uXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCJcbk9wdGlvbnM6XG4iKSk7 CisJcHJpbnRmKF8oIiAgLWksIC0taW5kaXZpZHVhbCAgICAgICAgICBsaXN0IGJsb2NrIG51bWJl cnMgaW5kaXZpZHVhbGx5LCBub3QgYXMgcmFuZ2VzXG4iKSk7CisJcHJpbnRmKF8oIiAgLXEsIC0t cXVpZXQgICAgICAgICAgICAgICBkb24ndCBwcmludCBhbnl0aGluZywganVzdCBwYXJzZSB0aGUg ZmlsZXNcbiIpKTsKKwlwcmludGYoXygiICAtPywgLS1oZWxwICAgICAgICAgICAgICAgIHNob3cg dGhpcyBoZWxwLCB0aGVuIGV4aXRcbiIpKTsKKworCXByaW50ZihfKCJcblJlcG9ydCBidWdzIHRv IDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOworCXByaW50ZihfKCIlcyBob21lIHBhZ2U6 IDwlcz5cbiIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggZTM3ZWY5YWE3Ni4uODZlMGE4NjUwMyAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTQwMzUsMyArNDAzNSw1IEBAIGNiX3RhYmxlc3BhY2VfbWFwcGluZwogbWFu aWZlc3RfZGF0YQogbWFuaWZlc3Rfd3JpdGVyCiByZmlsZQord3Nfb3B0aW9ucword3NfZmlsZV9p bmZvCi0tIAoyLjM5LjMgKEFwcGxlIEdpdC0xNDUpCgo= --00000000000069928c060ce2d17a Content-Type: application/octet-stream; name="v16-0001-Add-a-new-WAL-summarizer-process.patch" Content-Disposition: attachment; filename="v16-0001-Add-a-new-WAL-summarizer-process.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqct14v70 RnJvbSAwMzNlNGUzZWNjYzgyYTA5MzVlZWZjOWE0ZjdmZWYyOGQwYTdhZjQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMjUgT2N0IDIwMjMgMTI6NTc6MjIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNiAx LzRdIEFkZCBhIG5ldyBXQUwgc3VtbWFyaXplciBwcm9jZXNzLgpNSU1FLVZlcnNpb246IDEuMApD b250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1F bmNvZGluZzogOGJpdAoKV2hlbiBhY3RpdmUsIHRoaXMgcHJvY2VzcyB3cml0ZXMgV0FMIHN1bW1h cnkgZmlsZXMgdG8KJFBHREFUQS9wZ193YWwvc3VtbWFyaWVzLiBFYWNoIHN1bW1hcnkgZmlsZSBj b250YWlucyBpbmZvcm1hdGlvbiBmb3IgYQpjZXJ0YWluIHJhbmdlIG9mIExTTnMgb24gYSBjZXJ0 YWluIFRMSS4gRm9yIGVhY2ggcmVsYXRpb24sIGl0IHN0b3JlcyBhCiJsaW1pdCBibG9jayIgd2hp Y2ggaXMgMCBpZiBhIHJlbGF0aW9uIGlzIGNyZWF0ZWQgb3IgZGVzdHJveWVkIHdpdGhpbgphIGNl cnRhaW4gcmFuZ2Ugb2YgV0FMIHJlY29yZHMsIG9yIG90aGVyd2lzZSB0aGUgc2hvcnRlc3QgbGVu Z3RoIHRvCndoaWNoIHRoZSByZWxhdGlvbiB3YXMgdHJ1bmNhdGVkIGR1cmluZyB0aGF0IHJhbmdl IG9mIFdBTCByZWNvcmRzLCBvcgpvdGhlcndpc2UgSW52YWxpZEJsb2NrTnVtYmVyLiBJbiBhZGRp dGlvbiwgaXQgc3RvcmVzIGEgbGlzdCBvZiBibG9ja3MKd2hpY2ggaGF2ZSBiZWVuIG1vZGlmaWVk IGR1cmluZyB0aGF0IHJhbmdlIG9mIFdBTCByZWNvcmRzLCBidXQKZXhjbHVkaW5nIGJsb2NrcyB3 aGljaCB3ZXJlIHJlbW92ZWQgYnkgdHJ1bmNhdGlvbiBhZnRlciB0aGV5IHdlcmUKbW9kaWZpZWQg YW5kIG5ldmVyIHN1YnNlcXVlbnRseSBtb2RpZmllZCBhZ2Fpbi4gSW4gb3RoZXIgd29yZHMsIGl0 CnRlbGxzIHVzIHdoaWNoIGJsb2NrcyBuZWVkIHRvIGNvcGllZCBpbiBjYXNlIG9mIGFuIGluY3Jl bWVudGFsIGJhY2t1cApjb3ZlcmluZyB0aGF0IHJhbmdlIG9mIFdBTCByZWNvcmRzLgoKQSBuZXcg cGFyYW1ldGVyIHN1bW1hcml6ZV93YWwgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGlzIG5ldyBiYWNr Z3JvdW5kCnByb2Nlc3MuICBUaGUgYmFja2dyb3VuZCBwcm9jZXNzIGFsc28gYXV0b21hdGljYWxs eSBkZWxldGVzIHN1bW1hcnkKZmlsZXMgdGhhdCBhcmUgb2xkZXIgdGhhbiB3YWxfc3VtbWFyaXpl X2tlZXBfdGltZSwgaWYgdGhhdCBwYXJhbWV0ZXIKaGFzIGEgbm9uLXplcm8gdmFsdWUgYW5kIHRo ZSBzdW1tYXJpemVyIGlzIGNvbmZpZ3VyZWQgdG8gcnVuLgoKUGF0Y2ggYnkgbWUsIHdpdGggc29t ZSBkZXNpZ24gaGVscCBmcm9tIERpbGlwIEt1bWFyLiAgUmV2aWV3ZWQgYnkKTWF0dGhpYXMgdmFu IGRlIE1lZW50LCBEaWxpcCBLdW1hciwgSmFrdWIgV2FydGFrLCBQZXRlciBFaXNlbnRyYXV0LAph bmQgw4FsdmFybyBIZXJyZXJhLgotLS0KIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAg ICAgICAgICAgICAgICB8ICAgNjEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j ICAgICAgICAgICAgIHwgIDEwMSArLQogc3JjL2JhY2tlbmQvYmFja3VwL01ha2VmaWxlICAgICAg ICAgICAgICAgICAgIHwgICAgNCArLQogc3JjL2JhY2tlbmQvYmFja3VwL21lc29uLmJ1aWxkICAg ICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9iYWNrdXAvd2Fsc3VtbWFyeS5jICAg ICAgICAgICAgICAgfCAgMzU2ICsrKysrCiBzcmMvYmFja2VuZC9iYWNrdXAvd2Fsc3VtbWFyeWZ1 bmNzLmMgICAgICAgICAgfCAgMTY5ICsrCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL01ha2VmaWxl ICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vz cy5jICAgICAgICAgICB8ICAgIDggKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWls ZCAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIu YyAgICAgICAgICAgfCAgIDU2ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXpl ci5jICAgICAgICB8IDEzOTggKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9sd2xvY2tuYW1lcy50eHQgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvcGdzdGF0X2lvLmMgICAgICAgIHwgICAgNCArLQogLi4uL3V0aWxzL2FjdGl2aXR5L3dh aXRfZXZlbnRfbmFtZXMudHh0ICAgICAgIHwgICAgNSArCiBzcmMvYmFja2VuZC91dGlscy9pbml0 L21pc2Npbml0LmMgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMjYgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAgNSArCiBzcmMvYmluL2luaXRkYi9pbml0ZGIuYyAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9jb21tb24vTWFrZWZpbGUgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2NvbW1vbi9ibGtyZWZ0YWJsZS5jICAg ICAgICAgICAgICAgICAgICAgIHwgMTMwOCArKysrKysrKysrKysrKysKIHNyYy9jb21tb24vbWVz b24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvYWNj ZXNzL3hsb2cuaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS9iYWNr dXAvd2Fsc3VtbWFyeS5oICAgICAgICAgICAgICAgfCAgIDQ5ICsKIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgMTkgKwogc3JjL2luY2x1ZGUvY29tbW9u L2Jsa3JlZnRhYmxlLmggICAgICAgICAgICAgIHwgIDExNiArKwogc3JjL2luY2x1ZGUvbWlzY2Fk bWluLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvaW5jbHVkZS9wb3N0bWFz dGVyL3dhbHN1bW1hcml6ZXIuaCAgICAgICAgfCAgIDMzICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvYy5oICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2d1 Y190YWJsZXMuaCAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxMSArCiAzMCBmaWxlcyBjaGFuZ2VkLCAzNzQz IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i YWNrZW5kL2JhY2t1cC93YWxzdW1tYXJ5LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2Vu ZC9iYWNrdXAvd2Fsc3VtbWFyeWZ1bmNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb21t b24vYmxrcmVmdGFibGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2JhY2t1cC93 YWxzdW1tYXJ5LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9jb21tb24vYmxrcmVm dGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvd2Fsc3Vt bWFyaXplci5oCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDQ0Y2FkYTJiNDAuLmVlOTg1ODUwMjcgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNn bWwKQEAgLTQxNTAsNiArNDE1MCw2NyBAQCByZXN0b3JlX2NvbW1hbmQgPSAnY29weSAiQzpcXHNl cnZlclxcYXJjaGl2ZWRpclxcJWYiICIlcCInICAjIFdpbmRvd3MKICAgICA8L3ZhcmlhYmxlbGlz dD4KICAgIDwvc2VjdDI+CiAKKyAgIDxzZWN0MiBpZD0icnVudGltZS1jb25maWctd2FsLXN1bW1h cml6YXRpb24iPgorICAgIDx0aXRsZT5XQUwgU3VtbWFyaXphdGlvbjwvdGl0bGU+CisKKyA8IS0t CisgICAgPHBhcmE+CisgICAgIFRoZXNlIHNldHRpbmdzIGNvbnRyb2wgV0FMIHN1bW1hcml6YXRp b24sIGEgZmVhdHVyZSB3aGljaCBtdXN0IGJlCisgICAgIGVuYWJsZWQgaW4gb3JkZXIgdG8gcGVy Zm9ybSBhbgorICAgICA8bGluayBsaW5rZW5kPSJiYWNrdXAtaW5jcmVtZW50YWwtYmFja3VwIj5p bmNyZW1lbnRhbCBiYWNrdXA8L2xpbms+LgorICAgIDwvcGFyYT4KKyAtLT4KKworICAgIDx2YXJp YWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1zdW1tYXJpemUtd2FsIiB4cmVm bGFiZWw9InN1bW1hcml6ZV93YWwiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+c3VtbWFyaXplX3dh bDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAg ICAgICA8cHJpbWFyeT48dmFybmFtZT5zdW1tYXJpemVfd2FsPC92YXJuYW1lPiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJt PgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBFbmFibGVzIHRoZSBXQUwg c3VtbWFyaXplciBwcm9jZXNzLiBOb3RlIHRoYXQgV0FMIHN1bW1hcml6YXRpb24gY2FuCisgICAg ICAgYmUgZW5hYmxlZCBlaXRoZXIgb24gYSBwcmltYXJ5IG9yIG9uIGEgc3RhbmRieS4gV0FMIHN1 bW1hcml6YXRpb24KKyAgICAgICBjYW5ub3QgYmUgZW5hYmxlZCB3aGVuIDx2YXJuYW1lPndhbF9s ZXZlbDwvdmFybmFtZT4gaXMgc2V0IHRvCisgICAgICAgPGxpdGVyYWw+bWluaW1hbDwvbGl0ZXJh bD4uICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgPGZpbGVu YW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3Igb24gdGhlIHNlcnZlciBjb21t YW5kIGxpbmUuCisgICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPi4K KyAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy13YWwtc3VtbWFyeS1rZWVwLXRpbWUiIHhyZWZs YWJlbD0id2FsX3N1bW1hcnlfa2VlcF90aW1lIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPndhbF9z dW1tYXJ5X2tlZXBfdGltZTwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAg PGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT53YWxfc3VtbWFyeV9rZWVwX3Rp bWU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9p bmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgor ICAgICAgIENvbmZpZ3VyZXMgdGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHdoaWNoIHRoZSBXQUwg c3VtbWFyaXplcgorICAgICAgIGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyBvbGQgV0FMIHN1bW1hcmll cy4gVGhlIGZpbGUgdGltZXN0YW1wIGlzIHVzZWQgdG8KKyAgICAgICBkZXRlcm1pbmUgd2hpY2gg ZmlsZXMgYXJlIG9sZCBlbm91Z2ggdG8gcmVtb3ZlLiBUeXBpY2FsbHksIHlvdSBzaG91bGQgc2V0 CisgICAgICAgdGhpcyBjb21mb3J0YWJseSBoaWdoZXIgdGhhbiB0aGUgdGltZSB0aGF0IGNvdWxk IHBhc3MgYmV0d2VlbiBhIGJhY2t1cAorICAgICAgIGFuZCBhIGxhdGVyIGluY3JlbWVudGFsIGJh Y2t1cCB0aGF0IGRlcGVuZHMgb24gaXQuICBXQUwgc3VtbWFyaWVzIG11c3QKKyAgICAgICBiZSBh dmFpbGFibGUgZm9yIHRoZSBlbnRpcmUgcmFuZ2Ugb2YgV0FMIHJlY29yZHMgYmV0d2VlbiB0aGUg cHJlY2VkaW5nCisgICAgICAgYmFja3VwIGFuZCB0aGUgbmV3IG9uZSBiZWluZyB0YWtlbjsgaWYg bm90LCB0aGUgaW5jcmVtZW50YWwgYmFja3VwIHdpbGwKKyAgICAgICBmYWlsLiBJZiB0aGlzIHBh cmFtZXRlciBpcyBzZXQgdG8gemVybywgV0FMIHN1bW1hcmllcyB3aWxsIG5vdCBiZQorICAgICAg IGF1dG9tYXRpY2FsbHkgZGVsZXRlZCwgYnV0IGl0IGlzIHNhZmUgdG8gbWFudWFsbHkgcmVtb3Zl IGZpbGVzIHRoYXQgeW91CisgICAgICAga25vdyB3aWxsIG5vdCBiZSByZXF1aXJlZCBmb3IgZnV0 dXJlIGluY3JlbWVudGFsIGJhY2t1cHMuCisgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkg YmUgc2V0IGluIHRoZQorICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1l PiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZCBsaW5lLgorICAgICAgIFRoZSBkZWZhdWx0 IGlzIDEwIGRheXMuIElmIDxsaXRlcmFsPnN1bW1hcml6ZV93YWwgPSBvZmY8L2xpdGVyYWw+LAor ICAgICAgIGV4aXN0aW5nIFdBTCBzdW1tYXJpZXMgd2lsbCBub3QgYmUgcmVtb3ZlZCByZWdhcmRs ZXNzIG9mIHRoZSB2YWx1ZSBvZgorICAgICAgIHRoaXMgcGFyYW1ldGVyLCBiZWNhdXNlIHRoZSBX QUwgc3VtbWFyaXplciB3aWxsIG5vdCBydW4uCisgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3Rp dGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDwvdmFyaWFibGVsaXN0PgorCisgICA8 L3NlY3QyPgorCiAgICA8L3NlY3QxPgogCiAgICA8c2VjdDEgaWQ9InJ1bnRpbWUtY29uZmlnLXJl cGxpY2F0aW9uIj4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCAwMWUwNDg0NTg0Li40 MjFhMDE2Y2ExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC03Nyw2ICs3Nyw3IEBA CiAjaW5jbHVkZSAicG9ydC9wZ19pb3ZlYy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0 ZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3N0YXJ0dXAuaCIKKyNpbmNsdWRlICJwb3N0bWFz dGVyL3dhbHN1bW1hcml6ZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbHdyaXRlci5oIgog I2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9v cmlnaW4uaCIKQEAgLTM1ODksNiArMzU5MCw0MyBAQCBYTG9nR2V0TGFzdFJlbW92ZWRTZWdubyh2 b2lkKQogCXJldHVybiBsYXN0UmVtb3ZlZFNlZ05vOwogfQogCisvKgorICogUmV0dXJuIHRoZSBv bGRlc3QgV0FMIHNlZ21lbnQgb24gdGhlIGdpdmVuIFRMSSB0aGF0IHN0aWxsIGV4aXN0cyBpbgor ICogWExPR0RJUiwgb3IgMCBpZiBub25lLgorICovCitYTG9nU2VnTm8KK1hMb2dHZXRPbGRlc3RT ZWdubyhUaW1lTGluZUlEIHRsaSkKK3sKKwlESVIJCSAgICp4bGRpcjsKKwlzdHJ1Y3QgZGlyZW50 ICp4bGRlOworCVhMb2dTZWdObwlvbGRlc3Rfc2Vnbm8gPSAwOworCisJeGxkaXIgPSBBbGxvY2F0 ZURpcihYTE9HRElSKTsKKwl3aGlsZSAoKHhsZGUgPSBSZWFkRGlyKHhsZGlyLCBYTE9HRElSKSkg IT0gTlVMTCkKKwl7CisJCVRpbWVMaW5lSUQJZmlsZV90bGk7CisJCVhMb2dTZWdObwlmaWxlX3Nl Z25vOworCisJCS8qIElnbm9yZSBmaWxlcyB0aGF0IGFyZSBub3QgWExPRyBzZWdtZW50cy4gKi8K KwkJaWYgKCFJc1hMb2dGaWxlTmFtZSh4bGRlLT5kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJ LyogUGFyc2UgZmlsZW5hbWUgdG8gZ2V0IFRMSSBhbmQgc2Vnbm8uICovCisJCVhMb2dGcm9tRmls ZU5hbWUoeGxkZS0+ZF9uYW1lLCAmZmlsZV90bGksICZmaWxlX3NlZ25vLAorCQkJCQkJIHdhbF9z ZWdtZW50X3NpemUpOworCisJCS8qIElnbm9yZSBhbnl0aGluZyB0aGF0J3Mgbm90IGZyb20gdGhl IFRMSSBvZiBpbnRlcmVzdC4gKi8KKwkJaWYgKHRsaSAhPSBmaWxlX3RsaSkKKwkJCWNvbnRpbnVl OworCisJCS8qIElmIGl0J3MgdGhlIG9sZGVzdCBzbyBmYXIsIHVwZGF0ZSBvbGRlc3Rfc2Vnbm8u ICovCisJCWlmIChvbGRlc3Rfc2Vnbm8gPT0gMCB8fCBmaWxlX3NlZ25vIDwgb2xkZXN0X3NlZ25v KQorCQkJb2xkZXN0X3NlZ25vID0gZmlsZV9zZWdubzsKKwl9CisKKwlGcmVlRGlyKHhsZGlyKTsK KwlyZXR1cm4gb2xkZXN0X3NlZ25vOworfQogCiAvKgogICogVXBkYXRlIHRoZSBsYXN0IHJlbW92 ZWQgc2Vnbm8gcG9pbnRlciBpbiBzaGFyZWQgbWVtb3J5LCB0byByZWZsZWN0IHRoYXQgdGhlCkBA IC0zODY5LDggKzM5MDcsOCBAQCBSZW1vdmVYbG9nRmlsZShjb25zdCBzdHJ1Y3QgZGlyZW50ICpz ZWdtZW50X2RlLAogfQogCiAvKgotICogVmVyaWZ5IHdoZXRoZXIgcGdfd2FsIGFuZCBwZ193YWwv YXJjaGl2ZV9zdGF0dXMgZXhpc3QuCi0gKiBJZiB0aGUgbGF0dGVyIGRvZXMgbm90IGV4aXN0LCBy ZWNyZWF0ZSBpdC4KKyAqIFZlcmlmeSB3aGV0aGVyIHBnX3dhbCwgcGdfd2FsL2FyY2hpdmVfc3Rh dHVzLCBhbmQgcGdfd2FsL3N1bW1hcmllcyBleGlzdC4KKyAqIElmIHRoZSBsYXR0ZXIgZG8gbm90 IGV4aXN0LCByZWNyZWF0ZSB0aGVtLgogICoKICAqIEl0IGlzIG5vdCB0aGUgZ29hbCBvZiB0aGlz IGZ1bmN0aW9uIHRvIHZlcmlmeSB0aGUgY29udGVudHMgb2YgdGhlc2UKICAqIGRpcmVjdG9yaWVz LCBidXQgdG8gaGVscCBpbiBjYXNlcyB3aGVyZSBzb21lb25lIGhhcyBwZXJmb3JtZWQgYSBjbHVz dGVyCkBAIC0zOTEzLDYgKzM5NTEsMjYgQEAgVmFsaWRhdGVYTE9HRGlyZWN0b3J5U3RydWN0dXJl KHZvaWQpCiAJCQkJCShlcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgbWlzc2luZyBkaXJlY3Rvcnkg XCIlc1wiOiAlbSIsCiAJCQkJCQkJcGF0aCkpKTsKIAl9CisKKwkvKiBDaGVjayBmb3Igc3VtbWFy aWVzICovCisJc25wcmludGYocGF0aCwgTUFYUEdQQVRILCBYTE9HRElSICIvc3VtbWFyaWVzIik7 CisJaWYgKHN0YXQocGF0aCwgJnN0YXRfYnVmKSA9PSAwKQorCXsKKwkJLyogQ2hlY2sgZm9yIHdl aXJkIGNhc2VzIHdoZXJlIGl0IGV4aXN0cyBidXQgaXNuJ3QgYSBkaXJlY3RvcnkgKi8KKwkJaWYg KCFTX0lTRElSKHN0YXRfYnVmLnN0X21vZGUpKQorCQkJZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVy cm1zZygicmVxdWlyZWQgV0FMIGRpcmVjdG9yeSBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLAorCQkJ CQkJCXBhdGgpKSk7CisJfQorCWVsc2UKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2co ImNyZWF0aW5nIG1pc3NpbmcgV0FMIGRpcmVjdG9yeSBcIiVzXCIiLCBwYXRoKSkpOworCQlpZiAo TWFrZVBHRGlyZWN0b3J5KHBhdGgpIDwgMCkKKwkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCShlcnJt c2coImNvdWxkIG5vdCBjcmVhdGUgbWlzc2luZyBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJ CQkJcGF0aCkpKTsKKwl9CiB9CiAKIC8qCkBAIC01MjM3LDkgKzUyOTUsOSBAQCBTdGFydHVwWExP Ryh2b2lkKQogI2VuZGlmCiAKIAkvKgotCSAqIFZlcmlmeSB0aGF0IHBnX3dhbCBhbmQgcGdfd2Fs L2FyY2hpdmVfc3RhdHVzIGV4aXN0LiAgSW4gY2FzZXMgd2hlcmUKLQkgKiBzb21lb25lIGhhcyBw ZXJmb3JtZWQgYSBjb3B5IGZvciBQSVRSLCB0aGVzZSBkaXJlY3RvcmllcyBtYXkgaGF2ZSBiZWVu Ci0JICogZXhjbHVkZWQgYW5kIG5lZWQgdG8gYmUgcmUtY3JlYXRlZC4KKwkgKiBWZXJpZnkgdGhh dCBwZ193YWwsIHBnX3dhbC9hcmNoaXZlX3N0YXR1cywgYW5kIHBnX3dhbC9zdW1tYXJpZXMgZXhp c3QuCisJICogSW4gY2FzZXMgd2hlcmUgc29tZW9uZSBoYXMgcGVyZm9ybWVkIGEgY29weSBmb3Ig UElUUiwgdGhlc2UgZGlyZWN0b3JpZXMKKwkgKiBtYXkgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGFuZCBu ZWVkIHRvIGJlIHJlLWNyZWF0ZWQuCiAJICovCiAJVmFsaWRhdGVYTE9HRGlyZWN0b3J5U3RydWN0 dXJlKCk7CiAKQEAgLTY5NTYsNiArNzAxNCwyNSBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFn cykKIAkgKi8KIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKKwkvKgorCSAqIFdBTCBzdW1tYXJpZXMg ZW5kIHdoZW4gdGhlIG5leHQgWExPR19DSEVDS1BPSU5UX1JFRE8gb3IKKwkgKiBYTE9HX0NIRUNL UE9JTlRfU0hVVERPV04gcmVjb3JkIGlzIHJlYWNoZWQuIFRoaXMgaXMgdGhlIGZpcnN0IHBvaW50 CisJICogd2hlcmUgKGEpIHdlJ3JlIG5vdCBpbnNpZGUgb2YgYSBjcml0aWNhbCBzZWN0aW9uIGFu ZCAoYikgd2UgY2FuIGJlCisJICogY2VydGFpbiB0aGF0IHRoZSByZWxldmFudCByZWNvcmQgaGFz IGJlZW4gZmx1c2hlZCB0byBkaXNrLCB3aGljaCBtdXN0CisJICogaGFwcGVuIGJlZm9yZSBpdCBj YW4gYmUgc3VtbWFyaXplZC4KKwkgKgorCSAqIElmIHRoaXMgaXMgYSBzaHV0ZG93biBjaGVja3Bv aW50LCB0aGVuIHRoaXMgaGFwcGVucyByZWFzb25hYmx5CisJICogcHJvbXB0bHk6IHdlJ3ZlIG9u bHkganVzdCBpbnNlcnRlZCBhbmQgZmx1c2hlZCB0aGUKKwkgKiBYTE9HX0NIRUNLUE9JTlRfU0hV VERPV04gcmVjb3JkLiBJZiB0aGlzIGlzIG5vdCBhIHNodXRkb3duIGNoZWNrcG9pbnQsCisJICog dGhlbiB0aGlzIG1pZ2h0IG5vdCBiZSB2ZXJ5IHByb21wdCBhdCBhbGw6IHRoZSBYTE9HX0NIRUNL UE9JTlRfUkVETworCSAqIHJlY29yZCB3YXMgd3JpdHRlbiBiZWZvcmUgd2UgYmVnYW4gZmx1c2hp bmcgZGF0YSB0byBkaXNrLCBhbmQgdGhhdAorCSAqIGNvdWxkIGJlIG1hbnkgbWludXRlcyBhZ28g YXQgdGhpcyBwb2ludC4gSG93ZXZlciwgd2UgZG9uJ3QgWExvZ0ZsdXNoKCkKKwkgKiBhZnRlciBp bnNlcnRpbmcgdGhhdCByZWNvcmQsIHNvIHdlJ3JlIG5vdCBndWFyYW50ZWVkIHRoYXQgaXQncyBv biBkaXNrCisJICogdW50aWwgYWZ0ZXIgdGhlIGFib3ZlIGNhbGwgdGhhdCBmbHVzaGVzIHRoZSBY TE9HX0NIRUNLUE9JTlRfT05MSU5FCisJICogcmVjb3JkLgorCSAqLworCVNldFdhbFN1bW1hcml6 ZXJMYXRjaCgpOworCiAJLyoKIAkgKiBMZXQgc21nciBkbyBwb3N0LWNoZWNrcG9pbnQgY2xlYW51 cCAoZWcsIGRlbGV0aW5nIG9sZCBmaWxlcykuCiAJICovCkBAIC03NjMwLDYgKzc3MDcsMjAgQEAg S2VlcExvZ1NlZyhYTG9nUmVjUHRyIHJlY3B0ciwgWExvZ1NlZ05vICpsb2dTZWdObykKIAkJfQog CX0KIAorCS8qCisJICogSWYgV0FMIHN1bW1hcml6YXRpb24gaXMgaW4gdXNlLCBkb24ndCByZW1v dmUgV0FMIHRoYXQgaGFzIHlldCB0byBiZQorCSAqIHN1bW1hcml6ZWQuCisJICovCisJa2VlcCA9 IEdldE9sZGVzdFVuc3VtbWFyaXplZExTTihOVUxMLCBOVUxMLCBmYWxzZSk7CisJaWYgKGtlZXAg IT0gSW52YWxpZFhMb2dSZWNQdHIpCisJeworCQlYTG9nU2VnTm8JdW5zdW1tYXJpemVkX3NlZ25v OworCisJCVhMQnl0ZVRvU2VnKGtlZXAsIHVuc3VtbWFyaXplZF9zZWdubywgd2FsX3NlZ21lbnRf c2l6ZSk7CisJCWlmICh1bnN1bW1hcml6ZWRfc2Vnbm8gPCBzZWdubykKKwkJCXNlZ25vID0gdW5z dW1tYXJpemVkX3NlZ25vOworCX0KKwogCS8qIGJ1dCwga2VlcCBhdCBsZWFzdCB3YWxfa2VlcF9z aXplIGlmIHRoYXQncyBzZXQgKi8KIAlpZiAod2FsX2tlZXBfc2l6ZV9tYiA+IDApCiAJewpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYmFja3VwL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYmFja3Vw L01ha2VmaWxlCmluZGV4IGIyMWJkOGZmNDMuLmE2N2IzYzU4ZDQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2JhY2t1cC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvTWFrZWZpbGUK QEAgLTI1LDYgKzI1LDggQEAgT0JKUyA9IFwKIAliYXNlYmFja3VwX3NlcnZlci5vIFwKIAliYXNl YmFja3VwX3NpbmsubyBcCiAJYmFzZWJhY2t1cF90YXJnZXQubyBcCi0JYmFzZWJhY2t1cF90aHJv dHRsZS5vCisJYmFzZWJhY2t1cF90aHJvdHRsZS5vIFwKKwl3YWxzdW1tYXJ5Lm8gXAorCXdhbHN1 bW1hcnlmdW5jcy5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24u bWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9tZXNvbi5idWlsZCBiL3NyYy9iYWNr ZW5kL2JhY2t1cC9tZXNvbi5idWlsZAppbmRleCAxMWE3OWJiZjgwLi41ZDRlYmUzZWJlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9iYWNrdXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQv YmFja3VwL21lc29uLmJ1aWxkCkBAIC0xMiw0ICsxMiw2IEBAIGJhY2tlbmRfc291cmNlcyArPSBm aWxlcygKICAgJ2Jhc2ViYWNrdXBfdGFyZ2V0LmMnLAogICAnYmFzZWJhY2t1cF90aHJvdHRsZS5j JywKICAgJ2Jhc2ViYWNrdXBfenN0ZC5jJywKKyAgJ3dhbHN1bW1hcnkuYycsCisgICd3YWxzdW1t YXJ5ZnVuY3MuYycsCiApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9iYWNrdXAvd2Fsc3VtbWFy eS5jIGIvc3JjL2JhY2tlbmQvYmFja3VwL3dhbHN1bW1hcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi4yNzFkMTk5ODc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jh Y2tlbmQvYmFja3VwL3dhbHN1bW1hcnkuYwpAQCAtMCwwICsxLDM1NiBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogd2Fsc3VtbWFyeS5jCisgKgkgIEZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5n IGFuZCBtYW5hZ2luZyBXQUwgc3VtbWFyeSBkYXRhLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMjAxMC0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqIHNyYy9iYWNrZW5kL2JhY2t1cC93YWxzdW1tYXJ5LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ19pbnRlcm5hbC5o IgorI2luY2x1ZGUgImJhY2t1cC93YWxzdW1tYXJ5LmgiCisjaW5jbHVkZSAidXRpbHMvd2FpdF9l dmVudC5oIgorCitzdGF0aWMgYm9vbCBJc1dhbFN1bW1hcnlGaWxlbmFtZShjaGFyICpmaWxlbmFt ZSk7CitzdGF0aWMgaW50CUxpc3RDb21wYXJhdG9yRm9yV2FsU3VtbWFyeUZpbGVzKGNvbnN0IExp c3RDZWxsICphLAorCQkJCQkJCQkJCQkgY29uc3QgTGlzdENlbGwgKmIpOworCisvKgorICogR2V0 IGEgbGlzdCBvZiBXQUwgc3VtbWFyaWVzLgorICoKKyAqIElmIHRsaSAhPSAwLCBvbmx5IFdBTCBz dW1tYXJpZXMgd2l0aCB0aGUgaW5kaWNhdGVkIFRMSSB3aWxsIGJlIGluY2x1ZGVkLgorICoKKyAq IElmIHN0YXJ0X2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0ciwgb25seSBzdW1tYXJpZXMgdGhhdCBl bmQgYWZ0ZXIgdGhlCisgKiBpbmRpY2F0ZWQgTFNOIHdpbGwgYmUgaW5jbHVkZWQuCisgKgorICog SWYgZW5kX2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0ciwgb25seSBzdW1tYXJpZXMgdGhhdCBzdGFy dCBiZWZvcmUgdGhlCisgKiBpbmRpY2F0ZWQgTFNOIHdpbGwgYmUgaW5jbHVkZWQuCisgKgorICog VGhlIGludGVudCBpcyB0aGF0IHlvdSBjYW4gY2FsbCBHZXRXYWxTdW1tYXJpZXModGxpLCBzdGFy dF9sc24sIGVuZF9sc24pCisgKiB0byBnZXQgYWxsIFdBTCBzdW1tYXJpZXMgb24gdGhlIGluZGlj YXRlZCB0aW1lbGluZSB0aGF0IG92ZXJsYXAgdGhlCisgKiBzcGVjaWZpZWQgTFNOIHJhbmdlLgor ICovCitMaXN0ICoKK0dldFdhbFN1bW1hcmllcyhUaW1lTGluZUlEIHRsaSwgWExvZ1JlY1B0ciBz dGFydF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbikKK3sKKwlESVIJCSAgICpzZGlyOworCXN0cnVj dCBkaXJlbnQgKmRlbnQ7CisJTGlzdAkgICAqcmVzdWx0ID0gTklMOworCisJc2RpciA9IEFsbG9j YXRlRGlyKFhMT0dESVIgIi9zdW1tYXJpZXMiKTsKKwl3aGlsZSAoKGRlbnQgPSBSZWFkRGlyKHNk aXIsIFhMT0dESVIgIi9zdW1tYXJpZXMiKSkgIT0gTlVMTCkKKwl7CisJCVdhbFN1bW1hcnlGaWxl ICp3czsKKwkJdWludDMyCQl0bXBbNV07CisJCVRpbWVMaW5lSUQJZmlsZV90bGk7CisJCVhMb2dS ZWNQdHIJZmlsZV9zdGFydF9sc247CisJCVhMb2dSZWNQdHIJZmlsZV9lbmRfbHNuOworCisJCS8q IERlY29kZSBmaWxlbmFtZSwgb3Igc2tpcCBpZiBpdCdzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgZm9y bWF0LiAqLworCQlpZiAoIUlzV2FsU3VtbWFyeUZpbGVuYW1lKGRlbnQtPmRfbmFtZSkpCisJCQlj b250aW51ZTsKKwkJc3NjYW5mKGRlbnQtPmRfbmFtZSwgIiUwOFglMDhYJTA4WCUwOFglMDhYIiwK KwkJCSAgICZ0bXBbMF0sICZ0bXBbMV0sICZ0bXBbMl0sICZ0bXBbM10sICZ0bXBbNF0pOworCQlm aWxlX3RsaSA9IHRtcFswXTsKKwkJZmlsZV9zdGFydF9sc24gPSAoKHVpbnQ2NCkgdG1wWzFdKSA8 PCAzMiB8IHRtcFsyXTsKKwkJZmlsZV9lbmRfbHNuID0gKCh1aW50NjQpIHRtcFszXSkgPDwgMzIg fCB0bXBbNF07CisKKwkJLyogU2tpcCBpZiBpdCBkb2Vzbid0IG1hdGNoIHRoZSBmaWx0ZXIgY3Jp dGVyaWEuICovCisJCWlmICh0bGkgIT0gMCAmJiB0bGkgIT0gZmlsZV90bGkpCisJCQljb250aW51 ZTsKKwkJaWYgKCFYTG9nUmVjUHRySXNJbnZhbGlkKHN0YXJ0X2xzbikgJiYgc3RhcnRfbHNuID49 IGZpbGVfZW5kX2xzbikKKwkJCWNvbnRpbnVlOworCQlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQo ZW5kX2xzbikgJiYgZW5kX2xzbiA8PSBmaWxlX3N0YXJ0X2xzbikKKwkJCWNvbnRpbnVlOworCisJ CS8qIEFkZCBpdCB0byB0aGUgbGlzdC4gKi8KKwkJd3MgPSBwYWxsb2Moc2l6ZW9mKFdhbFN1bW1h cnlGaWxlKSk7CisJCXdzLT50bGkgPSBmaWxlX3RsaTsKKwkJd3MtPnN0YXJ0X2xzbiA9IGZpbGVf c3RhcnRfbHNuOworCQl3cy0+ZW5kX2xzbiA9IGZpbGVfZW5kX2xzbjsKKwkJcmVzdWx0ID0gbGFw cGVuZChyZXN1bHQsIHdzKTsKKwl9CisJRnJlZURpcihzZGlyKTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiBCdWlsZCBhIG5ldyBsaXN0IG9mIFdBTCBzdW1tYXJpZXMgYmFzZWQgb24g YW4gZXhpc3RpbmcgbGlzdCwgYnV0IGZpbHRlcmluZworICogb3V0IHN1bW1hcmllcyB0aGF0IGRv bid0IG1hdGNoIHRoZSBzZWFyY2ggcGFyYW1ldGVycy4KKyAqCisgKiBJZiB0bGkgIT0gMCwgb25s eSBXQUwgc3VtbWFyaWVzIHdpdGggdGhlIGluZGljYXRlZCBUTEkgd2lsbCBiZSBpbmNsdWRlZC4K KyAqCisgKiBJZiBzdGFydF9sc24gIT0gSW52YWxpZFhMb2dSZWNQdHIsIG9ubHkgc3VtbWFyaWVz IHRoYXQgZW5kIGFmdGVyIHRoZQorICogaW5kaWNhdGVkIExTTiB3aWxsIGJlIGluY2x1ZGVkLgor ICoKKyAqIElmIGVuZF9sc24gIT0gSW52YWxpZFhMb2dSZWNQdHIsIG9ubHkgc3VtbWFyaWVzIHRo YXQgc3RhcnQgYmVmb3JlIHRoZQorICogaW5kaWNhdGVkIExTTiB3aWxsIGJlIGluY2x1ZGVkLgor ICovCitMaXN0ICoKK0ZpbHRlcldhbFN1bW1hcmllcyhMaXN0ICp3c2xpc3QsIFRpbWVMaW5lSUQg dGxpLAorCQkJCSAgIFhMb2dSZWNQdHIgc3RhcnRfbHNuLCBYTG9nUmVjUHRyIGVuZF9sc24pCit7 CisJTGlzdAkgICAqcmVzdWx0ID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCisJLyogTG9vcCBv dmVyIGlucHV0LiAqLworCWZvcmVhY2gobGMsIHdzbGlzdCkKKwl7CisJCVdhbFN1bW1hcnlGaWxl ICp3cyA9IGxmaXJzdChsYyk7CisKKwkJLyogU2tpcCBpZiBpdCBkb2Vzbid0IG1hdGNoIHRoZSBm aWx0ZXIgY3JpdGVyaWEuICovCisJCWlmICh0bGkgIT0gMCAmJiB0bGkgIT0gd3MtPnRsaSkKKwkJ CWNvbnRpbnVlOworCQlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQoc3RhcnRfbHNuKSAmJiBzdGFy dF9sc24gPiB3cy0+ZW5kX2xzbikKKwkJCWNvbnRpbnVlOworCQlpZiAoIVhMb2dSZWNQdHJJc0lu dmFsaWQoZW5kX2xzbikgJiYgZW5kX2xzbiA8IHdzLT5zdGFydF9sc24pCisJCQljb250aW51ZTsK KworCQkvKiBBZGQgaXQgdG8gdGhlIHJlc3VsdCBsaXN0LiAqLworCQlyZXN1bHQgPSBsYXBwZW5k KHJlc3VsdCwgd3MpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDaGVjayB3 aGV0aGVyIHRoZSBzdXBwbGllZCBsaXN0IG9mIFdhbFN1bW1hcnlGaWxlIG9iamVjdHMgY292ZXJz IHRoZQorICogd2hvbGUgcmFuZ2Ugb2YgTFNOcyBmcm9tIHN0YXJ0X2xzbiB0byBlbmRfbHNuLiBU aGlzIGZ1bmN0aW9uIGlnbm9yZXMKKyAqIHRpbWVsaW5lcywgc28gdGhlIGNhbGxlciBzaG91bGQg cHJvYmFibHkgZmlsdGVyIHVzaW5nIHRoZSBhcHByb3ByaWF0ZQorICogdGltZWxpbmUgYmVmb3Jl IGNhbGxpbmcgdGhpcy4KKyAqCisgKiBJZiB0aGUgd2hvbGUgcmFuZ2Ugb2YgTFNOcyBpcyBjb3Zl cmVkLCByZXR1cm5zIHRydWUsIG90aGVyd2lzZSBmYWxzZS4KKyAqIElmIGZhbHNlIGlzIHJldHVy bmVkLCAqbWlzc2luZ19sc24gaXMgc2V0IGVpdGhlciB0byBJbnZhbGlkWExvZ1JlY1B0cgorICog aWYgdGhlcmUgYXJlIG5vIFdBTCBzdW1tYXJ5IGZpbGVzIGluIHRoZSBpbnB1dCBsaXN0LCBvciB0 byB0aGUgZmlyc3QgTFNOCisgKiBpbiB0aGUgcmFuZ2UgdGhhdCBpcyBub3QgY292ZXJlZCBieSBh IFdBTCBzdW1tYXJ5IGZpbGUgaW4gdGhlIGlucHV0IGxpc3QuCisgKi8KK2Jvb2wKK1dhbFN1bW1h cmllc0FyZUNvbXBsZXRlKExpc3QgKndzbGlzdCwgWExvZ1JlY1B0ciBzdGFydF9sc24sCisJCQkJ CQlYTG9nUmVjUHRyIGVuZF9sc24sIFhMb2dSZWNQdHIgKm1pc3NpbmdfbHNuKQoreworCVhMb2dS ZWNQdHIJY3VycmVudF9sc24gPSBzdGFydF9sc247CisJTGlzdENlbGwgICAqbGM7CisKKwkvKiBT cGVjaWFsIGNhc2UgZm9yIGVtcHR5IGxpc3QuICovCisJaWYgKHdzbGlzdCA9PSBOSUwpCisJewor CQkqbWlzc2luZ19sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwkJcmV0dXJuIGZhbHNlOworCX0K KworCS8qIE1ha2UgYSBwcml2YXRlIGNvcHkgb2YgdGhlIGxpc3QgYW5kIHNvcnQgaXQgYnkgc3Rh cnQgTFNOLiAqLworCXdzbGlzdCA9IGxpc3RfY29weSh3c2xpc3QpOworCWxpc3Rfc29ydCh3c2xp c3QsIExpc3RDb21wYXJhdG9yRm9yV2FsU3VtbWFyeUZpbGVzKTsKKworCS8qCisJICogQ29uc2lk ZXIgc3VtbWFyeSBmaWxlcyBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHN0YXJ0X2xzbiwgYWR2YW5j aW5nIHRoZQorCSAqIGtub3duLXN1bW1hcml6ZWQgcmFuZ2UgZnJvbSBzdGFydF9sc24gdG93YXJk IGVuZF9sc24uCisJICoKKwkgKiBOb3JtYWxseSwgdGhlIHN1bW1hcnkgZmlsZXMgc2hvdWxkIGNv dmVyIG5vbi1vdmVybGFwcGluZyBXQUwgcmFuZ2VzLAorCSAqIGJ1dCB0aGlzIGFsZ29yaXRobSBp cyBpbnRlbmRlZCB0byBiZSBjb3JyZWN0IGV2ZW4gaW4gY2FzZSBvZiBvdmVybGFwLgorCSAqLwor CWZvcmVhY2gobGMsIHdzbGlzdCkKKwl7CisJCVdhbFN1bW1hcnlGaWxlICp3cyA9IGxmaXJzdChs Yyk7CisKKwkJaWYgKHdzLT5zdGFydF9sc24gPiBjdXJyZW50X2xzbikKKwkJeworCQkJLyogV2Ug Zm91bmQgYSBnYXAuICovCisJCQlicmVhazsKKwkJfQorCQlpZiAod3MtPmVuZF9sc24gPiBjdXJy ZW50X2xzbikKKwkJeworCQkJLyoKKwkJCSAqIE5leHQgc3VtbWFyeSBleHRlbmRzIGJleW9uZCBl bmQgb2YgcHJldmlvdXMgc3VtbWFyeSwgc28gZXh0ZW5kCisJCQkgKiB0aGUgZW5kIG9mIHRoZSBy YW5nZSBrbm93biB0byBiZSBzdW1tYXJpemVkLgorCQkJICovCisJCQljdXJyZW50X2xzbiA9IHdz LT5lbmRfbHNuOworCisJCQkvKgorCQkJICogSWYgdGhlIHJhbmdlIHdlIGtub3cgdG8gYmUgc3Vt bWFyaXplZCBoYXMgcmVhY2hlZCB0aGUgcmVxdWlyZWQKKwkJCSAqIGVuZCBMU04sIHdlIGhhdmUg cHJvdmVkIGNvbXBsZXRlbmVzcy4KKwkJCSAqLworCQkJaWYgKGN1cnJlbnRfbHNuID49IGVuZF9s c24pCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGVpdGhlciByYW4g b3V0IG9mIHN1bW1hcnkgZmlsZXMgd2l0aG91dCByZWFjaGluZyB0aGUgZW5kIExTTiwgb3Igd2UK KwkgKiBoaXQgYSBnYXAgaW4gdGhlIHNlcXVlbmNlIHRoYXQgcmVzdWx0ZWQgaW4gdXMgYmFpbGlu ZyBvdXQgb2YgdGhlIGxvb3AKKwkgKiBhYm92ZS4KKwkgKi8KKwkqbWlzc2luZ19sc24gPSBjdXJy ZW50X2xzbjsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBPcGVuIGEgV0FMIHN1bW1hcnkg ZmlsZS4KKyAqCisgKiBUaGlzIHdpbGwgdGhyb3cgYW4gZXJyb3IgaW4gY2FzZSBvZiB0cm91Ymxl LiBBcyBhbiBleGNlcHRpb24sIGlmCisgKiBtaXNzaW5nX29rID0gdHJ1ZSBhbmQgdGhlIHRyb3Vi bGUgaXMgc3BlY2lmaWNhbGx5IHRoYXQgdGhlIGZpbGUgZG9lcworICogbm90IGV4aXN0LCBpdCB3 aWxsIG5vdCB0aHJvdyBhbiBlcnJvciBhbmQgd2lsbCByZXR1cm4gYSB2YWx1ZSBsZXNzIHRoYW4g MC4KKyAqLworRmlsZQorT3BlbldhbFN1bW1hcnlGaWxlKFdhbFN1bW1hcnlGaWxlICp3cywgYm9v bCBtaXNzaW5nX29rKQoreworCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKKwlGaWxlCQlmaWxlOwor CisJc25wcmludGYocGF0aCwgTUFYUEdQQVRILAorCQkJIFhMT0dESVIgIi9zdW1tYXJpZXMvJTA4 WCUwOFglMDhYJTA4WCUwOFguc3VtbWFyeSIsCisJCQkgd3MtPnRsaSwKKwkJCSBMU05fRk9STUFU X0FSR1Mod3MtPnN0YXJ0X2xzbiksCisJCQkgTFNOX0ZPUk1BVF9BUkdTKHdzLT5lbmRfbHNuKSk7 CisKKwlmaWxlID0gUGF0aE5hbWVPcGVuRmlsZShwYXRoLCBPX1JET05MWSk7CisJaWYgKGZpbGUg PCAwICYmIChlcnJubyAhPSBFRVhJU1QgfHwgIW1pc3Npbmdfb2spKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5v dCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIHBhdGgpKSk7CisKKwlyZXR1cm4gZmlsZTsKK30KKwor LyoKKyAqIFJlbW92ZSBhIFdBTCBzdW1tYXJ5IGZpbGUgaWYgdGhlIGxhc3QgbW9kaWZpY2F0aW9u IHRpbWUgcHJlY2VkZXMgdGhlCisgKiBjdXRvZmYgdGltZS4KKyAqLwordm9pZAorUmVtb3ZlV2Fs U3VtbWFyeUlmT2xkZXJUaGFuKFdhbFN1bW1hcnlGaWxlICp3cywgdGltZV90IGN1dG9mZl90aW1l KQoreworCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJ c25wcmludGYocGF0aCwgTUFYUEdQQVRILAorCQkJIFhMT0dESVIgIi9zdW1tYXJpZXMvJTA4WCUw OFglMDhYJTA4WCUwOFguc3VtbWFyeSIsCisJCQkgd3MtPnRsaSwKKwkJCSBMU05fRk9STUFUX0FS R1Mod3MtPnN0YXJ0X2xzbiksCisJCQkgTFNOX0ZPUk1BVF9BUkdTKHdzLT5lbmRfbHNuKSk7CisK KwlpZiAobHN0YXQocGF0aCwgJnN0YXRidWYpICE9IDApCisJeworCQlpZiAoZXJybm8gPT0gRU5P RU5UKQorCQkJcmV0dXJuOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxl X2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzdGF0IGZpbGUgXCIlc1wiOiAlbSIs IHBhdGgpKSk7CisJfQorCWlmIChzdGF0YnVmLnN0X210aW1lID49IGN1dG9mZl90aW1lKQorCQly ZXR1cm47CisJaWYgKHVubGluayhwYXRoKSAhPSAwKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzdGF0IGZp bGUgXCIlc1wiOiAlbSIsIHBhdGgpKSk7CisJZXJlcG9ydChERUJVRzIsCisJCQkoZXJybXNnX2lu dGVybmFsKCJyZW1vdmluZyBmaWxlIFwiJXNcIiIsIHBhdGgpKSk7Cit9CisKKy8qCisgKiBUZXN0 IHdoZXRoZXIgYSBmaWxlbmFtZSBsb29rcyBsaWtlIGEgV0FMIHN1bW1hcnkgZmlsZS4KKyAqLwor c3RhdGljIGJvb2wKK0lzV2FsU3VtbWFyeUZpbGVuYW1lKGNoYXIgKmZpbGVuYW1lKQoreworCXJl dHVybiBzdHJzcG4oZmlsZW5hbWUsICIwMTIzNDU2Nzg5QUJDREVGIikgPT0gNDAgJiYKKwkJc3Ry Y21wKGZpbGVuYW1lICsgNDAsICIuc3VtbWFyeSIpID09IDA7Cit9CisKKy8qCisgKiBEYXRhIHJl YWQgY2FsbGJhY2sgZm9yIHVzZSB3aXRoIENyZWF0ZUJsb2NrUmVmVGFibGVSZWFkZXIuCisgKi8K K2ludAorUmVhZFdhbFN1bW1hcnkodm9pZCAqd2FsX3N1bW1hcnlfaW8sIHZvaWQgKmRhdGEsIGlu dCBsZW5ndGgpCit7CisJV2FsU3VtbWFyeUlPICppbyA9IHdhbF9zdW1tYXJ5X2lvOworCWludAkJ CW5ieXRlczsKKworCW5ieXRlcyA9IEZpbGVSZWFkKGlvLT5maWxlLCBkYXRhLCBsZW5ndGgsIGlv LT5maWxlcG9zLAorCQkJCQkgIFdBSVRfRVZFTlRfV0FMX1NVTU1BUllfUkVBRCk7CisJaWYgKG5i eXRlcyA8IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCisJCQkJIGVycm1zZygiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJ CUZpbGVQYXRoTmFtZShpby0+ZmlsZSkpKSk7CisKKwlpby0+ZmlsZXBvcyArPSBuYnl0ZXM7CisJ cmV0dXJuIG5ieXRlczsKK30KKworLyoKKyAqIERhdGEgd3JpdGUgY2FsbGJhY2sgZm9yIHVzZSB3 aXRoIFdyaXRlQmxvY2tSZWZUYWJsZS4KKyAqLworaW50CitXcml0ZVdhbFN1bW1hcnkodm9pZCAq d2FsX3N1bW1hcnlfaW8sIHZvaWQgKmRhdGEsIGludCBsZW5ndGgpCit7CisJV2FsU3VtbWFyeUlP ICppbyA9IHdhbF9zdW1tYXJ5X2lvOworCWludAkJCW5ieXRlczsKKworCW5ieXRlcyA9IEZpbGVX cml0ZShpby0+ZmlsZSwgZGF0YSwgbGVuZ3RoLCBpby0+ZmlsZXBvcywKKwkJCQkJICAgV0FJVF9F VkVOVF9XQUxfU1VNTUFSWV9XUklURSk7CisJaWYgKG5ieXRlcyA8IDApCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQg bm90IHdyaXRlIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQlGaWxlUGF0aE5hbWUoaW8tPmZpbGUp KSkpOworCWlmIChuYnl0ZXMgIT0gbGVuZ3RoKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSBmaWxl IFwiJXNcIjogd3JvdGUgb25seSAlZCBvZiAlZCBieXRlcyBhdCBvZmZzZXQgJXUiLAorCQkJCQkJ RmlsZVBhdGhOYW1lKGlvLT5maWxlKSwgbmJ5dGVzLAorCQkJCQkJbGVuZ3RoLCAodW5zaWduZWQp IGlvLT5maWxlcG9zKSwKKwkJCQkgZXJyaGludCgiQ2hlY2sgZnJlZSBkaXNrIHNwYWNlLiIpKSk7 CisKKwlpby0+ZmlsZXBvcyArPSBuYnl0ZXM7CisJcmV0dXJuIG5ieXRlczsKK30KKworLyoKKyAq IEVycm9yLXJlcG9ydGluZyBjYWxsYmFjayBmb3IgdXNlIHdpdGggQ3JlYXRlQmxvY2tSZWZUYWJs ZVJlYWRlci4KKyAqLwordm9pZAorUmVwb3J0V2FsU3VtbWFyeUVycm9yKHZvaWQgKmNhbGxiYWNr X2FyZywgY2hhciAqZm10LC4uLikKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJdmFfbGlzdAkJ YXA7CisJaW50CQkJbmVlZGVkOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJZm9yICg7OykK Kwl7CisJCXZhX3N0YXJ0KGFwLCBmbXQpOworCQluZWVkZWQgPSBhcHBlbmRTdHJpbmdJbmZvVkEo JmJ1ZiwgZm10LCBhcCk7CisJCXZhX2VuZChhcCk7CisJCWlmIChuZWVkZWQgPT0gMCkKKwkJCWJy ZWFrOworCQllbmxhcmdlU3RyaW5nSW5mbygmYnVmLCBuZWVkZWQpOworCX0KKwllcmVwb3J0KEVS Uk9SLAorCQkJZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKKwkJCWVycm1zZ19pbnRl cm5hbCgiJXMiLCBidWYuZGF0YSkpOworfQorCisvKgorICogQ29tcGFyYXRvciB0byBzb3J0IGEg TGlzdCBvZiBXYWxTdW1tYXJ5RmlsZSBvYmplY3RzIGJ5IHN0YXJ0X2xzbi4KKyAqLworc3RhdGlj IGludAorTGlzdENvbXBhcmF0b3JGb3JXYWxTdW1tYXJ5RmlsZXMoY29uc3QgTGlzdENlbGwgKmEs IGNvbnN0IExpc3RDZWxsICpiKQoreworCVdhbFN1bW1hcnlGaWxlICp3czEgPSBsZmlyc3QoYSk7 CisJV2FsU3VtbWFyeUZpbGUgKndzMiA9IGxmaXJzdChiKTsKKworCWlmICh3czEtPnN0YXJ0X2xz biA8IHdzMi0+c3RhcnRfbHNuKQorCQlyZXR1cm4gLTE7CisJaWYgKHdzMS0+c3RhcnRfbHNuID4g d3MyLT5zdGFydF9sc24pCisJCXJldHVybiAxOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYmFja3VwL3dhbHN1bW1hcnlmdW5jcy5jIGIvc3JjL2JhY2tlbmQvYmFja3Vw L3dhbHN1bW1hcnlmdW5jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmExZjY5YWQ0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvd2Fsc3Vt bWFyeWZ1bmNzLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHdhbHN1bW1hcnlmdW5jcy5jCisgKgkgIFNRTC1jYWxsYWJsZSBmdW5jdGlvbnMgZm9yIGFjY2Vz c2luZyBXQUwgc3VtbWFyeSBkYXRhLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAx MC0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9i YWNrZW5kL2JhY2t1cC93YWxzdW1tYXJ5ZnVuY3MuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYmFja3VwL3dhbHN1bW1h cnkuaCIKKyNpbmNsdWRlICJjb21tb24vYmxrcmVmdGFibGUuaCIKKyNpbmNsdWRlICJmdW5jYXBp LmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5o IgorI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgorCisjZGVmaW5lIE5VTV9XU19BVFRTCQkJMwor I2RlZmluZSBOVU1fU1VNTUFSWV9BVFRTCTYKKyNkZWZpbmUgTUFYX0JMT0NLU19QRVJfQ0FMTAky NTYKKworLyoKKyAqIExpc3QgdGhlIFdBTCBzdW1tYXJ5IGZpbGVzIGF2YWlsYWJsZSBpbiBwZ193 YWwvc3VtbWFyaWVzLgorICovCitEYXR1bQorcGdfYXZhaWxhYmxlX3dhbF9zdW1tYXJpZXMoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2k7CisJTGlzdAkgICAqd3NsaXN0 OworCUxpc3RDZWxsICAgKmxjOworCURhdHVtCQl2YWx1ZXNbTlVNX1dTX0FUVFNdOworCWJvb2wJ CW51bGxzW05VTV9XU19BVFRTXTsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsK Kwlyc2kgPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisKKwltZW1zZXQo bnVsbHMsIDAsIHNpemVvZihudWxscykpOworCisJd3NsaXN0ID0gR2V0V2FsU3VtbWFyaWVzKDAs IEludmFsaWRYTG9nUmVjUHRyLCBJbnZhbGlkWExvZ1JlY1B0cik7CisJZm9yZWFjaChsYywgd3Ns aXN0KQorCXsKKwkJV2FsU3VtbWFyeUZpbGUgKndzID0gKFdhbFN1bW1hcnlGaWxlICopIGxmaXJz dChsYyk7CisJCUhlYXBUdXBsZQl0dXBsZTsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwor CisJCXZhbHVlc1swXSA9IEludDY0R2V0RGF0dW0oKGludDY0KSB3cy0+dGxpKTsKKwkJdmFsdWVz WzFdID0gTFNOR2V0RGF0dW0od3MtPnN0YXJ0X2xzbik7CisJCXZhbHVlc1syXSA9IExTTkdldERh dHVtKHdzLT5lbmRfbHNuKTsKKworCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZShyc2ktPnNldERl c2MsIHZhbHVlcywgbnVsbHMpOworCQl0dXBsZXN0b3JlX3B1dHR1cGxlKHJzaS0+c2V0UmVzdWx0 LCB0dXBsZSk7CisJfQorCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIExpc3QgdGhl IGNvbnRlbnRzIG9mIGEgV0FMIHN1bW1hcnkgZmlsZSBpZGVudGlmaWVkIGJ5IFRMSSwgc3RhcnQg TFNOLAorICogYW5kIGVuZCBMU04uCisgKi8KK0RhdHVtCitwZ193YWxfc3VtbWFyeV9jb250ZW50 cyhQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaTsKKwlEYXR1bQkJdmFs dWVzW05VTV9TVU1NQVJZX0FUVFNdOworCWJvb2wJCW51bGxzW05VTV9TVU1NQVJZX0FUVFNdOwor CVdhbFN1bW1hcnlGaWxlIHdzOworCVdhbFN1bW1hcnlJTyBpbzsKKwlCbG9ja1JlZlRhYmxlUmVh ZGVyICpyZWFkZXI7CisJaW50NjQJCXJhd190bGk7CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3I7 CisJRm9ya051bWJlcglmb3JrbnVtOworCUJsb2NrTnVtYmVyIGxpbWl0X2Jsb2NrOworCisJSW5p dE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCXJzaSA9IChSZXR1cm5TZXRJbmZvICopIGZj aW5mby0+cmVzdWx0aW5mbzsKKwltZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOworCisJ LyoKKwkgKiBTaW5jZSB0aGUgdGltZWxpbmUgY291bGQgYXQgbGVhc3QgaW4gdGhlb3J5IGJlIG1v cmUgdGhhbiAyXjMxLCBhbmQKKwkgKiBzaW5jZSB3ZSBkb24ndCBoYXZlIHVuc2lnbmVkIHR5cGVz IGF0IHRoZSBTUUwgbGV2ZWwsIGl0IGlzIHBhc3NlZCBhcyBhCisJICogNjQtYml0IGludGVnZXIu IFRlc3Qgd2hldGhlciBpdCdzIG91dCBvZiByYW5nZS4KKwkgKi8KKwlyYXdfdGxpID0gUEdfR0VU QVJHX0lOVDY0KDApOworCWlmIChyYXdfdGxpIDwgMSB8fCByYXdfdGxpID4gUEdfSU5UMzJfTUFY KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJZXJybXNnKCJpbnZhbGlkIHRpbWVsaW5lICVsbGQiLCAobG9uZyBsb25n KSByYXdfdGxpKSk7CisKKwkvKiBQcmVwYXJlIHRvIHJlYWQgdGhlIHNwZWNpZmllZCBXQUwgc3Vt bXJ5IGZpbGUuICovCisJd3MudGxpID0gKFRpbWVMaW5lSUQpIHJhd190bGk7CisJd3Muc3RhcnRf bHNuID0gUEdfR0VUQVJHX0xTTigxKTsKKwl3cy5lbmRfbHNuID0gUEdfR0VUQVJHX0xTTigyKTsK Kwlpby5maWxlcG9zID0gMDsKKwlpby5maWxlID0gT3BlbldhbFN1bW1hcnlGaWxlKCZ3cywgZmFs c2UpOworCXJlYWRlciA9IENyZWF0ZUJsb2NrUmVmVGFibGVSZWFkZXIoUmVhZFdhbFN1bW1hcnks ICZpbywKKwkJCQkJCQkJCSAgIEZpbGVQYXRoTmFtZShpby5maWxlKSwKKwkJCQkJCQkJCSAgIFJl cG9ydFdhbFN1bW1hcnlFcnJvciwgTlVMTCk7CisKKwkvKiBMb29wIG92ZXIgcmVsYXRpb24gZm9y a3MuICovCisJd2hpbGUgKEJsb2NrUmVmVGFibGVSZWFkZXJOZXh0UmVsYXRpb24ocmVhZGVyLCAm cmxvY2F0b3IsICZmb3JrbnVtLAorCQkJCQkJCQkJCSAgICZsaW1pdF9ibG9jaykpCisJeworCQlC bG9ja051bWJlciBibG9ja3NbTUFYX0JMT0NLU19QRVJfQ0FMTF07CisJCUhlYXBUdXBsZQl0dXBs ZTsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCXZhbHVlc1swXSA9IE9iamVjdElk R2V0RGF0dW0ocmxvY2F0b3IucmVsTnVtYmVyKTsKKwkJdmFsdWVzWzFdID0gT2JqZWN0SWRHZXRE YXR1bShybG9jYXRvci5zcGNPaWQpOworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKHJs b2NhdG9yLmRiT2lkKTsKKwkJdmFsdWVzWzNdID0gSW50MTZHZXREYXR1bSgoaW50MTYpIGZvcmtu dW0pOworCisJCS8qIExvb3Agb3ZlciBibG9ja3Mgd2l0aGluIHRoZSBjdXJyZW50IHJlbGF0aW9u IGZvcmsuICovCisJCXdoaWxlICgxKQorCQl7CisJCQl1bnNpZ25lZAluYmxvY2tzOworCQkJdW5z aWduZWQJaTsKKworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkJbmJsb2NrcyA9IEJs b2NrUmVmVGFibGVSZWFkZXJHZXRCbG9ja3MocmVhZGVyLCBibG9ja3MsCisJCQkJCQkJCQkJCQkg ICBNQVhfQkxPQ0tTX1BFUl9DQUxMKTsKKwkJCWlmIChuYmxvY2tzID09IDApCisJCQkJYnJlYWs7 CisKKwkJCS8qCisJCQkgKiBGb3IgZWFjaCBibG9jayB0aGF0IHdlIHNwZWNpZmljYWxseSBrbm93 IHRvIGhhdmUgYmVlbiBtb2RpZmllZCwKKwkJCSAqIGVtaXQgYSByb3cgd2l0aCB0aGF0IGJsb2Nr IG51bWJlciBhbmQgbGltaXRfYmxvY2sgPSBmYWxzZS4KKwkJCSAqLworCQkJdmFsdWVzWzVdID0g Qm9vbEdldERhdHVtKGZhbHNlKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBuYmxvY2tzOyArK2kpCisJ CQl7CisJCQkJdmFsdWVzWzRdID0gSW50NjRHZXREYXR1bSgoaW50NjQpIGJsb2Nrc1tpXSk7CisK KwkJCQl0dXBsZSA9IGhlYXBfZm9ybV90dXBsZShyc2ktPnNldERlc2MsIHZhbHVlcywgbnVsbHMp OworCQkJCXR1cGxlc3RvcmVfcHV0dHVwbGUocnNpLT5zZXRSZXN1bHQsIHR1cGxlKTsKKwkJCX0K KworCQkJLyoKKwkJCSAqIElmIHRoZSBsaW1pdCBibG9jayBpcyBub3QgSW52YWxpZEJsb2NrTnVt YmVyLCBlbWl0IGFuIGV4dGEgcm93CisJCQkgKiB3aXRoIHRoYXQgYmxvY2sgbnVtYmVyIGFuZCBs aW1pdF9ibG9jayA9IHRydWUuCisJCQkgKgorCQkJICogVGhlcmUgaXMgbm8gcG9pbnQgaW4gZG9p bmcgdGhpcyB3aGVuIHRoZSBsaW1pdF9ibG9jayBpcworCQkJICogSW52YWxpZEJsb2NrTnVtYmVy LCBiZWNhdXNlIG5vIGJsb2NrIHdpdGggdGhhdCBudW1iZXIgb3IgYW55CisJCQkgKiBoaWdoZXIg bnVtYmVyIGNhbiBldmVyIGV4aXN0LgorCQkJICovCisJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlk KGxpbWl0X2Jsb2NrKSkKKwkJCXsKKwkJCQl2YWx1ZXNbNF0gPSBJbnQ2NEdldERhdHVtKChpbnQ2 NCkgbGltaXRfYmxvY2spOworCQkJCXZhbHVlc1s1XSA9IEJvb2xHZXREYXR1bSh0cnVlKTsKKwor CQkJCXR1cGxlID0gaGVhcF9mb3JtX3R1cGxlKHJzaS0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7 CisJCQkJdHVwbGVzdG9yZV9wdXR0dXBsZShyc2ktPnNldFJlc3VsdCwgdHVwbGUpOworCQkJfQor CQl9CisJfQorCisJLyogQ2xlYW51cCAqLworCURlc3Ryb3lCbG9ja1JlZlRhYmxlUmVhZGVyKHJl YWRlcik7CisJRmlsZUNsb3NlKGlvLmZpbGUpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL01ha2VmaWxlCmluZGV4IDA0NzQ0OGIzNGUuLjM2N2E0NmM2MTcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQCBPQkpTID0gXAogCXBvc3RtYXN0ZXIu byBcCiAJc3RhcnR1cC5vIFwKIAlzeXNsb2dnZXIubyBcCisJd2Fsc3VtbWFyaXplci5vIFwKIAl3 YWx3cml0ZXIubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1r CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCmluZGV4IGJhZTZmNjhjNDAuLjVmMjQ0MjE2 YTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCisrKyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCkBAIC0yMSw2ICsyMSw3IEBACiAj aW5jbHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9i Z3dyaXRlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3RhcnR1cC5oIgorI2luY2x1ZGUgInBv c3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvd2Fsd3JpdGVy LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCIKICNpbmNsdWRlICJzdG9y YWdlL2J1Zm1nci5oIgpAQCAtODAsNiArODEsOSBAQCBBdXhpbGlhcnlQcm9jZXNzTWFpbihBdXhQ cm9jVHlwZSBhdXh0eXBlKQogCQljYXNlIFdhbFJlY2VpdmVyUHJvY2VzczoKIAkJCU15QmFja2Vu ZFR5cGUgPSBCX1dBTF9SRUNFSVZFUjsKIAkJCWJyZWFrOworCQljYXNlIFdhbFN1bW1hcml6ZXJQ cm9jZXNzOgorCQkJTXlCYWNrZW5kVHlwZSA9IEJfV0FMX1NVTU1BUklaRVI7CisJCQlicmVhazsK IAkJZGVmYXVsdDoKIAkJCWVsb2coUEFOSUMsICJ1bnJlY29nbml6ZWQgcHJvY2VzcyB0eXBlOiAl ZCIsIChpbnQpIE15QXV4UHJvY1R5cGUpOwogCQkJTXlCYWNrZW5kVHlwZSA9IEJfSU5WQUxJRDsK QEAgLTE1OCw2ICsxNjIsMTAgQEAgQXV4aWxpYXJ5UHJvY2Vzc01haW4oQXV4UHJvY1R5cGUgYXV4 dHlwZSkKIAkJCVdhbFJlY2VpdmVyTWFpbigpOwogCQkJcHJvY19leGl0KDEpOwogCisJCWNhc2Ug V2FsU3VtbWFyaXplclByb2Nlc3M6CisJCQlXYWxTdW1tYXJpemVyTWFpbigpOworCQkJcHJvY19l eGl0KDEpOworCiAJCWRlZmF1bHQ6CiAJCQllbG9nKFBBTklDLCAidW5yZWNvZ25pemVkIHByb2Nl c3MgdHlwZTogJWQiLCAoaW50KSBNeUF1eFByb2NUeXBlKTsKIAkJCXByb2NfZXhpdCgxKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbWVzb24uYnVpbGQgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL21lc29uLmJ1aWxkCmluZGV4IGNkYTkyMWZkMTAuLmEzMGViNjY5MmYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWlsZApAQCAtMTIsNSArMTIsNiBAQCBiYWNrZW5kX3Nv dXJjZXMgKz0gZmlsZXMoCiAgICdwb3N0bWFzdGVyLmMnLAogICAnc3RhcnR1cC5jJywKICAgJ3N5 c2xvZ2dlci5jJywKKyAgJ3dhbHN1bW1hcml6ZXIuYycsCiAgICd3YWx3cml0ZXIuYycsCiApCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IDY1MWI4NWVhNzQuLmIxNjNlODljYmIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC0xMTMsNiArMTEzLDcgQEAKICNp bmNsdWRlICJwb3N0bWFzdGVyL3BnYXJjaC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1h c3Rlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3lzbG9nZ2VyLmgiCisjaW5jbHVkZSAicG9z dG1hc3Rlci93YWxzdW1tYXJpemVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxh dW5jaGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9mZC5oIgpAQCAtMjUwLDYgKzI1MSw3IEBAIHN0YXRpYyBwaWRfdCBTdGFydHVwUElE ID0gMCwKIAkJCUNoZWNrcG9pbnRlclBJRCA9IDAsCiAJCQlXYWxXcml0ZXJQSUQgPSAwLAogCQkJ V2FsUmVjZWl2ZXJQSUQgPSAwLAorCQkJV2FsU3VtbWFyaXplclBJRCA9IDAsCiAJCQlBdXRvVmFj UElEID0gMCwKIAkJCVBnQXJjaFBJRCA9IDAsCiAJCQlTeXNMb2dnZXJQSUQgPSAwOwpAQCAtNDQx LDYgKzQ0Myw3IEBAIHN0YXRpYyBib29sIENyZWF0ZU9wdHNGaWxlKGludCBhcmdjLCBjaGFyICph cmd2W10sIGNoYXIgKmZ1bGxwcm9nbmFtZSk7CiBzdGF0aWMgcGlkX3QgU3RhcnRDaGlsZFByb2Nl c3MoQXV4UHJvY1R5cGUgdHlwZSk7CiBzdGF0aWMgdm9pZCBTdGFydEF1dG92YWN1dW1Xb3JrZXIo dm9pZCk7CiBzdGF0aWMgdm9pZCBNYXliZVN0YXJ0V2FsUmVjZWl2ZXIodm9pZCk7CitzdGF0aWMg dm9pZCBNYXliZVN0YXJ0V2FsU3VtbWFyaXplcih2b2lkKTsKIHN0YXRpYyB2b2lkIEluaXRQb3N0 bWFzdGVyRGVhdGhXYXRjaEhhbmRsZSh2b2lkKTsKIAogLyoKQEAgLTU2NCw2ICs1NjcsNyBAQCBz dGF0aWMgdm9pZCBTaG1lbUJhY2tlbmRBcnJheVJlbW92ZShCYWNrZW5kICpibik7CiAjZGVmaW5l IFN0YXJ0Q2hlY2twb2ludGVyKCkJCVN0YXJ0Q2hpbGRQcm9jZXNzKENoZWNrcG9pbnRlclByb2Nl c3MpCiAjZGVmaW5lIFN0YXJ0V2FsV3JpdGVyKCkJCVN0YXJ0Q2hpbGRQcm9jZXNzKFdhbFdyaXRl clByb2Nlc3MpCiAjZGVmaW5lIFN0YXJ0V2FsUmVjZWl2ZXIoKQkJU3RhcnRDaGlsZFByb2Nlc3Mo V2FsUmVjZWl2ZXJQcm9jZXNzKQorI2RlZmluZSBTdGFydFdhbFN1bW1hcml6ZXIoKQlTdGFydENo aWxkUHJvY2VzcyhXYWxTdW1tYXJpemVyUHJvY2VzcykKIAogLyogTWFjcm9zIHRvIGNoZWNrIGV4 aXQgc3RhdHVzIG9mIGEgY2hpbGQgcHJvY2VzcyAqLwogI2RlZmluZSBFWElUX1NUQVRVU18wKHN0 KSAgKChzdCkgPT0gMCkKQEAgLTkzMyw2ICs5MzcsOSBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCWlmIChtYXhfd2FsX3NlbmRlcnMgPiAwICYmIHdhbF9sZXZlbCA9 PSBXQUxfTEVWRUxfTUlOSU1BTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCJXQUwg c3RyZWFtaW5nIChtYXhfd2FsX3NlbmRlcnMgPiAwKSByZXF1aXJlcyB3YWxfbGV2ZWwgXCJyZXBs aWNhXCIgb3IgXCJsb2dpY2FsXCIiKSkpOworCWlmIChzdW1tYXJpemVfd2FsICYmIHdhbF9sZXZl bCA9PSBXQUxfTEVWRUxfTUlOSU1BTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJX QUwgY2Fubm90IGJlIHN1bW1hcml6ZWQgd2hlbiB3YWxfbGV2ZWwgaXMgXCJtaW5pbWFsXCIiKSkp OwogCiAJLyoKIAkgKiBPdGhlciBvbmUtdGltZSBpbnRlcm5hbCBzYW5pdHkgY2hlY2tzIGNhbiBn byBoZXJlLCBpZiB0aGV5IGFyZSBmYXN0LgpAQCAtMTgzNSw2ICsxODQyLDkgQEAgU2VydmVyTG9v cCh2b2lkKQogCQlpZiAoV2FsUmVjZWl2ZXJSZXF1ZXN0ZWQpCiAJCQlNYXliZVN0YXJ0V2FsUmVj ZWl2ZXIoKTsKIAorCQkvKiBJZiB3ZSBuZWVkIHRvIHN0YXJ0IGEgV0FMIHN1bW1hcml6ZXIsIHRy eSB0byBkbyB0aGF0IG5vdyAqLworCQlNYXliZVN0YXJ0V2FsU3VtbWFyaXplcigpOworCiAJCS8q IEdldCBvdGhlciB3b3JrZXIgcHJvY2Vzc2VzIHJ1bm5pbmcsIGlmIG5lZWRlZCAqLwogCQlpZiAo U3RhcnRXb3JrZXJOZWVkZWQgfHwgSGF2ZUNyYXNoZWRXb3JrZXIpCiAJCQltYXliZV9zdGFydF9i Z3dvcmtlcnMoKTsKQEAgLTI2NTksNiArMjY2OSw4IEBAIHByb2Nlc3NfcG1fcmVsb2FkX3JlcXVl c3Qodm9pZCkKIAkJCXNpZ25hbF9jaGlsZChXYWxXcml0ZXJQSUQsIFNJR0hVUCk7CiAJCWlmIChX YWxSZWNlaXZlclBJRCAhPSAwKQogCQkJc2lnbmFsX2NoaWxkKFdhbFJlY2VpdmVyUElELCBTSUdI VVApOworCQlpZiAoV2FsU3VtbWFyaXplclBJRCAhPSAwKQorCQkJc2lnbmFsX2NoaWxkKFdhbFN1 bW1hcml6ZXJQSUQsIFNJR0hVUCk7CiAJCWlmIChBdXRvVmFjUElEICE9IDApCiAJCQlzaWduYWxf Y2hpbGQoQXV0b1ZhY1BJRCwgU0lHSFVQKTsKIAkJaWYgKFBnQXJjaFBJRCAhPSAwKQpAQCAtMzAx Miw2ICszMDI0LDcgQEAgcHJvY2Vzc19wbV9jaGlsZF9leGl0KHZvaWQpCiAJCQkJQmdXcml0ZXJQ SUQgPSBTdGFydEJhY2tncm91bmRXcml0ZXIoKTsKIAkJCWlmIChXYWxXcml0ZXJQSUQgPT0gMCkK IAkJCQlXYWxXcml0ZXJQSUQgPSBTdGFydFdhbFdyaXRlcigpOworCQkJTWF5YmVTdGFydFdhbFN1 bW1hcml6ZXIoKTsKIAogCQkJLyoKIAkJCSAqIExpa2V3aXNlLCBzdGFydCBvdGhlciBzcGVjaWFs IGNoaWxkcmVuIGFzIG5lZWRlZC4gIEluIGEgcmVzdGFydApAQCAtMzEzMCw2ICszMTQzLDIwIEBA IHByb2Nlc3NfcG1fY2hpbGRfZXhpdCh2b2lkKQogCQkJY29udGludWU7CiAJCX0KIAorCQkvKgor CQkgKiBXYXMgaXQgdGhlIHdhbCBzdW1tYXJpemVyPyBOb3JtYWwgZXhpdCBjYW4gYmUgaWdub3Jl ZDsgd2UnbGwgc3RhcnQKKwkJICogYSBuZXcgb25lIGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0 aGUgcG9zdG1hc3RlcidzIG1haW4gbG9vcCwgaWYKKwkJICogbmVjZXNzYXJ5LiAgQW55IG90aGVy IGV4aXQgY29uZGl0aW9uIGlzIHRyZWF0ZWQgYXMgYSBjcmFzaC4KKwkJICovCisJCWlmIChwaWQg PT0gV2FsU3VtbWFyaXplclBJRCkKKwkJeworCQkJV2FsU3VtbWFyaXplclBJRCA9IDA7CisJCQlp ZiAoIUVYSVRfU1RBVFVTXzAoZXhpdHN0YXR1cykpCisJCQkJSGFuZGxlQ2hpbGRDcmFzaChwaWQs IGV4aXRzdGF0dXMsCisJCQkJCQkJCSBfKCJXQUwgc3VtbWFyaXplciBwcm9jZXNzIikpOworCQkJ Y29udGludWU7CisJCX0KKwogCQkvKgogCQkgKiBXYXMgaXQgdGhlIGF1dG92YWN1dW0gbGF1bmNo ZXI/CU5vcm1hbCBleGl0IGNhbiBiZSBpZ25vcmVkOyB3ZSdsbAogCQkgKiBzdGFydCBhIG5ldyBv bmUgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBwb3N0bWFzdGVyJ3MgbWFpbgpAQCAtMzUy NSw2ICszNTUyLDEyIEBAIEhhbmRsZUNoaWxkQ3Jhc2goaW50IHBpZCwgaW50IGV4aXRzdGF0dXMs IGNvbnN0IGNoYXIgKnByb2NuYW1lKQogCWVsc2UgaWYgKFdhbFJlY2VpdmVyUElEICE9IDAgJiYg dGFrZV9hY3Rpb24pCiAJCXNpZ3F1aXRfY2hpbGQoV2FsUmVjZWl2ZXJQSUQpOwogCisJLyogVGFr ZSBjYXJlIG9mIHRoZSB3YWxzdW1tYXJpemVyIHRvbyAqLworCWlmIChwaWQgPT0gV2FsU3VtbWFy aXplclBJRCkKKwkJV2FsU3VtbWFyaXplclBJRCA9IDA7CisJZWxzZSBpZiAoV2FsU3VtbWFyaXpl clBJRCAhPSAwICYmIHRha2VfYWN0aW9uKQorCQlzaWdxdWl0X2NoaWxkKFdhbFN1bW1hcml6ZXJQ SUQpOworCiAJLyogVGFrZSBjYXJlIG9mIHRoZSBhdXRvdmFjdXVtIGxhdW5jaGVyIHRvbyAqLwog CWlmIChwaWQgPT0gQXV0b1ZhY1BJRCkKIAkJQXV0b1ZhY1BJRCA9IDA7CkBAIC0zNjc1LDYgKzM3 MDgsOCBAQCBQb3N0bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpCiAJCQlzaWduYWxfY2hpbGQoU3Rh cnR1cFBJRCwgU0lHVEVSTSk7CiAJCWlmIChXYWxSZWNlaXZlclBJRCAhPSAwKQogCQkJc2lnbmFs X2NoaWxkKFdhbFJlY2VpdmVyUElELCBTSUdURVJNKTsKKwkJaWYgKFdhbFN1bW1hcml6ZXJQSUQg IT0gMCkKKwkJCXNpZ25hbF9jaGlsZChXYWxTdW1tYXJpemVyUElELCBTSUdURVJNKTsKIAkJLyog Y2hlY2twb2ludGVyLCBhcmNoaXZlciwgc3RhdHMsIGFuZCBzeXNsb2dnZXIgbWF5IGNvbnRpbnVl IGZvciBub3cgKi8KIAogCQkvKiBOb3cgdHJhbnNpdGlvbiB0byBQTV9XQUlUX0JBQ0tFTkRTIHN0 YXRlIHRvIHdhaXQgZm9yIHRoZW0gdG8gZGllICovCkBAIC0zNzAxLDYgKzM3MzYsNyBAQCBQb3N0 bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpCiAJCWlmIChDb3VudENoaWxkcmVuKEJBQ0tFTkRfVFlQ RV9BTEwgLSBCQUNLRU5EX1RZUEVfV0FMU05EKSA9PSAwICYmCiAJCQlTdGFydHVwUElEID09IDAg JiYKIAkJCVdhbFJlY2VpdmVyUElEID09IDAgJiYKKwkJCVdhbFN1bW1hcml6ZXJQSUQgPT0gMCAm JgogCQkJQmdXcml0ZXJQSUQgPT0gMCAmJgogCQkJKENoZWNrcG9pbnRlclBJRCA9PSAwIHx8CiAJ CQkgKCFGYXRhbEVycm9yICYmIFNodXRkb3duIDwgSW1tZWRpYXRlU2h1dGRvd24pKSAmJgpAQCAt Mzc5OCw2ICszODM0LDcgQEAgUG9zdG1hc3RlclN0YXRlTWFjaGluZSh2b2lkKQogCQkJLyogVGhl c2Ugb3RoZXIgZ3V5cyBzaG91bGQgYmUgZGVhZCBhbHJlYWR5ICovCiAJCQlBc3NlcnQoU3RhcnR1 cFBJRCA9PSAwKTsKIAkJCUFzc2VydChXYWxSZWNlaXZlclBJRCA9PSAwKTsKKwkJCUFzc2VydChX YWxTdW1tYXJpemVyUElEID09IDApOwogCQkJQXNzZXJ0KEJnV3JpdGVyUElEID09IDApOwogCQkJ QXNzZXJ0KENoZWNrcG9pbnRlclBJRCA9PSAwKTsKIAkJCUFzc2VydChXYWxXcml0ZXJQSUQgPT0g MCk7CkBAIC00MDE5LDYgKzQwNTYsOCBAQCBUZXJtaW5hdGVDaGlsZHJlbihpbnQgc2lnbmFsKQog CQlzaWduYWxfY2hpbGQoV2FsV3JpdGVyUElELCBzaWduYWwpOwogCWlmIChXYWxSZWNlaXZlclBJ RCAhPSAwKQogCQlzaWduYWxfY2hpbGQoV2FsUmVjZWl2ZXJQSUQsIHNpZ25hbCk7CisJaWYgKFdh bFN1bW1hcml6ZXJQSUQgIT0gMCkKKwkJc2lnbmFsX2NoaWxkKFdhbFN1bW1hcml6ZXJQSUQsIHNp Z25hbCk7CiAJaWYgKEF1dG9WYWNQSUQgIT0gMCkKIAkJc2lnbmFsX2NoaWxkKEF1dG9WYWNQSUQs IHNpZ25hbCk7CiAJaWYgKFBnQXJjaFBJRCAhPSAwKQpAQCAtNTMyNiw2ICs1MzY1LDEwIEBAIFN0 YXJ0Q2hpbGRQcm9jZXNzKEF1eFByb2NUeXBlIHR5cGUpCiAJCQkJZXJlcG9ydChMT0csCiAJCQkJ CQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBXQUwgcmVjZWl2ZXIgcHJvY2VzczogJW0iKSkpOwog CQkJCWJyZWFrOworCQkJY2FzZSBXYWxTdW1tYXJpemVyUHJvY2VzczoKKwkJCQllcmVwb3J0KExP RywKKwkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3JrIFdBTCBzdW1tYXJpemVyIHByb2Nlc3M6 ICVtIikpKTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJZXJlcG9ydChMT0csCiAJCQkJ CQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBwcm9jZXNzOiAlbSIpKSk7CkBAIC01NDYyLDYgKzU1 MDUsMTkgQEAgTWF5YmVTdGFydFdhbFJlY2VpdmVyKHZvaWQpCiAJfQogfQogCisvKgorICogTWF5 YmVTdGFydFdhbFN1bW1hcml6ZXIKKyAqCQlTdGFydCB0aGUgV0FMIHN1bW1hcml6ZXIgcHJvY2Vz cywgaWYgbm90IHJ1bm5pbmcgYW5kIG91ciBzdGF0ZSBhbGxvd3MuCisgKi8KK3N0YXRpYyB2b2lk CitNYXliZVN0YXJ0V2FsU3VtbWFyaXplcih2b2lkKQoreworCWlmIChzdW1tYXJpemVfd2FsICYm IFdhbFN1bW1hcml6ZXJQSUQgPT0gMCAmJgorCQkocG1TdGF0ZSA9PSBQTV9SVU4gfHwgcG1TdGF0 ZSA9PSBQTV9IT1RfU1RBTkRCWSkgJiYKKwkJU2h1dGRvd24gPD0gU21hcnRTaHV0ZG93bikKKwkJ V2FsU3VtbWFyaXplclBJRCA9IFN0YXJ0V2FsU3VtbWFyaXplcigpOworfQorCiAKIC8qCiAgKiBD cmVhdGUgdGhlIG9wdHMgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93 YWxzdW1tYXJpemVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43Yzg0MGMzNmIzCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMKQEAgLTAs MCArMSwxMzk4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWxzdW1tYXJpemVyLmMK KyAqCisgKiBCYWNrZ3JvdW5kIHByb2Nlc3MgdG8gcGVyZm9ybSBXQUwgc3VtbWFyaXphdGlvbiwg aWYgaXQgaXMgZW5hYmxlZC4KKyAqIEl0IGNvbnRpbnVvdXNseSBzY2FucyB0aGUgd3JpdGUtYWhl YWQgbG9nIGFuZCBwZXJpb2RpY2FsbHkgZW1pdHMgYQorICogc3VtbWFyeSBmaWxlIHdoaWNoIGlu ZGljYXRlcyB3aGljaCBibG9ja3MgaW4gd2hpY2ggcmVsYXRpb24gZm9ya3MKKyAqIHdlcmUgbW9k aWZpZWQgYnkgV0FMIHJlY29yZHMgaW4gdGhlIExTTiByYW5nZSBjb3ZlcmVkIGJ5IHRoZSBzdW1t YXJ5CisgKiBmaWxlLiBTZWUgd2Fsc3VtbWFyeS5jIGFuZCBibGtyZWZ0YWJsZS5jIGZvciBtb3Jl IGRldGFpbHMgb24gdGhlCisgKiBuYW1pbmcgYW5kIGNvbnRlbnRzIG9mIFdBTCBzdW1tYXJ5IGZp bGVzLgorICoKKyAqIElmIGNvbmZpZ3VyZWQgdG8gZG8sIHRoaXMgYmFja2dyb3VuZCBwcm9jZXNz IHdpbGwgYWxzbyByZW1vdmUgV0FMCisgKiBzdW1tYXJ5IGZpbGVzIHdoZW4gdGhlIGZpbGUgdGlt ZXN0YW1wIGlzIG9sZGVyIHRoYW4gYSBjb25maWd1cmFibGUKKyAqIHRocmVzaG9sZCAoYnV0IG9u bHkgaWYgdGhlIFdBTCBoYXMgYmVlbiByZW1vdmVkIGZpcnN0KS4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dh bHN1bW1hcml6ZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy90aW1lbGluZS5oIgorI2luY2x1ZGUgImFjY2Vz cy94bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJh Y2Nlc3MveGxvZ3JlY292ZXJ5LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgorI2lu Y2x1ZGUgImJhY2t1cC93YWxzdW1tYXJ5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9zdG9yYWdlX3hs b2cuaCIKKyNpbmNsdWRlICJjb21tb24vYmxrcmVmdGFibGUuaCIKKyNpbmNsdWRlICJsaWJwcS9w cXNpZ25hbC5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIv Ymd3cml0ZXIuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgorI2luY2x1ZGUg InBvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJl Y2VpdmVyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBj LmgiCisjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNo LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2ln bmFsLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc3Bp bi5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgi CisjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgorCisvKgorICogRGF0YSBpbiBzaGFyZWQg bWVtb3J5IHJlbGF0ZWQgdG8gV0FMIHN1bW1hcml6YXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0 Cit7CisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSBXQUxTdW1tYXJpemVy TG9jay4KKwkgKgorCSAqIFVudGlsIHdlJ3ZlIGRpc2NvdmVyZWQgd2hhdCBzdW1tYXJ5IGZpbGVz IGFscmVhZHkgZXhpc3Qgb24gZGlzayBhbmQKKwkgKiBzdG9yZWQgdGhhdCBpbmZvcm1hdGlvbiBp biBzaGFyZWQgbWVtb3J5LCBpbml0aWFsaXplZCBpcyBmYWxzZSBhbmQgdGhlCisJICogb3RoZXIg ZmllbGRzIGhlcmUgY29udGFpbiBubyBtZWFuaW5nZnVsIGluZm9ybWF0aW9uLiBBZnRlciB0aGF0 IGhhcworCSAqIGJlZW4gZG9uZSwgaW5pdGlhbGl6ZWQgaXMgdHJ1ZS4KKwkgKgorCSAqIHN1bW1h cml6ZWRfdGxpIGFuZCBzdW1tYXJpemVkX2xzbiBpbmRpY2F0ZSB0aGUgbGFzdCBMU04gYW5kIFRM SSBhdAorCSAqIHdoaWNoIHRoZSBuZXh0IHN1bW1hcnkgZmlsZSB3aWxsIHN0YXJ0LiBOb3JtYWxs eSwgdGhlc2UgYXJlIHRoZSBMU04gYW5kCisJICogVExJIGF0IHdoaWNoIHRoZSBsYXN0IGZpbGUg ZW5kZWQ7IGluIHN1Y2ggY2FzZSwgbHNuX2lzX2V4YWN0IGlzIHRydWUuCisJICogSWYsIGhvd2V2 ZXIsIHRoZSBMU04gaXMganVzdCBhbiBhcHByb3hpbWF0aW9uLCB0aGVuIGxzbl9pc19leGFjdCBp cworCSAqIGZhbHNlLiBUaGlzIGNhbiBoYXBwZW4gaWYsIGZvciBleGFtcGxlLCB0aGVyZSBhcmUg bm8gZXhpc3RpbmcgV0FMCisJICogc3VtbWFyeSBmaWxlcyBhdCBzdGFydHVwLiBJbiB0aGF0IGNh c2UsIHdlIGhhdmUgdG8gZGVyaXZlIHRoZSBwb3NpdGlvbgorCSAqIGF0IHdoaWNoIHRvIHN0YXJ0 IHN1bW1hcml6aW5nIGZyb20gdGhlIFdBTCBmaWxlcyB0aGF0IGV4aXN0IG9uIGRpc2ssCisJICog YW5kIHNvIHRoZSBMU04gbWlnaHQgcG9pbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGZpbGUg ZXZlbiB0aG91Z2gKKwkgKiB0aGF0IG1pZ2h0IGhhcHBlbiB0byBiZSBpbiB0aGUgbWlkZGxlIG9m IGEgV0FMIHJlY29yZC4KKwkgKgorCSAqIHN1bW1hcml6ZXJfcGdwcm9jbm8gaXMgdGhlIHBncHJv Y25vIHZhbHVlIGZvciB0aGUgc3VtbWFyaXplciBwcm9jZXNzLAorCSAqIGlmIG9uZSBpcyBydW5u aW5nLCBvciBlbHNlIElOVkFMSURfUEdQUk9DTk8uCisJICoKKwkgKiBwZW5kaW5nX2xzbiBpcyB1 c2VkIGJ5IHRoZSBzdW1tYXJpemVyIHRvIGFkdmVydGlzZSB0aGUgZW5kaW5nIExTTiBvZiBhCisJ ICogcmVjb3JkIGl0IGhhcyByZWNlbnRseSByZWFkLiBJdCBzaG91bGRuJ3QgZXZlciBiZSBsZXNz IHRoYW4KKwkgKiBzdW1tYXJpemVkX2xzbiwgYnV0IG1pZ2h0IGJlIGdyZWF0ZXIsIGJlY2F1c2Ug dGhlIHN1bW1hcml6ZXIgYnVmZmVycworCSAqIGRhdGEgZm9yIGEgcmFuZ2Ugb2YgTFNOcyBpbiBt ZW1vcnkgYmVmb3JlIHdyaXRpbmcgb3V0IGEgbmV3IGZpbGUuCisJICovCisJYm9vbAkJaW5pdGlh bGl6ZWQ7CisJVGltZUxpbmVJRAlzdW1tYXJpemVkX3RsaTsKKwlYTG9nUmVjUHRyCXN1bW1hcml6 ZWRfbHNuOworCWJvb2wJCWxzbl9pc19leGFjdDsKKwlpbnQJCQlzdW1tYXJpemVyX3BncHJvY25v OworCVhMb2dSZWNQdHIJcGVuZGluZ19sc247CisKKwkvKgorCSAqIFRoaXMgZmllbGQgaGFuZGxl cyBpdHMgb3duIHN5bmNocm9uaXphdG9uLgorCSAqLworCUNvbmRpdGlvblZhcmlhYmxlIHN1bW1h cnlfZmlsZV9jdjsKK30gV2FsU3VtbWFyaXplckRhdGE7CisKKy8qCisgKiBQcml2YXRlIGRhdGEg Zm9yIG91ciB4bG9ncmVhZGVyJ3MgcGFnZSByZWFkIGNhbGxiYWNrLgorICovCit0eXBlZGVmIHN0 cnVjdAoreworCVRpbWVMaW5lSUQJdGxpOworCWJvb2wJCWhpc3RvcmljOworCVhMb2dSZWNQdHIJ cmVhZF91cHRvOworCWJvb2wJCWVuZF9vZl93YWw7Cit9IFN1bW1hcml6ZXJSZWFkTG9jYWxYTG9n UHJpdmF0ZTsKKworLyogUG9pbnRlciB0byBzaGFyZWQgbWVtb3J5IHN0YXRlLiAqLworc3RhdGlj IFdhbFN1bW1hcml6ZXJEYXRhICpXYWxTdW1tYXJpemVyQ3RsOworCisvKgorICogV2hlbiB3ZSBy ZWFjaCBlbmQgb2YgV0FMIGFuZCBuZWVkIHRvIHJlYWQgbW9yZSwgd2Ugc2xlZXAgZm9yIGEgbnVt YmVyIG9mCisgKiBtaWxsaXNlY29uZHMgdGhhdCBpcyBhIGludGVnZXIgbXVsdGlwbGUgb2YgTVNf UEVSX1NMRUVQX1FVQU5UVU0uIFRoaXMgaXMKKyAqIHRoZSBtdWx0aXBsaWVyLiBJdCBzaG91bGQg dmFyeSBiZXR3ZWVuIDEgYW5kIE1BWF9TTEVFUF9RVUFOVEEsIGRlcGVuZGluZworICogb24gc3lz dGVtIGFjdGl2aXR5LiBTZWUgc3VtbWFyaXplcl93YWl0X2Zvcl93YWwoKSBmb3IgaG93IHdlIGFk anVzdCB0aGlzLgorICovCitzdGF0aWMgbG9uZyBzbGVlcF9xdWFudGEgPSAxOworCisvKgorICog VGhlIHNsZWVwIHRpbWUgd2lsbCBhbHdheXMgYmUgYSBtdWx0aXBsZSBvZiAyMDBtcyBhbmQgd2ls bCBub3QgZXhjZWVkCisgKiB0aGlydHkgc2Vjb25kcyAoMTUwICogMjAwID0gMzAgKiAxMDAwKS4g Tm90ZSB0aGF0IHRoZSB0aW1lb3V0IGhlcmUgbmVlZHMKKyAqIHRvIGJlIHN1YnN0bnRpYWxseSBs ZXNzIHRoYW4gdGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgZm9yIHdoaWNoIGFuCisgKiBpbmNy ZW1lbnRhbCBiYWNrdXAgd2lsbCB3YWl0IGZvciB0aGlzIHByb2Nlc3MgdG8gY2F0Y2ggdXAuIE90 aGVyd2lzZSwgYW4KKyAqIGluY3JlbWVudGFsIGJhY2t1cCBtaWdodCB0aW1lIG91dCBvbiBhbiBp ZGxlIHN5c3RlbSBqdXN0IGJlY2F1c2Ugd2Ugc2xlZXAKKyAqIGZvciB0b28gbG9uZy4KKyAqLwor I2RlZmluZSBNQVhfU0xFRVBfUVVBTlRBCQkxNTAKKyNkZWZpbmUgTVNfUEVSX1NMRUVQX1FVQU5U VU0JMjAwCisKKy8qCisgKiBUaGlzIGlzIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBwYWdlcyBv ZiBXQUwgdGhhdCB3ZSd2ZSByZWFkIHNpbmNlIHRoZQorICogbGFzdCB0aW1lIHdlIHdhaXRlZCBm b3IgbW9yZSBXQUwgdG8gYXBwZWFyLgorICovCitzdGF0aWMgbG9uZyBwYWdlc19yZWFkX3NpbmNl X2xhc3Rfc2xlZXAgPSAwOworCisvKgorICogTW9zdCByZWNlbnQgUmVkb1JlY1B0ciB2YWx1ZSBv YnNlcnZlZCBieSBNYXliZVJlbW92ZU9sZFdhbFN1bW1hcmllcy4KKyAqLworc3RhdGljIFhMb2dS ZWNQdHIgcmVkb19wb2ludGVyX2F0X2xhc3Rfc3VtbWFyeV9yZW1vdmFsID0gSW52YWxpZFhMb2dS ZWNQdHI7CisKKy8qCisgKiBHVUMgcGFyYW1ldGVycworICovCitib29sCQlzdW1tYXJpemVfd2Fs ID0gZmFsc2U7CitpbnQJCQl3YWxfc3VtbWFyeV9rZWVwX3RpbWUgPSAxMCAqIDI0ICogNjA7CisK K3N0YXRpYyBYTG9nUmVjUHRyIEdldExhdGVzdExTTihUaW1lTGluZUlEICp0bGkpOworc3RhdGlj IHZvaWQgSGFuZGxlV2FsU3VtbWFyaXplckludGVycnVwdHModm9pZCk7CitzdGF0aWMgWExvZ1Jl Y1B0ciBTdW1tYXJpemVXQUwoVGltZUxpbmVJRCB0bGksIFhMb2dSZWNQdHIgc3RhcnRfbHNuLAor CQkJCQkJCSAgIGJvb2wgZXhhY3QsIFhMb2dSZWNQdHIgc3dpdGNoX2xzbiwKKwkJCQkJCQkgICBY TG9nUmVjUHRyIG1heGltdW1fbHNuKTsKK3N0YXRpYyB2b2lkIFN1bW1hcml6ZVNtZ3JSZWNvcmQo WExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLAorCQkJCQkJCQlCbG9ja1JlZlRhYmxlICpicnRh Yik7CitzdGF0aWMgdm9pZCBTdW1tYXJpemVYYWN0UmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqeGxv Z3JlYWRlciwKKwkJCQkJCQkJQmxvY2tSZWZUYWJsZSAqYnJ0YWIpOworc3RhdGljIGJvb2wgU3Vt bWFyaXplWGxvZ1JlY29yZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXIpOworc3RhdGljIGlu dAlzdW1tYXJpemVyX3JlYWRfbG9jYWxfeGxvZ19wYWdlKFhMb2dSZWFkZXJTdGF0ZSAqc3RhdGUs CisJCQkJCQkJCQkJCVhMb2dSZWNQdHIgdGFyZ2V0UGFnZVB0ciwKKwkJCQkJCQkJCQkJaW50IHJl cUxlbiwKKwkJCQkJCQkJCQkJWExvZ1JlY1B0ciB0YXJnZXRSZWNQdHIsCisJCQkJCQkJCQkJCWNo YXIgKmN1cl9wYWdlKTsKK3N0YXRpYyB2b2lkIHN1bW1hcml6ZXJfd2FpdF9mb3Jfd2FsKHZvaWQp Oworc3RhdGljIHZvaWQgTWF5YmVSZW1vdmVPbGRXYWxTdW1tYXJpZXModm9pZCk7CisKKy8qCisg KiBBbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSByZXF1aXJlZCBmb3IgdGhpcyBtb2R1bGUuCisgKi8K K1NpemUKK1dhbFN1bW1hcml6ZXJTaG1lbVNpemUodm9pZCkKK3sKKwlyZXR1cm4gc2l6ZW9mKFdh bFN1bW1hcml6ZXJEYXRhKTsKK30KKworLyoKKyAqIENyZWF0ZSBvciBhdHRhY2ggdG8gc2hhcmVk IG1lbW9yeSBzZWdtZW50IGZvciB0aGlzIG1vZHVsZS4KKyAqLwordm9pZAorV2FsU3VtbWFyaXpl clNobWVtSW5pdCh2b2lkKQoreworCWJvb2wJCWZvdW5kOworCisJV2FsU3VtbWFyaXplckN0bCA9 IChXYWxTdW1tYXJpemVyRGF0YSAqKQorCQlTaG1lbUluaXRTdHJ1Y3QoIldhbCBTdW1tYXJpemVy IEN0bCIsIFdhbFN1bW1hcml6ZXJTaG1lbVNpemUoKSwKKwkJCQkJCSZmb3VuZCk7CisKKwlpZiAo IWZvdW5kKQorCXsKKwkJLyoKKwkJICogRmlyc3QgdGltZSB0aHJvdWdoLCBzbyBpbml0aWFsaXpl LgorCQkgKgorCQkgKiBXZSdyZSBqdXN0IGZpbGxpbmcgaW4gZHVtbXkgdmFsdWVzIGhlcmUgLS0g dGhlIHJlYWwgaW5pdGlhbGl6YXRpb24KKwkJICogd2lsbCBoYXBwZW4gd2hlbiBHZXRPbGRlc3RV bnN1bW1hcml6ZWRMU04oKSBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdAorCQkgKiB0aW1lLgorCQkg Ki8KKwkJV2FsU3VtbWFyaXplckN0bC0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwkJV2FsU3VtbWFy aXplckN0bC0+c3VtbWFyaXplZF90bGkgPSAwOworCQlXYWxTdW1tYXJpemVyQ3RsLT5zdW1tYXJp emVkX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlXYWxTdW1tYXJpemVyQ3RsLT5sc25faXNf ZXhhY3QgPSBmYWxzZTsKKwkJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXplcl9wZ3Byb2NubyA9 IElOVkFMSURfUEdQUk9DTk87CisJCVdhbFN1bW1hcml6ZXJDdGwtPnBlbmRpbmdfbHNuID0gSW52 YWxpZFhMb2dSZWNQdHI7CisJCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmV2FsU3VtbWFyaXplckN0 bC0+c3VtbWFyeV9maWxlX2N2KTsKKwl9Cit9CisKKy8qCisgKiBFbnRyeSBwb2ludCBmb3Igd2Fs c3VtbWFyaXplciBwcm9jZXNzLgorICovCit2b2lkCitXYWxTdW1tYXJpemVyTWFpbih2b2lkKQor eworCXNpZ2ptcF9idWYJbG9jYWxfc2lnam1wX2J1ZjsKKwlNZW1vcnlDb250ZXh0IGNvbnRleHQ7 CisKKwkvKgorCSAqIFdpdGhpbiB0aGlzIGZ1bmN0aW9uLCAnY3VycmVudF9sc24nIGFuZCAnY3Vy cmVudF90bGknIHJlZmVyIHRvIHRoZQorCSAqIHBvaW50IGZyb20gd2hpY2ggdGhlIG5leHQgV0FM IHN1bW1hcnkgZmlsZSBzaG91bGQgc3RhcnQuICdleGFjdCcgaXMKKwkgKiB0cnVlIGlmICdjdXJy ZW50X2xzbicgaXMga25vd24gdG8gYmUgdGhlIHN0YXJ0IG9mIGEgV0FMIHJlY29kIG9yIFdBTAor CSAqIHNlZ21lbnQsIGFuZCBmYWxzZSBpZiBpdCBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEg cmVjb3JkIHNvbWVwbGFjZS4KKwkgKgorCSAqICdzd2l0Y2hfbHNuJyBhbmQgJ3N3aXRjaF90bGkn LCBpZiBzZXQsIGFyZSB0aGUgTFNOIGF0IHdoaWNoIHdlIG5lZWQgdG8KKwkgKiBzd2l0Y2ggdG8g YSBuZXcgdGltZWxpbmUgYW5kIHRoZSB0aW1lbGluZSB0byB3aGljaCB3ZSBuZWVkIHRvIHN3aXRj aC4KKwkgKiBJZiBub3Qgc2V0LCB3ZSBlaXRoZXIgaGF2ZW4ndCBmaWd1cmVkIG91dCB0aGUgYW5z d2VycyB5ZXQgb3Igd2UncmUKKwkgKiBhbHJlYWR5IG9uIHRoZSBsYXRlc3QgdGltZWxpbmUuCisJ ICovCisJWExvZ1JlY1B0cgljdXJyZW50X2xzbjsKKwlUaW1lTGluZUlECWN1cnJlbnRfdGxpOwor CWJvb2wJCWV4YWN0OworCVhMb2dSZWNQdHIJc3dpdGNoX2xzbiA9IEludmFsaWRYTG9nUmVjUHRy OworCVRpbWVMaW5lSUQJc3dpdGNoX3RsaSA9IDA7CisKKwllcmVwb3J0KERFQlVHMSwKKwkJCShl cnJtc2dfaW50ZXJuYWwoIldBTCBzdW1tYXJpemVyIHN0YXJ0ZWQiKSkpOworCisJLyoKKwkgKiBQ cm9wZXJseSBhY2NlcHQgb3IgaWdub3JlIHNpZ25hbHMgdGhlIHBvc3RtYXN0ZXIgbWlnaHQgc2Vu ZCB1cworCSAqCisJICogV2UgaGF2ZSBubyBwYXJ0aWN1bGFyIHVzZSBmb3IgU0lHSU5UIGF0IHRo ZSBtb21lbnQsIGJ1dCBzZWVtcworCSAqIHJlYXNvbmFibGUgdG8gdHJlYXQgbGlrZSBTSUdURVJN LgorCSAqLworCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7 CisJcHFzaWduYWwoU0lHSU5ULCBTaWduYWxIYW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsKKwlw cXNpZ25hbChTSUdURVJNLCBTaWduYWxIYW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsKKwkvKiBT SUdRVUlUIGhhbmRsZXIgd2FzIGFscmVhZHkgc2V0IHVwIGJ5IEluaXRQb3N0bWFzdGVyQ2hpbGQg Ki8KKwlwcXNpZ25hbChTSUdBTFJNLCBTSUdfSUdOKTsKKwlwcXNpZ25hbChTSUdQSVBFLCBTSUdf SUdOKTsKKwlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7CisJ cHFzaWduYWwoU0lHVVNSMiwgU0lHX0lHTik7IC8qIG5vdCB1c2VkICovCisKKwkvKiBBZHZlcnRp c2Ugb3Vyc2VsdmVzLiAqLworCUxXTG9ja0FjcXVpcmUoV0FMU3VtbWFyaXplckxvY2ssIExXX0VY Q0xVU0lWRSk7CisJV2FsU3VtbWFyaXplckN0bC0+c3VtbWFyaXplcl9wZ3Byb2NubyA9IE15UHJv Yy0+cGdwcm9jbm87CisJTFdMb2NrUmVsZWFzZShXQUxTdW1tYXJpemVyTG9jayk7CisKKwkvKiBD cmVhdGUgYW5kIHN3aXRjaCB0byBhIG1lbW9yeSBjb250ZXh0IHRoYXQgd2UgY2FuIHJlc2V0IG9u IGVycm9yLiAqLworCWNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29u dGV4dCwKKwkJCQkJCQkJCSJXYWwgU3VtbWFyaXplciIsCisJCQkJCQkJCQlBTExPQ1NFVF9ERUZB VUxUX1NJWkVTKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dCk7CisKKwkvKgorCSAq IFJlc2V0IHNvbWUgc2lnbmFscyB0aGF0IGFyZSBhY2NlcHRlZCBieSBwb3N0bWFzdGVyIGJ1dCBu b3QgaGVyZQorCSAqLworCXBxc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOworCisJLyoKKwkgKiBJ ZiBhbiBleGNlcHRpb24gaXMgZW5jb3VudGVyZWQsIHByb2Nlc3NpbmcgcmVzdW1lcyBoZXJlLgor CSAqLworCWlmIChzaWdzZXRqbXAobG9jYWxfc2lnam1wX2J1ZiwgMSkgIT0gMCkKKwl7CisJCS8q IFNpbmNlIG5vdCB1c2luZyBQR19UUlksIG11c3QgcmVzZXQgZXJyb3Igc3RhY2sgYnkgaGFuZCAq LworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gTlVMTDsKKworCQkvKiBQcmV2ZW50IGludGVycnVw dHMgd2hpbGUgY2xlYW5pbmcgdXAgKi8KKwkJSE9MRF9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVw b3J0IHRoZSBlcnJvciB0byB0aGUgc2VydmVyIGxvZyAqLworCQlFbWl0RXJyb3JSZXBvcnQoKTsK KworCQkvKiBSZWxlYXNlIHJlc291cmNlcyB3ZSBtaWdodCBoYXZlIGFjcXVpcmVkLiAqLworCQlM V0xvY2tSZWxlYXNlQWxsKCk7CisJCUNvbmRpdGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAoKTsKKwkJ cGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOworCQlSZWxlYXNlQXV4UHJvY2Vzc1Jlc291cmNlcyhm YWxzZSk7CisJCUF0RU9YYWN0X0ZpbGVzKGZhbHNlKTsKKwkJQXRFT1hhY3RfSGFzaFRhYmxlcyhm YWxzZSk7CisKKwkJLyoKKwkJICogTm93IHJldHVybiB0byBub3JtYWwgdG9wLWxldmVsIGNvbnRl eHQgYW5kIGNsZWFyIEVycm9yQ29udGV4dCBmb3IKKwkJICogbmV4dCB0aW1lLgorCQkgKi8KKwkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRleHQpOworCQlGbHVzaEVycm9yU3RhdGUoKTsKKwor CQkvKiBGbHVzaCBhbnkgbGVha2VkIGRhdGEgaW4gdGhlIHRvcC1sZXZlbCBjb250ZXh0ICovCisJ CU1lbW9yeUNvbnRleHRSZXNldEFuZERlbGV0ZUNoaWxkcmVuKGNvbnRleHQpOworCisJCS8qIE5v dyB3ZSBjYW4gYWxsb3cgaW50ZXJydXB0cyBhZ2FpbiAqLworCQlSRVNVTUVfSU5URVJSVVBUUygp OworCisJCS8qCisJCSAqIFNsZWVwIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhdHRlbXB0aW5nIHRv IHJlc3VtZSBvcGVyYXRpb25zIGluCisJCSAqIG9yZGVyIHRvIGF2b2lkIGV4Y2Vzc2luZyBsb2dn aW5nLgorCQkgKgorCQkgKiBNYW55IG9mIHRoZSBsaWtlbHkgZXJyb3IgY29uZGl0aW9ucyBhcmUg dGhpbmdzIHRoYXQgd2lsbCByZXBlYXQKKwkJICogZXZlcnkgdGltZS4gRm9yIGV4YW1wbGUsIGlm IHRoZSBXQUwgY2FuJ3QgYmUgcmVhZCBvciB0aGUgc3VtbWFyeQorCQkgKiBjYW4ndCBiZSB3cml0 dGVuLCBvbmx5IGFkbWluaXN0cmF0b3IgYWN0aW9uIHdpbGwgY3VyZSB0aGUgcHJvYmxlbS4KKwkJ ICogU28gYSByZWFsbHkgZmFzdCByZXRyeSB0aW1lIGRvZXNuJ3Qgc2VlbSB0byBiZSBlc3BlY2lh bGx5CisJCSAqIGJlbmVmaWNpYWwsIGFuZCBpdCB3aWxsIGNsdXR0ZXIgdGhlIGxvZ3MuCisJCSAq LworCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCQkgV0xfVElNRU9VVCB8IFdMX0VY SVRfT05fUE1fREVBVEgsCisJCQkJCQkgMTAwMDAsCisJCQkJCQkgV0FJVF9FVkVOVF9XQUxfU1VN TUFSSVpFUl9FUlJPUik7CisJfQorCisJLyogV2UgY2FuIG5vdyBoYW5kbGUgZXJlcG9ydChFUlJP UikgKi8KKwlQR19leGNlcHRpb25fc3RhY2sgPSAmbG9jYWxfc2lnam1wX2J1ZjsKKworCS8qCisJ ICogVW5ibG9jayBzaWduYWxzICh0aGV5IHdlcmUgYmxvY2tlZCB3aGVuIHRoZSBwb3N0bWFzdGVy IGZvcmtlZCB1cykKKwkgKi8KKwlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJlVuQmxvY2tTaWcs IE5VTEwpOworCisJLyoKKwkgKiBGZXRjaCBpbmZvcm1hdGlvbiBhYm91dCBwcmV2aW91cyBwcm9n cmVzcyBmcm9tIHNoYXJlZCBtZW1vcnksIGFuZCBhc2sKKwkgKiBHZXRPbGRlc3RVbnN1bW1hcml6 ZWRMU04gdG8gcmVzZXQgcGVuZGluZ19sc24gdG8gc3VtbWFyaXplZF9sc24uIFdlCisJICogbWln aHQgYmUgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCBhbmQgaWYgc28sIHBlbmRpbmdfbHNuIG1p Z2h0IGhhdmUKKwkgKiBhZHZhbmNlZCBwYXN0IHN1bW1hcml6ZWRfbHNuLCBidXQgYW55IFdBTCB3 ZSByZWFkIHByZXZpb3VzbHkgaGFzIGJlZW4KKwkgKiBsb3N0IGFuZCB3aWxsIG5lZWQgdG8gYmUg cmVyZWFkLgorCSAqCisJICogSWYgd2UgZGlzY292ZXIgdGhhdCBXQUwgc3VtbWFyaXphdGlvbiBp cyBub3QgZW5hYmxlZCwganVzdCBleGl0LgorCSAqLworCWN1cnJlbnRfbHNuID0gR2V0T2xkZXN0 VW5zdW1tYXJpemVkTFNOKCZjdXJyZW50X3RsaSwgJmV4YWN0LCB0cnVlKTsKKwlpZiAoWExvZ1Jl Y1B0cklzSW52YWxpZChjdXJyZW50X2xzbikpCisJCXByb2NfZXhpdCgwKTsKKworCS8qCisJICog TG9vcCBmb3JldmVyCisJICovCisJZm9yICg7OykKKwl7CisJCVhMb2dSZWNQdHIJbGF0ZXN0X2xz bjsKKwkJVGltZUxpbmVJRAlsYXRlc3RfdGxpOworCQlYTG9nUmVjUHRyCWVuZF9vZl9zdW1tYXJ5 X2xzbjsKKworCQkvKiBGbHVzaCBhbnkgbGVha2VkIGRhdGEgaW4gdGhlIHRvcC1sZXZlbCBjb250 ZXh0ICovCisJCU1lbW9yeUNvbnRleHRSZXNldEFuZERlbGV0ZUNoaWxkcmVuKGNvbnRleHQpOwor CisJCS8qIFByb2Nlc3MgYW55IHNpZ25hbHMgcmVjZWl2ZWQgcmVjZW50bHkuICovCisJCUhhbmRs ZVdhbFN1bW1hcml6ZXJJbnRlcnJ1cHRzKCk7CisKKwkJLyogSWYgaXQncyB0aW1lIHRvIHJlbW92 ZSBhbnkgb2xkIFdBTCBzdW1tYXJpZXMsIGRvIHRoYXQgbm93LiAqLworCQlNYXliZVJlbW92ZU9s ZFdhbFN1bW1hcmllcygpOworCisJCS8qIEZpbmQgdGhlIExTTiBhbmQgVExJIHVwIHRvIHdoaWNo IHdlIGNhbiBzYWZlbHkgc3VtbWFyaXplLiAqLworCQlsYXRlc3RfbHNuID0gR2V0TGF0ZXN0TFNO KCZsYXRlc3RfdGxpKTsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSBzdW1tYXJpemluZyBhIGhpc3Rv cmljIHRpbWVsaW5lIGFuZCB3ZSBoYXZlbid0IHlldAorCQkgKiBjb21wdXRlZCB0aGUgcG9pbnQg YXQgd2hpY2ggdG8gc3dpdGNoIHRvIHRoZSBuZXh0IHRpbWVsaW5lLCBkbyB0aGF0CisJCSAqIG5v dy4KKwkJICoKKwkJICogTm90ZSB0aGF0IGlmIHRoaXMgaXMgYSBzdGFuZGJ5LCB3aGF0IHdhcyBw cmV2aW91c2x5IHRoZSBjdXJyZW50CisJCSAqIHRpbWVsaW5lIGNvdWxkIGJlY29tZSBoaXN0b3Jp YyBhdCBhbnkgdGltZS4KKwkJICoKKwkJICogV2UgY291bGQgdHJ5IHRvIG1ha2UgdGhpcyBtb3Jl IGVmZmljaWVudCBieSBjYWNoaW5nIHRoZSByZXN1bHRzIG9mCisJCSAqIHJlYWRUaW1lTGluZUhp c3Rvcnkgd2hlbiBsYXRlc3RfdGxpIGhhcyBub3QgY2hhbmdlZCwgYnV0IHNpbmNlIHdlCisJCSAq IG9ubHkgaGF2ZSB0byBkbyB0aGlzIG9uY2UgcGVyIHRpbWVsaW5lIHN3aXRjaCwgd2UgcHJvYmFi bHkgd291bGRuJ3QKKwkJICogc2F2ZSBhbnkgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHdvcmsgaW4g cHJhY3RpY2UuCisJCSAqLworCQlpZiAoY3VycmVudF90bGkgIT0gbGF0ZXN0X3RsaSAmJiBYTG9n UmVjUHRySXNJbnZhbGlkKHN3aXRjaF9sc24pKQorCQl7CisJCQlMaXN0CSAgICp0bGVzID0gcmVh ZFRpbWVMaW5lSGlzdG9yeShsYXRlc3RfdGxpKTsKKworCQkJc3dpdGNoX2xzbiA9IHRsaVN3aXRj aFBvaW50KGN1cnJlbnRfdGxpLCB0bGVzLCAmc3dpdGNoX3RsaSk7CisJCQllcmVwb3J0KERFQlVH MSwKKwkJCQkJZXJybXNnKCJzd2l0Y2ggcG9pbnQgZnJvbSBUTEkgJXUgdG8gVExJICV1IGlzIGF0 ICVYLyVYIiwKKwkJCQkJCSAgIGN1cnJlbnRfdGxpLCBzd2l0Y2hfdGxpLCBMU05fRk9STUFUX0FS R1Moc3dpdGNoX2xzbikpKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlJ3ZlIHJlYWNoZWQgdGhl IHN3aXRjaCBMU04sIHdlIGNhbid0IHN1bW1hcml6ZSBhbnl0aGluZyBlbHNlCisJCSAqIG9uIHRo aXMgdGltZWxpbmUuIFN3aXRjaCB0byB0aGUgbmV4dCB0aW1lbGluZSBhbmQgZ28gYXJvdW5kIGFn YWluLgorCQkgKi8KKwkJaWYgKCFYTG9nUmVjUHRySXNJbnZhbGlkKHN3aXRjaF9sc24pICYmIGN1 cnJlbnRfbHNuID49IHN3aXRjaF9sc24pCisJCXsKKwkJCWN1cnJlbnRfdGxpID0gc3dpdGNoX3Rs aTsKKwkJCXN3aXRjaF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwkJCXN3aXRjaF90bGkgPSAw OworCQkJY29udGludWU7CisJCX0KKworCQkvKiBTdW1tYXJpemUgV0FMLiAqLworCQllbmRfb2Zf c3VtbWFyeV9sc24gPSBTdW1tYXJpemVXQUwoY3VycmVudF90bGksCisJCQkJCQkJCQkJICBjdXJy ZW50X2xzbiwgZXhhY3QsCisJCQkJCQkJCQkJICBzd2l0Y2hfbHNuLCBsYXRlc3RfbHNuKTsKKwkJ QXNzZXJ0KCFYTG9nUmVjUHRySXNJbnZhbGlkKGVuZF9vZl9zdW1tYXJ5X2xzbikpOworCQlBc3Nl cnQoZW5kX29mX3N1bW1hcnlfbHNuID49IGN1cnJlbnRfbHNuKTsKKworCQkvKgorCQkgKiBVcGRh dGUgc3RhdGUgZm9yIG5leHQgbG9vcCBpdGVyYXRpb24uCisJCSAqCisJCSAqIE5leHQgc3VtbWFy eSBmaWxlIHNob3VsZCBzdGFydCBmcm9tIGV4YWN0bHkgd2hlcmUgdGhpcyBvbmUgZW5kZWQuCisJ CSAqLworCQljdXJyZW50X2xzbiA9IGVuZF9vZl9zdW1tYXJ5X2xzbjsKKwkJZXhhY3QgPSB0cnVl OworCisJCS8qIFVwZGF0ZSBzdGF0ZSBpbiBzaGFyZWQgbWVtb3J5LiAqLworCQlMV0xvY2tBY3F1 aXJlKFdBTFN1bW1hcml6ZXJMb2NrLCBMV19FWENMVVNJVkUpOworCQlBc3NlcnQoV2FsU3VtbWFy aXplckN0bC0+cGVuZGluZ19sc24gPD0gZW5kX29mX3N1bW1hcnlfbHNuKTsKKwkJV2FsU3VtbWFy aXplckN0bC0+c3VtbWFyaXplZF9sc24gPSBlbmRfb2Zfc3VtbWFyeV9sc247CisJCVdhbFN1bW1h cml6ZXJDdGwtPnN1bW1hcml6ZWRfdGxpID0gY3VycmVudF90bGk7CisJCVdhbFN1bW1hcml6ZXJD dGwtPmxzbl9pc19leGFjdCA9IHRydWU7CisJCVdhbFN1bW1hcml6ZXJDdGwtPnBlbmRpbmdfbHNu ID0gZW5kX29mX3N1bW1hcnlfbHNuOworCQlMV0xvY2tSZWxlYXNlKFdBTFN1bW1hcml6ZXJMb2Nr KTsKKworCQkvKiBXYWtlIHVwIGFueW9uZSB3YWl0aW5nIGZvciBtb3JlIHN1bW1hcnkgZmlsZXMg dG8gYmUgd3JpdHRlbi4gKi8KKwkJQ29uZGl0aW9uVmFyaWFibGVCcm9hZGNhc3QoJldhbFN1bW1h cml6ZXJDdGwtPnN1bW1hcnlfZmlsZV9jdik7CisJfQorfQorCisvKgorICogR2V0IHRoZSBvbGRl c3QgTFNOIGluIHRoaXMgc2VydmVyJ3MgdGltZWxpbmUgaGlzdG9yeSB0aGF0IGhhcyBub3QgeWV0 IGJlZW4KKyAqIHN1bW1hcml6ZWQuCisgKgorICogSWYgKnRsaSAhPSBOVUxMLCBpdCB3aWxsIGJl IHNldCB0byB0aGUgVExJIGZvciB0aGUgTFNOIHRoYXQgaXMgcmV0dXJuZWQuCisgKgorICogSWYg Kmxzbl9pc19leGFjdCAhPSBOVUxMLCBpdCB3aWxsIGJlIHNldCB0byB0cnVlIGlmIHRoZSByZXR1 cm5lZCBMU04gaXMKKyAqIG5lY2Vzc2FyaWx5IHRoZSBzdGFydCBvZiBhIFdBTCByZWNvcmQgYW5k IGZhbHNlIGlmIGl0J3MganVzdCB0aGUgYmVnaW5uaW5nCisgKiBvZiBhIFdBTCBzZWdtZW50Lgor ICoKKyAqIElmIHJlc2V0X3BlbmRpbmdfbHNuIGlzIHRydWUsIHJlc2V0cyB0aGUgcGVuZGluZ19s c24gaW4gc2hhcmVkIG1lbW9yeSB0bworICogYmUgZXF1YWwgdG8gdGhlIHN1bW1hcml6ZWRfbHNu LgorICovCitYTG9nUmVjUHRyCitHZXRPbGRlc3RVbnN1bW1hcml6ZWRMU04oVGltZUxpbmVJRCAq dGxpLCBib29sICpsc25faXNfZXhhY3QsCisJCQkJCQkgYm9vbCByZXNldF9wZW5kaW5nX2xzbikK K3sKKwlUaW1lTGluZUlECWxhdGVzdF90bGk7CisJTFdMb2NrTW9kZQltb2RlID0gcmVzZXRfcGVu ZGluZ19sc24gPyBMV19FWENMVVNJVkUgOiBMV19TSEFSRUQ7CisJaW50CQkJbjsKKwlMaXN0CSAg ICp0bGVzOworCVhMb2dSZWNQdHIJdW5zdW1tYXJpemVkX2xzbjsKKwlUaW1lTGluZUlECXVuc3Vt bWFyaXplZF90bGkgPSAwOworCWJvb2wJCXNob3VsZF9tYWtlX2V4YWN0ID0gZmFsc2U7CisJTGlz dAkgICAqZXhpc3Rpbmdfc3VtbWFyaWVzOworCUxpc3RDZWxsICAgKmxjOworCisJLyogSWYgbm90 IHN1bW1hcml6aW5nIFdBTCwgZG8gbm90aGluZy4gKi8KKwlpZiAoIXN1bW1hcml6ZV93YWwpCisJ CXJldHVybiBJbnZhbGlkWExvZ1JlY1B0cjsKKworCS8qCisJICogVW5sZXNzIHdlIG5lZWQgdG8g cmVzZXQgdGhlIHBlbmRpbmdfbHNuLCB3ZSBpbml0YWxseSBhY3F1aXJlIHRoZSBsb2NrCisJICog aW4gc2hhcmVkIG1vZGUgYW5kIHRyeSB0byBmZXRjaCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24u IElmIHdlIGFjcXVpcmUKKwkgKiBpbiBzaGFyZWQgbW9kZSBhbmQgZmluZCB0aGF0IHRoZSBkYXRh IHN0cnVjdHVyZSBoYXNuJ3QgYmVlbgorCSAqIGluaXRpYWxpemVkLCB3ZSByZWFjcXVpcmUgdGhl IGxvY2sgaW4gZXhjbHVzaXZlIG1vZGUgc28gdGhhdCB3ZSBjYW4KKwkgKiBpbml0aWFsaXplIGl0 LiBIb3dldmVyLCBpZiBzb21lb25lIGVsc2UgZG9lcyB0aGF0IGZpcnN0IGJlZm9yZSB3ZSBnZXQK KwkgKiB0aGUgbG9jaywgdGhlbiB3ZSBjYW4ganVzdCByZXR1cm4gdGhlIHJlcXVlc3RlZCBpbmZv cm1hdGlvbiBhZnRlciBhbGwuCisJICovCisJd2hpbGUgKDEpCisJeworCQlMV0xvY2tBY3F1aXJl KFdBTFN1bW1hcml6ZXJMb2NrLCBtb2RlKTsKKworCQlpZiAoV2FsU3VtbWFyaXplckN0bC0+aW5p dGlhbGl6ZWQpCisJCXsKKwkJCXVuc3VtbWFyaXplZF9sc24gPSBXYWxTdW1tYXJpemVyQ3RsLT5z dW1tYXJpemVkX2xzbjsKKwkJCWlmICh0bGkgIT0gTlVMTCkKKwkJCQkqdGxpID0gV2FsU3VtbWFy aXplckN0bC0+c3VtbWFyaXplZF90bGk7CisJCQlpZiAobHNuX2lzX2V4YWN0ICE9IE5VTEwpCisJ CQkJKmxzbl9pc19leGFjdCA9IFdhbFN1bW1hcml6ZXJDdGwtPmxzbl9pc19leGFjdDsKKwkJCWlm IChyZXNldF9wZW5kaW5nX2xzbikKKwkJCQlXYWxTdW1tYXJpemVyQ3RsLT5wZW5kaW5nX2xzbiA9 CisJCQkJCVdhbFN1bW1hcml6ZXJDdGwtPnN1bW1hcml6ZWRfbHNuOworCQkJTFdMb2NrUmVsZWFz ZShXQUxTdW1tYXJpemVyTG9jayk7CisJCQlyZXR1cm4gdW5zdW1tYXJpemVkX2xzbjsKKwkJfQor CisJCWlmIChtb2RlID09IExXX0VYQ0xVU0lWRSkKKwkJCWJyZWFrOworCisJCUxXTG9ja1JlbGVh c2UoV0FMU3VtbWFyaXplckxvY2spOworCQltb2RlID0gTFdfRVhDTFVTSVZFOworCX0KKworCS8q CisJICogVGhlIGRhdGEgc3RydWN0dXJlIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkLCBhbmQgd2Ug YXJlIHRoZSBmaXJzdCB0bworCSAqIG9idGFpbiB0aGUgbG9jayBpbiBleGNsdXNpdmUgbW9kZSwg c28gaXQncyBvdXIgam9iIHRvIGRvIHRoYXQKKwkgKiBpbml0aWFsaXphdGlvbi4KKwkgKgorCSAq IFNvLCBmaW5kIHRoZSBvbGRlc3QgdGltZWxpbmUgb24gd2hpY2ggV0FMIHN0aWxsIGV4aXN0cywg YW5kIHRoZQorCSAqIGVhcmxpZXN0IHNlZ21lbnQgZm9yIHdoaWNoIGl0IGV4aXN0cy4KKwkgKi8K Kwkodm9pZCkgR2V0TGF0ZXN0TFNOKCZsYXRlc3RfdGxpKTsKKwl0bGVzID0gcmVhZFRpbWVMaW5l SGlzdG9yeShsYXRlc3RfdGxpKTsKKwlmb3IgKG4gPSBsaXN0X2xlbmd0aCh0bGVzKSAtIDE7IG4g Pj0gMDsgLS1uKQorCXsKKwkJVGltZUxpbmVIaXN0b3J5RW50cnkgKnRsZSA9IGxpc3RfbnRoKHRs ZXMsIG4pOworCQlYTG9nU2VnTm8Jb2xkZXN0X3NlZ25vOworCisJCW9sZGVzdF9zZWdubyA9IFhM b2dHZXRPbGRlc3RTZWdubyh0bGUtPnRsaSk7CisJCWlmIChvbGRlc3Rfc2Vnbm8gIT0gMCkKKwkJ eworCQkJLyogQ29tcHV0ZSBvbGRlc3QgTFNOIHRoYXQgc3RpbGwgZXhpc3RzIG9uIGRpc2suICov CisJCQlYTG9nU2VnTm9PZmZzZXRUb1JlY1B0cihvbGRlc3Rfc2Vnbm8sIDAsIHdhbF9zZWdtZW50 X3NpemUsCisJCQkJCQkJCQl1bnN1bW1hcml6ZWRfbHNuKTsKKworCQkJdW5zdW1tYXJpemVkX3Rs aSA9IHRsZS0+dGxpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBJdCByZWFsbHkgc2hvdWxk IG5vdCBiZSBwb3NzaWJsZSBmb3IgdXMgdG8gZmluZCBubyBXQUwuICovCisJaWYgKHVuc3VtbWFy aXplZF90bGkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5U RVJOQUxfRVJST1IpLAorCQkJCWVycm1zZ19pbnRlcm5hbCgibm8gV0FMIGZvdW5kIG9uIHRpbWVs aW5lICVkIiwgbGF0ZXN0X3RsaSkpOworCisJLyoKKwkgKiBEb24ndCB0cnkgdG8gc3VtbWFyaXpl IGFueXRoaW5nIG9sZGVyIHRoYW4gdGhlIGVuZCBMU04gb2YgdGhlIG5ld2VzdAorCSAqIHN1bW1h cnkgZmlsZSB0aGF0IGV4aXN0cyBmb3IgdGhpcyB0aW1lbGluZS4KKwkgKi8KKwlleGlzdGluZ19z dW1tYXJpZXMgPQorCQlHZXRXYWxTdW1tYXJpZXModW5zdW1tYXJpemVkX3RsaSwKKwkJCQkJCUlu dmFsaWRYTG9nUmVjUHRyLCBJbnZhbGlkWExvZ1JlY1B0cik7CisJZm9yZWFjaChsYywgZXhpc3Rp bmdfc3VtbWFyaWVzKQorCXsKKwkJV2FsU3VtbWFyeUZpbGUgKndzID0gbGZpcnN0KGxjKTsKKwor CQlpZiAod3MtPmVuZF9sc24gPiB1bnN1bW1hcml6ZWRfbHNuKQorCQl7CisJCQl1bnN1bW1hcml6 ZWRfbHNuID0gd3MtPmVuZF9sc247CisJCQlzaG91bGRfbWFrZV9leGFjdCA9IHRydWU7CisJCX0K Kwl9CisKKwkvKiBVcGRhdGUgc2hhcmVkIG1lbW9yeSB3aXRoIHRoZSBkaXNjb3ZlcmVkIHZhbHVl cy4gKi8KKwlXYWxTdW1tYXJpemVyQ3RsLT5pbml0aWFsaXplZCA9IHRydWU7CisJV2FsU3VtbWFy aXplckN0bC0+c3VtbWFyaXplZF9sc24gPSB1bnN1bW1hcml6ZWRfbHNuOworCVdhbFN1bW1hcml6 ZXJDdGwtPnN1bW1hcml6ZWRfdGxpID0gdW5zdW1tYXJpemVkX3RsaTsKKwlXYWxTdW1tYXJpemVy Q3RsLT5sc25faXNfZXhhY3QgPSBzaG91bGRfbWFrZV9leGFjdDsKKwlXYWxTdW1tYXJpemVyQ3Rs LT5wZW5kaW5nX2xzbiA9IHVuc3VtbWFyaXplZF9sc247CisKKwkvKiBBbHNvIHJldHVybiB0aGUg dG8gdGhlIGNhbGxlciBhcyByZXF1aXJlZC4gKi8KKwlpZiAodGxpICE9IE5VTEwpCisJCSp0bGkg PSBXYWxTdW1tYXJpemVyQ3RsLT5zdW1tYXJpemVkX3RsaTsKKwlpZiAobHNuX2lzX2V4YWN0ICE9 IE5VTEwpCisJCSpsc25faXNfZXhhY3QgPSBXYWxTdW1tYXJpemVyQ3RsLT5sc25faXNfZXhhY3Q7 CisJTFdMb2NrUmVsZWFzZShXQUxTdW1tYXJpemVyTG9jayk7CisKKwlyZXR1cm4gdW5zdW1tYXJp emVkX2xzbjsKK30KKworLyoKKyAqIEF0dGVtcHQgdG8gc2V0IHRoZSBXQUwgc3VtbWFyaXplcidz IGxhdGNoLgorICoKKyAqIFRoaXMgbWlnaHQgbm90IHdvcmssIGJlY2F1c2UgdGhlcmUncyBubyBn dWFyYW50ZWUgdGhhdCB0aGUgV0FMIHN1bW1hcml6ZXIKKyAqIHByb2Nlc3Mgd2FzIHN1Y2Nlc3Nm dWxseSBzdGFydGVkLCBhbmQgaXQgYWxzbyBtaWdodCBoYXZlIHN0YXJ0ZWQgYnV0CisgKiBzdWJz ZXF1ZW50bHkgdGVybWluYXRlZC4gU28sIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCB0aGlz IHdpbGwgZ2V0IHRoZQorICogbGF0Y2ggc2V0LCBidXQgdGhlcmUncyBubyBndWFyYW50ZWUuCisg Ki8KK3ZvaWQKK1NldFdhbFN1bW1hcml6ZXJMYXRjaCh2b2lkKQoreworCWludAkJCXBncHJvY25v OworCisJaWYgKFdhbFN1bW1hcml6ZXJDdGwgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJTFdMb2Nr QWNxdWlyZShXQUxTdW1tYXJpemVyTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlwZ3Byb2NubyA9IFdh bFN1bW1hcml6ZXJDdGwtPnN1bW1hcml6ZXJfcGdwcm9jbm87CisJTFdMb2NrUmVsZWFzZShXQUxT dW1tYXJpemVyTG9jayk7CisKKwlpZiAocGdwcm9jbm8gIT0gSU5WQUxJRF9QR1BST0NOTykKKwkJ U2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW3BncHJvY25vXS5wcm9jTGF0Y2gpOworfQor CisvKgorICogV2FpdCB1bnRpbCBXQUwgc3VtbWFyaXphdGlvbiByZWFjaGVzIHRoZSBnaXZlbiBM U04sIGJ1dCBub3QgbG9uZ2VyIHRoYW4KKyAqIHRoZSBnaXZlbiB0aW1lb3V0LgorICoKKyAqIFRo ZSByZXR1cm4gdmFsdWUgaXMgdGhlIGZpcnN0IHN0aWxsLXVuc3VtbWFyaXplZCBMU04uIElmIGl0 J3MgZ3JlYXRlciB0aGFuCisgKiBvciBlcXVhbCB0byB0aGUgcGFzc2VkIExTTiwgdGhlbiB0aGF0 IExTTiB3YXMgcmVhY2hlZC4gSWYgbm90LCB3ZSB0aW1lZCBvdXQuCisgKgorICogRWl0aGVyIHdh eSwgKnBlbmRpbmdfbHNuIGlzIHNldCB0byB0aGUgdmFsdWUgdGFrZW4gZnJvbSBXYWxTdW1tYXJp emVyQ3RsLgorICovCitYTG9nUmVjUHRyCitXYWl0Rm9yV2FsU3VtbWFyaXphdGlvbihYTG9nUmVj UHRyIGxzbiwgbG9uZyB0aW1lb3V0LCBYTG9nUmVjUHRyICpwZW5kaW5nX2xzbikKK3sKKwlUaW1l c3RhbXBUeiBzdGFydF90aW1lID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCVRpbWVzdGFtcFR6 IGRlYWRsaW5lID0gVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKHN0YXJ0X3RpbWUsIHRpbWVv dXQpOworCVhMb2dSZWNQdHIJc3VtbWFyaXplZF9sc247CisKKwlBc3NlcnQoIVhMb2dSZWNQdHJJ c0ludmFsaWQobHNuKSk7CisJQXNzZXJ0KHRpbWVvdXQgPiAwKTsKKworCXdoaWxlICgxKQorCXsK KwkJVGltZXN0YW1wVHogbm93OworCQlsb25nCQlyZW1haW5pbmdfdGltZW91dDsKKworCQkvKgor CQkgKiBJZiB0aGUgTFNOIHN1bW1hcml6ZWQgb24gZGlzayBoYXMgcmVhY2hlZCB0aGUgdGFyZ2V0 IHZhbHVlLCBzdG9wLgorCQkgKi8KKwkJTFdMb2NrQWNxdWlyZShXQUxTdW1tYXJpemVyTG9jaywg TFdfRVhDTFVTSVZFKTsKKwkJc3VtbWFyaXplZF9sc24gPSBXYWxTdW1tYXJpemVyQ3RsLT5zdW1t YXJpemVkX2xzbjsKKwkJKnBlbmRpbmdfbHNuID0gV2FsU3VtbWFyaXplckN0bC0+cGVuZGluZ19s c247CisJCUxXTG9ja1JlbGVhc2UoV0FMU3VtbWFyaXplckxvY2spOworCQlpZiAoc3VtbWFyaXpl ZF9sc24gPj0gbHNuKQorCQkJYnJlYWs7CisKKwkJLyogVGltZW91dCByZWFjaGVkPyBJZiB5ZXMs IHN0b3AuICovCisJCW5vdyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwkJcmVtYWluaW5nX3Rp bWVvdXQgPSBUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzKG5vdywgZGVhZGxpbmUpOwor CQlpZiAocmVtYWluaW5nX3RpbWVvdXQgPD0gMCkKKwkJCWJyZWFrOworCisJCS8qIFdhaXQgYW5k IHNlZS4gKi8KKwkJQ29uZGl0aW9uVmFyaWFibGVUaW1lZFNsZWVwKCZXYWxTdW1tYXJpemVyQ3Rs LT5zdW1tYXJ5X2ZpbGVfY3YsCisJCQkJCQkJCQlyZW1haW5pbmdfdGltZW91dCwKKwkJCQkJCQkJ CVdBSVRfRVZFTlRfV0FMX1NVTU1BUllfUkVBRFkpOworCX0KKworCXJldHVybiBzdW1tYXJpemVk X2xzbjsKK30KKworLyoKKyAqIEdldCB0aGUgbGF0ZXN0IExTTiB0aGF0IGlzIGVsaWdpYmxlIHRv IGJlIHN1bW1hcml6ZWQsIGFuZCBzZXQgKnRsaSB0byB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgdGlt ZWxpbmUuCisgKi8KK3N0YXRpYyBYTG9nUmVjUHRyCitHZXRMYXRlc3RMU04oVGltZUxpbmVJRCAq dGxpKQoreworCWlmICghUmVjb3ZlcnlJblByb2dyZXNzKCkpCisJeworCQkvKiBEb24ndCBzdW1t YXJpemUgV0FMIGJlZm9yZSBpdCdzIGZsdXNoZWQuICovCisJCXJldHVybiBHZXRGbHVzaFJlY1B0 cih0bGkpOworCX0KKwllbHNlCisJeworCQlYTG9nUmVjUHRyCWZsdXNoX2xzbjsKKwkJVGltZUxp bmVJRAlmbHVzaF90bGk7CisJCVhMb2dSZWNQdHIJcmVwbGF5X2xzbjsKKwkJVGltZUxpbmVJRAly ZXBsYXlfdGxpOworCisJCS8qCisJCSAqIFdoYXQgd2UgcmVhbGx5IHdhbnQgdG8ga25vdyBpcyBo b3cgbXVjaCBXQUwgaGFzIGJlZW4gZmx1c2hlZCB0bworCQkgKiBkaXNrLCBidXQgdGhlIG9ubHkg Zmx1c2ggcG9zaXRpb24gYXZhaWxhYmxlIGlzIHRoZSBvbmUgcHJvdmlkZWQgYnkKKwkJICogdGhl IHdhbHJlY2VpdmVyLCB3aGljaCBtYXkgbm90IGJlIHJ1bm5pbmcsIGJlY2F1c2UgdGhpcyBjb3Vs ZCBiZQorCQkgKiBjcmFzaCByZWNvdmVyeSBvciByZWNvdmVyeSB2aWEgcmVzdG9yZV9jb21tYW5k LiBTbyB1c2UgZWl0aGVyIHRoZQorCQkgKiBXQUwgcmVjZWl2ZXIncyBmbHVzaCBwb3NpdGlvbiBv ciB0aGUgcmVwbGF5IHBvc2l0aW9uLCB3aGljaGV2ZXIgaXMKKwkJICogZnVydGhlciBhaGVhZCwg b24gdGhlIHRoZW9yeSB0aGF0IGlmIHRoZSBXQUwgaGFzIGJlZW4gcmVwbGF5ZWQgdGhlbgorCQkg KiBpdCBtdXN0IGFsc28gaGF2ZSBiZWVuIGZsdXNoZWQgdG8gZGlzay4KKwkJICovCisJCWZsdXNo X2xzbiA9IEdldFdhbFJjdkZsdXNoUmVjUHRyKE5VTEwsICZmbHVzaF90bGkpOworCQlyZXBsYXlf bHNuID0gR2V0WExvZ1JlcGxheVJlY1B0cigmcmVwbGF5X3RsaSk7CisJCWlmIChmbHVzaF9sc24g PiByZXBsYXlfbHNuKQorCQl7CisJCQkqdGxpID0gZmx1c2hfdGxpOworCQkJcmV0dXJuIGZsdXNo X2xzbjsKKwkJfQorCQllbHNlCisJCXsKKwkJCSp0bGkgPSByZXBsYXlfdGxpOworCQkJcmV0dXJu IHJlcGxheV9sc247CisJCX0KKwl9Cit9CisKKy8qCisgKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3Ig bWFpbiBsb29wIG9mIFdBTCBzdW1tYXJpemVyIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkCitI YW5kbGVXYWxTdW1tYXJpemVySW50ZXJydXB0cyh2b2lkKQoreworCWlmIChQcm9jU2lnbmFsQmFy cmllclBlbmRpbmcpCisJCVByb2Nlc3NQcm9jU2lnbmFsQmFycmllcigpOworCisJaWYgKENvbmZp Z1JlbG9hZFBlbmRpbmcpCisJeworCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJCVBy b2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOworCX0KKworCWlmIChTaHV0ZG93blJlcXVlc3RQ ZW5kaW5nIHx8ICFzdW1tYXJpemVfd2FsKQorCXsKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJZXJy bXNnX2ludGVybmFsKCJXQUwgc3VtbWFyaXplciBzaHV0dGluZyBkb3duIikpOworCQlwcm9jX2V4 aXQoMCk7CisJfQorCisJLyogUGVyZm9ybSBsb2dnaW5nIG9mIG1lbW9yeSBjb250ZXh0cyBvZiB0 aGlzIHByb2Nlc3MgKi8KKwlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCisJCVByb2Nlc3NM b2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7Cit9CisKKy8qCisgKiBTdW1tYXJpemUgYSByYW5n ZSBvZiBXQUwgcmVjb3JkcyBvbiBhIHNpbmdsZSB0aW1lbGluZS4KKyAqCisgKiAndGxpJyBpcyB0 aGUgdGltZWxpbmUgdG8gYmUgc3VtbWFyaXplZC4KKyAqCisgKiAnc3RhcnRfbHNuJyBpcyB0aGUg cG9pbnQgYXQgd2hpY2ggd2Ugc2hvdWxkIHN0YXJ0IHN1bW1hcml6aW5nLiBJZiB0aGlzCisgKiB2 YWx1ZSBjb21lcyBmcm9tIHRoZSBlbmQgTFNOIG9mIHRoZSBwcmV2aW91cyByZWNvcmQgYXMgcmV0 dXJuZWQgYnkgdGhlCisgKiB4bG9ncmFkZXIgbWFjaGluZXJ5LCAnZXhhY3QnIHNob3VsZCBiZSB0 cnVlOyBvdGhlcndpc2UsICdleGFjdCcgc2hvdWxkCisgKiBiZSBmYWxzZSwgYW5kIHRoaXMgZnVu Y3Rpb24gd2lsbCBzZWFyY2ggZm9yd2FyZCBmb3IgdGhlIHN0YXJ0IG9mIGEgdmFsaWQKKyAqIFdB TCByZWNvcmQuCisgKgorICogJ3N3aXRjaF9sc24nIGlzIHRoZSBwb2ludCBhdCB3aGljaCB3ZSBz aG91bGQgc3dpdGNoIHRvIGEgbGF0ZXIgdGltZWxpbmUsCisgKiBpZiB3ZSdyZSBzdW1tYXJpemlu ZyBhIGhpc3RvcmljIHRpbWVsaW5lLgorICoKKyAqICdtYXhpbXVtX2xzbicgaWRlbnRpZmllcyB0 aGUgcG9pbnQgYmV5b25kIHdoaWNoIHdlIGNhbid0IGNvdW50IG9uIGJlaW5nCisgKiBhYmxlIHRv IHJlYWQgYW55IG1vcmUgV0FMLiBJdCBzaG91bGQgYmUgdGhlIHN3aXRjaCBwb2ludCB3aGVuIHJl YWRpbmcgYQorICogaGlzdG9yaWMgdGltZWxpbmUsIG9yIHRoZSBtb3N0LXJlY2VudGx5LW1lYXN1 cmVkIGVuZCBvZiBXQUwgd2hlbiByZWFkaW5nCisgKiB0aGUgY3VycmVudCB0aW1lbGluZS4KKyAq CisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBMU04gYXQgd2hpY2ggdGhlIFdBTCBzdW1tYXJ5 IGFjdHVhbGx5IGVuZHMuIE1vc3QKKyAqIG9mdGVuLCBhIHN1bW1hcnkgZmlsZSBlbmRzIGJlY2F1 c2Ugd2Ugbm90aWNlIHRoYXQgYSBjaGVja3BvaW50IGhhcworICogb2NjdXJyZWQgYW5kIHJlYWNo IHRoZSByZWRvIHBvaW50ZXIgb2YgdGhhdCBjaGVja3BvaW50LCBidXQgc29tZXRpbWVzCisgKiB3 ZSBzdG9wIGZvciBvdGhlciByZWFzb25zLCBzdWNoIGFzIGEgdGltZWxpbmUgc3dpdGNoLgorICov CitzdGF0aWMgWExvZ1JlY1B0cgorU3VtbWFyaXplV0FMKFRpbWVMaW5lSUQgdGxpLCBYTG9nUmVj UHRyIHN0YXJ0X2xzbiwgYm9vbCBleGFjdCwKKwkJCSBYTG9nUmVjUHRyIHN3aXRjaF9sc24sIFhM b2dSZWNQdHIgbWF4aW11bV9sc24pCit7CisJU3VtbWFyaXplclJlYWRMb2NhbFhMb2dQcml2YXRl ICpwcml2YXRlX2RhdGE7CisJWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyOworCVhMb2dSZWNQ dHIJc3VtbWFyeV9zdGFydF9sc247CisJWExvZ1JlY1B0cglzdW1tYXJ5X2VuZF9sc24gPSBzd2l0 Y2hfbHNuOworCWNoYXIJCXRlbXBfcGF0aFtNQVhQR1BBVEhdOworCWNoYXIJCWZpbmFsX3BhdGhb TUFYUEdQQVRIXTsKKwlXYWxTdW1tYXJ5SU8gaW87CisJQmxvY2tSZWZUYWJsZSAqYnJ0YWIgPSBD cmVhdGVFbXB0eUJsb2NrUmVmVGFibGUoKTsKKworCS8qIEluaXRpYWxpemUgcHJpdmF0ZSBkYXRh IGZvciB4bG9ncmVhZGVyLiAqLworCXByaXZhdGVfZGF0YSA9IChTdW1tYXJpemVyUmVhZExvY2Fs WExvZ1ByaXZhdGUgKikKKwkJcGFsbG9jMChzaXplb2YoU3VtbWFyaXplclJlYWRMb2NhbFhMb2dQ cml2YXRlKSk7CisJcHJpdmF0ZV9kYXRhLT50bGkgPSB0bGk7CisJcHJpdmF0ZV9kYXRhLT5oaXN0 b3JpYyA9ICFYTG9nUmVjUHRySXNJbnZhbGlkKHN3aXRjaF9sc24pOworCXByaXZhdGVfZGF0YS0+ cmVhZF91cHRvID0gbWF4aW11bV9sc247CisKKwkvKiBDcmVhdGUgeGxvZ3JlYWRlci4gKi8KKwl4 bG9ncmVhZGVyID0gWExvZ1JlYWRlckFsbG9jYXRlKHdhbF9zZWdtZW50X3NpemUsIE5VTEwsCisJ CQkJCQkJCQlYTF9ST1VUSU5FKC5wYWdlX3JlYWQgPSAmc3VtbWFyaXplcl9yZWFkX2xvY2FsX3hs b2dfcGFnZSwKKwkJCQkJCQkJCQkJICAgLnNlZ21lbnRfb3BlbiA9ICZ3YWxfc2VnbWVudF9vcGVu LAorCQkJCQkJCQkJCQkgICAuc2VnbWVudF9jbG9zZSA9ICZ3YWxfc2VnbWVudF9jbG9zZSksCisJ CQkJCQkJCQlwcml2YXRlX2RhdGEpOworCWlmICh4bG9ncmVhZGVyID09IE5VTEwpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkgZXJy bXNnKCJvdXQgb2YgbWVtb3J5IiksCisJCQkJIGVycmRldGFpbCgiRmFpbGVkIHdoaWxlIGFsbG9j YXRpbmcgYSBXQUwgcmVhZGluZyBwcm9jZXNzb3IuIikpKTsKKworCS8qCisJICogV2hlbiBleGFj dCA9IGZhbHNlLCB3ZSdyZSBzdGFydGluZyBmcm9tIGFuIGFyYml0cmFyeSBwb2ludCBpbiB0aGUg V0FMCisJICogYW5kIG11c3Qgc2VhcmNoIGZvcndhcmQgZm9yIHRoZSBzdGFydCBvZiB0aGUgbmV4 dCByZWNvcmQuCisJICoKKwkgKiBXaGVuIGV4YWN0ID0gdHJ1ZSwgc3RhcnRfbHNuIHNob3VsZCBi ZSBlaXRoZXIgdGhlIExTTiB3aGVyZSBhIHJlY29yZAorCSAqIGJlZ2lucywgb3IgdGhlIExTTiBv ZiBhIHBhZ2Ugd2hlcmUgdGhlIHBhZ2UgaGVhZGVyIGlzIGltbWVkaWF0ZWx5CisJICogZm9sbG93 ZWQgYnkgdGhlIHN0YXJ0IG9mIGEgbmV3IHJlY29yZC4gWExvZ0JlZ2luUmVhZCBzaG91bGQgdG9s ZXJhdGUKKwkgKiBlaXRoZXIgY2FzZS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gYWxsb3cgZm9yIGJv dGggY2FzZXMgYmVjYXVzZSB0aGUgYmVoYXZpb3Igb2YgeGxvZ3JlYWRlcgorCSAqIHZhcmllcy4g V2hlbiBhIHJlY29yZCBzcGFucyB0d28gb3IgbW9yZSB4bG9nIHBhZ2VzLCB0aGUgZW5kaW5nIExT TgorCSAqIHJlcG9ydGVkIGJ5IHhsb2dyZWFkZXIgd2lsbCBiZSB0aGUgc3RhcnRpbmcgTFNOIG9m IHRoZSBmb2xsb3dpbmcKKwkgKiByZWNvcmQsIGJ1dCB3aGVuIGFuIHhsb2cgcGFnZSBib3VuZGFy eSBmYWxscyBiZXR3ZWVuIHR3byByZWNvcmRzLCB0aGUKKwkgKiBlbmQgTFNOIGZvciB0aGUgZmly c3Qgd2lsbCBiZSByZXBvcnRlZCBhcyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUKKwkgKiBmb2xsb3dp bmcgcGFnZS4gV2UgY2FuJ3Qga25vdyB1bnRpbCB3ZSByZWFkIHRoYXQgcGFnZSBob3cgbGFyZ2Ug dGhlCisJICogaGVhZGVyIHdpbGwgYmUsIGJ1dCB3ZSdsbCBoYXZlIHRvIHNraXAgb3ZlciBpdCB0 byBmaW5kIHRoZSBuZXh0IHJlY29yZC4KKwkgKi8KKwlpZiAoZXhhY3QpCisJeworCQkvKgorCQkg KiBFdmVuIGlmIHN0YXJ0X2xzbiBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgcGFnZSByYXRoZXIgdGhh biB0aGUKKwkJICogYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCByZWNvcmQgb24gdGhhdCBwYWdlLCB3 ZSBzaG91bGQgc3RpbGwgdXNlIGl0CisJCSAqIGFzIHRoZSBzdGFydCBMU04gZm9yIHRoZSBzdW1t YXJ5IGZpbGUuIFRoYXQncyBiZWNhdXNlIHdlIGRldGVjdAorCQkgKiBtaXNzaW5nIHN1bW1hcnkg ZmlsZXMgYnkgbG9va2luZyBmb3IgY2FzZXMgd2hlcmUgdGhlIGVuZCBMU04gb2Ygb25lCisJCSAq IGZpbGUgaXMgbGVzcyB0aGFuIHRoZSBzdGFydCBMU04gb2YgdGhlIG5leHQgZmlsZS4gV2hlbiBv bmx5IGEgcGFnZQorCQkgKiBoZWFkZXIgaXMgc2tpcHBlZCwgbm90aGluZyBoYXMgYmVlbiBtaXNz ZWQuCisJCSAqLworCQlYTG9nQmVnaW5SZWFkKHhsb2dyZWFkZXIsIHN0YXJ0X2xzbik7CisJCXN1 bW1hcnlfc3RhcnRfbHNuID0gc3RhcnRfbHNuOworCX0KKwllbHNlCisJeworCQlzdW1tYXJ5X3N0 YXJ0X2xzbiA9IFhMb2dGaW5kTmV4dFJlY29yZCh4bG9ncmVhZGVyLCBzdGFydF9sc24pOworCQlp ZiAoWExvZ1JlY1B0cklzSW52YWxpZChzdW1tYXJ5X3N0YXJ0X2xzbikpCisJCXsKKwkJCS8qCisJ CQkgKiBJZiB3ZSBoaXQgZW5kLW9mLVdBTCB3aGlsZSB0cnlpbmcgdG8gZmluZCB0aGUgbmV4dCB2 YWxpZAorCQkJICogcmVjb3JkLCB3ZSBtdXN0IGJlIG9uIGEgaGlzdG9yaWMgdGltZWxpbmUgdGhh dCBoYXMgbm8gdmFsaWQKKwkJCSAqIHJlY29yZHMgdGhhdCBiZWdpbiBhZnRlciBzdGFydF9sc24g YW5kIGJlZm9yZSBlbmQgb2YgV0FMLgorCQkJICovCisJCQlpZiAocHJpdmF0ZV9kYXRhLT5lbmRf b2Zfd2FsKQorCQkJeworCQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJZXJybXNnX2ludGVybmFs KCJjb3VsZCBub3QgcmVhZCBXQUwgZnJvbSB0aW1lbGluZSAldSBhdCAlWC8lWDogZW5kIG9mIFdB TCBhdCAlWC8lWCIsCisJCQkJCQkJCQkJdGxpLAorCQkJCQkJCQkJCUxTTl9GT1JNQVRfQVJHUyhz dGFydF9sc24pLAorCQkJCQkJCQkJCUxTTl9GT1JNQVRfQVJHUyhwcml2YXRlX2RhdGEtPnJlYWRf dXB0bykpKTsKKworCQkJCS8qCisJCQkJICogVGhlIHRpbWVsaW5lIGVuZHMgYXQgb3IgYWZ0ZXIg c3RhcnRfbHNuLCB3aXRob3V0IGNvbnRhaW5pbmcKKwkJCQkgKiBhbnkgcmVjb3Jkcy4gVGh1cywg d2UgbXVzdCBtYWtlIHN1cmUgdGhlIG1haW4gbG9vcCBkb2VzIG5vdAorCQkJCSAqIGl0ZXJhdGUu IElmIHN0YXJ0X2xzbiBpcyB0aGUgZW5kIG9mIHRoZSB0aW1lbGluZSwgdGhlbiB3ZQorCQkJCSAq IHdvbid0IGFjdHVhbGx5IGVtaXQgYW4gZW1wdHkgc3VtbWFyeSBmaWxlLCBidXQgb3RoZXJ3aXNl LAorCQkJCSAqIHdlIG11c3QsIHRvIGNhcHR1cmUgdGhlIGZhY3QgdGhhdCB0aGUgTFNOIHJhbmdl IGluIHF1ZXN0aW9uCisJCQkJICogY29udGFpbnMgbm8gaW50ZXJlc3RpbmcgV0FMIHJlY29yZHMu CisJCQkJICovCisJCQkJc3VtbWFyeV9zdGFydF9sc24gPSBzdGFydF9sc247CisJCQkJc3VtbWFy eV9lbmRfbHNuID0gcHJpdmF0ZV9kYXRhLT5yZWFkX3VwdG87CisJCQkJc3dpdGNoX2xzbiA9IHhs b2dyZWFkZXItPkVuZFJlY1B0cjsKKwkJCX0KKwkJCWVsc2UKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycm1zZygiY291bGQgbm90IGZpbmQgYSB2YWxpZCByZWNvcmQgYWZ0ZXIgJVgvJVgi LAorCQkJCQkJCQlMU05fRk9STUFUX0FSR1Moc3RhcnRfbHNuKSkpKTsKKwkJfQorCisJCS8qIFdl IHNob3VsZG4ndCBnbyBiYWNrd2FyZC4gKi8KKwkJQXNzZXJ0KHN1bW1hcnlfc3RhcnRfbHNuID49 IHN0YXJ0X2xzbik7CisJfQorCisJLyoKKwkgKiBNYWluIGxvb3A6IHJlYWQgeGxvZyByZWNvcmRz IG9uZSBieSBvbmUuCisJICovCisJd2hpbGUgKDEpCisJeworCQlpbnQJCQlibG9ja19pZDsKKwkJ Y2hhcgkgICAqZXJyb3Jtc2c7CisJCVhMb2dSZWNvcmQgKnJlY29yZDsKKwkJYm9vbAkJc3RvcF9y ZXF1ZXN0ZWQgPSBmYWxzZTsKKworCQlIYW5kbGVXYWxTdW1tYXJpemVySW50ZXJydXB0cygpOwor CisJCS8qIFdlIHNob3VsZG4ndCBnbyBiYWNrd2FyZC4gKi8KKwkJQXNzZXJ0KHN1bW1hcnlfc3Rh cnRfbHNuIDw9IHhsb2dyZWFkZXItPkVuZFJlY1B0cik7CisKKwkJLyogTm93IHJlYWQgdGhlIG5l eHQgcmVjb3JkLiAqLworCQlyZWNvcmQgPSBYTG9nUmVhZFJlY29yZCh4bG9ncmVhZGVyLCAmZXJy b3Jtc2cpOworCQlpZiAocmVjb3JkID09IE5VTEwpCisJCXsKKwkJCWlmIChwcml2YXRlX2RhdGEt PmVuZF9vZl93YWwpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUaGlzIHRpbWVsaW5lIG11c3QgYmUg aGlzdG9yaWMgYW5kIG11c3QgZW5kIGJlZm9yZSB3ZSB3ZXJlCisJCQkJICogYWJsZSB0byByZWFk IGEgY29tcGxldGUgcmVjb3JkLgorCQkJCSAqLworCQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJ ZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3QgcmVhZCBXQUwgZnJvbSB0aW1lbGluZSAlZCBhdCAl WC8lWDogZW5kIG9mIFdBTCBhdCAlWC8lWCIsCisJCQkJCQkJCQkJdGxpLAorCQkJCQkJCQkJCUxT Tl9GT1JNQVRfQVJHUyh4bG9ncmVhZGVyLT5FbmRSZWNQdHIpLAorCQkJCQkJCQkJCUxTTl9GT1JN QVRfQVJHUyhwcml2YXRlX2RhdGEtPnJlYWRfdXB0bykpKTsKKwkJCQkvKiBTdW1tYXJ5IGVuZHMg YXQgZW5kIG9mIFdBTC4gKi8KKwkJCQlzdW1tYXJ5X2VuZF9sc24gPSBwcml2YXRlX2RhdGEtPnJl YWRfdXB0bzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChlcnJvcm1zZykKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCQkgZXJybXNn KCJjb3VsZCBub3QgcmVhZCBXQUwgZnJvbSB0aW1lbGluZSAldSBhdCAlWC8lWDogJXMiLAorCQkJ CQkJCQl0bGksIExTTl9GT1JNQVRfQVJHUyh4bG9ncmVhZGVyLT5FbmRSZWNQdHIpLAorCQkJCQkJ CQllcnJvcm1zZykpKTsKKwkJCWVsc2UKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBXQUwg ZnJvbSB0aW1lbGluZSAldSBhdCAlWC8lWCIsCisJCQkJCQkJCXRsaSwgTFNOX0ZPUk1BVF9BUkdT KHhsb2dyZWFkZXItPkVuZFJlY1B0cikpKSk7CisJCX0KKworCQkvKiBXZSBzaG91bGRuJ3QgZ28g YmFja3dhcmQuICovCisJCUFzc2VydChzdW1tYXJ5X3N0YXJ0X2xzbiA8PSB4bG9ncmVhZGVyLT5F bmRSZWNQdHIpOworCisJCWlmICghWExvZ1JlY1B0cklzSW52YWxpZChzd2l0Y2hfbHNuKSAmJgor CQkJeGxvZ3JlYWRlci0+UmVhZFJlY1B0ciA+PSBzd2l0Y2hfbHNuKQorCQl7CisJCQkvKgorCQkJ ICogV29vcHMhIFdlJ3ZlIHJlYWQgYSByZWNvcmQgdGhhdCAqc3RhcnRzKiBhZnRlciB0aGUgc3dp dGNoIExTTiwKKwkJCSAqIGNvbnRyYXJ5IHRvIG91ciBnb2FsIG9mIHJlYWRpbmcgb25seSB1bnRp bCB3ZSBoaXQgdGhlIGZpcnN0CisJCQkgKiByZWNvcmQgdGhhdCBlbmRzIGF0IG9yIGFmdGVyIHRo ZSBzd2l0Y2ggTFNOLiBQcmV0ZW5kIHdlIGRpZG4ndAorCQkJICogcmVhZCBpdCBhZnRlciBhbGwg YnkgYmFpbGluZyBvdXQgb2YgdGhpcyBsb29wIHJpZ2h0IGhlcmUsCisJCQkgKiBiZWZvcmUgd2Ug ZG8gYW55dGhpbmcgd2l0aCB0aGlzIHJlY29yZC4KKwkJCSAqCisJCQkgKiBUaGlzIGNhbiBoYXBw ZW4gYmVjYXVzZSB0aGUgbGFzdCByZWNvcmQgYmVmb3JlIHRoZSBzd2l0Y2ggTFNOCisJCQkgKiBt aWdodCBiZSBjb250aW51ZWQgYWNyb3NzIG11bHRpcGxlIHBhZ2VzLCBhbmQgdGhlbiB3ZSBtaWdo dAorCQkJICogY29tZSB0byBhIHBhZ2Ugd2l0aCBYTFBfRklSU1RfSVNfT1ZFUldSSVRFX0NPTlRS RUNPUkQgc2V0LiBJbgorCQkJICogdGhhdCBjYXNlLCB0aGUgcmVjb3JkIHRoYXQgd2FzIGNvbnRp bnVlZCBhY3Jvc3MgbXVsdGlwbGUgcGFnZXMKKwkJCSAqIGlzIGluY29tcGxldGUgYW5kIHdpbGwg YmUgZGlzcmVnYXJkZWQsIGFuZCB0aGUgcmVhZCB3aWxsCisJCQkgKiByZXN0YXJ0IGZyb20gdGhl IGJlZ2lubmluZyBvZiB0aGUgcGFnZSB0aGF0IGlzIGZsYWdnZWQKKwkJCSAqIFhMUF9GSVJTVF9J U19PVkVSV1JJVEVfQ09OVFJFQ09SRC4KKwkJCSAqCisJCQkgKiBJZiB0aGlzIGNhc2Ugb2NjdXJz LCB3ZSBjYW4gZmFpcmx5IHNheSB0aGF0IHRoZSBjdXJyZW50IHN1bW1hcnkKKwkJCSAqIGZpbGUg ZW5kcyBhdCB0aGUgc3dpdGNoIExTTiBleGFjdGx5LiBUaGUgZmlyc3QgcmVjb3JkIG9uIHRoZQor CQkJICogcGFnZSBtYXJrZWQgWExQX0ZJUlNUX0lTX09WRVJXUklURV9DT05UUkVDT1JEIHdpbGwg YmUKKwkJCSAqIGRpc2NvdmVyZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBuZXh0IHN1bW1hcnkgZmls ZS4KKwkJCSAqLworCQkJc3VtbWFyeV9lbmRfbHNuID0gc3dpdGNoX2xzbjsKKwkJCWJyZWFrOwor CQl9CisKKwkJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgcGFydGljdWxhciB0eXBlcyBvZiBXQUwg cmVjb3Jkcy4gKi8KKwkJc3dpdGNoIChYTG9nUmVjR2V0Um1pZCh4bG9ncmVhZGVyKSkKKwkJewor CQkJY2FzZSBSTV9TTUdSX0lEOgorCQkJCVN1bW1hcml6ZVNtZ3JSZWNvcmQoeGxvZ3JlYWRlciwg YnJ0YWIpOworCQkJCWJyZWFrOworCQkJY2FzZSBSTV9YQUNUX0lEOgorCQkJCVN1bW1hcml6ZVhh Y3RSZWNvcmQoeGxvZ3JlYWRlciwgYnJ0YWIpOworCQkJCWJyZWFrOworCQkJY2FzZSBSTV9YTE9H X0lEOgorCQkJCXN0b3BfcmVxdWVzdGVkID0gU3VtbWFyaXplWGxvZ1JlY29yZCh4bG9ncmVhZGVy KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkg KiBJZiB3ZSd2ZSBiZWVuIHRvbGQgdGhhdCBpdCdzIHRpbWUgdG8gZW5kIHRoaXMgV0FMIHN1bW1h cnkgZmlsZSwgZG8KKwkJICogc28uIEFzIGFuIGV4Y2VwdGlvbiwgaWYgdGhlcmUncyBub3RoaW5n IGluY2x1ZGVkIGluIHRoaXMgV0FMCisJCSAqIHN1bW1hcnkgZmlsZSB5ZXQsIHRoZW4gc3RvcHBp bmcgZG9lc24ndCBtYWtlIGFueSBzZW5zZSwgYW5kIHdlCisJCSAqIHNob3VsZCB3YWl0IHVudGls IHRoZSBuZXh0IHN0b3AgcG9pbnQgaW5zdGVhZC4KKwkJICovCisJCWlmIChzdG9wX3JlcXVlc3Rl ZCAmJiB4bG9ncmVhZGVyLT5SZWFkUmVjUHRyID4gc3VtbWFyeV9zdGFydF9sc24pCisJCXsKKwkJ CXN1bW1hcnlfZW5kX2xzbiA9IHhsb2dyZWFkZXItPlJlYWRSZWNQdHI7CisJCQlicmVhazsKKwkJ fQorCisJCS8qIEZlZWQgYmxvY2sgcmVmZXJlbmNlcyBmcm9tIHhsb2cgcmVjb3JkIHRvIGJsb2Nr IHJlZmVyZW5jZSB0YWJsZS4gKi8KKwkJZm9yIChibG9ja19pZCA9IDA7IGJsb2NrX2lkIDw9IFhM b2dSZWNNYXhCbG9ja0lkKHhsb2dyZWFkZXIpOworCQkJIGJsb2NrX2lkKyspCisJCXsKKwkJCVJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yOworCQkJRm9ya051bWJlcglmb3JrbnVtOworCQkJQmxvY2tO dW1iZXIgYmxvY2tudW07CisKKwkJCWlmICghWExvZ1JlY0dldEJsb2NrVGFnRXh0ZW5kZWQoeGxv Z3JlYWRlciwgYmxvY2tfaWQsICZybG9jYXRvciwKKwkJCQkJCQkJCQkJJmZvcmtudW0sICZibG9j a251bSwgTlVMTCkpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBBcyB3ZSBkbyBlbHNl d2hlcmUsIGlnbm9yZSB0aGUgRlNNIGZvcmssIGJlY2F1c2UgaXQncyBub3QgZnVsbHkKKwkJCSAq IFdBTC1sb2dnZWQuCisJCQkgKi8KKwkJCWlmIChmb3JrbnVtICE9IEZTTV9GT1JLTlVNKQorCQkJ CUJsb2NrUmVmVGFibGVNYXJrQmxvY2tNb2RpZmllZChicnRhYiwgJnJsb2NhdG9yLCBmb3JrbnVt LAorCQkJCQkJCQkJCQkgICBibG9ja251bSk7CisJCX0KKworCQkvKiBVcGRhdGUgb3VyIG5vdGlv biBvZiB3aGVyZSB0aGlzIHN1bW1hcnkgZmlsZSBlbmRzLiAqLworCQlzdW1tYXJ5X2VuZF9sc24g PSB4bG9ncmVhZGVyLT5FbmRSZWNQdHI7CisKKwkJLyogQWxzbyB1cGRhdGUgc2hhcmVkIG1lbW9y eS4gKi8KKwkJTFdMb2NrQWNxdWlyZShXQUxTdW1tYXJpemVyTG9jaywgTFdfRVhDTFVTSVZFKTsK KwkJQXNzZXJ0KHN1bW1hcnlfZW5kX2xzbiA+PSBXYWxTdW1tYXJpemVyQ3RsLT5wZW5kaW5nX2xz bik7CisJCUFzc2VydChzdW1tYXJ5X2VuZF9sc24gPj0gV2FsU3VtbWFyaXplckN0bC0+c3VtbWFy aXplZF9sc24pOworCQlXYWxTdW1tYXJpemVyQ3RsLT5wZW5kaW5nX2xzbiA9IHN1bW1hcnlfZW5k X2xzbjsKKwkJTFdMb2NrUmVsZWFzZShXQUxTdW1tYXJpemVyTG9jayk7CisKKwkJLyoKKwkJICog SWYgd2UgaGF2ZSBhIHN3aXRjaCBMU04gYW5kIGhhdmUgcmVhY2hlZCBpdCwgc3RvcCBiZWZvcmUg cmVhZGluZworCQkgKiB0aGUgbmV4dCByZWNvcmQuCisJCSAqLworCQlpZiAoIVhMb2dSZWNQdHJJ c0ludmFsaWQoc3dpdGNoX2xzbikgJiYKKwkJCXhsb2dyZWFkZXItPkVuZFJlY1B0ciA+PSBzd2l0 Y2hfbHNuKQorCQkJYnJlYWs7CisJfQorCisJLyogRGVzdHJveSB4bG9ncmVhZGVyLiAqLworCXBm cmVlKHhsb2dyZWFkZXItPnByaXZhdGVfZGF0YSk7CisJWExvZ1JlYWRlckZyZWUoeGxvZ3JlYWRl cik7CisKKwkvKgorCSAqIElmIGEgdGltZWxpbmUgc3dpdGNoIG9jY3Vycywgd2UgbWF5IGZhaWwg dG8gbWFrZSBhbnkgcHJvZ3Jlc3MgYXQgYWxsCisJICogYmVmb3JlIGV4aXRpbmcgdGhlIGxvb3Ag YWJvdmUuIElmIHRoYXQgaGFwcGVucywgd2UgZG9uJ3Qgd3JpdGUgYSBXQUwKKwkgKiBzdW1tYXJ5 IGZpbGUgYXQgYWxsLgorCSAqLworCWlmIChzdW1tYXJ5X2VuZF9sc24gPiBzdW1tYXJ5X3N0YXJ0 X2xzbikKKwl7CisJCS8qIEdlbmVyYXRlIHRlbXBvcmFyeSBhbmQgZmluYWwgcGF0aCBuYW1lLiAq LworCQlzbnByaW50Zih0ZW1wX3BhdGgsIE1BWFBHUEFUSCwKKwkJCQkgWExPR0RJUiAiL3N1bW1h cmllcy90ZW1wLnN1bW1hcnkiKTsKKwkJc25wcmludGYoZmluYWxfcGF0aCwgTUFYUEdQQVRILAor CQkJCSBYTE9HRElSICIvc3VtbWFyaWVzLyUwOFglMDhYJTA4WCUwOFglMDhYLnN1bW1hcnkiLAor CQkJCSB0bGksCisJCQkJIExTTl9GT1JNQVRfQVJHUyhzdW1tYXJ5X3N0YXJ0X2xzbiksCisJCQkJ IExTTl9GT1JNQVRfQVJHUyhzdW1tYXJ5X2VuZF9sc24pKTsKKworCQkvKiBPcGVuIHRoZSB0ZW1w b3JhcnkgZmlsZSBmb3Igd3JpdGluZy4gKi8KKwkJaW8uZmlsZXBvcyA9IDA7CisJCWlvLmZpbGUg PSBQYXRoTmFtZU9wZW5GaWxlKHRlbXBfcGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVO Qyk7CisJCWlmIChpby5maWxlIDwgMCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUg XCIlc1wiOiAlbSIsIHRlbXBfcGF0aCkpKTsKKworCQkvKiBXcml0ZSB0aGUgZGF0YS4gKi8KKwkJ V3JpdGVCbG9ja1JlZlRhYmxlKGJydGFiLCBXcml0ZVdhbFN1bW1hcnksICZpbyk7CisKKwkJLyog Q2xvc2UgdGVtcG9yYXJ5IGZpbGUgYW5kIHNodXQgZG93biB4bG9ncmVhZGVyLiAqLworCQlGaWxl Q2xvc2UoaW8uZmlsZSk7CisKKwkJLyogVGVsbCB0aGUgdXNlciB3aGF0IHdlIGRpZC4gKi8KKwkJ ZXJlcG9ydChERUJVRzEsCisJCQkJZXJybXNnKCJzdW1tYXJpemVkIFdBTCBvbiBUTEkgJWQgZnJv bSAlWC8lWCB0byAlWC8lWCIsCisJCQkJCSAgIHRsaSwKKwkJCQkJICAgTFNOX0ZPUk1BVF9BUkdT KHN1bW1hcnlfc3RhcnRfbHNuKSwKKwkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKHN1bW1hcnlfZW5k X2xzbikpKTsKKworCQkvKiBEdXJhYmx5IHJlbmFtZSB0aGUgbmV3IHN1bW1hcnkgaW50byBwbGFj ZS4gKi8KKwkJZHVyYWJsZV9yZW5hbWUodGVtcF9wYXRoLCBmaW5hbF9wYXRoLCBFUlJPUik7CisJ fQorCisJcmV0dXJuIHN1bW1hcnlfZW5kX2xzbjsKK30KKworLyoKKyAqIFNwZWNpYWwgaGFuZGxp bmcgZm9yIFdBTCByZWNvcmRzIHdpdGggUk1fU01HUl9JRC4KKyAqLworc3RhdGljIHZvaWQKK1N1 bW1hcml6ZVNtZ3JSZWNvcmQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBCbG9ja1JlZlRh YmxlICpicnRhYikKK3sKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHhsb2dyZWFkZXIp ICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX1NNR1JfQ1JFQVRFKQorCXsK KwkJeGxfc21ncl9jcmVhdGUgKnhscmVjOworCisJCS8qCisJCSAqIElmIGEgbmV3IHJlbGF0aW9u IGZvcmsgaXMgY3JlYXRlZCBvbiBkaXNrLCB0aGVyZSBpcyBubyBwb2ludAorCQkgKiB0cmFja2lu ZyBhbnl0aGluZyBhYm91dCB3aGljaCBibG9ja3MgaGF2ZSBiZWVuIG1vZGlmaWVkLCBiZWNhdXNl CisJCSAqIHRoZSB3aG9sZSB0aGluZyB3aWxsIGJlIG5ldy4gSGVuY2UsIHNldCB0aGUgbGltaXQg YmxvY2sgZm9yIHRoaXMKKwkJICogZm9yayB0byAwLgorCQkgKgorCQkgKiBJZ25vcmUgdGhlIEZT TSBmb3JrLCB3aGljaCBpcyBub3QgZnVsbHkgV0FMLWxvZ2dlZC4KKwkJICovCisJCXhscmVjID0g KHhsX3NtZ3JfY3JlYXRlICopIFhMb2dSZWNHZXREYXRhKHhsb2dyZWFkZXIpOworCisJCWlmICh4 bHJlYy0+Zm9ya051bSAhPSBGU01fRk9SS05VTSkKKwkJCUJsb2NrUmVmVGFibGVTZXRMaW1pdEJs b2NrKGJydGFiLCAmeGxyZWMtPnJsb2NhdG9yLAorCQkJCQkJCQkJICAgeGxyZWMtPmZvcmtOdW0s IDApOworCX0KKwllbHNlIGlmIChpbmZvID09IFhMT0dfU01HUl9UUlVOQ0FURSkKKwl7CisJCXhs X3NtZ3JfdHJ1bmNhdGUgKnhscmVjOworCisJCXhscmVjID0gKHhsX3NtZ3JfdHJ1bmNhdGUgKikg WExvZ1JlY0dldERhdGEoeGxvZ3JlYWRlcik7CisKKwkJLyoKKwkJICogSWYgYSByZWxhdGlvbiBm b3JrIGlzIHRydW5jYXRlZCBvbiBkaXNrLCB0aGVyZSBpcyBubyBwb2ludCBpbgorCQkgKiB0cmFj a2luZyBhbnl0aGluZyBhYm91dCBibG9jayBtb2RpZmljYXRpb25zIGJleW9uZCB0aGUgdHJ1bmNh dGlvbgorCQkgKiBwb2ludC4KKwkJICoKKwkJICogV2UgaWdub3JlIFNNR1JfVFJVTkNBVEVfRlNN IGhlcmUgYmVjYXVzZSB0aGUgRlNNIGlzbid0IGZ1bGx5CisJCSAqIFdBTC1sb2dnZWQgYW5kIHRo dXMgd2UgY2FuJ3QgdHJhY2sgbW9kaWZpZWQgYmxvY2tzIGZvciBpdCBhbnl3YXkuCisJCSAqLwor CQlpZiAoKHhscmVjLT5mbGFncyAmIFNNR1JfVFJVTkNBVEVfSEVBUCkgIT0gMCkKKwkJCUJsb2Nr UmVmVGFibGVTZXRMaW1pdEJsb2NrKGJydGFiLCAmeGxyZWMtPnJsb2NhdG9yLAorCQkJCQkJCQkJ ICAgTUFJTl9GT1JLTlVNLCB4bHJlYy0+Ymxrbm8pOworCQlpZiAoKHhscmVjLT5mbGFncyAmIFNN R1JfVFJVTkNBVEVfVk0pICE9IDApCisJCQlCbG9ja1JlZlRhYmxlU2V0TGltaXRCbG9jayhicnRh YiwgJnhscmVjLT5ybG9jYXRvciwKKwkJCQkJCQkJCSAgIFZJU0lCSUxJVFlNQVBfRk9SS05VTSwg eGxyZWMtPmJsa25vKTsKKwl9Cit9CisKKy8qCisgKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBXQUwg cmVjb2RzIHdpdGggUk1fWEFDVF9JRC4KKyAqLworc3RhdGljIHZvaWQKK1N1bW1hcml6ZVhhY3RS ZWNvcmQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLCBCbG9ja1JlZlRhYmxlICpicnRhYikK K3sKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHhsb2dyZWFkZXIpICYgflhMUl9JTkZP X01BU0s7CisJdWludDgJCXhhY3RfaW5mbyA9IGluZm8gJiBYTE9HX1hBQ1RfT1BNQVNLOworCisJ aWYgKHhhY3RfaW5mbyA9PSBYTE9HX1hBQ1RfQ09NTUlUIHx8CisJCXhhY3RfaW5mbyA9PSBYTE9H X1hBQ1RfQ09NTUlUX1BSRVBBUkVEKQorCXsKKwkJeGxfeGFjdF9jb21taXQgKnhscmVjID0gKHhs X3hhY3RfY29tbWl0ICopIFhMb2dSZWNHZXREYXRhKHhsb2dyZWFkZXIpOworCQl4bF94YWN0X3Bh cnNlZF9jb21taXQgcGFyc2VkOworCQlpbnQJCQlpOworCisJCS8qCisJCSAqIERvbid0IHRyYWNr IG1vZGlmaWVkIGJsb2NrcyBmb3IgYW55IHJlbGF0aW9ucyB0aGF0IHdlcmUgcmVtb3ZlZCBvbgor CQkgKiBjb21taXQuCisJCSAqLworCQlQYXJzZUNvbW1pdFJlY29yZChYTG9nUmVjR2V0SW5mbyh4 bG9ncmVhZGVyKSwgeGxyZWMsICZwYXJzZWQpOworCQlmb3IgKGkgPSAwOyBpIDwgcGFyc2VkLm5y ZWxzOyArK2kpCisJCXsKKwkJCUZvcmtOdW1iZXIJZm9ya251bTsKKworCQkJZm9yIChmb3JrbnVt ID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgKytmb3JrbnVtKQorCQkJCWlmIChmb3JrbnVt ICE9IEZTTV9GT1JLTlVNKQorCQkJCQlCbG9ja1JlZlRhYmxlU2V0TGltaXRCbG9jayhicnRhYiwg JnBhcnNlZC54bG9jYXRvcnNbaV0sCisJCQkJCQkJCQkJCSAgIGZvcmtudW0sIDApOworCQl9CisJ fQorCWVsc2UgaWYgKHhhY3RfaW5mbyA9PSBYTE9HX1hBQ1RfQUJPUlQgfHwKKwkJCSB4YWN0X2lu Zm8gPT0gWExPR19YQUNUX0FCT1JUX1BSRVBBUkVEKQorCXsKKwkJeGxfeGFjdF9hYm9ydCAqeGxy ZWMgPSAoeGxfeGFjdF9hYm9ydCAqKSBYTG9nUmVjR2V0RGF0YSh4bG9ncmVhZGVyKTsKKwkJeGxf eGFjdF9wYXJzZWRfYWJvcnQgcGFyc2VkOworCQlpbnQJCQlpOworCisJCS8qCisJCSAqIERvbid0 IHRyYWNrIG1vZGlmaWVkIGJsb2NrcyBmb3IgYW55IHJlbGF0aW9ucyB0aGF0IHdlcmUgcmVtb3Zl ZCBvbgorCQkgKiBhYm9ydC4KKwkJICovCisJCVBhcnNlQWJvcnRSZWNvcmQoWExvZ1JlY0dldElu Zm8oeGxvZ3JlYWRlciksIHhscmVjLCAmcGFyc2VkKTsKKwkJZm9yIChpID0gMDsgaSA8IHBhcnNl ZC5ucmVsczsgKytpKQorCQl7CisJCQlGb3JrTnVtYmVyCWZvcmtudW07CisKKwkJCWZvciAoZm9y a251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07ICsrZm9ya251bSkKKwkJCQlpZiAoZm9y a251bSAhPSBGU01fRk9SS05VTSkKKwkJCQkJQmxvY2tSZWZUYWJsZVNldExpbWl0QmxvY2soYnJ0 YWIsICZwYXJzZWQueGxvY2F0b3JzW2ldLAorCQkJCQkJCQkJCQkgICBmb3JrbnVtLCAwKTsKKwkJ fQorCX0KK30KKworLyoKKyAqIFNwZWNpYWwgaGFuZGxpbmcgZm9yIFdBTCByZWNvZHMgd2l0aCBS TV9YTE9HX0lELgorICovCitzdGF0aWMgYm9vbAorU3VtbWFyaXplWGxvZ1JlY29yZChYTG9nUmVh ZGVyU3RhdGUgKnhsb2dyZWFkZXIpCit7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyh4 bG9ncmVhZGVyKSAmIH5YTFJfSU5GT19NQVNLOworCisJaWYgKGluZm8gPT0gWExPR19DSEVDS1BP SU5UX1JFRE8gfHwgaW5mbyA9PSBYTE9HX0NIRUNLUE9JTlRfU0hVVERPV04pCisJeworCQkvKgor CQkgKiBUaGlzIGlzIGFuIExTTiBhdCB3aGljaCByZWRvIG1pZ2h0IGJlZ2luLCBzbyB3ZSdkIGxp a2UKKwkJICogc3VtbWFyaXphdGlvbiB0byBzdG9wIGp1c3QgYmVmb3JlIHRoaXMgV0FMIHJlY29y ZC4KKwkJICovCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoK KyAqIFNpbWlsYXIgdG8gcmVhZF9sb2NhbF94bG9nX3BhZ2UsIGJ1dCBsaW1pdGVkIHRvIHJlYWQg ZnJvbSBvbmUgcGFydGljdWxhcgorICogdGltZWxpbmUuIElmIHRoZSBlbmQgb2YgV0FMIGlzIHJl YWNoZWQsIGl0IHdpbGwgd2FpdCBmb3IgbW9yZSBpZiByZWFkaW5nCisgKiBmcm9tIHRoZSBjdXJy ZW50IHRpbWVsaW5lLCBvciBnaXZlIHVwIGlmIHJlYWRpbmcgZnJvbSBhIGhpc3RvcmljIHRpbWVs aW5lLgorICogSW4gdGhlIGxhdHRlciBjYXNlLCBpdCB3aWxsIGFsc28gc2V0IHByaXZhdGVfZGF0 YS0+ZW5kX29mX3dhbCA9IHRydWUuCisgKgorICogQ2FsbGVyIG11c3Qgc2V0IHByaXZhdGVfZGF0 YS0+dGxpIHRvIHRoZSBUTEkgb2YgaW50ZXJlc3QsCisgKiBwcml2YXRlX2RhdGEtPnJlYWRfdXB0 byB0byB0aGUgbG93ZXN0IExTTiB0aGF0IGlzIG5vdCBrbm93biB0byBiZSBzYWZlCisgKiB0byBy ZWFkIG9uIHRoYXQgdGltZWxpbmUsIGFuZCBwcml2YXRlX2RhdGEtPmhpc3RvcmljIHRvIHRydWUg aWYgYW5kIG9ubHkKKyAqIGlmIHRoZSB0aW1lbGluZSBpcyBub3QgdGhlIGN1cnJlbnQgdGltZWxp bmUuIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUKKyAqIHByaXZhdGVfZGF0YS0+cmVhZF91cHRv IGFuZCBwcml2YXRlX2RhdGEtPmhpc3RvcmljIGlmIG1vcmUgV0FMIGFwcGVhcnMKKyAqIG9uIHRo ZSBjdXJyZW50IHRpbWVsaW5lIG9yIGlmIHRoZSBjdXJyZW50IHRpbWVsaW5lIGJlY29tZXMgaGlz dG9yaWMuCisgKi8KK3N0YXRpYyBpbnQKK3N1bW1hcml6ZXJfcmVhZF9sb2NhbF94bG9nX3BhZ2Uo WExvZ1JlYWRlclN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJWExvZ1JlY1B0ciB0YXJnZXRQYWdlUHRy LCBpbnQgcmVxTGVuLAorCQkJCQkJCQlYTG9nUmVjUHRyIHRhcmdldFJlY1B0ciwgY2hhciAqY3Vy X3BhZ2UpCit7CisJaW50CQkJY291bnQ7CisJV0FMUmVhZEVycm9yIGVycmluZm87CisJU3VtbWFy aXplclJlYWRMb2NhbFhMb2dQcml2YXRlICpwcml2YXRlX2RhdGE7CisKKwlIYW5kbGVXYWxTdW1t YXJpemVySW50ZXJydXB0cygpOworCisJcHJpdmF0ZV9kYXRhID0gKFN1bW1hcml6ZXJSZWFkTG9j YWxYTG9nUHJpdmF0ZSAqKQorCQlzdGF0ZS0+cHJpdmF0ZV9kYXRhOworCisJd2hpbGUgKDEpCisJ eworCQlpZiAodGFyZ2V0UGFnZVB0ciArIFhMT0dfQkxDS1NaIDw9IHByaXZhdGVfZGF0YS0+cmVh ZF91cHRvKQorCQl7CisJCQkvKgorCQkJICogbW9yZSB0aGFuIG9uZSBibG9jayBhdmFpbGFibGU7 IHJlYWQgb25seSB0aGF0IGJsb2NrLCBoYXZlCisJCQkgKiBjYWxsZXIgY29tZSBiYWNrIGlmIHRo ZXkgbmVlZCBtb3JlLgorCQkJICovCisJCQljb3VudCA9IFhMT0dfQkxDS1NaOworCQkJYnJlYWs7 CisJCX0KKwkJZWxzZSBpZiAodGFyZ2V0UGFnZVB0ciArIHJlcUxlbiA+IHByaXZhdGVfZGF0YS0+ cmVhZF91cHRvKQorCQl7CisJCQkvKiBXZSBkb24ndCBzZWVtIHRvIGhhdmUgZW5vdWdoIGRhdGEu ICovCisJCQlpZiAocHJpdmF0ZV9kYXRhLT5oaXN0b3JpYykKKwkJCXsKKwkJCQkvKgorCQkJCSAq IFRoaXMgaXMgYSBoaXN0b3JpYyB0aW1lbGluZSwgc28gdGhlcmUgd2lsbCBuZXZlciBiZSBhbnkK KwkJCQkgKiBtb3JlIGRhdGEgdGhhbiB3ZSBoYXZlIGN1cnJlbnRseS4KKwkJCQkgKi8KKwkJCQlw cml2YXRlX2RhdGEtPmVuZF9vZl93YWwgPSB0cnVlOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJ CWVsc2UKKwkJCXsKKwkJCQlYTG9nUmVjUHRyCWxhdGVzdF9sc247CisJCQkJVGltZUxpbmVJRAls YXRlc3RfdGxpOworCisJCQkJLyoKKwkJCQkgKiBUaGlzIGlzIC0gb3IgYXQgbGVhc3Qgd2FzIHVw IHVudGlsIHZlcnkgcmVjZW50bHkgLSB0aGUKKwkJCQkgKiBjdXJyZW50IHRpbWVsaW5lLCBzbyBt b3JlIGRhdGEgbWlnaHQgc2hvdyB1cC4gIERlbGF5IGhlcmUKKwkJCQkgKiBzbyB3ZSBkb24ndCB0 aWdodC1sb29wLgorCQkJCSAqLworCQkJCUhhbmRsZVdhbFN1bW1hcml6ZXJJbnRlcnJ1cHRzKCk7 CisJCQkJc3VtbWFyaXplcl93YWl0X2Zvcl93YWwoKTsKKworCQkJCS8qIFJlY2hlY2sgZW5kLW9m LVdBTC4gKi8KKwkJCQlsYXRlc3RfbHNuID0gR2V0TGF0ZXN0TFNOKCZsYXRlc3RfdGxpKTsKKwkJ CQlpZiAocHJpdmF0ZV9kYXRhLT50bGkgPT0gbGF0ZXN0X3RsaSkKKwkJCQl7CisJCQkJCS8qIFN0 aWxsIHRoZSBjdXJyZW50IHRpbWVsaW5lLCB1cGRhdGUgbWF4IExTTi4gKi8KKwkJCQkJQXNzZXJ0 KGxhdGVzdF9sc24gPj0gcHJpdmF0ZV9kYXRhLT5yZWFkX3VwdG8pOworCQkJCQlwcml2YXRlX2Rh dGEtPnJlYWRfdXB0byA9IGxhdGVzdF9sc247CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJ CUxpc3QJICAgKnRsZXMgPSByZWFkVGltZUxpbmVIaXN0b3J5KGxhdGVzdF90bGkpOworCQkJCQlY TG9nUmVjUHRyCXN3aXRjaHBvaW50OworCisJCQkJCS8qCisJCQkJCSAqIFRoZSB0aW1lbGluZSB3 ZSdyZSBzY2FubmluZyBpcyBubyBsb25nZXIgdGhlIGxhdGVzdAorCQkJCQkgKiBvbmUuIEZpZ3Vy ZSBvdXQgd2hlbiBpdCBlbmRlZC4KKwkJCQkJICovCisJCQkJCXByaXZhdGVfZGF0YS0+aGlzdG9y aWMgPSB0cnVlOworCQkJCQlzd2l0Y2hwb2ludCA9IHRsaVN3aXRjaFBvaW50KHByaXZhdGVfZGF0 YS0+dGxpLCB0bGVzLAorCQkJCQkJCQkJCQkJIE5VTEwpOworCisJCQkJCS8qCisJCQkJCSAqIEFs bG93IHJlYWRzIHVwIHRvIGV4YWN0bHkgdGhlIHN3aXRjaCBwb2ludC4KKwkJCQkJICoKKwkJCQkJ ICogSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgd2lsbCBjYXVzZSByZWFkX3VwdG8gdG8gbW92ZQor CQkJCQkgKiBiYWNrd2FyZHMsIGJlY2F1c2Ugd2FscmVjZWl2ZXIgbWlnaHQgaGF2ZSByZWFkIGEK KwkJCQkJICogcGFydGlhbCByZWNvcmQgYW5kIGZsdXNoZWQgaXQgdG8gZGlzaywgYW5kIHdlJ2Qg dmlldworCQkJCQkgKiB0aGF0IGRhdGEgYXMgc2FmZSB0byByZWFkLiBIb3dldmVyLCB0aGUKKwkJ CQkJICogWExPR19FTkRfT0ZfUkVDT1ZFUlkgcmVjb3JkIHdpbGwgYmUgd3JpdHRlbiBhdCB0aGUg ZW5kCisJCQkJCSAqIG9mIHRoZSBsYXN0IGNvbXBsZXRlIFdBTCByZWNvcmQsIG5vdCBhdCB0aGUg ZW5kIG9mIHRoZQorCQkJCQkgKiBXQUwgdGhhdCB3ZSd2ZSBmbHVzaGVkIHRvIGRpc2suCisJCQkJ CSAqCisJCQkJCSAqIFNvIHN3aXRjaHBvaW50IDwgcHJpdmF0ZS0+cmVhZF91cHRvIGlzIHBvc3Np YmxlIGhlcmUsCisJCQkJCSAqIGJ1dCBzd2l0Y2hwb2ludCA8IHN0YXRlLT5FbmRSZWNQdHIgc2hv dWxkIG5vdCBiZS4KKwkJCQkJICovCisJCQkJCUFzc2VydChzd2l0Y2hwb2ludCA+PSBzdGF0ZS0+ RW5kUmVjUHRyKTsKKwkJCQkJcHJpdmF0ZV9kYXRhLT5yZWFkX3VwdG8gPSBzd2l0Y2hwb2ludDsK KworCQkJCQkvKiBEZWJ1Z2dpbmcgb3V0cHV0LiAqLworCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJ CQkJCQllcnJtc2coInRpbWVsaW5lICV1IGJlY2FtZSBoaXN0b3JpYywgY2FuIHJlYWQgdXAgdG8g JVgvJVgiLAorCQkJCQkJCQkgICBwcml2YXRlX2RhdGEtPnRsaSwgTFNOX0ZPUk1BVF9BUkdTKHBy aXZhdGVfZGF0YS0+cmVhZF91cHRvKSkpOworCQkJCX0KKworCQkJCS8qIEdvIGFyb3VuZCBhbmQg dHJ5IGFnYWluLiAqLworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJLyogZW5vdWdoIGJ5dGVz IGF2YWlsYWJsZSB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0ICovCisJCQljb3VudCA9IHByaXZhdGVf ZGF0YS0+cmVhZF91cHRvIC0gdGFyZ2V0UGFnZVB0cjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ LyoKKwkgKiBFdmVuIHRob3VnaCB3ZSBqdXN0IGRldGVybWluZWQgaG93IG11Y2ggb2YgdGhlIHBh Z2UgY2FuIGJlIHZhbGlkbHkgcmVhZAorCSAqIGFzICdjb3VudCcsIHJlYWQgdGhlIHdob2xlIHBh Z2UgYW55d2F5LiBJdCdzIGd1YXJhbnRlZWQgdG8gYmUKKwkgKiB6ZXJvLXBhZGRlZCB1cCB0byB0 aGUgcGFnZSBib3VuZGFyeSBpZiBpdCdzIGluY29tcGxldGUuCisJICovCisJaWYgKCFXQUxSZWFk KHN0YXRlLCBjdXJfcGFnZSwgdGFyZ2V0UGFnZVB0ciwgWExPR19CTENLU1osCisJCQkJIHByaXZh dGVfZGF0YS0+dGxpLCAmZXJyaW5mbykpCisJCVdBTFJlYWRSYWlzZUVycm9yKCZlcnJpbmZvKTsK KworCS8qIFRyYWNrIHRoYXQgd2UgcmVhZCBhIHBhZ2UsIGZvciBzbGVlcCB0aW1lIGNhbGN1bGF0 aW9uLiAqLworCSsrcGFnZXNfcmVhZF9zaW5jZV9sYXN0X3NsZWVwOworCisJLyogbnVtYmVyIG9m IHZhbGlkIGJ5dGVzIGluIHRoZSBidWZmZXIgKi8KKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisg KiBTbGVlcCBmb3IgbG9uZyBlbm91Z2ggdGhhdCB3ZSBiZWxpZXZlIGl0J3MgbGlrZWx5IHRoYXQg bW9yZSBXQUwgd2lsbAorICogYmUgYXZhaWxhYmxlIGFmdGVyd2FyZHMuCisgKi8KK3N0YXRpYyB2 b2lkCitzdW1tYXJpemVyX3dhaXRfZm9yX3dhbCh2b2lkKQoreworCWlmIChwYWdlc19yZWFkX3Np bmNlX2xhc3Rfc2xlZXAgPT0gMCkKKwl7CisJCS8qCisJCSAqIE5vIHBhZ2VzIHdlcmUgcmVhZCBz aW5jZSB0aGUgbGFzdCBzbGVlcCwgc28gZG91YmxlIHRoZSBzbGVlcCB0aW1lLAorCQkgKiBidXQg bm90IGJleW9uZCB0aGUgbWF4aW11bSBhbGxvd2FibGUgdmFsdWUuCisJCSAqLworCQlzbGVlcF9x dWFudGEgPSBNaW4oc2xlZXBfcXVhbnRhICogMiwgTUFYX1NMRUVQX1FVQU5UQSk7CisJfQorCWVs c2UgaWYgKHBhZ2VzX3JlYWRfc2luY2VfbGFzdF9zbGVlcCA+IDEpCisJeworCQkvKgorCQkgKiBN dWx0aXBsZSBwYWdlcyB3ZXJlIHJlYWQgc2luY2UgdGhlIGxhc3Qgc2xlZXAsIHNvIHJlZHVjZSB0 aGUgc2xlZXAKKwkJICogdGltZS4KKwkJICoKKwkJICogQSBsYXJnZSBidXJzdCBvZiBhY3Rpdml0 eSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IHJlZHVjZSB0aGUKKwkJICogc2xlZXAgdGltZSB0 byB0aGUgbWluaW11bSwgYnV0IHdlIGRvbid0IHdhbnQgYSBoYW5kZnVsIG9mIGV4dHJhIFdBTAor CQkgKiByZWNvcmRzIHRvIHByb3Zva2UgYSBzdHJvbmcgcmVhY3Rpb24uIFdlIGNob29zZSB0byBy ZWR1Y2UgdGhlIHNsZWVwCisJCSAqIHRpbWUgYnkgMSBxdWFudHVtIGZvciBlYWNoIHBhZ2UgcmVh ZCBiZXlvbmQgdGhlIGZpcnN0LCB3aGljaCBpcyBhCisJCSAqIGZhaXJseSBhcmJpdHJhcnkgd2F5 IG9mIHRyeWluZyB0byBiZSByZWFjdGl2ZSB3aXRob3V0CisJCSAqIG92ZXJycmVhY3RpbmcuCisJ CSAqLworCQlpZiAocGFnZXNfcmVhZF9zaW5jZV9sYXN0X3NsZWVwID4gc2xlZXBfcXVhbnRhIC0g MSkKKwkJCXNsZWVwX3F1YW50YSA9IDE7CisJCWVsc2UKKwkJCXNsZWVwX3F1YW50YSAtPSBwYWdl c19yZWFkX3NpbmNlX2xhc3Rfc2xlZXA7CisJfQorCisJLyogT0ssIG5vdyBzbGVlcC4gKi8KKwko dm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VU IHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJIHNsZWVwX3F1YW50YSAqIE1TX1BFUl9TTEVF UF9RVUFOVFVNLAorCQkJCQkgV0FJVF9FVkVOVF9XQUxfU1VNTUFSSVpFUl9XQUwpOworCVJlc2V0 TGF0Y2goTXlMYXRjaCk7CisKKwkvKiBSZXNldCBjb3VudCBvZiBwYWdlcyByZWFkLiAqLworCXBh Z2VzX3JlYWRfc2luY2VfbGFzdF9zbGVlcCA9IDA7Cit9CisKKy8qCisgKiBNb3N0IHJlY2VudCBS ZWRvUmVjUHRyIHZhbHVlIG9ic2VydmVkIGJ5IFJlbW92ZU9sZFdhbFN1bW1hcmllcy4KKyAqLwor c3RhdGljIHZvaWQKK01heWJlUmVtb3ZlT2xkV2FsU3VtbWFyaWVzKHZvaWQpCit7CisJWExvZ1Jl Y1B0cglyZWRvX3BvaW50ZXIgPSBHZXRSZWRvUmVjUHRyKCk7CisJTGlzdAkgICAqd3NsaXN0Owor CXRpbWVfdAkJY3V0b2ZmX3RpbWU7CisKKwkvKiBJZiBXQUwgc3VtbWFyeSByZW1vdmFsIGlzIGRp c2FibGVkLCBkb24ndCBkbyBhbnl0aGluZy4gKi8KKwlpZiAod2FsX3N1bW1hcnlfa2VlcF90aW1l ID09IDApCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlIHJlZG8gcG9pbnRlciBoYXMgbm90 IGFkdmFuY2VkLCBkb24ndCBkbyBhbnl0aGluZy4KKwkgKgorCSAqIFRoaXMgaGFzIHRoZSBlZmZl Y3QgdGhhdCB3ZSBvbmx5IHRyeSB0byByZW1vdmUgb2xkIFdBTCBzdW1tYXJ5IGZpbGVzCisJICog b25jZSBwZXIgY2hlY2twb2ludCBjeWNsZS4KKwkgKi8KKwlpZiAocmVkb19wb2ludGVyID09IHJl ZG9fcG9pbnRlcl9hdF9sYXN0X3N1bW1hcnlfcmVtb3ZhbCkKKwkJcmV0dXJuOworCXJlZG9fcG9p bnRlcl9hdF9sYXN0X3N1bW1hcnlfcmVtb3ZhbCA9IHJlZG9fcG9pbnRlcjsKKworCS8qCisJICog RmlsZXMgc2hvdWxkIG9ubHkgYmUgcmVtb3ZlZCBpZiB0aGUgbGFzdCBtb2RpZmljYXRpb24gdGlt ZSBwcmVjZWRlcyB0aGUKKwkgKiBjdXRvZmYgdGltZSB3ZSBjb21wdXRlIGhlcmUuCisJICovCisJ Y3V0b2ZmX3RpbWUgPSB0aW1lKE5VTEwpIC0gNjAgKiB3YWxfc3VtbWFyeV9rZWVwX3RpbWU7CisK KwkvKiBHZXQgYWxsIHRoZSBzdW1tYXJpZXMgdGhhdCBjdXJyZW50bHkgZXhpc3QuICovCisJd3Ns aXN0ID0gR2V0V2FsU3VtbWFyaWVzKDAsIEludmFsaWRYTG9nUmVjUHRyLCBJbnZhbGlkWExvZ1Jl Y1B0cik7CisKKwkvKiBMb29wIHVudGlsIGFsbCBzdW1tYXJpZXMgaGF2ZSBiZWVuIGNvbnNpZGVy ZWQgZm9yIHJlbW92YWwuICovCisJd2hpbGUgKHdzbGlzdCAhPSBOSUwpCisJeworCQlMaXN0Q2Vs bCAgICpsYzsKKwkJWExvZ1NlZ05vCW9sZGVzdF9zZWdubzsKKwkJWExvZ1JlY1B0cglvbGRlc3Rf bHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJCVRpbWVMaW5lSUQJc2VsZWN0ZWRfdGxpOworCisJ CUhhbmRsZVdhbFN1bW1hcml6ZXJJbnRlcnJ1cHRzKCk7CisKKwkJLyoKKwkJICogUGljayBhIHRp bWVsaW5lIGZvciB3aGljaCBzb21lIHN1bW1hcnkgZmlsZXMgc3RpbGwgZXhpc3Qgb24gZGlzaywK KwkJICogYW5kIGZpbmQgdGhlIG9sZGVzdCBMU04gdGhhdCBzdGlsbCBleGlzdHMgb24gZGlzayBm b3IgdGhhdAorCQkgKiB0aW1lbGluZS4KKwkJICovCisJCXNlbGVjdGVkX3RsaSA9ICgoV2FsU3Vt bWFyeUZpbGUgKikgbGluaXRpYWwod3NsaXN0KSktPnRsaTsKKwkJb2xkZXN0X3NlZ25vID0gWExv Z0dldE9sZGVzdFNlZ25vKHNlbGVjdGVkX3RsaSk7CisJCWlmIChvbGRlc3Rfc2Vnbm8gIT0gMCkK KwkJCVhMb2dTZWdOb09mZnNldFRvUmVjUHRyKG9sZGVzdF9zZWdubywgMCwgd2FsX3NlZ21lbnRf c2l6ZSwKKwkJCQkJCQkJCW9sZGVzdF9sc24pOworCisKKwkJLyogQ29uc2lkZXIgZWFjaCBXQUwg ZmlsZSBvbiB0aGUgc2VsZWN0ZWQgdGltZWxpbmUgaW4gdHVybi4gKi8KKwkJZm9yZWFjaChsYywg d3NsaXN0KQorCQl7CisJCQlXYWxTdW1tYXJ5RmlsZSAqd3MgPSBsZmlyc3QobGMpOworCisJCQlI YW5kbGVXYWxTdW1tYXJpemVySW50ZXJydXB0cygpOworCisJCQkvKiBJZiBpdCdzIG5vdCBvbiB0 aGlzIHRpbWVsaW5lLCBpdCdzIG5vdCB0aW1lIHRvIGNvbnNpZGVyIGl0LiAqLworCQkJaWYgKHNl bGVjdGVkX3RsaSAhPSB3cy0+dGxpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogSWYg dGhlIFdBTCBkb2Vzbid0IGV4aXN0IGFueSBtb3JlLCB3ZSBjYW4gcmVtb3ZlIGl0IGlmIHRoZSBm aWxlCisJCQkgKiBtb2RpZmljYXRpb24gdGltZSBpcyBvbGQgZW5vdWdoLgorCQkJICovCisJCQlp ZiAoWExvZ1JlY1B0cklzSW52YWxpZChvbGRlc3RfbHNuKSB8fCB3cy0+ZW5kX2xzbiA8PSBvbGRl c3RfbHNuKQorCQkJCVJlbW92ZVdhbFN1bW1hcnlJZk9sZGVyVGhhbih3cywgY3V0b2ZmX3RpbWUp OworCisJCQkvKgorCQkJICogV2hldGhlciB3ZSByZW1vdmVkIHRoZSBmaWxlIG9yIG5vdCwgd2Ug bmVlZCBub3QgY29uc2lkZXIgaXQKKwkJCSAqIGFnYWluLgorCQkJICovCisJCQl3c2xpc3QgPSBm b3JlYWNoX2RlbGV0ZV9jdXJyZW50KHdzbGlzdCwgbGMpOworCQkJcGZyZWUod3MpOworCQl9CisJ fQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4 dCBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2tuYW1lcy50eHQKaW5kZXggZjcyZjI5 MDZjZS4uZDYyMWY1NTA3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3 bG9ja25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrbmFtZXMu dHh0CkBAIC01NCwzICs1NCw0IEBAIFhhY3RUcnVuY2F0aW9uTG9jawkJCQkJNDQKIFdyYXBMaW1p dHNWYWN1dW1Mb2NrCQkJCTQ2CiBOb3RpZnlRdWV1ZVRhaWxMb2NrCQkJCQk0NwogV2FpdEV2ZW50 RXh0ZW5zaW9uTG9jawkJCQk0OAorV0FMU3VtbWFyaXplckxvY2sJCQkJCTQ5CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfaW8uYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L3Bnc3RhdF9pby5jCmluZGV4IGQ5OWVjZGQ0ZDguLjBkZDliOThiM2UgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9pby5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9pby5jCkBAIC0zMDYsNyArMzA2LDggQEAg cGdzdGF0X2lvX3NuYXBzaG90X2NiKHZvaWQpCiAqIC0gU3lzbG9nZ2VyIGJlY2F1c2UgaXQgaXMg bm90IGNvbm5lY3RlZCB0byBzaGFyZWQgbWVtb3J5CiAqIC0gQXJjaGl2ZXIgYmVjYXVzZSBtb3N0 IHJlbGV2YW50IGFyY2hpdmluZyBJTyBpcyBkZWxlZ2F0ZWQgdG8gYQogKiAgIHNwZWNpYWxpemVk IGNvbW1hbmQgb3IgbW9kdWxlCi0qIC0gV0FMIFJlY2VpdmVyIGFuZCBXQUwgV3JpdGVyIElPIGlz IG5vdCB0cmFja2VkIGluIHBnX3N0YXRfaW8gZm9yIG5vdworKiAtIFdBTCBSZWNlaXZlciwgV0FM IFdyaXRlciwgYW5kIFdBTCBTdW1tYXJpemVyIElPIGFyZSBub3QgdHJhY2tlZCBpbgorKiAgIHBn X3N0YXRfaW8gZm9yIG5vdwogKgogKiBGdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgQmFja2VuZFR5 cGUgcGFydGljaXBhdGVzIGluIHRoZSBjdW11bGF0aXZlIHN0YXRzCiAqIHN1YnN5c3RlbSBmb3Ig SU8gYW5kIGZhbHNlIGlmIGl0IGRvZXMgbm90LgpAQCAtMzI4LDYgKzMyOSw3IEBAIHBnc3RhdF90 cmFja3NfaW9fYmt0eXBlKEJhY2tlbmRUeXBlIGJrdHlwZSkKIAkJY2FzZSBCX0xPR0dFUjoKIAkJ Y2FzZSBCX1dBTF9SRUNFSVZFUjoKIAkJY2FzZSBCX1dBTF9XUklURVI6CisJCWNhc2UgQl9XQUxf U1VNTUFSSVpFUjoKIAkJCXJldHVybiBmYWxzZTsKIAogCQljYXNlIEJfQVVUT1ZBQ19MQVVOQ0hF UjoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFt ZXMudHh0IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQK aW5kZXggZDc5OTU5MzFiZC4uN2U3OTE2MzQ2NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTU2LDYgKzU2LDcgQEAgUkVDT1ZFUllf V0FMX1NUUkVBTQkiV2FpdGluZyBpbiBtYWluIGxvb3Agb2Ygc3RhcnR1cCBwcm9jZXNzIGZvciBX QUwgdG8gYXJyaXZlLAogU1lTTE9HR0VSX01BSU4JIldhaXRpbmcgaW4gbWFpbiBsb29wIG9mIHN5 c2xvZ2dlciBwcm9jZXNzLiIKIFdBTF9SRUNFSVZFUl9NQUlOCSJXYWl0aW5nIGluIG1haW4gbG9v cCBvZiBXQUwgcmVjZWl2ZXIgcHJvY2Vzcy4iCiBXQUxfU0VOREVSX01BSU4JIldhaXRpbmcgaW4g bWFpbiBsb29wIG9mIFdBTCBzZW5kZXIgcHJvY2Vzcy4iCitXQUxfU1VNTUFSSVpFUl9XQUwJIldh aXRpbmcgaW4gV0FMIHN1bW1hcml6ZXIgZm9yIG1vcmUgV0FMIHRvIGJlIGdlbmVyYXRlZC4iCiBX QUxfV1JJVEVSX01BSU4JIldhaXRpbmcgaW4gbWFpbiBsb29wIG9mIFdBTCB3cml0ZXIgcHJvY2Vz cy4iCiAKIApAQCAtMTQyLDYgKzE0Myw3IEBAIFNBRkVfU05BUFNIT1QJIldhaXRpbmcgdG8gb2J0 YWluIGEgdmFsaWQgc25hcHNob3QgZm9yIGEgPGxpdGVyYWw+UkVBRCBPTkxZIERFRkVSCiBTWU5D X1JFUAkiV2FpdGluZyBmb3IgY29uZmlybWF0aW9uIGZyb20gYSByZW1vdGUgc2VydmVyIGR1cmlu ZyBzeW5jaHJvbm91cyByZXBsaWNhdGlvbi4iCiBXQUxfUkVDRUlWRVJfRVhJVAkiV2FpdGluZyBm b3IgdGhlIFdBTCByZWNlaXZlciB0byBleGl0LiIKIFdBTF9SRUNFSVZFUl9XQUlUX1NUQVJUCSJX YWl0aW5nIGZvciBzdGFydHVwIHByb2Nlc3MgdG8gc2VuZCBpbml0aWFsIGRhdGEgZm9yIHN0cmVh bWluZyByZXBsaWNhdGlvbi4iCitXQUxfU1VNTUFSWV9SRUFEWQkiV2FpdGluZyBmb3IgYSBuZXcg V0FMIHN1bW1hcnkgdG8gYmUgZ2VuZXJhdGVkLiIKIFhBQ1RfR1JPVVBfVVBEQVRFCSJXYWl0aW5n IGZvciB0aGUgZ3JvdXAgbGVhZGVyIHRvIHVwZGF0ZSB0cmFuc2FjdGlvbiBzdGF0dXMgYXQgZW5k IG9mIGEgcGFyYWxsZWwgb3BlcmF0aW9uLiIKIAogCkBAIC0xNjIsNiArMTY0LDcgQEAgUkVHSVNU RVJfU1lOQ19SRVFVRVNUCSJXYWl0aW5nIHdoaWxlIHNlbmRpbmcgc3luY2hyb25pemF0aW9uIHJl cXVlc3RzIHRvIHRoZSBjaGUKIFNQSU5fREVMQVkJIldhaXRpbmcgd2hpbGUgYWNxdWlyaW5nIGEg Y29udGVuZGVkIHNwaW5sb2NrLiIKIFZBQ1VVTV9ERUxBWQkiV2FpdGluZyBpbiBhIGNvc3QtYmFz ZWQgdmFjdXVtIGRlbGF5IHBvaW50LiIKIFZBQ1VVTV9UUlVOQ0FURQkiV2FpdGluZyB0byBhY3F1 aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrIHRvIHRydW5jYXRlIG9mZiBhbnkgZW1wdHkgcGFnZXMgYXQg dGhlIGVuZCBvZiBhIHRhYmxlIHZhY3V1bWVkLiIKK1dBTF9TVU1NQVJJWkVSX0VSUk9SCSJXYWl0 aW5nIGFmdGVyIGEgV0FMIHN1bW1hcml6ZXIgZXJyb3IuIgogCiAKICMKQEAgLTI0Myw2ICsyNDYs OCBAQCBXQUxfQ09QWV9XUklURQkiV2FpdGluZyBmb3IgYSB3cml0ZSB3aGVuIGNyZWF0aW5nIGEg bmV3IFdBTCBzZWdtZW50IGJ5IGNvcHlpbmcgYQogV0FMX0lOSVRfU1lOQwkiV2FpdGluZyBmb3Ig YSBuZXdseSBpbml0aWFsaXplZCBXQUwgZmlsZSB0byByZWFjaCBkdXJhYmxlIHN0b3JhZ2UuIgog V0FMX0lOSVRfV1JJVEUJIldhaXRpbmcgZm9yIGEgd3JpdGUgd2hpbGUgaW5pdGlhbGl6aW5nIGEg bmV3IFdBTCBmaWxlLiIKIFdBTF9SRUFECSJXYWl0aW5nIGZvciBhIHJlYWQgZnJvbSBhIFdBTCBm aWxlLiIKK1dBTF9TVU1NQVJZX1JFQUQJIldhaXRpbmcgZm9yIGEgcmVhZCBmcm9tIGEgV0FMIHN1 bW1hcnkgZmlsZS4iCitXQUxfU1VNTUFSWV9XUklURQkiV2FpdGluZyBmb3IgYSB3cml0ZSB0byBh IFdBTCBzdW1tYXJ5IGZpbGUuIgogV0FMX1NZTkMJIldhaXRpbmcgZm9yIGEgV0FMIGZpbGUgdG8g cmVhY2ggZHVyYWJsZSBzdG9yYWdlLiIKIFdBTF9TWU5DX01FVEhPRF9BU1NJR04JIldhaXRpbmcg Zm9yIGRhdGEgdG8gcmVhY2ggZHVyYWJsZSBzdG9yYWdlIHdoaWxlIGFzc2lnbmluZyBhIG5ldyBX QUwgc3luYyBtZXRob2QuIgogV0FMX1dSSVRFCSJXYWl0aW5nIGZvciBhIHdyaXRlIHRvIGEgV0FM IGZpbGUuIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCmluZGV4IDgxOTkzNmVjMDIuLjVjOWI2 Zjk5MWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMKQEAgLTMwNSw2ICszMDUsOSBAQCBH ZXRCYWNrZW5kVHlwZURlc2MoQmFja2VuZFR5cGUgYmFja2VuZFR5cGUpCiAJCWNhc2UgQl9XQUxf U0VOREVSOgogCQkJYmFja2VuZERlc2MgPSAid2Fsc2VuZGVyIjsKIAkJCWJyZWFrOworCQljYXNl IEJfV0FMX1NVTU1BUklaRVI6CisJCQliYWNrZW5kRGVzYyA9ICJ3YWxzdW1tYXJpemVyIjsKKwkJ CWJyZWFrOwogCQljYXNlIEJfV0FMX1dSSVRFUjoKIAkJCWJhY2tlbmREZXNjID0gIndhbHdyaXRl ciI7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggZjdjOTg4 MmY3Yy4uOWY1OTQ0MDUyNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf dGFibGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTYz LDYgKzYzLDcgQEAKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKICNpbmNsdWRl ICJwb3N0bWFzdGVyL3N0YXJ0dXAuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3N5c2xvZ2dlci5o IgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oIgogI2luY2x1ZGUgInBvc3Rt YXN0ZXIvd2Fsd3JpdGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVy LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgpAQCAtNzAzLDYgKzcwNCw4IEBAIGNv bnN0IGNoYXIgKmNvbnN0IGNvbmZpZ19ncm91cF9uYW1lc1tdID0KIAlnZXR0ZXh0X25vb3AoIldy aXRlLUFoZWFkIExvZyAvIEFyY2hpdmUgUmVjb3ZlcnkiKSwKIAkvKiBXQUxfUkVDT1ZFUllfVEFS R0VUICovCiAJZ2V0dGV4dF9ub29wKCJXcml0ZS1BaGVhZCBMb2cgLyBSZWNvdmVyeSBUYXJnZXQi KSwKKwkvKiBXQUxfU1VNTUFSSVpBVElPTiAqLworCWdldHRleHRfbm9vcCgiV3JpdGUtQWhlYWQg TG9nIC8gU3VtbWFyaXphdGlvbiIpLAogCS8qIFJFUExJQ0FUSU9OX1NFTkRJTkcgKi8KIAlnZXR0 ZXh0X25vb3AoIlJlcGxpY2F0aW9uIC8gU2VuZGluZyBTZXJ2ZXJzIiksCiAJLyogUkVQTElDQVRJ T05fUFJJTUFSWSAqLwpAQCAtMTc4Niw2ICsxNzg5LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBD b25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7 InN1bW1hcml6ZV93YWwiLCBQR0NfU0lHSFVQLCBXQUxfU1VNTUFSSVpBVElPTiwKKwkJCWdldHRl eHRfbm9vcCgiU3RhcnRzIHRoZSBXQUwgc3VtbWFyaXplciBwcm9jZXNzIHRvIGVuYWJsZSBpbmNy ZW1lbnRhbCBiYWNrdXAuIiksCisJCQlOVUxMCisJCX0sCisJCSZzdW1tYXJpemVfd2FsLAorCQlm YWxzZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsiaG90X3N0YW5kYnkiLCBQ R0NfUE9TVE1BU1RFUiwgUkVQTElDQVRJT05fU1RBTkRCWSwKIAkJCWdldHRleHRfbm9vcCgiQWxs b3dzIGNvbm5lY3Rpb25zIGFuZCBxdWVyaWVzIGR1cmluZyByZWNvdmVyeS4iKSwKQEAgLTMyMDAs NiArMzIxMywxOSBAQCBzdHJ1Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJ Y2hlY2tfd2FsX3NlZ21lbnRfc2l6ZSwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsid2FsX3N1 bW1hcnlfa2VlcF90aW1lIiwgUEdDX1NJR0hVUCwgV0FMX1NVTU1BUklaQVRJT04sCisJCQlnZXR0 ZXh0X25vb3AoIlRpbWUgZm9yIHdoaWNoIFdBTCBzdW1tYXJ5IGZpbGVzIHNob3VsZCBiZSBrZXB0 LiIpLAorCQkJTlVMTCwKKwkJCUdVQ19VTklUX01JTiwKKwkJfSwKKwkJJndhbF9zdW1tYXJ5X2tl ZXBfdGltZSwKKwkJMTAgKiAyNCAqIDYwLAkJCS8qIDEwIGRheXMgKi8KKwkJMCwKKwkJSU5UX01B WCwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsiYXV0b3ZhY3V1bV9uYXB0aW1l IiwgUEdDX1NJR0hVUCwgQVVUT1ZBQ1VVTSwKIAkJCWdldHRleHRfbm9vcCgiVGltZSB0byBzbGVl cCBiZXR3ZWVuIGF1dG92YWN1dW0gcnVucy4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBjZjlmMjgzY2ZlLi5iMjgwOWM3MTFhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0zMDIs NiArMzAyLDExIEBACiAjcmVjb3ZlcnlfdGFyZ2V0X2FjdGlvbiA9ICdwYXVzZScJIyAncGF1c2Un LCAncHJvbW90ZScsICdzaHV0ZG93bicKIAkJCQkJIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQp CiAKKyMgLSBXQUwgU3VtbWFyaXphdGlvbiAtCisKKyNzdW1tYXJpemVfd2FsID0gb2ZmCQkJICMg cnVuIFdBTCBzdW1tYXJpemVyIHByb2Nlc3M/Cisjd2FsX3N1bW1hcnlfa2VlcF90aW1lID0gJzEw ZCcgIyB3aGVuIHRvIHJlbW92ZSBvbGQgc3VtbWFyeSBmaWxlcywgMCA9IG5ldmVyCisKIAogIy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIyBSRVBMSUNBVElPTgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9p bml0ZGIvaW5pdGRiLmMgYi9zcmMvYmluL2luaXRkYi9pbml0ZGIuYwppbmRleCAwYzZmNWNlYjBh Li5lNjhiNDBkMmI1IDEwMDY0NAotLS0gYS9zcmMvYmluL2luaXRkYi9pbml0ZGIuYworKysgYi9z cmMvYmluL2luaXRkYi9pbml0ZGIuYwpAQCAtMjI3LDYgKzIyNyw3IEBAIHN0YXRpYyBjaGFyICpl eHRyYV9vcHRpb25zID0gIiI7CiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3ViZGlyc1tdID0g ewogCSJnbG9iYWwiLAogCSJwZ193YWwvYXJjaGl2ZV9zdGF0dXMiLAorCSJwZ193YWwvc3VtbWFy aWVzIiwKIAkicGdfY29tbWl0X3RzIiwKIAkicGdfZHluc2htZW0iLAogCSJwZ19ub3RpZnkiLApk aWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9NYWtlZmlsZSBiL3NyYy9jb21tb24vTWFrZWZpbGUKaW5k ZXggMTA5MmRjNjNkZi4uMjNlNWEzZGI0NyAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi9NYWtlZmls ZQorKysgYi9zcmMvY29tbW9uL01ha2VmaWxlCkBAIC00OSw2ICs0OSw3IEBAIE9CSlNfQ09NTU9O ID0gXAogCWFyY2hpdmUubyBcCiAJYmFzZTY0Lm8gXAogCWJpbmFyeWhlYXAubyBcCisJYmxrcmVm dGFibGUubyBcCiAJY2hlY2tzdW1faGVscGVyLm8gXAogCWNvbXByZXNzaW9uLm8gXAogCWNvbmZp Z19pbmZvLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9ibGtyZWZ0YWJsZS5jIGIvc3JjL2Nv bW1vbi9ibGtyZWZ0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjIxZWU2ZjU5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29tbW9uL2Jsa3JlZnRhYmxlLmMK QEAgLTAsMCArMSwxMzA4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBibGtyZWZ0YWJs ZS5jCisgKgkgIEJsb2NrIHJlZmVyZW5jZSB0YWJsZXMuCisgKgorICogQSBibG9jayByZWZlcmVu Y2UgdGFibGUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGJsb2NrcyBoYXZlCisgKiBi ZWVuIG1vZGlmaWVkIGJ5IFdBTCByZWNvcmRzIHdpdGhpbiBhIGNlcnRhaW4gTFNOIHJhbmdlLgor ICoKKyAqIEZvciBlYWNoIHJlbGF0aW9uIGZvcmssIHdlIGtlZXAgdHJhY2sgb2YgYWxsIGJsb2Nr cyB0aGF0IGhhdmUgYXBwZWFyZWQKKyAqIGluIGJsb2NrIHJlZmVyZW5jZSBpbiB0aGUgV0FMLiBX ZSBhbHNvIGtlZXAgdHJhY2sgb2YgdGhlICJsaW1pdCBibG9jayIsCisgKiB3aGljaCBpcyB0aGUg c21hbGxlc3QgcmVsYXRpb24gbGVuZ3RoIGluIGJsb2NrcyBrbm93biB0byBoYXZlIG9jY3VycmVk CisgKiBkdXJpbmcgdGhhdCByYW5nZSBvZiBXQUwgcmVjb3Jkcy4gIFRoaXMgc2hvdWxkIGJlIHNl dCB0byAwIGlmIHRoZSByZWxhdGlvbgorICogZm9yayBpcyBjcmVhdGVkIG9yIGRlc3Ryb3llZCwg YW5kIHRvIHRoZSBwb3N0LXRydW5jYXRpb24gbGVuZ3RoIGlmCisgKiB0cnVuY2F0ZWQuCisgKgor ICogV2hlbmV2ZXIgd2Ugc2V0IHRoZSBsaW1pdCBibG9jaywgd2UgYWxzbyBmb3JnZXQgYWJvdXQg YW55IG1vZGlmaWVkIGJsb2NrcworICogYmV5b25kIHRoYXQgcG9pbnQuIFRob3NlIGJsb2NrcyBk b24ndCBleGlzdCBhbnkgbW9yZS4gU3VjaCBibG9ja3MgY2FuCisgKiBsYXRlciBiZSBtYXJrZWQg YXMgbW9kaWZpZWQgYWdhaW47IGlmIHRoYXQgaGFwcGVucywgaXQgbWVhbnMgdGhlIHJlbGF0aW9u CisgKiB3YXMgcmUtZXh0ZW5kZWQuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEw LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogc3JjL2Nv bW1vbi9ibGtyZWZ0YWJsZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworCisjaWZu ZGVmIEZST05URU5ECisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNlbHNlCisjaW5jbHVkZSAicG9z dGdyZXNfZmUuaCIKKyNlbmRpZgorCisjaWZkZWYgRlJPTlRFTkQKKyNpbmNsdWRlICJjb21tb24v bG9nZ2luZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21tb24vYmxrcmVmdGFibGUuaCIKKyNp bmNsdWRlICJjb21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAicG9ydC9wZ19jcmMzMmMuaCIKKwor LyoKKyAqIEEgYmxvY2sgcmVmZXJlbmNlIHRhYmxlIGtlZXBzIHRyYWNrIG9mIHRoZSBzdGF0dXMg b2YgZWFjaCByZWxhdGlvbgorICogZm9yayBpbmRpdmlkdWFsbHkuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEJsb2NrUmVmVGFibGVLZXkKK3sKKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvcjsKKwlGb3Jr TnVtYmVyCWZvcmtudW07Cit9IEJsb2NrUmVmVGFibGVLZXk7CisKKy8qCisgKiBXZSBjb3VsZCBu ZWVkIHRvIHN0b3JlIGRhdGEgZWl0aGVyIGZvciBhIHJlbGF0aW9uIGluIHdoaWNoIG9ubHkgYQor ICogdGlueSBmcmFjdGlvbiBvZiB0aGUgYmxvY2tzIGhhdmUgYmVlbiBtb2RpZmllZCBvciBmb3Ig YSByZWxhdGlvbiBpbgorICogd2hpY2ggbmVhcmx5IGV2ZXJ5IGJsb2NrIGhhcyBiZWVuIG1vZGlm aWVkLCBhbmQgd2Ugd2FudCBhCisgKiBzcGFjZS1lZmZpY2llbnQgcmVwcmVzZW50YXRpb24gaW4g Ym90aCBjYXNlcy4gVG8gYWNjb21wbGlzaCB0aGlzLAorICogd2UgZGl2aWRlIHRoZSByZWxhdGlv biBpbnRvIGNodW5rcyBvZiAyXjE2IGJsb2NrcyBhbmQgY2hvb3NlIGJldHdlZW4KKyAqIGFuIGFy cmF5IHJlcHJlc2VudGF0aW9uIGFuZCBhIGJpdG1hcCByZXByZXNlbnRhdGlvbiBmb3IgZWFjaCBj aHVuay4KKyAqCisgKiBXaGVuIHRoZSBudW1iZXIgb2YgbW9kaWZpZWQgYmxvY2tzIGluIGEgZ2l2 ZW4gY2h1bmsgaXMgc21hbGwsIHdlCisgKiBlc3NlbnRpYWxseSBzdG9yZSBhbiBhcnJheSBvZiBi bG9jayBudW1iZXJzLCBidXQgd2UgbmVlZCBub3Qgc3RvcmUgdGhlCisgKiBlbnRpcmUgYmxvY2sg bnVtYmVyOiBpbnN0ZWFkLCB3ZSBzdG9yZSBlYWNoIGJsb2NrIG51bWJlciBhcyBhIDItYnl0ZQor ICogb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBjaHVuay4KKyAqCisgKiBXaGVuIHRoZSBu dW1iZXIgb2YgbW9kaWZpZWQgYmxvY2tzIGluIGEgZ2l2ZW4gY2h1bmsgaXMgbGFyZ2UsIHdlIHN3 aXRjaAorICogdG8gYSBiaXRtYXAgcmVwcmVzZW50YXRpb24uCisgKgorICogVGhlc2Ugc2FtZSBi YXNpYyByZXByZXNlbnRhdGlvbmFsIGNob2ljZXMgYXJlIHVzZWQgYm90aCB3aGVuIGEgYmxvY2sK KyAqIHJlZmVyZW5jZSB0YWJsZSBpcyBzdG9yZWQgaW4gbWVtb3J5IGFuZCB3aGVuIGl0IGlzIHNl cmlhbGl6ZWQgdG8gZGlzay4KKyAqCisgKiBJbiB0aGUgaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9u LCB3ZSBpbml0aWFsbHkgYWxsb2NhdGUgZWFjaCBjaHVuayB3aXRoCisgKiBzcGFjZSBmb3IgYSBu dW1iZXIgb2YgZW50cmllcyBnaXZlbiBieSBJTklUSUFMX0VOVFJJRVNfUEVSX0NIVU5LIGFuZAor ICogaW5jcmVhc2UgdGhhdCBhcyBuZWNlc3NhcnkgdW50aWwgd2UgcmVhY2ggTUFYX0VOVFJJRVNf UEVSX0NIVU5LLgorICogQW55IGNodW5rIHdob3NlIGFsbG9jYXRlZCBzaXplIHJlYWNoZXMgTUFY X0VOVFJJRVNfUEVSX0NIVU5LIGlzIGNvbnZlcnRlZAorICogdG8gYSBiaXRtYXAsIGFuZCB0aHVz IG5ldmVyIG5lZWRzIHRvIGdyb3cgZnVydGhlci4KKyAqLworI2RlZmluZSBCTE9DS1NfUEVSX0NI VU5LCQkoMSA8PCAxNikKKyNkZWZpbmUgQkxPQ0tTX1BFUl9FTlRSWQkJKEJJVFNfUEVSX0JZVEUg KiBzaXplb2YodWludDE2KSkKKyNkZWZpbmUgTUFYX0VOVFJJRVNfUEVSX0NIVU5LCShCTE9DS1Nf UEVSX0NIVU5LIC8gQkxPQ0tTX1BFUl9FTlRSWSkKKyNkZWZpbmUgSU5JVElBTF9FTlRSSUVTX1BF Ul9DSFVOSwkxNgordHlwZWRlZiB1aW50MTYgKkJsb2NrUmVmVGFibGVDaHVuazsKKworLyoKKyAq IFN0YXRlIGZvciBvbmUgcmVsYXRpb24gZm9yay4KKyAqCisgKiAncmxvY2F0b3InIGFuZCAnZm9y a251bScgaWRlbnRpZnkgdGhlIHJlbGF0aW9uIGZvcmsgdG8gd2hpY2ggdGhpcyBlbnRyeQorICog cGVydGFpbnMuCisgKgorICogJ2xpbWl0X2Jsb2NrJyBpcyB0aGUgc2hvcnRlc3Qga25vd24gbGVu Z3RoIG9mIHRoZSByZWxhdGlvbiBpbiBibG9ja3MKKyAqIHdpdGhpbiB0aGUgTFNOIHJhbmdlIGNv dmVyZWQgYnkgYSBwYXJ0aWN1bGFyIGJsb2NrIHJlZmVyZW5jZSB0YWJsZS4KKyAqIEl0IHNob3Vs ZCBiZSBzZXQgdG8gMCBpZiB0aGUgcmVsYXRpb24gZm9yayBpcyBjcmVhdGVkIG9yIGRyb3BwZWQu IElmIHRoZQorICogcmVsYXRpb24gZm9yayBpcyB0cnVuY2F0ZWQsIGl0IHNob3VsZCBiZSBzZXQg dG8gdGhlIG51bWJlciBvZiBibG9ja3MgdGhhdAorICogcmVtYWluIGFmdGVyIHRydW5jYXRpb24u CisgKgorICogJ25jaHVua3MnIGlzIHRoZSBhbGxvY2F0ZWQgbGVuZ3RoIG9mIGVhY2ggb2YgdGhl IHRocmVlIGFycmF5cyB0aGF0IGZvbGxvdy4KKyAqIFdlIGNhbiBvbmx5IHJlcHJlc2VudCB0aGUg c3RhdHVzIG9mIGJsb2NrIG51bWJlcnMgbGVzcyB0aGFuIG5jaHVua3MgKgorICogQkxPQ0tTX1BF Ul9DSFVOSy4KKyAqCisgKiAnY2h1bmtfc2l6ZScgaXMgYW4gYXJyYXkgc3RvcmluZyB0aGUgYWxs b2NhdGVkIHNpemUgb2YgZWFjaCBjaHVuay4KKyAqCisgKiAnY2h1bmtfdXNhZ2UnIGlzIGFuIGFy cmF5IHN0b3JpbmcgdGhlIG51bWJlciBvZiBlbGVtZW50cyB1c2VkIGluIGVhY2gKKyAqIGNodW5r LiBJZiB0aGF0IHZhbHVlIGlzIGxlc3MgdGhhbiBNQVhfRU5UUklFU19QRVJfQ0hVTkssIHRoZSBj b3JyZXNvbmRpbmcKKyAqIGNodW5rIGlzIHVzZWQgYXMgYW4gYXJyYXk7IGVsc2UgdGhlIGNvcnJl c3BvbmRpbmcgY2h1bmsgaXMgdXNlZCBhcyBhIGJpdG1hcC4KKyAqIFdoZW4gdXNlZCBhcyBhIGJp dG1hcCwgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgZmlyc3QgYXJyYXkgZWxlbWVu dAorICogaXMgdGhlIHN0YXR1cyBvZiB0aGUgbG93ZXN0LW51bWJlcmVkIGJsb2NrIGNvdmVyZWQg YnkgdGhpcyBjaHVuay4KKyAqCisgKiAnY2h1bmtfZGF0YScgaXMgdGhlIGFycmF5IG9mIGNodW5r cy4KKyAqLworc3RydWN0IEJsb2NrUmVmVGFibGVFbnRyeQoreworCUJsb2NrUmVmVGFibGVLZXkg a2V5OworCUJsb2NrTnVtYmVyIGxpbWl0X2Jsb2NrOworCWNoYXIJCXN0YXR1czsKKwl1aW50MzIJ CW5jaHVua3M7CisJdWludDE2CSAgICpjaHVua19zaXplOworCXVpbnQxNgkgICAqY2h1bmtfdXNh Z2U7CisJQmxvY2tSZWZUYWJsZUNodW5rICpjaHVua19kYXRhOworfTsKKworLyogRGVjbGFyZSBh bmQgZGVmaW5lIGEgaGFzaCB0YWJsZSBvdmVyIHR5cGUgQmxvY2tSZWZUYWJsZUVudHJ5LiAqLwor I2RlZmluZSBTSF9QUkVGSVggYmxvY2tyZWZ0YWJsZQorI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUg QmxvY2tSZWZUYWJsZUVudHJ5CisjZGVmaW5lIFNIX0tFWV9UWVBFIEJsb2NrUmVmVGFibGVLZXkK KyNkZWZpbmUgU0hfS0VZIGtleQorI2RlZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KSBcCisJaGFz aF9ieXRlcygoY29uc3QgdW5zaWduZWQgY2hhciAqKSAma2V5LCBzaXplb2YoQmxvY2tSZWZUYWJs ZUtleSkpCisjZGVmaW5lIFNIX0VRVUFMKHRiLCBhLCBiKSAobWVtY21wKCZhLCAmYiwgc2l6ZW9m KEJsb2NrUmVmVGFibGVLZXkpKSA9PSAwKQorI2RlZmluZSBTSF9TQ09QRSBzdGF0aWMgaW5saW5l CisjaWZkZWYgRlJPTlRFTkQKKyNkZWZpbmUgU0hfUkFXX0FMTE9DQVRPUiBwZ19tYWxsb2MwCisj ZW5kaWYKKyNkZWZpbmUgU0hfREVGSU5FCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNpbmNsdWRlICJs aWIvc2ltcGxlaGFzaC5oIgorCisvKgorICogQSBibG9jayByZWZlcmVuY2UgdGFibGUgaXMgYmFz aWNhbGx5IGp1c3QgdGhlIGhhc2ggdGFibGUsIGJ1dCB3ZSBkb24ndAorICogd2FudCB0byBleHBv c2UgdGhhdCB0byBvdXRzaWRlIGNhbGxlcnMuCisgKgorICogV2Uga2VlcCB0cmFjayBvZiB0aGUg bWVtb3J5IGNvbnRleHQgaW4gdXNlIGV4cGxpY2l0bHkgdG9vLCBzbyB0aGF0IGl0J3MKKyAqIGVh c3kgdG8gcGxhY2UgYWxsIG9mIG91ciBhbGxvY2F0aW9ucyBpbiB0aGUgc2FtZSBjb250ZXh0Lgor ICovCitzdHJ1Y3QgQmxvY2tSZWZUYWJsZQoreworCWJsb2NrcmVmdGFibGVfaGFzaCAqaGFzaDsK KyNpZm5kZWYgRlJPTlRFTkQKKwlNZW1vcnlDb250ZXh0IG1jeHQ7CisjZW5kaWYKK307CisKKy8q CisgKiBPbi1kaXNrIHNlcmlhbGl6YXRpb24gZm9ybWF0IGZvciBibG9jayByZWZlcmVuY2UgdGFi bGUgZW50cmllcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRF bnRyeQoreworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yOworCUZvcmtOdW1iZXIJZm9ya251bTsK KwlCbG9ja051bWJlciBsaW1pdF9ibG9jazsKKwl1aW50MzIJCW5jaHVua3M7Cit9IEJsb2NrUmVm VGFibGVTZXJpYWxpemVkRW50cnk7CisKKy8qCisgKiBCdWZmZXIgc2l6ZSwgc28gdGhhdCB3ZSBh dm9pZCBkb2luZyBtYW55IHNtYWxsIEkvT3MuCisgKi8KKyNkZWZpbmUgQlVGU0laRQkJCQkJNjU1 MzYKKworLyoKKyAqIEFkLWhvYyBidWZmZXIgZm9yIGZpbGUgSS9PLgorICovCit0eXBlZGVmIHN0 cnVjdCBCbG9ja1JlZlRhYmxlQnVmZmVyCit7CisJaW9fY2FsbGJhY2tfZm4gaW9fY2FsbGJhY2s7 CisJdm9pZAkgICAqaW9fY2FsbGJhY2tfYXJnOworCWNoYXIJCWRhdGFbQlVGU0laRV07CisJaW50 CQkJdXNlZDsKKwlpbnQJCQljdXJzb3I7CisJcGdfY3JjMzJjCWNyYzsKK30gQmxvY2tSZWZUYWJs ZUJ1ZmZlcjsKKworLyoKKyAqIFN0YXRlIGZvciBrZWVwaW5nIHRyYWNrIG9mIHByb2dyZXNzIHdo aWxlIGluY3JlbWVudGFsbHkgcmVhZGluZyBhIGJsb2NrCisgKiB0YWJsZSByZWZlcmVuY2UgZmls ZSBmcm9tIGRpc2suCisgKgorICogdG90YWxfY2h1bmtzIG1lYW5zIHRoZSBudW1iZXIgb2YgY2h1 bmtzIGZvciB0aGUgUmVsRmlsZUxvY2F0b3IvRm9ya051bWJlcgorICogY29tYmluYXRpb24gdGhh dCBpcyBjdXJlbnRseSBiZWluZyByZWFkLCBhbmQgY29uc3VtZWRfY2h1bmtzIGlzIHRoZSBudW1i ZXIKKyAqIG9mIHRob3NlIHRoYXQgaGF2ZSBiZWVuIHJlYWQuIChXZSBhbHdheXMgcmVhZCBhbGwg dGhlIGluZm9ybWF0aW9uIGZvcgorICogYSBzaW5nbGUgY2h1bmsgYXQgb25lIHRpbWUsIHNvIHdl IGRvbid0IG5lZWQgdG8gYmUgYWJsZSB0byByZXByZXNlbnQgdGhlCisgKiBzdGF0ZSB3aGVyZSBh IGNodW5rIGhhcyBiZWVuIHBhcnRpYWxseSByZWFkLikKKyAqCisgKiBjaHVua19zaXplIGlzIHRo ZSBhcnJheSBvZiBjaHVuayBzaXplcy4gVGhlIGxlbmd0aCBpcyBnaXZlbiBieSB0b3RhbF9jaHVu a3MuCisgKgorICogY2h1bmtfZGF0YSBob2xkcyB0aGUgY3VycmVudCBjaHVuay4KKyAqCisgKiBj aHVua19wb3NpdGlvbiBoZWxwcyB1cyBmaWd1cmUgb3V0IGhvdyBtdWNoIHByb2dyZXNzIHdlJ3Zl IG1hZGUgaW4gcmV0dXJuaW5nCisgKiB0aGUgYmxvY2sgbnVtYmVycyBmb3IgdGhlIGN1cnJlbnQg Y2h1bmsgdG8gdGhlIGNhbGxlci4gSWYgdGhlIGNodW5rIGlzIGEKKyAqIGJpdG1hcCwgaXQncyB0 aGUgbnVtYmVyIG9mIGJpdHMgd2UndmUgc2Nhbm5lZDsgb3RoZXJ3aXNlLCBpdCdzIHRoZSBudW1i ZXIKKyAqIG9mIGNodW5rIGVudHJpZXMgd2UndmUgc2Nhbm5lZC4KKyAqLworc3RydWN0IEJsb2Nr UmVmVGFibGVSZWFkZXIKK3sKKwlCbG9ja1JlZlRhYmxlQnVmZmVyIGJ1ZmZlcjsKKwljaGFyCSAg ICplcnJvcl9maWxlbmFtZTsKKwlyZXBvcnRfZXJyb3JfZm4gZXJyb3JfY2FsbGJhY2s7CisJdm9p ZAkgICAqZXJyb3JfY2FsbGJhY2tfYXJnOworCXVpbnQzMgkJdG90YWxfY2h1bmtzOworCXVpbnQz MgkJY29uc3VtZWRfY2h1bmtzOworCXVpbnQxNgkgICAqY2h1bmtfc2l6ZTsKKwl1aW50MTYJCWNo dW5rX2RhdGFbTUFYX0VOVFJJRVNfUEVSX0NIVU5LXTsKKwl1aW50MzIJCWNodW5rX3Bvc2l0aW9u OworfTsKKworLyoKKyAqIFN0YXRlIGZvciBrZWVwaW5nIHRyYWNrIG9mIHByb2dyZXNzIHdoaWxl IGluY3JlbWVudGFsbHkgd3JpdGluZyBhIGJsb2NrCisgKiByZWZlcmVuY2UgdGFibGUgZmlsZSB0 byBkaXNrLgorICovCitzdHJ1Y3QgQmxvY2tSZWZUYWJsZVdyaXRlcgoreworCUJsb2NrUmVmVGFi bGVCdWZmZXIgYnVmZmVyOworfTsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcy4gKi8KK3N0YXRp YyBpbnQJQmxvY2tSZWZUYWJsZUNvbXBhcmF0b3IoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAq Yik7CitzdGF0aWMgdm9pZCBCbG9ja1JlZlRhYmxlRmx1c2goQmxvY2tSZWZUYWJsZUJ1ZmZlciAq YnVmZmVyKTsKK3N0YXRpYyB2b2lkIEJsb2NrUmVmVGFibGVSZWFkKEJsb2NrUmVmVGFibGVSZWFk ZXIgKnJlYWRlciwgdm9pZCAqZGF0YSwKKwkJCQkJCQkgIGludCBsZW5ndGgpOworc3RhdGljIHZv aWQgQmxvY2tSZWZUYWJsZVdyaXRlKEJsb2NrUmVmVGFibGVCdWZmZXIgKmJ1ZmZlciwgdm9pZCAq ZGF0YSwKKwkJCQkJCQkgICBpbnQgbGVuZ3RoKTsKK3N0YXRpYyB2b2lkIEJsb2NrUmVmVGFibGVG aWxlVGVybWluYXRlKEJsb2NrUmVmVGFibGVCdWZmZXIgKmJ1ZmZlcik7CisKKy8qCisgKiBDcmVh dGUgYW4gZW1wdHkgYmxvY2sgcmVmZXJlbmNlIHRhYmxlLgorICovCitCbG9ja1JlZlRhYmxlICoK K0NyZWF0ZUVtcHR5QmxvY2tSZWZUYWJsZSh2b2lkKQoreworCUJsb2NrUmVmVGFibGUgKmJydGFi ID0gcGFsbG9jKHNpemVvZihCbG9ja1JlZlRhYmxlKSk7CisKKwkvKgorCSAqIEV2ZW4gY29tcGxl dGVseSBlbXB0eSBkYXRhYmFzZSBoYXMgYSBmZXcgaHVuZHJlZCByZWxhdGlvbiBmb3Jrcywgc28g aXQKKwkgKiBzZWVtcyBiZXN0IHRvIHNpemUgdGhlIGhhc2ggb24gdGhlIGFzc3VtcHRpb24gdGhh dCB3ZSdyZSBnb2luZyB0byBoYXZlCisJICogYXQgbGVhc3QgYSBmZXcgdGhvdXNhbmQgZW50cmll cy4KKwkgKi8KKyNpZmRlZiBGUk9OVEVORAorCWJydGFiLT5oYXNoID0gYmxvY2tyZWZ0YWJsZV9j cmVhdGUoNDA5NiwgTlVMTCk7CisjZWxzZQorCWJydGFiLT5tY3h0ID0gQ3VycmVudE1lbW9yeUNv bnRleHQ7CisJYnJ0YWItPmhhc2ggPSBibG9ja3JlZnRhYmxlX2NyZWF0ZShicnRhYi0+bWN4dCwg NDA5NiwgTlVMTCk7CisjZW5kaWYKKworCXJldHVybiBicnRhYjsKK30KKworLyoKKyAqIFNldCB0 aGUgImxpbWl0IGJsb2NrIiBmb3IgYSByZWxhdGlvbiBmb3JrIGFuZCBmb3JnZXQgYW55IG1vZGlm aWVkIGJsb2NrcworICogd2l0aCBlcXVhbCBvciBoaWdoZXIgYmxvY2sgbnVtYmVycy4KKyAqCisg KiBUaGUgImxpbWl0IGJsb2NrIiBpcyB0aGUgc2hvcnRlc3Qga25vd24gbGVuZ3RoIG9mIHRoZSBy ZWxhdGlvbiB3aXRoaW4gdGhlCisgKiByYW5nZSBvZiBXQUwgcmVjb3JkcyBjb3ZlcmVkIGJ5IHRo aXMgYmxvY2sgcmVmZXJlbmNlIHRhYmxlLgorICovCit2b2lkCitCbG9ja1JlZlRhYmxlU2V0TGlt aXRCbG9jayhCbG9ja1JlZlRhYmxlICpicnRhYiwKKwkJCQkJCSAgIGNvbnN0IFJlbEZpbGVMb2Nh dG9yICpybG9jYXRvciwKKwkJCQkJCSAgIEZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJCSAgIEJs b2NrTnVtYmVyIGxpbWl0X2Jsb2NrKQoreworCUJsb2NrUmVmVGFibGVFbnRyeSAqYnJ0ZW50cnk7 CisJQmxvY2tSZWZUYWJsZUtleSBrZXkgPSB7MH07IC8qIG1ha2Ugc3VyZSBhbnkgcGFkZGluZyBp cyB6ZXJvICovCisJYm9vbAkJZm91bmQ7CisKKwltZW1jcHkoJmtleS5ybG9jYXRvciwgcmxvY2F0 b3IsIHNpemVvZihSZWxGaWxlTG9jYXRvcikpOworCWtleS5mb3JrbnVtID0gZm9ya251bTsKKwli cnRlbnRyeSA9IGJsb2NrcmVmdGFibGVfaW5zZXJ0KGJydGFiLT5oYXNoLCBrZXksICZmb3VuZCk7 CisKKwlpZiAoIWZvdW5kKQorCXsKKwkJLyoKKwkJICogV2UgaGF2ZSBubyBleGlzdGluZyBkYXRh IGFib3V0IHRoaXMgcmVsYXRpb24gZm9yaywgc28ganVzdCByZWNvcmQKKwkJICogdGhlIGxpbWl0 X2Jsb2NrIHZhbHVlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIsIGFuZCBtYWtlIHN1cmUgb3RoZXIK KwkJICogcGFydHMgb2YgdGhlIGVudHJ5IGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4KKwkJICov CisJCWJydGVudHJ5LT5saW1pdF9ibG9jayA9IGxpbWl0X2Jsb2NrOworCQlicnRlbnRyeS0+bmNo dW5rcyA9IDA7CisJCWJydGVudHJ5LT5jaHVua19zaXplID0gTlVMTDsKKwkJYnJ0ZW50cnktPmNo dW5rX3VzYWdlID0gTlVMTDsKKwkJYnJ0ZW50cnktPmNodW5rX2RhdGEgPSBOVUxMOworCQlyZXR1 cm47CisJfQorCisJQmxvY2tSZWZUYWJsZUVudHJ5U2V0TGltaXRCbG9jayhicnRlbnRyeSwgbGlt aXRfYmxvY2spOworfQorCisvKgorICogTWFyayBhIGJsb2NrIGluIGEgZ2l2ZW4gcmVsYXRpb24g Zm9yayBhcyBrbm93biB0byBoYXZlIGJlZW4gbW9kaWZpZWQuCisgKi8KK3ZvaWQKK0Jsb2NrUmVm VGFibGVNYXJrQmxvY2tNb2RpZmllZChCbG9ja1JlZlRhYmxlICpicnRhYiwKKwkJCQkJCQkgICBj b25zdCBSZWxGaWxlTG9jYXRvciAqcmxvY2F0b3IsCisJCQkJCQkJICAgRm9ya051bWJlciBmb3Jr bnVtLAorCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsa251bSkKK3sKKwlCbG9ja1JlZlRhYmxlRW50 cnkgKmJydGVudHJ5OworCUJsb2NrUmVmVGFibGVLZXkga2V5ID0gezB9OyAvKiBtYWtlIHN1cmUg YW55IHBhZGRpbmcgaXMgemVybyAqLworCWJvb2wJCWZvdW5kOworI2lmbmRlZiBGUk9OVEVORAor CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhicnRhYi0+ bWN4dCk7CisjZW5kaWYKKworCW1lbWNweSgma2V5LnJsb2NhdG9yLCBybG9jYXRvciwgc2l6ZW9m KFJlbEZpbGVMb2NhdG9yKSk7CisJa2V5LmZvcmtudW0gPSBmb3JrbnVtOworCWJydGVudHJ5ID0g YmxvY2tyZWZ0YWJsZV9pbnNlcnQoYnJ0YWItPmhhc2gsIGtleSwgJmZvdW5kKTsKKworCWlmICgh Zm91bmQpCisJeworCQkvKgorCQkgKiBXZSB3YW50IHRvIHNldCB0aGUgaW5pdGlhbCBsaW1pdCBi bG9jayB2YWx1ZSB0byBzb21ldGhpbmcgaGlnaGVyCisJCSAqIHRoYW4gYW55IGxlZ2FsIGJsb2Nr IG51bWJlci4gSW52YWxpZEJsb2NrTnVtYmVyIGZpdHMgdGhlIGJpbGwuCisJCSAqLworCQlicnRl bnRyeS0+bGltaXRfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCWJydGVudHJ5LT5uY2h1 bmtzID0gMDsKKwkJYnJ0ZW50cnktPmNodW5rX3NpemUgPSBOVUxMOworCQlicnRlbnRyeS0+Y2h1 bmtfdXNhZ2UgPSBOVUxMOworCQlicnRlbnRyeS0+Y2h1bmtfZGF0YSA9IE5VTEw7CisJfQorCisJ QmxvY2tSZWZUYWJsZUVudHJ5TWFya0Jsb2NrTW9kaWZpZWQoYnJ0ZW50cnksIGZvcmtudW0sIGJs a251bSk7CisKKyNpZm5kZWYgRlJPTlRFTkQKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisjZW5kaWYKK30KKworLyoKKyAqIEdldCBhbiBlbnRyeSBmcm9tIGEgYmxvY2sgcmVm ZXJlbmNlIHRhYmxlLgorICoKKyAqIElmIHRoZSBlbnRyeSBkb2VzIG5vdCBleGlzdCwgdGhpcyBm dW5jdGlvbiByZXR1cm5zIE5VTEwuIE90aGVyd2lzZSwgaXQKKyAqIHJldHVybnMgdGhlIGVudHJ5 IGFuZCBzZXRzICpsaW1pdF9ibG9jayB0byB0aGUgdmFsdWUgZnJvbSB0aGUgZW50cnkuCisgKi8K K0Jsb2NrUmVmVGFibGVFbnRyeSAqCitCbG9ja1JlZlRhYmxlR2V0RW50cnkoQmxvY2tSZWZUYWJs ZSAqYnJ0YWIsIGNvbnN0IFJlbEZpbGVMb2NhdG9yICpybG9jYXRvciwKKwkJCQkJICBGb3JrTnVt YmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyICpsaW1pdF9ibG9jaykKK3sKKwlCbG9ja1JlZlRhYmxl S2V5IGtleSA9IHswfTsgLyogbWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIHplcm8gKi8KKwlCbG9j a1JlZlRhYmxlRW50cnkgKmVudHJ5OworCisJQXNzZXJ0KGxpbWl0X2Jsb2NrICE9IE5VTEwpOwor CisJbWVtY3B5KCZrZXkucmxvY2F0b3IsIHJsb2NhdG9yLCBzaXplb2YoUmVsRmlsZUxvY2F0b3Ip KTsKKwlrZXkuZm9ya251bSA9IGZvcmtudW07CisJZW50cnkgPSBibG9ja3JlZnRhYmxlX2xvb2t1 cChicnRhYi0+aGFzaCwga2V5KTsKKworCWlmIChlbnRyeSAhPSBOVUxMKQorCQkqbGltaXRfYmxv Y2sgPSBlbnRyeS0+bGltaXRfYmxvY2s7CisKKwlyZXR1cm4gZW50cnk7Cit9CisKKy8qCisgKiBH ZXQgYmxvY2sgbnVtYmVycyBmcm9tIGEgdGFibGUgZW50cnkuCisgKgorICogJ2Jsb2NrcycgbXVz dCBwb2ludCB0byBlbm91Z2ggc3BhY2UgdG8gaG9sZCBhdCBsZWFzdCAnbmJsb2NrcycgYmxvY2sK KyAqIG51bWJlcnMsIGFuZCBhbnkgYmxvY2sgbnVtYmVycyB3ZSBtYW5hZ2UgdG8gZ2V0IHdpbGwg YmUgd3JpdHRlbiB0aGVyZS4KKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBi bG9jayBudW1iZXJzIGFjdHVhbGx5IHdyaXR0ZW4uCisgKgorICogV2UgZG8gbm90IHJldHVybiBi bG9jayBudW1iZXJzIHVubGVzcyB0aGV5IGFyZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KKyAq IHN0YXJ0X2Jsa25vIGFuZCBzdHJpY3RseSBsZXNzIHRoYW4gc3RvcF9ibGtuby4KKyAqLworaW50 CitCbG9ja1JlZlRhYmxlRW50cnlHZXRCbG9ja3MoQmxvY2tSZWZUYWJsZUVudHJ5ICplbnRyeSwK KwkJCQkJCQlCbG9ja051bWJlciBzdGFydF9ibGtubywKKwkJCQkJCQlCbG9ja051bWJlciBzdG9w X2Jsa25vLAorCQkJCQkJCUJsb2NrTnVtYmVyICpibG9ja3MsCisJCQkJCQkJaW50IG5ibG9ja3Mp Cit7CisJdWludDMyCQlzdGFydF9jaHVua25vOworCXVpbnQzMgkJc3RvcF9jaHVua25vOworCXVp bnQzMgkJY2h1bmtubzsKKwlpbnQJCQlucmVzdWx0cyA9IDA7CisKKwlBc3NlcnQoZW50cnkgIT0g TlVMTCk7CisKKwkvKgorCSAqIEZpZ3VyZSBvdXQgd2hpY2ggY2h1bmtzIGNvdWxkIHBvdGVudGlh bGx5IGNvbnRhaW4gYmxvY2tzIG9mIGludGVyZXN0LgorCSAqCisJICogV2UgbmVlZCB0byBiZSBj YXJlZnVsIGFib3V0IG92ZXJmbG93IGhlcmUsIGJlY2F1c2Ugc3RvcF9ibGtubyBjb3VsZCBiZQor CSAqIEludmFsaWRCbG9ja051bWJlciBvciBzb21ldGhpbmcgdmVyeSBjbG9zZSB0byBpdC4KKwkg Ki8KKwlzdGFydF9jaHVua25vID0gc3RhcnRfYmxrbm8gLyBCTE9DS1NfUEVSX0NIVU5LOworCXN0 b3BfY2h1bmtubyA9IHN0b3BfYmxrbm8gLyBCTE9DS1NfUEVSX0NIVU5LOworCWlmICgoc3RvcF9i bGtubyAlIEJMT0NLU19QRVJfQ0hVTkspICE9IDApCisJCSsrc3RvcF9jaHVua25vOworCWlmIChz dG9wX2NodW5rbm8gPiBlbnRyeS0+bmNodW5rcykKKwkJc3RvcF9jaHVua25vID0gZW50cnktPm5j aHVua3M7CisKKwkvKgorCSAqIExvb3Agb3ZlciBjaHVua3MuCisJICovCisJZm9yIChjaHVua25v ID0gc3RhcnRfY2h1bmtubzsgY2h1bmtubyA8IHN0b3BfY2h1bmtubzsgKytjaHVua25vKQorCXsK KwkJdWludDE2CQljaHVua191c2FnZSA9IGVudHJ5LT5jaHVua191c2FnZVtjaHVua25vXTsKKwkJ QmxvY2tSZWZUYWJsZUNodW5rIGNodW5rX2RhdGEgPSBlbnRyeS0+Y2h1bmtfZGF0YVtjaHVua25v XTsKKwkJdW5zaWduZWQJc3RhcnRfb2Zmc2V0ID0gMDsKKwkJdW5zaWduZWQJc3RvcF9vZmZzZXQg PSBCTE9DS1NfUEVSX0NIVU5LOworCisJCS8qCisJCSAqIElmIHRoZSBzdGFydCBhbmQvb3Igc3Rv cCBibG9jayBudW1iZXIgZmFsbHMgd2l0aGluIHRoaXMgY2h1bmssIHRoZQorCQkgKiB3aG9sZSBj aHVuayBtYXkgbm90IGJlIG9mIGludGVyZXN0LiBGaWd1cmUgb3V0IHdoaWNoIHBvcnRpb24gd2UK KwkJICogY2FyZSBhYm91dCwgaWYgaXQncyBub3QgdGhlIHdob2xlIHRoaW5nLgorCQkgKi8KKwkJ aWYgKGNodW5rbm8gPT0gc3RhcnRfY2h1bmtubykKKwkJCXN0YXJ0X29mZnNldCA9IHN0YXJ0X2Js a25vICUgQkxPQ0tTX1BFUl9DSFVOSzsKKwkJaWYgKGNodW5rbm8gPT0gc3RvcF9jaHVua25vIC0g MSkKKwkJCXN0b3Bfb2Zmc2V0ID0gc3RvcF9ibGtubyAlIEJMT0NLU19QRVJfQ0hVTks7CisKKwkJ LyoKKwkJICogSGFuZGxpbmcgZGlmZmVycyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIGFu IGFycmF5IG9mIG9mZnNldHMKKwkJICogb3IgYSBiaXRtYXAuCisJCSAqLworCQlpZiAoY2h1bmtf dXNhZ2UgPT0gTUFYX0VOVFJJRVNfUEVSX0NIVU5LKQorCQl7CisJCQl1bnNpZ25lZAlpOworCisJ CQkvKiBJdCdzIGEgYml0bWFwLCBzbyB0ZXN0IGV2ZXJ5IHJlbGV2YW50IGJpdC4gKi8KKwkJCWZv ciAoaSA9IHN0YXJ0X29mZnNldDsgaSA8IHN0b3Bfb2Zmc2V0OyArK2kpCisJCQl7CisJCQkJdWlu dDE2CQl3ID0gY2h1bmtfZGF0YVtpIC8gQkxPQ0tTX1BFUl9FTlRSWV07CisKKwkJCQlpZiAoKHcg JiAoMSA8PCAoaSAlIEJMT0NLU19QRVJfRU5UUlkpKSkgIT0gMCkKKwkJCQl7CisJCQkJCUJsb2Nr TnVtYmVyIGJsa25vID0gY2h1bmtubyAqIEJMT0NLU19QRVJfQ0hVTksgKyBpOworCisJCQkJCWJs b2Nrc1tucmVzdWx0cysrXSA9IGJsa25vOworCisJCQkJCS8qIEVhcmx5IGV4aXQgaWYgd2UgcnVu IG91dCBvZiBvdXRwdXQgc3BhY2UuICovCisJCQkJCWlmIChucmVzdWx0cyA9PSBuYmxvY2tzKQor CQkJCQkJcmV0dXJuIG5yZXN1bHRzOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJ CXVuc2lnbmVkCWk7CisKKwkJCS8qIEl0J3MgYW4gYXJyYXkgb2Ygb2Zmc2V0cywgc28gY2hlY2sg ZWFjaCBvbmUuICovCisJCQlmb3IgKGkgPSAwOyBpIDwgY2h1bmtfdXNhZ2U7ICsraSkKKwkJCXsK KwkJCQl1aW50MTYJCW9mZnNldCA9IGNodW5rX2RhdGFbaV07CisKKwkJCQlpZiAob2Zmc2V0ID49 IHN0YXJ0X29mZnNldCAmJiBvZmZzZXQgPCBzdG9wX29mZnNldCkKKwkJCQl7CisJCQkJCUJsb2Nr TnVtYmVyIGJsa25vID0gY2h1bmtubyAqIEJMT0NLU19QRVJfQ0hVTksgKyBvZmZzZXQ7CisKKwkJ CQkJYmxvY2tzW25yZXN1bHRzKytdID0gYmxrbm87CisKKwkJCQkJLyogRWFybHkgZXhpdCBpZiB3 ZSBydW4gb3V0IG9mIG91dHB1dCBzcGFjZS4gKi8KKwkJCQkJaWYgKG5yZXN1bHRzID09IG5ibG9j a3MpCisJCQkJCQlyZXR1cm4gbnJlc3VsdHM7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0 dXJuIG5yZXN1bHRzOworfQorCisvKgorICogU2VyaWFsaXplIGEgYmxvY2sgcmVmZXJlbmNlIHRh YmxlIHRvIGEgZmlsZS4KKyAqLwordm9pZAorV3JpdGVCbG9ja1JlZlRhYmxlKEJsb2NrUmVmVGFi bGUgKmJydGFiLAorCQkJCSAgIGlvX2NhbGxiYWNrX2ZuIHdyaXRlX2NhbGxiYWNrLAorCQkJCSAg IHZvaWQgKndyaXRlX2NhbGxiYWNrX2FyZykKK3sKKwlCbG9ja1JlZlRhYmxlU2VyaWFsaXplZEVu dHJ5ICpzZGF0YSA9IE5VTEw7CisJQmxvY2tSZWZUYWJsZUJ1ZmZlciBidWZmZXI7CisJdWludDMy CQltYWdpYyA9IEJMT0NLUkVGVEFCTEVfTUFHSUM7CisKKwkvKiBQcmVwYXJlIGJ1ZmZlci4gKi8K KwltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKEJsb2NrUmVmVGFibGVCdWZmZXIpKTsKKwlidWZm ZXIuaW9fY2FsbGJhY2sgPSB3cml0ZV9jYWxsYmFjazsKKwlidWZmZXIuaW9fY2FsbGJhY2tfYXJn ID0gd3JpdGVfY2FsbGJhY2tfYXJnOworCUlOSVRfQ1JDMzJDKGJ1ZmZlci5jcmMpOworCisJLyog V3JpdGUgbWFnaWMgbnVtYmVyLiAqLworCUJsb2NrUmVmVGFibGVXcml0ZSgmYnVmZmVyLCAmbWFn aWMsIHNpemVvZih1aW50MzIpKTsKKworCS8qIFdyaXRlIHRoZSBlbnRyaWVzLCBhc3N1bWluZyB0 aGVyZSBhcmUgc29tZS4gKi8KKwlpZiAoYnJ0YWItPmhhc2gtPm1lbWJlcnMgPiAwKQorCXsKKwkJ dW5zaWduZWQJaSA9IDA7CisJCWJsb2NrcmVmdGFibGVfaXRlcmF0b3IgaXQ7CisJCUJsb2NrUmVm VGFibGVFbnRyeSAqYnJ0ZW50cnk7CisKKwkJLyogRXh0cmFjdCBlbnRyaWVzIGludG8gc2VyaWFs aXphYmxlIGZvcm1hdCBhbmQgc29ydCB0aGVtLiAqLworCQlzZGF0YSA9CisJCQlwYWxsb2MoYnJ0 YWItPmhhc2gtPm1lbWJlcnMgKiBzaXplb2YoQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSkp OworCQlibG9ja3JlZnRhYmxlX3N0YXJ0X2l0ZXJhdGUoYnJ0YWItPmhhc2gsICZpdCk7CisJCXdo aWxlICgoYnJ0ZW50cnkgPSBibG9ja3JlZnRhYmxlX2l0ZXJhdGUoYnJ0YWItPmhhc2gsICZpdCkp ICE9IE5VTEwpCisJCXsKKwkJCUJsb2NrUmVmVGFibGVTZXJpYWxpemVkRW50cnkgKnNlbnRyeSA9 ICZzZGF0YVtpKytdOworCisJCQlzZW50cnktPnJsb2NhdG9yID0gYnJ0ZW50cnktPmtleS5ybG9j YXRvcjsKKwkJCXNlbnRyeS0+Zm9ya251bSA9IGJydGVudHJ5LT5rZXkuZm9ya251bTsKKwkJCXNl bnRyeS0+bGltaXRfYmxvY2sgPSBicnRlbnRyeS0+bGltaXRfYmxvY2s7CisJCQlzZW50cnktPm5j aHVua3MgPSBicnRlbnRyeS0+bmNodW5rczsKKworCQkJLyogdHJpbSB0cmFpbGluZyB6ZXJvIGVu dHJpZXMgKi8KKwkJCXdoaWxlIChzZW50cnktPm5jaHVua3MgPiAwICYmCisJCQkJICAgYnJ0ZW50 cnktPmNodW5rX3VzYWdlW3NlbnRyeS0+bmNodW5rcyAtIDFdID09IDApCisJCQkJc2VudHJ5LT5u Y2h1bmtzLS07CisJCX0KKwkJQXNzZXJ0KGkgPT0gYnJ0YWItPmhhc2gtPm1lbWJlcnMpOworCQlx c29ydChzZGF0YSwgaSwgc2l6ZW9mKEJsb2NrUmVmVGFibGVTZXJpYWxpemVkRW50cnkpLAorCQkJ ICBCbG9ja1JlZlRhYmxlQ29tcGFyYXRvcik7CisKKwkJLyogTG9vcCBvdmVyIGVudHJpZXMgaW4g c29ydGVkIG9yZGVyIGFuZCBzZXJpYWxpemUgZWFjaCBvbmUuICovCisJCWZvciAoaSA9IDA7IGkg PCBicnRhYi0+aGFzaC0+bWVtYmVyczsgKytpKQorCQl7CisJCQlCbG9ja1JlZlRhYmxlU2VyaWFs aXplZEVudHJ5ICpzZW50cnkgPSAmc2RhdGFbaV07CisJCQlCbG9ja1JlZlRhYmxlS2V5IGtleSA9 IHswfTsgLyogbWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIHplcm8gKi8KKwkJCXVuc2lnbmVkCWo7 CisKKwkJCS8qIFdyaXRlIHRoZSBzZXJpYWxpemVkIGVudHJ5IGl0c2VsZi4gKi8KKwkJCUJsb2Nr UmVmVGFibGVXcml0ZSgmYnVmZmVyLCBzZW50cnksCisJCQkJCQkJICAgc2l6ZW9mKEJsb2NrUmVm VGFibGVTZXJpYWxpemVkRW50cnkpKTsKKworCQkJLyogTG9vayB1cCB0aGUgb3JpZ2luYWwgZW50 cnkgc28gd2UgY2FuIGFjY2VzcyB0aGUgY2h1bmtzLiAqLworCQkJbWVtY3B5KCZrZXkucmxvY2F0 b3IsICZzZW50cnktPnJsb2NhdG9yLCBzaXplb2YoUmVsRmlsZUxvY2F0b3IpKTsKKwkJCWtleS5m b3JrbnVtID0gc2VudHJ5LT5mb3JrbnVtOworCQkJYnJ0ZW50cnkgPSBibG9ja3JlZnRhYmxlX2xv b2t1cChicnRhYi0+aGFzaCwga2V5KTsKKwkJCUFzc2VydChicnRlbnRyeSAhPSBOVUxMKTsKKwor CQkJLyogV3JpdGUgdGhlIHVudHJ1bmNhdGVkIHBvcnRpb24gb2YgdGhlIGNodW5rIGxlbmd0aCBh cnJheS4gKi8KKwkJCWlmIChzZW50cnktPm5jaHVua3MgIT0gMCkKKwkJCQlCbG9ja1JlZlRhYmxl V3JpdGUoJmJ1ZmZlciwgYnJ0ZW50cnktPmNodW5rX3VzYWdlLAorCQkJCQkJCQkgICBzZW50cnkt Pm5jaHVua3MgKiBzaXplb2YodWludDE2KSk7CisKKwkJCS8qIFdyaXRlIHRoZSBjb250ZW50cyBv ZiBlYWNoIGNodW5rLiAqLworCQkJZm9yIChqID0gMDsgaiA8IGJydGVudHJ5LT5uY2h1bmtzOyAr K2opCisJCQl7CisJCQkJaWYgKGJydGVudHJ5LT5jaHVua191c2FnZVtqXSA9PSAwKQorCQkJCQlj b250aW51ZTsKKwkJCQlCbG9ja1JlZlRhYmxlV3JpdGUoJmJ1ZmZlciwgYnJ0ZW50cnktPmNodW5r X2RhdGFbal0sCisJCQkJCQkJCSAgIGJydGVudHJ5LT5jaHVua191c2FnZVtqXSAqIHNpemVvZih1 aW50MTYpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIFdyaXRlIG91dCBhcHByb3ByaWF0ZSB0ZXJt aW5hdG9yIGFuZCBDUkMgYW5kIGZsdXNoIGJ1ZmZlci4gKi8KKwlCbG9ja1JlZlRhYmxlRmlsZVRl cm1pbmF0ZSgmYnVmZmVyKTsKK30KKworLyoKKyAqIFByZXBhcmUgdG8gaW5jcmVtZW50YWxseSBy ZWFkIGEgYmxvY2sgcmVmZXJlbmNlIHRhYmxlIGZpbGUuCisgKgorICogJ3JlYWRfY2FsbGJhY2sn IGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIHJlYWQgZGF0YSBmcm9tIHRoZQor ICogdW5kZXJseWluZyBmaWxlIChvciBvdGhlciBkYXRhIHNvdXJjZSkgaW50byBvdXIgaW50ZXJu YWwgYnVmZmVyLgorICoKKyAqICdyZWFkX2NhbGxiYWNrX2FyZycgaXMgYW4gb3BhcXVlIGFyZ3Vt ZW50IHRvIGJlIHBhc3NlZCB0byByZWFkX2NhbGxiYWNrLgorICoKKyAqICdlcnJvcl9maWxlbmFt ZScgaXMgdGhlIGZpbGVuYW1lIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGVycm9yIG1lc3Nh Z2VzCisgKiBpZiB0aGUgZmlsZSBpcyBmb3VuZCB0byBiZSBtYWxmb3JtZWQuIFRoZSB2YWx1ZSBp cyBub3QgY29waWVkLCBzbyB0aGUKKyAqIGNhbGxlciBzaG91bGQgZW5zdXJlIHRoYXQgaXQgcmVt YWlucyB2YWxpZCB1bnRpbCBkb25lIHdpdGggdGhpcworICogQmxvY2tSZWZUYWJsZVJlYWRlci4K KyAqCisgKiAnZXJyb3JfY2FsbGJhY2snIGlzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlmIHRo ZSBmaWxlIGlzIGZvdW5kIHRvIGJlCisgKiBtYWxmb3JtZWQuIFRoaXMgaXMgbm90IHVzZWQgZm9y IEkvTyBlcnJvcnMsIHdoaWNoIG11c3QgYmUgaGFuZGxlZCBpbnRlcm5hbGx5CisgKiBieSByZWFk X2NhbGxiYWNrLgorICoKKyAqICdlcnJvcl9jYWxsYmFja19hcmcnIGlzIGFuIG9wYXF1ZSBhcmd1 ZW50IHRvIGJlIHBhc3NlZCB0byBlcnJvcl9jYWxsYmFjay4KKyAqLworQmxvY2tSZWZUYWJsZVJl YWRlciAqCitDcmVhdGVCbG9ja1JlZlRhYmxlUmVhZGVyKGlvX2NhbGxiYWNrX2ZuIHJlYWRfY2Fs bGJhY2ssCisJCQkJCQkgIHZvaWQgKnJlYWRfY2FsbGJhY2tfYXJnLAorCQkJCQkJICBjaGFyICpl cnJvcl9maWxlbmFtZSwKKwkJCQkJCSAgcmVwb3J0X2Vycm9yX2ZuIGVycm9yX2NhbGxiYWNrLAor CQkJCQkJICB2b2lkICplcnJvcl9jYWxsYmFja19hcmcpCit7CisJQmxvY2tSZWZUYWJsZVJlYWRl ciAqcmVhZGVyOworCXVpbnQzMgkJbWFnaWM7CisKKwkvKiBJbml0aWFsaXplIGRhdGEgc3RydWN0 dXJlLiAqLworCXJlYWRlciA9IHBhbGxvYzAoc2l6ZW9mKEJsb2NrUmVmVGFibGVSZWFkZXIpKTsK KwlyZWFkZXItPmJ1ZmZlci5pb19jYWxsYmFjayA9IHJlYWRfY2FsbGJhY2s7CisJcmVhZGVyLT5i dWZmZXIuaW9fY2FsbGJhY2tfYXJnID0gcmVhZF9jYWxsYmFja19hcmc7CisJcmVhZGVyLT5lcnJv cl9maWxlbmFtZSA9IGVycm9yX2ZpbGVuYW1lOworCXJlYWRlci0+ZXJyb3JfY2FsbGJhY2sgPSBl cnJvcl9jYWxsYmFjazsKKwlyZWFkZXItPmVycm9yX2NhbGxiYWNrX2FyZyA9IGVycm9yX2NhbGxi YWNrX2FyZzsKKwlJTklUX0NSQzMyQyhyZWFkZXItPmJ1ZmZlci5jcmMpOworCisJLyogVmVyaWZ5 IG1hZ2ljIG51bWJlci4gKi8KKwlCbG9ja1JlZlRhYmxlUmVhZChyZWFkZXIsICZtYWdpYywgc2l6 ZW9mKHVpbnQzMikpOworCWlmIChtYWdpYyAhPSBCTE9DS1JFRlRBQkxFX01BR0lDKQorCQllcnJv cl9jYWxsYmFjayhlcnJvcl9jYWxsYmFja19hcmcsCisJCQkJCSAgICJmaWxlIFwiJXNcIiBoYXMg d3JvbmcgbWFnaWMgbnVtYmVyOiBleHBlY3RlZCAldSwgZm91bmQgJXUiLAorCQkJCQkgICBlcnJv cl9maWxlbmFtZSwKKwkJCQkJICAgQkxPQ0tSRUZUQUJMRV9NQUdJQywgbWFnaWMpOworCisJcmV0 dXJuIHJlYWRlcjsKK30KKworLyoKKyAqIFJlYWQgbmV4dCByZWxhdGlvbiBmb3JrIGNvdmVyZWQg YnkgdGhpcyBibG9jayByZWZlcmVuY2UgdGFibGUgZmlsZS4KKyAqCisgKiBBZnRlciBjYWxsaW5n IHRoaXMgZnVuY3Rpb24sIHlvdSBtdXN0IGNhbGwgQmxvY2tSZWZUYWJsZVJlYWRlckdldEJsb2Nr cworICogdW50aWwgaXQgcmV0dXJucyAwIGJlZm9yZSBjYWxsaW5nIGl0IGFnYWluLgorICovCiti b29sCitCbG9ja1JlZlRhYmxlUmVhZGVyTmV4dFJlbGF0aW9uKEJsb2NrUmVmVGFibGVSZWFkZXIg KnJlYWRlciwKKwkJCQkJCQkJUmVsRmlsZUxvY2F0b3IgKnJsb2NhdG9yLAorCQkJCQkJCQlGb3Jr TnVtYmVyICpmb3JrbnVtLAorCQkJCQkJCQlCbG9ja051bWJlciAqbGltaXRfYmxvY2spCit7CisJ QmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSBzZW50cnk7CisJQmxvY2tSZWZUYWJsZVNlcmlh bGl6ZWRFbnRyeSB6ZW50cnkgPSB7ezB9fTsKKworCS8qCisJICogU2FuaXR5IGNoZWNrOiBjYWxs ZXIgbXVzdCByZWFkIGFsbCBibG9ja3MgZnJvbSBhbGwgY2h1bmtzIGJlZm9yZSBtb3ZpbmcKKwkg KiBvbiB0byB0aGUgbmV4dCByZWxhdGlvbi4KKwkgKi8KKwlBc3NlcnQocmVhZGVyLT50b3RhbF9j aHVua3MgPT0gcmVhZGVyLT5jb25zdW1lZF9jaHVua3MpOworCisJLyogUmVhZCBzZXJpYWxpemVk IGVudHJ5LiAqLworCUJsb2NrUmVmVGFibGVSZWFkKHJlYWRlciwgJnNlbnRyeSwKKwkJCQkJICBz aXplb2YoQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSkpOworCisJLyoKKwkgKiBJZiB3ZSBq dXN0IHJlYWQgdGhlIHNlbnRpbmVsIGVudHJ5IGluZGljYXRpbmcgdGhhdCB3ZSd2ZSByZWFjaGVk IHRoZQorCSAqIGVuZCwgcmVhZCBhbmQgY2hlY2sgdGhlIENSQy4KKwkgKi8KKwlpZiAobWVtY21w KCZzZW50cnksICZ6ZW50cnksIHNpemVvZihCbG9ja1JlZlRhYmxlU2VyaWFsaXplZEVudHJ5KSkg PT0gMCkKKwl7CisJCXBnX2NyYzMyYwlleHBlY3RlZF9jcmM7CisJCXBnX2NyYzMyYwlhY3R1YWxf Y3JjOworCisJCS8qCisJCSAqIFdlIHdhbnQgdG8ga25vdyB0aGUgQ1JDIG9mIHRoZSBmaWxlIGV4 Y2x1ZGluZyB0aGUgNC1ieXRlIENSQworCQkgKiBpdHNlbGYsIHNvIGNvcHkgdGhlIGN1cnJlbnQg dmFsdWUgb2YgdGhlIENSQyBhY2N1bXVsYXRvciBiZWZvcmUKKwkJICogcmVhZGluZyB0aG9zZSBi eXRlcywgYW5kIHVzZSB0aGUgY29weSB0byBmaW5hbGl6ZSB0aGUgY2FsY3VsYXRpb24uCisJCSAq LworCQlleHBlY3RlZF9jcmMgPSByZWFkZXItPmJ1ZmZlci5jcmM7CisJCUZJTl9DUkMzMkMoZXhw ZWN0ZWRfY3JjKTsKKworCQkvKiBOb3cgd2UgY2FuIHJlYWQgdGhlIGFjdHVhbCB2YWx1ZS4gKi8K KwkJQmxvY2tSZWZUYWJsZVJlYWQocmVhZGVyLCAmYWN0dWFsX2NyYywgc2l6ZW9mKHBnX2NyYzMy YykpOworCisJCS8qIFRocm93IGFuIGVycm9yIGlmIHRoZXJlIGlzIGEgbWlzbWF0Y2guICovCisJ CWlmICghRVFfQ1JDMzJDKGV4cGVjdGVkX2NyYywgYWN0dWFsX2NyYykpCisJCQlyZWFkZXItPmVy cm9yX2NhbGxiYWNrKHJlYWRlci0+ZXJyb3JfY2FsbGJhY2tfYXJnLAorCQkJCQkJCQkgICAiZmls ZSBcIiVzXCIgaGFzIHdyb25nIGNoZWNrc3VtOiBleHBlY3RlZCAlMDhYLCBmb3VuZCAlMDhYIiwK KwkJCQkJCQkJICAgcmVhZGVyLT5lcnJvcl9maWxlbmFtZSwgZXhwZWN0ZWRfY3JjLCBhY3R1YWxf Y3JjKTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogUmVhZCBjaHVuayBzaXplIGFycmF5 LiAqLworCWlmIChyZWFkZXItPmNodW5rX3NpemUgIT0gTlVMTCkKKwkJcGZyZWUocmVhZGVyLT5j aHVua19zaXplKTsKKwlyZWFkZXItPmNodW5rX3NpemUgPSBwYWxsb2Moc2VudHJ5Lm5jaHVua3Mg KiBzaXplb2YodWludDE2KSk7CisJQmxvY2tSZWZUYWJsZVJlYWQocmVhZGVyLCByZWFkZXItPmNo dW5rX3NpemUsCisJCQkJCSAgc2VudHJ5Lm5jaHVua3MgKiBzaXplb2YodWludDE2KSk7CisKKwkv KiBTZXQgdXAgZm9yIGNodW5rIHNjYW4uICovCisJcmVhZGVyLT50b3RhbF9jaHVua3MgPSBzZW50 cnkubmNodW5rczsKKwlyZWFkZXItPmNvbnN1bWVkX2NodW5rcyA9IDA7CisKKwkvKiBSZXR1cm4g ZGF0YSB0byBjYWxsZXIuICovCisJbWVtY3B5KHJsb2NhdG9yLCAmc2VudHJ5LnJsb2NhdG9yLCBz aXplb2YoUmVsRmlsZUxvY2F0b3IpKTsKKwkqZm9ya251bSA9IHNlbnRyeS5mb3JrbnVtOworCSps aW1pdF9ibG9jayA9IHNlbnRyeS5saW1pdF9ibG9jazsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoK KyAqIEdldCBtb2RpZmllZCBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWxhdGlvbiBmb3Jr IHJldHVybmVkIGJ5CisgKiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0byBCbG9ja1JlZlRhYmxlUmVh ZGVyTmV4dFJlbGF0aW9uLgorICoKKyAqIE9uIHJldHVybiwgYmxvY2sgbnVtYmVycyB3aWxsIGJl IHdyaXR0ZW4gaW50byB0aGUgJ2Jsb2NrcycgYXJyYXksIHdob3NlCisgKiBsZW5ndGggc2hvdWxk IGJlIHBhc3NlZCB2aWEgJ25ibG9ja3MnLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIg b2YKKyAqIGVudHJpZXMgYWN0dWFsbHkgd3JpdHRlbiBpbnRvIHRoZSAnYmxvY2tzJyBhcnJheSwg d2hpY2ggbWF5IGJlIGxlc3MgdGhhbgorICogJ25ibG9ja3MnIGlmIHdlIHJ1biBvdXQgb2YgbW9k aWZpZWQgYmxvY2tzIGluIHRoZSByZWxhdGlvbiBmb3JrIGJlZm9yZQorICogd2UgcnVuIG91dCBv ZiByb29tIGluIHRoZSBhcnJheS4KKyAqLwordW5zaWduZWQKK0Jsb2NrUmVmVGFibGVSZWFkZXJH ZXRCbG9ja3MoQmxvY2tSZWZUYWJsZVJlYWRlciAqcmVhZGVyLAorCQkJCQkJCSBCbG9ja051bWJl ciAqYmxvY2tzLAorCQkJCQkJCSBpbnQgbmJsb2NrcykKK3sKKwl1bnNpZ25lZAlibG9ja3NfZm91 bmQgPSAwOworCisJLyogTXVzdCBwcm92aWRlIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgYmxvY2sg bnVtYmVyIHRvIGJlIHJldHVybmVkLiAqLworCUFzc2VydChuYmxvY2tzID4gMCk7CisKKwkvKiBM b29wIGNvbGxlY3RpbmcgYmxvY2tzIHRvIHJldHVybiB0byBjYWxsZXIuICovCisJZm9yICg7OykK Kwl7CisJCXVpbnQxNgkJbmV4dF9jaHVua19zaXplOworCisJCS8qCisJCSAqIElmIHdlJ3ZlIHJl YWQgYXQgbGVhc3Qgb25lIGNodW5rLCBtYXliZSBpdCBjb250YWlucyBzb21lIGJsb2NrCisJCSAq IG51bWJlcnMgdGhhdCBjb3VsZCBzYXRpc2Z5IGNhbGxlcidzIHJlcXVlc3QuCisJCSAqLworCQlp ZiAocmVhZGVyLT5jb25zdW1lZF9jaHVua3MgPiAwKQorCQl7CisJCQl1aW50MzIJCWNodW5rbm8g PSByZWFkZXItPmNvbnN1bWVkX2NodW5rcyAtIDE7CisJCQl1aW50MTYJCWNodW5rX3NpemUgPSBy ZWFkZXItPmNodW5rX3NpemVbY2h1bmtub107CisKKwkJCWlmIChjaHVua19zaXplID09IE1BWF9F TlRSSUVTX1BFUl9DSFVOSykKKwkJCXsKKwkJCQkvKiBCaXRtYXAgZm9ybWF0LCBzbyBzZWFyY2gg Zm9yIGJpdHMgdGhhdCBhcmUgc2V0LiAqLworCQkJCXdoaWxlIChyZWFkZXItPmNodW5rX3Bvc2l0 aW9uIDwgQkxPQ0tTX1BFUl9DSFVOSyAmJgorCQkJCQkgICBibG9ja3NfZm91bmQgPCBuYmxvY2tz KQorCQkJCXsKKwkJCQkJdWludDE2CQljaHVua29mZnNldCA9IHJlYWRlci0+Y2h1bmtfcG9zaXRp b247CisJCQkJCXVpbnQxNgkJdzsKKworCQkJCQl3ID0gcmVhZGVyLT5jaHVua19kYXRhW2NodW5r b2Zmc2V0IC8gQkxPQ0tTX1BFUl9FTlRSWV07CisJCQkJCWlmICgodyAmICgxdSA8PCAoY2h1bmtv ZmZzZXQgJSBCTE9DS1NfUEVSX0VOVFJZKSkpICE9IDApCisJCQkJCQlibG9ja3NbYmxvY2tzX2Zv dW5kKytdID0KKwkJCQkJCQljaHVua25vICogQkxPQ0tTX1BFUl9DSFVOSyArIGNodW5rb2Zmc2V0 OworCQkJCQkrK3JlYWRlci0+Y2h1bmtfcG9zaXRpb247CisJCQkJfQorCQkJfQorCQkJZWxzZQor CQkJeworCQkJCS8qIE5vdCBpbiBiaXRtYXAgZm9ybWF0LCBzbyBlYWNoIGVudHJ5IGlzIGEgMi1i eXRlIG9mZnNldC4gKi8KKwkJCQl3aGlsZSAocmVhZGVyLT5jaHVua19wb3NpdGlvbiA8IGNodW5r X3NpemUgJiYKKwkJCQkJICAgYmxvY2tzX2ZvdW5kIDwgbmJsb2NrcykKKwkJCQl7CisJCQkJCWJs b2Nrc1tibG9ja3NfZm91bmQrK10gPSBjaHVua25vICogQkxPQ0tTX1BFUl9DSFVOSworCQkJCQkJ KyByZWFkZXItPmNodW5rX2RhdGFbcmVhZGVyLT5jaHVua19wb3NpdGlvbl07CisJCQkJCSsrcmVh ZGVyLT5jaHVua19wb3NpdGlvbjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBXZSBmb3VuZCBl bm91Z2ggYmxvY2tzLCBzbyB3ZSdyZSBkb25lLiAqLworCQlpZiAoYmxvY2tzX2ZvdW5kID49IG5i bG9ja3MpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBXZSBkaWRuJ3QgZmluZCBlbm91Z2ggYmxv Y2tzLCBzbyB3ZSBtdXN0IG5lZWQgdGhlIG5leHQgY2h1bmsuIElmCisJCSAqIHRoZXJlIGFyZSBu b25lIGxlZnQsIHRob3VnaCwgdGhlbiB3ZSdyZSBkb25lIGFueXdheS4KKwkJICovCisJCWlmIChy ZWFkZXItPmNvbnN1bWVkX2NodW5rcyA9PSByZWFkZXItPnRvdGFsX2NodW5rcykKKwkJCWJyZWFr OworCisJCS8qCisJCSAqIFJlYWQgZGF0YSBmb3IgbmV4dCBjaHVuayBhbmQgcmVzZXQgc2NhbiBw b3NpdGlvbiB0byBiZWdpbm5pbmcgb2YKKwkJICogY2h1bmsuIE5vdGUgdGhhdCB0aGUgbmV4dCBj aHVuayBtaWdodCBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB3ZQorCQkgKiBjb25zdW1lIHRoZSBj aHVuayB3aXRob3V0IGFjdHVhbGx5IGNvbnN1bWluZyBhbnkgYnl0ZXMgZnJvbSB0aGUKKwkJICog dW5kZXJseWluZyBmaWxlLgorCQkgKi8KKwkJbmV4dF9jaHVua19zaXplID0gcmVhZGVyLT5jaHVu a19zaXplW3JlYWRlci0+Y29uc3VtZWRfY2h1bmtzXTsKKwkJaWYgKG5leHRfY2h1bmtfc2l6ZSA+ IDApCisJCQlCbG9ja1JlZlRhYmxlUmVhZChyZWFkZXIsIHJlYWRlci0+Y2h1bmtfZGF0YSwKKwkJ CQkJCQkgIG5leHRfY2h1bmtfc2l6ZSAqIHNpemVvZih1aW50MTYpKTsKKwkJKytyZWFkZXItPmNv bnN1bWVkX2NodW5rczsKKwkJcmVhZGVyLT5jaHVua19wb3NpdGlvbiA9IDA7CisJfQorCisJcmV0 dXJuIGJsb2Nrc19mb3VuZDsKK30KKworLyoKKyAqIFJlbGVhc2UgbWVtb3J5IHVzZWQgd2hpbGUg cmVhZGluZyBhIGJsb2NrIHJlZmVyZW5jZSB0YWJsZSBmcm9tIGEgZmlsZS4KKyAqLwordm9pZAor RGVzdHJveUJsb2NrUmVmVGFibGVSZWFkZXIoQmxvY2tSZWZUYWJsZVJlYWRlciAqcmVhZGVyKQor eworCWlmIChyZWFkZXItPmNodW5rX3NpemUgIT0gTlVMTCkKKwl7CisJCXBmcmVlKHJlYWRlci0+ Y2h1bmtfc2l6ZSk7CisJCXJlYWRlci0+Y2h1bmtfc2l6ZSA9IE5VTEw7CisJfQorCXBmcmVlKHJl YWRlcik7Cit9CisKKy8qCisgKiBQcmVwYXJlIHRvIHdyaXRlIGEgYmxvY2sgcmVmZXJlbmNlIHRh YmxlIGZpbGUgaW5jcmVtZW50YWxseS4KKyAqCisgKiBDYWxsZXIgbXVzdCBiZSBhYmxlIHRvIHN1 cHBseSBCbG9ja1JlZlRhYmxlRW50cnkgb2JqZWN0cyBzb3J0ZWQgaW4gdGhlCisgKiBhcHByb3By aWF0ZSBvcmRlci4KKyAqLworQmxvY2tSZWZUYWJsZVdyaXRlciAqCitDcmVhdGVCbG9ja1JlZlRh YmxlV3JpdGVyKGlvX2NhbGxiYWNrX2ZuIHdyaXRlX2NhbGxiYWNrLAorCQkJCQkJICB2b2lkICp3 cml0ZV9jYWxsYmFja19hcmcpCit7CisJQmxvY2tSZWZUYWJsZVdyaXRlciAqd3JpdGVyOworCXVp bnQzMgkJbWFnaWMgPSBCTE9DS1JFRlRBQkxFX01BR0lDOworCisJLyogUHJlcGFyZSBidWZmZXIg YW5kIENSQyBjaGVjayBhbmQgc2F2ZSBjYWxsYmFja3MuICovCisJd3JpdGVyID0gcGFsbG9jMChz aXplb2YoQmxvY2tSZWZUYWJsZVdyaXRlcikpOworCXdyaXRlci0+YnVmZmVyLmlvX2NhbGxiYWNr ID0gd3JpdGVfY2FsbGJhY2s7CisJd3JpdGVyLT5idWZmZXIuaW9fY2FsbGJhY2tfYXJnID0gd3Jp dGVfY2FsbGJhY2tfYXJnOworCUlOSVRfQ1JDMzJDKHdyaXRlci0+YnVmZmVyLmNyYyk7CisKKwkv KiBXcml0ZSBtYWdpYyBudW1iZXIuICovCisJQmxvY2tSZWZUYWJsZVdyaXRlKCZ3cml0ZXItPmJ1 ZmZlciwgJm1hZ2ljLCBzaXplb2YodWludDMyKSk7CisKKwlyZXR1cm4gd3JpdGVyOworfQorCisv KgorICogQXBwZW5kIG9uZSBlbnRyeSB0byBhIGJsb2NrIHJlZmVyZW5jZSB0YWJsZSBmaWxlLgor ICoKKyAqIE5vdGUgdGhhdCBlbnRyaWVzIG11c3QgYmUgd3JpdHRlbiBpbiB0aGUgcHJvcGVyIG9y ZGVyLCB0aGF0IGlzLCBzb3J0ZWQgYnkKKyAqIHRhYmxlc3BhY2UsIHRoZW4gZGF0YWJhc2UsIHRo ZW4gcmVsZmlsZW51bWJlciwgdGhlbiBmb3JrIG51bWJlci4gQ2FsbGVyCisgKiBpcyByZXNwb25z aWJsZSBmb3Igc3VwcGx5aW5nIGRhdGEgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmIHRoYXQgc2Vl bXMgaGFyZCwKKyAqIHVzZSBhbiBpbi1tZW1vcnkgQmxvY2tSZWZUYWJsZSBpbnN0ZWFkLgorICov Cit2b2lkCitCbG9ja1JlZlRhYmxlV3JpdGVFbnRyeShCbG9ja1JlZlRhYmxlV3JpdGVyICp3cml0 ZXIsIEJsb2NrUmVmVGFibGVFbnRyeSAqZW50cnkpCit7CisJQmxvY2tSZWZUYWJsZVNlcmlhbGl6 ZWRFbnRyeSBzZW50cnk7CisJdW5zaWduZWQJajsKKworCS8qIENvbnZlcnQgdG8gc2VyaWFsaXpl ZCBlbnRyeSBmb3JtYXQuICovCisJc2VudHJ5LnJsb2NhdG9yID0gZW50cnktPmtleS5ybG9jYXRv cjsKKwlzZW50cnkuZm9ya251bSA9IGVudHJ5LT5rZXkuZm9ya251bTsKKwlzZW50cnkubGltaXRf YmxvY2sgPSBlbnRyeS0+bGltaXRfYmxvY2s7CisJc2VudHJ5Lm5jaHVua3MgPSBlbnRyeS0+bmNo dW5rczsKKworCS8qIFRyaW0gdHJhaWxpbmcgemVybyBlbnRyaWVzLiAqLworCXdoaWxlIChzZW50 cnkubmNodW5rcyA+IDAgJiYgZW50cnktPmNodW5rX3VzYWdlW3NlbnRyeS5uY2h1bmtzIC0gMV0g PT0gMCkKKwkJc2VudHJ5Lm5jaHVua3MtLTsKKworCS8qIFdyaXRlIHRoZSBzZXJpYWxpemVkIGVu dHJ5IGl0c2VsZi4gKi8KKwlCbG9ja1JlZlRhYmxlV3JpdGUoJndyaXRlci0+YnVmZmVyLCAmc2Vu dHJ5LAorCQkJCQkgICBzaXplb2YoQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSkpOworCisJ LyogV3JpdGUgdGhlIHVudHJ1bmNhdGVkIHBvcnRpb24gb2YgdGhlIGNodW5rIGxlbmd0aCBhcnJh eS4gKi8KKwlpZiAoc2VudHJ5Lm5jaHVua3MgIT0gMCkKKwkJQmxvY2tSZWZUYWJsZVdyaXRlKCZ3 cml0ZXItPmJ1ZmZlciwgZW50cnktPmNodW5rX3VzYWdlLAorCQkJCQkJICAgc2VudHJ5Lm5jaHVu a3MgKiBzaXplb2YodWludDE2KSk7CisKKwkvKiBXcml0ZSB0aGUgY29udGVudHMgb2YgZWFjaCBj aHVuay4gKi8KKwlmb3IgKGogPSAwOyBqIDwgZW50cnktPm5jaHVua3M7ICsraikKKwl7CisJCWlm IChlbnRyeS0+Y2h1bmtfdXNhZ2Vbal0gPT0gMCkKKwkJCWNvbnRpbnVlOworCQlCbG9ja1JlZlRh YmxlV3JpdGUoJndyaXRlci0+YnVmZmVyLCBlbnRyeS0+Y2h1bmtfZGF0YVtqXSwKKwkJCQkJCSAg IGVudHJ5LT5jaHVua191c2FnZVtqXSAqIHNpemVvZih1aW50MTYpKTsKKwl9Cit9CisKKy8qCisg KiBGaW5hbGl6ZSBhbiBpbmNyZW1lbnRhbCB3cml0ZSBvZiBhIGJsb2NrIHJlZmVyZW5jZSB0YWJs ZSBmaWxlLgorICovCit2b2lkCitEZXN0cm95QmxvY2tSZWZUYWJsZVdyaXRlcihCbG9ja1JlZlRh YmxlV3JpdGVyICp3cml0ZXIpCit7CisJQmxvY2tSZWZUYWJsZUZpbGVUZXJtaW5hdGUoJndyaXRl ci0+YnVmZmVyKTsKKwlwZnJlZSh3cml0ZXIpOworfQorCisvKgorICogQWxsb2NhdGUgYSBzdGFu ZGFsb25lIEJsb2NrUmVmVGFibGVFbnRyeS4KKyAqCisgKiBXaGVuIHdlJ3JlIG1hbmlwdWxhdGlu ZyBhIGZ1bGwgaW4tbWVtb3J5IEJsb2NrUmVmVGFibGUsIHRoZSBlbnRyaWVzIGFyZQorICogcGFy dCBvZiB0aGUgaGFzaCB0YWJsZSBhbmQgYXJlIGFsbG9jYXRlZCBieSBzaW1wbGVoYXNoLiBUaGlz IHJvdXRpbmUgaXMKKyAqIHVzZWQgYnkgY2FsbGVycyB0aGF0IHdhbnQgdG8gd3JpdGUgb3V0IGEg QmxvY2tSZWZUYWJsZSB0byBhIGZpbGUgd2l0aG91dAorICogbmVlZGluZyB0byBzdG9yZSB0aGUg d2hvbGUgdGhpbmcgaW4gbWVtb3J5IGF0IG9uY2UuCisgKgorICogRW50cmllcyBhbGxvY2F0ZWQg YnkgdGhpcyBmdW5jdGlvbiBjYW4gYmUgbWFuaXB1bGF0ZWQgdXNpbmcgdGhlIGZ1bmN0aW9ucwor ICogQmxvY2tSZWZUYWJsZUVudHJ5U2V0TGltaXRCbG9jayBhbmQgQmxvY2tSZWZUYWJsZUVudHJ5 TWFya0Jsb2NrTW9kaWZpZWQKKyAqIGFuZCB0aGVuIHdyaXR0ZW4gdXNpbmcgQmxvY2tSZWZUYWJs ZVdyaXRlRW50cnkgYW5kIGZyZWVkIHVzaW5nCisgKiBCbG9ja1JlZlRhYmxlRnJlZUVudHJ5Lgor ICovCitCbG9ja1JlZlRhYmxlRW50cnkgKgorQ3JlYXRlQmxvY2tSZWZUYWJsZUVudHJ5KFJlbEZp bGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0pCit7CisJQmxvY2tSZWZUYWJs ZUVudHJ5ICplbnRyeSA9IHBhbGxvYzAoc2l6ZW9mKEJsb2NrUmVmVGFibGVFbnRyeSkpOworCisJ bWVtY3B5KCZlbnRyeS0+a2V5LnJsb2NhdG9yLCAmcmxvY2F0b3IsIHNpemVvZihSZWxGaWxlTG9j YXRvcikpOworCWVudHJ5LT5rZXkuZm9ya251bSA9IGZvcmtudW07CisJZW50cnktPmxpbWl0X2Js b2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCisJcmV0dXJuIGVudHJ5OworfQorCisvKgorICog VXBkYXRlIGEgQmxvY2tSZWZUYWJsZUVudHJ5IHdpdGggYSBuZXcgdmFsdWUgZm9yIHRoZSAibGlt aXQgYmxvY2siIGFuZAorICogZm9yZ2V0IGFueSBlcXVhbC1vci1oaWdoZXItbnVtYmVyZWQgbW9k aWZpZWQgYmxvY2tzLgorICoKKyAqIFRoZSAibGltaXQgYmxvY2siIGlzIHRoZSBzaG9ydGVzdCBr bm93biBsZW5ndGggb2YgdGhlIHJlbGF0aW9uIHdpdGhpbiB0aGUKKyAqIHJhbmdlIG9mIFdBTCBy ZWNvcmRzIGNvdmVyZWQgYnkgdGhpcyBibG9jayByZWZlcmVuY2UgdGFibGUuCisgKi8KK3ZvaWQK K0Jsb2NrUmVmVGFibGVFbnRyeVNldExpbWl0QmxvY2soQmxvY2tSZWZUYWJsZUVudHJ5ICplbnRy eSwKKwkJCQkJCQkJQmxvY2tOdW1iZXIgbGltaXRfYmxvY2spCit7CisJdW5zaWduZWQJY2h1bmtu bzsKKwl1bnNpZ25lZAlsaW1pdF9jaHVua25vOworCXVuc2lnbmVkCWxpbWl0X2NodW5rb2Zmc2V0 OworCUJsb2NrUmVmVGFibGVDaHVuayBsaW1pdF9jaHVuazsKKworCS8qIElmIHdlIGFscmVhZHkg aGF2ZSBhbiBlcXVhbCBvciBsb3dlciBsaW1pdCBibG9jaywgZG8gbm90aGluZy4gKi8KKwlpZiAo bGltaXRfYmxvY2sgPj0gZW50cnktPmxpbWl0X2Jsb2NrKQorCQlyZXR1cm47CisKKwkvKiBSZWNv cmQgdGhlIG5ldyBsaW1pdCBibG9jayB2YWx1ZS4gKi8KKwllbnRyeS0+bGltaXRfYmxvY2sgPSBs aW1pdF9ibG9jazsKKworCS8qCisJICogRmlndXJlIG91dCB3aGljaCBjaHVuayB3b3VsZCBzdG9y ZSB0aGUgc3RhdGUgb2YgdGhlIG5ldyBsaW1pdCBibG9jaywKKwkgKiBhbmQgd2hpY2ggb2Zmc2V0 IHdpdGhpbiB0aGF0IGNodW5rLgorCSAqLworCWxpbWl0X2NodW5rbm8gPSBsaW1pdF9ibG9jayAv IEJMT0NLU19QRVJfQ0hVTks7CisJbGltaXRfY2h1bmtvZmZzZXQgPSBsaW1pdF9ibG9jayAlIEJM T0NLU19QRVJfQ0hVTks7CisKKwkvKgorCSAqIElmIHRoZSBudW1iZXIgb2YgY2h1bmtzIGlzIG5v dCBsYXJnZSBlbm91Z2ggZm9yIGFueSBibG9ja3Mgd2l0aCBlcXVhbAorCSAqIG9yIGhpZ2hlciBi bG9jayBudW1iZXJzIHRvIGV4aXN0LCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgZnVydGhlciB0byBk by4KKwkgKi8KKwlpZiAobGltaXRfY2h1bmtubyA+PSBlbnRyeS0+bmNodW5rcykKKwkJcmV0dXJu OworCisJLyogRGlzY2FyZCBlbnRpcmUgY29udGVudHMgb2YgYW55IGhpZ2hlci1udW1iZXJlZCBj aHVua3MuICovCisJZm9yIChjaHVua25vID0gbGltaXRfY2h1bmtubyArIDE7IGNodW5rbm8gPCBl bnRyeS0+bmNodW5rczsgKytjaHVua25vKQorCQllbnRyeS0+Y2h1bmtfdXNhZ2VbY2h1bmtub10g PSAwOworCisJLyoKKwkgKiBOZXh0LCB3ZSBuZWVkIHRvIGRpc2NhcmQgYW55IG9mZnNldHMgd2l0 aGluIHRoZSBjaHVuayB0aGF0IHdvdWxkCisJICogY29udGFpbiB0aGUgbGltaXRfYmxvY2suIFdl IG11c3QgaGFuZGxlIHRoaXMgZGlmZmVyZW5seSBkZXBlbmRpbmcgb24KKwkgKiB3aGV0aGVyIHRo ZSBjaHVuayB0aGF0IHdvdWxkIGNvbnRhaW4gbGltaXRfYmxvY2sgaXMgYSBiaXRtYXAgb3IgYW4K KwkgKiBhcnJheSBvZiBvZmZzZXRzLgorCSAqLworCWxpbWl0X2NodW5rID0gZW50cnktPmNodW5r X2RhdGFbbGltaXRfY2h1bmtub107CisJaWYgKGVudHJ5LT5jaHVua191c2FnZVtsaW1pdF9jaHVu a25vXSA9PSBNQVhfRU5UUklFU19QRVJfQ0hVTkspCisJeworCQl1bnNpZ25lZAljaHVua29mZnNl dDsKKworCQkvKiBJdCdzIGEgYml0bWFwLiBVbnNldCBiaXRzLiAqLworCQlmb3IgKGNodW5rb2Zm c2V0ID0gbGltaXRfY2h1bmtvZmZzZXQ7IGNodW5rb2Zmc2V0IDwgQkxPQ0tTX1BFUl9DSFVOSzsK KwkJCSArK2NodW5rb2Zmc2V0KQorCQkJbGltaXRfY2h1bmtbY2h1bmtvZmZzZXQgLyBCTE9DS1Nf UEVSX0VOVFJZXSAmPQorCQkJCX4oMSA8PCAoY2h1bmtvZmZzZXQgJSBCTE9DS1NfUEVSX0VOVFJZ KSk7CisJfQorCWVsc2UKKwl7CisJCXVuc2lnbmVkCWksCisJCQkJCWogPSAwOworCisJCS8qIEl0 J3MgYW4gb2Zmc2V0IGFycmF5LiBGaWx0ZXIgb3V0IGxhcmdlIG9mZnNldHMuICovCisJCWZvciAo aSA9IDA7IGkgPCBlbnRyeS0+Y2h1bmtfdXNhZ2VbbGltaXRfY2h1bmtub107ICsraSkKKwkJewor CQkJQXNzZXJ0KGogPD0gaSk7CisJCQlpZiAobGltaXRfY2h1bmtbaV0gPCBsaW1pdF9jaHVua29m ZnNldCkKKwkJCQlsaW1pdF9jaHVua1tqKytdID0gbGltaXRfY2h1bmtbaV07CisJCX0KKwkJQXNz ZXJ0KGogPD0gZW50cnktPmNodW5rX3VzYWdlW2xpbWl0X2NodW5rbm9dKTsKKwkJZW50cnktPmNo dW5rX3VzYWdlW2xpbWl0X2NodW5rbm9dID0gajsKKwl9Cit9CisKKy8qCisgKiBNYXJrIGEgYmxv Y2sgaW4gYSBnaXZlbiBCbGtSZWZUYWJsZUVudHJ5IGFzIGtub3duIHRvIGhhdmUgYmVlbiBtb2Rp ZmllZC4KKyAqLwordm9pZAorQmxvY2tSZWZUYWJsZUVudHJ5TWFya0Jsb2NrTW9kaWZpZWQoQmxv Y2tSZWZUYWJsZUVudHJ5ICplbnRyeSwKKwkJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya251bSwKKwkJ CQkJCQkJCUJsb2NrTnVtYmVyIGJsa251bSkKK3sKKwl1bnNpZ25lZAljaHVua25vOworCXVuc2ln bmVkCWNodW5rb2Zmc2V0OworCXVuc2lnbmVkCWk7CisKKwkvKgorCSAqIFdoaWNoIGNodW5rIHNo b3VsZCBzdG9yZSB0aGUgc3RhdGUgb2YgdGhpcyBibG9jaz8gQW5kIHdoYXQgaXMgdGhlCisJICog b2Zmc2V0IG9mIHRoaXMgYmxvY2sgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoYXQgY2h1bms/ CisJICovCisJY2h1bmtubyA9IGJsa251bSAvIEJMT0NLU19QRVJfQ0hVTks7CisJY2h1bmtvZmZz ZXQgPSBibGtudW0gJSBCTE9DS1NfUEVSX0NIVU5LOworCisJLyoKKwkgKiBJZiAnbmNodW5rcycg aXNuJ3QgYmlnIGVub3VnaCBmb3IgdXMgdG8gYmUgYWJsZSB0byByZXByZXNlbnQgdGhlIHN0YXRl CisJICogb2YgdGhpcyBibG9jaywgd2UgbmVlZCB0byBlbmxhcmdlIG91ciBhcnJheXMuCisJICov CisJaWYgKGNodW5rbm8gPj0gZW50cnktPm5jaHVua3MpCisJeworCQl1bnNpZ25lZAltYXhfY2h1 bmtzOworCQl1bnNpZ25lZAlleHRyYV9jaHVua3M7CisKKwkJLyoKKwkJICogTmV3IGFycmF5IHNp emUgaXMgYSBwb3dlciBvZiAyLCBhdCBsZWFzdCAxNiwgYmlnIGVub3VnaCBzbyB0aGF0CisJCSAq IGNodW5rbm8gd2lsbCBiZSBhIHZhbGlkIGFycmF5IGluZGV4LgorCQkgKi8KKwkJbWF4X2NodW5r cyA9IE1heCgxNiwgZW50cnktPm5jaHVua3MpOworCQl3aGlsZSAobWF4X2NodW5rcyA8IGNodW5r bm8gKyAxKQorCQkJY2h1bmtubyAqPSAyOworCQlBc3NlcnQobWF4X2NodW5rcyA+IGNodW5rbm8p OworCQlleHRyYV9jaHVua3MgPSBtYXhfY2h1bmtzIC0gZW50cnktPm5jaHVua3M7CisKKwkJaWYg KGVudHJ5LT5uY2h1bmtzID09IDApCisJCXsKKwkJCWVudHJ5LT5jaHVua19zaXplID0gcGFsbG9j MChzaXplb2YodWludDE2KSAqIG1heF9jaHVua3MpOworCQkJZW50cnktPmNodW5rX3VzYWdlID0g cGFsbG9jMChzaXplb2YodWludDE2KSAqIG1heF9jaHVua3MpOworCQkJZW50cnktPmNodW5rX2Rh dGEgPQorCQkJCXBhbGxvYzAoc2l6ZW9mKEJsb2NrUmVmVGFibGVDaHVuaykgKiBtYXhfY2h1bmtz KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWVudHJ5LT5jaHVua19zaXplID0gcmVwYWxsb2MoZW50 cnktPmNodW5rX3NpemUsCisJCQkJCQkJCQkJIHNpemVvZih1aW50MTYpICogbWF4X2NodW5rcyk7 CisJCQltZW1zZXQoJmVudHJ5LT5jaHVua19zaXplW2VudHJ5LT5uY2h1bmtzXSwgMCwKKwkJCQkg ICBleHRyYV9jaHVua3MgKiBzaXplb2YodWludDE2KSk7CisJCQllbnRyeS0+Y2h1bmtfdXNhZ2Ug PSByZXBhbGxvYyhlbnRyeS0+Y2h1bmtfdXNhZ2UsCisJCQkJCQkJCQkJICBzaXplb2YodWludDE2 KSAqIG1heF9jaHVua3MpOworCQkJbWVtc2V0KCZlbnRyeS0+Y2h1bmtfdXNhZ2VbZW50cnktPm5j aHVua3NdLCAwLAorCQkJCSAgIGV4dHJhX2NodW5rcyAqIHNpemVvZih1aW50MTYpKTsKKwkJCWVu dHJ5LT5jaHVua19kYXRhID0gcmVwYWxsb2MoZW50cnktPmNodW5rX2RhdGEsCisJCQkJCQkJCQkJ IHNpemVvZihCbG9ja1JlZlRhYmxlQ2h1bmspICogbWF4X2NodW5rcyk7CisJCQltZW1zZXQoJmVu dHJ5LT5jaHVua19kYXRhW2VudHJ5LT5uY2h1bmtzXSwgMCwKKwkJCQkgICBleHRyYV9jaHVua3Mg KiBzaXplb2YoQmxvY2tSZWZUYWJsZUNodW5rKSk7CisJCX0KKwkJZW50cnktPm5jaHVua3MgPSBt YXhfY2h1bmtzOworCX0KKworCS8qCisJICogSWYgdGhlIGNodW5rIHRoYXQgY292ZXJzIHRoaXMg YmxvY2sgbnVtYmVyIGRvZXNuJ3QgZXhpc3QgeWV0LCBjcmVhdGUgaXQKKwkgKiBhcyBhbiBhcnJh eSBhbmQgYWRkIHRoZSBhcHByb3ByaWF0ZSBvZmZzZXQgdG8gaXQuIFdlIG1ha2UgaXQgcHJldHR5 CisJICogc21hbGwgaW5pdGlhbGx5LCBiZWNhdXNlIHRoZXJlIG1pZ2h0IG9ubHkgYmUgMSBvciBh IGZldyBibG9jaworCSAqIHJlZmVyZW5jZXMgaW4gdGhpcyBjaHVuayBhbmQgd2UgZG9uJ3Qgd2Fu dCB0byB1c2UgdXAgdG9vIG11Y2ggbWVtb3J5LgorCSAqLworCWlmIChlbnRyeS0+Y2h1bmtfc2l6 ZVtjaHVua25vXSA9PSAwKQorCXsKKwkJZW50cnktPmNodW5rX2RhdGFbY2h1bmtub10gPQorCQkJ cGFsbG9jKHNpemVvZih1aW50MTYpICogSU5JVElBTF9FTlRSSUVTX1BFUl9DSFVOSyk7CisJCWVu dHJ5LT5jaHVua19zaXplW2NodW5rbm9dID0gSU5JVElBTF9FTlRSSUVTX1BFUl9DSFVOSzsKKwkJ ZW50cnktPmNodW5rX2RhdGFbY2h1bmtub11bMF0gPSBjaHVua29mZnNldDsKKwkJZW50cnktPmNo dW5rX3VzYWdlW2NodW5rbm9dID0gMTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdGhl IG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgY2h1bmsgaXMgYWxyZWFkeSBtYXhpbXVtLCBpdCBt dXN0IGJlIGEKKwkgKiBiaXRtYXAuIEp1c3Qgc2V0IHRoZSBhcHByb3ByaWF0ZSBiaXQuCisJICov CisJaWYgKGVudHJ5LT5jaHVua191c2FnZVtjaHVua25vXSA9PSBNQVhfRU5UUklFU19QRVJfQ0hV TkspCisJeworCQlCbG9ja1JlZlRhYmxlQ2h1bmsgY2h1bmsgPSBlbnRyeS0+Y2h1bmtfZGF0YVtj aHVua25vXTsKKworCQljaHVua1tjaHVua29mZnNldCAvIEJMT0NLU19QRVJfRU5UUlldIHw9CisJ CQkxIDw8IChjaHVua29mZnNldCAlIEJMT0NLU19QRVJfRU5UUlkpOworCQlyZXR1cm47CisJfQor CisJLyoKKwkgKiBUaGVyZSBpcyBhbiBleGlzdGluZyBjaHVuayBhbmQgaXQncyBpbiBhcnJheSBm b3JtYXQuIExldCdzIGZpbmQgb3V0CisJICogd2hldGhlciBpdCBhbHJlYWR5IGhhcyBhbiBlbnRy eSBmb3IgdGhpcyBibG9jay4gSWYgc28sIHdlIGRvIG5vdCBuZWVkCisJICogdG8gZG8gYW55dGhp bmcuCisJICovCisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5jaHVua191c2FnZVtjaHVua25vXTsg KytpKQorCXsKKwkJaWYgKGVudHJ5LT5jaHVua19kYXRhW2NodW5rbm9dW2ldID09IGNodW5rb2Zm c2V0KQorCQkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdGhlIG51bWJlciBvZiBlbnRyaWVz IGN1cnJlbnRseSB1c2VkIGlzIG9uZSBsZXNzIHRoYW4gdGhlIG1heGltdW0sCisJICogaXQncyB0 aW1lIHRvIGNvbnZlcnQgdG8gYml0bWFwIGZvcm1hdC4KKwkgKi8KKwlpZiAoZW50cnktPmNodW5r X3VzYWdlW2NodW5rbm9dID09IE1BWF9FTlRSSUVTX1BFUl9DSFVOSyAtIDEpCisJeworCQlCbG9j a1JlZlRhYmxlQ2h1bmsgbmV3Y2h1bms7CisJCXVuc2lnbmVkCWo7CisKKwkJLyogQWxsb2NhdGUg YSBuZXcgY2h1bmsuICovCisJCW5ld2NodW5rID0gcGFsbG9jMChNQVhfRU5UUklFU19QRVJfQ0hV TksgKiBzaXplb2YodWludDE2KSk7CisKKwkJLyogU2V0IHRoZSBiaXQgZm9yIGVhY2ggZXhpc3Rp bmcgZW50cnkuICovCisJCWZvciAoaiA9IDA7IGogPCBlbnRyeS0+Y2h1bmtfdXNhZ2VbY2h1bmtu b107ICsraikKKwkJeworCQkJdW5zaWduZWQJY29mZiA9IGVudHJ5LT5jaHVua19kYXRhW2NodW5r bm9dW2pdOworCisJCQluZXdjaHVua1tjb2ZmIC8gQkxPQ0tTX1BFUl9FTlRSWV0gfD0KKwkJCQkx IDw8IChjb2ZmICUgQkxPQ0tTX1BFUl9FTlRSWSk7CisJCX0KKworCQkvKiBTZXQgdGhlIGJpdCBm b3IgdGhlIG5ldyBlbnRyeS4gKi8KKwkJbmV3Y2h1bmtbY2h1bmtvZmZzZXQgLyBCTE9DS1NfUEVS X0VOVFJZXSB8PQorCQkJMSA8PCAoY2h1bmtvZmZzZXQgJSBCTE9DS1NfUEVSX0VOVFJZKTsKKwor CQkvKiBTd2FwIHRoZSBuZXcgY2h1bmsgaW50byBwbGFjZSBhbmQgdXBkYXRlIG1ldGFkYXRhLiAq LworCQlwZnJlZShlbnRyeS0+Y2h1bmtfZGF0YVtjaHVua25vXSk7CisJCWVudHJ5LT5jaHVua19k YXRhW2NodW5rbm9dID0gbmV3Y2h1bms7CisJCWVudHJ5LT5jaHVua19zaXplW2NodW5rbm9dID0g TUFYX0VOVFJJRVNfUEVSX0NIVU5LOworCQllbnRyeS0+Y2h1bmtfdXNhZ2VbY2h1bmtub10gPSBN QVhfRU5UUklFU19QRVJfQ0hVTks7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE9LLCB3ZSBj dXJyZW50bHkgaGF2ZSBhbiBhcnJheSwgYW5kIHdlIGRvbid0IG5lZWQgdG8gY29udmVydCB0byBh CisJICogYml0bWFwLCBidXQgd2UgZG8gbmVlZCB0byBhZGQgYSBuZXcgZWxlbWVudC4gSWYgdGhl cmUncyBub3QgZW5vdWdoCisJICogcm9vbSwgd2UnbGwgaGF2ZSB0byBleHBhbmQgdGhlIGFycmF5 LgorCSAqLworCWlmIChlbnRyeS0+Y2h1bmtfdXNhZ2VbY2h1bmtub10gPT0gZW50cnktPmNodW5r X3NpemVbY2h1bmtub10pCisJeworCQl1bnNpZ25lZAluZXdzaXplID0gZW50cnktPmNodW5rX3Np emVbY2h1bmtub10gKiAyOworCisJCUFzc2VydChuZXdzaXplIDw9IE1BWF9FTlRSSUVTX1BFUl9D SFVOSyk7CisJCWVudHJ5LT5jaHVua19kYXRhW2NodW5rbm9dID0gcmVwYWxsb2MoZW50cnktPmNo dW5rX2RhdGFbY2h1bmtub10sCisJCQkJCQkJCQkJCSAgbmV3c2l6ZSAqIHNpemVvZih1aW50MTYp KTsKKwkJZW50cnktPmNodW5rX3NpemVbY2h1bmtub10gPSBuZXdzaXplOworCX0KKworCS8qIE5v dyB3ZSBjYW4gYWRkIHRoZSBuZXcgZW50cnkuICovCisJZW50cnktPmNodW5rX2RhdGFbY2h1bmtu b11bZW50cnktPmNodW5rX3VzYWdlW2NodW5rbm9dXSA9CisJCWNodW5rb2Zmc2V0OworCWVudHJ5 LT5jaHVua191c2FnZVtjaHVua25vXSsrOworfQorCisvKgorICogUmVsZWFzZSBtZW1vcnkgZm9y IGEgQmxvY2tSZWZUYWJsRW50cnkgdGhhdCB3YXMgY3JlYXRlZCBieQorICogQ3JlYXRlQmxvY2tS ZWZUYWJsZUVudHJ5LgorICovCit2b2lkCitCbG9ja1JlZlRhYmxlRnJlZUVudHJ5KEJsb2NrUmVm VGFibGVFbnRyeSAqZW50cnkpCit7CisJaWYgKGVudHJ5LT5jaHVua19zaXplICE9IE5VTEwpCisJ eworCQlwZnJlZShlbnRyeS0+Y2h1bmtfc2l6ZSk7CisJCWVudHJ5LT5jaHVua19zaXplID0gTlVM TDsKKwl9CisKKwlpZiAoZW50cnktPmNodW5rX3VzYWdlICE9IE5VTEwpCisJeworCQlwZnJlZShl bnRyeS0+Y2h1bmtfdXNhZ2UpOworCQllbnRyeS0+Y2h1bmtfdXNhZ2UgPSBOVUxMOworCX0KKwor CWlmIChlbnRyeS0+Y2h1bmtfZGF0YSAhPSBOVUxMKQorCXsKKwkJcGZyZWUoZW50cnktPmNodW5r X2RhdGEpOworCQllbnRyeS0+Y2h1bmtfZGF0YSA9IE5VTEw7CisJfQorCisJcGZyZWUoZW50cnkp OworfQorCisvKgorICogQ29tcGFyYXRvciBmb3IgQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRy eSBvYmplY3RzLgorICoKKyAqIFdlIG1ha2UgdGhlIHRhYmxlc3BhY2UgT0lEIHRoZSBmaXJzdCBj b2x1bW4gb2YgdGhlIHNvcnQga2V5IHRvIG1hdGNoCisgKiB0aGUgb24tZGlzayB0cmVlIHN0cnVj dHVyZS4KKyAqLworc3RhdGljIGludAorQmxvY2tSZWZUYWJsZUNvbXBhcmF0b3IoY29uc3Qgdm9p ZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBCbG9ja1JlZlRhYmxlU2VyaWFsaXplZEVu dHJ5ICpzYSA9IGE7CisJY29uc3QgQmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSAqc2IgPSBi OworCisJaWYgKHNhLT5ybG9jYXRvci5zcGNPaWQgPiBzYi0+cmxvY2F0b3Iuc3BjT2lkKQorCQly ZXR1cm4gMTsKKwlpZiAoc2EtPnJsb2NhdG9yLnNwY09pZCA8IHNiLT5ybG9jYXRvci5zcGNPaWQp CisJCXJldHVybiAtMTsKKworCWlmIChzYS0+cmxvY2F0b3IuZGJPaWQgPiBzYi0+cmxvY2F0b3Iu ZGJPaWQpCisJCXJldHVybiAxOworCWlmIChzYS0+cmxvY2F0b3IuZGJPaWQgPCBzYi0+cmxvY2F0 b3IuZGJPaWQpCisJCXJldHVybiAtMTsKKworCWlmIChzYS0+cmxvY2F0b3IucmVsTnVtYmVyID4g c2ItPnJsb2NhdG9yLnJlbE51bWJlcikKKwkJcmV0dXJuIDE7CisJaWYgKHNhLT5ybG9jYXRvci5y ZWxOdW1iZXIgPCBzYi0+cmxvY2F0b3IucmVsTnVtYmVyKQorCQlyZXR1cm4gLTE7CisKKwlpZiAo c2EtPmZvcmtudW0gPiBzYi0+Zm9ya251bSkKKwkJcmV0dXJuIDE7CisJaWYgKHNhLT5mb3JrbnVt IDwgc2ItPmZvcmtudW0pCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisvKgorICog Rmx1c2ggYW55IGJ1ZmZlcmVkIGRhdGEgb3V0IG9mIGEgQmxvY2tSZWZUYWJsZUJ1ZmZlci4KKyAq Lworc3RhdGljIHZvaWQKK0Jsb2NrUmVmVGFibGVGbHVzaChCbG9ja1JlZlRhYmxlQnVmZmVyICpi dWZmZXIpCit7CisJYnVmZmVyLT5pb19jYWxsYmFjayhidWZmZXItPmlvX2NhbGxiYWNrX2FyZywg YnVmZmVyLT5kYXRhLCBidWZmZXItPnVzZWQpOworCWJ1ZmZlci0+dXNlZCA9IDA7Cit9CisKKy8q CisgKiBSZWFkIGRhdGEgZnJvbSBhIEJsb2NrUmVmVGFibGVCdWZmZXIsIGFuZCB1cGRhdGUgdGhl IHJ1bm5pbmcgQ1JDCisgKiBjYWxjdWxhdGlvbiBmb3IgdGhlIHJldHVybmVkIGRhdGEgKGJ1dCBu b3QgYW55IGRhdGEgdGhhdCB3ZSBtYXkgaGF2ZQorICogYnVmZmVyZWQgYnV0IG5vdCB5ZXQgYWN0 dWFsbHkgcmV0dXJuZWQpLgorICovCitzdGF0aWMgdm9pZAorQmxvY2tSZWZUYWJsZVJlYWQoQmxv Y2tSZWZUYWJsZVJlYWRlciAqcmVhZGVyLCB2b2lkICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCUJs b2NrUmVmVGFibGVCdWZmZXIgKmJ1ZmZlciA9ICZyZWFkZXItPmJ1ZmZlcjsKKworCS8qIExvb3Ag dW50aWwgcmVhZCBpcyBmdWxseSBzYXRpc2ZpZWQuICovCisJd2hpbGUgKGxlbmd0aCA+IDApCisJ eworCQlpZiAoYnVmZmVyLT5jdXJzb3IgPCBidWZmZXItPnVzZWQpCisJCXsKKwkJCS8qCisJCQkg KiBJZiBhbnkgYnVmZmVyZWQgZGF0YSBpcyBhdmFpbGFibGUsIHVzZSB0aGF0IHRvIHNhdGlzZnkg YXMgbXVjaAorCQkJICogb2YgdGhlIHJlcXVlc3QgYXMgcG9zc2libGUuCisJCQkgKi8KKwkJCWlu dAkJCWJ5dGVzX3RvX2NvcHkgPSBNaW4obGVuZ3RoLCBidWZmZXItPnVzZWQgLSBidWZmZXItPmN1 cnNvcik7CisKKwkJCW1lbWNweShkYXRhLCAmYnVmZmVyLT5kYXRhW2J1ZmZlci0+Y3Vyc29yXSwg Ynl0ZXNfdG9fY29weSk7CisJCQlDT01QX0NSQzMyQyhidWZmZXItPmNyYywgJmJ1ZmZlci0+ZGF0 YVtidWZmZXItPmN1cnNvcl0sCisJCQkJCQlieXRlc190b19jb3B5KTsKKwkJCWJ1ZmZlci0+Y3Vy c29yICs9IGJ5dGVzX3RvX2NvcHk7CisJCQlkYXRhID0gKChjaGFyICopIGRhdGEpICsgYnl0ZXNf dG9fY29weTsKKwkJCWxlbmd0aCAtPSBieXRlc190b19jb3B5OworCQl9CisJCWVsc2UgaWYgKGxl bmd0aCA+PSBCVUZTSVpFKQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlIHJlcXVlc3QgbGVuZ3Ro IGlzIGxvbmcsIHJlYWQgZGlyZWN0bHkgaW50byBjYWxsZXIncworCQkJICogYnVmZmVyLgorCQkJ ICovCisJCQlpbnQJCQlieXRlc19yZWFkOworCisJCQlieXRlc19yZWFkID0gYnVmZmVyLT5pb19j YWxsYmFjayhidWZmZXItPmlvX2NhbGxiYWNrX2FyZywKKwkJCQkJCQkJCQkJIGRhdGEsIGxlbmd0 aCk7CisJCQlDT01QX0NSQzMyQyhidWZmZXItPmNyYywgZGF0YSwgYnl0ZXNfcmVhZCk7CisJCQlk YXRhID0gKChjaGFyICopIGRhdGEpICsgYnl0ZXNfcmVhZDsKKwkJCWxlbmd0aCAtPSBieXRlc19y ZWFkOworCisJCQkvKiBJZiB3ZSBkaWRuJ3QgZ2V0IGFueXRoaW5nLCB0aGF0J3MgYmFkLiAqLwor CQkJaWYgKGJ5dGVzX3JlYWQgPT0gMCkKKwkJCQlyZWFkZXItPmVycm9yX2NhbGxiYWNrKHJlYWRl ci0+ZXJyb3JfY2FsbGJhY2tfYXJnLAorCQkJCQkJCQkJICAgImZpbGUgXCIlc1wiIGVuZHMgdW5l eHBlY3RlZGx5IiwKKwkJCQkJCQkJCSAgIHJlYWRlci0+ZXJyb3JfZmlsZW5hbWUpOworCQl9CisJ CWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFJlZmlsbCBvdXIgYnVmZmVyLgorCQkJICovCisJCQli dWZmZXItPnVzZWQgPSBidWZmZXItPmlvX2NhbGxiYWNrKGJ1ZmZlci0+aW9fY2FsbGJhY2tfYXJn LAorCQkJCQkJCQkJCQkgICBidWZmZXItPmRhdGEsIEJVRlNJWkUpOworCQkJYnVmZmVyLT5jdXJz b3IgPSAwOworCisJCQkvKiBJZiB3ZSBkaWRuJ3QgZ2V0IGFueXRoaW5nLCB0aGF0J3MgYmFkLiAq LworCQkJaWYgKGJ1ZmZlci0+dXNlZCA9PSAwKQorCQkJCXJlYWRlci0+ZXJyb3JfY2FsbGJhY2so cmVhZGVyLT5lcnJvcl9jYWxsYmFja19hcmcsCisJCQkJCQkJCQkgICAiZmlsZSBcIiVzXCIgZW5k cyB1bmV4cGVjdGVkbHkiLAorCQkJCQkJCQkJICAgcmVhZGVyLT5lcnJvcl9maWxlbmFtZSk7CisJ CX0KKwl9Cit9CisKKy8qCisgKiBTdXBwbHkgZGF0YSB0byBhIEJsb2NrUmVmVGFibGVCdWZmZXIg Zm9yIHdyaXRlIHRvIHRoZSB1bmRlcmx5aW5nIEZpbGUsCisgKiBhbmQgdXBkYXRlIHRoZSBydW5u aW5nIENSQyBjYWxjdWxhdGlvbiBmb3IgdGhhdCBkYXRhLgorICovCitzdGF0aWMgdm9pZAorQmxv Y2tSZWZUYWJsZVdyaXRlKEJsb2NrUmVmVGFibGVCdWZmZXIgKmJ1ZmZlciwgdm9pZCAqZGF0YSwg aW50IGxlbmd0aCkKK3sKKwkvKiBVcGRhdGUgcnVubmluZyBDUkMgY2FsY3VsYXRpb24uICovCisJ Q09NUF9DUkMzMkMoYnVmZmVyLT5jcmMsIGRhdGEsIGxlbmd0aCk7CisKKwkvKiBJZiB0aGUgbmV3 IGRhdGEgY2FuJ3QgZml0IGludG8gdGhlIGJ1ZmZlciwgZmx1c2ggdGhlIGJ1ZmZlci4gKi8KKwlp ZiAoYnVmZmVyLT51c2VkICsgbGVuZ3RoID4gQlVGU0laRSkKKwl7CisJCWJ1ZmZlci0+aW9fY2Fs bGJhY2soYnVmZmVyLT5pb19jYWxsYmFja19hcmcsIGJ1ZmZlci0+ZGF0YSwKKwkJCQkJCQlidWZm ZXItPnVzZWQpOworCQlidWZmZXItPnVzZWQgPSAwOworCX0KKworCS8qIElmIHRoZSBuZXcgZGF0 YSB3b3VsZCBmaWxsIHRoZSBidWZmZXIsIG9yIG1vcmUsIHdyaXRlIGl0IGRpcmVjdGx5LiAqLwor CWlmIChsZW5ndGggPj0gQlVGU0laRSkKKwl7CisJCWJ1ZmZlci0+aW9fY2FsbGJhY2soYnVmZmVy LT5pb19jYWxsYmFja19hcmcsIGRhdGEsIGxlbmd0aCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBP dGhlcndpc2UsIGNvcHkgdGhlIG5ldyBkYXRhIGludG8gdGhlIGJ1ZmZlci4gKi8KKwltZW1jcHko JmJ1ZmZlci0+ZGF0YVtidWZmZXItPnVzZWRdLCBkYXRhLCBsZW5ndGgpOworCWJ1ZmZlci0+dXNl ZCArPSBsZW5ndGg7CisJQXNzZXJ0KGJ1ZmZlci0+dXNlZCA8PSBCVUZTSVpFKTsKK30KKworLyoK KyAqIEdlbmVyYXRlIHRoZSBzZW50aW5lbCBhbmQgQ1JDIHJlcXVpcmVkIGF0IHRoZSBlbmQgb2Yg YSBibG9jayByZWZlcmVuY2UKKyAqIHRhYmxlIGZpbGUgYW5kIGZsdXNoIHRoZW0gb3V0IG9mIG91 ciBpbnRlcm5hbCBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkCitCbG9ja1JlZlRhYmxlRmlsZVRl cm1pbmF0ZShCbG9ja1JlZlRhYmxlQnVmZmVyICpidWZmZXIpCit7CisJQmxvY2tSZWZUYWJsZVNl cmlhbGl6ZWRFbnRyeSB6ZW50cnkgPSB7ezB9fTsKKwlwZ19jcmMzMmMJY3JjOworCisJLyogV3Jp dGUgYSBzZW50aW5lbCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgZW50cmllcy4g Ki8KKwlCbG9ja1JlZlRhYmxlV3JpdGUoYnVmZmVyLCAmemVudHJ5LAorCQkJCQkgICBzaXplb2Yo QmxvY2tSZWZUYWJsZVNlcmlhbGl6ZWRFbnRyeSkpOworCisJLyoKKwkgKiBXcml0aW5nIHRoZSBj aGVja3N1bSB3aWxsIHBlcnR1cmIgdGhlIG9uZ29pbmcgY2hlY2tzdW0gY2FsY3VsYXRpb24sIHNv CisJICogY29weSB0aGUgc3RhdGUgZmlyc3QgYW5kIGZpbmFsaXplIHRoZSBjb21wdXRhdGlvbiB1 c2luZyB0aGUgY29weS4KKwkgKi8KKwljcmMgPSBidWZmZXItPmNyYzsKKwlGSU5fQ1JDMzJDKGNy Yyk7CisJQmxvY2tSZWZUYWJsZVdyaXRlKGJ1ZmZlciwgJmNyYywgc2l6ZW9mKHBnX2NyYzMyYykp OworCisJLyogRmx1c2ggYW55IGxlZnRvdmVyIGRhdGEgb3V0IG9mIG91ciBidWZmZXIuICovCisJ QmxvY2tSZWZUYWJsZUZsdXNoKGJ1ZmZlcik7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL21l c29uLmJ1aWxkIGIvc3JjL2NvbW1vbi9tZXNvbi5idWlsZAppbmRleCBkNTJkZDEyYmM5Li43YWQ0 MjcwYTNhIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL21lc29uLmJ1aWxkCisrKyBiL3NyYy9jb21t b24vbWVzb24uYnVpbGQKQEAgLTQsNiArNCw3IEBAIGNvbW1vbl9zb3VyY2VzID0gZmlsZXMoCiAg ICdhcmNoaXZlLmMnLAogICAnYmFzZTY0LmMnLAogICAnYmluYXJ5aGVhcC5jJywKKyAgJ2Jsa3Jl ZnRhYmxlLmMnLAogICAnY2hlY2tzdW1faGVscGVyLmMnLAogICAnY29tcHJlc3Npb24uYycsCiAg ICdjb250cm9sZGF0YV91dGlscy5jJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94 bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCmluZGV4IGExNDEyNmQxNjQuLmRhNzE1 ODAzNjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2cuaApAQCAtMjA5LDYgKzIwOSw3IEBAIGV4dGVybiBpbnQJWExvZ0Zp bGVPcGVuKFhMb2dTZWdObyBzZWdubywgVGltZUxpbmVJRCB0bGkpOwogCiBleHRlcm4gdm9pZCBD aGVja1hMb2dSZW1vdmVkKFhMb2dTZWdObyBzZWdubywgVGltZUxpbmVJRCB0bGkpOwogZXh0ZXJu IFhMb2dTZWdObyBYTG9nR2V0TGFzdFJlbW92ZWRTZWdubyh2b2lkKTsKK2V4dGVybiBYTG9nU2Vn Tm8gWExvZ0dldE9sZGVzdFNlZ25vKFRpbWVMaW5lSUQgdGxpKTsKIGV4dGVybiB2b2lkIFhMb2dT ZXRBc3luY1hhY3RMU04oWExvZ1JlY1B0ciBhc3luY1hhY3RMU04pOwogZXh0ZXJuIHZvaWQgWExv Z1NldFJlcGxpY2F0aW9uU2xvdE1pbmltdW1MU04oWExvZ1JlY1B0ciBsc24pOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9iYWNrdXAvd2Fsc3VtbWFyeS5oIGIvc3JjL2luY2x1ZGUvYmFja3Vw L3dhbHN1bW1hcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44ZTNk YzdiODM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvYmFja3VwL3dhbHN1bW1hcnku aApAQCAtMCwwICsxLDQ5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWxzdW1tYXJ5 LmgKKyAqCSAgV0FMIHN1bW1hcnkgbWFuYWdlbWVudAorICoKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMjAxMC0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqIHNyYy9pbmNsdWRlL2JhY2t1cC93YWxzdW1tYXJ5LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2lmbmRlZiBXQUxTVU1NQVJZX0gKKyNkZWZpbmUgV0FMU1VNTUFSWV9ICisKKyNp bmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRl ICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgorCit0eXBlZGVmIHN0 cnVjdCBXYWxTdW1tYXJ5SU8KK3sKKwlGaWxlCQlmaWxlOworCW9mZl90CQlmaWxlcG9zOworfSBX YWxTdW1tYXJ5SU87CisKK3R5cGVkZWYgc3RydWN0IFdhbFN1bW1hcnlGaWxlCit7CisJWExvZ1Jl Y1B0cglzdGFydF9sc247CisJWExvZ1JlY1B0cgllbmRfbHNuOworCVRpbWVMaW5lSUQJdGxpOwor fSBXYWxTdW1tYXJ5RmlsZTsKKworZXh0ZXJuIExpc3QgKkdldFdhbFN1bW1hcmllcyhUaW1lTGlu ZUlEIHRsaSwgWExvZ1JlY1B0ciBzdGFydF9sc24sCisJCQkJCQkJIFhMb2dSZWNQdHIgZW5kX2xz bik7CitleHRlcm4gTGlzdCAqRmlsdGVyV2FsU3VtbWFyaWVzKExpc3QgKndzbGlzdCwgVGltZUxp bmVJRCB0bGksCisJCQkJCQkJCVhMb2dSZWNQdHIgc3RhcnRfbHNuLCBYTG9nUmVjUHRyIGVuZF9s c24pOworZXh0ZXJuIGJvb2wgV2FsU3VtbWFyaWVzQXJlQ29tcGxldGUoTGlzdCAqd3NsaXN0LAor CQkJCQkJCQkJWExvZ1JlY1B0ciBzdGFydF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKKwkJCQkJ CQkJCVhMb2dSZWNQdHIgKm1pc3NpbmdfbHNuKTsKK2V4dGVybiBGaWxlIE9wZW5XYWxTdW1tYXJ5 RmlsZShXYWxTdW1tYXJ5RmlsZSAqd3MsIGJvb2wgbWlzc2luZ19vayk7CitleHRlcm4gdm9pZCBS ZW1vdmVXYWxTdW1tYXJ5SWZPbGRlclRoYW4oV2FsU3VtbWFyeUZpbGUgKndzLAorCQkJCQkJCQkJ CXRpbWVfdCBjdXRvZmZfdGltZSk7CisKK2V4dGVybiBpbnQJUmVhZFdhbFN1bW1hcnkodm9pZCAq d2FsX3N1bW1hcnlfaW8sIHZvaWQgKmRhdGEsIGludCBsZW5ndGgpOworZXh0ZXJuIGludAlXcml0 ZVdhbFN1bW1hcnkodm9pZCAqd2FsX3N1bW1hcnlfaW8sIHZvaWQgKmRhdGEsIGludCBsZW5ndGgp OworZXh0ZXJuIHZvaWQgUmVwb3J0V2FsU3VtbWFyeUVycm9yKHZvaWQgKmNhbGxiYWNrX2FyZywg Y2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKKworI2VuZGlmCQkJCQkJ CS8qIFdBTFNVTU1BUllfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggNzdlOGIxMzc2 NC4uOTE2YzhlYzhkMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMjA5OSw0ICsxMjA5 OSwyMyBAQAogICBwcm9uYW1lID0+ICdhbnlfdmFsdWVfdHJhbnNmbicsIHByb3JldHR5cGUgPT4g J2FueWVsZW1lbnQnLAogICBwcm9hcmd0eXBlcyA9PiAnYW55ZWxlbWVudCBhbnllbGVtZW50Jywg cHJvc3JjID0+ICdhbnlfdmFsdWVfdHJhbnNmbicgfSwKIAoreyBvaWQgPT4gJzg0MzYnLAorICBk ZXNjciA9PiAnbGlzdCBvZiBhdmFpbGFibGUgV0FMIHN1bW1hcnkgZmlsZXMnLAorICBwcm9uYW1l ID0+ICdwZ19hdmFpbGFibGVfd2FsX3N1bW1hcmllcycsIHByb3Jvd3MgPT4gJzEwMCcsCisgIHBy b3JldHNldCA9PiAndCcsIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcGFyYWxsZWwgPT4gJ3MnLAor ICBwcm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnJywKKyAgcHJvYWxsYXJn dHlwZXMgPT4gJ3tpbnQ4LHBnX2xzbixwZ19sc259JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tvLG8s b30nLAorICBwcm9hcmduYW1lcyA9PiAne3RsaSxzdGFydF9sc24sZW5kX2xzbn0nLAorICBwcm9z cmMgPT4gJ3BnX2F2YWlsYWJsZV93YWxfc3VtbWFyaWVzJyB9LAoreyBvaWQgPT4gJzg0MzcnLAor ICBkZXNjciA9PiAnY29udGVudHMgb2YgYSBXQUwgc3VtYW1yeSBmaWxlJywKKyAgcHJvbmFtZSA9 PiAncGdfd2FsX3N1bW1hcnlfY29udGVudHMnLCBwcm9yb3dzID0+ICcxMDAnLAorICBwcm9yZXRz ZXQgPT4gJ3QnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICdzJywKKyAgcHJv cmV0dHlwZSA9PiAncmVjb3JkJywgcHJvYXJndHlwZXMgPT4gJ2ludDggcGdfbHNuIHBnX2xzbics CisgIHByb2FsbGFyZ3R5cGVzID0+ICd7aW50OCxwZ19sc24scGdfbHNuLG9pZCxvaWQsb2lkLGlu dDIsaW50OCxib29sfScsCisgIHByb2FyZ21vZGVzID0+ICd7aSxpLGksbyxvLG8sbyxvLG99JywK KyAgcHJvYXJnbmFtZXMgPT4gJ3t0bGksc3RhcnRfbHNuLGVuZF9sc24scmVsZmlsZW5vZGUscmVs dGFibGVzcGFjZSxyZWxkYXRhYmFzZSxyZWxmb3JrbnVtYmVyLHJlbGJsb2NrbnVtYmVyLGlzX2xp bWl0X2Jsb2NrfScsCisgIHByb3NyYyA9PiAncGdfd2FsX3N1bW1hcnlfY29udGVudHMnIH0sCisK IF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9ibGtyZWZ0YWJsZS5oIGIvc3JjL2lu Y2x1ZGUvY29tbW9uL2Jsa3JlZnRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uNTE0MWYzYWNkNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1v bi9ibGtyZWZ0YWJsZS5oCkBAIC0wLDAgKzEsMTE2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBibGtyZWZ0YWJsZS5oCisgKgkgIEJsb2NrIHJlZmVyZW5jZSB0YWJsZXMuCisgKgorICog QSBibG9jayByZWZlcmVuY2UgdGFibGUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGJs b2NrcyBoYXZlCisgKiBiZWVuIG1vZGlmaWVkIGJ5IFdBTCByZWNvcmRzIHdpdGhpbiBhIGNlcnRh aW4gTFNOIHJhbmdlLgorICoKKyAqIEZvciBlYWNoIHJlbGF0aW9uIGZvcmssIHRoZXJlIGlzIGEg ImxpbWl0IGJsb2NrIG51bWJlciIuIEFsbCBleGlzdGluZworICogYmxvY2tzIGdyZWF0ZXIgdGhh biBvciBlcXVhbCB0byB0aGUgbGltaXQgYmxvY2sgbnVtYmVyIG11c3QgYmUKKyAqIGNvbnNpZGVy ZWQgbW9kaWZpZWQ7IGZvciB0aG9zZSBsZXNzIHRoYW4gdGhlIGxpbWl0IGJsb2NrIG51bWJlciwK KyAqIHdlIG1haW50YWluIGEgYml0bWFwLiBXaGVuIGEgcmVsYXRpb24gZm9yayBpcyBjcmVhdGVk IG9yIGRyb3BwZWQsCisgKiB0aGUgbGltaXQgYmxvY2sgbnVtYmVyIHNob3VsZCBiZSBzZXQgdG8g MC4gV2hlbiBpdCdzIHRydW5jYXRlZCwKKyAqIHRoZSBsaW1pdCBibG9jayBudW1iZXIgc2hvdWxk IGJlIHNldCB0byB0aGUgbGVuZ3RoIGluIGJsb2NrcyB0bworICogd2hpY2ggaXQgd2FzIHRydW5j YXRlZC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAyMiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBzcmMvaW5jbHVkZS9jb21tb24vYmxr cmVmdGFibGUuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIEJMS1JFRlRB QkxFX0gKKyNkZWZpbmUgQkxLUkVGVEFCTEVfSAorCisjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5o IgorI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKKworLyogTWFnaWMgbnVtYmVy IGZvciBzZXJpYWxpemF0aW9uIGZpbGUgZm9ybWF0LiAqLworI2RlZmluZSBCTE9DS1JFRlRBQkxF X01BR0lDCQkJMHg2NTJiMTM3YgorCit0eXBlZGVmIHN0cnVjdCBCbG9ja1JlZlRhYmxlIEJsb2Nr UmVmVGFibGU7Cit0eXBlZGVmIHN0cnVjdCBCbG9ja1JlZlRhYmxlRW50cnkgQmxvY2tSZWZUYWJs ZUVudHJ5OwordHlwZWRlZiBzdHJ1Y3QgQmxvY2tSZWZUYWJsZVJlYWRlciBCbG9ja1JlZlRhYmxl UmVhZGVyOwordHlwZWRlZiBzdHJ1Y3QgQmxvY2tSZWZUYWJsZVdyaXRlciBCbG9ja1JlZlRhYmxl V3JpdGVyOworCisvKgorICogVGhlIHJldHVybiB2YWx1ZSBvZiBpb19jYWxsYmFja19mbiBzaG91 bGQgYmUgdGhlIG51bWJlciBvZiBieXRlcyByZWFkCisgKiBvciB3cml0dGVuLiBJZiBhbiBlcnJv ciBvY2N1cnMsIHRoZSBmdW5jdGlvbnMgc2hvdWxkIHJlcG9ydCBpdCBhbmQKKyAqIG5vdCByZXR1 cm4uIFdoZW4gdXNlZCBhcyBhIHdyaXRlIGNhbGxiYWNrLCBzaG9ydCB3cml0ZXMgc2hvdWxkIGJl IHJldHJpZWQKKyAqIG9yIHRyZWF0ZWQgYXMgZXJyb3JzLCBzbyB0aGF0IGlmIHRoZSBjYWxsYmFj ayByZXR1cm5zLCB0aGUgcmV0dXJuIHZhbHVlCisgKiBpcyBhbHdheXMgdGhlIHJlcXVlc3QgbGVu Z3RoLgorICoKKyAqIHJlcG9ydF9lcnJvcl9mbiBzaG91bGQgbm90IHJldHVybi4KKyAqLwordHlw ZWRlZiBpbnQgKCppb19jYWxsYmFja19mbikgKHZvaWQgKmNhbGxiYWNrX2FyZywgdm9pZCAqZGF0 YSwgaW50IGxlbmd0aCk7Cit0eXBlZGVmIHZvaWQgKCpyZXBvcnRfZXJyb3JfZm4pICh2b2lkICpj YWxibGFja19hcmcsIGNoYXIgKm1zZywuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYoMiwgMyk7CisK KworLyoKKyAqIEZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIGFuIGVudGlyZSBpbi1tZW1vcnkg YmxvY2sgcmVmZXJlbmNlIHRhYmxlLgorICovCitleHRlcm4gQmxvY2tSZWZUYWJsZSAqQ3JlYXRl RW1wdHlCbG9ja1JlZlRhYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgQmxvY2tSZWZUYWJsZVNldExp bWl0QmxvY2soQmxvY2tSZWZUYWJsZSAqYnJ0YWIsCisJCQkJCQkJCQkgICBjb25zdCBSZWxGaWxl TG9jYXRvciAqcmxvY2F0b3IsCisJCQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtudW0sCisJCQkJ CQkJCQkgICBCbG9ja051bWJlciBsaW1pdF9ibG9jayk7CitleHRlcm4gdm9pZCBCbG9ja1JlZlRh YmxlTWFya0Jsb2NrTW9kaWZpZWQoQmxvY2tSZWZUYWJsZSAqYnJ0YWIsCisJCQkJCQkJCQkJICAg Y29uc3QgUmVsRmlsZUxvY2F0b3IgKnJsb2NhdG9yLAorCQkJCQkJCQkJCSAgIEZvcmtOdW1iZXIg Zm9ya251bSwKKwkJCQkJCQkJCQkgICBCbG9ja051bWJlciBibGtudW0pOworZXh0ZXJuIHZvaWQg V3JpdGVCbG9ja1JlZlRhYmxlKEJsb2NrUmVmVGFibGUgKmJydGFiLAorCQkJCQkJCSAgIGlvX2Nh bGxiYWNrX2ZuIHdyaXRlX2NhbGxiYWNrLAorCQkJCQkJCSAgIHZvaWQgKndyaXRlX2NhbGxiYWNr X2FyZyk7CisKK2V4dGVybiBCbG9ja1JlZlRhYmxlRW50cnkgKkJsb2NrUmVmVGFibGVHZXRFbnRy eShCbG9ja1JlZlRhYmxlICpicnRhYiwKKwkJCQkJCQkJCQkJCSBjb25zdCBSZWxGaWxlTG9jYXRv ciAqcmxvY2F0b3IsCisJCQkJCQkJCQkJCQkgRm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkJCQkJ CQkJIEJsb2NrTnVtYmVyICpsaW1pdF9ibG9jayk7CitleHRlcm4gaW50CUJsb2NrUmVmVGFibGVF bnRyeUdldEJsb2NrcyhCbG9ja1JlZlRhYmxlRW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCUJsb2Nr TnVtYmVyIHN0YXJ0X2Jsa25vLAorCQkJCQkJCQkJCUJsb2NrTnVtYmVyIHN0b3BfYmxrbm8sCisJ CQkJCQkJCQkJQmxvY2tOdW1iZXIgKmJsb2NrcywKKwkJCQkJCQkJCQlpbnQgbmJsb2Nrcyk7CisK Ky8qCisgKiBGdW5jdGlvbnMgZm9yIHJlYWRpbmcgYSBibG9jayByZWZlcmVuY2UgdGFibGUgaW5j cmVtZW50YWxseSBmcm9tIGRpc2suCisgKi8KK2V4dGVybiBCbG9ja1JlZlRhYmxlUmVhZGVyICpD cmVhdGVCbG9ja1JlZlRhYmxlUmVhZGVyKGlvX2NhbGxiYWNrX2ZuIHJlYWRfY2FsbGJhY2ssCisJ CQkJCQkJCQkJCQkJICB2b2lkICpyZWFkX2NhbGxiYWNrX2FyZywKKwkJCQkJCQkJCQkJCQkgIGNo YXIgKmVycm9yX2ZpbGVuYW1lLAorCQkJCQkJCQkJCQkJCSAgcmVwb3J0X2Vycm9yX2ZuIGVycm9y X2NhbGxiYWNrLAorCQkJCQkJCQkJCQkJCSAgdm9pZCAqZXJyb3JfY2FsbGJhY2tfYXJnKTsKK2V4 dGVybiBib29sIEJsb2NrUmVmVGFibGVSZWFkZXJOZXh0UmVsYXRpb24oQmxvY2tSZWZUYWJsZVJl YWRlciAqcmVhZGVyLAorCQkJCQkJCQkJCQlSZWxGaWxlTG9jYXRvciAqcmxvY2F0b3IsCisJCQkJ CQkJCQkJCUZvcmtOdW1iZXIgKmZvcmtudW0sCisJCQkJCQkJCQkJCUJsb2NrTnVtYmVyICpsaW1p dF9ibG9jayk7CitleHRlcm4gdW5zaWduZWQgQmxvY2tSZWZUYWJsZVJlYWRlckdldEJsb2NrcyhC bG9ja1JlZlRhYmxlUmVhZGVyICpyZWFkZXIsCisJCQkJCQkJCQkJCSBCbG9ja051bWJlciAqYmxv Y2tzLAorCQkJCQkJCQkJCQkgaW50IG5ibG9ja3MpOworZXh0ZXJuIHZvaWQgRGVzdHJveUJsb2Nr UmVmVGFibGVSZWFkZXIoQmxvY2tSZWZUYWJsZVJlYWRlciAqcmVhZGVyKTsKKworLyoKKyAqIEZ1 bmN0aW9ucyBmb3Igd3JpdGluZyBhIGJsb2NrIHJlZmVyZW5jZSB0YWJsZSBpbmNyZW1lbnRhbGx5 IHRvIGRpc2suCisgKgorICogTm90ZSB0aGF0IGVudHJpZXMgbXVzdCBiZSB3cml0dGVuIGluIHRo ZSBwcm9wZXIgb3JkZXIsIHRoYXQgaXMsIHNvcnRlZCBieQorICogZGF0YWJhc2UsIHRoZW4gdGFi bGVzcGFjZSwgdGhlbiByZWxmaWxlbnVtYmVyLCB0aGVuIGZvcmsgbnVtYmVyLiBDYWxsZXIKKyAq IGlzIHJlc3BvbnNpYmxlIGZvciBzdXBwbHlpbmcgZGF0YSBpbiB0aGUgY29ycmVjdCBvcmRlci4g SWYgdGhhdCBzZWVtcyBoYXJkLAorICogdXNlIGFuIGluLW1lbW9yeSBCbG9ja1JlZlRhYmxlIGlu c3RlYWQuCisgKi8KK2V4dGVybiBCbG9ja1JlZlRhYmxlV3JpdGVyICpDcmVhdGVCbG9ja1JlZlRh YmxlV3JpdGVyKGlvX2NhbGxiYWNrX2ZuIHdyaXRlX2NhbGxiYWNrLAorCQkJCQkJCQkJCQkJCSAg dm9pZCAqd3JpdGVfY2FsbGJhY2tfYXJnKTsKK2V4dGVybiB2b2lkIEJsb2NrUmVmVGFibGVXcml0 ZUVudHJ5KEJsb2NrUmVmVGFibGVXcml0ZXIgKndyaXRlciwKKwkJCQkJCQkJCUJsb2NrUmVmVGFi bGVFbnRyeSAqZW50cnkpOworZXh0ZXJuIHZvaWQgRGVzdHJveUJsb2NrUmVmVGFibGVXcml0ZXIo QmxvY2tSZWZUYWJsZVdyaXRlciAqd3JpdGVyKTsKKworZXh0ZXJuIEJsb2NrUmVmVGFibGVFbnRy eSAqQ3JlYXRlQmxvY2tSZWZUYWJsZUVudHJ5KFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLAorCQkJ CQkJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya251bSk7CitleHRlcm4gdm9pZCBCbG9ja1JlZlRhYmxl RW50cnlTZXRMaW1pdEJsb2NrKEJsb2NrUmVmVGFibGVFbnRyeSAqZW50cnksCisJCQkJCQkJCQkJ CUJsb2NrTnVtYmVyIGxpbWl0X2Jsb2NrKTsKK2V4dGVybiB2b2lkIEJsb2NrUmVmVGFibGVFbnRy eU1hcmtCbG9ja01vZGlmaWVkKEJsb2NrUmVmVGFibGVFbnRyeSAqZW50cnksCisJCQkJCQkJCQkJ CQlGb3JrTnVtYmVyIGZvcmtudW0sCisJCQkJCQkJCQkJCQlCbG9ja051bWJlciBibGtudW0pOwor ZXh0ZXJuIHZvaWQgQmxvY2tSZWZUYWJsZUZyZWVFbnRyeShCbG9ja1JlZlRhYmxlRW50cnkgKmVu dHJ5KTsKKworI2VuZGlmCQkJCQkJCS8qIEJMS1JFRlRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggMTA0 M2E0ZDc4Mi4uNzRiYzJmOTdjYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgK KysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTMzNiw2ICszMzYsNyBAQCB0eXBlZGVm IGVudW0gQmFja2VuZFR5cGUKIAlCX1NUQVJUVVAsCiAJQl9XQUxfUkVDRUlWRVIsCiAJQl9XQUxf U0VOREVSLAorCUJfV0FMX1NVTU1BUklaRVIsCiAJQl9XQUxfV1JJVEVSLAogfSBCYWNrZW5kVHlw ZTsKIApAQCAtNDQyLDYgKzQ0Myw3IEBAIHR5cGVkZWYgZW51bQogCUNoZWNrcG9pbnRlclByb2Nl c3MsCiAJV2FsV3JpdGVyUHJvY2VzcywKIAlXYWxSZWNlaXZlclByb2Nlc3MsCisJV2FsU3VtbWFy aXplclByb2Nlc3MsCiAKIAlOVU1fQVVYUFJPQ1RZUEVTCQkJLyogTXVzdCBiZSBsYXN0ISAqLwog fSBBdXhQcm9jVHlwZTsKQEAgLTQ1NCw2ICs0NTYsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgQXV4 UHJvY1R5cGUgTXlBdXhQcm9jVHlwZTsKICNkZWZpbmUgQW1DaGVja3BvaW50ZXJQcm9jZXNzKCkJ CShNeUF1eFByb2NUeXBlID09IENoZWNrcG9pbnRlclByb2Nlc3MpCiAjZGVmaW5lIEFtV2FsV3Jp dGVyUHJvY2VzcygpCQkoTXlBdXhQcm9jVHlwZSA9PSBXYWxXcml0ZXJQcm9jZXNzKQogI2RlZmlu ZSBBbVdhbFJlY2VpdmVyUHJvY2VzcygpCQkoTXlBdXhQcm9jVHlwZSA9PSBXYWxSZWNlaXZlclBy b2Nlc3MpCisjZGVmaW5lIEFtV2FsU3VtbWFyaXplclByb2Nlc3MoKQkoTXlBdXhQcm9jVHlwZSA9 PSBXYWxTdW1tYXJpemVyUHJvY2VzcykKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oIGIvc3JjL2luY2x1 ZGUvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uMTgwZDNmMzRiOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Bv c3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIHdhbHN1bW1hcml6ZXIuaAorICoKKyAqIEhlYWRlciBmaWxlIGZvciBiYWNr Z3JvdW5kIFdBTCBzdW1tYXJpemF0aW9uIHByb2Nlc3MuCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWxzdW1t YXJpemVyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBXQUxTVU1NQVJJ WkVSX0gKKyNkZWZpbmUgV0FMU1VNTUFSSVpFUl9ICisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2Rl ZnMuaCIKKworZXh0ZXJuIGJvb2wgc3VtbWFyaXplX3dhbDsKK2V4dGVybiBpbnQJd2FsX3N1bW1h cnlfa2VlcF90aW1lOworCitleHRlcm4gU2l6ZSBXYWxTdW1tYXJpemVyU2htZW1TaXplKHZvaWQp OworZXh0ZXJuIHZvaWQgV2FsU3VtbWFyaXplclNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lk IFdhbFN1bW1hcml6ZXJNYWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworCitleHRl cm4gWExvZ1JlY1B0ciBHZXRPbGRlc3RVbnN1bW1hcml6ZWRMU04oVGltZUxpbmVJRCAqdGxpLAor CQkJCQkJCQkJCSAgIGJvb2wgKmxzbl9pc19leGFjdCwKKwkJCQkJCQkJCQkgICBib29sIHJlc2V0 X3BlbmRpbmdfbHNuKTsKK2V4dGVybiB2b2lkIFNldFdhbFN1bW1hcml6ZXJMYXRjaCh2b2lkKTsK K2V4dGVybiBYTG9nUmVjUHRyIFdhaXRGb3JXYWxTdW1tYXJpemF0aW9uKFhMb2dSZWNQdHIgbHNu LCBsb25nIHRpbWVvdXQsCisJCQkJCQkJCQkJICBYTG9nUmVjUHRyICpwZW5kaW5nX2xzbik7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2MuaAppbmRleCA0YjI1OTYxMjQ5Li5lODdmZDI1ZDY0IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdl L3Byb2MuaApAQCAtNDE3LDExICs0MTcsMTIgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAq UHJlcGFyZWRYYWN0UHJvY3M7CiAgKiBXZSBzZXQgYXNpZGUgc29tZSBleHRyYSBQR1BST0Mgc3Ry dWN0dXJlcyBmb3IgYXV4aWxpYXJ5IHByb2Nlc3NlcywKICAqIGllIHRoaW5ncyB0aGF0IGFyZW4n dCBmdWxsLWZsZWRnZWQgYmFja2VuZHMgYnV0IG5lZWQgc2htZW0gYWNjZXNzLgogICoKLSAqIEJh Y2tncm91bmQgd3JpdGVyLCBjaGVja3BvaW50ZXIsIFdBTCB3cml0ZXIgYW5kIGFyY2hpdmVyIHJ1 biBkdXJpbmcgbm9ybWFsCi0gKiBvcGVyYXRpb24uICBTdGFydHVwIHByb2Nlc3MgYW5kIFdBTCBy ZWNlaXZlciBhbHNvIGNvbnN1bWUgMiBzbG90cywgYnV0IFdBTAotICogd3JpdGVyIGlzIGxhdW5j aGVkIG9ubHkgYWZ0ZXIgc3RhcnR1cCBoYXMgZXhpdGVkLCBzbyB3ZSBvbmx5IG5lZWQgNSBzbG90 cy4KKyAqIEJhY2tncm91bmQgd3JpdGVyLCBjaGVja3BvaW50ZXIsIFdBTCB3cml0ZXIsIFdBTCBz dW1tYXJpemVyLCBhbmQgYXJjaGl2ZXIKKyAqIHJ1biBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4g IFN0YXJ0dXAgcHJvY2VzcyBhbmQgV0FMIHJlY2VpdmVyIGFsc28gY29uc3VtZQorICogMiBzbG90 cywgYnV0IFdBTCB3cml0ZXIgaXMgbGF1bmNoZWQgb25seSBhZnRlciBzdGFydHVwIGhhcyBleGl0 ZWQsIHNvIHdlCisgKiBvbmx5IG5lZWQgNiBzbG90cy4KICAqLwotI2RlZmluZSBOVU1fQVVYSUxJ QVJZX1BST0NTCQk1CisjZGVmaW5lIE5VTV9BVVhJTElBUllfUFJPQ1MJCTYKIAogLyogY29uZmln dXJhYmxlIG9wdGlvbnMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgRGVhZGxvY2tUaW1lb3V0 OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX3RhYmxlcy5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvZ3VjX3RhYmxlcy5oCmluZGV4IDBjMzgyNTU5NjEuLmVhYThjNDZkZGEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y190YWJsZXMuaAorKysgYi9zcmMvaW5jbHVkZS91 dGlscy9ndWNfdGFibGVzLmgKQEAgLTcyLDYgKzcyLDcgQEAgZW51bSBjb25maWdfZ3JvdXAKIAlX QUxfUkVDT1ZFUlksCiAJV0FMX0FSQ0hJVkVfUkVDT1ZFUlksCiAJV0FMX1JFQ09WRVJZX1RBUkdF VCwKKwlXQUxfU1VNTUFSSVpBVElPTiwKIAlSRVBMSUNBVElPTl9TRU5ESU5HLAogCVJFUExJQ0FU SU9OX1BSSU1BUlksCiAJUkVQTElDQVRJT05fU1RBTkRCWSwKZGlmZiAtLWdpdCBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKaW5kZXggYmE0MTE0OWI4OC4uOTM5MDA0OTMxNCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTQwMTIsMyArNDAxMiwxNCBAQCB5eXNjYW5fdAogel9zdHJlYW0KIHpfc3RyZWFtcAog emljX3QKK0Jsb2NrUmVmVGFibGUKK0Jsb2NrUmVmVGFibGVCdWZmZXIKK0Jsb2NrUmVmVGFibGVF bnRyeQorQmxvY2tSZWZUYWJsZUtleQorQmxvY2tSZWZUYWJsZVJlYWRlcgorQmxvY2tSZWZUYWJs ZVNlcmlhbGl6ZWRFbnRyeQorQmxvY2tSZWZUYWJsZVdyaXRlcgorU3VtbWFyaXplclJlYWRMb2Nh bFhMb2dQcml2YXRlCitXYWxTdW1tYXJpemVyRGF0YQorV2FsU3VtbWFyeUZpbGUKK1dhbFN1bW1h cnlJTwotLSAKMi4zOS4zIChBcHBsZSBHaXQtMTQ1KQoK --00000000000069928c060ce2d17a Content-Type: application/octet-stream; name="v16-0004-Test-patch-Enable-summarize_wal-by-default.patch" Content-Disposition: attachment; filename="v16-0004-Test-patch-Enable-summarize_wal-by-default.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqct14ve3 RnJvbSBhNWMwMGZlNzNiOTFkMzVhYTQ5MDJhYzFmYzkzYWNjM2FhYzc1MWVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMTQgTm92IDIwMjMgMTM6NDk6MjggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNiA0 LzRdIFRlc3QgcGF0Y2g6IEVuYWJsZSBzdW1tYXJpemVfd2FsIGJ5IGRlZmF1bHQuCgpUbyBhdm9p ZCB0ZXN0IGZhaWx1cmVzLCBtdXN0IHJlbW92ZSB0aGUgcHJvaGliaXRpb24gYWdhaW5zdCBydW5u aW5nCnN1bW1hcml6ZV93YWw9b2ZmIHdpdGggd2FsX2xldmVsPW1pbmltYWwsIGJlY2F1c2UgYSBi dW5jaCBvZiB0ZXN0cwpydW4gd2l0aCB3YWxfbGV2ZWw9bWluaW1hbC4KCk5vdCBmb3IgY29tbWl0 LgotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jICAgICAgICAgICAgICAg ICB8IDMgLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYyAgICAgICAg ICAgICAgfCAyICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAgICAg ICAgICAgICAgfCAyICstCiBzcmMvdGVzdC9yZWNvdmVyeS90LzAwMV9zdHJlYW1fcmVwLnBsICAg ICAgICAgICAgICAgfCAyICsrCiBzcmMvdGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9saW1p dC5wbCAgICAgICAgICAgfCAzICsrKwogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMjBfYXJjaGl2ZV9z dGF0dXMucGwgICAgICAgICAgIHwgMSArCiBzcmMvdGVzdC9yZWNvdmVyeS90LzAzNV9zdGFuZGJ5 X2xvZ2ljYWxfZGVjb2RpbmcucGwgfCAxICsKIDcgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25z KCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXgg YjE2M2U4OWNiYi4uNTFkYzUxNzcxMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMK QEAgLTkzNyw5ICs5MzcsNiBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogCWlmIChtYXhfd2FsX3NlbmRlcnMgPiAwICYmIHdhbF9sZXZlbCA9PSBXQUxfTEVWRUxfTUlO SU1BTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCJXQUwgc3RyZWFtaW5nIChtYXhf d2FsX3NlbmRlcnMgPiAwKSByZXF1aXJlcyB3YWxfbGV2ZWwgXCJyZXBsaWNhXCIgb3IgXCJsb2dp Y2FsXCIiKSkpOwotCWlmIChzdW1tYXJpemVfd2FsICYmIHdhbF9sZXZlbCA9PSBXQUxfTEVWRUxf TUlOSU1BTCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJybXNnKCJXQUwgY2Fubm90IGJlIHN1 bW1hcml6ZWQgd2hlbiB3YWxfbGV2ZWwgaXMgXCJtaW5pbWFsXCIiKSkpOwogCiAJLyoKIAkgKiBP dGhlciBvbmUtdGltZSBpbnRlcm5hbCBzYW5pdHkgY2hlY2tzIGNhbiBnbyBoZXJlLCBpZiB0aGV5 IGFyZSBmYXN0LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJp emVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwppbmRleCA5ZmEx NTUzNDllLi43MTAyNWI0M2I3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dh bHN1bW1hcml6ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIu YwpAQCAtMTM5LDcgKzEzOSw3IEBAIHN0YXRpYyBYTG9nUmVjUHRyIHJlZG9fcG9pbnRlcl9hdF9s YXN0X3N1bW1hcnlfcmVtb3ZhbCA9IEludmFsaWRYTG9nUmVjUHRyOwogLyoKICAqIEdVQyBwYXJh bWV0ZXJzCiAgKi8KLWJvb2wJCXN1bW1hcml6ZV93YWwgPSBmYWxzZTsKK2Jvb2wJCXN1bW1hcml6 ZV93YWwgPSB0cnVlOwogaW50CQkJd2FsX3N1bW1hcnlfa2VlcF90aW1lID0gMTAgKiAyNCAqIDYw OwogCiBzdGF0aWMgWExvZ1JlY1B0ciBHZXRMYXRlc3RMU04oVGltZUxpbmVJRCAqdGxpKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggOWY1OTQ0MDUyNi4uZjI0OWE5ZmFkNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTE3OTUsNyArMTc5NSw3IEBAIHN0 cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCQlOVUxMCiAJCX0sCiAJ CSZzdW1tYXJpemVfd2FsLAotCQlmYWxzZSwKKwkJdHJ1ZSwKIAkJTlVMTCwgTlVMTCwgTlVMTAog CX0sCiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDAxX3N0cmVhbV9yZXAucGwg Yi9zcmMvdGVzdC9yZWNvdmVyeS90LzAwMV9zdHJlYW1fcmVwLnBsCmluZGV4IDk1ZjliMGQ3NzIu LjBkMGU2M2I4ZGMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDAxX3N0cmVhbV9y ZXAucGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMDFfc3RyZWFtX3JlcC5wbApAQCAtMTUs NiArMTUsOCBAQCBteSAkbm9kZV9wcmltYXJ5ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdwcmltYXJ5Jyk7CiAkbm9kZV9wcmltYXJ5LT5pbml0KAogCWFsbG93c19zdHJlYW1pbmcg PT4gMSwKIAlhdXRoX2V4dHJhID0+IFsgJy0tY3JlYXRlLXJvbGUnLCAncmVwbF9yb2xlJyBdKTsK KyMgV0FMIHN1bW1hcml6YXRpb24gY2FuIHBvc3Rwb25lIFdBTCByZWN5Y2xpbmcsIGxlYWRpbmcg dG8gdGVzdCBmYWlsdXJlcworJG5vZGVfcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsICJzdW1tYXJpemVfd2FsID0gb2ZmIik7CiAkbm9kZV9wcmltYXJ5LT5zdGFydDsKIG15 ICRiYWNrdXBfbmFtZSA9ICdteV9iYWNrdXAnOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNv dmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3Jl cGxzbG90X2xpbWl0LnBsCmluZGV4IDdkOTRmMTU3NzguLmE4YjM0MmJiOTggMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsCisrKyBiL3NyYy90ZXN0 L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsCkBAIC0yMiw2ICsyMiw3IEBAICRub2Rl X3ByaW1hcnktPmFwcGVuZF9jb25mKAogbWluX3dhbF9zaXplID0gMk1CCiBtYXhfd2FsX3NpemUg PSA0TUIKIGxvZ19jaGVja3BvaW50cyA9IHllcworc3VtbWFyaXplX3dhbCA9IG9mZgogKSk7CiAk bm9kZV9wcmltYXJ5LT5zdGFydDsKICRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMn LApAQCAtMjU2LDYgKzI1Nyw3IEBAICRub2RlX3ByaW1hcnkyLT5hcHBlbmRfY29uZigKIG1pbl93 YWxfc2l6ZSA9IDMyTUIKIG1heF93YWxfc2l6ZSA9IDMyTUIKIGxvZ19jaGVja3BvaW50cyA9IHll cworc3VtbWFyaXplX3dhbCA9IG9mZgogKSk7CiAkbm9kZV9wcmltYXJ5Mi0+c3RhcnQ7CiAkbm9k ZV9wcmltYXJ5Mi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCkBAIC0zMTAsNiArMzEyLDcgQEAgJG5v ZGVfcHJpbWFyeTMtPmFwcGVuZF9jb25mKAogCW1heF93YWxfc2l6ZSA9IDJNQgogCWxvZ19jaGVj a3BvaW50cyA9IHllcwogCW1heF9zbG90X3dhbF9rZWVwX3NpemUgPSAxTUIKKyAgICBzdW1tYXJp emVfd2FsID0gb2ZmCiAJKSk7CiAkbm9kZV9wcmltYXJ5My0+c3RhcnQ7CiAkbm9kZV9wcmltYXJ5 My0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90 LzAyMF9hcmNoaXZlX3N0YXR1cy5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDIwX2FyY2hpdmVf c3RhdHVzLnBsCmluZGV4IGZhMjQxNTNkNGIuLmQwZDYyMjEzNjggMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlY292ZXJ5L3QvMDIwX2FyY2hpdmVfc3RhdHVzLnBsCisrKyBiL3NyYy90ZXN0L3JlY292 ZXJ5L3QvMDIwX2FyY2hpdmVfc3RhdHVzLnBsCkBAIC0xNSw2ICsxNSw3IEBAICRwcmltYXJ5LT5p bml0KAogCWhhc19hcmNoaXZpbmcgPT4gMSwKIAlhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOwogJHBy aW1hcnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnYXV0b3ZhY3V1bSA9IG9mZicp OworJHByaW1hcnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3VtbWFyaXplX3dh bCA9IG9mZicpOwogJHByaW1hcnktPnN0YXJ0OwogbXkgJHByaW1hcnlfZGF0YSA9ICRwcmltYXJ5 LT5kYXRhX2RpcjsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzVfc3RhbmRi eV9sb2dpY2FsX2RlY29kaW5nLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzVfc3RhbmRieV9s b2dpY2FsX2RlY29kaW5nLnBsCmluZGV4IDljMzRjMGQzNmMuLjQ4MmVkYzU3YTggMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDM1X3N0YW5kYnlfbG9naWNhbF9kZWNvZGluZy5wbAor KysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAzNV9zdGFuZGJ5X2xvZ2ljYWxfZGVjb2RpbmcucGwK QEAgLTI1MCw2ICsyNTAsNyBAQCAkbm9kZV9wcmltYXJ5LT5hcHBlbmRfY29uZigKIHdhbF9sZXZl bCA9ICdsb2dpY2FsJwogbWF4X3JlcGxpY2F0aW9uX3Nsb3RzID0gNAogbWF4X3dhbF9zZW5kZXJz ID0gNAorc3VtbWFyaXplX3dhbCA9IG9mZgogfSk7CiAkbm9kZV9wcmltYXJ5LT5kdW1wX2luZm87 CiAkbm9kZV9wcmltYXJ5LT5zdGFydDsKLS0gCjIuMzkuMyAoQXBwbGUgR2l0LTE0NSkKCg== --00000000000069928c060ce2d17a Content-Type: application/octet-stream; name="v16-0002-Add-support-for-incremental-backup.patch" Content-Disposition: attachment; filename="v16-0002-Add-support-for-incremental-backup.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqct14vd1 RnJvbSAyODkzNzE2ZmEzMjVmMjQ5ZDJhNzU0NjliY2JlN2RmOTdkZDIwNGNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMTQgSnVuIDIwMjMgMTE6MzE6MjkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNiAy LzRdIEFkZCBzdXBwb3J0IGZvciBpbmNyZW1lbnRhbCBiYWNrdXAuCk1JTUUtVmVyc2lvbjogMS4w CkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVy LUVuY29kaW5nOiA4Yml0CgpUbyB0YWtlIGFuIGluY3JlbWVudGFsIGJhY2t1cCwgeW91IHVzZSB0 aGUgbmV3IHJlcGxpY2F0aW9uIGNvbW1hbmQKVVBMT0FEX01BTklGRVNUIHRvIHVwbG9hZCB0aGUg bWFuaWZlc3QgZm9yIHRoZSBwcmlvciBiYWNrdXAuIFRoaXMKcHJpb3IgYmFja3VwIGNvdWxkIGVp dGhlciBiZSBhIGZ1bGwgYmFja3VwIG9yIGFub3RoZXIgaW5jcmVtZW50YWwKYmFja3VwLiAgWW91 IHRoZW4gdXNlIEJBU0VfQkFDS1VQIHdpdGggdGhlIElOQ1JFTUVOVEFMIG9wdGlvbiB0byB0YWtl CnRoZSBiYWNrdXAuICBwZ19iYXNlYmFja3VwIG5vdyBoYXMgYW4gLS1pbmNyZW1lbnRhbD1QQVRI X1RPX01BTklGRVNUCm9wdGlvbiB0byB0cmlnZ2VyIHRoaXMgYmVoYXZpb3IuCgpBbiBpbmNyZW1l bnRhbCBiYWNrdXAgaXMgbGlrZSBhIHJlZ3VsYXIgZnVsbCBiYWNrdXAgZXhjZXB0IHRoYXQKc29t ZSByZWxhdGlvbiBmaWxlcyBhcmUgcmVwbGFjZWQgd2l0aCBmaWxlcyB3aXRoIG5hbWVzIGxpa2UK SU5DUkVNRU5UQUwuJHtPUklHSU5BTF9OQU1FfSwgYW5kIHRoZSBiYWNrdXBfbGFiZWwgZmlsZSBj b250YWlucwphZGRpdGlvbmFsIGxpbmVzIGlkZW50aWZ5aW5nIGl0IGFzIGFuIGluY3JlbWVudGFs IGJhY2t1cC4gVGhlIG5ldwpwZ19jb21iaW5lYmFja3VwIHRvb2wgY2FuIGJlIHVzZWQgdG8gcmVj b25zdHJ1Y3QgYSBkYXRhIGRpcmVjdG9yeQpmcm9tIGEgZnVsbCBiYWNrdXAgYW5kIGEgc2VyaWVz IG9mIGluY3JlbWVudGFsIGJhY2t1cHMuCgpYWFguIEl0IHdvdWxkIGJlIG5pY2UgKGJ1dCBub3Qg ZXNzZW50aWFsKSB0byBkbyBzb21ldGhpbmcgYWJvdXQKaW5jcmVtZW50YWwgSlNPTiBwYXJzaW5n LgoKUGF0Y2ggYnkgbWUuIFRoYW5rcyB0byBEaWxpcCBLdW1hciwgQW5kcmVzIEZyZXVuZCwgYW5k IMOBbHZhcm8gSGVycmVyYQpmb3IgZGVzaWduIGRpc2N1c3Npb24gYW5kIHJldmlld3MsIGFuZCB0 byBKYWt1YiBXYXJ0YWsgZm9yIGluY3JlZGlibHkKaGVscGZ1bCBhbmQgZXh0ZW5zaXZlIHRlc3Rp bmcuCi0tLQogZG9jL3NyYy9zZ21sL2JhY2t1cC5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwg ICA4OSArLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMiAtCiBkb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCAgICAgICAgICAgICAgICAgICAgfCAg IDI0ICsKIGRvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCAgICAgICAgICAgICAgICB8ICAg IDEgKwogZG9jL3NyYy9zZ21sL3JlZi9wZ19iYXNlYmFja3VwLnNnbWwgICAgICAgICAgIHwgICAz NyArLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19jb21iaW5lYmFja3VwLnNnbWwgICAgICAgIHwgIDI0 MCArKysKIGRvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbCAgICAgICAgICAgICAgICAgICB8ICAg IDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2JhY2t1cC5jICAgICAgIHwgICAx MCArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyAgICAgfCAgICA2 ICsKIHNyYy9iYWNrZW5kL2JhY2t1cC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgIDEg Kwogc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXAuYyAgICAgICAgICAgICAgIHwgIDMxOSAr KystCiBzcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9pbmNyZW1lbnRhbC5jICAgfCAxMDAz ICsrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2JhY2t1cC9tZXNvbi5idWlsZCAgICAgICAgICAg ICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9ncmFtLnkgICAgICAg ICAgIHwgICAxNCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9zY2FubmVyLmwgICAg ICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyAgICAgICAg ICAgfCAgMTYyICsrLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAgICAg ICAgIHwgICAgMyArCiBzcmMvYmluL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAxICsKIHNyYy9iaW4vbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL2Jic3RyZWFtZXJfZmlsZS5jICAgICAg IHwgICAgMSArCiBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5jICAgICAgICAg fCAgMTEyICstCiBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wMTBfcGdfYmFzZWJhY2t1cC5wbCAg fCAgICA0ICstCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvLmdpdGlnbm9yZSAgICAgICAgICAg fCAgICAxICsKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9NYWtlZmlsZSAgICAgICAgICAgICB8 ICAgNTIgKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2JhY2t1cF9sYWJlbC5jICAgICAgIHwg IDI4MyArKysrCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvYmFja3VwX2xhYmVsLmggICAgICAg fCAgIDMwICsKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9jb3B5X2ZpbGUuYyAgICAgICAgICB8 ICAxNjkgKysrCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvY29weV9maWxlLmggICAgICAgICAg fCAgIDE5ICsKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9sb2FkX21hbmlmZXN0LmMgICAgICB8 ICAyNDUgKysrKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2xvYWRfbWFuaWZlc3QuaCAgICAg IHwgICA2NyArCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvbWVzb24uYnVpbGQgICAgICAgICAg fCAgIDM4ICsKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9ubHMubWsgICAgICAgICAgICAgICB8 ICAgMTEgKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3BnX2NvbWJpbmViYWNrdXAuYyAgIHwg MTI4NCArKysrKysrKysrKysrKysrKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3JlY29uc3Ry dWN0LmMgICAgICAgIHwgIDY4NyArKysrKysrKysKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9y ZWNvbnN0cnVjdC5oICAgICAgICB8ICAgMzMgKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3Qv MDAxX2Jhc2ljLnBsICAgICAgIHwgICAyMyArCiAuLi4vcGdfY29tYmluZWJhY2t1cC90LzAwMl9j b21wYXJlX2JhY2t1cHMucGwgfCAgMTU0ICsrCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvdC8w MDNfdGltZWxpbmUucGwgICAgfCAgIDkwICsrCiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvdC8w MDRfbWFuaWZlc3QucGwgICAgfCAgIDc1ICsKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90LzAw NV9pbnRlZ3JpdHkucGwgICB8ICAxMjUgKysKIHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC93cml0 ZV9tYW5pZmVzdC5jICAgICB8ICAyOTMgKysrKwogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3dy aXRlX21hbmlmZXN0LmggICAgIHwgICAzMyArCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0 d2FsLmMgICAgICAgICAgICAgfCAgIDM2ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9nYmFja3Vw LmggICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvYmFja3VwL2Jhc2ViYWNrdXAu aCAgICAgICAgICAgICAgIHwgICAgNSArLQogc3JjL2luY2x1ZGUvYmFja3VwL2Jhc2ViYWNrdXBf aW5jcmVtZW50YWwuaCAgIHwgICA1NSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaCAg ICAgICAgICAgICAgICAgfCAgICA5ICsKIHNyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0Ns dXN0ZXIucG0gICAgICB8ICAgMjEgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 ICAgICAgICAgICAgICB8ICAgMTIgKwogNDkgZmlsZXMgY2hhbmdlZCwgNTgzNCBpbnNlcnRpb25z KCspLCA1MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2Mvc3JjL3NnbWwvcmVm L3BnX2NvbWJpbmViYWNrdXAuc2dtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2Jh Y2t1cC9iYXNlYmFja3VwX2luY3JlbWVudGFsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmlu L3BnX2NvbWJpbmViYWNrdXAvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4v cGdfY29tYmluZWJhY2t1cC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf Y29tYmluZWJhY2t1cC9iYWNrdXBfbGFiZWwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4v cGdfY29tYmluZWJhY2t1cC9iYWNrdXBfbGFiZWwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i aW4vcGdfY29tYmluZWJhY2t1cC9jb3B5X2ZpbGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i aW4vcGdfY29tYmluZWJhY2t1cC9jb3B5X2ZpbGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i aW4vcGdfY29tYmluZWJhY2t1cC9sb2FkX21hbmlmZXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvYmluL3BnX2NvbWJpbmViYWNrdXAvbG9hZF9tYW5pZmVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL25scy5tawogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9iaW4vcGdfY29tYmluZWJhY2t1cC9wZ19jb21iaW5lYmFja3VwLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvcmVjb25zdHJ1Y3QuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9yZWNvbnN0cnVjdC5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3QvMDAxX2Jhc2ljLnBsCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3QvMDAyX2NvbXBhcmVfYmFja3Vw cy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90LzAwM190 aW1lbGluZS5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90 LzAwNF9tYW5pZmVzdC5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfY29tYmluZWJh Y2t1cC90LzAwNV9pbnRlZ3JpdHkucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2Nv bWJpbmViYWNrdXAvd3JpdGVfbWFuaWZlc3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4v cGdfY29tYmluZWJhY2t1cC93cml0ZV9tYW5pZmVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2luY2x1ZGUvYmFja3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuaAoKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9iYWNrdXAuc2dtbCBiL2RvYy9zcmMvc2dtbC9iYWNrdXAuc2dtbAppbmRleCA4 Y2IyNGQ2YWU1Li5iMzQ2OGVlYTNjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvYmFja3VwLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL2JhY2t1cC5zZ21sCkBAIC04NTcsMTIgKzg1Nyw3OSBAQCB0 ZXN0ICEgLWYgL21udC9zZXJ2ZXIvYXJjaGl2ZWRpci8wMDAwMDAwMTAwMDAwMEE5MDAwMDAwNjUg JmFtcDsmYW1wOyBjcCBwZ193YWwvMAogICAgPC9wYXJhPgogICA8L3NlY3QyPgogCisgIDxzZWN0 MiBpZD0iYmFja3VwLWluY3JlbWVudGFsLWJhY2t1cCI+CisgICA8dGl0bGU+TWFraW5nIGFuIElu Y3JlbWVudGFsIEJhY2t1cDwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFlvdSBjYW4gdXNlIDx4 cmVmIGxpbmtlbmQ9ImFwcC1wZ2Jhc2ViYWNrdXAiLz4gdG8gdGFrZSBhbiBpbmNyZW1lbnRhbAor ICAgIGJhY2t1cCBieSBzcGVjaWZ5aW5nIHRoZSA8bGl0ZXJhbD4tLWluY3JlbWVudGFsPC9saXRl cmFsPiBvcHRpb24uIFlvdSBtdXN0CisgICAgc3VwcGx5LCBhcyBhbiBhcmd1bWVudCB0byA8bGl0 ZXJhbD4tLWluY3JlbWVudGFsPC9saXRlcmFsPiwgdGhlIGJhY2t1cAorICAgIG1hbmlmZXN0IHRv IGFuIGVhcmxpZXIgYmFja3VwIGZyb20gdGhlIHNhbWUgc2VydmVyLiBJbiB0aGUgcmVzdWx0aW5n CisgICAgYmFja3VwLCBub24tcmVsYXRpb24gZmlsZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGVp ciBlbnRpcmV0eSwgYnV0IHNvbWUKKyAgICByZWxhdGlvbiBmaWxlcyBtYXkgYmUgcmVwbGFjZWQg Ynkgc21hbGxlciBpbmNyZW1lbnRhbCBmaWxlcyB3aGljaCBjb250YWluCisgICAgb25seSB0aGUg YmxvY2tzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIHRoZSBlYXJsaWVyIGJhY2t1cCBh bmQgZW5vdWdoCisgICAgbWV0YWRhdGEgdG8gcmVjb25zdHJ1Y3QgdGhlIGN1cnJlbnQgdmVyc2lv biBvZiB0aGUgZmlsZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVG8gZmlndXJlIG91 dCB3aGljaCBibG9ja3MgbmVlZCB0byBiZSBiYWNrZWQgdXAsIHRoZSBzZXJ2ZXIgdXNlcyBXQUwK KyAgICBzdW1tYXJpZXMsIHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlIGRhdGEgZGlyZWN0b3J5LCBp bnNpZGUgdGhlIGRpcmVjdG9yeQorICAgIDxsaXRlcmFsPnBnX3dhbC9zdW1tYXJpZXM8L2xpdGVy YWw+LiBJZiB0aGUgcmVxdWlyZWQgc3VtbWFyeSBmaWxlcyBhcmUgbm90CisgICAgcHJlc2VudCwg YW4gYXR0ZW1wdCB0byB0YWtlIGFuIGluY3JlbWVudGFsIGJhY2t1cCB3aWxsIGZhaWwuIFRoZSBz dW1tYXJpZXMKKyAgICBwcmVzZW50IGluIHRoaXMgZGlyZWN0b3J5IG11c3QgY292ZXIgYWxsIExT TnMgZnJvbSB0aGUgc3RhcnQgTFNOIG9mIHRoZQorICAgIHByaW9yIGJhY2t1cCB0byB0aGUgc3Rh cnQgTFNOIG9mIHRoZSBjdXJyZW50IGJhY2t1cC4gU2luY2UgdGhlIHNlcnZlciBsb29rcworICAg IGZvciBXQUwgc3VtbWFyaWVzIGp1c3QgYWZ0ZXIgZXN0YWJsaXNoaW5nIHRoZSBzdGFydCBMU04g b2YgdGhlIGN1cnJlbnQKKyAgICBiYWNrdXAsIHRoZSBuZWNlc3Nhcnkgc3VtbWFyeSBmaWxlcyBw cm9iYWJseSB3b24ndCBiZSBpbnN0YW50bHkgcHJlc2VudAorICAgIG9uIGRpc2ssIGJ1dCB0aGUg c2VydmVyIHdpbGwgd2FpdCBmb3IgYW55IG1pc3NpbmcgZmlsZXMgdG8gc2hvdyB1cC4KKyAgICBU aGlzIGFsc28gaGVscHMgaWYgdGhlIFdBTCBzdW1tYXJpemF0aW9uIHByb2Nlc3MgaGFzIGZhbGxl biBiZWhpbmQuCisgICAgSG93ZXZlciwgaWYgdGhlIG5lY2Vzc2FyeSBmaWxlcyBoYXZlIGFscmVh ZHkgYmVlbiByZW1vdmVkLCBvciBpZiB0aGUgV0FMCisgICAgc3VtbWFyaXplciBkb2Vzbid0IGNh dGNoIHVwIHF1aWNrbHkgZW5vdWdoLCB0aGUgaW5jcmVtZW50YWwgYmFja3VwIHdpbGwKKyAgICBm YWlsLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBXaGVuIHJlc3RvcmluZyBhbiBpbmNy ZW1lbnRhbCBiYWNrdXAsIGl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGhhdmUgbm90CisgICAgb25s eSB0aGUgaW5jcmVtZW50YWwgYmFja3VwIGl0c2VsZiBidXQgYWxzbyBhbGwgZWFybGllciBiYWNr dXBzIHRoYXQKKyAgICBhcmUgcmVxdWlyZWQgdG8gc3VwcGx5IHRoZSBibG9ja3Mgb21pdHRlZCBm cm9tIHRoZSBpbmNyZW1lbnRhbCBiYWNrdXAuCisgICAgU2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1w Z2NvbWJpbmViYWNrdXAiLz4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQKKyAgICB0aGlz IHJlcXVpcmVtZW50LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBOb3RlIHRoYXQgYWxs IG9mIHRoZSByZXF1aXJlbWVudHMgZm9yIG1ha2luZyB1c2Ugb2YgYSBmdWxsIGJhY2t1cCBhbHNv CisgICAgYXBwbHkgdG8gYW4gaW5jcmVtZW50YWwgYmFja3VwLiBGb3IgaW5zdGFuY2UsIHlvdSBz dGlsbCBuZWVkIGFsbCBvZiB0aGUKKyAgICBXQUwgc2VnbWVudCBmaWxlcyBnZW5lcmF0ZWQgZHVy aW5nIGFuZCBhZnRlciB0aGUgZmlsZSBzeXN0ZW0gYmFja3VwLCBhbmQKKyAgICBhbnkgcmVsZXZh bnQgV0FMIGhpc3RvcnkgZmlsZXMuIEFuZCB5b3Ugc3RpbGwgbmVlZCB0byBjcmVhdGUgYQorICAg IDxsaXRlcmFsPnJlY292ZXJ5LnNpZ25hbDwvbGl0ZXJhbD4gKG9yIDxsaXRlcmFsPnN0YW5kYnku c2lnbmFsPC9saXRlcmFsPikKKyAgICBhbmQgcGVyZm9ybSByZWNvdmVyeSwgYXMgZGVzY3JpYmVk IGluCisgICAgPHhyZWYgbGlua2VuZD0iYmFja3VwLXBpdHItcmVjb3ZlcnkiIC8+LiBUaGUgcmVx dWlyZW1lbnQgdG8gaGF2ZSBlYXJsaWVyCisgICAgYmFja3VwcyBhdmFpbGFibGUgYXQgcmVzdG9y ZSB0aW1lIGFuZCB0byB1c2UKKyAgICA8bGl0ZXJhbD5wZ19jb21iaW5lYmFja3VwPC9saXRlcmFs PiBpcyBhbiBhZGRpdGlvbmFsIHJlcXVpcmVtZW50IG9uIHRvcCBvZgorICAgIGV2ZXJ5dGhpbmcg ZWxzZS4gS2VlcCBpbiBtaW5kIHRoYXQgPGFwcGxpY2F0aW9uPlBvc3RncmVTUUw8L2FwcGxpY2F0 aW9uPgorICAgIGhhcyBubyBidWlsdC1pbiBtZWNoYW5pc20gdG8gZmlndXJlIG91dCB3aGljaCBi YWNrdXBzIGFyZSBzdGlsbCBuZWVkZWQgYXMKKyAgICBhIGJhc2lzIGZvciByZXN0b3JpbmcgbGF0 ZXIgaW5jcmVtZW50YWwgYmFja3Vwcy4gWW91IG11c3Qga2VlcCB0cmFjayBvZgorICAgIHRoZSBy ZWxhdGlvbnNoaXBzIGJldHdlZW4geW91ciBmdWxsIGFuZCBpbmNyZW1lbnRhbCBiYWNrdXBzIG9u IHlvdXIgb3duLAorICAgIGFuZCBiZSBjZXJ0YWluIG5vdCB0byByZW1vdmUgZWFybGllciBiYWNr dXBzIGlmIHRoZXkgbWlnaHQgYmUgbmVlZGVkIHdoZW4KKyAgICByZXN0b3JpbmcgbGF0ZXIgaW5j cmVtZW50YWwgYmFja3Vwcy4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgSW5jcmVtZW50 YWwgYmFja3VwcyB0eXBpY2FsbHkgb25seSBtYWtlIHNlbnNlIGZvciByZWxhdGl2ZWx5IGxhcmdl CisgICAgZGF0YWJhc2VzIHdoZXJlIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgZGF0YSBk b2VzIG5vdCBjaGFuZ2UsIG9yIG9ubHkKKyAgICBjaGFuZ2VzIHNsb3dseS4gRm9yIGEgc21hbGwg ZGF0YWJhc2UsIGl0J3Mgc2ltcGxlciB0byBpZ25vcmUgdGhlIGV4aXN0ZW5jZQorICAgIG9mIGlu Y3JlbWVudGFsIGJhY2t1cHMgYW5kIHNpbXBseSB0YWtlIGZ1bGwgYmFja3Vwcywgd2hpY2ggYXJl IHNpbXBsZXIKKyAgICB0byBtYW5hZ2UuIEZvciBhIGxhcmdlIGRhdGFiYXNlIGFsbCBvZiB3aGlj aCBpcyBoZWF2aWx5IG1vZGlmaWVkLAorICAgIGluY3JlbWVudGFsIGJhY2t1cHMgd29uJ3QgYmUg bXVjaCBzbWFsbGVyIHRoYW4gZnVsbCBiYWNrdXBzLgorICAgPC9wYXJhPgorICA8L3NlY3QyPgor CiAgIDxzZWN0MiBpZD0iYmFja3VwLWxvd2xldmVsLWJhc2UtYmFja3VwIj4KICAgIDx0aXRsZT5N YWtpbmcgYSBCYXNlIEJhY2t1cCBVc2luZyB0aGUgTG93IExldmVsIEFQSTwvdGl0bGU+CiAgICA8 cGFyYT4KLSAgICBUaGUgcHJvY2VkdXJlIGZvciBtYWtpbmcgYSBiYXNlIGJhY2t1cCB1c2luZyB0 aGUgbG93IGxldmVsCi0gICAgQVBJcyBjb250YWlucyBhIGZldyBtb3JlIHN0ZXBzIHRoYW4KLSAg ICB0aGUgPHhyZWYgbGlua2VuZD0iYXBwLXBnYmFzZWJhY2t1cCIvPiBtZXRob2QsIGJ1dCBpcyBy ZWxhdGl2ZWx5CisgICAgSW5zdGVhZCBvZiB0YWtpbmcgYSBmdWxsIG9yIGluY3JlbWVudGFsIGJh c2UgYmFja3VwIHVzaW5nCisgICAgPHhyZWYgbGlua2VuZD0iYXBwLXBnYmFzZWJhY2t1cCIvPiwg eW91IGNhbiB0YWtlIGEgYmFzZSBiYWNrdXAgdXNpbmcgdGhlCisgICAgbG93LWxldmVsIEFQSS4g VGhpcyBwcm9jZWR1cmUgY29udGFpbnMgYSBmZXcgbW9yZSBzdGVwcyB0aGFuCisgICAgdGhlIDxh cHBsaWNhdGlvbj5wZ19iYXNlYmFja3VwPC9hcHBsaWNhdGlvbj4gbWV0aG9kLCBidXQgaXMgcmVs YXRpdmVseQogICAgIHNpbXBsZS4gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdGhhdCB0aGVzZSBzdGVw cyBhcmUgZXhlY3V0ZWQgaW4KICAgICBzZXF1ZW5jZSwgYW5kIHRoYXQgdGhlIHN1Y2Nlc3Mgb2Yg YSBzdGVwIGlzIHZlcmlmaWVkIGJlZm9yZQogICAgIHByb2NlZWRpbmcgdG8gdGhlIG5leHQgc3Rl cC4KQEAgLTExMTgsNyArMTE4NSw4IEBAIFNFTEVDVCAqIEZST00gcGdfYmFja3VwX3N0b3Aod2Fp dF9mb3JfYXJjaGl2ZSA9PiB0cnVlKTsKICAgIDwvbGlzdGl0ZW0+CiAgICA8bGlzdGl0ZW0+CiAg ICAgPHBhcmE+Ci0gICAgIFJlc3RvcmUgdGhlIGRhdGFiYXNlIGZpbGVzIGZyb20geW91ciBmaWxl IHN5c3RlbSBiYWNrdXAuICBCZSBzdXJlIHRoYXQgdGhleQorICAgICBJZiB5b3UncmUgcmVzdG9y aW5nIGEgZnVsbCBiYWNrdXAsIHlvdSBjYW4gcmVzdG9yZSB0aGUgZGF0YWJhc2UgZmlsZXMKKyAg ICAgZGlyZWN0bHkgaW50byB0aGUgdGFyZ2V0IGRpcmVjdG9yaWVzLiAgQmUgc3VyZSB0aGF0IHRo ZXkKICAgICAgYXJlIHJlc3RvcmVkIHdpdGggdGhlIHJpZ2h0IG93bmVyc2hpcCAodGhlIGRhdGFi YXNlIHN5c3RlbSB1c2VyLCBub3QKICAgICAgPGxpdGVyYWw+cm9vdDwvbGl0ZXJhbD4hKSBhbmQg d2l0aCB0aGUgcmlnaHQgcGVybWlzc2lvbnMuICBJZiB5b3UgYXJlIHVzaW5nCiAgICAgIHRhYmxl c3BhY2VzLApAQCAtMTEyNiw2ICsxMTk0LDE5IEBAIFNFTEVDVCAqIEZST00gcGdfYmFja3VwX3N0 b3Aod2FpdF9mb3JfYXJjaGl2ZSA9PiB0cnVlKTsKICAgICAgd2VyZSBjb3JyZWN0bHkgcmVzdG9y ZWQuCiAgICAgPC9wYXJhPgogICAgPC9saXN0aXRlbT4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFy YT4KKyAgICAgSWYgeW91J3JlIHJlc3RvcmluZyBhbiBpbmNyZW1lbnRhbCBiYWNrdXAsIHlvdSds bCBuZWVkIHRvIHJlc3RvcmUgdGhlCisgICAgIGluY3JlbWVudGFsIGJhY2t1cCBhbmQgYWxsIGVh cmxpZXIgYmFja3VwcyB1cG9uIHdoaWNoIGl0IGRpcmVjdGx5IG9yCisgICAgIGluZGlyZWN0bHkg ZGVwZW5kcyB0byB0aGUgbWFjaGluZSB3aGVyZSB5b3UgYXJlIHBlcmZvcm1pbmcgdGhlIHJlc3Rv cmUuCisgICAgIFRoZXNlIGJhY2t1cHMgd2lsbCBuZWVkIHRvIGJlIHBsYWNlZCBpbiBzZXBhcmF0 ZSBkaXJlY3Rvcmllcywgbm90IHRoZQorICAgICB0YXJnZXQgZGlyZWN0b3JpZXMgd2hlcmUgeW91 IHdhbnQgdGhlIHJ1bm5pbmcgc2VydmVyIHRvIGVuZCB1cC4KKyAgICAgT25jZSB0aGlzIGlzIGRv bmUsIHVzZSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdjb21iaW5lYmFja3VwIi8+IHRvIHB1bGwKKyAg ICAgZGF0YSBmcm9tIHRoZSBmdWxsIGJhY2t1cCBhbmQgYWxsIG9mIHRoZSBzdWJzZXF1ZW50IGlu Y3JlbWVudGFsIGJhY2t1cHMKKyAgICAgYW5kIHdyaXRlIG91dCBhIHN5bnRoZXRpYyBmdWxsIGJh Y2t1cCB0byB0aGUgdGFyZ2V0IGRpcmVjdG9yaWVzLiBBcyBhYm92ZSwKKyAgICAgdmVyaWZ5IHRo YXQgcGVybWlzc2lvbnMgYW5kIHRhYmxlc3BhY2UgbGlua3MgYXJlIGNvcnJlY3QuCisgICAgPC9w YXJhPgorICAgPC9saXN0aXRlbT4KICAgIDxsaXN0aXRlbT4KICAgICA8cGFyYT4KICAgICAgUmVt b3ZlIGFueSBmaWxlcyBwcmVzZW50IGluIDxmaWxlbmFtZT5wZ193YWwvPC9maWxlbmFtZT47IHRo ZXNlIGNhbWUgZnJvbSB0aGUKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBi L2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCBlZTk4NTg1MDI3Li5iNTYyNGNhODg0IDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sCkBAIC00MTUzLDEzICs0MTUzLDExIEBAIHJlc3RvcmVfY29tbWFuZCA9ICdjb3B5 ICJDOlxcc2VydmVyXFxhcmNoaXZlZGlyXFwlZiIgIiVwIicgICMgV2luZG93cwogICAgPHNlY3Qy IGlkPSJydW50aW1lLWNvbmZpZy13YWwtc3VtbWFyaXphdGlvbiI+CiAgICAgPHRpdGxlPldBTCBT dW1tYXJpemF0aW9uPC90aXRsZT4KIAotIDwhLS0KICAgICA8cGFyYT4KICAgICAgVGhlc2Ugc2V0 dGluZ3MgY29udHJvbCBXQUwgc3VtbWFyaXphdGlvbiwgYSBmZWF0dXJlIHdoaWNoIG11c3QgYmUK ICAgICAgZW5hYmxlZCBpbiBvcmRlciB0byBwZXJmb3JtIGFuCiAgICAgIDxsaW5rIGxpbmtlbmQ9 ImJhY2t1cC1pbmNyZW1lbnRhbC1iYWNrdXAiPmluY3JlbWVudGFsIGJhY2t1cDwvbGluaz4uCiAg ICAgPC9wYXJhPgotIC0tPgogCiAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgPHZhcmxpc3RlbnRy eSBpZD0iZ3VjLXN1bW1hcml6ZS13YWwiIHhyZWZsYWJlbD0ic3VtbWFyaXplX3dhbCI+CmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCBiL2RvYy9zcmMvc2dtbC9wcm90b2Nv bC5zZ21sCmluZGV4IGFmM2YwMTZmNzQuLjlhNjY5MTgxNzEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9wcm90b2NvbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCkBAIC0y NTk5LDYgKzI1OTksMTkgQEAgcHNxbCAiZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0aW9uPWRhdGFi YXNlIiAtYyAiSURFTlRJRllfU1lTVEVNOyIKICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxp c3RlbnRyeT4KIAorICAgIDx2YXJsaXN0ZW50cnkgaWQ9InByb3RvY29sLXJlcGxpY2F0aW9uLXVw bG9hZC1tYW5pZmVzdCI+CisgICAgIDx0ZXJtPgorICAgICAgPGxpdGVyYWw+VVBMT0FEX01BTklG RVNUPC9saXRlcmFsPgorICAgICAgPGluZGV4dGVybT48cHJpbWFyeT5VUExPQURfTUFOSUZFU1Q8 L3ByaW1hcnk+PC9pbmRleHRlcm0+CisgICAgIDwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAg ICAgPHBhcmE+CisgICAgICAgVXBsb2FkcyBhIGJhY2t1cCBtYW5pZmVzdCBpbiBwcmVwYXJhdGlv biBmb3IgdGFraW5nIGFuIGluY3JlbWVudGFsCisgICAgICAgYmFja3VwLgorICAgICAgPC9wYXJh PgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgPHZhcmxpc3Rl bnRyeSBpZD0icHJvdG9jb2wtcmVwbGljYXRpb24tYmFzZS1iYWNrdXAiIHhyZWZsYWJlbD0iQkFT RV9CQUNLVVAiPgogICAgICA8dGVybT48bGl0ZXJhbD5CQVNFX0JBQ0tVUDwvbGl0ZXJhbD4gWyAo IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAu Li5dICkgXQogICAgICAgPGluZGV4dGVybT48cHJpbWFyeT5CQVNFX0JBQ0tVUDwvcHJpbWFyeT48 L2luZGV4dGVybT4KQEAgLTI4MzgsNiArMjg1MSwxNyBAQCBwc3FsICJkYm5hbWU9cG9zdGdyZXMg cmVwbGljYXRpb249ZGF0YWJhc2UiIC1jICJJREVOVElGWV9TWVNURU07IgogICAgICAgICAgIDwv cGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5JTkNSRU1FTlRB TDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+ CisgICAgICAgICAgIFJlcXVlc3RzIGFuIGluY3JlbWVudGFsIGJhY2t1cC4gVGhlCisgICAgICAg ICAgIDxsaXRlcmFsPlVQTE9BRF9NQU5JRkVTVDwvbGl0ZXJhbD4gY29tbWFuZCBtdXN0IGJlIGV4 ZWN1dGVkCisgICAgICAgICAgIGJlZm9yZSBydW5uaW5nIGEgYmFzZSBiYWNrdXAgd2l0aCB0aGlz IG9wdGlvbi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAg ICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgIDwvcGFyYT4K IApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9hbGxmaWxlcy5zZ21sCmluZGV4IDU0YjVmMjJkNmUuLmZkYTQ2OTBlYWIgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2FsbGZpbGVzLnNnbWwKQEAgLTIwMiw2ICsyMDIsNyBAQCBDb21wbGV0ZSBsaXN0IG9mIHVz YWJsZSBzZ21sIHNvdXJjZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4KIDwhRU5USVRZIHBnQmFz ZWJhY2t1cCAgICAgICBTWVNURU0gInBnX2Jhc2ViYWNrdXAuc2dtbCI+CiA8IUVOVElUWSBwZ2Jl bmNoICAgICAgICAgICAgU1lTVEVNICJwZ2JlbmNoLnNnbWwiPgogPCFFTlRJVFkgcGdDaGVja3N1 bXMgICAgICAgIFNZU1RFTSAicGdfY2hlY2tzdW1zLnNnbWwiPgorPCFFTlRJVFkgcGdDb21iaW5l YmFja3VwICAgIFNZU1RFTSAicGdfY29tYmluZWJhY2t1cC5zZ21sIj4KIDwhRU5USVRZIHBnQ29u ZmlnICAgICAgICAgICBTWVNURU0gInBnX2NvbmZpZy1yZWYuc2dtbCI+CiA8IUVOVElUWSBwZ0Nv bnRyb2xkYXRhICAgICAgU1lTVEVNICJwZ19jb250cm9sZGF0YS5zZ21sIj4KIDwhRU5USVRZIHBn Q3RsICAgICAgICAgICAgICBTWVNURU0gInBnX2N0bC1yZWYuc2dtbCI+CmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvcmVmL3BnX2Jhc2ViYWNrdXAuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdf YmFzZWJhY2t1cC5zZ21sCmluZGV4IDBiODdmZDJkNGQuLjdjMTgzYTVjZmQgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9yZWYvcGdfYmFzZWJhY2t1cC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9y ZWYvcGdfYmFzZWJhY2t1cC5zZ21sCkBAIC0zOCwxMSArMzgsMjUgQEAgUG9zdGdyZVNRTCBkb2N1 bWVudGF0aW9uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIDxhcHBsaWNhdGlvbj5wZ19iYXNl YmFja3VwPC9hcHBsaWNhdGlvbj4gbWFrZXMgYW4gZXhhY3QgY29weSBvZiB0aGUgZGF0YWJhc2UK LSAgIGNsdXN0ZXIncyBmaWxlcywgd2hpbGUgbWFraW5nIHN1cmUgdGhlIHNlcnZlciBpcyBwdXQg aW50byBhbmQKLSAgIG91dCBvZiBiYWNrdXAgbW9kZSBhdXRvbWF0aWNhbGx5LiBCYWNrdXBzIGFy ZSBhbHdheXMgdGFrZW4gb2YgdGhlIGVudGlyZQotICAgZGF0YWJhc2UgY2x1c3RlcjsgaXQgaXMg bm90IHBvc3NpYmxlIHRvIGJhY2sgdXAgaW5kaXZpZHVhbCBkYXRhYmFzZXMgb3IKLSAgIGRhdGFi YXNlIG9iamVjdHMuIEZvciBzZWxlY3RpdmUgYmFja3VwcywgYW5vdGhlciB0b29sIHN1Y2ggYXMK KyAgIDxhcHBsaWNhdGlvbj5wZ19iYXNlYmFja3VwPC9hcHBsaWNhdGlvbj4gY2FuIHRha2UgYSBm dWxsIG9yIGluY3JlbWVudGFsCisgICBiYXNlIGJhY2t1cCBvZiB0aGUgZGF0YWJhc2UuIFdoZW4g dXNlZCB0byB0YWtlIGEgZnVsbCBiYWNrdXAsIGl0IG1ha2VzIGFuCisgICBleGFjdCBjb3B5IG9m IHRoZSBkYXRhYmFzZSBjbHVzdGVyJ3MgZmlsZXMuIFdoZW4gdXNlZCB0byB0YWtlIGFuIGluY3Jl bWVudGFsCisgICBiYWNrdXAsIHNvbWUgZmlsZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcGFydCBv ZiBhIGZ1bGwgYmFja3VwIG1heSBiZQorICAgcmVwbGFjZWQgd2l0aCBpbmNyZW1lbnRhbCB2ZXJz aW9ucyBvZiB0aGUgc2FtZSBmaWxlcywgY29udGFpbmluZyBvbmx5IHRob3NlCisgICBibG9ja3Mg dGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIHJlZmVyZW5jZSBiYWNrdXAuIEFuIGlu Y3JlbWVudGFsCisgICBiYWNrdXAgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHk7IGluc3RlYWQsCisg ICA8eHJlZiBsaW5rZW5kPSJhcHAtcGdjb21iaW5lYmFja3VwIi8+IG11c3QgZmlyc3QKKyAgIGJl IHVzZWQgdG8gY29tYmluZSBpdCB3aXRoIHRoZSBwcmV2aW91cyBiYWNrdXBzIHVwb24gd2hpY2gg aXQgZGVwZW5kcy4KKyAgIFNlZSA8eHJlZiBsaW5rZW5kPSJiYWNrdXAtaW5jcmVtZW50YWwtYmFj a3VwIiAvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgYWJvdXQgaW5jcmVtZW50YWwgYmFja3Vw cywgYW5kIDx4cmVmIGxpbmtlbmQ9ImJhY2t1cC1waXRyLXJlY292ZXJ5IiAvPgorICAgZm9yIHN0 ZXBzIHRvIHJlY292ZXIgZnJvbSBhIGJhY2t1cC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg SW4gYW55IG1vZGUsIDxhcHBsaWNhdGlvbj5wZ19iYXNlYmFja3VwPC9hcHBsaWNhdGlvbj4gbWFr ZXMgc3VyZSB0aGUgc2VydmVyCisgICBpcyBwdXQgaW50byBhbmQgb3V0IG9mIGJhY2t1cCBtb2Rl IGF1dG9tYXRpY2FsbHkuIEJhY2t1cHMgYXJlIGFsd2F5cyB0YWtlbiBvZgorICAgdGhlIGVudGly ZSBkYXRhYmFzZSBjbHVzdGVyOyBpdCBpcyBub3QgcG9zc2libGUgdG8gYmFjayB1cCBpbmRpdmlk dWFsCisgICBkYXRhYmFzZXMgb3IgZGF0YWJhc2Ugb2JqZWN0cy4gRm9yIHNlbGVjdGl2ZSBiYWNr dXBzLCBhbm90aGVyIHRvb2wgc3VjaCBhcwogICAgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIv PiBtdXN0IGJlIHVzZWQuCiAgIDwvcGFyYT4KIApAQCAtMTk3LDYgKzIxMSwxOSBAQCBQb3N0Z3Jl U1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5 PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1pIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vbGRfbWFuaWZlc3RfZmlsZTwvcmVwbGFjZWFibGU+PC9v cHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWluY3JlbWVudGFsPTxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vbGRfbWVhbmlmZXN0X2ZpbGU8L3JlcGxhY2VhYmxlPjwv b3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg UGVyZm9ybXMgYW4gPGxpbmsgbGlua2VuZD0iYmFja3VwLWluY3JlbWVudGFsLWJhY2t1cCI+aW5j cmVtZW50YWwKKyAgICAgICAgYmFja3VwPC9saW5rPi4gVGhlIGJhY2t1cCBtYW5pZmVzdCBmb3Ig dGhlIHJlZmVyZW5jZQorICAgICAgICBiYWNrdXAgbXVzdCBiZSBwcm92aWRlZCwgYW5kIHdpbGwg YmUgdXBsb2FkZWQgdG8gdGhlIHNlcnZlciwgd2hpY2ggd2lsbAorICAgICAgICByZXNwb25kIGJ5 IHNlbmRpbmcgdGhlIHJlcXVlc3RlZCBpbmNyZW1lbnRhbCBiYWNrdXAuCisgICAgICAgPC9wYXJh PgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxp c3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LVI8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8 dGVybT48b3B0aW9uPi0td3JpdGUtcmVjb3ZlcnktY29uZjwvb3B0aW9uPjwvdGVybT4KZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfY29tYmluZWJhY2t1cC5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9wZ19jb21iaW5lYmFja3VwLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uZTE3Mjk2NzFhNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9y ZWYvcGdfY29tYmluZWJhY2t1cC5zZ21sCkBAIC0wLDAgKzEsMjQwIEBACis8IS0tCitkb2Mvc3Jj L3NnbWwvcmVmL3BnX2NvbWJpbmViYWNrdXAuc2dtbAorUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CistLT4KKworPHJlZmVudHJ5IGlkPSJhcHAtcGdjb21iaW5lYmFja3VwIj4KKyA8aW5kZXh0ZXJt IHpvbmU9ImFwcC1wZ2NvbWJpbmViYWNrdXAiPgorICA8cHJpbWFyeT5wZ19jb21iaW5lYmFja3Vw PC9wcmltYXJ5PgorIDwvaW5kZXh0ZXJtPgorCisgPHJlZm1ldGE+CisgIDxyZWZlbnRyeXRpdGxl PjxhcHBsaWNhdGlvbj5wZ19jb21iaW5lYmFja3VwPC9hcHBsaWNhdGlvbj48L3JlZmVudHJ5dGl0 bGU+CisgIDxtYW52b2xudW0+MTwvbWFudm9sbnVtPgorICA8cmVmbWlzY2luZm8+QXBwbGljYXRp b248L3JlZm1pc2NpbmZvPgorIDwvcmVmbWV0YT4KKworIDxyZWZuYW1lZGl2PgorICA8cmVmbmFt ZT5wZ19jb21iaW5lYmFja3VwPC9yZWZuYW1lPgorICA8cmVmcHVycG9zZT5yZWNvbnN0cnVjdCBh IGZ1bGwgYmFja3VwIGZyb20gYW4gaW5jcmVtZW50YWwgYmFja3VwIGFuZCBkZXBlbmRlbnQgYmFj a3VwczwvcmVmcHVycG9zZT4KKyA8L3JlZm5hbWVkaXY+CisKKyA8cmVmc3lub3BzaXNkaXY+Cisg IDxjbWRzeW5vcHNpcz4KKyAgIDxjb21tYW5kPnBnX2NvbWJpbmViYWNrdXA8L2NvbW1hbmQ+Cisg ICA8YXJnIHJlcD0icmVwZWF0Ij48cmVwbGFjZWFibGU+b3B0aW9uPC9yZXBsYWNlYWJsZT48L2Fy Zz4KKyAgIDxhcmcgcmVwPSJyZXBlYXQiPjxyZXBsYWNlYWJsZT5iYWNrdXBfZGlyZWN0b3J5PC9y ZXBsYWNlYWJsZT48L2FyZz4KKyAgPC9jbWRzeW5vcHNpcz4KKyA8L3JlZnN5bm9wc2lzZGl2Pgor CisgPHJlZnNlY3QxPgorICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorICA8cGFyYT4KKyAg IDxhcHBsaWNhdGlvbj5wZ19jb21iaW5lYmFja3VwPC9hcHBsaWNhdGlvbj4gaXMgdXNlZCB0byBy ZWNvbnN0cnVjdCBhCisgICBzeW50aGV0aWMgZnVsbCBiYWNrdXAgZnJvbSBhbgorICAgPGxpbmsg bGlua2VuZD0iYmFja3VwLWluY3JlbWVudGFsLWJhY2t1cCI+aW5jcmVtZW50YWwgYmFja3VwPC9s aW5rPiBhbmQgdGhlCisgICBlYXJsaWVyIGJhY2t1cHMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBTcGVjaWZ5IGFsbCBvZiB0aGUgcmVxdWlyZWQgYmFj a3VwcyBvbiB0aGUgY29tbWFuZCBsaW5lIGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KKyAgIFRoYXQg aXMsIHRoZSBmaXJzdCBiYWNrdXAgZGlyZWN0b3J5IHNob3VsZCBiZSB0aGUgcGF0aCB0byB0aGUg ZnVsbCBiYWNrdXAsIGFuZAorICAgdGhlIGxhc3Qgc2hvdWxkIGJlIHRoZSBwYXRoIHRvIHRoZSBm aW5hbCBpbmNyZW1lbnRhbCBiYWNrdXAKKyAgIHRoYXQgeW91IHdpc2ggdG8gcmVzdG9yZS4gVGhl IHJlY29uc3RydWN0ZWQgYmFja3VwIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUKKyAgIG91dHB1dCBk aXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZSA8b3B0aW9uPi1vPC9vcHRpb24+IG9wdGlvbi4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgQWx0aG91Z2ggPGFwcGxpY2F0aW9uPnBnX2NvbWJpbmVi YWNrdXA8L2FwcGxpY2F0aW9uPiB3aWxsIGF0dGVtcHQgdG8gdmVyaWZ5CisgICB0aGF0IHRoZSBi YWNrdXBzIHlvdSBzcGVjaWZ5IGZvcm0gYSBsZWdhbCBiYWNrdXAgY2hhaW4gZnJvbSB3aGljaCBh IGNvcnJlY3QKKyAgIGZ1bGwgYmFja3VwIGNhbiBiZSByZWNvbnN0cnVjdGVkLCBpdCBpcyBub3Qg ZGVzaWduZWQgdG8gaGVscCB5b3Uga2VlcCB0cmFjaworICAgb2Ygd2hpY2ggYmFja3VwcyBkZXBl bmQgb24gd2hpY2ggb3RoZXIgYmFja3Vwcy4gSWYgeW91IHJlbW92ZSB0aGUgb25lIG9yCisgICBt b3JlIG9mIHRoZSBwcmV2aW91cyBiYWNrdXBzIHVwb24gd2hpY2ggeW91ciBpbmNyZW1lbnRhbAor ICAgYmFja3VwIHJlbGllcywgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gcmVzdG9yZSBpdC4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgU2luY2UgdGhlIG91dHB1dCBvZiA8YXBwbGljYXRpb24+ cGdfY29tYmluZWJhY2t1cDwvYXBwbGljYXRpb24+IGlzIGEKKyAgIHN5bnRoZXRpYyBmdWxsIGJh Y2t1cCwgaXQgY2FuIGJlIHVzZWQgYXMgYW4gaW5wdXQgdG8gYSBmdXR1cmUgaW52b2NhdGlvbiBv ZgorICAgPGFwcGxpY2F0aW9uPnBnX2NvbWJpbmViYWNrdXA8L2FwcGxpY2F0aW9uPi4gVGhlIHN5 bnRoZXRpYyBmdWxsIGJhY2t1cCB3b3VsZAorICAgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5k IGxpbmUgaW4gbGlldSBvZiB0aGUgY2hhaW4gb2YgYmFja3VwcyBmcm9tIHdoaWNoCisgICBpdCB3 YXMgcmVjb25zdHJ1Y3RlZC4KKyAgPC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+ CisgIDx0aXRsZT5PcHRpb25zPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgPHZhcmlhYmxlbGlz dD4KKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWQ8L29wdGlvbj48 L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZGVidWc8L29wdGlvbj48L3Rlcm0+CisgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFByaW50IGxvdHMgb2YgZGVidWcg bG9nZ2luZyBvdXRwdXQgb24gPGZpbGVuYW1lPnN0ZGVycjwvZmlsZW5hbWU+LgorICAgICAgIDwv cGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1uPC9vcHRpb24+PC90ZXJtPgorICAg ICAgPHRlcm0+PG9wdGlvbj4tLWRyeS1ydW48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8b3B0aW9uPi1uPC9vcHRpb24+LzxvcHRp b24+LS1kcnktcnVuPC9vcHRpb24+IG9wdGlvbiBpbnN0cnVjdHMKKyAgICAgICAgPGNvbW1hbmQ+ cGdfY29taW5lYmFja3VwPC9jb21tYW5kPiB0byBmaWd1cmUgb3V0IHdoYXQgd291bGQgYmUgZG9u ZQorICAgICAgICB3aXRob3V0IGFjdHVhbGx5IGNyZWF0aW5nIHRoZSB0YXJnZXQgZGlyZWN0b3J5 IG9yIGFueSBvdXRwdXQgZmlsZXMuCisgICAgICAgIEl0IGlzIHBhcnRpY3VsYXJseSB1c2VmdWwg aW4gY29taW5hdGlvbiB3aXRoIDxvcHRpb24+LS1kZWJ1Zzwvb3B0aW9uPi4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tTjwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDx0ZXJtPjxvcHRpb24+LS1uby1zeW5jPC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVt PgorICAgICAgIDxwYXJhPgorICAgICAgICBCeSBkZWZhdWx0LCA8Y29tbWFuZD5wZ19jb21iaW5l YmFja3VwPC9jb21tYW5kPiB3aWxsIHdhaXQgZm9yIGFsbCBmaWxlcworICAgICAgICB0byBiZSB3 cml0dGVuIHNhZmVseSB0byBkaXNrLiAgVGhpcyBvcHRpb24gY2F1c2VzCisgICAgICAgIDxjb21t YW5kPnBnX2NvbWJpbmViYWNrdXA8L2NvbW1hbmQ+IHRvIHJldHVybiB3aXRob3V0IHdhaXRpbmcs IHdoaWNoIGlzCisgICAgICAgIGZhc3RlciwgYnV0IG1lYW5zIHRoYXQgYSBzdWJzZXF1ZW50IG9w ZXJhdGluZyBzeXN0ZW0gY3Jhc2ggY2FuIGxlYXZlCisgICAgICAgIHRoZSBvdXRwdXQgYmFja3Vw IGNvcnJ1cHQuICBHZW5lcmFsbHksIHRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgdGVzdGluZwor ICAgICAgICBidXQgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSBwcm9kdWN0aW9u IGluc3RhbGxhdGlvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlv bj4tbyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3V0cHV0ZGlyPC9yZXBsYWNlYWJs ZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tb3V0cHV0PTxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vdXRwdXRkaXI8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwv dGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lmaWVz IHRoZSBvdXRwdXQgZGlyZWN0b3J5IHRvIHdoaWNoIHRoZSBzeW50aGV0aWMgZnVsbCBiYWNrdXAK KyAgICAgICAgc2hvdWxkIGJlIHdyaXR0ZW4uIEN1cnJlbnRseSwgdGhpcyBhcmd1bWVudCBpcyBy ZXF1aXJlZC4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tVCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b2xkZGlyPC9yZXBsYWNlYWJsZT49PHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5ld2RpcjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90 ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLXRhYmxlc3BhY2UtbWFwcGluZz08cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+b2xkZGlyPC9yZXBsYWNlYWJsZT49PHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPm5ld2RpcjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZWxvY2F0ZXMgdGhlIHRhYmxl c3BhY2UgaW4gZGlyZWN0b3J5IDxyZXBsYWNlYWJsZT5vbGRkaXI8L3JlcGxhY2VhYmxlPgorICAg ICAgICB0byA8cmVwbGFjZWFibGU+bmV3ZGlyPC9yZXBsYWNlYWJsZT4gZHVyaW5nIHRoZSBiYWNr dXAuCisgICAgICAgIDxyZXBsYWNlYWJsZT5vbGRkaXI8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYWJz b2x1dGUgcGF0aCBvZiB0aGUgdGFibGVzcGFjZQorICAgICAgICBhcyBpdCBleGlzdHMgaW4gdGhl IGZpcnN0IGJhY2t1cCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKKyAgICAgICAgYW5k IDxyZXBsYWNlYWJsZT5uZXdkaXI8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYWJzb2x1dGUgcGF0aCB0 byB1c2UgZm9yIHRoZQorICAgICAgICB0YWJsZXNwYWNlIGluIHRoZSByZWNvbnN0cnVjdGVkIGJh Y2t1cC4gIElmIGVpdGhlciBwYXRoIG5lZWRzIHRvIGNvbnRhaW4KKyAgICAgICAgYW4gZXF1YWwg c2lnbiAoPGxpdGVyYWw+PTwvbGl0ZXJhbD4pLCBwcmVjZWRlIHRoYXQgd2l0aCBhIGJhY2tzbGFz aC4KKyAgICAgICAgVGhpcyBvcHRpb24gY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyBm b3IgbXVsdGlwbGUgdGFibGVzcGFjZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRl bT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0 ZXJtPjxvcHRpb24+LS1tYW5pZmVzdC1jaGVja3N1bXM9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmFsZ29yaXRobTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBMaWtlIDx4cmVmIGxpbmtlbmQ9ImFwcC1w Z2Jhc2ViYWNrdXAiLz4sCisgICAgICAgIDxhcHBsaWNhdGlvbj5wZ19jb21iaW5lYmFja3VwPC9h cHBsaWNhdGlvbj4gd3JpdGVzIGEgYmFja3VwIG1hbmlmZXN0CisgICAgICAgIGluIHRoZSBvdXRw dXQgZGlyZWN0b3J5LiBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGNoZWNrc3VtIGFsZ29yaXRo bQorICAgICAgICB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHRvIGVhY2ggZmlsZSBpbmNsdWRlZCBp biB0aGUgYmFja3VwIG1hbmlmZXN0LgorICAgICAgICBDdXJyZW50bHksIHRoZSBhdmFpbGFibGUg YWxnb3JpdGhtcyBhcmUgPGxpdGVyYWw+Tk9ORTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFs PkNSQzMyQzwvbGl0ZXJhbD4sIDxsaXRlcmFsPlNIQTIyNDwvbGl0ZXJhbD4sCisgICAgICAgIDxs aXRlcmFsPlNIQTI1NjwvbGl0ZXJhbD4sIDxsaXRlcmFsPlNIQTM4NDwvbGl0ZXJhbD4sCisgICAg ICAgIGFuZCA8bGl0ZXJhbD5TSEE1MTI8L2xpdGVyYWw+LiAgVGhlIGRlZmF1bHQgaXMgPGxpdGVy YWw+Q1JDMzJDPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+ PG9wdGlvbj4tLW5vLW1hbmlmZXN0PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBEaXNhYmxlcyBnZW5lcmF0aW9uIG9mIGEgYmFja3VwIG1h bmlmZXN0LiBJZiB0aGlzIG9wdGlvbiBpcyBub3QKKyAgICAgICAgc3BlY2lmaWVkLCBhIGJhY2t1 cCBtYW5pZmVzdCBmb3IgdGhlIHJlY29uc3RydWN0ZWQgYmFja3VwIHdpbGwgYmUKKyAgICAgICAg d3JpdHRlbiB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4KKyAgICAgICA8L3BhcmE+CisgICAgICA8 L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgPHRlcm0+PG9wdGlvbj4tLXN5bmMtbWV0aG9kPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5tZXRob2Q8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBzZXQgdG8gPGxpdGVyYWw+ZnN5bmM8 L2xpdGVyYWw+LCB3aGljaCBpcyB0aGUgZGVmYXVsdCwKKyAgICAgICAgPGNvbW1hbmQ+cGdfY29t YmluZWJhY2t1cDwvY29tbWFuZD4gd2lsbCByZWN1cnNpdmVseSBvcGVuIGFuZCBzeW5jaHJvbml6 ZQorICAgICAgICBhbGwgZmlsZXMgaW4gdGhlIGJhY2t1cCBkaXJlY3RvcnkuICBXaGVuIHRoZSBw bGFpbiBmb3JtYXQgaXMgdXNlZCwgdGhlCisgICAgICAgIHNlYXJjaCBmb3IgZmlsZXMgd2lsbCBm b2xsb3cgc3ltYm9saWMgbGlua3MgZm9yIHRoZSBXQUwgZGlyZWN0b3J5IGFuZAorICAgICAgICBl YWNoIGNvbmZpZ3VyZWQgdGFibGVzcGFjZS4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+ CisgICAgICAgIE9uIExpbnV4LCA8bGl0ZXJhbD5zeW5jZnM8L2xpdGVyYWw+IG1heSBiZSB1c2Vk IGluc3RlYWQgdG8gYXNrIHRoZQorICAgICAgICBvcGVyYXRpbmcgc3lzdGVtIHRvIHN5bmNocm9u aXplIHRoZSB3aG9sZSBmaWxlIHN5c3RlbSB0aGF0IGNvbnRhaW5zIHRoZQorICAgICAgICBiYWNr dXAgZGlyZWN0b3J5LiAgV2hlbiB0aGUgcGxhaW4gZm9ybWF0IGlzIHVzZWQsCisgICAgICAgIDxj b21tYW5kPnBnX2NvbWJpbmViYWNrdXA8L2NvbW1hbmQ+IHdpbGwgYWxzbyBzeW5jaHJvbml6ZSB0 aGUgZmlsZSBzeXN0ZW1zCisgICAgICAgIHRoYXQgY29udGFpbiB0aGUgV0FMIGZpbGVzIGFuZCBl YWNoIHRhYmxlc3BhY2UuICBTZWUKKyAgICAgICAgPHhyZWYgbGlua2VuZD0ic3luY2ZzIi8+IGZv ciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nCisgICAgICAgIDxmdW5jdGlvbj5zeW5jZnMo KTwvZnVuY3Rpb24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhp cyBvcHRpb24gaGFzIG5vIGVmZmVjdCB3aGVuIDxvcHRpb24+LS1uby1zeW5jPC9vcHRpb24+IGlz IHVzZWQuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT48b3B0aW9uPi1WPC9v cHRpb24+PC90ZXJtPgorICAgICAgIDx0ZXJtPjxvcHRpb24+LS12ZXJzaW9uPC9vcHRpb24+PC90 ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUHJpbnRzIHRo ZSA8YXBwbGljYXRpb24+cGdfY29tYmluZWJhY2t1cDwvYXBwbGljYXRpb24+IHZlcnNpb24gYW5k CisgICAgICAgIGV4aXRzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJtPjxv cHRpb24+LT88L29wdGlvbj48L3Rlcm0+CisgICAgICAgPHRlcm0+PG9wdGlvbj4tLWhlbHA8L29w dGlvbj48L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBT aG93cyBoZWxwIGFib3V0IDxhcHBsaWNhdGlvbj5wZ19jb21iaW5lYmFja3VwPC9hcHBsaWNhdGlv bj4gY29tbWFuZAorICAgICAgICBsaW5lIGFyZ3VtZW50cywgYW5kIGV4aXRzLgorICAgICAgIDwv cGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDwv dmFyaWFibGVsaXN0PgorICAgPC9wYXJhPgorCisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4K KyAgPHRpdGxlPkVudmlyb25tZW50PC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRoaXMgdXRpbGl0 eSwgbGlrZSBtb3N0IG90aGVyIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4g dXRpbGl0aWVzLAorICAgdXNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1cHBvcnRlZCBi eSA8YXBwbGljYXRpb24+bGlicHE8L2FwcGxpY2F0aW9uPgorICAgKHNlZSA8eHJlZiBsaW5rZW5k PSJsaWJwcS1lbnZhcnMiLz4pLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgZW52aXJv bm1lbnQgdmFyaWFibGUgPGVudmFyPlBHX0NPTE9SPC9lbnZhcj4gc3BlY2lmaWVzIHdoZXRoZXIg dG8gdXNlCisgICBjb2xvciBpbiBkaWFnbm9zdGljIG1lc3NhZ2VzLiBQb3NzaWJsZSB2YWx1ZXMg YXJlCisgICA8bGl0ZXJhbD5hbHdheXM8L2xpdGVyYWw+LCA8bGl0ZXJhbD5hdXRvPC9saXRlcmFs PiBhbmQKKyAgIDxsaXRlcmFsPm5ldmVyPC9saXRlcmFsPi4KKyAgPC9wYXJhPgorIDwvcmVmc2Vj dDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5TZWUgQWxzbzwvdGl0bGU+CisKKyAgPHNpbXBs ZWxpc3QgdHlwZT0iaW5saW5lIj4KKyAgIDxtZW1iZXI+PHhyZWYgbGlua2VuZD0iYXBwLXBnYmFz ZWJhY2t1cCIvPjwvbWVtYmVyPgorICA8L3NpbXBsZWxpc3Q+CisgPC9yZWZzZWN0MT4KKworPC9y ZWZlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbCBiL2RvYy9z cmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAppbmRleCBlMTFiNGI2MTMwLi5hMDdkMmI1ZTAxIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl ZmVyZW5jZS5zZ21sCkBAIC0yNTAsNiArMjUwLDcgQEAKICAgICZwZ2FtY2hlY2s7CiAgICAmcGdC YXNlYmFja3VwOwogICAgJnBnYmVuY2g7CisgICAmcGdDb21iaW5lYmFja3VwOwogICAgJnBnQ29u ZmlnOwogICAgJnBnRHVtcDsKICAgICZwZ0R1bXBhbGw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nYmFja3VwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nYmFja3VwLmMKaW5kZXggMjFkNjgxMzNhZS4uZjUxZDQyODJiYiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2JhY2t1cC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2diYWNrdXAuYwpAQCAtNzcsNiArNzcsMTYgQEAgYnVpbGRfYmFj a3VwX2NvbnRlbnQoQmFja3VwU3RhdGUgKnN0YXRlLCBib29sIGlzaGlzdG9yeWZpbGUpCiAJCWFw cGVuZFN0cmluZ0luZm8ocmVzdWx0LCAiU1RPUCBUSU1FTElORTogJXVcbiIsIHN0YXRlLT5zdG9w dGxpKTsKIAl9CiAKKwkvKiBlaXRoZXIgYm90aCBpc3RhcnRwb2ludCBhbmQgaXN0YXJ0dGxpIHNo b3VsZCBiZSBzZXQsIG9yIG5laXRoZXIgKi8KKwlBc3NlcnQoWExvZ1JlY1B0cklzSW52YWxpZChz dGF0ZS0+aXN0YXJ0cG9pbnQpID09IChzdGF0ZS0+aXN0YXJ0dGxpID09IDApKTsKKwlpZiAoIVhM b2dSZWNQdHJJc0ludmFsaWQoc3RhdGUtPmlzdGFydHBvaW50KSkKKwl7CisJCWFwcGVuZFN0cmlu Z0luZm8ocmVzdWx0LCAiSU5DUkVNRU5UQUwgRlJPTSBMU046ICVYLyVYXG4iLAorCQkJCQkJIExT Tl9GT1JNQVRfQVJHUyhzdGF0ZS0+aXN0YXJ0cG9pbnQpKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhy ZXN1bHQsICJJTkNSRU1FTlRBTCBGUk9NIFRMSTogJXVcbiIsCisJCQkJCQkgc3RhdGUtPmlzdGFy dHRsaSk7CisJfQorCiAJZGF0YSA9IHJlc3VsdC0+ZGF0YTsKIAlwZnJlZShyZXN1bHQpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCmluZGV4IGEyYzhmYTM5ODEu LjZmNGY4MWY5OTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dy ZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5j CkBAIC0xMjk1LDYgKzEyOTUsMTIgQEAgcmVhZF9iYWNrdXBfbGFiZWwoWExvZ1JlY1B0ciAqY2hl Y2tQb2ludExvYywgVGltZUxpbmVJRCAqYmFja3VwTGFiZWxUTEksCiAJCQkJCQkJCSB0bGlfZnJv bV9maWxlLCBCQUNLVVBfTEFCRUxfRklMRSkpKTsKIAl9CiAKKwlpZiAoZnNjYW5mKGxmcCwgIklO Q1JFTUVOVEFMIEZST00gTFNOOiAlWC8lWFxuIiwgJmhpLCAmbG8pID4gMCkKKwkJZXJlcG9ydChG QVRBTCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NU QVRFKSwKKwkJCQkgZXJybXNnKCJ0aGlzIGlzIGFuIGluY3JlbWVudGFsIGJhY2t1cCwgbm90IGEg ZGF0YSBkaXJlY3RvcnkiKSwKKwkJCQkgZXJyaGludCgiVXNlIHBnX2NvbWJpbmViYWNrdXAgdG8g cmVjb25zdHJ1Y3QgYSB2YWxpZCBkYXRhIGRpcmVjdG9yeS4iKSkpOworCiAJaWYgKGZlcnJvcihs ZnApIHx8IEZyZWVGaWxlKGxmcCkpCiAJCWVyZXBvcnQoRkFUQUwsCiAJCQkJKGVycmNvZGVfZm9y X2ZpbGVfYWNjZXNzKCksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9iYWNrdXAvTWFrZWZpbGUg Yi9zcmMvYmFja2VuZC9iYWNrdXAvTWFrZWZpbGUKaW5kZXggYTY3YjNjNThkNC4uNzUxZTZkM2Q1 ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYmFja3VwL01ha2VmaWxlCisrKyBiL3NyYy9iYWNr ZW5kL2JhY2t1cC9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQCBPQkpTID0gXAogCWJhc2ViYWNr dXAubyBcCiAJYmFzZWJhY2t1cF9jb3B5Lm8gXAogCWJhc2ViYWNrdXBfZ3ppcC5vIFwKKwliYXNl YmFja3VwX2luY3JlbWVudGFsLm8gXAogCWJhc2ViYWNrdXBfbHo0Lm8gXAogCWJhc2ViYWNrdXBf enN0ZC5vIFwKIAliYXNlYmFja3VwX3Byb2dyZXNzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYmFja3VwL2Jhc2ViYWNrdXAuYyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMK aW5kZXggMzVkZDc5YmFiYy4uNWVlOTYyODQyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYmFj a3VwL2Jhc2ViYWNrdXAuYworKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jCkBA IC0yMCw4ICsyMCwxMCBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9nYmFja3VwLmgiCiAjaW5jbHVk ZSAiYmFja3VwL2JhY2t1cF9tYW5pZmVzdC5oIgogI2luY2x1ZGUgImJhY2t1cC9iYXNlYmFja3Vw LmgiCisjaW5jbHVkZSAiYmFja3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuaCIKICNpbmNsdWRl ICJiYWNrdXAvYmFzZWJhY2t1cF9zaW5rLmgiCiAjaW5jbHVkZSAiYmFja3VwL2Jhc2ViYWNrdXBf dGFyZ2V0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlX2QuaCIKICNpbmNsdWRl ICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJjb21tb24vY29tcHJlc3Npb24uaCIKICNp bmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCkBAIC0zMyw2ICszNSw3IEBACiAjaW5jbHVkZSAi cGd0YXIuaCIKICNpbmNsdWRlICJwb3J0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9zeXNsb2dn ZXIuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi93YWxzZW5kZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxzZW5kZXJf cHJpdmF0ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgpAQCAtNjQsNiArNjcsNyBA QCB0eXBlZGVmIHN0cnVjdAogCWJvb2wJCWZhc3RjaGVja3BvaW50OwogCWJvb2wJCW5vd2FpdDsK IAlib29sCQlpbmNsdWRld2FsOworCWJvb2wJCWluY3JlbWVudGFsOwogCXVpbnQzMgkJbWF4cmF0 ZTsKIAlib29sCQlzZW5kdGJsc3BjbWFwZmlsZTsKIAlib29sCQlzZW5kX3RvX2NsaWVudDsKQEAg LTc2LDIxICs4MCwyOCBAQCB0eXBlZGVmIHN0cnVjdAogfSBiYXNlYmFja3VwX29wdGlvbnM7CiAK IHN0YXRpYyBpbnQ2NCBzZW5kVGFibGVzcGFjZShiYnNpbmsgKnNpbmssIGNoYXIgKnBhdGgsIE9p ZCBzcGNvaWQsIGJvb2wgc2l6ZW9ubHksCi0JCQkJCQkJc3RydWN0IGJhY2t1cF9tYW5pZmVzdF9p bmZvICptYW5pZmVzdCk7CisJCQkJCQkJc3RydWN0IGJhY2t1cF9tYW5pZmVzdF9pbmZvICptYW5p ZmVzdCwKKwkJCQkJCQlJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliKTsKIHN0YXRpYyBpbnQ2NCBz ZW5kRGlyKGJic2luayAqc2luaywgY29uc3QgY2hhciAqcGF0aCwgaW50IGJhc2VwYXRobGVuLCBi b29sIHNpemVvbmx5LAogCQkJCQkgTGlzdCAqdGFibGVzcGFjZXMsIGJvb2wgc2VuZHRibHNwY2xp bmtzLAotCQkJCQkgYmFja3VwX21hbmlmZXN0X2luZm8gKm1hbmlmZXN0LCBPaWQgc3Bjb2lkKTsK KwkJCQkJIGJhY2t1cF9tYW5pZmVzdF9pbmZvICptYW5pZmVzdCwgT2lkIHNwY29pZCwKKwkJCQkJ IEluY3JlbWVudGFsQmFja3VwSW5mbyAqaWIpOwogc3RhdGljIGJvb2wgc2VuZEZpbGUoYmJzaW5r ICpzaW5rLCBjb25zdCBjaGFyICpyZWFkZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnRhcmZpbGVuYW1l LAogCQkJCQkgc3RydWN0IHN0YXQgKnN0YXRidWYsIGJvb2wgbWlzc2luZ19vaywKIAkJCQkJIE9p ZCBkYm9pZCwgT2lkIHNwY29pZCwgUmVsRmlsZU51bWJlciByZWxmaWxlbnVtYmVyLAogCQkJCQkg dW5zaWduZWQgc2Vnbm8sCi0JCQkJCSBiYWNrdXBfbWFuaWZlc3RfaW5mbyAqbWFuaWZlc3QpOwor CQkJCQkgYmFja3VwX21hbmlmZXN0X2luZm8gKm1hbmlmZXN0LAorCQkJCQkgdW5zaWduZWQgbnVt X2luY3JlbWVudGFsX2Jsb2NrcywKKwkJCQkJIEJsb2NrTnVtYmVyICppbmNyZW1lbnRhbF9ibG9j a3MsCisJCQkJCSB1bnNpZ25lZCB0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCk7CiBzdGF0aWMgb2Zm X3QgcmVhZF9maWxlX2RhdGFfaW50b19idWZmZXIoYmJzaW5rICpzaW5rLAogCQkJCQkJCQkJCWNv bnN0IGNoYXIgKnJlYWRmaWxlbmFtZSwgaW50IGZkLAogCQkJCQkJCQkJCW9mZl90IG9mZnNldCwg c2l6ZV90IGxlbmd0aCwKIAkJCQkJCQkJCQlCbG9ja051bWJlciBibGtubywKIAkJCQkJCQkJCQli b29sIHZlcmlmeV9jaGVja3N1bSwKIAkJCQkJCQkJCQlpbnQgKmNoZWNrc3VtX2ZhaWx1cmVzKTsK K3N0YXRpYyB2b2lkIHB1c2hfdG9fc2luayhiYnNpbmsgKnNpbmssIHBnX2NoZWNrc3VtX2NvbnRl eHQgKmNoZWNrc3VtX2N0eCwKKwkJCQkJCSBzaXplX3QgKmJ5dGVzX2RvbmUsIHZvaWQgKmRhdGEs IHNpemVfdCBsZW5ndGgpOwogc3RhdGljIGJvb2wgdmVyaWZ5X3BhZ2VfY2hlY2tzdW0oUGFnZSBw YWdlLCBYTG9nUmVjUHRyIHN0YXJ0X2xzbiwKIAkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsa25vLAog CQkJCQkJCQkgdWludDE2ICpleHBlY3RlZF9jaGVja3N1bSk7CkBAIC0xMDIsNyArMTEzLDggQEAg c3RhdGljIGludDY0IF90YXJXcml0ZUhlYWRlcihiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKmZp bGVuYW1lLAogCQkJCQkJCSBib29sIHNpemVvbmx5KTsKIHN0YXRpYyB2b2lkIF90YXJXcml0ZVBh ZGRpbmcoYmJzaW5rICpzaW5rLCBpbnQgbGVuKTsKIHN0YXRpYyB2b2lkIGNvbnZlcnRfbGlua190 b19kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aGJ1Ziwgc3RydWN0IHN0YXQgKnN0YXRidWYpOwot c3RhdGljIHZvaWQgcGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3VwX29wdGlvbnMgKm9wdCwg YmJzaW5rICpzaW5rKTsKK3N0YXRpYyB2b2lkIHBlcmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJhY2t1 cF9vcHRpb25zICpvcHQsIGJic2luayAqc2luaywKKwkJCQkJCQkJSW5jcmVtZW50YWxCYWNrdXBJ bmZvICppYik7CiBzdGF0aWMgdm9pZCBwYXJzZV9iYXNlYmFja3VwX29wdGlvbnMoTGlzdCAqb3B0 aW9ucywgYmFzZWJhY2t1cF9vcHRpb25zICpvcHQpOwogc3RhdGljIGludAljb21wYXJlV2FsRmls ZU5hbWVzKGNvbnN0IExpc3RDZWxsICphLCBjb25zdCBMaXN0Q2VsbCAqYik7CiBzdGF0aWMgaW50 CWJhc2ViYWNrdXBfcmVhZF9maWxlKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBv ZmZfdCBvZmZzZXQsCkBAIC0yMjAsNyArMjMyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBleGNs dWRlX2xpc3RfaXRlbSBleGNsdWRlRmlsZXNbXSA9CiAgKiBjbG9iYmVyZWQgYnkgbG9uZ2ptcCIg ZnJvbSBzdHVwaWRlciB2ZXJzaW9ucyBvZiBnY2MuCiAgKi8KIHN0YXRpYyB2b2lkCi1wZXJmb3Jt X2Jhc2VfYmFja3VwKGJhc2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmspCitwZXJm b3JtX2Jhc2VfYmFja3VwKGJhc2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmssCisJ CQkJCUluY3JlbWVudGFsQmFja3VwSW5mbyAqaWIpCiB7CiAJYmJzaW5rX3N0YXRlIHN0YXRlOwog CVhMb2dSZWNQdHIJZW5kcHRyOwpAQCAtMjcwLDYgKzI4MywxMCBAQCBwZXJmb3JtX2Jhc2VfYmFj a3VwKGJhc2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmspCiAJCUxpc3RDZWxsICAg KmxjOwogCQl0YWJsZXNwYWNlaW5mbyAqbmV3dGk7CiAKKwkJLyogSWYgdGhpcyBpcyBhbiBpbmNy ZW1lbnRhbCBiYWNrdXAsIGV4ZWN1dGUgcHJlcGFyYXRvcnkgc3RlcHMuICovCisJCWlmIChpYiAh PSBOVUxMKQorCQkJUHJlcGFyZUZvckluY3JlbWVudGFsQmFja3VwKGliLCBiYWNrdXBfc3RhdGUp OworCiAJCS8qIEFkZCBhIG5vZGUgZm9yIHRoZSBiYXNlIGRpcmVjdG9yeSBhdCB0aGUgZW5kICov CiAJCW5ld3RpID0gcGFsbG9jMChzaXplb2YodGFibGVzcGFjZWluZm8pKTsKIAkJbmV3dGktPnNp emUgPSAtMTsKQEAgLTI4OSwxMCArMzA2LDEwIEBAIHBlcmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJh Y2t1cF9vcHRpb25zICpvcHQsIGJic2luayAqc2luaykKIAogCQkJCWlmICh0bXAtPnBhdGggPT0g TlVMTCkKIAkJCQkJdG1wLT5zaXplID0gc2VuZERpcihzaW5rLCAiLiIsIDEsIHRydWUsIHN0YXRl LnRhYmxlc3BhY2VzLAotCQkJCQkJCQkJCXRydWUsIE5VTEwsIEludmFsaWRPaWQpOworCQkJCQkJ CQkJCXRydWUsIE5VTEwsIEludmFsaWRPaWQsIE5VTEwpOwogCQkJCWVsc2UKIAkJCQkJdG1wLT5z aXplID0gc2VuZFRhYmxlc3BhY2Uoc2luaywgdG1wLT5wYXRoLCB0bXAtPm9pZCwgdHJ1ZSwKLQkJ CQkJCQkJCQkJICAgTlVMTCk7CisJCQkJCQkJCQkJCSAgIE5VTEwsIE5VTEwpOwogCQkJCXN0YXRl LmJ5dGVzX3RvdGFsICs9IHRtcC0+c2l6ZTsKIAkJCX0KIAkJCXN0YXRlLmJ5dGVzX3RvdGFsX2lz X3ZhbGlkID0gdHJ1ZTsKQEAgLTMzMCw3ICszNDcsNyBAQCBwZXJmb3JtX2Jhc2VfYmFja3VwKGJh c2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmspCiAKIAkJCQkvKiBUaGVuIHRoZSBi dWxrIG9mIHRoZSBmaWxlcy4uLiAqLwogCQkJCXNlbmREaXIoc2luaywgIi4iLCAxLCBmYWxzZSwg c3RhdGUudGFibGVzcGFjZXMsCi0JCQkJCQlzZW5kdGJsc3BjbGlua3MsICZtYW5pZmVzdCwgSW52 YWxpZE9pZCk7CisJCQkJCQlzZW5kdGJsc3BjbGlua3MsICZtYW5pZmVzdCwgSW52YWxpZE9pZCwg aWIpOwogCiAJCQkJLyogLi4uIGFuZCBwZ19jb250cm9sIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4g Ki8KIAkJCQlpZiAobHN0YXQoWExPR19DT05UUk9MX0ZJTEUsICZzdGF0YnVmKSAhPSAwKQpAQCAt MzQwLDcgKzM1Nyw3IEBAIHBlcmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJhY2t1cF9vcHRpb25zICpv cHQsIGJic2luayAqc2luaykKIAkJCQkJCQkJCVhMT0dfQ09OVFJPTF9GSUxFKSkpOwogCQkJCXNl bmRGaWxlKHNpbmssIFhMT0dfQ09OVFJPTF9GSUxFLCBYTE9HX0NPTlRST0xfRklMRSwgJnN0YXRi dWYsCiAJCQkJCQkgZmFsc2UsIEludmFsaWRPaWQsIEludmFsaWRPaWQsCi0JCQkJCQkgSW52YWxp ZFJlbEZpbGVOdW1iZXIsIDAsICZtYW5pZmVzdCk7CisJCQkJCQkgSW52YWxpZFJlbEZpbGVOdW1i ZXIsIDAsICZtYW5pZmVzdCwgMCwgTlVMTCwgMCk7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC0z NDgsNyArMzY1LDcgQEAgcGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3VwX29wdGlvbnMgKm9w dCwgYmJzaW5rICpzaW5rKQogCiAJCQkJYmJzaW5rX2JlZ2luX2FyY2hpdmUoc2luaywgYXJjaGl2 ZV9uYW1lKTsKIAotCQkJCXNlbmRUYWJsZXNwYWNlKHNpbmssIHRpLT5wYXRoLCB0aS0+b2lkLCBm YWxzZSwgJm1hbmlmZXN0KTsKKwkJCQlzZW5kVGFibGVzcGFjZShzaW5rLCB0aS0+cGF0aCwgdGkt Pm9pZCwgZmFsc2UsICZtYW5pZmVzdCwgaWIpOwogCQkJfQogCiAJCQkvKgpAQCAtNjEwLDcgKzYy Nyw3IEBAIHBlcmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJhY2t1cF9vcHRpb25zICpvcHQsIGJic2lu ayAqc2luaykKIAogCQkJc2VuZEZpbGUoc2luaywgcGF0aGJ1ZiwgcGF0aGJ1ZiwgJnN0YXRidWYs IGZhbHNlLAogCQkJCQkgSW52YWxpZE9pZCwgSW52YWxpZE9pZCwgSW52YWxpZFJlbEZpbGVOdW1i ZXIsIDAsCi0JCQkJCSAmbWFuaWZlc3QpOworCQkJCQkgJm1hbmlmZXN0LCAwLCBOVUxMLCAwKTsK IAogCQkJLyogdW5jb25kaXRpb25hbGx5IG1hcmsgZmlsZSBhcyBhcmNoaXZlZCAqLwogCQkJU3Rh dHVzRmlsZVBhdGgocGF0aGJ1ZiwgZm5hbWUsICIuZG9uZSIpOwpAQCAtNjg2LDYgKzcwMyw3IEBA IHBhcnNlX2Jhc2ViYWNrdXBfb3B0aW9ucyhMaXN0ICpvcHRpb25zLCBiYXNlYmFja3VwX29wdGlv bnMgKm9wdCkKIAlib29sCQlvX2NoZWNrcG9pbnQgPSBmYWxzZTsKIAlib29sCQlvX25vd2FpdCA9 IGZhbHNlOwogCWJvb2wJCW9fd2FsID0gZmFsc2U7CisJYm9vbAkJb19pbmNyZW1lbnRhbCA9IGZh bHNlOwogCWJvb2wJCW9fbWF4cmF0ZSA9IGZhbHNlOwogCWJvb2wJCW9fdGFibGVzcGFjZV9tYXAg PSBmYWxzZTsKIAlib29sCQlvX25vdmVyaWZ5X2NoZWNrc3VtcyA9IGZhbHNlOwpAQCAtNzY0LDYg Kzc4MiwyMCBAQCBwYXJzZV9iYXNlYmFja3VwX29wdGlvbnMoTGlzdCAqb3B0aW9ucywgYmFzZWJh Y2t1cF9vcHRpb25zICpvcHQpCiAJCQlvcHQtPmluY2x1ZGV3YWwgPSBkZWZHZXRCb29sZWFuKGRl ZmVsKTsKIAkJCW9fd2FsID0gdHJ1ZTsKIAkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJpbmNyZW1lbnRhbCIpID09IDApCisJCXsKKwkJCWlmIChvX2luY3JlbWVudGFsKQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiks CisJCQkJCQkgZXJybXNnKCJkdXBsaWNhdGUgb3B0aW9uIFwiJXNcIiIsIGRlZmVsLT5kZWZuYW1l KSkpOworCQkJb3B0LT5pbmNyZW1lbnRhbCA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOworCQkJaWYg KG9wdC0+aW5jcmVtZW50YWwgJiYgIXN1bW1hcml6ZV93YWwpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUp LAorCQkJCQkJIGVycm1zZygiaW5jcmVtZW50YWwgYmFja3VwcyBjYW5ub3QgYmUgdGFrZW4gdW5s ZXNzIFdBTCBzdW1tYXJpemF0aW9uIGlzIGVuYWJsZWQiKSkpOworCQkJb3B0LT5pbmNyZW1lbnRh bCA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOworCQkJb19pbmNyZW1lbnRhbCA9IHRydWU7CisJCX0K IAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAibWF4X3JhdGUiKSA9PSAwKQogCQl7 CiAJCQlpbnQ2NAkJbWF4cmF0ZTsKQEAgLTk1Niw3ICs5ODgsNyBAQCBwYXJzZV9iYXNlYmFja3Vw X29wdGlvbnMoTGlzdCAqb3B0aW9ucywgYmFzZWJhY2t1cF9vcHRpb25zICpvcHQpCiAgKiB0aGUg ZmlsZXN5c3RlbSwgYnlwYXNzaW5nIHRoZSBidWZmZXIgY2FjaGUuCiAgKi8KIHZvaWQKLVNlbmRC YXNlQmFja3VwKEJhc2VCYWNrdXBDbWQgKmNtZCkKK1NlbmRCYXNlQmFja3VwKEJhc2VCYWNrdXBD bWQgKmNtZCwgSW5jcmVtZW50YWxCYWNrdXBJbmZvICppYikKIHsKIAliYXNlYmFja3VwX29wdGlv bnMgb3B0OwogCWJic2luawkgICAqc2luazsKQEAgLTk4MCw2ICsxMDEyLDIwIEBAIFNlbmRCYXNl QmFja3VwKEJhc2VCYWNrdXBDbWQgKmNtZCkKIAkJc2V0X3BzX2Rpc3BsYXkoYWN0aXZpdHltc2cp OwogCX0KIAorCS8qCisJICogSWYgd2UncmUgYXNrZWQgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnRh bCBiYWNrdXAgYW5kIHRoZSB1c2VyIGhhcyBub3QKKwkgKiBzdXBwbGllZCBhIG1hbmlmZXN0LCB0 aGF0J3MgYW4gRVJST1IuCisJICoKKwkgKiBJZiB3ZSdyZSBhc2tlZCB0byBwZXJmb3JtIGEgZnVs bCBiYWNrdXAgYW5kIHRoZSB1c2VyIGRpZCBzdXBwbHkgYQorCSAqIG1hbmlmZXN0LCBqdXN0IGln bm9yZSBpdC4KKwkgKi8KKwlpZiAoIW9wdC5pbmNyZW1lbnRhbCkKKwkJaWIgPSBOVUxMOworCWVs c2UgaWYgKGliID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygibXVzdCBV UExPQURfTUFOSUZFU1QgYmVmb3JlIHBlcmZvcm1pbmcgYW4gaW5jcmVtZW50YWwgQkFTRV9CQUNL VVAiKSkpOworCiAJLyoKIAkgKiBJZiB0aGUgdGFyZ2V0IGlzIHNwZWNpZmljYWxseSAnY2xpZW50 JyB0aGVuIHNldCB1cCB0byBzdHJlYW0gdGhlIGJhY2t1cAogCSAqIHRvIHRoZSBjbGllbnQ7IG90 aGVyd2lzZSwgaXQncyBiZWluZyBzZW50IHNvbWVwbGFjZSBlbHNlIGFuZCBzaG91bGQgbm90CkBA IC0xMDExLDcgKzEwNTcsNyBAQCBTZW5kQmFzZUJhY2t1cChCYXNlQmFja3VwQ21kICpjbWQpCiAJ ICovCiAJUEdfVFJZKCk7CiAJewotCQlwZXJmb3JtX2Jhc2VfYmFja3VwKCZvcHQsIHNpbmspOwor CQlwZXJmb3JtX2Jhc2VfYmFja3VwKCZvcHQsIHNpbmssIGliKTsKIAl9CiAJUEdfRklOQUxMWSgp OwogCXsKQEAgLTEwODksNyArMTEzNSw3IEBAIHNlbmRGaWxlV2l0aENvbnRlbnQoYmJzaW5rICpz aW5rLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqY29udGVudCwKICAqLwogc3Rh dGljIGludDY0CiBzZW5kVGFibGVzcGFjZShiYnNpbmsgKnNpbmssIGNoYXIgKnBhdGgsIE9pZCBz cGNvaWQsIGJvb2wgc2l6ZW9ubHksCi0JCQkgICBiYWNrdXBfbWFuaWZlc3RfaW5mbyAqbWFuaWZl c3QpCisJCQkgICBiYWNrdXBfbWFuaWZlc3RfaW5mbyAqbWFuaWZlc3QsIEluY3JlbWVudGFsQmFj a3VwSW5mbyAqaWIpCiB7CiAJaW50NjQJCXNpemU7CiAJY2hhcgkJcGF0aGJ1ZltNQVhQR1BBVEhd OwpAQCAtMTEyMyw3ICsxMTY5LDcgQEAgc2VuZFRhYmxlc3BhY2UoYmJzaW5rICpzaW5rLCBjaGFy ICpwYXRoLCBPaWQgc3Bjb2lkLCBib29sIHNpemVvbmx5LAogCiAJLyogU2VuZCBhbGwgdGhlIGZp bGVzIGluIHRoZSB0YWJsZXNwYWNlIHZlcnNpb24gZGlyZWN0b3J5ICovCiAJc2l6ZSArPSBzZW5k RGlyKHNpbmssIHBhdGhidWYsIHN0cmxlbihwYXRoKSwgc2l6ZW9ubHksIE5JTCwgdHJ1ZSwgbWFu aWZlc3QsCi0JCQkJCXNwY29pZCk7CisJCQkJCXNwY29pZCwgaWIpOwogCiAJcmV0dXJuIHNpemU7 CiB9CkBAIC0xMTQzLDcgKzExODksNyBAQCBzZW5kVGFibGVzcGFjZShiYnNpbmsgKnNpbmssIGNo YXIgKnBhdGgsIE9pZCBzcGNvaWQsIGJvb2wgc2l6ZW9ubHksCiBzdGF0aWMgaW50NjQKIHNlbmRE aXIoYmJzaW5rICpzaW5rLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgYmFzZXBhdGhsZW4sIGJvb2wg c2l6ZW9ubHksCiAJCUxpc3QgKnRhYmxlc3BhY2VzLCBib29sIHNlbmR0YmxzcGNsaW5rcywgYmFj a3VwX21hbmlmZXN0X2luZm8gKm1hbmlmZXN0LAotCQlPaWQgc3Bjb2lkKQorCQlPaWQgc3Bjb2lk LCBJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliKQogewogCURJUgkJICAgKmRpcjsKIAlzdHJ1Y3Qg ZGlyZW50ICpkZTsKQEAgLTExNTIsNyArMTE5OCwxNiBAQCBzZW5kRGlyKGJic2luayAqc2luaywg Y29uc3QgY2hhciAqcGF0aCwgaW50IGJhc2VwYXRobGVuLCBib29sIHNpemVvbmx5LAogCWludDY0 CQlzaXplID0gMDsKIAljb25zdCBjaGFyICpsYXN0RGlyOwkJLyogU3BsaXQgbGFzdCBkaXIgZnJv bSBwYXJlbnQgcGF0aC4gKi8KIAlib29sCQlpc1JlbGF0aW9uRGlyID0gZmFsc2U7CS8qIERvZXMg ZGlyZWN0b3J5IGNvbnRhaW4gcmVsYXRpb25zPyAqLworCWJvb2wJCWlzR2xvYmFsRGlyID0gZmFs c2U7CiAJT2lkCQkJZGJvaWQgPSBJbnZhbGlkT2lkOworCUJsb2NrTnVtYmVyICpyZWxhdGl2ZV9i bG9ja19udW1iZXJzID0gTlVMTDsKKworCS8qCisJICogU2luY2UgdGhpcyBhcnJheSBpcyByZWxh dGl2ZWx5IGxhcmdlLCBhdm9pZCBwdXR0aW5nIGl0IG9uIHRoZSBzdGFjay4KKwkgKiBCdXQgd2Ug ZG9uJ3QgbmVlZCBpdCBhdCBhbGwgaWYgdGhpcyBpcyBub3QgYW4gaW5jcmVtZW50YWwgYmFja3Vw LgorCSAqLworCWlmIChpYiAhPSBOVUxMKQorCQlyZWxhdGl2ZV9ibG9ja19udW1iZXJzID0gcGFs bG9jKHNpemVvZihCbG9ja051bWJlcikgKiBSRUxTRUdfU0laRSk7CiAKIAkvKgogCSAqIERldGVy bWluZSBpZiB0aGUgY3VycmVudCBwYXRoIGlzIGEgZGF0YWJhc2UgZGlyZWN0b3J5IHRoYXQgY2Fu IGNvbnRhaW4KQEAgLTExODUsNyArMTI0MCwxMCBAQCBzZW5kRGlyKGJic2luayAqc2luaywgY29u c3QgY2hhciAqcGF0aCwgaW50IGJhc2VwYXRobGVuLCBib29sIHNpemVvbmx5LAogCQl9CiAJfQog CWVsc2UgaWYgKHN0cmNtcChwYXRoLCAiLi9nbG9iYWwiKSA9PSAwKQorCXsKIAkJaXNSZWxhdGlv bkRpciA9IHRydWU7CisJCWlzR2xvYmFsRGlyID0gdHJ1ZTsKKwl9CiAKIAlkaXIgPSBBbGxvY2F0 ZURpcihwYXRoKTsKIAl3aGlsZSAoKGRlID0gUmVhZERpcihkaXIsIHBhdGgpKSAhPSBOVUxMKQpA QCAtMTMzNCwxMSArMTM5MiwxMyBAQCBzZW5kRGlyKGJic2luayAqc2luaywgY29uc3QgY2hhciAq cGF0aCwgaW50IGJhc2VwYXRobGVuLCBib29sIHNpemVvbmx5LAogCQkJCQkJCQkJJnN0YXRidWYs IHNpemVvbmx5KTsKIAogCQkJLyoKLQkJCSAqIEFsc28gc2VuZCBhcmNoaXZlX3N0YXR1cyBkaXJl Y3RvcnkgKGJ5IGhhY2tpc2hseSByZXVzaW5nCi0JCQkgKiBzdGF0YnVmIGZyb20gYWJvdmUgLi4u KS4KKwkJCSAqIEFsc28gc2VuZCBhcmNoaXZlX3N0YXR1cyBhbmQgc3VtbWFyaWVzIGRpcmVjdG9y aWVzIChieQorCQkJICogaGFja2lzaGx5IHJldXNpbmcgc3RhdGJ1ZiBmcm9tIGFib3ZlIC4uLiku CiAJCQkgKi8KIAkJCXNpemUgKz0gX3RhcldyaXRlSGVhZGVyKHNpbmssICIuL3BnX3dhbC9hcmNo aXZlX3N0YXR1cyIsIE5VTEwsCiAJCQkJCQkJCQkmc3RhdGJ1Ziwgc2l6ZW9ubHkpOworCQkJc2l6 ZSArPSBfdGFyV3JpdGVIZWFkZXIoc2luaywgIi4vcGdfd2FsL3N1bW1hcmllcyIsIE5VTEwsCisJ CQkJCQkJCQkmc3RhdGJ1Ziwgc2l6ZW9ubHkpOwogCiAJCQljb250aW51ZTsJCQkvKiBkb24ndCBy ZWN1cnNlIGludG8gcGdfd2FsICovCiAJCX0KQEAgLTE0MDcsMTYgKzE0NjcsNjQgQEAgc2VuZERp cihiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKnBhdGgsIGludCBiYXNlcGF0aGxlbiwgYm9vbCBz aXplb25seSwKIAogCQkJaWYgKCFza2lwX3RoaXNfZGlyKQogCQkJCXNpemUgKz0gc2VuZERpcihz aW5rLCBwYXRoYnVmLCBiYXNlcGF0aGxlbiwgc2l6ZW9ubHksIHRhYmxlc3BhY2VzLAotCQkJCQkJ CQlzZW5kdGJsc3BjbGlua3MsIG1hbmlmZXN0LCBzcGNvaWQpOworCQkJCQkJCQlzZW5kdGJsc3Bj bGlua3MsIG1hbmlmZXN0LCBzcGNvaWQsIGliKTsKIAkJfQogCQllbHNlIGlmIChTX0lTUkVHKHN0 YXRidWYuc3RfbW9kZSkpCiAJCXsKIAkJCWJvb2wJCXNlbnQgPSBmYWxzZTsKKwkJCXVuc2lnbmVk CW51bV9ibG9ja3NfcmVxdWlyZWQgPSAwOworCQkJdW5zaWduZWQJdHJ1bmNhdGlvbl9ibG9ja19s ZW5ndGggPSAwOworCQkJY2hhcgkJdGFyZmlsZW5hbWVidWZbTUFYUEdQQVRIICogMl07CisJCQlj aGFyCSAgICp0YXJmaWxlbmFtZSA9IHBhdGhidWYgKyBiYXNlcGF0aGxlbiArIDE7CisJCQlGaWxl QmFja3VwTWV0aG9kIG1ldGhvZCA9IEJBQ0tfVVBfRklMRV9GVUxMWTsKKworCQkJaWYgKGliICE9 IE5VTEwgJiYgaXNSZWxhdGlvbkZpbGUpCisJCQl7CisJCQkJT2lkCQkJcmVsc3Bjb2lkOworCQkJ CWNoYXIJICAgKmxvb2t1cF9wYXRoOworCisJCQkJaWYgKE9pZElzVmFsaWQoc3Bjb2lkKSkKKwkJ CQl7CisJCQkJCXJlbHNwY29pZCA9IHNwY29pZDsKKwkJCQkJbG9va3VwX3BhdGggPSBwc3ByaW50 ZigicGdfdGJsc3BjLyV1LyVzIiwgc3Bjb2lkLAorCQkJCQkJCQkJCSAgIHRhcmZpbGVuYW1lKTsK KwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKGlzR2xvYmFsRGlyKQorCQkJCQkJcmVs c3Bjb2lkID0gR0xPQkFMVEFCTEVTUEFDRV9PSUQ7CisJCQkJCWVsc2UKKwkJCQkJCXJlbHNwY29p ZCA9IERFRkFVTFRUQUJMRVNQQUNFX09JRDsKKwkJCQkJbG9va3VwX3BhdGggPSBwc3RyZHVwKHRh cmZpbGVuYW1lKTsKKwkJCQl9CisKKwkJCQltZXRob2QgPSBHZXRGaWxlQmFja3VwTWV0aG9kKGli LCBsb29rdXBfcGF0aCwgZGJvaWQsIHJlbHNwY29pZCwKKwkJCQkJCQkJCQkJIHJlbGZpbGVudW1i ZXIsIHJlbEZvcmtOdW0sCisJCQkJCQkJCQkJCSBzZWdubywgc3RhdGJ1Zi5zdF9zaXplLAorCQkJ CQkJCQkJCQkgJm51bV9ibG9ja3NfcmVxdWlyZWQsCisJCQkJCQkJCQkJCSByZWxhdGl2ZV9ibG9j a19udW1iZXJzLAorCQkJCQkJCQkJCQkgJnRydW5jYXRpb25fYmxvY2tfbGVuZ3RoKTsKKwkJCQlp ZiAobWV0aG9kID09IEJBQ0tfVVBfRklMRV9JTkNSRU1FTlRBTExZKQorCQkJCXsKKwkJCQkJc3Rh dGJ1Zi5zdF9zaXplID0KKwkJCQkJCUdldEluY3JlbWVudGFsRmlsZVNpemUobnVtX2Jsb2Nrc19y ZXF1aXJlZCk7CisJCQkJCXNucHJpbnRmKHRhcmZpbGVuYW1lYnVmLCBzaXplb2YodGFyZmlsZW5h bWVidWYpLAorCQkJCQkJCSAiJXMvSU5DUkVNRU5UQUwuJXMiLAorCQkJCQkJCSBwYXRoICsgYmFz ZXBhdGhsZW4gKyAxLAorCQkJCQkJCSBkZS0+ZF9uYW1lKTsKKwkJCQkJdGFyZmlsZW5hbWUgPSB0 YXJmaWxlbmFtZWJ1ZjsKKwkJCQl9CisKKwkJCQlwZnJlZShsb29rdXBfcGF0aCk7CisJCQl9CiAK IAkJCWlmICghc2l6ZW9ubHkpCi0JCQkJc2VudCA9IHNlbmRGaWxlKHNpbmssIHBhdGhidWYsIHBh dGhidWYgKyBiYXNlcGF0aGxlbiArIDEsICZzdGF0YnVmLAorCQkJCXNlbnQgPSBzZW5kRmlsZShz aW5rLCBwYXRoYnVmLCB0YXJmaWxlbmFtZSwgJnN0YXRidWYsCiAJCQkJCQkJCXRydWUsIGRib2lk LCBzcGNvaWQsCi0JCQkJCQkJCXJlbGZpbGVudW1iZXIsIHNlZ25vLCBtYW5pZmVzdCk7CisJCQkJ CQkJCXJlbGZpbGVudW1iZXIsIHNlZ25vLCBtYW5pZmVzdCwKKwkJCQkJCQkJbnVtX2Jsb2Nrc19y ZXF1aXJlZCwKKwkJCQkJCQkJbWV0aG9kID09IEJBQ0tfVVBfRklMRV9JTkNSRU1FTlRBTExZID8g cmVsYXRpdmVfYmxvY2tfbnVtYmVycyA6IE5VTEwsCisJCQkJCQkJCXRydW5jYXRpb25fYmxvY2tf bGVuZ3RoKTsKIAogCQkJaWYgKHNlbnQgfHwgc2l6ZW9ubHkpCiAJCQl7CkBAIC0xNDM0LDYgKzE1 NDIsMTAgQEAgc2VuZERpcihiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKnBhdGgsIGludCBiYXNl cGF0aGxlbiwgYm9vbCBzaXplb25seSwKIAkJCWVyZXBvcnQoV0FSTklORywKIAkJCQkJKGVycm1z Zygic2tpcHBpbmcgc3BlY2lhbCBmaWxlIFwiJXNcIiIsIHBhdGhidWYpKSk7CiAJfQorCisJaWYg KHJlbGF0aXZlX2Jsb2NrX251bWJlcnMgIT0gTlVMTCkKKwkJcGZyZWUocmVsYXRpdmVfYmxvY2tf bnVtYmVycyk7CisKIAlGcmVlRGlyKGRpcik7CiAJcmV0dXJuIHNpemU7CiB9CkBAIC0xNDQ2LDYg KzE1NTgsMTIgQEAgc2VuZERpcihiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKnBhdGgsIGludCBi YXNlcGF0aGxlbiwgYm9vbCBzaXplb25seSwKICAqIElmIGRib2lkIGlzIGFueXRoaW5nIG90aGVy IHRoYW4gSW52YWxpZE9pZCB0aGVuIGFueSBjaGVja3N1bSBmYWlsdXJlcwogICogZGV0ZWN0ZWQg d2lsbCBnZXQgcmVwb3J0ZWQgdG8gdGhlIGN1bXVsYXRpdmUgc3RhdHMgc3lzdGVtLgogICoKKyAq IElmIHRoZSBmaWxlIGlzIHRvIGJlIHNlbnQgaW5jcmVtZW50YWxseSwgdGhlbiBudW1faW5jcmVt ZW50YWxfYmxvY2tzCisgKiBzaG91bGQgYmUgdGhlIG51bWJlciBvZiBibG9ja3MgdG8gYmUgc2Vu dCwgYW5kIGluY3JlbWVudGFsX2Jsb2NrcworICogYW4gYXJyYXkgb2YgYmxvY2sgbnVtYmVycyBy ZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgc2VnbWVudC4KKyAqIElmIHRoZSB3 aG9sZSBmaWxlIGlzIHRvIGJlIHNlbnQsIHRoZW4gaW5jcmVtZW50YWxfYmxvY2tzIHNob3VsZCBi ZSBOVUxMLAorICogYW5kIG51bV9pbmNyZW1lbnRhbF9ibG9ja3MgY2FuIGhhdmUgYW55IHZhbHVl LCBhcyBpdCB3aWxsIGJlIGlnbm9yZWQuCisgKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSBmaWxl IHdhcyBzdWNjZXNzZnVsbHkgc2VudCwgZmFsc2UgaWYgJ21pc3Npbmdfb2snLAogICogYW5kIHRo ZSBmaWxlIGRpZCBub3QgZXhpc3QuCiAgKi8KQEAgLTE0NTMsNyArMTU3MSw4IEBAIHN0YXRpYyBi b29sCiBzZW5kRmlsZShiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKnJlYWRmaWxlbmFtZSwgY29u c3QgY2hhciAqdGFyZmlsZW5hbWUsCiAJCSBzdHJ1Y3Qgc3RhdCAqc3RhdGJ1ZiwgYm9vbCBtaXNz aW5nX29rLCBPaWQgZGJvaWQsIE9pZCBzcGNvaWQsCiAJCSBSZWxGaWxlTnVtYmVyIHJlbGZpbGVu dW1iZXIsIHVuc2lnbmVkIHNlZ25vLAotCQkgYmFja3VwX21hbmlmZXN0X2luZm8gKm1hbmlmZXN0 KQorCQkgYmFja3VwX21hbmlmZXN0X2luZm8gKm1hbmlmZXN0LCB1bnNpZ25lZCBudW1faW5jcmVt ZW50YWxfYmxvY2tzLAorCQkgQmxvY2tOdW1iZXIgKmluY3JlbWVudGFsX2Jsb2NrcywgdW5zaWdu ZWQgdHJ1bmNhdGlvbl9ibG9ja19sZW5ndGgpCiB7CiAJaW50CQkJZmQ7CiAJQmxvY2tOdW1iZXIg Ymxrbm8gPSAwOwpAQCAtMTQ2Miw2ICsxNTgxLDcgQEAgc2VuZEZpbGUoYmJzaW5rICpzaW5rLCBj b25zdCBjaGFyICpyZWFkZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnRhcmZpbGVuYW1lLAogCXBnb2Zm X3QJCWJ5dGVzX2RvbmUgPSAwOwogCWJvb2wJCXZlcmlmeV9jaGVja3N1bSA9IGZhbHNlOwogCXBn X2NoZWNrc3VtX2NvbnRleHQgY2hlY2tzdW1fY3R4OworCWludAkJCWliaW5kZXggPSAwOwogCiAJ aWYgKHBnX2NoZWNrc3VtX2luaXQoJmNoZWNrc3VtX2N0eCwgbWFuaWZlc3QtPmNoZWNrc3VtX3R5 cGUpIDwgMCkKIAkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBpbml0aWFsaXplIGNoZWNrc3VtIG9m IGZpbGUgXCIlc1wiIiwKQEAgLTE0OTQsMjIgKzE2MTQsMTExIEBAIHNlbmRGaWxlKGJic2luayAq c2luaywgY29uc3QgY2hhciAqcmVhZGZpbGVuYW1lLCBjb25zdCBjaGFyICp0YXJmaWxlbmFtZSwK IAkJUmVsRmlsZU51bWJlcklzVmFsaWQocmVsZmlsZW51bWJlcikpCiAJCXZlcmlmeV9jaGVja3N1 bSA9IHRydWU7CiAKKwkvKgorCSAqIElmIHdlJ3JlIHNlbmRpbmcgYW4gaW5jcmVtZW50YWwgZmls ZSwgd3JpdGUgdGhlIGZpbGUgaGVhZGVyLgorCSAqLworCWlmIChpbmNyZW1lbnRhbF9ibG9ja3Mg IT0gTlVMTCkKKwl7CisJCXVuc2lnbmVkCW1hZ2ljID0gSU5DUkVNRU5UQUxfTUFHSUM7CisJCXNp emVfdAkJaGVhZGVyX2J5dGVzX2RvbmUgPSAwOworCisJCS8qIEVtaXQgaGVhZGVyIGRhdGEuICov CisJCXB1c2hfdG9fc2luayhzaW5rLCAmY2hlY2tzdW1fY3R4LCAmaGVhZGVyX2J5dGVzX2RvbmUs CisJCQkJCSAmbWFnaWMsIHNpemVvZihtYWdpYykpOworCQlwdXNoX3RvX3Npbmsoc2luaywgJmNo ZWNrc3VtX2N0eCwgJmhlYWRlcl9ieXRlc19kb25lLAorCQkJCQkgJm51bV9pbmNyZW1lbnRhbF9i bG9ja3MsIHNpemVvZihudW1faW5jcmVtZW50YWxfYmxvY2tzKSk7CisJCXB1c2hfdG9fc2luayhz aW5rLCAmY2hlY2tzdW1fY3R4LCAmaGVhZGVyX2J5dGVzX2RvbmUsCisJCQkJCSAmdHJ1bmNhdGlv bl9ibG9ja19sZW5ndGgsIHNpemVvZih0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCkpOworCQlwdXNo X3RvX3Npbmsoc2luaywgJmNoZWNrc3VtX2N0eCwgJmhlYWRlcl9ieXRlc19kb25lLAorCQkJCQkg aW5jcmVtZW50YWxfYmxvY2tzLAorCQkJCQkgc2l6ZW9mKEJsb2NrTnVtYmVyKSAqIG51bV9pbmNy ZW1lbnRhbF9ibG9ja3MpOworCisJCS8qIEZsdXNoIG91dCBhbnkgZGF0YSBzdGlsbCBpbiB0aGUg YnVmZmVyIHNvIGl0J3MgYWdhaW4gZW1wdHkuICovCisJCWlmIChoZWFkZXJfYnl0ZXNfZG9uZSA+ IDApCisJCXsKKwkJCWJic2lua19hcmNoaXZlX2NvbnRlbnRzKHNpbmssIGhlYWRlcl9ieXRlc19k b25lKTsKKwkJCWlmIChwZ19jaGVja3N1bV91cGRhdGUoJmNoZWNrc3VtX2N0eCwKKwkJCQkJCQkJ ICAgKHVpbnQ4ICopIHNpbmstPmJic19idWZmZXIsCisJCQkJCQkJCSAgIGhlYWRlcl9ieXRlc19k b25lKSA8IDApCisJCQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCB1cGRhdGUgY2hlY2tzdW0gb2Yg YmFzZSBiYWNrdXAiKTsKKwkJfQorCisJCS8qIFVwZGF0ZSBvdXIgbm90aW9uIG9mIGZpbGUgcG9z aXRpb24uICovCisJCWJ5dGVzX2RvbmUgKz0gc2l6ZW9mKG1hZ2ljKTsKKwkJYnl0ZXNfZG9uZSAr PSBzaXplb2YobnVtX2luY3JlbWVudGFsX2Jsb2Nrcyk7CisJCWJ5dGVzX2RvbmUgKz0gc2l6ZW9m KHRydW5jYXRpb25fYmxvY2tfbGVuZ3RoKTsKKwkJYnl0ZXNfZG9uZSArPSBzaXplb2YoQmxvY2tO dW1iZXIpICogbnVtX2luY3JlbWVudGFsX2Jsb2NrczsKKwl9CisKIAkvKgogCSAqIExvb3AgdW50 aWwgd2UgcmVhZCB0aGUgYW1vdW50IG9mIGRhdGEgdGhlIGNhbGxlciB0b2xkIHVzIHRvIGV4cGVj dC4gVGhlCiAJICogZmlsZSBjb3VsZCBiZSBsb25nZXIsIGlmIGl0IHdhcyBleHRlbmRlZCB3aGls ZSB3ZSB3ZXJlIHNlbmRpbmcgaXQsIGJ1dAogCSAqIGZvciBhIGJhc2UgYmFja3VwIHdlIGNhbiBp Z25vcmUgc3VjaCBleHRlbmRlZCBkYXRhLiBJdCB3aWxsIGJlIHJlc3RvcmVkCiAJICogZnJvbSBX QUwuCiAJICovCi0Jd2hpbGUgKGJ5dGVzX2RvbmUgPCBzdGF0YnVmLT5zdF9zaXplKQorCXdoaWxl ICgxKQogCXsKLQkJc2l6ZV90CQlyZW1haW5pbmcgPSBzdGF0YnVmLT5zdF9zaXplIC0gYnl0ZXNf ZG9uZTsKKwkJLyoKKwkJICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UndmUgcmVhZCBhbGwgdGhlIGRh dGEgdGhhdCB3ZSBuZWVkLCBhbmQgaWYgbm90LAorCQkgKiByZWFkIHNvbWUgbW9yZS4KKwkJICov CisJCWlmIChpbmNyZW1lbnRhbF9ibG9ja3MgPT0gTlVMTCkKKwkJeworCQkJc2l6ZV90CQlyZW1h aW5pbmcgPSBzdGF0YnVmLT5zdF9zaXplIC0gYnl0ZXNfZG9uZTsKKworCQkJLyoKKwkJCSAqIElm IHdlJ3ZlIHJlYWQgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcywgdGhlbiBpdCdzIHRpbWUg dG8KKwkJCSAqIHN0b3AuCisJCQkgKi8KKwkJCWlmIChieXRlc19kb25lID49IHN0YXRidWYtPnN0 X3NpemUpCisJCQkJYnJlYWs7CisKKwkJCS8qCisJCQkgKiBSZWFkIGFzIG1hbnkgYnl0ZXMgYXMg d2lsbCBmaXQgaW4gdGhlIGJ1ZmZlciwgb3IgaG93ZXZlciBtYW55CisJCQkgKiBhcmUgbGVmdCB0 byByZWFkLCB3aGljaGV2ZXIgaXMgbGVzcy4KKwkJCSAqLworCQkJY250ID0gcmVhZF9maWxlX2Rh dGFfaW50b19idWZmZXIoc2luaywgcmVhZGZpbGVuYW1lLCBmZCwKKwkJCQkJCQkJCQkJIGJ5dGVz X2RvbmUsIHJlbWFpbmluZywKKwkJCQkJCQkJCQkJIGJsa25vICsgc2Vnbm8gKiBSRUxTRUdfU0la RSwKKwkJCQkJCQkJCQkJIHZlcmlmeV9jaGVja3N1bSwKKwkJCQkJCQkJCQkJICZjaGVja3N1bV9m YWlsdXJlcyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlCbG9ja051bWJlciByZWxhdGl2ZV9ibGtu bzsKIAotCQkvKiBUcnkgdG8gcmVhZCBzb21lIG1vcmUgZGF0YS4gKi8KLQkJY250ID0gcmVhZF9m aWxlX2RhdGFfaW50b19idWZmZXIoc2luaywgcmVhZGZpbGVuYW1lLCBmZCwgYnl0ZXNfZG9uZSwK LQkJCQkJCQkJCQkgcmVtYWluaW5nLAotCQkJCQkJCQkJCSBibGtubyArIHNlZ25vICogUkVMU0VH X1NJWkUsCi0JCQkJCQkJCQkJIHZlcmlmeV9jaGVja3N1bSwKLQkJCQkJCQkJCQkgJmNoZWNrc3Vt X2ZhaWx1cmVzKTsKKwkJCS8qCisJCQkgKiBJZiB3ZSd2ZSByZWFkIGFsbCB0aGUgYmxvY2tzLCB0 aGVuIGl0J3MgdGltZSB0byBzdG9wLgorCQkJICovCisJCQlpZiAoaWJpbmRleCA+PSBudW1faW5j cmVtZW50YWxfYmxvY2tzKQorCQkJCWJyZWFrOworCisJCQkvKgorCQkJICogUmVhZCBqdXN0IG9u ZSBibG9jaywgd2hpY2hldmVyIG9uZSBpcyB0aGUgbmV4dCB0aGF0IHdlJ3JlCisJCQkgKiBzdXBw b3NlZCB0byBpbmNsdWRlLgorCQkJICovCisJCQlyZWxhdGl2ZV9ibGtubyA9IGluY3JlbWVudGFs X2Jsb2Nrc1tpYmluZGV4KytdOworCQkJY250ID0gcmVhZF9maWxlX2RhdGFfaW50b19idWZmZXIo c2luaywgcmVhZGZpbGVuYW1lLCBmZCwKKwkJCQkJCQkJCQkJIHJlbGF0aXZlX2Jsa25vICogQkxD S1NaLAorCQkJCQkJCQkJCQkgQkxDS1NaLAorCQkJCQkJCQkJCQkgcmVsYXRpdmVfYmxrbm8gKyBz ZWdubyAqIFJFTFNFR19TSVpFLAorCQkJCQkJCQkJCQkgdmVyaWZ5X2NoZWNrc3VtLAorCQkJCQkJ CQkJCQkgJmNoZWNrc3VtX2ZhaWx1cmVzKTsKKworCQkJLyoKKwkJCSAqIElmIHdlIGdldCBhIHBh cnRpYWwgcmVhZCwgdGhhdCBtdXN0IG1lYW4gdGhhdCB0aGUgcmVsYXRpb24gaXMKKwkJCSAqIGJl aW5nIHRydW5jYXRlZC4gVWx0aW1hdGVseSwgaXQgc2hvdWxkIGJlIHRydW5jYXRlZCB0byBhCisJ CQkgKiBtdWx0aXBsZSBvZiBCTENLU1osIHNpbmNlIHRoaXMgcGF0aCBzaG91bGQgb25seSBiZSBy ZWFjaGVkIGZvcgorCQkJICogcmVsYXRpb24gZmlsZXMsIGJ1dCB3ZSBtaWdodCB0cmFuc2llbnRs eSBvYnNlcnZlIGFuCisJCQkgKiBpbnRlcm1lZGlhdGUgdmFsdWUuCisJCQkgKgorCQkJICogSXQg c2hvdWxkIGJlIGZpbmUgdG8gdHJlYXQgdGhpcyBqdXN0IGFzIGlmIHRoZSBlbnRpcmUgYmxvY2sg aGFkCisJCQkgKiBiZWVuIHRydW5jYXRlZCBhd2F5IC0gaS5lLiBmaWxsIHRoaXMgYW5kIGFsbCBs YXRlciBibG9ja3Mgd2l0aAorCQkJICogemVyb2VzLiBXQUwgcmVwbGF5IHdpbGwgZml4IHRoaW5n cyB1cC4KKwkJCSAqLworCQkJaWYgKGNudCA8IEJMQ0tTWikKKwkJCQlicmVhazsKKwkJfQogCiAJ CS8qCiAJCSAqIElmIHRoZSBhbW91bnQgb2YgZGF0YSB3ZSB3ZXJlIGFibGUgdG8gcmVhZCB3YXMg bm90IGEgbXVsdGlwbGUgb2YKQEAgLTE2OTIsNiArMTkwMSw1NiBAQCByZWFkX2ZpbGVfZGF0YV9p bnRvX2J1ZmZlcihiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKnJlYWRmaWxlbmFtZSwgaW50IGZk LAogCXJldHVybiBjbnQ7CiB9CiAKKy8qCisgKiBQdXNoIGRhdGEgaW50byBhIGJic2luay4KKyAq CisgKiBJdCdzIGJldHRlciwgd2hlbiBwb3NzaWJsZSwgdG8gcmVhZCBkYXRhIGRpcmVjdGx5IGlu dG8gdGhlIGJic2luaydzIGJ1ZmZlciwKKyAqIHJhdGhlciB0aGFuIHVzaW5nIHRoaXMgZnVuY3Rp b24gdG8gY29weSBpdCBpbnRvIHRoZSBidWZmZXI7IHRoaXMgZnVuY3Rpb24gaXMKKyAqIGZvciBj YXNlcyB3aGVyZSB0aGF0IGFwcHJvYWNoIGlzIG5vdCBwcmFjdGljYWwuCisgKgorICogYnl0ZXNf ZG9uZSBzaG91bGQgcG9pbnQgdG8gYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQg YXJlCisgKiBjdXJyZW50bHkgdXNlZCBpbiB0aGUgYmJzaW5rJ3MgYnVmZmVyLiBVcG9uIHJldHVy biwgdGhlIGJ5dGVzIGlkZW50aWZpZWQgYnkKKyAqIGRhdGEgYW5kIGxlbmd0aCB3aWxsIGhhdmUg YmVlbiBjb3BpZWQgaW50byB0aGUgYmJzaW5rJ3MgYnVmZmVyLCBmbHVzaGluZworICogYXMgcmVx dWlyZWQsIGFuZCAqYnl0ZXNfZG9uZSB3aWxsIGhhdmUgYmVlbiB1cGRhdGVkIGFjY29yZGluZ2x5 LiBJZiB0aGUKKyAqIGJ1ZmZlciB3YXMgZmx1c2hlZCwgdGhlIHByZXZpb3VzIGNvbnRlbnRzIHdp bGwgYWxzbyBoYXZlIGJlZW4gZmVkIHRvCisgKiBjaGVja3N1bV9jdHguCisgKgorICogTm90ZSB0 aGF0IGFmdGVyIG9uZSBvciBtb3JlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gaXQgaXMgdGhlIGNh bGxlcidzCisgKiByZXNwb25zaWJpbGl0eSB0byBwZXJmb3JtIGFueSByZXF1aXJlZCBmaW5hbCBm bHVzaC4KKyAqLworc3RhdGljIHZvaWQKK3B1c2hfdG9fc2luayhiYnNpbmsgKnNpbmssIHBnX2No ZWNrc3VtX2NvbnRleHQgKmNoZWNrc3VtX2N0eCwKKwkJCSBzaXplX3QgKmJ5dGVzX2RvbmUsIHZv aWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisJd2hpbGUgKGxlbmd0aCA+IDApCisJeworCQlz aXplX3QJCWJ5dGVzX3RvX2NvcHk7CisKKwkJLyoKKwkJICogV2UgdXNlIDwgaGVyZSByYXRoZXIg dGhhbiA8PSBzbyB0aGF0IGlmIHRoZSBkYXRhIGV4YWN0bHkgZmlsbHMgdGhlCisJCSAqIHJlbWFp bmluZyBidWZmZXIgc3BhY2UsIHdlIHRyaWdnZXIgYSBmbHVzaCBub3cuCisJCSAqLworCQlpZiAo bGVuZ3RoIDwgc2luay0+YmJzX2J1ZmZlcl9sZW5ndGggLSAqYnl0ZXNfZG9uZSkKKwkJeworCQkJ LyogQXBwZW5kIHJlbWFpbmluZyBkYXRhIHRvIGJ1ZmZlci4gKi8KKwkJCW1lbWNweShzaW5rLT5i YnNfYnVmZmVyICsgKmJ5dGVzX2RvbmUsIGRhdGEsIGxlbmd0aCk7CisJCQkqYnl0ZXNfZG9uZSAr PSBsZW5ndGg7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBDb3B5IHVudGlsIGJ1ZmZlciBpcyBm dWxsIGFuZCBmbHVzaCBpdC4gKi8KKwkJYnl0ZXNfdG9fY29weSA9IHNpbmstPmJic19idWZmZXJf bGVuZ3RoIC0gKmJ5dGVzX2RvbmU7CisJCW1lbWNweShzaW5rLT5iYnNfYnVmZmVyICsgKmJ5dGVz X2RvbmUsIGRhdGEsIGJ5dGVzX3RvX2NvcHkpOworCQlkYXRhID0gKChjaGFyICopIGRhdGEpICsg Ynl0ZXNfdG9fY29weTsKKwkJbGVuZ3RoIC09IGJ5dGVzX3RvX2NvcHk7CisJCWJic2lua19hcmNo aXZlX2NvbnRlbnRzKHNpbmssIHNpbmstPmJic19idWZmZXJfbGVuZ3RoKTsKKwkJaWYgKHBnX2No ZWNrc3VtX3VwZGF0ZShjaGVja3N1bV9jdHgsICh1aW50OCAqKSBzaW5rLT5iYnNfYnVmZmVyLAor CQkJCQkJCSAgIHNpbmstPmJic19idWZmZXJfbGVuZ3RoKSA8IDApCisJCQllbG9nKEVSUk9SLCAi Y291bGQgbm90IHVwZGF0ZSBjaGVja3N1bSIpOworCQkqYnl0ZXNfZG9uZSA9IDA7CisJfQorfQor CiAvKgogICogVHJ5IHRvIHZlcmlmeSB0aGUgY2hlY2tzdW0gZm9yIHRoZSBwcm92aWRlZCBwYWdl LCBpZiBpdCBzZWVtcyBhcHByb3ByaWF0ZQogICogdG8gZG8gc28uCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9pbmNyZW1lbnRhbC5jIGIvc3JjL2JhY2tlbmQvYmFj a3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi4xZTVhNWFjMzNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYmFj a3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuYwpAQCAtMCwwICsxLDEwMDMgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIGJhc2ViYWNrdXBfaW5jcmVtZW50YWwuYworICoJICBjb2RlIGZv ciBpbmNyZW1lbnRhbCBiYWNrdXAgc3VwcG9ydAorICoKKyAqIFRoaXMgY29kZSBpc24ndCBhY3R1 YWxseSBpbiBjaGFyZ2Ugb2YgdGFraW5nIGFuIGluY3JlbWVudGFsIGJhY2t1cDsKKyAqIHRoZSBh Y3R1YWwgY29uc3RydWN0aW9uIG9mIHRoZSBpbmNyZW1lbnRhbCBiYWNrdXAgaGFwcGVucyBpbgor ICogYmFzZWJhY2t1cC5jLiBIZXJlLCB3ZSdyZSBjb25jZXJuZWQgd2l0aCBwcm92aWRpbmcgdGhl IG5lY2Vzc2FyeQorICogc3VwcG9ydHMgZm9yIHRoYXQgb3BlcmF0aW9uLiBJbiBwYXJ0aWN1bGFy LCB3ZSBuZWVkIHRvIHBhcnNlIHRoZQorICogYmFja3VwIG1hbmlmZXN0IHN1cHBsaWVkIGJ5IHRo ZSB1c2VyIHRha2luZyB0aGUgaW5jcmVtZW50YWwgYmFja3VwCisgKiBhbmQgZXh0cmFjdCB0aGUg cmVxdWlyZWQgaW5mb3JtYXRpb24gZnJvbSBpdC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDIwMTAtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cF9pbmNy ZW1lbnRhbC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3RpbWVsaW5lLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hs b2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCisjaW5jbHVkZSAiYmFja3Vw L2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuaCIKKyNpbmNsdWRlICJiYWNrdXAvd2Fsc3VtbWFyeS5o IgorI2luY2x1ZGUgImNvbW1vbi9ibGtyZWZ0YWJsZS5oIgorI2luY2x1ZGUgImNvbW1vbi9wYXJz ZV9tYW5pZmVzdC5oIgorI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNpbmNsdWRlICJwb3N0 bWFzdGVyL3dhbHN1bW1hcml6ZXIuaCIKKworI2RlZmluZQlCTE9DS1NfUEVSX1JFQUQJCQk1MTIK KworLyoKKyAqIERldGFpbHMgZXh0cmFjdGVkIGZyb20gdGhlIFdBTCByYW5nZXMgcHJlc2VudCBp biB0aGUgc3VwcGxpZWQgYmFja3VwIG1hbmlmZXN0LgorICovCit0eXBlZGVmIHN0cnVjdAorewor CVRpbWVMaW5lSUQJdGxpOworCVhMb2dSZWNQdHIJc3RhcnRfbHNuOworCVhMb2dSZWNQdHIJZW5k X2xzbjsKK30gYmFja3VwX3dhbF9yYW5nZTsKKworLyoKKyAqIERldGFpbHMgZXh0cmFjdGVkIGZy b20gdGhlIGZpbGUgbGlzdCBwcmVzZW50IGluIHRoZSBzdXBwbGllZCBiYWNrdXAgbWFuaWZlc3Qu CisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJdWludDMyCQlzdGF0dXM7CisJY29uc3QgY2hhciAq cGF0aDsKKwlzaXplX3QJCXNpemU7Cit9IGJhY2t1cF9maWxlX2VudHJ5OworCitzdGF0aWMgdWlu dDMyIGhhc2hfc3RyaW5nX3BvaW50ZXIoY29uc3QgY2hhciAqcyk7CisjZGVmaW5lIFNIX1BSRUZJ WCAgICAgICAgICAgICAgIGJhY2t1cF9maWxlCisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQRQkJCWJh Y2t1cF9maWxlX2VudHJ5CisjZGVmaW5lIFNIX0tFWV9UWVBFICAgICAgICAgICAgIGNvbnN0IGNo YXIgKgorI2RlZmluZSBTSF9LRVkgICAgICAgICAgICAgICAgICBwYXRoCisjZGVmaW5lIFNIX0hB U0hfS0VZKHRiLCBrZXkpICAgIGhhc2hfc3RyaW5nX3BvaW50ZXIoa2V5KQorI2RlZmluZSBTSF9F UVVBTCh0YiwgYSwgYikJCShzdHJjbXAoYSwgYikgPT0gMCkKKyNkZWZpbmUgU0hfU0NPUEUgICAg ICAgICAgICAgICAgc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9ERUNMQVJFCisjZGVmaW5lIFNI X0RFRklORQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKK3N0cnVjdCBJbmNyZW1lbnRh bEJhY2t1cEluZm8KK3sKKwkvKiBNZW1vcnkgY29udGV4dCBmb3IgdGhpcyBvYmplY3QgYW5kIGl0 cyBzdWJzaWRpYXJ5IG9iamVjdHMuICovCisJTWVtb3J5Q29udGV4dCBtY3h0OworCisJLyogVGVt cG9yYXJ5IGJ1ZmZlciBmb3Igc3RvcmluZyB0aGUgbWFuaWZlc3Qgd2hpbGUgcGFyc2luZyBpdC4g Ki8KKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkvKiBXQUwgcmFuZ2VzIGV4dHJhY3RlZCBmcm9t IHRoZSBiYWNrdXAgbWFuaWZlc3QuICovCisJTGlzdAkgICAqbWFuaWZlc3Rfd2FsX3JhbmdlczsK KworCS8qCisJICogRmlsZXMgZXh0cmFjdGVkIGZyb20gdGhlIGJhY2t1cCBtYW5pZmVzdC4KKwkg KgorCSAqIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoaXMgaW5mb3JtYXRpb24sIGJlY2F1c2Ugd2Ug dXNlIFdBTCBzdW1tYXJpZXMgdG8KKwkgKiBmaWd1cmUgd2hhdCdzIGNoYW5nZWQuIEl0IHdvdWxk IGJlIHVuc2FmZSB0byBqdXN0IHJlbHkgb24gdGhlIGxpc3Qgb2YKKwkgKiBmaWxlcyB0aGF0IGV4 aXN0ZWQgYmVmb3JlLCBiZWNhdXNlIGl0J3MgcG9zc2libGUgZm9yIGEgZmlsZSB0byBiZQorCSAq IHJlbW92ZWQgYW5kIGEgbmV3IG9uZSBjcmVhdGVkIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgZGlm ZmVyZW50CisJICogY29udGVudHMuIEluIHN1Y2ggY2FzZXMsIHRoZSB3aG9sZSBmaWxlIG11c3Qg c3RpbGwgYmUgc2VudC4gV2UgY2FuIHRlbGwKKwkgKiBmcm9tIHRoZSBXQUwgc3VtbWFyaWVzIHdo ZXRoZXIgdGhhdCBoYXBwZW5lZCwgYnV0IG5vdCBmcm9tIHRoZSBmaWxlCisJICogbGlzdC4KKwkg KgorCSAqIE5vbmV0aGVsZXNzLCB0aGlzIGRhdGEgaXMgdXNlZnVsIGZvciBzYW5pdHkgY2hlY2tp bmcuIElmIGEgZmlsZSB0aGF0IHdlCisJICogdGhpbmsgd2Ugc2hvdWxkbid0IG5lZWQgdG8gc2Vu ZCBpcyBub3QgcHJlc2VudCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZQorCSAqIHByaW9yIGJhY2t1 cCwgc29tZXRoaW5nIGhhcyBnb25lIHRlcnJpYmx5IHdyb25nLiBXZSByZXRhaW4gdGhlIGZpbGUK KwkgKiBuYW1lcyBhbmQgc2l6ZXMsIGJ1dCBub3QgdGhlIGNoZWNrc3VtcyBvciBsYXN0IG1vZGlm aWVkIHRpbWVzLCBmb3IKKwkgKiB3aGljaCB3ZSBoYXZlIG5vIHVzZS4KKwkgKgorCSAqIE9uZSBz aWduaWZpY2FudCBkb3duc2lkZSBvZiBzdG9yaW5nIHRoaXMgZGF0YSBpcyB0aGF0IGl0IGNvbnN1 bWVzCisJICogbWVtb3J5LiBJZiB0aGF0IHR1cm5zIG91dCB0byBiZSBhIHByb2JsZW0sIHdlIG1p Z2h0IGhhdmUgdG8gZGVjaWRlIG5vdAorCSAqIHRvIHJldGFpbiB0aGlzIGluZm9ybWF0aW9uLCBv ciB0byBtYWtlIGl0IG9wdGlvbmFsLgorCSAqLworCWJhY2t1cF9maWxlX2hhc2ggKm1hbmlmZXN0 X2ZpbGVzOworCisJLyoKKwkgKiBCbG9jay1yZWZlcmVuY2UgdGFibGUgZm9yIHRoZSBpbmNyZW1l bnRhbCBiYWNrdXAuCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgc3RvcmluZyB0aGUgZW50 aXJlIGJsb2NrLXJlZmVyZW5jZSB0YWJsZSBpbiBtZW1vcnkKKwkgKiB3aWxsIGJlIGEgcHJvYmxl bSBmb3Igc29tZSB1c2Vycy4gVGhlIGluLW1lbW9yeSBmb3JtYXQgdGhhdCB3ZSdyZSB1c2luZwor CSAqIGhlcmUgaXMgcHJldHR5IGVmZmljaWVudCwgY29udmVyZ2luZyB0byBsaXR0bGUgbW9yZSB0 aGFuIDEgYml0IHBlcgorCSAqIGJsb2NrIGZvciByZWxhdGlvbiBmb3JrcyB3aXRoIGxhcmdlIG51 bWJlcnMgb2YgbW9kaWZpZWQgYmxvY2tzLiBJdCdzCisJICogcG9zc2libGUsIGhvd2V2ZXIsIHRo YXQgaWYgeW91IHRyeSB0byBwZXJmb3JtIGFuIGluY3JlbWVudGFsIGJhY2t1cCBvZgorCSAqIGEg ZGF0YWJhc2Ugd2l0aCBhIHN1ZmZpY2llbnRseSBsYXJnZSBudW1iZXIgb2YgcmVsYXRpb25zIG9u IGEKKwkgKiBzdWZmaWNpZW50bHkgc21hbGwgbWFjaGluZSwgeW91IGNvdWxkIHJ1biBvdXQgb2Yg bWVtb3J5IGhlcmUuIElmIHRoYXQKKwkgKiB0dXJucyBvdXQgdG8gYmUgYSBwcm9ibGVtIGluIHBy YWN0aWNlLCB3ZSdsbCBuZWVkIHRvIGJlIG1vcmUgY2xldmVyLgorCSAqLworCUJsb2NrUmVmVGFi bGUgKmJydGFiOworfTsKKworc3RhdGljIHZvaWQgbWFuaWZlc3RfcHJvY2Vzc19maWxlKEpzb25N YW5pZmVzdFBhcnNlQ29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJICBjaGFyICpwYXRobmFtZSwK KwkJCQkJCQkJICBzaXplX3Qgc2l6ZSwKKwkJCQkJCQkJICBwZ19jaGVja3N1bV90eXBlIGNoZWNr c3VtX3R5cGUsCisJCQkJCQkJCSAgaW50IGNoZWNrc3VtX2xlbmd0aCwKKwkJCQkJCQkJICB1aW50 OCAqY2hlY2tzdW1fcGF5bG9hZCk7CitzdGF0aWMgdm9pZCBtYW5pZmVzdF9wcm9jZXNzX3dhbF9y YW5nZShKc29uTWFuaWZlc3RQYXJzZUNvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgICBUaW1l TGluZUlEIHRsaSwKKwkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgc3RhcnRfbHNuLAorCQkJCQkJCQkJ ICAgWExvZ1JlY1B0ciBlbmRfbHNuKTsKK3N0YXRpYyB2b2lkIG1hbmlmZXN0X3JlcG9ydF9lcnJv cihKc29uTWFuaWZlc3RQYXJzZUNvbnRleHQgKmliLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmZt dCwuLi4pCisJCQlwZ19hdHRyaWJ1dGVfcHJpbnRmKDIsIDMpIHBnX2F0dHJpYnV0ZV9ub3JldHVy bigpOworc3RhdGljIGludAljb21wYXJlX2Jsb2NrX251bWJlcnMoY29uc3Qgdm9pZCAqYSwgY29u c3Qgdm9pZCAqYik7CisKKy8qCisgKiBDcmVhdGUgYSBuZXcgb2JqZWN0IGZvciBzdG9yaW5nIGlu Zm9ybWF0aW9uIGV4dHJhY3RlZCBmcm9tIHRoZSBtYW5pZmVzdAorICogc3VwcGxpZWQgd2hlbiBj cmVhdGluZyBhbiBpbmNyZW1lbnRhbCBiYWNrdXAuCisgKi8KK0luY3JlbWVudGFsQmFja3VwSW5m byAqCitDcmVhdGVJbmNyZW1lbnRhbEJhY2t1cEluZm8oTWVtb3J5Q29udGV4dCBtY3h0KQorewor CUluY3JlbWVudGFsQmFja3VwSW5mbyAqaWI7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0Owor CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhtY3h0KTsKKworCWliID0gcGFs bG9jMChzaXplb2YoSW5jcmVtZW50YWxCYWNrdXBJbmZvKSk7CisJaWItPm1jeHQgPSBtY3h0Owor CWluaXRTdHJpbmdJbmZvKCZpYi0+YnVmKTsKKworCS8qCisJICogSXQncyBoYXJkIHRvIGd1ZXNz IGhvdyBtYW55IGZpbGVzIGEgInR5cGljYWwiIGluc3RhbGxhdGlvbiB3aWxsIGhhdmUgaW4KKwkg KiB0aGUgZGF0YSBkaXJlY3RvcnksIGJ1dCBhIGZyZXNoIGluaXRkYiBjcmVhdGVzIGFsbW9zdCAx MDAwIGZpbGVzIGFzIG9mCisJICogdGhpcyB3cml0aW5nLCBzbyBpdCBzZWVtcyB0byBtYWtlIHNl bnNlIGZvciBvdXIgZXN0aW1hdGUgdG8KKwkgKiBzdWJzdGFudGlhbGx5IGhpZ2hlci4KKwkgKi8K KwlpYi0+bWFuaWZlc3RfZmlsZXMgPSBiYWNrdXBfZmlsZV9jcmVhdGUobWN4dCwgMTAwMDAsIE5V TEwpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJcmV0dXJuIGli OworfQorCisvKgorICogQmVmb3JlIHRha2luZyBhbiBpbmNyZW1lbnRhbCBiYWNrdXAsIHRoZSBj YWxsZXIgbXVzdCBzdXBwbHkgdGhlIGJhY2t1cAorICogbWFuaWZlc3QgZnJvbSBhIHByaW9yIGJh Y2t1cC4gRWFjaCBjaHVuayBvZiBtYW5pZmVzdCBkYXRhIHJlY2lldmVkCisgKiBmcm9tIHRoZSBj bGllbnQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkCitBcHBl bmRJbmNyZW1lbnRhbE1hbmlmZXN0RGF0YShJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliLCBjb25z dCBjaGFyICpkYXRhLAorCQkJCQkJCSAgaW50IGxlbikKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNv bnRleHQ7CisKKwkvKiBTd2l0Y2ggdG8gb3VyIG1lbW9yeSBjb250ZXh0LiAqLworCW9sZGNvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaWItPm1jeHQpOworCisJLyoKKwkgKiBYWFguIE91 ciBqc29uIHBhcnNlciBpcyBhdCBwcmVzZW50IGluY2FwYWJsZSBvZiBwYXJzaW5nIGpzb24gYmxv YnMKKwkgKiBpbmNyZW1lbnRhbGx5LCBzbyB3ZSBoYXZlIHRvIGFjY3VtdWxhdGUgdGhlIGVudGly ZSBiYWNrdXAgbWFuaWZlc3QKKwkgKiBiZWZvcmUgd2UgY2FuIGRvIGFueXRoaW5nIHdpdGggaXQu IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBmaXhlZCwgc2luY2UKKwkgKiBzb21lIHVzZXJzIG1pZ2h0 IGhhdmUgdmVyeSBsYXJnZSBudW1iZXJzIG9mIGZpbGVzIGluIHRoZSBkYXRhCisJICogZGlyZWN0 b3J5LgorCSAqLworCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJmliLT5idWYsIGRhdGEsIGxlbik7 CisKKwkvKiBTd2l0Y2ggYmFjayB0byBwcmV2aW91cyBtZW1vcnkgY29udGV4dC4gKi8KKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBGaW5hbGl6ZSBhbiBJ bmNyZW1lbnRhbEJhY2t1cEluZm8gb2JqZWN0IGFmdGVyIGFsbCBtYW5pZmVzdCBkYXRhIGhhcwor ICogYmVlbiBzdXBwbGllZCB2aWEgY2FsbHMgdG8gQXBwZW5kSW5jcmVtZW50YWxNYW5pZmVzdERh dGEuCisgKi8KK3ZvaWQKK0ZpbmFsaXplSW5jcmVtZW50YWxNYW5pZmVzdChJbmNyZW1lbnRhbEJh Y2t1cEluZm8gKmliKQoreworCUpzb25NYW5pZmVzdFBhcnNlQ29udGV4dCBjb250ZXh0OworCU1l bW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCS8qIFN3aXRjaCB0byBvdXIgbWVtb3J5IGNvbnRl eHQuICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhpYi0+bWN4dCk7CisK KwkvKiBQYXJzZSB0aGUgbWFuaWZlc3QuICovCisJY29udGV4dC5wcml2YXRlX2RhdGEgPSBpYjsK Kwljb250ZXh0LnBlcl9maWxlX2NiID0gbWFuaWZlc3RfcHJvY2Vzc19maWxlOworCWNvbnRleHQu cGVyX3dhbF9yYW5nZV9jYiA9IG1hbmlmZXN0X3Byb2Nlc3Nfd2FsX3JhbmdlOworCWNvbnRleHQu ZXJyb3JfY2IgPSBtYW5pZmVzdF9yZXBvcnRfZXJyb3I7CisJanNvbl9wYXJzZV9tYW5pZmVzdCgm Y29udGV4dCwgaWItPmJ1Zi5kYXRhLCBpYi0+YnVmLmxlbik7CisKKwkvKiBEb25lIHdpdGggdGhl IGJ1ZmZlciwgc28gcmVsZWFzZSBtZW1vcnkuICovCisJcGZyZWUoaWItPmJ1Zi5kYXRhKTsKKwlp Yi0+YnVmLmRhdGEgPSBOVUxMOworCisJLyogU3dpdGNoIGJhY2sgdG8gcHJldmlvdXMgbWVtb3J5 IGNvbnRleHQuICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworfQorCisv KgorICogUHJlcGFyZSB0byB0YWtlIGFuIGluY3JlbWVudGFsIGJhY2t1cC4KKyAqCisgKiBCZWZv cmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIEFwcGVuZEluY3JlbWVudGFsTWFuaWZlc3REYXRh IGFuZAorICogRmluYWxpemVJbmNyZW1lbnRhbE1hbmlmZXN0IHNob3VsZCBoYXZlIGFscmVhZHkg YmVlbiBjYWxsZWQgdG8gcGFzcyBhbGwKKyAqIHRoZSBtYW5pZmVzdCBkYXRhIHRvIHRoaXMgb2Jq ZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgc2FuaXR5IGNoZWNrcyBvbiB0aGUg ZGF0YSBleHRyYWN0ZWQgZnJvbSB0aGUKKyAqIG1hbmlmZXN0IGFuZCBmaWd1cmVzIG91dCBmb3Ig d2hpY2ggV0FMIHJhbmdlcyB3ZSBuZWVkIHN1bW1hcmllcywgYW5kCisgKiB3aGV0aGVyIHRob3Nl IHN1bW1hcmllcyBhcmUgYXZhaWxhYmxlLiBUaGVuLCBpdCByZWFkcyBhbmQgY29tYmluZXMgdGhl CisgKiBkYXRhIGZyb20gdGhvc2Ugc3VtbWFyeSBmaWxlcy4gSXQgYWxzbyB1cGRhdGVzIHRoZSBi YWNrdXBfc3RhdGUgd2l0aCB0aGUKKyAqIHJlZmVyZW5jZSBUTEkgYW5kIExTTiBmb3IgdGhlIHBy aW9yIGJhY2t1cC4KKyAqLwordm9pZAorUHJlcGFyZUZvckluY3JlbWVudGFsQmFja3VwKEluY3Jl bWVudGFsQmFja3VwSW5mbyAqaWIsCisJCQkJCQkJQmFja3VwU3RhdGUgKmJhY2t1cF9zdGF0ZSkK K3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJTGlzdAkgICAqZXhwZWN0ZWRUTEVzOwor CUxpc3QJICAgKmFsbF93c2xpc3QsCisJCQkgICAqcmVxdWlyZWRfd3NsaXN0ID0gTklMOworCUxp c3RDZWxsICAgKmxjOworCVRpbWVMaW5lSGlzdG9yeUVudHJ5ICoqdGxlcDsKKwlpbnQJCQludW1f d2FsX3JhbmdlczsKKwlpbnQJCQlpOworCWJvb2wJCWZvdW5kX2JhY2t1cF9zdGFydF90bGkgPSBm YWxzZTsKKwlUaW1lTGluZUlECWVhcmxpZXN0X3dhbF9yYW5nZV90bGkgPSAwOworCVhMb2dSZWNQ dHIJZWFybGllc3Rfd2FsX3JhbmdlX3N0YXJ0X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCVRp bWVMaW5lSUQJbGF0ZXN0X3dhbF9yYW5nZV90bGkgPSAwOworCVhMb2dSZWNQdHIJc3VtbWFyaXpl ZF9sc247CisJWExvZ1JlY1B0cglwZW5kaW5nX2xzbjsKKwlYTG9nUmVjUHRyCXByaW9yX3BlbmRp bmdfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJaW50CQkJZGVhZGN5Y2xlcyA9IDA7CisJVGlt ZXN0YW1wVHogaW5pdGlhbF90aW1lLAorCQkJCWN1cnJlbnRfdGltZTsKKworCUFzc2VydChpYi0+ YnVmLmRhdGEgPT0gTlVMTCk7CisKKwkvKiBTd2l0Y2ggdG8gb3VyIG1lbW9yeSBjb250ZXh0LiAq LworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaWItPm1jeHQpOworCisJLyoK KwkgKiBBIHZhbGlkIGJhY2t1cCBtYW5pZmVzdCBtdXN0IGFsd2F5cyBjb250YWluIGF0IGxlYXN0 IG9uZSBXQUwgcmFuZ2UKKwkgKiAodXN1YWxseSBleGFjdGx5IG9uZSwgdW5sZXNzIHRoZSBiYWNr dXAgc3Bhbm5lZCBhIHRpbWVsaW5lIHN3aXRjaCkuCisJICovCisJbnVtX3dhbF9yYW5nZXMgPSBs aXN0X2xlbmd0aChpYi0+bWFuaWZlc3Rfd2FsX3Jhbmdlcyk7CisJaWYgKG51bV93YWxfcmFuZ2Vz ID09IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9U X0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygibWFuaWZlc3QgY29udGFpbnMg bm8gcmVxdWlyZWQgV0FMIHJhbmdlcyIpKSk7CisKKwkvKgorCSAqIE1hdGNoIHVwIHRoZSBUTElz IHRoYXQgYXBwZWFyIGluIHRoZSBXQUwgcmFuZ2VzIG9mIHRoZSBiYWNrdXAgbWFuaWZlc3QKKwkg KiB3aXRoIHRob3NlIHRoYXQgYXBwZWFyIGluIHRoaXMgc2VydmVyJ3MgdGltZWxpbmUgaGlzdG9y eS4gV2UgZXhwZWN0CisJICogZXZlcnkgYmFja3VwX3dhbF9yYW5nZSB0byBtYXRjaCB0byBhIFRp bWVMaW5lSGlzdG9yeUVudHJ5OyBpZiBpdCBkb2VzCisJICogbm90LCB0aGF0J3MgYW4gZXJyb3Iu CisJICoKKwkgKiBUaGlzIGxvb3AgYWxzbyBkZWNpZGVzIHdoaWNoIG9mIHRoZSBXQUwgcmFuZ2Vz IGlzIHRoZSBtYW5pZmVzdCBpcyBtb3N0CisJICogYW5jaWVudCBhbmQgd2hpY2ggb25lIGlzIHRo ZSBuZXdlc3QsIGFjY29yZGluZyB0byB0aGUgdGltZWxpbmUgaGlzdG9yeQorCSAqIG9mIHRoaXMg c2VydmVyLCBhbmQgc3RvcmVzIFRMSXMgb2YgdGhvc2UgV0FMIHJhbmdlcyBpbnRvCisJICogZWFy bGllc3Rfd2FsX3JhbmdlX3RsaSBhbmQgbGF0ZXN0X3dhbF9yYW5nZV90bGkuIEl0IGFsc28gdXBk YXRlcworCSAqIGVhcmxpZXN0X3dhbF9yYW5nZV9zdGFydF9sc24gdG8gdGhlIHN0YXJ0IExTTiBv ZiB0aGUgV0FMIHJhbmdlIGZvcgorCSAqIGVhcmxpZXN0X3dhbF9yYW5nZV90bGkuCisJICoKKwkg KiBOb3RlIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBvZiByZWFkVGltZUxpbmVIaXN0b3J5IHB1dHMg dGhlIGxhdGVzdAorCSAqIHRpbWVsaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QsIG5v dCB0aGUgZW5kLiBIZW5jZSwgdGhlIGVhcmxpZXN0CisJICogVExJIGlzIHRoZSBvbmUgdGhhdCBv Y2N1cnMgbmVhcmVzdCB0aGUgZW5kIG9mIHRoZSBsaXN0IHJldHVybmVkIGJ5CisJICogcmVhZFRp bWVMaW5lSGlzdG9yeSwgYW5kIHRoZSBsYXRlc3QgVExJIGlzIHRoZSBvbmUgdGhhdCBvY2N1cnMg Y2xvc2VzdAorCSAqIHRvIHRoZSBiZWdpbm5pbmcuCisJICovCisJZXhwZWN0ZWRUTEVzID0gcmVh ZFRpbWVMaW5lSGlzdG9yeShiYWNrdXBfc3RhdGUtPnN0YXJ0dGxpKTsKKwl0bGVwID0gcGFsbG9j MChudW1fd2FsX3JhbmdlcyAqIHNpemVvZihUaW1lTGluZUhpc3RvcnlFbnRyeSAqKSk7CisJZm9y IChpID0gMDsgaSA8IG51bV93YWxfcmFuZ2VzOyArK2kpCisJeworCQliYWNrdXBfd2FsX3Jhbmdl ICpyYW5nZSA9IGxpc3RfbnRoKGliLT5tYW5pZmVzdF93YWxfcmFuZ2VzLCBpKTsKKwkJYm9vbAkJ c2F3X2VhcmxpZXN0X3dhbF9yYW5nZV90bGkgPSBmYWxzZTsKKwkJYm9vbAkJc2F3X2xhdGVzdF93 YWxfcmFuZ2VfdGxpID0gZmFsc2U7CisKKwkJLyogU2VhcmNoIHRoaXMgc2VydmVyJ3MgaGlzdG9y eSBmb3IgdGhpcyBXQUwgcmFuZ2UncyBUTEkuICovCisJCWZvcmVhY2gobGMsIGV4cGVjdGVkVExF cykKKwkJeworCQkJVGltZUxpbmVIaXN0b3J5RW50cnkgKnRsZSA9IGxmaXJzdChsYyk7CisKKwkJ CWlmICh0bGUtPnRsaSA9PSByYW5nZS0+dGxpKQorCQkJeworCQkJCXRsZXBbaV0gPSB0bGU7CisJ CQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICh0bGUtPnRsaSA9PSBlYXJsaWVzdF93YWxfcmFuZ2Vf dGxpKQorCQkJCXNhd19lYXJsaWVzdF93YWxfcmFuZ2VfdGxpID0gdHJ1ZTsKKwkJCWlmICh0bGUt PnRsaSA9PSBsYXRlc3Rfd2FsX3JhbmdlX3RsaSkKKwkJCQlzYXdfbGF0ZXN0X3dhbF9yYW5nZV90 bGkgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogQW4gaW5jcmVtZW50YWwgYmFja3VwIGNhbiBv bmx5IGJlIHRha2VuIHJlbGF0aXZlIHRvIGEgYmFja3VwIHRoYXQKKwkJICogcmVwcmVzZW50cyBh IHByZXZpb3VzIHN0YXRlIG9mIHRoaXMgc2VydmVyLiBJZiB0aGUgYmFja3VwIHJlcXVpcmVzCisJ CSAqIFdBTCBmcm9tIGEgdGltZWxpbmUgdGhhdCdzIG5vdCBpbiBvdXIgaGlzdG9yeSwgdGhhdCBk ZWZpbml0ZWx5CisJCSAqIGlzbid0IHRoZSBjYXNlLgorCQkgKi8KKwkJaWYgKHRsZXBbaV0gPT0g TlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05P VF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJ0aW1lbGluZSAldSBmb3Vu ZCBpbiBtYW5pZmVzdCwgYnV0IG5vdCBpbiB0aGlzIHNlcnZlcidzIGhpc3RvcnkiLAorCQkJCQkJ CXJhbmdlLT50bGkpKSk7CisKKwkJLyoKKwkJICogSWYgd2UgZm91bmQgdGhpcyBUTEkgaW4gdGhl IHNlcnZlcidzIGhpc3RvcnkgYmVmb3JlIGVuY291bnRlcmluZworCQkgKiB0aGUgbGF0ZXN0IFRM SSBzZWVuIHNvIGZhciBpbiB0aGUgc2VydmVyJ3MgaGlzdG9yeSwgdGhlbiB0aGlzIFRMSQorCQkg KiBpcyB0aGUgbGF0ZXN0IG9uZSBzZWVuIHNvIGZhci4KKwkJICoKKwkJICogSWYgb24gdGhlIG90 aGVyIGhhbmQgd2Ugc2F3IHRoZSBlYXJsaWVzdCBUTEkgc2VlbiBzbyBmYXIgYmVmb3JlCisJCSAq IGZpbmRpbmcgdGhpcyBUTEksIHRoaXMgVExJIGlzIGVhcmxpZXIgdGhhbiB0aGUgZWFybGllc3Qg b25lIHNlZW4gc28KKwkJICogZmFyLiBBbmQgaWYgdGhpcyBpcyB0aGUgZmlyc3QgVExJIGZvciB3 aGljaCB3ZSd2ZSBzZWFyY2hlZCwgaXQncworCQkgKiBhbHNvIHRoZSBlYXJsaWVzdCBvbmUgc2Vl biBzbyBmYXIuCisJCSAqCisJCSAqIE9uIHRoZSBmaXJzdCBsb29wIGl0ZXJhdGlvbiwgYm90aCB0 aGluZ3Mgc2hvdWxkIG5lY2Vzc2FyaWx5IGJlCisJCSAqIHRydWUuCisJCSAqLworCQlpZiAoIXNh d19sYXRlc3Rfd2FsX3JhbmdlX3RsaSkKKwkJCWxhdGVzdF93YWxfcmFuZ2VfdGxpID0gcmFuZ2Ut PnRsaTsKKwkJaWYgKGVhcmxpZXN0X3dhbF9yYW5nZV90bGkgPT0gMCB8fCBzYXdfZWFybGllc3Rf d2FsX3JhbmdlX3RsaSkKKwkJeworCQkJZWFybGllc3Rfd2FsX3JhbmdlX3RsaSA9IHJhbmdlLT50 bGk7CisJCQllYXJsaWVzdF93YWxfcmFuZ2Vfc3RhcnRfbHNuID0gcmFuZ2UtPnN0YXJ0X2xzbjsK KwkJfQorCX0KKworCS8qCisJICogUHJvcGFnYXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmlv ciBiYWNrdXAgaW50byB0aGUgYmFja3VwX2xhYmVsIHRoYXQKKwkgKiB3aWxsIGJlIGdlbmVyYXRl ZCBmb3IgdGhpcyBiYWNrdXAuCisJICovCisJYmFja3VwX3N0YXRlLT5pc3RhcnRwb2ludCA9IGVh cmxpZXN0X3dhbF9yYW5nZV9zdGFydF9sc247CisJYmFja3VwX3N0YXRlLT5pc3RhcnR0bGkgPSBl YXJsaWVzdF93YWxfcmFuZ2VfdGxpOworCisJLyoKKwkgKiBTYW5pdHkgY2hlY2sgc3RhcnQgYW5k IGVuZCBMU05zIGZvciB0aGUgV0FMIHJhbmdlcyBpbiB0aGUgbWFuaWZlc3QuCisJICoKKwkgKiBD b21tb25seSwgdGhlcmUgd29uJ3QgYmUgYW55IHRpbWVsaW5lIHN3aXRjaGVzIGR1cmluZyB0aGUg cHJpb3IgYmFja3VwCisJICogYXQgYWxsLCBidXQgaWYgdGhlcmUgYXJlLCB0aGV5IHNob3VsZCBo YXBwZW4gYXQgdGhlIHNhbWUgTFNOcyB0aGF0IHRoaXMKKwkgKiBzZXJ2ZXIgc3dpdGNoZWQgdGlt ZWxpbmVzLgorCSAqCisJICogV2hldGhlciB0aGVyZSBhcmUgYW55IHRpbWVsaW5lIHN3aXRjaGVz IGR1cmluZyB0aGUgcHJpb3IgYmFja3VwIG9yIG5vdCwKKwkgKiB0aGUgcHJpb3IgYmFja3VwIHNo b3VsZG4ndCByZXF1aXJlIGFueSBXQUwgZnJvbSBhIHRpbWVsaW5lIHByaW9yIHRvIHRoZQorCSAq IHN0YXJ0IG9mIHRoYXQgdGltZWxpbmUuIEl0IGFsc28gc2hvdWxkbid0IHJlcXVpcmUgYW55IFdB TCBmcm9tIGxhdGVyCisJICogdGhhbiB0aGUgc3RhcnQgb2YgdGhpcyBiYWNrdXAuCisJICoKKwkg KiBJZiBhbnkgb2YgdGhlc2Ugc2FuaXR5IGNoZWNrcyBmYWlsLCBvbmUgcG9zc2libGUgZXhwbGFu YXRpb24gaXMgdGhhdAorCSAqIHRoZSB1c2VyIGhhcyBnZW5lcmF0ZWQgV0FMIG9uIHRoZSBzYW1l IHRpbWVsaW5lIHdpdGggdGhlIHNhbWUgTFNOcyBtb3JlCisJICogdGhhbiBvbmNlLiBGb3IgaW5z dGFuY2UsIGlmIHR3byBzdGFuZGJ5cyBydW5uaW5nIG9uIHRpbWVsaW5lIDEgd2VyZQorCSAqIGJv dGggcHJvbW90ZWQgYW5kIChkdWUgdG8gYSBicm9rZW4gYXJjaGl2aW5nIHNldHVwKSBib3RoIHNl bGVjdGVkIG5ldworCSAqIHRpbWVsaW5lIElEIDIsIHRoZW4gaXQncyBwb3NzaWJsZSB0aGF0IG9u ZSBvZiB0aGVzZSBjaGVja3MgbWlnaHQgdHJpcC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGVyZSBh cmUgbG90cyBvZiB3YXlzIGZvciB0aGUgdXNlciB0byBkbyBzb21ldGhpbmcgdmVyeSBiYWQKKwkg KiB3aXRob3V0IHRyaXBwaW5nIGFueSBvZiB0aGVzZSBjaGVja3MsIGFuZCB0aGV5IGFyZSBub3Qg aW50ZW5kZWQgdG8gYmUKKwkgKiBjb21wcmVoZW5zaXZlLiBJdCdzIHByZXR0eSBoYXJkIHRvIHNl ZSBob3cgd2UgY291bGQgYmUgY2VydGFpbiBvZgorCSAqIGFueXRoaW5nIGhlcmUuIEhvd2V2ZXIs IGlmIHRoZXJlJ3MgYSBwcm9ibGVtIHN0YXJpbmcgdXMgcmlnaHQgaW4gdGhlCisJICogZmFjZSwg aXQncyBiZXN0IHRvIHJlcG9ydCBpdCwgc28gd2UgZG8uCisJICovCisJZm9yIChpID0gMDsgaSA8 IG51bV93YWxfcmFuZ2VzOyArK2kpCisJeworCQliYWNrdXBfd2FsX3JhbmdlICpyYW5nZSA9IGxp c3RfbnRoKGliLT5tYW5pZmVzdF93YWxfcmFuZ2VzLCBpKTsKKworCQlpZiAocmFuZ2UtPnRsaSA9 PSBlYXJsaWVzdF93YWxfcmFuZ2VfdGxpKQorCQl7CisJCQlpZiAocmFuZ2UtPnN0YXJ0X2xzbiA8 IHRsZXBbaV0tPmJlZ2luKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJCSBlcnJtc2coIm1h bmlmZXN0IHJlcXVpcmVzIFdBTCBmcm9tIGluaXRpYWwgdGltZWxpbmUgJXUgc3RhcnRpbmcgYXQg JVgvJVgsIGJ1dCB0aGF0IHRpbWVsaW5lIGJlZ2lucyBhdCAlWC8lWCIsCisJCQkJCQkJCXJhbmdl LT50bGksCisJCQkJCQkJCUxTTl9GT1JNQVRfQVJHUyhyYW5nZS0+c3RhcnRfbHNuKSwKKwkJCQkJ CQkJTFNOX0ZPUk1BVF9BUkdTKHRsZXBbaV0tPmJlZ2luKSkpKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCWlmIChyYW5nZS0+c3RhcnRfbHNuICE9IHRsZXBbaV0tPmJlZ2luKQorCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRF X1NUQVRFKSwKKwkJCQkJCSBlcnJtc2coIm1hbmlmZXN0IHJlcXVpcmVzIFdBTCBmcm9tIGNvbnRp bnVhdGlvbiB0aW1lbGluZSAldSBzdGFydGluZyBhdCAlWC8lWCwgYnV0IHRoYXQgdGltZWxpbmUg YmVnaW5zIGF0ICVYLyVYIiwKKwkJCQkJCQkJcmFuZ2UtPnRsaSwKKwkJCQkJCQkJTFNOX0ZPUk1B VF9BUkdTKHJhbmdlLT5zdGFydF9sc24pLAorCQkJCQkJCQlMU05fRk9STUFUX0FSR1ModGxlcFtp XS0+YmVnaW4pKSkpOworCQl9CisKKwkJaWYgKHJhbmdlLT50bGkgPT0gbGF0ZXN0X3dhbF9yYW5n ZV90bGkpCisJCXsKKwkJCWlmIChyYW5nZS0+ZW5kX2xzbiA+IGJhY2t1cF9zdGF0ZS0+c3RhcnRw b2ludCkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1Rf Tk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCQkgZXJybXNnKCJtYW5pZmVzdCByZXF1 aXJlcyBXQUwgZnJvbSBmaW5hbCB0aW1lbGluZSAldSBlbmRpbmcgYXQgJVgvJVgsIGJ1dCB0aGlz IGJhY2t1cCBzdGFydHMgYXQgJVgvJVgiLAorCQkJCQkJCQlyYW5nZS0+dGxpLAorCQkJCQkJCQlM U05fRk9STUFUX0FSR1MocmFuZ2UtPmVuZF9sc24pLAorCQkJCQkJCQlMU05fRk9STUFUX0FSR1Mo YmFja3VwX3N0YXRlLT5zdGFydHBvaW50KSkpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChy YW5nZS0+ZW5kX2xzbiAhPSB0bGVwW2ldLT5lbmQpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJ CQkJIGVycm1zZygibWFuaWZlc3QgcmVxdWlyZXMgV0FMIGZyb20gbm9uLWZpbmFsIHRpbWVsaW5l ICV1IGVuZGluZyBhdCAlWC8lWCwgYnV0IHRoaXMgc2VydmVyIHN3aXRjaGVkIHRpbWVsaW5lcyBh dCAlWC8lWCIsCisJCQkJCQkJCXJhbmdlLT50bGksCisJCQkJCQkJCUxTTl9GT1JNQVRfQVJHUyhy YW5nZS0+ZW5kX2xzbiksCisJCQkJCQkJCUxTTl9GT1JNQVRfQVJHUyh0bGVwW2ldLT5lbmQpKSkp OworCQl9CisKKwl9CisKKwkvKgorCSAqIFdhaXQgZm9yIFdBTCBzdW1tYXJpemF0aW9uIHRvIGNh dGNoIHVwIHRvIHRoZSBiYWNrdXAgc3RhcnQgTFNOIChidXQKKwkgKiB0aW1lIG91dCBpZiBpdCBk b2Vzbid0IGRvIHNvIHF1aWNrbHkgZW5vdWdoKS4KKwkgKi8KKwlpbml0aWFsX3RpbWUgPSBjdXJy ZW50X3RpbWUgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisJd2hpbGUgKDEpCisJeworCQlsb25n CQl0aW1lb3V0X2luX21zID0gMTAwMDA7CisJCXVuc2lnbmVkCWVsYXBzZWRfc2Vjb25kczsKKwor CQkvKgorCQkgKiBBbGlnbiB0aGUgd2FpdCB0aW1lIHRvIHByZXZlbnQgZHJpZnQuIFRoaXMgZG9l c24ndCByZWFsbHkgbWF0dGVyLAorCQkgKiBidXQgd2UnZCBsaWtlIHRoZSB3YXJuaW5ncyBhYm91 dCBob3cgbG9uZyB3ZSd2ZSBiZWVuIHdhaXRpbmcgdG8gc2F5CisJCSAqIDEwIHNlY29uZHMsIDIw IHNlY29uZHMsIDMwIHNlY29uZHMsIDQwIHNlY29uZHMgLi4uIHdpdGhvdXQgZXZlcgorCQkgKiBk cmlmdGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0ZW4uCisJCSAq LworCQl0aW1lb3V0X2luX21zIC09CisJCQlUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRz KGN1cnJlbnRfdGltZSwgaW5pdGlhbF90aW1lKSAlCisJCQl0aW1lb3V0X2luX21zOworCisJCS8q IFdhaXQgZm9yIHVwIHRvIDEwIHNlY29uZHMuICovCisJCXN1bW1hcml6ZWRfbHNuID0gV2FpdEZv cldhbFN1bW1hcml6YXRpb24oYmFja3VwX3N0YXRlLT5zdGFydHBvaW50LAorCQkJCQkJCQkJCQkJ IDEwMDAwLCAmcGVuZGluZ19sc24pOworCisJCS8qIElmIFdBTCBzdW1tYXJpemF0aW9uIGhhcyBw cm9ncmVzc2VkIHN1ZmZpY2llbnRseSwgc3RvcCB3YWl0aW5nLiAqLworCQlpZiAoc3VtbWFyaXpl ZF9sc24gPj0gYmFja3VwX3N0YXRlLT5zdGFydHBvaW50KQorCQkJYnJlYWs7CisKKwkJLyoKKwkJ ICogS2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGN5Y2xlcyBkdXJpbmcgd2hpY2ggdGhlcmUg aGFzIGJlZW4gbm8KKwkJICogcHJvZ3Jlc3Npb24gb2YgcGVuZGluZ19sc24uIElmIHBlbmRpbmdf bHNuIGlzIG5vdCBhZHZhbmNpbmcsIHRoYXQKKwkJICogbWVhbnMgdGhhdCBub3Qgb25seSBhcmUg bm8gbmV3IGZpbGVzIGFwcGVhcmluZyBvbiBkaXNrLCBidXQgd2UncmUKKwkJICogbm90IGV2ZW4g aW5jb3Jwb3JhdGluZyBuZXcgcmVjb3JkcyBpbnRvIHRoZSBpbi1tZW1vcnkgc3RhdGUuCisJCSAq LworCQlpZiAocGVuZGluZ19sc24gPiBwcmlvcl9wZW5kaW5nX2xzbikKKwkJeworCQkJcHJpb3Jf cGVuZGluZ19sc24gPSBwZW5kaW5nX2xzbjsKKwkJCWRlYWRjeWNsZXMgPSAwOworCQl9CisJCWVs c2UKKwkJCSsrZGVhZGN5Y2xlczsKKworCQkvKgorCQkgKiBJZiB3ZSd2ZSBtYW5hZ2VkIHRvIHdh aXQgZm9yIGFuIGVudGlyZSBtaW51dGUgd2l0aG90IHRoZSBXQUwKKwkJICogc3VtbWFyaXplciBh YnNvcmJpbmcgYSBzaW5nbGUgV0FMIHJlY29yZCwgZXJyb3Igb3V0OyBwcm9iYWJseQorCQkgKiBz b21ldGhpbmcgaXMgd3JvbmcuCisJCSAqCisJCSAqIFdlIGNvdWxkIGNvbnNpZGVyIGFsc28gZXJy b3Jpbmcgb3V0IGlmIHRoZSBzdW1tYXJpemVyIGlzIHRha2luZyB0b28KKwkJICogbG9uZyB0byBj YXRjaCB1cCwgYnV0IGl0J3Mgbm90IGNsZWFyIHdoYXQgcmF0ZSBvZiBwcm9ncmVzcyB3b3VsZCBi ZQorCQkgKiBhY2NlcHRhYmxlIGFuZCB3aGF0IHdvdWxkIGJlIHRvbyBzbG93LiBTbyBpbnN0ZWFk LCB3ZSBqdXN0IHRyeSB0bworCQkgKiBlcnJvciBvdXQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUn cyBubyBwcm9ncmVzcyBhdCBhbGwuIFRoYXQgc2VlbXMKKwkJICogbGlrZWx5IHRvIGNhdGNoIGEg cmVhc29uYWJsZSBudW1iZXIgb2YgdGhlIHRoaW5ncyB0aGF0IGNhbiBnbyB3cm9uZworCQkgKiBp biBwcmFjdGljZSAoZS5nLiB0aGUgc3VtbWFyaXplciBwcm9jZXNzIGlzIGNvbXBsZXRlbHkgaHVu Zywgc2F5CisJCSAqIGJlY2F1c2Ugc29tZWJvZHkgaG9va2VkIHVwIGEgZGVidWdnZXIgdG8gaXQg b3Igc29tZXRoaW5nKSB3aXRob3V0CisJCSAqIGdpdmluZyB1cCB0b28gcXVpY2tseSB3aGVuIHRo ZSBzeXRlbSBpcyBqdXN0IHNsb3cuCisJCSAqLworCQlpZiAoZGVhZGN5Y2xlcyA+PSA2KQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJF UVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coIldBTCBzdW1tYXJpemF0aW9uIGlzIG5vdCBw cm9ncmVzc2luZyIpLAorCQkJCQkgZXJyZGV0YWlsKCJTdW1tYXJpemF0aW9uIGlzIG5lZWRlZCB0 aHJvdWdoICVYLyVYLCBidXQgaXMgc3R1Y2sgYXQgJVgvJVggb24gZGlzayBhbmQgJVgvJVggaW4g bWVtb3J5LiIsCisJCQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGJhY2t1cF9zdGF0ZS0+c3RhcnRw b2ludCksCisJCQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKHN1bW1hcml6ZWRfbHNuKSwKKwkJCQkJ CQkgICBMU05fRk9STUFUX0FSR1MocGVuZGluZ19sc24pKSkpOworCisJCS8qCisJCSAqIE90aGVy d2lzZSwganVzdCBsZXQgdGhlIHVzZXIga25vdyB3aGF0J3MgaGFwcGVuaW5nLgorCQkgKi8KKwkJ Y3VycmVudF90aW1lID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCQllbGFwc2VkX3NlY29uZHMg PQorCQkJVGltZXN0YW1wRGlmZmVyZW5jZU1pbGxpc2Vjb25kcyhpbml0aWFsX3RpbWUsIGN1cnJl bnRfdGltZSkgLyAxMDAwOworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygic3RpbGwg d2FpdGluZyBmb3IgV0FMIHN1bW1hcml6YXRpb24gdGhyb3VnaCAlWC8lWCBhZnRlciAlZCBzZWNv bmRzIiwKKwkJCQkJCUxTTl9GT1JNQVRfQVJHUyhiYWNrdXBfc3RhdGUtPnN0YXJ0cG9pbnQpLAor CQkJCQkJZWxhcHNlZF9zZWNvbmRzKSwKKwkJCQkgZXJyZGV0YWlsKCJTdW1tYXJpemF0aW9uIGhh cyByZWFjaGVkICVYLyVYIG9uIGRpc2sgYW5kICVYLyVYIGluIG1lbW9yeS4iLAorCQkJCQkJICAg TFNOX0ZPUk1BVF9BUkdTKHN1bW1hcml6ZWRfbHNuKSwKKwkJCQkJCSAgIExTTl9GT1JNQVRfQVJH UyhwZW5kaW5nX2xzbikpKSk7CisJfQorCisJLyoKKwkgKiBSZXRyaWV2ZSBhIGxpc3Qgb2YgYWxs IFdBTCBzdW1tYXJpZXMgb24gYW55IHRpbWVsaW5lIHRoYXQgb3ZlcmxhcCB3aXRoCisJICogdGhl IExTTiByYW5nZSBvZiBpbnRlcmVzdC4gV2UgY291bGQgaW5zdGVhZCBjYWxsIEdldFdhbFN1bW1h cmllcygpIG9uY2UKKwkgKiBwZXIgdGltZWxpbmUgaW4gdGhlIGxvb3AgdGhhdCBmb2xsb3dzLCBi dXQgdGhhdCB3b3VsZCBpbnZvbHZlIHJlYWRpbmcKKwkgKiB0aGUgZGlyZWN0b3J5IG11bHRpcGxl IHRpbWVzLiBJdCBzaG91bGQgYmUgbWlsZGx5IGZhc3RlciAtIGFuZCBwZXJoYXBzCisJICogYSBi aXQgc2FmZXIgLSB0byBkbyBpdCBqdXN0IG9uY2UuCisJICovCisJYWxsX3dzbGlzdCA9IEdldFdh bFN1bW1hcmllcygwLCBlYXJsaWVzdF93YWxfcmFuZ2Vfc3RhcnRfbHNuLAorCQkJCQkJCQkgYmFj a3VwX3N0YXRlLT5zdGFydHBvaW50KTsKKworCS8qCisJICogV2UgbmVlZCBXQUwgc3VtbWFyaWVz IGZvciBldmVyeXRoaW5nIHRoYXQgaGFwcGVuZWQgZHVyaW5nIHRoZSBwcmlvcgorCSAqIGJhY2t1 cCBhbmQgZXZlcnl0aGluZyB0aGF0IGhhcHBlbmVkIGFmdGVyd2FyZCB1cCB1bnRpbCB0aGUgcG9p bnQgd2hlcmUKKwkgKiB0aGUgY3VycmVudCBiYWNrdXAgc3RhcnRlZC4KKwkgKi8KKwlmb3JlYWNo KGxjLCBleHBlY3RlZFRMRXMpCisJeworCQlUaW1lTGluZUhpc3RvcnlFbnRyeSAqdGxlID0gbGZp cnN0KGxjKTsKKwkJWExvZ1JlY1B0cgl0bGlfc3RhcnRfbHNuID0gdGxlLT5iZWdpbjsKKwkJWExv Z1JlY1B0cgl0bGlfZW5kX2xzbiA9IHRsZS0+ZW5kOworCQlYTG9nUmVjUHRyCXRsaV9taXNzaW5n X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlMaXN0CSAgICp0bGlfd3NsaXN0OworCisJCS8q CisJCSAqIFdvcmtpbmcgdGhyb3VnaCB0aGUgaGlzdG9yeSBvZiB0aGlzIHNlcnZlciBmcm9tIHRo ZSBjdXJyZW50CisJCSAqIHRpbWVsaW5lIGJhY2t3YXJkcywgd2Ugc2tpcCBldmVyeXRoaW5nIHVu dGlsIHdlIGZpbmQgdGhlIHRpbWVsaW5lCisJCSAqIHdoZXJlIHRoaXMgYmFja3VwIHN0YXJ0ZWQu IE1vc3Qgb2YgdGhlIHRpbWUsIHRoaXMgbWVhbnMgd2Ugd29uJ3QKKwkJICogc2tpcCBhbnl0aGlu ZyBhdCBhbGwsIGFzIGl0J3MgdW5saWtlbHkgdGhhdCB0aGUgdGltZWxpbmUgaGFzCisJCSAqIGNo YW5nZWQgc2luY2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgYmFja3VwIG1vbWVudHMgYWdvLgorCQkg Ki8KKwkJaWYgKHRsZS0+dGxpID09IGJhY2t1cF9zdGF0ZS0+c3RhcnR0bGkpCisJCXsKKwkJCWZv dW5kX2JhY2t1cF9zdGFydF90bGkgPSB0cnVlOworCQkJdGxpX2VuZF9sc24gPSBiYWNrdXBfc3Rh dGUtPnN0YXJ0cG9pbnQ7CisJCX0KKwkJZWxzZSBpZiAoIWZvdW5kX2JhY2t1cF9zdGFydF90bGkp CisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBGaW5kIHRoZSBzdW1tYXJpZXMgdGhhdCBvdmVy bGFwIHRoZSBMU04gcmFuZ2Ugb2YgaW50ZXJlc3QgZm9yIHRoaXMKKwkJICogdGltZWxpbmUuIElm IHRoaXMgaXMgdGhlIGVhcmxpZXN0IHRpbWVsaW5lIGludm9sdmVkLCB0aGUgcmFuZ2Ugb2YKKwkJ ICogaW50ZXJlc3QgYmVnaW5zIHdpdGggdGhlIHN0YXJ0IExTTiBvZiB0aGUgcHJpb3IgYmFja3Vw OyBvdGhlcndpc2UsCisJCSAqIGl0IGJlZ2lucyBhdCB0aGUgTFNOIGF0IHdoaWNoIHRoaXMgdGlt ZWxpbmUgY2FtZSBpbnRvIGV4aXN0ZW5jZS4gSWYKKwkJICogdGhpcyBpcyB0aGUgbGF0ZXN0IFRM SSBpbnZvbHZlZCwgdGhlIHJhbmdlIG9mIGludGVyZXN0IGVuZHMgYXQgdGhlCisJCSAqIHN0YXJ0 IExTTiBvZiB0aGUgY3VycmVudCBiYWNrdXA7IG90aGVyd2lzZSwgaXQgZW5kcyBhdCB0aGUgcG9p bnQKKwkJICogd2hlcmUgd2Ugc3dpdGNoZWQgZnJvbSB0aGlzIHRpbWVsaW5lIHRvIHRoZSBuZXh0 IG9uZS4KKwkJICovCisJCWlmICh0bGUtPnRsaSA9PSBlYXJsaWVzdF93YWxfcmFuZ2VfdGxpKQor CQkJdGxpX3N0YXJ0X2xzbiA9IGVhcmxpZXN0X3dhbF9yYW5nZV9zdGFydF9sc247CisJCXRsaV93 c2xpc3QgPSBGaWx0ZXJXYWxTdW1tYXJpZXMoYWxsX3dzbGlzdCwgdGxlLT50bGksCisJCQkJCQkJ CQkJdGxpX3N0YXJ0X2xzbiwgdGxpX2VuZF9sc24pOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5v IGd1YXJhbnRlZSB0aGF0IHRoZSBXQUwgc3VtbWFyaWVzIHdlIGZvdW5kIGNvdmVyIHRoZQorCQkg KiBlbnRpcmUgcmFuZ2Ugb2YgTFNOcyBmb3Igd2hpY2ggc3VtbWFyaWVzIGFyZSByZXF1aXJlZCwg b3IgaW5kZWVkCisJCSAqIHRoYXQgd2UgZm91bmQgYW55IFdBTCBzdW1tYXJpZXMgYXQgYWxsLiBD aGVjayB3aGV0aGVyIHdlIGhhdmUgYQorCQkgKiBwcm9ibGVtIG9mIHRoYXQgc29ydC4KKwkJICov CisJCWlmICghV2FsU3VtbWFyaWVzQXJlQ29tcGxldGUodGxpX3dzbGlzdCwgdGxpX3N0YXJ0X2xz biwgdGxpX2VuZF9sc24sCisJCQkJCQkJCQkgJnRsaV9taXNzaW5nX2xzbikpCisJCXsKKwkJCWlm IChYTG9nUmVjUHRySXNJbnZhbGlkKHRsaV9taXNzaW5nX2xzbikpCisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RB VEUpLAorCQkJCQkJIGVycm1zZygiV0FMIHN1bW1hcmllcyBhcmUgcmVxdWlyZWQgb24gdGltZWxp bmUgJXUgZnJvbSAlWC8lWCB0byAlWC8lWCwgYnV0IG5vIHN1bW1hcmllcyBmb3IgdGhhdCB0aW1l bGluZSBhbmQgTFNOIHJhbmdlIGV4aXN0IiwKKwkJCQkJCQkJdGxlLT50bGksCisJCQkJCQkJCUxT Tl9GT1JNQVRfQVJHUyh0bGlfc3RhcnRfbHNuKSwKKwkJCQkJCQkJTFNOX0ZPUk1BVF9BUkdTKHRs aV9lbmRfbHNuKSkpKTsKKwkJCWVsc2UKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCQkgZXJy bXNnKCJXQUwgc3VtbWFyaWVzIGFyZSByZXF1aXJlZCBvbiB0aW1lbGluZSAldSBmcm9tICVYLyVY IHRvICVYLyVYLCBidXQgdGhlIHN1bW1hcmllcyBmb3IgdGhhdCB0aW1lbGluZSBhbmQgTFNOIHJh bmdlIGFyZSBpbmNvbXBsZXRlIiwKKwkJCQkJCQkJdGxlLT50bGksCisJCQkJCQkJCUxTTl9GT1JN QVRfQVJHUyh0bGlfc3RhcnRfbHNuKSwKKwkJCQkJCQkJTFNOX0ZPUk1BVF9BUkdTKHRsaV9lbmRf bHNuKSksCisJCQkJCQkgZXJyZGV0YWlsKCJUaGUgZmlyc3QgdW5zdW1tYXJpemVkIExTTiBpcyB0 aGlzIHJhbmdlIGlzICVYLyVYLiIsCisJCQkJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyh0bGlfbWlz c2luZ19sc24pKSkpOworCQl9CisKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhhdCB3ZSBuZWVkIHRv IHJlYWQgdGhlc2Ugc3VtbWFyaWVzLgorCQkgKgorCQkgKiBUZWNobmljYWxseSwgaXQncyBwb3Nz aWJsZSB0aGF0IHRoaXMgY291bGQgcmVhZCBtb3JlIGZpbGVzIHRoYW4KKwkJICogcmVxdWlyZWQs IHNpbmNlIHRsaV93c2xpc3QgaW4gdGhlb3J5IGNvdWxkIGNvbnRhaW4gcmVkdW5kYW50CisJCSAq IHN1bW1hcmllcy4gRm9yIGluc3RhbmNlLCBpZiB3ZSBoYXZlIGEgc3VtbWFyeSBmcm9tIDAvMTAw MDAwMDAgdG8KKwkJICogMC8yMDAwMDAwMCBhbmQgYWxzbyBvbmUgZnJvbSAwLzAwMDAwMDAwIHRv IDAvMzAwMDAwMDAsIHRoZW4gdGhlCisJCSAqIGxhdHRlciBzdWJzdW1lcyB0aGUgZm9ybWVyIGFu ZCB0aGUgZm9ybWVyIGNvdWxkIGJlIGlnbm9yZWQuCisJCSAqCisJCSAqIFdlIGlnbm9yZSB0aGlz IHBvc3NpYmlsaXR5IGJlY2F1c2UgdGhlIFdBTCBzdW1tYXJpemVyIG9ubHkgdHJpZXMgdG8KKwkJ ICogZ2VuZXJhdGUgc3VtbWFyaWVzIHRoYXQgZG8gbm90IG92ZXJsYXAuIElmIHNvbWVob3cgdGhl eSBleGlzdCwKKwkJICogd2UnbGwgZG8gYSBiaXQgb2YgZXh0cmEgd29yayBidXQgdGhlIHJlc3Vs dHMgc2hvdWxkIHN0aWxsIGJlCisJCSAqIGNvcnJlY3QuCisJCSAqLworCQlyZXF1aXJlZF93c2xp c3QgPSBsaXN0X2NvbmNhdChyZXF1aXJlZF93c2xpc3QsIHRsaV93c2xpc3QpOworCisJCS8qCisJ CSAqIFRpbWVsaW5lcyBlYXJsaWVyIHRoYW4gdGhlIG9uZSBpbiB3aGljaCB0aGUgcHJpb3IgYmFj a3VwIGJlZ2FuIGFyZQorCQkgKiBub3QgcmVsZXZhbnQuCisJCSAqLworCQlpZiAodGxlLT50bGkg PT0gZWFybGllc3Rfd2FsX3JhbmdlX3RsaSkKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogUmVh ZCBhbGwgb2YgdGhlIHJlcXVpcmVkIGJsb2NrIHJlZmVyZW5jZSB0YWJsZSBmaWxlcyBhbmQgbWVy Z2UgYWxsIG9mCisJICogdGhlIGRhdGEgaW50byBhIHNpbmdsZSBpbi1tZW1vcnkgYmxvY2sgcmVm ZXJlbmNlIHRhYmxlLgorCSAqCisJICogU2VlIHRoZSBjb21tZW50cyBmb3Igc3RydWN0IEluY3Jl bWVudGFsQmFja3VwSW5mbyBmb3Igc29tZSB0aG91Z2h0cyBvbgorCSAqIG1lbW9yeSB1c2FnZS4K KwkgKi8KKwlpYi0+YnJ0YWIgPSBDcmVhdGVFbXB0eUJsb2NrUmVmVGFibGUoKTsKKwlmb3JlYWNo KGxjLCByZXF1aXJlZF93c2xpc3QpCisJeworCQlXYWxTdW1tYXJ5RmlsZSAqd3MgPSBsZmlyc3Qo bGMpOworCQlXYWxTdW1tYXJ5SU8gd3NpbzsKKwkJQmxvY2tSZWZUYWJsZVJlYWRlciAqcmVhZGVy OworCQlSZWxGaWxlTG9jYXRvciBybG9jYXRvcjsKKwkJRm9ya051bWJlcglmb3JrbnVtOworCQlC bG9ja051bWJlciBsaW1pdF9ibG9jazsKKwkJQmxvY2tOdW1iZXIgYmxvY2tzW0JMT0NLU19QRVJf UkVBRF07CisKKwkJd3Npby5maWxlID0gT3BlbldhbFN1bW1hcnlGaWxlKHdzLCBmYWxzZSk7CisJ CXdzaW8uZmlsZXBvcyA9IDA7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2dfaW50ZXJu YWwoInJlYWRpbmcgV0FMIHN1bW1hcnkgZmlsZSBcIiVzXCIiLAorCQkJCQkJCQkgRmlsZVBhdGhO YW1lKHdzaW8uZmlsZSkpKSk7CisJCXJlYWRlciA9IENyZWF0ZUJsb2NrUmVmVGFibGVSZWFkZXIo UmVhZFdhbFN1bW1hcnksICZ3c2lvLAorCQkJCQkJCQkJCSAgIEZpbGVQYXRoTmFtZSh3c2lvLmZp bGUpLAorCQkJCQkJCQkJCSAgIFJlcG9ydFdhbFN1bW1hcnlFcnJvciwgTlVMTCk7CisJCXdoaWxl IChCbG9ja1JlZlRhYmxlUmVhZGVyTmV4dFJlbGF0aW9uKHJlYWRlciwgJnJsb2NhdG9yLCAmZm9y a251bSwKKwkJCQkJCQkJCQkJICAgJmxpbWl0X2Jsb2NrKSkKKwkJeworCQkJQmxvY2tSZWZUYWJs ZVNldExpbWl0QmxvY2soaWItPmJydGFiLCAmcmxvY2F0b3IsCisJCQkJCQkJCQkgICBmb3JrbnVt LCBsaW1pdF9ibG9jayk7CisKKwkJCXdoaWxlICgxKQorCQkJeworCQkJCXVuc2lnbmVkCW5ibG9j a3M7CisJCQkJdW5zaWduZWQJaTsKKworCQkJCW5ibG9ja3MgPSBCbG9ja1JlZlRhYmxlUmVhZGVy R2V0QmxvY2tzKHJlYWRlciwgYmxvY2tzLAorCQkJCQkJCQkJCQkJCSAgIEJMT0NLU19QRVJfUkVB RCk7CisJCQkJaWYgKG5ibG9ja3MgPT0gMCkKKwkJCQkJYnJlYWs7CisKKwkJCQlmb3IgKGkgPSAw OyBpIDwgbmJsb2NrczsgKytpKQorCQkJCQlCbG9ja1JlZlRhYmxlTWFya0Jsb2NrTW9kaWZpZWQo aWItPmJydGFiLCAmcmxvY2F0b3IsCisJCQkJCQkJCQkJCQkgICBmb3JrbnVtLCBibG9ja3NbaV0p OworCQkJfQorCQl9CisJCURlc3Ryb3lCbG9ja1JlZlRhYmxlUmVhZGVyKHJlYWRlcik7CisJCUZp bGVDbG9zZSh3c2lvLmZpbGUpOworCX0KKworCS8qIFN3aXRjaCBiYWNrIHRvIHByZXZpb3VzIG1l bW9yeSBjb250ZXh0LiAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30K KworLyoKKyAqIEdldCB0aGUgcGF0aG5hbWUgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIGEgZmls ZSBpcyBzZW50IGluY3JlbWVudGFsbHkuCisgKgorICogVGhlIHJlc3VsdCBpcyBhIHBhbGxvYydk IHN0cmluZy4KKyAqLworY2hhciAqCitHZXRJbmNyZW1lbnRhbEZpbGVQYXRoKE9pZCBkYm9pZCwg T2lkIHNwY29pZCwgUmVsRmlsZU51bWJlciByZWxmaWxlbnVtYmVyLAorCQkJCQkgICBGb3JrTnVt YmVyIGZvcmtudW0sIHVuc2lnbmVkIHNlZ25vKQoreworCWNoYXIJICAgKnBhdGg7CisJY2hhcgkg ICAqbGFzdHNsYXNoOworCWNoYXIJICAgKmlwYXRoOworCisJcGF0aCA9IEdldFJlbGF0aW9uUGF0 aChkYm9pZCwgc3Bjb2lkLCByZWxmaWxlbnVtYmVyLCBJbnZhbGlkQmFja2VuZElkLAorCQkJCQkJ ICAgZm9ya251bSk7CisKKwlsYXN0c2xhc2ggPSBzdHJyY2hyKHBhdGgsICcvJyk7CisJQXNzZXJ0 KGxhc3RzbGFzaCAhPSBOVUxMKTsKKwkqbGFzdHNsYXNoID0gJ1wwJzsKKworCWlmIChzZWdubyA+ IDApCisJCWlwYXRoID0gcHNwcmludGYoIiVzL0lOQ1JFTUVOVEFMLiVzLiV1IiwgcGF0aCwgbGFz dHNsYXNoICsgMSwgc2Vnbm8pOworCWVsc2UKKwkJaXBhdGggPSBwc3ByaW50ZigiJXMvSU5DUkVN RU5UQUwuJXMiLCBwYXRoLCBsYXN0c2xhc2ggKyAxKTsKKworCXBmcmVlKHBhdGgpOworCisJcmV0 dXJuIGlwYXRoOworfQorCisvKgorICogSG93IHNob3VsZCB3ZSBiYWNrIHVwIGEgcGFydGljdWxh ciBmaWxlIGFzIHBhcnQgb2YgYW4gaW5jcmVtZW50YWwgYmFja3VwPworICoKKyAqIElmIHRoZSBy ZXR1cm4gdmFsdWUgaXMgQkFDS19VUF9GSUxFX0ZVTExZLCBjYWxsZXIgc2hvdWxkIGJhY2sgdXAg dGhlIHdob2xlCisgKiBmaWxlIGp1c3QgYXMgaWYgdGhpcyB3ZXJlIG5vdCBhbiBpbmNyZW1lbnRh bCBiYWNrdXAuCisgKgorICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBCQUNLX1VQX0ZJTEVfSU5D UkVNRU5UQUxMWSwgY2FsbGVyIHNob3VsZCBpbmNsdWRlCisgKiBhbiBpbmNyZW1lbnRhbCBmaWxl IGluIHRoZSBiYWNrdXAgaW5zdGVhZCBvZiB0aGUgZW50aXJlIGZpbGUuIE9uIHJldHVybiwKKyAq ICpudW1fYmxvY2tzX3JlcXVpcmVkIHdpbGwgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgYmxvY2tz IHRoYXQgbmVlZCB0byBiZQorICogc2VudCwgYW5kIHRoZSBhY3R1YWwgYmxvY2sgbnVtYmVycyB3 aWxsIGhhdmUgYmVlbiBzdG9yZWQgaW4KKyAqIHJlbGF0aXZlX2Jsb2NrX251bWJlcnMsIHdoaWNo IHNob3VsZCBiZSBhbiBhcnJheSBvZiBhdCBsZWFzdCBSRUxTRUdfU0laRS4KKyAqIEluIGFkZGl0 aW9uLCAqdHJ1bmNhdGlvbl9ibG9ja19sZW5ndGggd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIHRo YXQgc2hvdWxkCisgKiBiZSBpbmNsdWRlZCBpbiB0aGUgaW5jcmVtZW50YWwgZmlsZS4KKyAqLwor RmlsZUJhY2t1cE1ldGhvZAorR2V0RmlsZUJhY2t1cE1ldGhvZChJbmNyZW1lbnRhbEJhY2t1cElu Zm8gKmliLCBjb25zdCBjaGFyICpwYXRoLAorCQkJCQlPaWQgZGJvaWQsIE9pZCBzcGNvaWQsCisJ CQkJCVJlbEZpbGVOdW1iZXIgcmVsZmlsZW51bWJlciwgRm9ya051bWJlciBmb3JrbnVtLAorCQkJ CQl1bnNpZ25lZCBzZWdubywgc2l6ZV90IHNpemUsCisJCQkJCXVuc2lnbmVkICpudW1fYmxvY2tz X3JlcXVpcmVkLAorCQkJCQlCbG9ja051bWJlciAqcmVsYXRpdmVfYmxvY2tfbnVtYmVycywKKwkJ CQkJdW5zaWduZWQgKnRydW5jYXRpb25fYmxvY2tfbGVuZ3RoKQoreworCUJsb2NrTnVtYmVyIGFi c29sdXRlX2Jsb2NrX251bWJlcnNbUkVMU0VHX1NJWkVdOworCUJsb2NrTnVtYmVyIGxpbWl0X2Js b2NrOworCUJsb2NrTnVtYmVyIHN0YXJ0X2Jsa25vOworCUJsb2NrTnVtYmVyIHN0b3BfYmxrbm87 CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3I7CisJQmxvY2tSZWZUYWJsZUVudHJ5ICpicnRlbnRy eTsKKwl1bnNpZ25lZAlpOworCXVuc2lnbmVkCW5ibG9ja3M7CisKKwkvKiBTaG91bGQgb25seSBi ZSBjYWxsZWQgYWZ0ZXIgUHJlcGFyZUZvckluY3JlbWVudGFsQmFja3VwLiAqLworCUFzc2VydChp Yi0+YnVmLmRhdGEgPT0gTlVMTCk7CisKKwkvKgorCSAqIGRib2lkIGNvdWxkIGJlIEludmFsaWRP aWQgaWYgc2hhcmVkIHJlbCwgYnV0IHNwY29pZCBhbmQgcmVsZmlsZW51bWJlcgorCSAqIHNob3Vs ZCBoYXZlIGxlZ2FsIHZhbHVlcy4KKwkgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChzcGNvaWQpKTsK KwlBc3NlcnQoUmVsRmlsZU51bWJlcklzVmFsaWQocmVsZmlsZW51bWJlcikpOworCisJLyoKKwkg KiBJZiB0aGUgZmlsZSBzaXplIGlzIHRvbyBsYXJnZSBvciBub3QgYSBtdWx0aXBsZSBvZiBCTENL U1osIHRoZW4KKwkgKiBzb21ldGhpbmcgd2VpcmQgaXMgaGFwcGVuaW5nLCBzbyBnaXZlIHVwIGFu ZCBzZW5kIHRoZSB3aG9sZSBmaWxlLgorCSAqLworCWlmICgoc2l6ZSAlIEJMQ0tTWikgIT0gMCB8 fCBzaXplIC8gQkxDS1NaID4gUkVMU0VHX1NJWkUpCisJCXJldHVybiBCQUNLX1VQX0ZJTEVfRlVM TFk7CisKKwkvKgorCSAqIFRoZSBmcmVlLXNwYWNlIG1hcCBmb3JrIGlzIG5vdCBwcm9wZXJseSBX QUwtbG9nZ2VkLCBzbyB3ZSBuZWVkIHRvCisJICogYmFja3VwIHRoZSBlbnRpcmUgZmlsZSBldmVy eSB0aW1lLgorCSAqLworCWlmIChmb3JrbnVtID09IEZTTV9GT1JLTlVNKQorCQlyZXR1cm4gQkFD S19VUF9GSUxFX0ZVTExZOworCisJLyoKKwkgKiBJZiB0aGlzIGZpbGUgd2FzIG5vdCBwYXJ0IG9m IHRoZSBwcmlvciBiYWNrdXAsIGJhY2sgaXQgdXAgZnVsbHkuCisJICoKKwkgKiBJZiB0aGlzIGZp bGUgd2FzIGNyZWF0ZWQgYWZ0ZXIgdGhlIHByaW9yIGJhY2t1cCBhbmQgYmVmb3JlIHRoZSBzdGFy dCBvZgorCSAqIHRoZSBjdXJyZW50IGJhY2t1cCwgdGhlbiB0aGUgV0FMIHN1bW1hcnkgaW5mb3Jt YXRpb24gd2lsbCB0ZWxsIHVzIHRvCisJICogYmFjayB1cCB0aGUgd2hvbGUgZmlsZS4gSG93ZXZl ciwgaWYgdGhpcyBmaWxlIHdhcyBjcmVhdGVkIGFmdGVyIHRoZQorCSAqIHN0YXJ0IG9mIHRoZSBj dXJyZW50IGJhY2t1cCwgdGhlbiB0aGUgV0FMIHN1bW1hcnkgd29uJ3Qga25vdyBhbnl0aGluZwor CSAqIGFib3V0IGl0LiBXaXRob3V0IHRoaXMgbG9naWMsIHdlIHdvdWxkIGVycm9uZW91c2x5IGNv bmNsdWRlIHRoYXQgaXQgd2FzCisJICogT0sgdG8gc2VuZCBpdCBpbmNyZW1lbnRhbGx5LgorCSAq CisJICogTm90ZSB0aGF0IHRoZSBmaWxlIGNvdWxkIGhhdmUgZXhpc3RlZCBhdCB0aGUgdGltZSBv ZiB0aGUgcHJpb3IgYmFja3VwLAorCSAqIGdvdHRlbiBkZWxldGVkLCBhbmQgdGhlbiBhIG5ldyBm aWxlIHdpdGggdGhlIHNhbWUgbmFtZSBjb3VsZCBoYXZlIGJlZW4KKwkgKiBjcmVhdGVkLiAgSW4g dGhhdCBjYXNlLCB0aGlzIGxvZ2ljIHdvbid0IHByZXZlbnQgdGhlIGZpbGUgZnJvbSBiZWluZwor CSAqIGJhY2tlZCB1cCBpbmNyZW1lbnRhbGx5LiBCdXQsIGlmIHRoZSBkZWxldGlvbiBoYXBwZW5l ZCBiZWZvcmUgdGhlIHN0YXJ0CisJICogb2YgdGhlIGN1cnJlbnQgYmFja3VwLCB0aGUgbGltaXQg YmxvY2sgd2lsbCBiZSAwLCBpbmR1Y2luZyBhIGZ1bGwKKwkgKiBiYWNrdXAuIElmIHRoZSBkZWxl dGlvbiBoYXBwZW5lZCBhZnRlciB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgYmFja3VwLAorCSAq IHJlY29uc3RydWN0aW9uIHdpbGwgZXJyb25lb3VzbHkgY29tYmluZSBibG9ja3MgZnJvbSB0aGUg Y3VycmVudAorCSAqIGxpZmVzcGFuIG9mIHRoZSBmaWxlIHdpdGggYmxvY2tzIGZyb20gdGhlIHBy ZXZpb3VzIGxpZmVzcGFuIC0tIGJ1dCBpbgorCSAqIHRoaXMgdHlwZSBvZiBjYXNlLCBXQUwgcmVw bGF5IHRvIHJlYWNoIGJhY2t1cCBjb25zaXN0ZW5jeSBzaG91bGQgcmVtb3ZlCisJICogYW5kIHJl Y3JlYXRlIHRoZSBmaWxlIGFueXdheSwgc28gdGhlIGluaXRpYWwgYm9ndXMgY29udGVudHMgc2hv dWxkIG5vdAorCSAqIG1hdHRlci4KKwkgKi8KKwlpZiAoYmFja3VwX2ZpbGVfbG9va3VwKGliLT5t YW5pZmVzdF9maWxlcywgcGF0aCkgPT0gTlVMTCkKKwl7CisJCWNoYXIJICAgKmlwYXRoOworCisJ CWlwYXRoID0gR2V0SW5jcmVtZW50YWxGaWxlUGF0aChkYm9pZCwgc3Bjb2lkLCByZWxmaWxlbnVt YmVyLAorCQkJCQkJCQkJICAgZm9ya251bSwgc2Vnbm8pOworCQlpZiAoYmFja3VwX2ZpbGVfbG9v a3VwKGliLT5tYW5pZmVzdF9maWxlcywgaXBhdGgpID09IE5VTEwpCisJCQlyZXR1cm4gQkFDS19V UF9GSUxFX0ZVTExZOworCX0KKworCS8qIExvb2sgdXAgdGhlIGJsb2NrIHJlZmVyZW5jZSB0YWJs ZSBlbnRyeS4gKi8KKwlybG9jYXRvci5zcGNPaWQgPSBzcGNvaWQ7CisJcmxvY2F0b3IuZGJPaWQg PSBkYm9pZDsKKwlybG9jYXRvci5yZWxOdW1iZXIgPSByZWxmaWxlbnVtYmVyOworCWJydGVudHJ5 ID0gQmxvY2tSZWZUYWJsZUdldEVudHJ5KGliLT5icnRhYiwgJnJsb2NhdG9yLCBmb3JrbnVtLAor CQkJCQkJCQkJICZsaW1pdF9ibG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIGVudHJ5 LCB0aGVuIHRoZXJlIGhhdmUgYmVlbiBubyBXQUwtbG9nZ2VkIGNoYW5nZXMgdG8gdGhlCisJICog cmVsYXRpb24gc2luY2UgdGhlIHByZWRlY2Vzc29yIGJhY2t1cCB3YXMgdGFrZW4sIHNvIHdlIGNh biBiYWNrIGl0IHVwCisJICogaW5jcmVtZW50YWxseSBhbmQgbmVlZCBub3QgaW5jbHVkZSBhbnkg bW9kaWZpZWQgYmxvY2tzLgorCSAqCisJICogSG93ZXZlciwgaWYgdGhlIGZpbGUgaXMgemVyby1s ZW5ndGgsIHdlIHNob3VsZCBkbyBhIGZ1bGwgYmFja3VwLAorCSAqIGJlY2F1c2UgYW4gaW5jcmVt ZW50YWwgZmlsZSBpcyBhbHdheXMgbW9yZSB0aGFuIHplcm8gbGVuZ3RoLCBhbmQgaXQncworCSAq IHNpbGx5IHRvIHRha2UgYW4gaW5jcmVtZW50YWwgYmFja3VwIHdoZW4gYSBmdWxsIGJhY2t1cCB3 b3VsZCBiZQorCSAqIHNtYWxsZXIuCisJICovCisJaWYgKGJydGVudHJ5ID09IE5VTEwpCisJewor CQlpZiAoc2l6ZSA9PSAwKQorCQkJcmV0dXJuIEJBQ0tfVVBfRklMRV9GVUxMWTsKKwkJKm51bV9i bG9ja3NfcmVxdWlyZWQgPSAwOworCQkqdHJ1bmNhdGlvbl9ibG9ja19sZW5ndGggPSBzaXplIC8g QkxDS1NaOworCQlyZXR1cm4gQkFDS19VUF9GSUxFX0lOQ1JFTUVOVEFMTFk7CisJfQorCisJLyoK KwkgKiBJZiB0aGUgbGltaXRfYmxvY2sgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwb2lu dCB3aGVyZSB0aGlzCisJICogc2VnbWVudCBzdGFydHMsIHNlbmQgdGhlIHdob2xlIGZpbGUuCisJ ICovCisJaWYgKGxpbWl0X2Jsb2NrIDw9IHNlZ25vICogUkVMU0VHX1NJWkUpCisJCXJldHVybiBC QUNLX1VQX0ZJTEVfRlVMTFk7CisKKwkvKgorCSAqIEdldCByZWxldmFudCBlbnRyaWVzIGZyb20g dGhlIGJsb2NrIHJlZmVyZW5jZSB0YWJsZSBlbnRyeS4KKwkgKgorCSAqIFdlIHNob3VsZG4ndCBv dmVyZmxvdyBjb21wdXRpbmcgdGhlIHN0YXJ0IG9yIHN0b3AgYmxvY2sgbnVtYmVycywgYnV0IGlm CisJICogaXQgbWFuYWdlcyB0byBoYXBwZW4gc29tZWhvdywgZGV0ZWN0IGl0IGFuZCB0aHJvdyBh biBlcnJvci4KKwkgKi8KKwlzdGFydF9ibGtubyA9IHNlZ25vICogUkVMU0VHX1NJWkU7CisJc3Rv cF9ibGtubyA9IHN0YXJ0X2Jsa25vICsgKHNpemUgLyBCTENLU1opOworCWlmIChzdGFydF9ibGtu byAvIFJFTFNFR19TSVpFICE9IHNlZ25vIHx8IHN0b3BfYmxrbm8gPCBzdGFydF9ibGtubykKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5URVJOQUxfRVJST1IpLAorCQkJ CWVycm1zZ19pbnRlcm5hbCgib3ZlcmZsb3cgY29tcHV0aW5nIGJsb2NrIG51bWJlciBib3VuZHMg Zm9yIHNlZ21lbnQgJXUgd2l0aCBzaXplICV6dSIsCisJCQkJCQkJCXNlZ25vLCBzaXplKSk7CisJ bmJsb2NrcyA9IEJsb2NrUmVmVGFibGVFbnRyeUdldEJsb2NrcyhicnRlbnRyeSwgc3RhcnRfYmxr bm8sIHN0b3BfYmxrbm8sCisJCQkJCQkJCQkJICBhYnNvbHV0ZV9ibG9ja19udW1iZXJzLCBSRUxT RUdfU0laRSk7CisJQXNzZXJ0KG5ibG9ja3MgPD0gUkVMU0VHX1NJWkUpOworCisJLyoKKwkgKiBJ ZiB3ZSdyZSBnb2luZyB0byBoYXZlIHRvIHNlbmQgbmVhcmx5IGFsbCBvZiB0aGUgYmxvY2tzLCB0 aGVuIGp1c3Qgc2VuZAorCSAqIHRoZSB3aG9sZSBmaWxlLCBiZWNhdXNlIHRoYXQgd29uJ3QgcmVx dWlyZSBtdWNoIGV4dHJhIHN0b3JhZ2Ugb3IKKwkgKiB0cmFuc2ZlciBhbmQgd2lsbCBzcGVlZCB1 cCBhbmQgc2ltcGxpZnkgYmFja3VwIHJlc3RvcmF0aW9uLiBJdCdzIG5vdAorCSAqIGNsZWFyIHdo YXQgdGhyZXNob2xkIGlzIG1vc3QgYXBwcm9wcmlhdGUgaGVyZSBhbmQgcGVyaGFwcyBpdCBvdWdo dCB0bworCSAqIGJlIGNvbmZpZ3VyYWJsZSwgYnV0IGZvciBub3cgd2UncmUganVzdCBnb2luZyB0 byBzYXkgdGhhdCBpZiB3ZSdkIG5lZWQKKwkgKiB0byBzZW5kIDkwJSBvZiB0aGUgYmxvY2tzIGFu eXdheSwgZ2l2ZSB1cCBhbmQgc2VuZCB0aGUgd2hvbGUgZmlsZS4KKwkgKgorCSAqIE5COiBJZiB5 b3UgY2hhbmdlIHRoZSB0aHJlc2hvbGQgaGVyZSwgYXQgbGVhc3QgbWFrZSBzdXJlIHRvIGJhY2sg dXAgdGhlCisJICogZmlsZSBmdWxseSB3aGVuIGV2ZXJ5IHNpbmdsZSBibG9jayBtdXN0IGJlIHNl bnQsIGJlY2F1c2UgdGhlcmUncworCSAqIG5vdGhpbmcgZ29vZCBhYm91dCBzZW5kaW5nIGFuIGlu Y3JlbWVudGFsIGZpbGUgaW4gdGhhdCBjYXNlLgorCSAqLworCWlmIChuYmxvY2tzICogQkxDS1Na ID4gc2l6ZSAqIDAuOSkKKwkJcmV0dXJuIEJBQ0tfVVBfRklMRV9GVUxMWTsKKworCS8qCisJICog TG9va3MgbGlrZSB3ZSBjYW4gc2VuZCBhbiBpbmNyZW1lbnRhbCBmaWxlLCBzbyBzb3J0IHRoZSBh YnNvbHV0ZSB0aGUKKwkgKiBibG9jayBudW1iZXJzIGFuZCB0aGVuIHRyYW5zcG9zZSBhYnNvbHV0 ZSBibG9jayBudW1iZXJzIHRvIHJlbGF0aXZlCisJICogYmxvY2sgbnVtYmVycy4KKwkgKgorCSAq IE5COiBJZiB0aGUgYmxvY2sgcmVmZXJlbmNlIHRhYmxlIHdhcyB1c2luZyB0aGUgYml0bWFwIHJl cHJlc2VudGF0aW9uCisJICogZm9yIGEgZ2l2ZW4gY2h1bmssIHRoZSBibG9jayBudW1iZXJzIGlu IHRoYXQgY2h1bmsgd2lsbCBhbHJlYWR5IGJlCisJICogc29ydGVkLCBidXQgd2hlbiB0aGUgYXJy YXktb2Ytb2Zmc2V0cyByZXByZXNlbnRhdGlvbiBpcyB1c2VkLCB3ZSBjYW4KKwkgKiByZWNlaXZl IGJsb2NrIG51bWJlcnMgaGVyZSBvdXQgb2Ygb3JkZXIuCisJICovCisJcXNvcnQoYWJzb2x1dGVf YmxvY2tfbnVtYmVycywgbmJsb2Nrcywgc2l6ZW9mKEJsb2NrTnVtYmVyKSwKKwkJICBjb21wYXJl X2Jsb2NrX251bWJlcnMpOworCWZvciAoaSA9IDA7IGkgPCBuYmxvY2tzOyArK2kpCisJCXJlbGF0 aXZlX2Jsb2NrX251bWJlcnNbaV0gPSBhYnNvbHV0ZV9ibG9ja19udW1iZXJzW2ldIC0gc3RhcnRf Ymxrbm87CisJKm51bV9ibG9ja3NfcmVxdWlyZWQgPSBuYmxvY2tzOworCisJLyoKKwkgKiBUaGUg dHJ1bmNhdGlvbiBibG9jayBsZW5ndGggaXMgdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHRoZSByZWNv bnN0cnVjdGVkCisJICogZmlsZS4gQW55IGJsb2NrIG51bWJlcnMgYmVsb3cgdGhpcyB0aHJlc2hv bGQgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4KKwkgKiB0aGUgYmFja3VwIG5lZWQgdG8gYmUgZmV0 Y2hlZCBmcm9tIHRoZSBwcmlvciBiYWNrdXAuIEF0IG9yIGFib3ZlIHRoaXMKKwkgKiB0aHJlc2hv bGQsIGJsb2NrcyBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0IGlmIHRoZXkg YXJlCisJICogcHJlc2VudCBpbiB0aGUgYmFja3VwLiAoVGhpcyBtYXkgcmVxdWlyZSBpbnNlcnRp bmcgemVybyBibG9ja3MgaWYgdGhlCisJICogYmxvY2tzIGluY2x1ZGVkIGluIHRoZSBiYWNrdXAg YXJlIG5vbi1jb25zZWN1dGl2ZS4pCisJICovCisJKnRydW5jYXRpb25fYmxvY2tfbGVuZ3RoID0g c2l6ZSAvIEJMQ0tTWjsKKwlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGxpbWl0X2Jsb2NrKSkKKwl7 CisJCXVuc2lnbmVkCXJlbGF0aXZlX2xpbWl0ID0gbGltaXRfYmxvY2sgLSBzZWdubyAqIFJFTFNF R19TSVpFOworCisJCWlmICgqdHJ1bmNhdGlvbl9ibG9ja19sZW5ndGggPCByZWxhdGl2ZV9saW1p dCkKKwkJCSp0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCA9IHJlbGF0aXZlX2xpbWl0OworCX0KKwor CS8qIFNlbmQgaXQgaW5jcmVtZW50YWxseS4gKi8KKwlyZXR1cm4gQkFDS19VUF9GSUxFX0lOQ1JF TUVOVEFMTFk7Cit9CisKKy8qCisgKiBDb21wdXRlIHRoZSBzaXplIGZvciBhbiBpbmNyZW1lbnRh bCBmaWxlIGNvbnRhaW5pbmcgYSBnaXZlbiBudW1iZXIgb2YgYmxvY2tzLgorICovCitleHRlcm4g c2l6ZV90CitHZXRJbmNyZW1lbnRhbEZpbGVTaXplKHVuc2lnbmVkIG51bV9ibG9ja3NfcmVxdWly ZWQpCit7CisJc2l6ZV90CQlyZXN1bHQ7CisKKwkvKiBNYWtlIHN1cmUgd2UncmUgbm90IGdvaW5n IHRvIG92ZXJmbG93LiAqLworCUFzc2VydChudW1fYmxvY2tzX3JlcXVpcmVkIDw9IFJFTFNFR19T SVpFKTsKKworCS8qCisJICogVGhyZWUgZm91ciBieXRlIHF1YW50aXRpZXMgKG1hZ2ljIG51bWJl ciwgdHJ1bmNhdGlvbiBibG9jayBsZW5ndGgsCisJICogYmxvY2sgY291bnQpIGZvbGxvd2VkIGJ5 IGJsb2NrIG51bWJlcnMgZm9sbG93ZWQgYnkgYmxvY2sgY29udGVudHMuCisJICovCisJcmVzdWx0 ID0gMyAqIHNpemVvZih1aW50MzIpOworCXJlc3VsdCArPSAoQkxDS1NaICsgc2l6ZW9mKEJsb2Nr TnVtYmVyKSkgKiBudW1fYmxvY2tzX3JlcXVpcmVkOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwor LyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgZmlsZW1hcCBoYXNoIHRhYmxlLgorICovCitzdGF0 aWMgdWludDMyCitoYXNoX3N0cmluZ19wb2ludGVyKGNvbnN0IGNoYXIgKnMpCit7CisJdW5zaWdu ZWQgY2hhciAqc3MgPSAodW5zaWduZWQgY2hhciAqKSBzOworCisJcmV0dXJuIGhhc2hfYnl0ZXMo c3MsIHN0cmxlbihzKSk7Cit9CisKKy8qCisgKiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgZm9y IGVhY2ggZmlsZSBtZW50aW9uZWQgaW4gdGhlIGJhY2t1cCBtYW5pZmVzdC4KKyAqCisgKiBXZSBz dG9yZSB0aGUgcGF0aCB0byBlYWNoIGZpbGUgYW5kIHRoZSBzaXplIG9mIGVhY2ggZmlsZSBmb3Ig c2FuaXR5LWNoZWNraW5nCisgKiBwdXJwb3Nlcy4gRm9yIGZ1cnRoZXIgZGV0YWlscywgc2VlIGNv bW1lbnRzIGZvciBJbmNyZW1lbnRhbEJhY2t1cEluZm8uCisgKi8KK3N0YXRpYyB2b2lkCittYW5p ZmVzdF9wcm9jZXNzX2ZpbGUoSnNvbk1hbmlmZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0LAorCQkJ CQkgIGNoYXIgKnBhdGhuYW1lLCBzaXplX3Qgc2l6ZSwKKwkJCQkJICBwZ19jaGVja3N1bV90eXBl IGNoZWNrc3VtX3R5cGUsCisJCQkJCSAgaW50IGNoZWNrc3VtX2xlbmd0aCwKKwkJCQkJICB1aW50 OCAqY2hlY2tzdW1fcGF5bG9hZCkKK3sKKwlJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliID0gY29u dGV4dC0+cHJpdmF0ZV9kYXRhOworCWJhY2t1cF9maWxlX2VudHJ5ICplbnRyeTsKKwlib29sCQlm b3VuZDsKKworCWVudHJ5ID0gYmFja3VwX2ZpbGVfaW5zZXJ0KGliLT5tYW5pZmVzdF9maWxlcywg cGF0aG5hbWUsICZmb3VuZCk7CisJaWYgKCFmb3VuZCkKKwl7CisJCWVudHJ5LT5wYXRoID0gTWVt b3J5Q29udGV4dFN0cmR1cChpYi0+bWFuaWZlc3RfZmlsZXMtPmN0eCwKKwkJCQkJCQkJCQkgIHBh dGhuYW1lKTsKKwkJZW50cnktPnNpemUgPSBzaXplOworCX0KK30KKworLyoKKyAqIFRoaXMgY2Fs bGJhY2sgaXMgaW52b2tlZCBmb3IgZWFjaCBXQUwgcmFuZ2UgbWVudGlvbmVkIGluIHRoZSBiYWNr dXAKKyAqIG1hbmlmZXN0LgorICoKKyAqIFdlJ3JlIGp1c3QgaW50ZXJlc3RlZCBpbiBsZWFybmlu ZyB0aGUgb2xkZXN0IExTTiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgVExJCisgKiB0aGF0IGFwcGVh ciBpbiBhbnkgV0FMIHJhbmdlLgorICovCitzdGF0aWMgdm9pZAorbWFuaWZlc3RfcHJvY2Vzc193 YWxfcmFuZ2UoSnNvbk1hbmlmZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0LAorCQkJCQkJICAgVGlt ZUxpbmVJRCB0bGksIFhMb2dSZWNQdHIgc3RhcnRfbHNuLAorCQkJCQkJICAgWExvZ1JlY1B0ciBl bmRfbHNuKQoreworCUluY3JlbWVudGFsQmFja3VwSW5mbyAqaWIgPSBjb250ZXh0LT5wcml2YXRl X2RhdGE7CisJYmFja3VwX3dhbF9yYW5nZSAqcmFuZ2UgPSBwYWxsb2Moc2l6ZW9mKGJhY2t1cF93 YWxfcmFuZ2UpKTsKKworCXJhbmdlLT50bGkgPSB0bGk7CisJcmFuZ2UtPnN0YXJ0X2xzbiA9IHN0 YXJ0X2xzbjsKKwlyYW5nZS0+ZW5kX2xzbiA9IGVuZF9sc247CisJaWItPm1hbmlmZXN0X3dhbF9y YW5nZXMgPSBsYXBwZW5kKGliLT5tYW5pZmVzdF93YWxfcmFuZ2VzLCByYW5nZSk7Cit9CisKKy8q CisgKiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgaWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIHBh cnNpbmcgdGhlIGJhY2t1cAorICogbWFuaWZlc3QuCisgKi8KK3N0YXRpYyB2b2lkCittYW5pZmVz dF9yZXBvcnRfZXJyb3IoSnNvbk1hbmlmZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0LCBjb25zdCBj aGFyICpmbXQsLi4uKQoreworCVN0cmluZ0luZm9EYXRhIGVycmJ1ZjsKKworCWluaXRTdHJpbmdJ bmZvKCZlcnJidWYpOworCisJZm9yICg7OykKKwl7CisJCXZhX2xpc3QJCWFwOworCQlpbnQJCQlu ZWVkZWQ7CisKKwkJdmFfc3RhcnQoYXAsIGZtdCk7CisJCW5lZWRlZCA9IGFwcGVuZFN0cmluZ0lu Zm9WQSgmZXJyYnVmLCBmbXQsIGFwKTsKKwkJdmFfZW5kKGFwKTsKKwkJaWYgKG5lZWRlZCA9PSAw KQorCQkJYnJlYWs7CisJCWVubGFyZ2VTdHJpbmdJbmZvKCZlcnJidWYsIG5lZWRlZCk7CisJfQor CisJZXJlcG9ydChFUlJPUiwKKwkJCWVycm1zZ19pbnRlcm5hbCgiJXMiLCBlcnJidWYuZGF0YSkp OworfQorCisvKgorICogUXVpY2tzb3J0IGNvbXBhcmF0b3IgZm9yIGJsb2NrIG51bWJlcnMuCisg Ki8KK3N0YXRpYyBpbnQKK2NvbXBhcmVfYmxvY2tfbnVtYmVycyhjb25zdCB2b2lkICphLCBjb25z dCB2b2lkICpiKQoreworCUJsb2NrTnVtYmVyIGFhID0gKihCbG9ja051bWJlciAqKSBhOworCUJs b2NrTnVtYmVyIGJiID0gKihCbG9ja051bWJlciAqKSBiOworCisJaWYgKGFhID4gYmIpCisJCXJl dHVybiAxOworCWVsc2UgaWYgKGFhID09IGJiKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVy biAtMTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9tZXNvbi5idWlsZCBiL3Ny Yy9iYWNrZW5kL2JhY2t1cC9tZXNvbi5idWlsZAppbmRleCA1ZDRlYmUzZWJlLi4yYTZhMmRjN2Mw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9iYWNrdXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jh Y2tlbmQvYmFja3VwL21lc29uLmJ1aWxkCkBAIC01LDYgKzUsNyBAQCBiYWNrZW5kX3NvdXJjZXMg Kz0gZmlsZXMoCiAgICdiYXNlYmFja3VwLmMnLAogICAnYmFzZWJhY2t1cF9jb3B5LmMnLAogICAn YmFzZWJhY2t1cF9nemlwLmMnLAorICAnYmFzZWJhY2t1cF9pbmNyZW1lbnRhbC5jJywKICAgJ2Jh c2ViYWNrdXBfbHo0LmMnLAogICAnYmFzZWJhY2t1cF9wcm9ncmVzcy5jJywKICAgJ2Jhc2ViYWNr dXBfc2VydmVyLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9n cmFtLnkgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9yZXBsX2dyYW0ueQppbmRleCAwYzg3NGUz M2NmLi5hNWQxMThlZDY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9yZXBs X2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9yZXBsX2dyYW0ueQpAQCAtNzYs MTEgKzc2LDEyIEBAIE5vZGUgKnJlcGxpY2F0aW9uX3BhcnNlX3Jlc3VsdDsKICV0b2tlbiBLX0VY UE9SVF9TTkFQU0hPVAogJXRva2VuIEtfTk9FWFBPUlRfU05BUFNIT1QKICV0b2tlbiBLX1VTRV9T TkFQU0hPVAorJXRva2VuIEtfVVBMT0FEX01BTklGRVNUCiAKICV0eXBlIDxub2RlPgljb21tYW5k CiAldHlwZSA8bm9kZT4JYmFzZV9iYWNrdXAgc3RhcnRfcmVwbGljYXRpb24gc3RhcnRfbG9naWNh bF9yZXBsaWNhdGlvbgogCQkJCWNyZWF0ZV9yZXBsaWNhdGlvbl9zbG90IGRyb3BfcmVwbGljYXRp b25fc2xvdCBpZGVudGlmeV9zeXN0ZW0KLQkJCQlyZWFkX3JlcGxpY2F0aW9uX3Nsb3QgdGltZWxp bmVfaGlzdG9yeSBzaG93CisJCQkJcmVhZF9yZXBsaWNhdGlvbl9zbG90IHRpbWVsaW5lX2hpc3Rv cnkgc2hvdyB1cGxvYWRfbWFuaWZlc3QKICV0eXBlIDxsaXN0PglnZW5lcmljX29wdGlvbl9saXN0 CiAldHlwZSA8ZGVmZWx0PglnZW5lcmljX29wdGlvbgogJXR5cGUgPHVpbnR2YWw+CW9wdF90aW1l bGluZQpAQCAtMTE0LDYgKzExNSw3IEBAIGNvbW1hbmQ6CiAJCQl8IHJlYWRfcmVwbGljYXRpb25f c2xvdAogCQkJfCB0aW1lbGluZV9oaXN0b3J5CiAJCQl8IHNob3cKKwkJCXwgdXBsb2FkX21hbmlm ZXN0CiAJCQk7CiAKIC8qCkBAIC0zMDcsNiArMzA5LDE1IEBAIHRpbWVsaW5lX2hpc3Rvcnk6CiAJ CQkJfQogCQkJOwogCisvKiBVUExPQURfTUFOSUZFU1QgZG9lc24ndCBjdXJyZW50bHkgYWNjZXB0 IGFueSBhcmd1bWVudHMgKi8KK3VwbG9hZF9tYW5pZmVzdDoKKwkJCUtfVVBMT0FEX01BTklGRVNU CisJCQkJeworCQkJCQlVcGxvYWRNYW5pZmVzdENtZCAqY21kID0gbWFrZU5vZGUoVXBsb2FkTWFu aWZlc3RDbWQpOworCisJCQkJCSQkID0gKE5vZGUgKikgY21kOworCQkJCX0KKwogb3B0X3BoeXNp Y2FsOgogCQkJS19QSFlTSUNBTAogCQkJfCAvKiBFTVBUWSAqLwpAQCAtNDExLDYgKzQyMiw3IEBA IGlkZW50X29yX2tleXdvcmQ6CiAJCQl8IEtfRVhQT1JUX1NOQVBTSE9UCQkJCXsgJCQgPSAiZXhw b3J0X3NuYXBzaG90IjsgfQogCQkJfCBLX05PRVhQT1JUX1NOQVBTSE9UCQkJeyAkJCA9ICJub2V4 cG9ydF9zbmFwc2hvdCI7IH0KIAkJCXwgS19VU0VfU05BUFNIT1QJCQkJeyAkJCA9ICJ1c2Vfc25h cHNob3QiOyB9CisJCQl8IEtfVVBMT0FEX01BTklGRVNUCQkJCXsgJCQgPSAidXBsb2FkX21hbmlm ZXN0IjsgfQogCQk7CiAKICUlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9y ZXBsX3NjYW5uZXIubCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfc2Nhbm5lci5sCmlu ZGV4IDFjYzdmYjg1OGMuLjQ4MDVkYTA4ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3JlcGxfc2Nhbm5lci5sCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxf c2Nhbm5lci5sCkBAIC0xMzYsNiArMTM2LDcgQEAgRVhQT1JUX1NOQVBTSE9UCQl7IHJldHVybiBL X0VYUE9SVF9TTkFQU0hPVDsgfQogTk9FWFBPUlRfU05BUFNIT1QJeyByZXR1cm4gS19OT0VYUE9S VF9TTkFQU0hPVDsgfQogVVNFX1NOQVBTSE9UCQl7IHJldHVybiBLX1VTRV9TTkFQU0hPVDsgfQog V0FJVAkJCQl7IHJldHVybiBLX1dBSVQ7IH0KK1VQTE9BRF9NQU5JRkVTVAkJeyByZXR1cm4gS19V UExPQURfTUFOSUZFU1Q7IH0KIAoge3NwYWNlfSsJCXsgLyogZG8gbm90aGluZyAqLyB9CiAKQEAg LTMwMyw2ICszMDQsNyBAQCByZXBsaWNhdGlvbl9zY2FubmVyX2lzX3JlcGxpY2F0aW9uX2NvbW1h bmQodm9pZCkKIAkJY2FzZSBLX0RST1BfUkVQTElDQVRJT05fU0xPVDoKIAkJY2FzZSBLX1JFQURf UkVQTElDQVRJT05fU0xPVDoKIAkJY2FzZSBLX1RJTUVMSU5FX0hJU1RPUlk6CisJCWNhc2UgS19V UExPQURfTUFOSUZFU1Q6CiAJCWNhc2UgS19TSE9XOgogCQkJLyogWWVzOyBwdXNoIGJhY2sgdGhl IGZpcnN0IHRva2VuIHNvIHdlIGNhbiBwYXJzZSBsYXRlci4gKi8KIAkJCXJlcGxfcHVzaGVkX2Jh Y2tfdG9rZW4gPSBmaXJzdF90b2tlbjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3dhbHNlbmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5k ZXggM2JjOWM4MjM4OS4uZGJjZGEzMjU1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVy LmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCiAj aW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUgImJhY2t1cC9iYXNlYmFja3Vw LmgiCisjaW5jbHVkZSAiYmFja3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2F1dGhpZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2lu Y2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHMuaCIKQEAgLTEzNyw2ICsxMzgsMTcgQEAgYm9vbAkJ d2FrZV93YWxfc2VuZGVycyA9IGZhbHNlOwogICovCiBzdGF0aWMgWExvZ1JlYWRlclN0YXRlICp4 bG9ncmVhZGVyID0gTlVMTDsKIAorLyoKKyAqIElmIHRoZSBVUExPQURfTUFOSUZFU1QgY29tbWFu ZCBpcyB1c2VkIHRvIHByb3ZpZGUgYSBiYWNrdXAgbWFuaWZlc3QgaW4KKyAqIHByZXBhcmF0aW9u IGZvciBhbiBpbmNyZW1lbnRhbCBiYWNrdXAsIHVwbG9hZGVkX21hbmlmZXN0IHdpbGwgYmUgcG9p bnQKKyAqIHRvIGFuIG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGl0cyBjb250 ZXh0cywgYW5kCisgKiB1cGxvYWRlZF9tYW5pZmVzdF9tY3h0IHdpbGwgcG9pbnQgdG8gdGhlIG1l bW9yeSBjb250ZXh0IHRoYXQgY29udGFpbnMKKyAqIHRoYXQgb2JqZWN0IGFuZCBhbGwgb2YgaXRz IHN1Ym9yZGluYXRlIGRhdGEuIE90aGVyd2lzZSwgYm90aCB2YWx1ZXMgd2lsbAorICogYmUgTlVM TC4KKyAqLworc3RhdGljIEluY3JlbWVudGFsQmFja3VwSW5mbyAqdXBsb2FkZWRfbWFuaWZlc3Qg PSBOVUxMOworc3RhdGljIE1lbW9yeUNvbnRleHQgdXBsb2FkZWRfbWFuaWZlc3RfbWN4dCA9IE5V TEw7CisKIC8qCiAgKiBUaGVzZSB2YXJpYWJsZXMga2VlcCB0cmFjayBvZiB0aGUgc3RhdGUgb2Yg dGhlIHRpbWVsaW5lIHdlJ3JlIGN1cnJlbnRseQogICogc2VuZGluZy4gc2VuZFRpbWVMaW5lIGlk ZW50aWZpZXMgdGhlIHRpbWVsaW5lLiBJZiBzZW5kVGltZUxpbmVJc0hpc3RvcmljLApAQCAtMjMz LDYgKzI0NSw5IEBAIHN0YXRpYyB2b2lkIFhMb2dTZW5kTG9naWNhbCh2b2lkKTsKIHN0YXRpYyB2 b2lkIFdhbFNuZERvbmUoV2FsU25kU2VuZERhdGFDYWxsYmFjayBzZW5kX2RhdGEpOwogc3RhdGlj IFhMb2dSZWNQdHIgR2V0U3RhbmRieUZsdXNoUmVjUHRyKFRpbWVMaW5lSUQgKnRsaSk7CiBzdGF0 aWMgdm9pZCBJZGVudGlmeVN5c3RlbSh2b2lkKTsKK3N0YXRpYyB2b2lkIFVwbG9hZE1hbmlmZXN0 KHZvaWQpOworc3RhdGljIGJvb2wgSGFuZGxlVXBsb2FkTWFuaWZlc3RQYWNrZXQoU3RyaW5nSW5m byBidWYsIG9mZl90ICpvZmZzZXQsCisJCQkJCQkJCQkgICBJbmNyZW1lbnRhbEJhY2t1cEluZm8g KmliKTsKIHN0YXRpYyB2b2lkIFJlYWRSZXBsaWNhdGlvblNsb3QoUmVhZFJlcGxpY2F0aW9uU2xv dENtZCAqY21kKTsKIHN0YXRpYyB2b2lkIENyZWF0ZVJlcGxpY2F0aW9uU2xvdChDcmVhdGVSZXBs aWNhdGlvblNsb3RDbWQgKmNtZCk7CiBzdGF0aWMgdm9pZCBEcm9wUmVwbGljYXRpb25TbG90KERy b3BSZXBsaWNhdGlvblNsb3RDbWQgKmNtZCk7CkBAIC02NjAsNiArNjc1LDE0MyBAQCBTZW5kVGlt ZUxpbmVIaXN0b3J5KFRpbWVMaW5lSGlzdG9yeUNtZCAqY21kKQogCXBxX2VuZG1lc3NhZ2UoJmJ1 Zik7CiB9CiAKKy8qCisgKiBIYW5kbGUgVVBMT0FEX01BTklGRVNUIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyB2b2lkCitVcGxvYWRNYW5pZmVzdCh2b2lkKQoreworCU1lbW9yeUNvbnRleHQgbWN4dDsK KwlJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliOworCW9mZl90CQlvZmZzZXQgPSAwOworCVN0cmlu Z0luZm9EYXRhIGJ1ZjsKKworCS8qCisJICogcGFyc2luZyB0aGUgbWFuaWZlc3Qgd2lsbCB1c2Ug dGhlIGNyeXB0b2hhc2ggc3R1ZmYsIHdoaWNoIHJlcXVpcmVzIGEKKwkgKiByZXNvdXJjZSBvd25l cgorCSAqLworCUFzc2VydChDdXJyZW50UmVzb3VyY2VPd25lciA9PSBOVUxMKTsKKwlDdXJyZW50 UmVzb3VyY2VPd25lciA9IFJlc291cmNlT3duZXJDcmVhdGUoTlVMTCwgImJhc2UgYmFja3VwIik7 CisKKwkvKiBQcmVwYXJlIHRvIHJlYWQgbWFuaWZlc3QgZGF0YSBpbnRvIGEgdGVtcG9yYXJ5IGNv bnRleHQuICovCisJbWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29u dGV4dCwKKwkJCQkJCQkJICJpbmNyZW1lbnRhbCBiYWNrdXAgaW5mb3JtYXRpb24iLAorCQkJCQkJ CQkgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJaWIgPSBDcmVhdGVJbmNyZW1lbnRhbEJhY2t1 cEluZm8obWN4dCk7CisKKwkvKiBTZW5kIGEgQ29weUluUmVzcG9uc2UgbWVzc2FnZSAqLworCXBx X2JlZ2lubWVzc2FnZSgmYnVmLCAnRycpOworCXBxX3NlbmRieXRlKCZidWYsIDApOworCXBxX3Nl bmRpbnQxNigmYnVmLCAwKTsKKwlwcV9lbmRtZXNzYWdlX3JldXNlKCZidWYpOworCXBxX2ZsdXNo KCk7CisKKwkvKiBSZWNpZXZlIHBhY2tldHMgZnJvbSBjbGllbnQgdW50aWwgZG9uZS4gKi8KKwl3 aGlsZSAoSGFuZGxlVXBsb2FkTWFuaWZlc3RQYWNrZXQoJmJ1ZiwgJm9mZnNldCwgaWIpKQorCQk7 CisKKwkvKiBGaW5pc2ggdXAgbWFuaWZlc3QgcHJvY2Vzc2luZy4gKi8KKwlGaW5hbGl6ZUluY3Jl bWVudGFsTWFuaWZlc3QoaWIpOworCisJLyoKKwkgKiBEaXNjYXJkIGFueSBvbGQgbWFuaWZlc3Qg aW5mb3JtYXRpb24gYW5kIGFycmFuZ2UgdG8gcHJlc2VydmUgdGhlIG5ldworCSAqIGluZm9ybWF0 aW9uIHdlIGp1c3QgZ290LgorCSAqCisJICogV2UgYXNzdW1lIHRoYXQgTWVtb3J5Q29udGV4dERl bGV0ZSBhbmQgTWVtb3J5Q29udGV4dFNldFBhcmVudCB3b24ndAorCSAqIGZhaWwsIGFuZCB0aHVz IHdlIHNob3VsZG4ndCBlbmQgdXAgYmFpbGluZyBvdXQgb2YgaGVyZSBpbiBzdWNoIGEgd2F5IGFz CisJICogdG8gbGVhdmUgZGFuZ2xpbmcgcG9pbnRycy4KKwkgKi8KKwlpZiAodXBsb2FkZWRfbWFu aWZlc3RfbWN4dCAhPSBOVUxMKQorCQlNZW1vcnlDb250ZXh0RGVsZXRlKHVwbG9hZGVkX21hbmlm ZXN0X21jeHQpOworCU1lbW9yeUNvbnRleHRTZXRQYXJlbnQobWN4dCwgQ2FjaGVNZW1vcnlDb250 ZXh0KTsKKwl1cGxvYWRlZF9tYW5pZmVzdCA9IGliOworCXVwbG9hZGVkX21hbmlmZXN0X21jeHQg PSBtY3h0OworCisJLyogY2xlYW4gdXAgdGhlIHJlc291cmNlIG93bmVyIHdlIGNyZWF0ZWQgKi8K KwlXYWxTbmRSZXNvdXJjZUNsZWFudXAodHJ1ZSk7Cit9CisKKy8qCisgKiBQcm9jZXNzIG9uZSBw YWNrZXQgcmVjZWl2ZWQgZHVyaW5nIHRoZSBoYW5kbGluZyBvZiBhbiBVUExPQURfTUFOSUZFU1QK KyAqIG9wZXJhdGlvbi4KKyAqCisgKiAnYnVmJyBpcyBzY3JhdGNoIHNwYWNlLiBUaGlzIGZ1bmN0 aW9uIGV4cGVjdHMgaXQgdG8gYmUgaW5pdGlhbGl6ZWQsIGRvZXNuJ3QKKyAqIGNhcmUgd2hhdCB0 aGUgY3VycmVudCBjb250ZW50cyBhcmUsIGFuZCBtYXkgb3ZlcnJpZGUgdGhlbSB3aXRoIGNvbXBs ZXRlbHkKKyAqIG5ldyBjb250ZW50cy4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUg aWYgdGhlIGNhbGxlciBzaG91bGQgY29udGludWUgcHJvY2Vzc2luZworICogYWRkaXRpb25hbCBw YWNrZXRzIGFuZCBmYWxzZSBpZiB0aGUgVVBMT0FEX01BTklGRVNUIG9wZXJhdGlvbiBpcyBjb21w bGV0ZS4KKyAqLworc3RhdGljIGJvb2wKK0hhbmRsZVVwbG9hZE1hbmlmZXN0UGFja2V0KFN0cmlu Z0luZm8gYnVmLCBvZmZfdCAqb2Zmc2V0LAorCQkJCQkJICAgSW5jcmVtZW50YWxCYWNrdXBJbmZv ICppYikKK3sKKwlpbnQJCQltdHlwZTsKKwlpbnQJCQltYXhtc2dsZW47CisKKwlIT0xEX0NBTkNF TF9JTlRFUlJVUFRTKCk7CisKKwlwcV9zdGFydG1zZ3JlYWQoKTsKKwltdHlwZSA9IHBxX2dldGJ5 dGUoKTsKKwlpZiAobXR5cGUgPT0gRU9GKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwKKwkJCQkgZXJybXNnKCJ1bmV4cGVjdGVkIEVP RiBvbiBjbGllbnQgY29ubmVjdGlvbiB3aXRoIGFuIG9wZW4gdHJhbnNhY3Rpb24iKSkpOworCisJ c3dpdGNoIChtdHlwZSkKKwl7CisJCWNhc2UgJ2QnOgkJCQkvKiBDb3B5RGF0YSAqLworCQkJbWF4 bXNnbGVuID0gUFFfTEFSR0VfTUVTU0FHRV9MSU1JVDsKKwkJCWJyZWFrOworCQljYXNlICdjJzoJ CQkJLyogQ29weURvbmUgKi8KKwkJY2FzZSAnZic6CQkJCS8qIENvcHlGYWlsICovCisJCWNhc2Ug J0gnOgkJCQkvKiBGbHVzaCAqLworCQljYXNlICdTJzoJCQkJLyogU3luYyAqLworCQkJbWF4bXNn bGVuID0gUFFfU01BTExfTUVTU0FHRV9MSU1JVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04p LAorCQkJCQkgZXJybXNnKCJ1bmV4cGVjdGVkIG1lc3NhZ2UgdHlwZSAweCUwMlggZHVyaW5nIENP UFkgZnJvbSBzdGRpbiIsCisJCQkJCQkJbXR5cGUpKSk7CisJCQltYXhtc2dsZW4gPSAwOwkJLyog a2VlcCBjb21waWxlciBxdWlldCAqLworCQkJYnJlYWs7CisJfQorCisJLyogTm93IGNvbGxlY3Qg dGhlIG1lc3NhZ2UgYm9keSAqLworCWlmIChwcV9nZXRtZXNzYWdlKGJ1ZiwgbWF4bXNnbGVuKSkK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVS RSksCisJCQkJIGVycm1zZygidW5leHBlY3RlZCBFT0Ygb24gY2xpZW50IGNvbm5lY3Rpb24gd2l0 aCBhbiBvcGVuIHRyYW5zYWN0aW9uIikpKTsKKwlSRVNVTUVfQ0FOQ0VMX0lOVEVSUlVQVFMoKTsK KworCS8qIFByb2Nlc3MgdGhlIG1lc3NhZ2UgKi8KKwlzd2l0Y2ggKG10eXBlKQorCXsKKwkJY2Fz ZSAnZCc6CQkJCS8qIENvcHlEYXRhICovCisJCQlBcHBlbmRJbmNyZW1lbnRhbE1hbmlmZXN0RGF0 YShpYiwgYnVmLT5kYXRhLCBidWYtPmxlbik7CisJCQlyZXR1cm4gdHJ1ZTsKKworCQljYXNlICdj JzoJCQkJLyogQ29weURvbmUgKi8KKwkJCXJldHVybiBmYWxzZTsKKworCQljYXNlICdIJzoJCQkJ LyogU3luYyAqLworCQljYXNlICdTJzoJCQkJLyogRmx1c2ggKi8KKwkJCS8qIElnbm9yZSB0aGVz ZSB3aGlsZSBpbiBDb3B5T3V0IG1vZGUgYXMgd2UgZG8gZWxzZXdoZXJlLiAqLworCQkJcmV0dXJu IHRydWU7CisKKwkJY2FzZSAnZic6CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShF UlJDT0RFX1FVRVJZX0NBTkNFTEVEKSwKKwkJCQkJIGVycm1zZygiQ09QWSBmcm9tIHN0ZGluIGZh aWxlZDogJXMiLAorCQkJCQkJCXBxX2dldG1zZ3N0cmluZyhidWYpKSkpOworCX0KKworCS8qIE5v dCByZWFjaGVkLiAqLworCUFzc2VydChmYWxzZSk7CisJcmV0dXJuIGZhbHNlOworfQorCiAvKgog ICogSGFuZGxlIFNUQVJUX1JFUExJQ0FUSU9OIGNvbW1hbmQuCiAgKgpAQCAtMTgwMSw3ICsxOTUz LDcgQEAgZXhlY19yZXBsaWNhdGlvbl9jb21tYW5kKGNvbnN0IGNoYXIgKmNtZF9zdHJpbmcpCiAJ CQljbWR0YWcgPSAiQkFTRV9CQUNLVVAiOwogCQkJc2V0X3BzX2Rpc3BsYXkoY21kdGFnKTsKIAkJ CVByZXZlbnRJblRyYW5zYWN0aW9uQmxvY2sodHJ1ZSwgY21kdGFnKTsKLQkJCVNlbmRCYXNlQmFj a3VwKChCYXNlQmFja3VwQ21kICopIGNtZF9ub2RlKTsKKwkJCVNlbmRCYXNlQmFja3VwKChCYXNl QmFja3VwQ21kICopIGNtZF9ub2RlLCB1cGxvYWRlZF9tYW5pZmVzdCk7CiAJCQlFbmRSZXBsaWNh dGlvbkNvbW1hbmQoY21kdGFnKTsKIAkJCWJyZWFrOwogCkBAIC0xODYzLDYgKzIwMTUsMTQgQEAg ZXhlY19yZXBsaWNhdGlvbl9jb21tYW5kKGNvbnN0IGNoYXIgKmNtZF9zdHJpbmcpCiAJCQl9CiAJ CQlicmVhazsKIAorCQljYXNlIFRfVXBsb2FkTWFuaWZlc3RDbWQ6CisJCQljbWR0YWcgPSAiVVBM T0FEX01BTklGRVNUIjsKKwkJCXNldF9wc19kaXNwbGF5KGNtZHRhZyk7CisJCQlQcmV2ZW50SW5U cmFuc2FjdGlvbkJsb2NrKHRydWUsIGNtZHRhZyk7CisJCQlVcGxvYWRNYW5pZmVzdCgpOworCQkJ RW5kUmVwbGljYXRpb25Db21tYW5kKGNtZHRhZyk7CisJCQlicmVhazsKKwogCQlkZWZhdWx0Ogog CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCByZXBsaWNhdGlvbiBjb21tYW5kIG5vZGUgdGFn OiAldSIsCiAJCQkJIGNtZF9ub2RlLT50eXBlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCAw ZTBhYzIyYmRkLi43MDYxNDBlYjlmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0zMiw2ICsz Miw3IEBACiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCIKICNpbmNs dWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9wb3N0bWFz dGVyLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3Jp Z2luLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgpAQCAtMTQwLDYgKzE0MSw3IEBA IENhbGN1bGF0ZVNobWVtU2l6ZShpbnQgKm51bV9zZW1hcGhvcmVzKQogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBSZXBsaWNhdGlvbk9yaWdpblNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUo c2l6ZSwgV2FsU25kU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBXYWxSY3ZT aG1lbVNpemUoKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFdhbFN1bW1hcml6ZXJTaG1lbVNp emUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBnQXJjaFNobWVtU2l6ZSgpKTsKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgQXBwbHlMYXVuY2hlclNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRk X3NpemUoc2l6ZSwgQlRyZWVTaG1lbVNpemUoKSk7CkBAIC0zMzcsNiArMzM5LDcgQEAgQ3JlYXRl T3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIAlSZXBsaWNhdGlvbk9yaWdpblNobWVtSW5pdCgp OwogCVdhbFNuZFNobWVtSW5pdCgpOwogCVdhbFJjdlNobWVtSW5pdCgpOworCVdhbFN1bW1hcml6 ZXJTaG1lbUluaXQoKTsKIAlQZ0FyY2hTaG1lbUluaXQoKTsKIAlBcHBseUxhdW5jaGVyU2htZW1J bml0KCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vTWFrZWZpbGUgYi9zcmMvYmluL01ha2VmaWxl CmluZGV4IDM3MzA3N2JmNTIuLmFhMjIxMDkyNWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vTWFrZWZp bGUKKysrIGIvc3JjL2Jpbi9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQCBTVUJESVJTID0gXAog CXBnX2FyY2hpdmVjbGVhbnVwIFwKIAlwZ19iYXNlYmFja3VwIFwKIAlwZ19jaGVja3N1bXMgXAor CXBnX2NvbWJpbmViYWNrdXAgXAogCXBnX2NvbmZpZyBcCiAJcGdfY29udHJvbGRhdGEgXAogCXBn X2N0bCBcCmRpZmYgLS1naXQgYS9zcmMvYmluL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9tZXNvbi5i dWlsZAppbmRleCA2N2NiNTA2MzBjLi40Y2I2ZmQ1OWJiIDEwMDY0NAotLS0gYS9zcmMvYmluL21l c29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vbWVzb24uYnVpbGQKQEAgLTUsNiArNSw3IEBAIHN1YmRp cigncGdfYW1jaGVjaycpCiBzdWJkaXIoJ3BnX2FyY2hpdmVjbGVhbnVwJykKIHN1YmRpcigncGdf YmFzZWJhY2t1cCcpCiBzdWJkaXIoJ3BnX2NoZWNrc3VtcycpCitzdWJkaXIoJ3BnX2NvbWJpbmVi YWNrdXAnKQogc3ViZGlyKCdwZ19jb25maWcnKQogc3ViZGlyKCdwZ19jb250cm9sZGF0YScpCiBz dWJkaXIoJ3BnX2N0bCcpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvYmJzdHJl YW1lcl9maWxlLmMgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvYmJzdHJlYW1lcl9maWxlLmMKaW5k ZXggNDVmMzI5NzRmZi4uNmI3OGVlMjgzZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFj a3VwL2Jic3RyZWFtZXJfZmlsZS5jCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9iYnN0cmVh bWVyX2ZpbGUuYwpAQCAtMjk2LDYgKzI5Niw3IEBAIHNob3VsZF9hbGxvd19leGlzdGluZ19kaXJl Y3RvcnkoY29uc3QgY2hhciAqcGF0aG5hbWUpCiAJaWYgKHN0cmNtcChmaWxlbmFtZSwgInBnX3dh bCIpID09IDAgfHwKIAkJc3RyY21wKGZpbGVuYW1lLCAicGdfeGxvZyIpID09IDAgfHwKIAkJc3Ry Y21wKGZpbGVuYW1lLCAiYXJjaGl2ZV9zdGF0dXMiKSA9PSAwIHx8CisJCXN0cmNtcChmaWxlbmFt ZSwgInN1bW1hcmllcyIpID09IDAgfHwKIAkJc3RyY21wKGZpbGVuYW1lLCAicGdfdGJsc3BjIikg PT0gMCkKIAkJcmV0dXJuIHRydWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1 cC9wZ19iYXNlYmFja3VwLmMgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5j CmluZGV4IGYzMjY4NGE4ZjIuLjU3OTViOTEyNjEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFz ZWJhY2t1cC9wZ19iYXNlYmFja3VwLmMKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jh c2ViYWNrdXAuYwpAQCAtMTAxLDYgKzEwMSwxMSBAQCB0eXBlZGVmIHZvaWQgKCpXcml0ZURhdGFD YWxsYmFjaykgKHNpemVfdCBuYnl0ZXMsIGNoYXIgKmJ1ZiwKICAqLwogI2RlZmluZSBNSU5JTVVN X1ZFUlNJT05fRk9SX1RFUk1JTkFURURfVEFSRklMRSAxNTAwMDAKIAorLyoKKyAqIHBnX3dhbC9z dW1tYXJpZXMgZXhpc3RzIGJlZ2lubmluZyB3aXRoIHZlcnNpb24gMTcuCisgKi8KKyNkZWZpbmUg TUlOSU1VTV9WRVJTSU9OX0ZPUl9XQUxfU1VNTUFSSUVTIDE3MDAwMAorCiAvKgogICogRGlmZmVy ZW50IHdheXMgdG8gaW5jbHVkZSBXQUwKICAqLwpAQCAtMjE3LDcgKzIyMiw4IEBAIHN0YXRpYyB2 b2lkIFJlY2VpdmVCYWNrdXBNYW5pZmVzdEluTWVtb3J5Q2h1bmsoc2l6ZV90IHIsIGNoYXIgKmNv cHlidWYsCiAJCQkJCQkJCQkJCSAgIHZvaWQgKmNhbGxiYWNrX2RhdGEpOwogc3RhdGljIHZvaWQg QmFzZUJhY2t1cChjaGFyICpjb21wcmVzc2lvbl9hbGdvcml0aG0sIGNoYXIgKmNvbXByZXNzaW9u X2RldGFpbCwKIAkJCQkJICAgQ29tcHJlc3Npb25Mb2NhdGlvbiBjb21wcmVzc2xvYywKLQkJCQkJ ICAgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiAqY2xpZW50X2NvbXByZXNzKTsKKwkJCQkJICAg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiAqY2xpZW50X2NvbXByZXNzLAorCQkJCQkgICBjaGFy ICppbmNyZW1lbnRhbF9tYW5pZmVzdCk7CiAKIHN0YXRpYyBib29sIHJlYWNoZWRfZW5kX3Bvc2l0 aW9uKFhMb2dSZWNQdHIgc2VnZW5kcG9zLCB1aW50MzIgdGltZWxpbmUsCiAJCQkJCQkJCSBib29s IHNlZ21lbnRfZmluaXNoZWQpOwpAQCAtMzkwLDYgKzM5Niw4IEBAIHVzYWdlKHZvaWQpCiAJcHJp bnRmKF8oIlxuT3B0aW9ucyBjb250cm9sbGluZyB0aGUgb3V0cHV0OlxuIikpOwogCXByaW50Zihf KCIgIC1ELCAtLXBnZGF0YT1ESVJFQ1RPUlkgcmVjZWl2ZSBiYXNlIGJhY2t1cCBpbnRvIGRpcmVj dG9yeVxuIikpOwogCXByaW50ZihfKCIgIC1GLCAtLWZvcm1hdD1wfHQgICAgICAgb3V0cHV0IGZv cm1hdCAocGxhaW4gKGRlZmF1bHQpLCB0YXIpXG4iKSk7CisJcHJpbnRmKF8oIiAgLWksIC0taW5j cmVtZW50YWw9T0xETUFOSUZFU1RcbiIpKTsKKwlwcmludGYoXygiICAgICAgICAgICAgICAgICAg ICAgICAgIHRha2UgaW5jcmVtZW50YWwgYmFja3VwXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXIsIC0t bWF4LXJhdGU9UkFURSAgICBtYXhpbXVtIHRyYW5zZmVyIHJhdGUgdG8gdHJhbnNmZXIgZGF0YSBk aXJlY3RvcnlcbiIKIAkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgIChpbiBrQi9zLCBvciB1 c2Ugc3VmZml4IFwia1wiIG9yIFwiTVwiKVxuIikpOwogCXByaW50ZihfKCIgIC1SLCAtLXdyaXRl LXJlY292ZXJ5LWNvbmZcbiIKQEAgLTY4OCw2ICs2OTYsMjMgQEAgU3RhcnRMb2dTdHJlYW1lcihj aGFyICpzdGFydHBvcywgdWludDMyIHRpbWVsaW5lLCBjaGFyICpzeXNpZGVudGlmaWVyLAogCiAJ CWlmIChwZ19ta2Rpcl9wKHN0YXR1c2RpciwgcGdfZGlyX2NyZWF0ZV9tb2RlKSAhPSAwICYmIGVy cm5vICE9IEVFWElTVCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBc IiVzXCI6ICVtIiwgc3RhdHVzZGlyKTsKKworCQkvKgorCQkgKiBGb3IgbmV3ZXIgc2VydmVyIHZl cnNpb25zLCBsaWtld2lzZSBjcmVhdGUgcGdfd2FsL3N1bW1hcmllcworCQkgKi8KKwkJaWYgKFBR c2VydmVyVmVyc2lvbihjb25uKSA8IE1JTklNVU1fVkVSU0lPTl9GT1JfV0FMX1NVTU1BUklFUykK KwkJeworCQkJY2hhcgkJc3VtbWFyeWRpcltNQVhQR1BBVEhdOworCisJCQlzbnByaW50ZihzdW1t YXJ5ZGlyLCBzaXplb2Yoc3VtbWFyeWRpciksICIlcy8lcy9zdW1tYXJpZXMiLAorCQkJCQkgYmFz ZWRpciwKKwkJCQkJIFBRc2VydmVyVmVyc2lvbihjb25uKSA8IE1JTklNVU1fVkVSU0lPTl9GT1Jf UEdfV0FMID8KKwkJCQkJICJwZ194bG9nIiA6ICJwZ193YWwiKTsKKworCQkJaWYgKHBnX21rZGly X3Aoc3RhdHVzZGlyLCBwZ19kaXJfY3JlYXRlX21vZGUpICE9IDAgJiYKKwkJCQllcnJubyAhPSBF RVhJU1QpCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJXNcIjog JW0iLCBzdW1tYXJ5ZGlyKTsKKwkJfQogCX0KIAogCS8qCkBAIC0xNzI4LDcgKzE3NTMsOSBAQCBS ZWNlaXZlQmFja3VwTWFuaWZlc3RJbk1lbW9yeUNodW5rKHNpemVfdCByLCBjaGFyICpjb3B5YnVm LAogCiBzdGF0aWMgdm9pZAogQmFzZUJhY2t1cChjaGFyICpjb21wcmVzc2lvbl9hbGdvcml0aG0s IGNoYXIgKmNvbXByZXNzaW9uX2RldGFpbCwKLQkJICAgQ29tcHJlc3Npb25Mb2NhdGlvbiBjb21w cmVzc2xvYywgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiAqY2xpZW50X2NvbXByZXNzKQorCQkg ICBDb21wcmVzc2lvbkxvY2F0aW9uIGNvbXByZXNzbG9jLAorCQkgICBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uICpjbGllbnRfY29tcHJlc3MsCisJCSAgIGNoYXIgKmluY3JlbWVudGFsX21hbmlm ZXN0KQogewogCVBHcmVzdWx0ICAgKnJlczsKIAljaGFyCSAgICpzeXNpZGVudGlmaWVyOwpAQCAt MTc5NCw3ICsxODIxLDc2IEBAIEJhc2VCYWNrdXAoY2hhciAqY29tcHJlc3Npb25fYWxnb3JpdGht LCBjaGFyICpjb21wcmVzc2lvbl9kZXRhaWwsCiAJCWV4aXQoMSk7CiAKIAkvKgotCSAqIFN0YXJ0 IHRoZSBhY3R1YWwgYmFja3VwCisJICogSWYgdGhlIHVzZXIgd2FudHMgYW4gaW5jcmVtZW50YWwg YmFja3VwLCB3ZSBtdXN0IHVwbG9hZCB0aGUgbWFuaWZlc3QKKwkgKiBmb3IgdGhlIHByZXZpb3Vz IGJhY2t1cCB1cG9uIHdoaWNoIGl0IGlzIHRvIGJlIGJhc2VkLgorCSAqLworCWlmIChpbmNyZW1l bnRhbF9tYW5pZmVzdCAhPSBOVUxMKQorCXsKKwkJaW50CQkJZmQ7CisJCWNoYXIJCW1idWZbNjU1 MzZdOworCQlpbnQJCQluYnl0ZXM7CisKKwkJLyogUmVqZWN0IGlmIHNlcnZlciBpcyB0b28gb2xk LiAqLworCQlpZiAoc2VydmVyVmVyc2lvbiA8IE1JTklNVU1fVkVSU0lPTl9GT1JfV0FMX1NVTU1B UklFUykKKwkJCXBnX2ZhdGFsKCJzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBpbmNyZW1lbnRhbCBi YWNrdXAiKTsKKworCQkvKiBPcGVuIHRoZSBmaWxlLiAqLworCQlmZCA9IG9wZW4oaW5jcmVtZW50 YWxfbWFuaWZlc3QsIE9fUkRPTkxZIHwgUEdfQklOQVJZLCAwKTsKKwkJaWYgKGZkIDwgMCkKKwkJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBpbmNyZW1lbnRhbF9t YW5pZmVzdCk7CisKKwkJLyogVGVsbCB0aGUgc2VydmVyIHdoYXQgd2Ugd2FudCB0byBkby4gKi8K KwkJaWYgKFBRc2VuZFF1ZXJ5KGNvbm4sICJVUExPQURfTUFOSUZFU1QiKSA9PSAwKQorCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBzZW5kIHJlcGxpY2F0aW9uIGNvbW1hbmQgXCIlc1wiOiAlcyIsCisJ CQkJCSAiVVBMT0FEX01BTklGRVNUIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQlyZXMgPSBQ UWdldFJlc3VsdChjb25uKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09Q WV9JTikKKwkJeworCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfRkFUQUxfRVJS T1IpCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1cGxvYWQgbWFuaWZlc3Q6ICVzIiwKKwkJCQkJ CSBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCQllbHNlCisJCQkJcGdfZmF0YWwoImNvdWxkIG5v dCB1cGxvYWQgbWFuaWZlc3Q6IHVuZXhwZWN0ZWQgc3RhdHVzICVzIiwKKwkJCQkJCSBQUXJlc1N0 YXR1cyhQUXJlc3VsdFN0YXR1cyhyZXMpKSk7CisJCX0KKworCQkvKiBMb29wLCByZWFkaW5nIGZy b20gdGhlIGZpbGUgYW5kIHNlbmRpbmcgdGhlIGRhdGEgdG8gdGhlIHNlcnZlci4gKi8KKwkJd2hp bGUgKChuYnl0ZXMgPSByZWFkKGZkLCBtYnVmLCBzaXplb2YgbWJ1ZikpID4gMCkKKwkJeworCQkJ aWYgKFBRcHV0Q29weURhdGEoY29ubiwgbWJ1ZiwgbmJ5dGVzKSA8IDApCisJCQkJcGdfZmF0YWwo ImNvdWxkIG5vdCBzZW5kIENPUFkgZGF0YTogJXMiLAorCQkJCQkJIFBRZXJyb3JNZXNzYWdlKGNv bm4pKTsKKwkJfQorCisJCS8qIEJhaWwgb3V0IGlmIHdlIGV4aXRlZCB0aGUgbG9vcCBkdWUgdG8g YW4gZXJyb3IuICovCisJCWlmIChuYnl0ZXMgPCAwKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBy ZWFkIGZpbGUgXCIlc1wiOiAlbSIsIGluY3JlbWVudGFsX21hbmlmZXN0KTsKKworCQkvKiBFbmQg dGhlIENPUFkgb3BlcmF0aW9uLiAqLworCQlpZiAoUFFwdXRDb3B5RW5kKGNvbm4sIE5VTEwpIDwg MCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgc2VuZCBlbmQtb2YtQ09QWTogJXMiLAorCQkJCQkg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJCS8qIFNlZSB3aGV0aGVyIHRoZSBzZXJ2ZXIgaXMg aGFwcHkgd2l0aCB3aGF0IHdlIHNlbnQuICovCisJCXJlcyA9IFBRZ2V0UmVzdWx0KGNvbm4pOwor CQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19GQVRBTF9FUlJPUikKKwkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgdXBsb2FkIG1hbmlmZXN0OiAlcyIsCisJCQkJCSBQUWVycm9yTWVzc2Fn ZShjb25uKSk7CisJCWVsc2UgaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFO RF9PSykKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdXBsb2FkIG1hbmlmZXN0OiB1bmV4cGVjdGVk IHN0YXR1cyAlcyIsCisJCQkJCSBQUXJlc1N0YXR1cyhQUXJlc3VsdFN0YXR1cyhyZXMpKSk7CisK KwkJLyogQ29uc3VtZSBSZWFkeUZvclF1ZXJ5IG1lc3NhZ2UgZnJvbSBzZXJ2ZXIuICovCisJCXJl cyA9IFBRZ2V0UmVzdWx0KGNvbm4pOworCQlpZiAocmVzICE9IE5VTEwpCisJCQlwZ19mYXRhbCgi dW5leHBlY3RlZCBleHRyYSByZXN1bHQgd2hpbGUgc2VuZGluZyBtYW5pZmVzdCIpOworCisJCS8q IEFkZCBJTkNSRU1FTlRBTCBvcHRpb24gdG8gQkFTRV9CQUNLVVAgY29tbWFuZC4gKi8KKwkJQXBw ZW5kUGxhaW5Db21tYW5kT3B0aW9uKCZidWYsIHVzZV9uZXdfb3B0aW9uX3N5bnRheCwgIklOQ1JF TUVOVEFMIik7CisJfQorCisJLyoKKwkgKiBDb250aW51ZSBidWlsZGluZyB1cCB0aGUgb3B0aW9u cyBsaXN0IGZvciB0aGUgQkFTRV9CQUNLVVAgY29tbWFuZC4KIAkgKi8KIAlBcHBlbmRTdHJpbmdD b21tYW5kT3B0aW9uKCZidWYsIHVzZV9uZXdfb3B0aW9uX3N5bnRheCwgIkxBQkVMIiwgbGFiZWwp OwogCWlmIChlc3RpbWF0ZXNpemUpCkBAIC0xOTAxLDYgKzE5OTcsNyBAQCBCYXNlQmFja3VwKGNo YXIgKmNvbXByZXNzaW9uX2FsZ29yaXRobSwgY2hhciAqY29tcHJlc3Npb25fZGV0YWlsLAogCWVs c2UKIAkJYmFzZWJrcCA9IHBzcHJpbnRmKCJCQVNFX0JBQ0tVUCAlcyIsIGJ1Zi5kYXRhKTsKIAor CS8qIE9LLCB0cnkgdG8gc3RhcnQgdGhlIGJhY2t1cC4gKi8KIAlpZiAoUFFzZW5kUXVlcnkoY29u biwgYmFzZWJrcCkgPT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBzZW5kIHJlcGxpY2F0aW9u IGNvbW1hbmQgXCIlc1wiOiAlcyIsCiAJCQkJICJCQVNFX0JBQ0tVUCIsIFBRZXJyb3JNZXNzYWdl KGNvbm4pKTsKQEAgLTIyNTYsNiArMjM1Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQl7InZlcnNpb24iLCBub19hcmd1bWVudCwgTlVMTCwgJ1YnfSwKIAkJeyJwZ2RhdGEiLCBy ZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0QnfSwKIAkJeyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1 bWVudCwgTlVMTCwgJ0YnfSwKKwkJeyJpbmNyZW1lbnRhbCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCAnaSd9LAogCQl7ImNoZWNrcG9pbnQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2Mn fSwKIAkJeyJjcmVhdGUtc2xvdCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnQyd9LAogCQl7Im1heC1y YXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdyJ30sCkBAIC0yMjkzLDYgKzIzOTEsNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpbnQJCQlvcHRpb25faW5kZXg7CiAJY2hh cgkgICAqY29tcHJlc3Npb25fYWxnb3JpdGhtID0gIm5vbmUiOwogCWNoYXIJICAgKmNvbXByZXNz aW9uX2RldGFpbCA9IE5VTEw7CisJY2hhcgkgICAqaW5jcmVtZW50YWxfbWFuaWZlc3QgPSBOVUxM OwogCUNvbXByZXNzaW9uTG9jYXRpb24gY29tcHJlc3Nsb2MgPSBDT01QUkVTU19MT0NBVElPTl9V TlNQRUNJRklFRDsKIAlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNsaWVudF9jb21wcmVzczsK IApAQCAtMjMxNyw3ICsyNDE2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAlh dGV4aXQoY2xlYW51cF9kaXJlY3Rvcmllc19hdGV4aXQpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0 X2xvbmcoYXJnYywgYXJndiwgImM6Q2Q6RDpGOmg6bDpuTnA6UHI6UnM6Uzp0OlQ6VTp2d1dYOnpa OiIsCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImM6Q2Q6RDpGOmg6aTps Om5OcDpQcjpSczpTOnQ6VDpVOnZ3V1g6elo6IiwKIAkJCQkJCQlsb25nX29wdGlvbnMsICZvcHRp b25faW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAgLTIzNTIsNiArMjQ1MSw5IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJY2FzZSAnaCc6CiAJCQkJZGJob3N0ID0g cGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdpJzoKKwkJCQlpbmNyZW1l bnRhbF9tYW5pZmVzdCA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2FzZSAn bCc6CiAJCQkJbGFiZWwgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKQEAgLTI3NjUs NyArMjg2Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCX0KIAogCUJhc2VCYWNr dXAoY29tcHJlc3Npb25fYWxnb3JpdGhtLCBjb21wcmVzc2lvbl9kZXRhaWwsIGNvbXByZXNzbG9j LAotCQkJICAgJmNsaWVudF9jb21wcmVzcyk7CisJCQkgICAmY2xpZW50X2NvbXByZXNzLCBpbmNy ZW1lbnRhbF9tYW5pZmVzdCk7CiAKIAlzdWNjZXNzID0gdHJ1ZTsKIAlyZXR1cm4gMDsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFja3VwLnBsIGIvc3Jj L2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwKaW5kZXggYjlmNWUxMjY2 Yi4uYmY3NjUyOTFlNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3Bn X2Jhc2ViYWNrdXAucGwKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2Vi YWNrdXAucGwKQEAgLTIyMywxMCArMjIzLDEwIEBAIFNLSVA6CiAJCSJjaGVjayBiYWNrdXAgZGly IHBlcm1pc3Npb25zIik7CiB9CiAKLSMgT25seSBhcmNoaXZlX3N0YXR1cyBkaXJlY3Rvcnkgc2hv dWxkIGJlIGNvcGllZCBpbiBwZ193YWwvLgorIyBPbmx5IGFyY2hpdmVfc3RhdHVzIGFuZCBzdW1t YXJpZXMgZGlyZWN0b3JpZXMgc2hvdWxkIGJlIGNvcGllZCBpbiBwZ193YWwvLgogaXNfZGVlcGx5 KAogCVsgc29ydChzbHVycF9kaXIoIiR0ZW1wZGlyL2JhY2t1cC9wZ193YWwvIikpIF0sCi0JWyBz b3J0IHF3KC4gLi4gYXJjaGl2ZV9zdGF0dXMpIF0sCisJWyBzb3J0IHF3KC4gLi4gYXJjaGl2ZV9z dGF0dXMgc3VtbWFyaWVzKSBdLAogCSdubyBXQUwgZmlsZXMgY29waWVkJyk7CiAKICMgQ29udGVu dHMgb2YgdGhlc2UgZGlyZWN0b3JpZXMgc2hvdWxkIG5vdCBiZSBjb3BpZWQuCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvLmdpdGlnbm9yZSBiL3NyYy9iaW4vcGdfY29tYmlu ZWJhY2t1cC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmQ3ZTYxNzQzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAv LmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitwZ19jb21iaW5lYmFja3VwCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2NvbWJpbmViYWNrdXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNr dXAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzhiYTA1 ZTYyNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9NYWtlZmls ZQpAQCAtMCwwICsxLDUyIEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBNYWtlZmlsZSBmb3Ig c3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwCisjCisjIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQorIworIyBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvTWFrZWZpbGUKKyMKKyMtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisKK1BHRklMRURFU0MgPSAicGdfY29tYmluZWJhY2t1cCAtIGNvbWJpbmUgaW5jcmVt ZW50YWwgYmFja3VwcyIKK1BHQVBQSUNPTj13aW4zMgorCitzdWJkaXIgPSBzcmMvYmluL3BnX2Nv bWJpbmViYWNrdXAKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxk ZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCisKK292ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJw cV9zcmNkaXIpICQoQ1BQRkxBR1MpCitMREZMQUdTX0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRk aXIpL3NyYy9mZV91dGlscyAtbHBnZmV1dGlscworCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwK KwlwZ19jb21iaW5lYmFja3VwLm8gXAorCWJhY2t1cF9sYWJlbC5vIFwKKwljb3B5X2ZpbGUubyBc CisJbG9hZF9tYW5pZmVzdC5vIFwKKwlyZWNvbnN0cnVjdC5vIFwKKwl3cml0ZV9tYW5pZmVzdC5v CisKK2FsbDogcGdfY29tYmluZWJhY2t1cAorCitwZ19jb21iaW5lYmFja3VwOiAkKE9CSlMpIHwg c3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKKwkkKENDKSAkKENGTEFHUykg JF4gJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCisKK2luc3RhbGw6 IGFsbCBpbnN0YWxsZGlycworCSQoSU5TVEFMTF9QUk9HUkFNKSBwZ19jb21iaW5lYmFja3VwJChY KSAnJChERVNURElSKSQoYmluZGlyKS9wZ19jb21iaW5lYmFja3VwJChYKScKKworaW5zdGFsbGRp cnM6CisJJChNS0RJUl9QKSAnJChERVNURElSKSQoYmluZGlyKScKKwordW5pbnN0YWxsOgorCXJt IC1mICckKERFU1RESVIpJChiaW5kaXIpL3BnX2NvbWJpbmViYWNrdXAkKFgpJworCitjbGVhbiBk aXN0Y2xlYW4gbWFpbnRhaW5lci1jbGVhbjoKKwlybSAtZiBwZ19jb21iaW5lYmFja3VwJChYKSAk KE9CSlMpCisKK2NoZWNrOgorCSQocHJvdmVfY2hlY2spCisKK2luc3RhbGxjaGVjazoKKwkkKHBy b3ZlX2luc3RhbGxjaGVjaykKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9i YWNrdXBfbGFiZWwuYyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9iYWNrdXBfbGFiZWwuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45MjJlMDA4NTRkCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2JhY2t1cF9sYWJlbC5jCkBAIC0w LDAgKzEsMjgzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBSZWFkIGFuZCBtYW5pcHVs YXRlIGJhY2t1cCBsYWJlbCBmaWxlcworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvYmFja3VwX2xhYmVsLmMKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNs dWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUg ImJhY2t1cF9sYWJlbC5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCisjaW5jbHVkZSAi Y29tbW9uL2ZpbGVfcGVybS5oIgorI2luY2x1ZGUgIndyaXRlX21hbmlmZXN0LmgiCisKK3N0YXRp YyBpbnQJZ2V0X2VvbF9vZmZzZXQoU3RyaW5nSW5mbyBidWYpOworc3RhdGljIGJvb2wgbGluZV9z dGFydHNfd2l0aChjaGFyICpzLCBjaGFyICplLCBjaGFyICptYXRjaCwgY2hhciAqKnNvdXQpOwor c3RhdGljIGJvb2wgcGFyc2VfbHNuKGNoYXIgKnMsIGNoYXIgKmUsIFhMb2dSZWNQdHIgKmxzbiwg Y2hhciAqKmMpOworc3RhdGljIGJvb2wgcGFyc2VfdGxpKGNoYXIgKnMsIGNoYXIgKmUsIFRpbWVM aW5lSUQgKnRsaSk7CisKKy8qCisgKiBQYXJzZSBhIGJhY2t1cCBsYWJlbCBmaWxlLCBzdGFydGlu ZyBhdCBidWYtPmN1cnNvci4KKyAqCisgKiBXZSBleHBlY3QgdG8gZmluZCBhIFNUQVJUIFdBTCBM T0NBVElPTiBsaW5lLCBmb2xsb3dlZCBieSBhIExTTiwgZm9sbG93ZWQKKyAqIGJ5IGEgc3BhY2U7 IHRoZSByZXN1bHRpbmcgTFNOIGlzIHN0b3JlZCBpbnRvICpzdGFydF9sc24uCisgKgorICogV2Ug ZXhwZWN0IHRvIGZpbmQgYSBTVEFSVCBUSU1FTElORSBsaW5lLCBmb2xsb3dlZCBieSBhIFRMSSwg Zm9sbG93ZWQgYnkKKyAqIGEgbmV3bGluZTsgdGhlIHJlc3VsdGluZyBUTEkgaXMgc3RvcmVkIGlu dG8gKnN0YXJ0X3RsaS4KKyAqCisgKiBXZSBleHBlY3QgdG8gZmluZCBlaXRoZXIgYm90aCBJTkNS RU1FTlRBTCBGUk9NIExTTiBhbmQgSU5DUkVNRU5UQUwgRlJPTSBUTEkKKyAqIG9yIG5laXRoZXIu IElmIHRoZXNlIGFyZSBmb3VuZCwgdGhleSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYW4gTFNOIG9y IFRMSQorICogcmVzcGVjdGl2ZWx5IGFuZCB0aGVuIGJ5IGEgbmV3bGluZSwgYW5kIHRoZSB2YWx1 ZXMgd2lsbCBiZSBzdG9yZWQgaW50bworICogKnByZXZpb3VzX2xzbiBhbmQgKnByZXZpb3VzX3Rs aSwgcmVzcGVjdGl2ZWx5LgorICoKKyAqIE90aGVyIGxpbmVzIGluIHRoZSBwcm92aWRlZCBiYWNr dXBfbGFiZWwgZGF0YSBhcmUgaWdub3JlZC4gZmlsZW5hbWUgaXMgdXNlZAorICogZm9yIGVycm9y IHJlcG9ydGluZzsgZXJyb3JzIGFyZSBmYXRhbC4KKyAqLwordm9pZAorcGFyc2VfYmFja3VwX2xh YmVsKGNoYXIgKmZpbGVuYW1lLCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkgICBUaW1lTGluZUlEICpz dGFydF90bGksIFhMb2dSZWNQdHIgKnN0YXJ0X2xzbiwKKwkJCQkgICBUaW1lTGluZUlEICpwcmV2 aW91c190bGksIFhMb2dSZWNQdHIgKnByZXZpb3VzX2xzbikKK3sKKwlpbnQJCQlmb3VuZCA9IDA7 CisKKwkqc3RhcnRfdGxpID0gMDsKKwkqc3RhcnRfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJ KnByZXZpb3VzX3RsaSA9IDA7CisJKnByZXZpb3VzX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwor CisJd2hpbGUgKGJ1Zi0+Y3Vyc29yIDwgYnVmLT5sZW4pCisJeworCQljaGFyCSAgICpzID0gJmJ1 Zi0+ZGF0YVtidWYtPmN1cnNvcl07CisJCWludAkJCWVvID0gZ2V0X2VvbF9vZmZzZXQoYnVmKTsK KwkJY2hhcgkgICAqZSA9ICZidWYtPmRhdGFbZW9dOworCQljaGFyCSAgICpjOworCisJCWlmIChs aW5lX3N0YXJ0c193aXRoKHMsIGUsICJTVEFSVCBXQUwgTE9DQVRJT046ICIsICZzKSkKKwkJewor CQkJaWYgKCFwYXJzZV9sc24ocywgZSwgc3RhcnRfbHNuLCAmYykpCisJCQkJcGdfZmF0YWwoIiVz OiBjb3VsZCBub3QgcGFyc2UgJXMiLAorCQkJCQkJIGZpbGVuYW1lLCAiU1RBUlQgV0FMIExPQ0FU SU9OIik7CisJCQlpZiAoYyA+PSBlIHx8ICpjICE9ICcgJykKKwkJCQlwZ19mYXRhbCgiJXM6IGlt cHJvcGVyIHRlcm1pbmF0b3IgZm9yICVzIiwKKwkJCQkJCSBmaWxlbmFtZSwgIlNUQVJUIFdBTCBM T0NBVElPTiIpOworCQkJZm91bmQgfD0gMTsKKwkJfQorCQllbHNlIGlmIChsaW5lX3N0YXJ0c193 aXRoKHMsIGUsICJTVEFSVCBUSU1FTElORTogIiwgJnMpKQorCQl7CisJCQlpZiAoIXBhcnNlX3Rs aShzLCBlLCBzdGFydF90bGkpKQorCQkJCXBnX2ZhdGFsKCIlczogY291bGQgbm90IHBhcnNlIFRM SSBmb3IgJXMiLAorCQkJCQkJIGZpbGVuYW1lLCAiU1RBUlQgVElNRUxJTkUiKTsKKwkJCWlmICgq c3RhcnRfdGxpID09IDApCisJCQkJcGdfZmF0YWwoIiVzOiBpbnZhbGlkIFRMSSIsIGZpbGVuYW1l KTsKKwkJCWZvdW5kIHw9IDI7CisJCX0KKwkJZWxzZSBpZiAobGluZV9zdGFydHNfd2l0aChzLCBl LCAiSU5DUkVNRU5UQUwgRlJPTSBMU046ICIsICZzKSkKKwkJeworCQkJaWYgKCFwYXJzZV9sc24o cywgZSwgcHJldmlvdXNfbHNuLCAmYykpCisJCQkJcGdfZmF0YWwoIiVzOiBjb3VsZCBub3QgcGFy c2UgJXMiLAorCQkJCQkJIGZpbGVuYW1lLCAiSU5DUkVNRU5UQUwgRlJPTSBMU04iKTsKKwkJCWlm IChjID49IGUgfHwgKmMgIT0gJ1xuJykKKwkJCQlwZ19mYXRhbCgiJXM6IGltcHJvcGVyIHRlcm1p bmF0b3IgZm9yICVzIiwKKwkJCQkJCSBmaWxlbmFtZSwgIklOQ1JFTUVOVEFMIEZST00gTFNOIik7 CisJCQlmb3VuZCB8PSA0OworCQl9CisJCWVsc2UgaWYgKGxpbmVfc3RhcnRzX3dpdGgocywgZSwg IklOQ1JFTUVOVEFMIEZST00gVExJOiAiLCAmcykpCisJCXsKKwkJCWlmICghcGFyc2VfdGxpKHMs IGUsIHByZXZpb3VzX3RsaSkpCisJCQkJcGdfZmF0YWwoIiVzOiBjb3VsZCBub3QgcGFyc2UgJXMi LAorCQkJCQkJIGZpbGVuYW1lLCAiSU5DUkVNRU5UQUwgRlJPTSBUTEkiKTsKKwkJCWlmICgqcHJl dmlvdXNfdGxpID09IDApCisJCQkJcGdfZmF0YWwoIiVzOiBpbnZhbGlkIFRMSSIsIGZpbGVuYW1l KTsKKwkJCWZvdW5kIHw9IDg7CisJCX0KKworCQlidWYtPmN1cnNvciA9IGVvOworCX0KKworCWlm ICgoZm91bmQgJiAxKSA9PSAwKQorCQlwZ19mYXRhbCgiJXM6IGNvdWxkIG5vdCBmaW5kICVzIiwg ZmlsZW5hbWUsICJTVEFSVCBXQUwgTE9DQVRJT04iKTsKKwlpZiAoKGZvdW5kICYgMikgPT0gMCkK KwkJcGdfZmF0YWwoIiVzOiBjb3VsZCBub3QgZmluZCAlcyIsIGZpbGVuYW1lLCAiU1RBUlQgVElN RUxJTkUiKTsKKwlpZiAoKGZvdW5kICYgNCkgIT0gMCAmJiAoZm91bmQgJiA4KSA9PSAwKQorCQlw Z19mYXRhbCgiJXM6ICVzIHJlcXVpcmVzICVzIiwgZmlsZW5hbWUsCisJCQkJICJJTkNSRU1FTlRB TCBGUk9NIExTTiIsICJJTkNSRU1FTlRBTCBGUk9NIFRMSSIpOworCWlmICgoZm91bmQgJiA4KSAh PSAwICYmIChmb3VuZCAmIDQpID09IDApCisJCXBnX2ZhdGFsKCIlczogJXMgcmVxdWlyZXMgJXMi LCBmaWxlbmFtZSwKKwkJCQkgIklOQ1JFTUVOVEFMIEZST00gVExJIiwgIklOQ1JFTUVOVEFMIEZS T00gTFNOIik7Cit9CisKKy8qCisgKiBXcml0ZSBhIGJhY2t1cCBsYWJlbCBmaWxlIHRvIHRoZSBv dXRwdXQgZGlyZWN0b3J5LgorICoKKyAqIFRoaXMgd2lsbCBiZSBpZGVudGljYWwgdG8gdGhlIHBy b3ZpZGVkIGJhY2t1cF9sYWJlbCBmaWxlLCBleGNlcHQgdGhhdCB0aGUKKyAqIElOQ1JFTUVOVEFM IEZST00gTFNOIGFuZCBJTkNSRU1FTlRBTCBGUk9NIFRMSSBsaW5lcyB3aWxsIGJlIG9taXR0ZWQu CisgKgorICogVGhlIG5ldyBmaWxlIHdpbGwgYmUgY2hlY2tzdW1tZWQgdXNpbmcgdGhlIHNwZWNp ZmllZCBhbGdvcml0aG0uIElmCisgKiBtd3JpdGVyICE9IE5VTEwsIGl0IHdpbGwgYmUgYWRkZWQg dG8gdGhlIG1hbmlmZXN0LgorICovCit2b2lkCit3cml0ZV9iYWNrdXBfbGFiZWwoY2hhciAqb3V0 cHV0X2RpcmVjdG9yeSwgU3RyaW5nSW5mbyBidWYsCisJCQkJICAgcGdfY2hlY2tzdW1fdHlwZSBj aGVja3N1bV90eXBlLCBtYW5pZmVzdF93cml0ZXIgKm13cml0ZXIpCit7CisJY2hhcgkJb3V0cHV0 X2ZpbGVuYW1lW01BWFBHUEFUSF07CisJaW50CQkJb3V0cHV0X2ZkOworCXBnX2NoZWNrc3VtX2Nv bnRleHQgY2hlY2tzdW1fY3R4OworCXVpbnQ4CQljaGVja3N1bV9wYXlsb2FkW1BHX0NIRUNLU1VN X01BWF9MRU5HVEhdOworCWludAkJCWNoZWNrc3VtX2xlbmd0aDsKKworCXBnX2NoZWNrc3VtX2lu aXQoJmNoZWNrc3VtX2N0eCwgY2hlY2tzdW1fdHlwZSk7CisKKwlzbnByaW50ZihvdXRwdXRfZmls ZW5hbWUsIE1BWFBHUEFUSCwgIiVzL2JhY2t1cF9sYWJlbCIsIG91dHB1dF9kaXJlY3RvcnkpOwor CisJaWYgKChvdXRwdXRfZmQgPSBvcGVuKG91dHB1dF9maWxlbmFtZSwKKwkJCQkJCSAgT19XUk9O TFkgfCBPX0NSRUFUIHwgT19FWENMIHwgUEdfQklOQVJZLAorCQkJCQkJICBwZ19maWxlX2NyZWF0 ZV9tb2RlKSkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVt Iiwgb3V0cHV0X2ZpbGVuYW1lKTsKKworCXdoaWxlIChidWYtPmN1cnNvciA8IGJ1Zi0+bGVuKQor CXsKKwkJY2hhcgkgICAqcyA9ICZidWYtPmRhdGFbYnVmLT5jdXJzb3JdOworCQlpbnQJCQllbyA9 IGdldF9lb2xfb2Zmc2V0KGJ1Zik7CisJCWNoYXIJICAgKmUgPSAmYnVmLT5kYXRhW2VvXTsKKwor CQlpZiAoIWxpbmVfc3RhcnRzX3dpdGgocywgZSwgIklOQ1JFTUVOVEFMIEZST00gTFNOOiAiLCBO VUxMKSAmJgorCQkJIWxpbmVfc3RhcnRzX3dpdGgocywgZSwgIklOQ1JFTUVOVEFMIEZST00gVExJ OiAiLCBOVUxMKSkKKwkJeworCQkJc3NpemVfdAkJd2I7CisKKwkJCXdiID0gd3JpdGUob3V0cHV0 X2ZkLCBzLCBlIC0gcyk7CisJCQlpZiAod2IgIT0gZSAtIHMpCisJCQl7CisJCQkJaWYgKHdiIDwg MCkKKwkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwiJXNcIjogJW0iLCBvdXRw dXRfZmlsZW5hbWUpOworCQkJCWVsc2UKKwkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBm aWxlIFwiJXNcIjogd3JvdGUgb25seSAlZCBvZiAlZCBieXRlcyIsCisJCQkJCQkJIG91dHB1dF9m aWxlbmFtZSwgKGludCkgd2IsIChpbnQpIChlIC0gcykpOworCQkJfQorCQkJaWYgKHBnX2NoZWNr c3VtX3VwZGF0ZSgmY2hlY2tzdW1fY3R4LCAodWludDggKikgcywgZSAtIHMpIDwgMCkKKwkJCQlw Z19mYXRhbCgiY291bGQgbm90IHVwZGF0ZSBjaGVja3N1bSBvZiBmaWxlIFwiJXNcIiIsCisJCQkJ CQkgb3V0cHV0X2ZpbGVuYW1lKTsKKwkJfQorCisJCWJ1Zi0+Y3Vyc29yID0gZW87CisJfQorCisJ aWYgKGNsb3NlKG91dHB1dF9mZCkgIT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBc IiVzXCI6ICVtIiwgb3V0cHV0X2ZpbGVuYW1lKTsKKworCWNoZWNrc3VtX2xlbmd0aCA9IHBnX2No ZWNrc3VtX2ZpbmFsKCZjaGVja3N1bV9jdHgsIGNoZWNrc3VtX3BheWxvYWQpOworCisJaWYgKG13 cml0ZXIgIT0gTlVMTCkKKwl7CisJCXN0cnVjdCBzdGF0IHNiOworCisJCS8qCisJCSAqIFdlIGNv dWxkIHRyYWNrIHRoZSBsZW5ndGggb3Vyc2VsdmVzLCBidXQgbXVzdCBzdGF0KCkgdG8gZ2V0IHRo ZQorCQkgKiBtdGltZS4KKwkJICovCisJCWlmIChzdGF0KG91dHB1dF9maWxlbmFtZSwgJnNiKSA8 IDApCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHN0YXQgZmlsZSBcIiVzXCI6ICVtIiwgb3V0cHV0 X2ZpbGVuYW1lKTsKKwkJYWRkX2ZpbGVfdG9fbWFuaWZlc3QobXdyaXRlciwgImJhY2t1cF9sYWJl bCIsIHNiLnN0X3NpemUsCisJCQkJCQkJIHNiLnN0X210aW1lLCBjaGVja3N1bV90eXBlLAorCQkJ CQkJCSBjaGVja3N1bV9sZW5ndGgsIGNoZWNrc3VtX3BheWxvYWQpOworCX0KK30KKworLyoKKyAq IFJldHVybiB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGJ1ZmZlciBz dGFydHMsIG9yIHRoZXJlCisgKiBpcyBub25lLCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSBidWZm ZXIgZW5kcy4KKyAqCisgKiBUaGUgc2VhcmNoIGJlZ2lucyBhdCBidWYtPmN1cnNvci4KKyAqLwor c3RhdGljIGludAorZ2V0X2VvbF9vZmZzZXQoU3RyaW5nSW5mbyBidWYpCit7CisJaW50CQkJZW8g PSBidWYtPmN1cnNvcjsKKworCXdoaWxlIChlbyA8IGJ1Zi0+bGVuKQorCXsKKwkJaWYgKGJ1Zi0+ ZGF0YVtlb10gPT0gJ1xuJykKKwkJCXJldHVybiBlbyArIDE7CisJCSsrZW87CisJfQorCisJcmV0 dXJuIGVvOworfQorCisvKgorICogVGVzdCB3aGV0aGVyIHRoZSBsaW5lIHRoYXQgcnVucyBmcm9t IHMgdG8gZSAoaW5jbHVzaXZlIG9mICpzLCBidXQgbm90CisgKiBpbmNsdXNpdmUgb2YgKmUpIHN0 YXJ0cyB3aXRoIHRoZSBtYXRjaCBzdHJpbmcgcHJvdmlkZWQsIGFuZCByZXR1cm4gdHJ1ZQorICog b3IgZmFsc2UgYWNjb3JkaW5nIHRvIHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgdGhlIGNhc2UuCisg KgorICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBhbmQgaWYgKnNvdXQgIT0gTlVMTCwg c3RvcmVzIGEgcG9pbnRlciB0byB0aGUKKyAqIGJ5dGUgZm9sbG93aW5nIHRoZSBtYXRjaCBpbnRv ICpzb3V0LgorICovCitzdGF0aWMgYm9vbAorbGluZV9zdGFydHNfd2l0aChjaGFyICpzLCBjaGFy ICplLCBjaGFyICptYXRjaCwgY2hhciAqKnNvdXQpCit7CisJd2hpbGUgKHMgPCBlICYmICptYXRj aCAhPSAnXDAnICYmICpzID09ICptYXRjaCkKKwkJKytzLCArK21hdGNoOworCisJaWYgKCptYXRj aCA9PSAnXDAnICYmIHNvdXQgIT0gTlVMTCkKKwkJKnNvdXQgPSBzOworCisJcmV0dXJuICgqbWF0 Y2ggPT0gJ1wwJyk7Cit9CisKKy8qCisgKiBQYXJzZSBhbiBMU04gc3RhcnRpbmcgYXQgcyBhbmQg bm90IHN0b3BwaW5nIGF0IG9yIGJlZm9yZSBlLiBUaGUgcmV0dXJuIHZhbHVlCisgKiBpcyB0cnVl IG9uIHN1Y2Nlc3MgYW5kIG90aGVyd2lzZSBmYWxzZS4gT24gc3VjY2Vzcywgc3RvcmVzIHRoZSBy ZXN1bHQgaW50bworICogKmxzbiBhbmQgc2V0cyAqYyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIHRo YXQgaXMgbm90IHBhcnQgb2YgdGhlIExTTi4KKyAqLworc3RhdGljIGJvb2wKK3BhcnNlX2xzbihj aGFyICpzLCBjaGFyICplLCBYTG9nUmVjUHRyICpsc24sIGNoYXIgKipjKQoreworCWNoYXIJCXNh dmUgPSAqZTsKKwlpbnQJCQluY2hhcnM7CisJYm9vbAkJc3VjY2VzczsKKwl1bnNpZ25lZAloaTsK Kwl1bnNpZ25lZAlsbzsKKworCSplID0gJ1wwJzsKKwlzdWNjZXNzID0gKHNzY2FuZihzLCAiJVgv JVglbiIsICZoaSwgJmxvLCAmbmNoYXJzKSA9PSAyKTsKKwkqZSA9IHNhdmU7CisKKwlpZiAoc3Vj Y2VzcykKKwl7CisJCSpsc24gPSAoKFhMb2dSZWNQdHIpIGhpKSA8PCAzMiB8IChYTG9nUmVjUHRy KSBsbzsKKwkJKmMgPSBzICsgbmNoYXJzOworCX0KKworCXJldHVybiBzdWNjZXNzOworfQorCisv KgorICogUGFyc2UgYSBUTEkgc3RhcnRpbmcgYXQgcyBhbmQgc3RvcHBpbmcgYXQgb3IgYmVmb3Jl IGUuIFRoZSByZXR1cm4gdmFsdWUgaXMKKyAqIHRydWUgb24gc3VjY2VzcyBhbmQgb3RoZXJ3aXNl IGZhbHNlLiBPbiBzdWNjZXNzLCBzdG9yZXMgdGhlIHJlc3VsdCBpbnRvCisgKiAqdGxpLiBJZiB0 aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIFRMSSBpcyBhbnl0aGlu ZyBvdGhlcgorICogdGhhbiBhIG5ld2xpbmUsIHRoYXQgaXMgZGVlbWVkIGEgZmFpbHVyZS4KKyAq Lworc3RhdGljIGJvb2wKK3BhcnNlX3RsaShjaGFyICpzLCBjaGFyICplLCBUaW1lTGluZUlEICp0 bGkpCit7CisJY2hhcgkJc2F2ZSA9ICplOworCWludAkJCW5jaGFyczsKKwlib29sCQlzdWNjZXNz OworCisJKmUgPSAnXDAnOworCXN1Y2Nlc3MgPSAoc3NjYW5mKHMsICIldSVuIiwgdGxpLCAmbmNo YXJzKSA9PSAxKTsKKwkqZSA9IHNhdmU7CisKKwlpZiAoc3VjY2VzcyAmJiBzW25jaGFyc10gIT0g J1xuJykKKwkJc3VjY2VzcyA9IGZhbHNlOworCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvYmFja3VwX2xhYmVsLmggYi9zcmMvYmluL3Bn X2NvbWJpbmViYWNrdXAvYmFja3VwX2xhYmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uM2FmN2VhMjc0YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29t YmluZWJhY2t1cC9iYWNrdXBfbGFiZWwuaApAQCAtMCwwICsxLDMwIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBSZWFkIGFuZCBtYW5pcHVsYXRlIGJhY2t1cCBsYWJlbCBmaWxlcworICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvYmluL3BnX2NvbWJp bmViYWNrdXAvYmFja3VwX2xhYmVsLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lm bmRlZiBCQUNLVVBfTEFCRUxfSAorI2RlZmluZSBCQUNLVVBfTEFCRUxfSAorCisjaW5jbHVkZSAi YWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiY29tbW9uL2NoZWNrc3VtX2hlbHBlci5oIgor I2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCisKK3N0cnVjdCBtYW5pZmVzdF93cml0ZXI7CisK K2V4dGVybiB2b2lkIHBhcnNlX2JhY2t1cF9sYWJlbChjaGFyICpmaWxlbmFtZSwgU3RyaW5nSW5m byBidWYsCisJCQkJCQkJICAgVGltZUxpbmVJRCAqc3RhcnRfdGxpLAorCQkJCQkJCSAgIFhMb2dS ZWNQdHIgKnN0YXJ0X2xzbiwKKwkJCQkJCQkgICBUaW1lTGluZUlEICpwcmV2aW91c190bGksCisJ CQkJCQkJICAgWExvZ1JlY1B0ciAqcHJldmlvdXNfbHNuKTsKK2V4dGVybiB2b2lkIHdyaXRlX2Jh Y2t1cF9sYWJlbChjaGFyICpvdXRwdXRfZGlyZWN0b3J5LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJ CQkgICBwZ19jaGVja3N1bV90eXBlIGNoZWNrc3VtX3R5cGUsCisJCQkJCQkJICAgc3RydWN0IG1h bmlmZXN0X3dyaXRlciAqbXdyaXRlcik7CisKKyNlbmRpZgkJCQkJCQkvKiBCQUNLVVBfTEFCRUxf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2NvcHlfZmlsZS5jIGIv c3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2NvcHlfZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjQwYTU1ZTMwODcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmlu L3BnX2NvbWJpbmViYWNrdXAvY29weV9maWxlLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBD b3B5IGVudGlyZSBmaWxlcy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAy MywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisg KgorICogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2NvcHlfZmlsZS5oCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaWZkZWYgSEFWRV9D T1BZRklMRV9ICisjaW5jbHVkZSA8Y29weWZpbGUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRs Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1 ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2lu Y2x1ZGUgImNvcHlfZmlsZS5oIgorCitzdGF0aWMgdm9pZCBjb3B5X2ZpbGVfYmxvY2tzKGNvbnN0 IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0LAorCQkJCQkJCSBwZ19jaGVja3N1bV9jb250ZXh0 ICpjaGVja3N1bV9jdHgpOworCisjaWZkZWYgV0lOMzIKK3N0YXRpYyB2b2lkIGNvcHlfZmlsZV9j b3B5ZmlsZShjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCk7CisjZW5kaWYKKworLyoK KyAqIENvcHkgYSByZWd1bGFyIGZpbGUsIG9wdGlvbmFsbHkgY29tcHV0aW5nIGEgY2hlY2tzdW0s IGFuZCBlbWl0dGluZworICogYXBwcm9wcmlhdGUgZGVidWcgbWVzc2FnZXMuIEJ1dCBpZiB3ZSdy ZSBpbiBkcnktcnVuIG1vZGUsIHRoZW4ganVzdCBlbWl0CisgKiB0aGUgbWVzc2FnZXMgYW5kIGRv bid0IGNvcHkgYW55dGhpbmcuCisgKi8KK3ZvaWQKK2NvcHlfZmlsZShjb25zdCBjaGFyICpzcmMs IGNvbnN0IGNoYXIgKmRzdCwKKwkJICBwZ19jaGVja3N1bV9jb250ZXh0ICpjaGVja3N1bV9jdHgs IGJvb2wgZHJ5X3J1bikKK3sKKwkvKgorCSAqIEluIGRyeS1ydW4gbW9kZSwgd2UgZG9uJ3QgYWN0 dWFsbHkgY29weSBhbnl0aGluZywgbm9yIGRvIHdlIHJlYWQgYW55CisJICogZGF0YSBmcm9tIHRo ZSBzb3VyY2UgZmlsZSwgYnV0IHdlIGRvIHZlcmlmeSB0aGF0IHdlIGNhbiBvcGVuIGl0LgorCSAq LworCWlmIChkcnlfcnVuKQorCXsKKwkJaW50CQkJZmQ7CisKKwkJaWYgKChmZCA9IG9wZW4oc3Jj LCBPX1JET05MWSB8IFBHX0JJTkFSWSwgMCkpIDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg b3BlbiBcIiVzXCI6ICVtIiwgc3JjKTsKKwkJaWYgKGNsb3NlKGZkKSA8IDApCisJCQlwZ19mYXRh bCgiY291bGQgbm90IGNsb3NlIFwiJXNcIjogJW0iLCBzcmMpOworCX0KKworCS8qCisJICogSWYg d2UgZG9uJ3QgbmVlZCB0byBjb21wdXRlIGEgY2hlY2tzdW0sIHRoZW4gd2UgY2FuIHVzZSBhbnkg c3BlY2lhbAorCSAqIG9wZXJhdGluZyBzeXN0ZW0gcHJpbWl0aXZlcyB0aGF0IHdlIGtub3cgYWJv dXQgdG8gY29weSB0aGUgZmlsZTsgdGhpcworCSAqIG1heSBiZSBxdWlja2VyIHRoYW4gYSBuYWl2 ZSBibG9jayBjb3B5LgorCSAqLworCWlmIChjaGVja3N1bV9jdHgtPnR5cGUgPT0gQ0hFQ0tTVU1f VFlQRV9OT05FKQorCXsKKwkJY2hhcgkgICAqc3RyYXRlZ3lfbmFtZSA9IE5VTEw7CisJCXZvaWQJ CSgqc3RyYXRlZ3lfaW1wbGVtZW50YXRpb24pIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikg PSBOVUxMOworCisjaWZkZWYgV0lOMzIKKwkJc3RyYXRlZ3lfbmFtZSA9ICJDb3B5RmlsZSI7CisJ CXN0cmF0ZWd5X2ltcGxlbWVudGF0aW9uID0gY29weV9maWxlX2NvcHlmaWxlOworI2VuZGlmCisK KwkJaWYgKHN0cmF0ZWd5X25hbWUgIT0gTlVMTCkKKwkJeworCQkJaWYgKGRyeV9ydW4pCisJCQkJ cGdfbG9nX2RlYnVnKCJ3b3VsZCBjb3B5IFwiJXNcIiB0byBcIiVzXCIgdXNpbmcgc3RyYXRlZ3kg JXMiLAorCQkJCQkJCSBzcmMsIGRzdCwgc3RyYXRlZ3lfbmFtZSk7CisJCQllbHNlCisJCQl7CisJ CQkJcGdfbG9nX2RlYnVnKCJjb3B5aW5nIFwiJXNcIiB0byBcIiVzXCIgdXNpbmcgc3RyYXRlZ3kg JXMiLAorCQkJCQkJCSBzcmMsIGRzdCwgc3RyYXRlZ3lfbmFtZSk7CisJCQkJKCpzdHJhdGVneV9p bXBsZW1lbnRhdGlvbikgKHNyYywgZHN0KTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfQorCX0KKwor CS8qCisJICogRmFsbCBiYWNrIHRvIHRoZSBzaW1wbGUgYXBwcm9hY2ggb2YgcmVhZGluZyBhbmQg d3JpdGluZyBhbGwgdGhlIGJsb2NrcywKKwkgKiBmZWVkaW5nIHRoZW0gaW50byB0aGUgY2hlY2tz dW0gY29udGV4dCBhcyB3ZSBnby4KKwkgKi8KKwlpZiAoZHJ5X3J1bikKKwl7CisJCWlmIChjaGVj a3N1bV9jdHgtPnR5cGUgPT0gQ0hFQ0tTVU1fVFlQRV9OT05FKQorCQkJcGdfbG9nX2RlYnVnKCJ3 b3VsZCBjb3B5IFwiJXNcIiB0byBcIiVzXCIiLAorCQkJCQkJIHNyYywgZHN0KTsKKwkJZWxzZQor CQkJcGdfbG9nX2RlYnVnKCJ3b3VsZCBjb3B5IFwiJXNcIiB0byBcIiVzXCIgYW5kIGNoZWNrc3Vt IHdpdGggJXMiLAorCQkJCQkJIHNyYywgZHN0LCBwZ19jaGVja3N1bV90eXBlX25hbWUoY2hlY2tz dW1fY3R4LT50eXBlKSk7CisJfQorCWVsc2UKKwl7CisJCWlmIChjaGVja3N1bV9jdHgtPnR5cGUg PT0gQ0hFQ0tTVU1fVFlQRV9OT05FKQorCQkJcGdfbG9nX2RlYnVnKCJjb3B5aW5nIFwiJXNcIiB0 byBcIiVzXCIiLAorCQkJCQkJIHNyYywgZHN0KTsKKwkJZWxzZQorCQkJcGdfbG9nX2RlYnVnKCJj b3B5aW5nIFwiJXNcIiB0byBcIiVzXCIgYW5kIGNoZWNrc3VtbWluZyB3aXRoICVzIiwKKwkJCQkJ CSBzcmMsIGRzdCwgcGdfY2hlY2tzdW1fdHlwZV9uYW1lKGNoZWNrc3VtX2N0eC0+dHlwZSkpOwor CQljb3B5X2ZpbGVfYmxvY2tzKHNyYywgZHN0LCBjaGVja3N1bV9jdHgpOworCX0KK30KKworLyoK KyAqIENvcHkgYSBmaWxlIGJsb2NrIGJ5IGJsb2NrLCBhbmQgb3B0aW9uYWxseSBjb21wdXRlIGEg Y2hlY2tzdW0gYXMgd2UgZ28uCisgKi8KK3N0YXRpYyB2b2lkCitjb3B5X2ZpbGVfYmxvY2tzKGNv bnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0LAorCQkJCSBwZ19jaGVja3N1bV9jb250ZXh0 ICpjaGVja3N1bV9jdHgpCit7CisJaW50CQkJc3JjX2ZkOworCWludAkJCWRlc3RfZmQ7CisJdWlu dDgJICAgKmJ1ZmZlcjsKKwljb25zdCBpbnQJYnVmZmVyX3NpemUgPSA1MCAqIEJMQ0tTWjsKKwlz c2l6ZV90CQlyYjsKKwl1bnNpZ25lZAlvZmZzZXQgPSAwOworCisJaWYgKChzcmNfZmQgPSBvcGVu KHNyYywgT19SRE9OTFkgfCBQR19CSU5BUlksIDApKSA8IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBzcmMpOworCisJaWYgKChkZXN0X2ZkID0gb3Blbihk c3QsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCB8IFBHX0JJTkFSWSwKKwkJCQkJCXBnX2Zp bGVfY3JlYXRlX21vZGUpKSA8IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwi JXNcIjogJW0iLCBkc3QpOworCisJYnVmZmVyID0gcGdfbWFsbG9jKGJ1ZmZlcl9zaXplKTsKKwor CXdoaWxlICgocmIgPSByZWFkKHNyY19mZCwgYnVmZmVyLCBidWZmZXJfc2l6ZSkpID4gMCkKKwl7 CisJCXNzaXplX3QJCXdiOworCisJCWlmICgod2IgPSB3cml0ZShkZXN0X2ZkLCBidWZmZXIsIHJi KSkgIT0gcmIpCisJCXsKKwkJCWlmICh3YiA8IDApCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3 cml0ZSBmaWxlIFwiJXNcIjogJW0iLCBkc3QpOworCQkJZWxzZQorCQkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6IHdyb3RlIG9ubHkgJWQgb2YgJWQgYnl0ZXMgYXQgb2Zm c2V0ICV1IiwKKwkJCQkJCSBkc3QsIChpbnQpIHdiLCAoaW50KSByYiwgb2Zmc2V0KTsKKwkJfQor CisJCWlmIChwZ19jaGVja3N1bV91cGRhdGUoY2hlY2tzdW1fY3R4LCBidWZmZXIsIHJiKSA8IDAp CisJCQlwZ19mYXRhbCgiY291bGQgbm90IHVwZGF0ZSBjaGVja3N1bSBvZiBmaWxlIFwiJXNcIiIs IGRzdCk7CisKKwkJb2Zmc2V0ICs9IHJiOworCX0KKworCWlmIChyYiA8IDApCisJCXBnX2ZhdGFs KCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogJW0iLCBkc3QpOworCisJcGdfZnJlZShidWZm ZXIpOworCWNsb3NlKHNyY19mZCk7CisJY2xvc2UoZGVzdF9mZCk7Cit9CisKKyNpZmRlZiBXSU4z Mgorc3RhdGljIHZvaWQKK2NvcHlfZmlsZV9jb3B5ZmlsZShjb25zdCBjaGFyICpzcmMsIGNvbnN0 IGNoYXIgKmRzdCkKK3sKKwlpZiAoQ29weUZpbGUoc3JjLCBkc3QsIHRydWUpID09IDApCisJewor CQlfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb3B5 IFwiJXNcIiB0byBcIiVzXCI6ICVtIiwgc3JjLCBkc3QpOworCX0KK30KKyNlbmRpZgkJCQkJCQkv KiBXSU4zMiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2NvcHlfZmls ZS5oIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2NvcHlfZmlsZS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjAzMTAzMGJhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvYmluL3BnX2NvbWJpbmViYWNrdXAvY29weV9maWxlLmgKQEAgLTAsMCArMSwxOSBAQAorLyoK KyAqIENvcHkgZW50aXJlIGZpbGVzLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKiBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvY29weV9maWxlLmgKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBDT1BZX0ZJTEVfSAorI2RlZmluZSBDT1BZX0ZJ TEVfSAorCisjaW5jbHVkZSAiY29tbW9uL2NoZWNrc3VtX2hlbHBlci5oIgorCitleHRlcm4gdm9p ZCBjb3B5X2ZpbGUoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QsCisJCQkJCSAgcGdf Y2hlY2tzdW1fY29udGV4dCAqY2hlY2tzdW1fY3R4LCBib29sIGRyeV9ydW4pOworCisjZW5kaWYJ CQkJCQkJLyogQ09QWV9GSUxFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJh Y2t1cC9sb2FkX21hbmlmZXN0LmMgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvbG9hZF9tYW5p ZmVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmFkMzIzMjNjOWMK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvbG9hZF9tYW5pZmVz dC5jCkBAIC0wLDAgKzEsMjQ1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBMb2FkIGRh dGEgZnJvbSBhIGJhY2t1cCBtYW5pZmVzdCBpbnRvIG1lbW9yeS4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2xvYWRf bWFuaWZlc3QuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0 Z3Jlc19mZS5oIgorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4K KworI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5o IgorI2luY2x1ZGUgImNvbW1vbi9wYXJzZV9tYW5pZmVzdC5oIgorI2luY2x1ZGUgImxvYWRfbWFu aWZlc3QuaCIKKworLyoKKyAqIEZvciBlZmZpY2llbmN5LCB3ZSdkIGxpa2Ugb3VyIGhhc2ggdGFi bGUgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIG1hbmlmZXN0IHRvIHN0YXJ0 IG91dCB3aXRoIGFwcHJveGltYXRlbHkgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGVudHJpZXMuCisg KiBUaGVyZSdzIG5vIHdheSB0byBrbm93IHRoZSBleGFjdCBudW1iZXIgb2YgZW50cmllcyB3aXRo b3V0IHJlYWRpbmcgdGhlIHdob2xlCisgKiBmaWxlLCBidXQgd2UgY2FuIGdldCBhbiBlc3RpbWF0 ZSBieSBkaXZpZGluZyB0aGUgZmlsZSBzaXplIGJ5IHRoZSBlc3RpbWF0ZWQKKyAqIG51bWJlciBv ZiBieXRlcyBwZXIgbGluZS4KKyAqCisgKiBUaGlzIGNvdWxkIGJlIG9mZiBieSBhYm91dCBhIGZh Y3RvciBvZiB0d28gaW4gZWl0aGVyIGRpcmVjdGlvbiwgYmVjYXVzZSB0aGUKKyAqIGNoZWNrc3Vt IGFsZ29yaXRobSBoYXMgYSBiaWcgaW1wYWN0IG9uIHRoZSBsaW5lIGxlbmd0aHM7IGUuZy4gYSBT SEE1MTIKKyAqIGNoZWNrc3VtIGlzIDEyOCBoZXggYnl0ZXMsIHdoZXJlYXMgYSBDUkMtMzJDIHZh bHVlIGlzIG9ubHkgOCwgYW5kIHRoZXJlCisgKiBtaWdodCBiZSBubyBjaGVja3N1bSBhdCBhbGwu CisgKi8KKyNkZWZpbmUgRVNUSU1BVEVEX0JZVEVTX1BFUl9NQU5JRkVTVF9MSU5FCTEwMAorCisv KgorICogRGVmaW5lIGEgaGFzaCB0YWJsZSB3aGljaCB3ZSBjYW4gdXNlIHRvIHN0b3JlIGluZm9y bWF0aW9uIGFib3V0IHRoZSBmaWxlcworICogbWVudGlvbmVkIGluIHRoZSBiYWNrdXAgbWFuaWZl c3QuCisgKi8KK3N0YXRpYyB1aW50MzIgaGFzaF9zdHJpbmdfcG9pbnRlcihjaGFyICpzKTsKKyNk ZWZpbmUgU0hfUFJFRklYCQltYW5pZmVzdF9maWxlcworI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUJ bWFuaWZlc3RfZmlsZQorI2RlZmluZSBTSF9LRVlfVFlQRQkJY2hhciAqCisjZGVmaW5lCVNIX0tF WQkJCXBhdGhuYW1lCisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCWhhc2hfc3RyaW5nX3Bv aW50ZXIoa2V5KQorI2RlZmluZSBTSF9FUVVBTCh0YiwgYSwgYikJCShzdHJjbXAoYSwgYikgPT0g MCkKKyNkZWZpbmUJU0hfU0NPUEUJCWV4dGVybgorI2RlZmluZSBTSF9SQVdfQUxMT0NBVE9SCXBn X21hbGxvYzAKKyNkZWZpbmUgU0hfREVGSU5FCisjaW5jbHVkZSAibGliL3NpbXBsZWhhc2guaCIK Kworc3RhdGljIHZvaWQgY29tYmluZWJhY2t1cF9wZXJfZmlsZV9jYihKc29uTWFuaWZlc3RQYXJz ZUNvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgIGNoYXIgKnBhdGhuYW1lLCBzaXplX3Qgc2l6 ZSwKKwkJCQkJCQkJCSAgcGdfY2hlY2tzdW1fdHlwZSBjaGVja3N1bV90eXBlLAorCQkJCQkJCQkJ ICBpbnQgY2hlY2tzdW1fbGVuZ3RoLAorCQkJCQkJCQkJICB1aW50OCAqY2hlY2tzdW1fcGF5bG9h ZCk7CitzdGF0aWMgdm9pZCBjb21iaW5lYmFja3VwX3Blcl93YWxfcmFuZ2VfY2IoSnNvbk1hbmlm ZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJCSAgIFRpbWVMaW5lSUQgdGxpLAor CQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgc3RhcnRfbHNuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQ dHIgZW5kX2xzbik7CitzdGF0aWMgdm9pZCByZXBvcnRfbWFuaWZlc3RfZXJyb3IoSnNvbk1hbmlm ZXN0UGFyc2VDb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmZtdCwuLi4p CisJCQlwZ19hdHRyaWJ1dGVfcHJpbnRmKDIsIDMpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwor CisvKgorICogTG9hZCBiYWNrdXBfbWFuaWZlc3QgZmlsZXMgZnJvbSBhbiBhcnJheSBvZiBiYWNr dXBzIGFuZCBwcm9kdWNlcyBhbiBhcnJheQorICogb2YgbWFuaWZlc3RfZGF0YSBvYmplY3RzLgor ICoKKyAqIE5COiBTaW5jZSBsb2FkX2JhY2t1cF9tYW5pZmVzdCgpIGNhbiByZXR1cm4gTlVMTCwg dGhlIHJlc3VsdGluZyBhcnJheSBjb3VsZAorICogY29udGFpbiBOVUxMIGVudHJpZXMuCisgKi8K K21hbmlmZXN0X2RhdGEgKioKK2xvYWRfYmFja3VwX21hbmlmZXN0cyhpbnQgbl9iYWNrdXBzLCBj aGFyICoqYmFja3VwX2RpcmVjdG9yaWVzKQoreworCW1hbmlmZXN0X2RhdGEgKipyZXN1bHQ7CisJ aW50CQkJaTsKKworCXJlc3VsdCA9IHBnX21hbGxvYyhzaXplb2YobWFuaWZlc3RfZGF0YSAqKSAq IG5fYmFja3Vwcyk7CisJZm9yIChpID0gMDsgaSA8IG5fYmFja3VwczsgKytpKQorCQlyZXN1bHRb aV0gPSBsb2FkX2JhY2t1cF9tYW5pZmVzdChiYWNrdXBfZGlyZWN0b3JpZXNbaV0pOworCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFBhcnNlIHRoZSBiYWNrdXBfbWFuaWZlc3QgZmlsZSBp biB0aGUgbmFtZWQgYmFja3VwIGRpcmVjdG9yeS4gQ29uc3RydWN0IGEKKyAqIGhhc2ggdGFibGUg d2l0aCBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIGZpbGVzIGl0IG1lbnRpb25zLCBhbmQgYSBs aW5rZWQKKyAqIGxpc3Qgb2YgYWxsIHRoZSBXQUwgcmFuZ2VzIGl0IG1lbnRpb25zLgorICoKKyAq IElmIHRoZSBiYWNrdXBfbWFuaWZlc3QgZmlsZSBzaW1wbHkgZG9lc24ndCBleGlzdCwgbG9ncyBh IHdhcm5pbmcgYW5kIHJldHVybnMKKyAqIE5VTEwuIEFueSBvdGhlciBlcnJvciwgb3IgYW55IGVy cm9yIHBhcnNpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLCBpcworICogZmF0YWwuCisgKi8K K21hbmlmZXN0X2RhdGEgKgorbG9hZF9iYWNrdXBfbWFuaWZlc3QoY2hhciAqYmFja3VwX2RpcmVj dG9yeSkKK3sKKwljaGFyCQlwYXRobmFtZVtNQVhQR1BBVEhdOworCWludAkJCWZkOworCXN0cnVj dCBzdGF0IHN0YXRidWY7CisJb2ZmX3QJCWVzdGltYXRlOworCXVpbnQzMgkJaW5pdGlhbF9zaXpl OworCW1hbmlmZXN0X2ZpbGVzX2hhc2ggKmh0OworCWNoYXIJICAgKmJ1ZmZlcjsKKwlpbnQJCQly YzsKKwlKc29uTWFuaWZlc3RQYXJzZUNvbnRleHQgY29udGV4dDsKKwltYW5pZmVzdF9kYXRhICpy ZXN1bHQ7CisKKwkvKiBPcGVuIHRoZSBtYW5pZmVzdCBmaWxlLiAqLworCXNucHJpbnRmKHBhdGhu YW1lLCBNQVhQR1BBVEgsICIlcy9iYWNrdXBfbWFuaWZlc3QiLCBiYWNrdXBfZGlyZWN0b3J5KTsK KwlpZiAoKGZkID0gb3BlbihwYXRobmFtZSwgT19SRE9OTFkgfCBQR19CSU5BUlksIDApKSA8IDAp CisJeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQl7CisJCQlwZ19sb2dfd2FybmluZygiXCIl c1wiIGRvZXMgbm90IGV4aXN0IiwgcGF0aG5hbWUpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJ cGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIHBhdGhuYW1lKTsKKwl9 CisKKwkvKiBGaWd1cmUgb3V0IGhvdyBiaWcgdGhlIG1hbmlmZXN0IGlzLiAqLworCWlmIChmc3Rh dChmZCwgJnN0YXRidWYpICE9IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgc3RhdCBmaWxlIFwi JXNcIjogJW0iLCBwYXRobmFtZSk7CisKKwkvKiBHdWVzcyBob3cgbGFyZ2UgdG8gbWFrZSB0aGUg aGFzaCB0YWJsZSBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2l6ZS4gKi8KKwllc3RpbWF0ZSA9IHN0 YXRidWYuc3Rfc2l6ZSAvIEVTVElNQVRFRF9CWVRFU19QRVJfTUFOSUZFU1RfTElORTsKKwlpbml0 aWFsX3NpemUgPSBNaW4oUEdfVUlOVDMyX01BWCwgTWF4KGVzdGltYXRlLCAyNTYpKTsKKworCS8q IENyZWF0ZSB0aGUgaGFzaCB0YWJsZS4gKi8KKwlodCA9IG1hbmlmZXN0X2ZpbGVzX2NyZWF0ZShp bml0aWFsX3NpemUsIE5VTEwpOworCisJLyoKKwkgKiBTbHVycCBpbiB0aGUgd2hvbGUgZmlsZS4K KwkgKgorCSAqIFRoaXMgaXMgbm90IGlkZWFsLCBidXQgdGhlcmUncyBjdXJyZW50bHkgbm8gd2F5 IHRvIGdldCBwZ19wYXJzZV9qc29uKCkKKwkgKiB0byBwZXJmb3JtIGluY3JlbWVudGFsIHBhcnNp bmcuCisJICovCisJYnVmZmVyID0gcGdfbWFsbG9jKHN0YXRidWYuc3Rfc2l6ZSk7CisJcmMgPSBy ZWFkKGZkLCBidWZmZXIsIHN0YXRidWYuc3Rfc2l6ZSk7CisJaWYgKHJjICE9IHN0YXRidWYuc3Rf c2l6ZSkKKwl7CisJCWlmIChyYyA8IDApCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZmls ZSBcIiVzXCI6ICVtIiwgcGF0aG5hbWUpOworCQllbHNlCisJCQlwZ19mYXRhbCgiY291bGQgbm90 IHJlYWQgZmlsZSBcIiVzXCI6IHJlYWQgJWQgb2YgJWxsZCIsCisJCQkJCSBwYXRobmFtZSwgcmMs IChsb25nIGxvbmcgaW50KSBzdGF0YnVmLnN0X3NpemUpOworCX0KKworCS8qIENsb3NlIHRoZSBt YW5pZmVzdCBmaWxlLiAqLworCWNsb3NlKGZkKTsKKworCS8qIFBhcnNlIHRoZSBtYW5pZmVzdC4g Ki8KKwlyZXN1bHQgPSBwZ19tYWxsb2MwKHNpemVvZihtYW5pZmVzdF9kYXRhKSk7CisJcmVzdWx0 LT5maWxlcyA9IGh0OworCWNvbnRleHQucHJpdmF0ZV9kYXRhID0gcmVzdWx0OworCWNvbnRleHQu cGVyX2ZpbGVfY2IgPSBjb21iaW5lYmFja3VwX3Blcl9maWxlX2NiOworCWNvbnRleHQucGVyX3dh bF9yYW5nZV9jYiA9IGNvbWJpbmViYWNrdXBfcGVyX3dhbF9yYW5nZV9jYjsKKwljb250ZXh0LmVy cm9yX2NiID0gcmVwb3J0X21hbmlmZXN0X2Vycm9yOworCWpzb25fcGFyc2VfbWFuaWZlc3QoJmNv bnRleHQsIGJ1ZmZlciwgc3RhdGJ1Zi5zdF9zaXplKTsKKworCS8qIEFsbCBkb25lLiAqLworCXBm cmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJlcG9ydCBhbiBlcnJv ciB3aGlsZSBwYXJzaW5nIHRoZSBtYW5pZmVzdC4KKyAqCisgKiBXZSBjb25zaWRlciBhbGwgc3Vj aCBlcnJvcnMgdG8gYmUgZmF0YWwgZXJyb3JzLiBUaGUgbWFuaWZlc3QgcGFyc2VyCisgKiBleHBl Y3RzIHRoaXMgZnVuY3Rpb24gbm90IHRvIHJldHVybi4KKyAqLworc3RhdGljIHZvaWQKK3JlcG9y dF9tYW5pZmVzdF9lcnJvcihKc29uTWFuaWZlc3RQYXJzZUNvbnRleHQgKmNvbnRleHQsIGNvbnN0 IGNoYXIgKmZtdCwuLi4pCit7CisJdmFfbGlzdAkJYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsK KwlwZ19sb2dfZ2VuZXJpY192KFBHX0xPR19FUlJPUiwgUEdfTE9HX1BSSU1BUlksIGdldHRleHQo Zm10KSwgYXApOworCXZhX2VuZChhcCk7CisKKwlleGl0KDEpOworfQorCisvKgorICogUmVjb3Jk IGRldGFpbHMgZXh0cmFjdGVkIGZyb20gdGhlIGJhY2t1cCBtYW5pZmVzdCBmb3Igb25lIGZpbGUu CisgKi8KK3N0YXRpYyB2b2lkCitjb21iaW5lYmFja3VwX3Blcl9maWxlX2NiKEpzb25NYW5pZmVz dFBhcnNlQ29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgY2hhciAqcGF0aG5hbWUsIHNpemVfdCBz aXplLAorCQkJCQkJICBwZ19jaGVja3N1bV90eXBlIGNoZWNrc3VtX3R5cGUsCisJCQkJCQkgIGlu dCBjaGVja3N1bV9sZW5ndGgsIHVpbnQ4ICpjaGVja3N1bV9wYXlsb2FkKQoreworCW1hbmlmZXN0 X2RhdGEgKm1hbmlmZXN0ID0gY29udGV4dC0+cHJpdmF0ZV9kYXRhOworCW1hbmlmZXN0X2ZpbGUg Km07CisJYm9vbAkJZm91bmQ7CisKKwkvKiBNYWtlIGEgbmV3IGVudHJ5IGluIHRoZSBoYXNoIHRh YmxlIGZvciB0aGlzIGZpbGUuICovCisJbSA9IG1hbmlmZXN0X2ZpbGVzX2luc2VydChtYW5pZmVz dC0+ZmlsZXMsIHBhdGhuYW1lLCAmZm91bmQpOworCWlmIChmb3VuZCkKKwkJcGdfZmF0YWwoImR1 cGxpY2F0ZSBwYXRoIG5hbWUgaW4gYmFja3VwIG1hbmlmZXN0OiBcIiVzXCIiLCBwYXRobmFtZSk7 CisKKwkvKiBJbml0aWFsaXplIHRoZSBlbnRyeS4gKi8KKwltLT5zaXplID0gc2l6ZTsKKwltLT5j aGVja3N1bV90eXBlID0gY2hlY2tzdW1fdHlwZTsKKwltLT5jaGVja3N1bV9sZW5ndGggPSBjaGVj a3N1bV9sZW5ndGg7CisJbS0+Y2hlY2tzdW1fcGF5bG9hZCA9IGNoZWNrc3VtX3BheWxvYWQ7Cit9 CisKKy8qCisgKiBSZWNvcmQgZGV0YWlscyBleHRyYWN0ZWQgZnJvbSB0aGUgYmFja3VwIG1hbmlm ZXN0IGZvciBvbmUgV0FMIHJhbmdlLgorICovCitzdGF0aWMgdm9pZAorY29tYmluZWJhY2t1cF9w ZXJfd2FsX3JhbmdlX2NiKEpzb25NYW5pZmVzdFBhcnNlQ29udGV4dCAqY29udGV4dCwKKwkJCQkJ CQkgICBUaW1lTGluZUlEIHRsaSwKKwkJCQkJCQkgICBYTG9nUmVjUHRyIHN0YXJ0X2xzbiwgWExv Z1JlY1B0ciBlbmRfbHNuKQoreworCW1hbmlmZXN0X2RhdGEgKm1hbmlmZXN0ID0gY29udGV4dC0+ cHJpdmF0ZV9kYXRhOworCW1hbmlmZXN0X3dhbF9yYW5nZSAqcmFuZ2U7CisKKwkvKiBBbGxvY2F0 ZSBhbmQgaW5pdGlhbGl6ZSBhIHN0cnVjdCBkZXNjcmliaW5nIHRoaXMgV0FMIHJhbmdlLiAqLwor CXJhbmdlID0gcGFsbG9jKHNpemVvZihtYW5pZmVzdF93YWxfcmFuZ2UpKTsKKwlyYW5nZS0+dGxp ID0gdGxpOworCXJhbmdlLT5zdGFydF9sc24gPSBzdGFydF9sc247CisJcmFuZ2UtPmVuZF9sc24g PSBlbmRfbHNuOworCXJhbmdlLT5wcmV2ID0gbWFuaWZlc3QtPmxhc3Rfd2FsX3JhbmdlOworCXJh bmdlLT5uZXh0ID0gTlVMTDsKKworCS8qIEFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiAq LworCWlmIChtYW5pZmVzdC0+Zmlyc3Rfd2FsX3JhbmdlID09IE5VTEwpCisJCW1hbmlmZXN0LT5m aXJzdF93YWxfcmFuZ2UgPSByYW5nZTsKKwllbHNlCisJCW1hbmlmZXN0LT5sYXN0X3dhbF9yYW5n ZS0+bmV4dCA9IHJhbmdlOworCW1hbmlmZXN0LT5sYXN0X3dhbF9yYW5nZSA9IHJhbmdlOworfQor CisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBtYW5pZmVzdF9maWxlcyBoYXNoIHRhYmxlLgor ICovCitzdGF0aWMgdWludDMyCitoYXNoX3N0cmluZ19wb2ludGVyKGNoYXIgKnMpCit7CisJdW5z aWduZWQgY2hhciAqc3MgPSAodW5zaWduZWQgY2hhciAqKSBzOworCisJcmV0dXJuIGhhc2hfYnl0 ZXMoc3MsIHN0cmxlbihzKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2NvbWJpbmViYWNr dXAvbG9hZF9tYW5pZmVzdC5oIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2xvYWRfbWFuaWZl c3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yYmZlZWZmMTU2Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2xvYWRfbWFuaWZlc3Qu aApAQCAtMCwwICsxLDY3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBMb2FkIGRhdGEg ZnJvbSBhIGJhY2t1cCBtYW5pZmVzdCBpbnRvIG1lbW9yeS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL2xvYWRfbWFu aWZlc3QuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIExPQURfTUFOSUZF U1RfSAorI2RlZmluZSBMT0FEX01BTklGRVNUX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVm cy5oIgorI2luY2x1ZGUgImNvbW1vbi9jaGVja3N1bV9oZWxwZXIuaCIKKworLyoKKyAqIEVhY2gg ZmlsZSBkZXNjcmliZWQgYnkgdGhlIG1hbmlmZXN0IGZpbGUgaXMgcGFyc2VkIHRvIHByb2R1Y2Ug YW4gb2JqZWN0CisgKiBsaWtlIHRoaXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IG1hbmlmZXN0X2Zp bGUKK3sKKwl1aW50MzIJCXN0YXR1czsJCQkvKiBoYXNoIHN0YXR1cyAqLworCWNoYXIJICAgKnBh dGhuYW1lOworCXNpemVfdAkJc2l6ZTsKKwlwZ19jaGVja3N1bV90eXBlIGNoZWNrc3VtX3R5cGU7 CisJaW50CQkJY2hlY2tzdW1fbGVuZ3RoOworCXVpbnQ4CSAgICpjaGVja3N1bV9wYXlsb2FkOwor fSBtYW5pZmVzdF9maWxlOworCisjZGVmaW5lIFNIX1BSRUZJWAkJbWFuaWZlc3RfZmlsZXMKKyNk ZWZpbmUgU0hfRUxFTUVOVF9UWVBFCW1hbmlmZXN0X2ZpbGUKKyNkZWZpbmUgU0hfS0VZX1RZUEUJ CWNoYXIgKgorI2RlZmluZQlTSF9TQ09QRQkJZXh0ZXJuCisjZGVmaW5lIFNIX1JBV19BTExPQ0FU T1IJcGdfbWFsbG9jMAorI2RlZmluZSBTSF9ERUNMQVJFCisjaW5jbHVkZSAibGliL3NpbXBsZWhh c2guaCIKKworLyoKKyAqIEVhY2ggV0FMIHJhbmdlIGRlc2NyaWJlZCBieSB0aGUgbWFuaWZlc3Qg ZmlsZSBpcyBwYXJzZWQgdG8gcHJvZHVjZSBhbgorICogb2JqZWN0IGxpa2UgdGhpcy4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgbWFuaWZlc3Rfd2FsX3JhbmdlCit7CisJVGltZUxpbmVJRAl0bGk7CisJ WExvZ1JlY1B0cglzdGFydF9sc247CisJWExvZ1JlY1B0cgllbmRfbHNuOworCXN0cnVjdCBtYW5p ZmVzdF93YWxfcmFuZ2UgKm5leHQ7CisJc3RydWN0IG1hbmlmZXN0X3dhbF9yYW5nZSAqcHJldjsK K30gbWFuaWZlc3Rfd2FsX3JhbmdlOworCisvKgorICogQWxsIHRoZSBkYXRhIHBhcnNlZCBmcm9t IGEgYmFja3VwX21hbmlmZXN0IGZpbGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IG1hbmlmZXN0X2Rh dGEKK3sKKwltYW5pZmVzdF9maWxlc19oYXNoICpmaWxlczsKKwltYW5pZmVzdF93YWxfcmFuZ2Ug KmZpcnN0X3dhbF9yYW5nZTsKKwltYW5pZmVzdF93YWxfcmFuZ2UgKmxhc3Rfd2FsX3JhbmdlOwor fSBtYW5pZmVzdF9kYXRhOworCitleHRlcm4gbWFuaWZlc3RfZGF0YSAqbG9hZF9iYWNrdXBfbWFu aWZlc3QoY2hhciAqYmFja3VwX2RpcmVjdG9yeSk7CitleHRlcm4gbWFuaWZlc3RfZGF0YSAqKmxv YWRfYmFja3VwX21hbmlmZXN0cyhpbnQgbl9iYWNrdXBzLAorCQkJCQkJCQkJCQkgY2hhciAqKmJh Y2t1cF9kaXJlY3Rvcmllcyk7CisKKyNlbmRpZgkJCQkJCQkvKiBMT0FEX01BTklGRVNUX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9tZXNvbi5idWlsZCBiL3NyYy9i aW4vcGdfY29tYmluZWJhY2t1cC9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi5lNDAyZDZmNTBlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19j b21iaW5lYmFja3VwL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChj KSAyMDIyLTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX2Nv bWJpbmViYWNrdXBfc291cmNlcyA9IGZpbGVzKAorICAncGdfY29tYmluZWJhY2t1cC5jJywKKyAg J2JhY2t1cF9sYWJlbC5jJywKKyAgJ2NvcHlfZmlsZS5jJywKKyAgJ2xvYWRfbWFuaWZlc3QuYycs CisgICdyZWNvbnN0cnVjdC5jJywKKyAgJ3dyaXRlX21hbmlmZXN0LmMnLAorKQorCitpZiBob3N0 X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcGdfY29tYmluZWJhY2t1cF9zb3VyY2VzICs9IHJjX2Jp bl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAn cGdfY29tYmluZWJhY2t1cCcsCisgICAgJy0tRklMRURFU0MnLCAncGdfY29tYmluZWJhY2t1cCAt IGNvbWJpbmUgaW5jcmVtZW50YWwgYmFja3VwcycsXSkKK2VuZGlmCisKK3BnX2NvbWJpbmViYWNr dXAgPSBleGVjdXRhYmxlKCdwZ19jb21iaW5lYmFja3VwJywKKyAgcGdfY29tYmluZWJhY2t1cF9z b3VyY2VzLAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlXSwKKyAga3dhcmdzOiBkZWZh dWx0X2Jpbl9hcmdzLAorKQorYmluX3RhcmdldHMgKz0gcGdfY29tYmluZWJhY2t1cAorCit0ZXN0 cyArPSB7CisgICduYW1lJzogJ3BnX2NvbWJpbmViYWNrdXAnLAorICAnc2QnOiBtZXNvbi5jdXJy ZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAg J3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfYmFzaWMucGwnLAorICAgICAg J3QvMDAyX2NvbXBhcmVfYmFja3Vwcy5wbCcsCisgICAgICAndC8wMDNfdGltZWxpbmUucGwnLAor ICAgICAgJ3QvMDA0X21hbmlmZXN0LnBsJywKKyAgICAgICd0LzAwNV9pbnRlZ3JpdHkucGwnLAor ICAgIF0sCisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9ubHMu bWsgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvbmxzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmM4ZTU5ZDFkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmlu L3BnX2NvbWJpbmViYWNrdXAvbmxzLm1rCkBAIC0wLDAgKzEsMTEgQEAKKyMgc3JjL2Jpbi9wZ19j b21iaW5lYmFja3VwL25scy5taworQ0FUQUxPR19OQU1FICAgICA9IHBnX2NvbWJpbmViYWNrdXAK K0dFVFRFWFRfRklMRVMgICAgPSAkKEZST05URU5EX0NPTU1PTl9HRVRURVhUX0ZJTEVTKSBcCisJ CSAgIGJhY2t1cF9sYWJlbC5jIFwKKwkJICAgY29weV9maWxlLmMgXAorCQkgICBsb2FkX21hbmlm ZXN0LmMgXAorCQkgICBwZ19jb21iaW5lYmFja3VwLmMgXAorCQkgICByZWNvbnN0cnVjdC5jIFwK KwkJICAgd3JpdGVfbWFuaWZlc3QuYworR0VUVEVYVF9UUklHR0VSUyA9ICQoRlJPTlRFTkRfQ09N TU9OX0dFVFRFWFRfVFJJR0dFUlMpCitHRVRURVhUX0ZMQUdTICAgID0gJChGUk9OVEVORF9DT01N T05fR0VUVEVYVF9GTEFHUykKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9w Z19jb21iaW5lYmFja3VwLmMgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvcGdfY29tYmluZWJh Y2t1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjg1ZDNmNGU1ZGUK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvcGdfY29tYmluZWJh Y2t1cC5jCkBAIC0wLDAgKzEsMTI4NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdf Y29tYmluZWJhY2t1cC5jCisgKgkJQ29tYmluZSBpbmNyZW1lbnRhbCBiYWNrdXBzIHdpdGggcHJp b3IgYmFja3Vwcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMywgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMv YmluL3BnX2NvbWJpbmViYWNrdXAvcGdfY29tYmluZWJhY2t1cC5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSA8ZGlyZW50 Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUg ImJhY2t1cF9sYWJlbC5oIgorI2luY2x1ZGUgImNvbW1vbi9ibGtyZWZ0YWJsZS5oIgorI2luY2x1 ZGUgImNvbW1vbi9jaGVja3N1bV9oZWxwZXIuaCIKKyNpbmNsdWRlICJjb21tb24vY29udHJvbGRh dGFfdXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiY29t bW9uL2ZpbGVfdXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUg ImNvcHlfZmlsZS5oIgorI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1 ZGUgImxpYi9zdHJpbmdpbmZvLmgiCisjaW5jbHVkZSAibG9hZF9tYW5pZmVzdC5oIgorI2luY2x1 ZGUgImdldG9wdF9sb25nLmgiCisjaW5jbHVkZSAicmVjb25zdHJ1Y3QuaCIKKyNpbmNsdWRlICJ3 cml0ZV9tYW5pZmVzdC5oIgorCisvKiBJbmNyZW1lbnRhbCBmaWxlIG5hbWluZyBjb252ZW50aW9u LiAqLworI2RlZmluZSBJTkNSRU1FTlRBTF9QUkVGSVgJCQkiSU5DUkVNRU5UQUwuIgorI2RlZmlu ZSBJTkNSRU1FTlRBTF9QUkVGSVhfTEVOR1RICShzaXplb2YoSU5DUkVNRU5UQUxfUFJFRklYKSAt IDEpCisKKy8qCisgKiBUcmFja2luZyBmb3IgZGlyZWN0b3JpZXMgdGhhdCBuZWVkIHRvIGJlIHJl bW92ZWQsIG9yIGhhdmUgdGhlaXIgY29udGVudHMKKyAqIHJlbW92ZWQsIGlmIHRoZSBvcGVyYXRp b24gZmFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNiX2NsZWFudXBfZGlyCit7CisJY2hhcgkg ICAqdGFyZ2V0X3BhdGg7CisJYm9vbAkJcm10b3BkaXI7CisJc3RydWN0IGNiX2NsZWFudXBfZGly ICpuZXh0OworfSBjYl9jbGVhbnVwX2RpcjsKKworLyoKKyAqIFN0b3JlcyBhIHRhYmxlc3BhY2Ug bWFwcGluZyBwcm92aWRlZCB1c2luZyAtVCwgLS10YWJsZXNwYWNlLW1hcHBpbmcuCisgKi8KK3R5 cGVkZWYgc3RydWN0IGNiX3RhYmxlc3BhY2VfbWFwcGluZworeworCWNoYXIJCW9sZF9kaXJbTUFY UEdQQVRIXTsKKwljaGFyCQluZXdfZGlyW01BWFBHUEFUSF07CisJc3RydWN0IGNiX3RhYmxlc3Bh Y2VfbWFwcGluZyAqbmV4dDsKK30gY2JfdGFibGVzcGFjZV9tYXBwaW5nOworCisvKgorICogU3Rv cmVzIGRhdGEgcGFyc2VkIGZyb20gYWxsIGNvbW1hbmQtbGluZSBvcHRpb25zLgorICovCit0eXBl ZGVmIHN0cnVjdCBjYl9vcHRpb25zCit7CisJYm9vbAkJZGVidWc7CisJY2hhcgkgICAqb3V0cHV0 OworCWJvb2wJCWRyeV9ydW47CisJYm9vbAkJbm9fc3luYzsKKwljYl90YWJsZXNwYWNlX21hcHBp bmcgKnRzbWFwcGluZ3M7CisJcGdfY2hlY2tzdW1fdHlwZSBtYW5pZmVzdF9jaGVja3N1bXM7CisJ Ym9vbAkJbm9fbWFuaWZlc3Q7CisJRGF0YURpclN5bmNNZXRob2Qgc3luY19tZXRob2Q7Cit9IGNi X29wdGlvbnM7CisKKy8qCisgKiBEYXRhIGFib3V0IGEgdGFibGVzcGFjZS4KKyAqCisgKiBFdmVy eSBub3JtYWwgdGFibGVzcGFjZSBuZWVkcyBhIHRhYmxlc3BhY2UgbWFwcGluZywgYnV0IGluLXBs YWNlIHRhYmxlc3BhY2VzCisgKiBkb24ndCwgc28gdGhlIGxpc3Qgb2YgdGFibGVzcGFjZXMgY2Fu IGNvbnRhaW4gbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGxpc3Qgb2YKKyAqIHRhYmxlc3BhY2UgbWFw cGluZ3MuCisgKi8KK3R5cGVkZWYgc3RydWN0IGNiX3RhYmxlc3BhY2UKK3sKKwlPaWQJCQlvaWQ7 CisJYm9vbAkJaW5fcGxhY2U7CisJY2hhcgkJb2xkX2RpcltNQVhQR1BBVEhdOworCWNoYXIJCW5l d19kaXJbTUFYUEdQQVRIXTsKKwlzdHJ1Y3QgY2JfdGFibGVzcGFjZSAqbmV4dDsKK30gY2JfdGFi bGVzcGFjZTsKKworLyogRGlyZWN0b3JpZXMgdG8gYmUgcmVtb3ZlZCBpZiB3ZSBleGl0IHVuY2xl YW5seS4gKi8KK2NiX2NsZWFudXBfZGlyICpjbGVhbnVwX2Rpcl9saXN0ID0gTlVMTDsKKworc3Rh dGljIHZvaWQgYWRkX3RhYmxlc3BhY2VfbWFwcGluZyhjYl9vcHRpb25zICpvcHQsIGNoYXIgKmFy Zyk7CitzdGF0aWMgU3RyaW5nSW5mbyBjaGVja19iYWNrdXBfbGFiZWxfZmlsZXMoaW50IG5fYmFj a3VwcywgY2hhciAqKmJhY2t1cF9kaXJzKTsKK3N0YXRpYyB2b2lkIGNoZWNrX2NvbnRyb2xfZmls ZXMoaW50IG5fYmFja3VwcywgY2hhciAqKmJhY2t1cF9kaXJzKTsKK3N0YXRpYyB2b2lkIGNoZWNr X2lucHV0X2Rpcl9wZXJtaXNzaW9ucyhjaGFyICpkaXIpOworc3RhdGljIHZvaWQgY2xlYW51cF9k aXJlY3Rvcmllc19hdGV4aXQodm9pZCk7CitzdGF0aWMgdm9pZCBjcmVhdGVfb3V0cHV0X2RpcmVj dG9yeShjaGFyICpkaXJuYW1lLCBjYl9vcHRpb25zICpvcHQpOworc3RhdGljIHZvaWQgaGVscChj b25zdCBjaGFyICpwcm9nbmFtZSk7CitzdGF0aWMgYm9vbCBwYXJzZV9vaWQoY2hhciAqcywgT2lk ICpyZXN1bHQpOworc3RhdGljIHZvaWQgcHJvY2Vzc19kaXJlY3RvcnlfcmVjdXJzaXZlbHkoT2lk IHRzb2lkLAorCQkJCQkJCQkJCSAgY2hhciAqaW5wdXRfZGlyZWN0b3J5LAorCQkJCQkJCQkJCSAg Y2hhciAqb3V0cHV0X2RpcmVjdG9yeSwKKwkJCQkJCQkJCQkgIGNoYXIgKnJlbGF0aXZlX3BhdGgs CisJCQkJCQkJCQkJICBpbnQgbl9wcmlvcl9iYWNrdXBzLAorCQkJCQkJCQkJCSAgY2hhciAqKnBy aW9yX2JhY2t1cF9kaXJzLAorCQkJCQkJCQkJCSAgbWFuaWZlc3RfZGF0YSAqKm1hbmlmZXN0cywK KwkJCQkJCQkJCQkgIG1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciwKKwkJCQkJCQkJCQkgIGNiX29w dGlvbnMgKm9wdCk7CitzdGF0aWMgaW50CXJlYWRfcGdfdmVyc2lvbl9maWxlKGNoYXIgKmRpcmVj dG9yeSk7CitzdGF0aWMgdm9pZCByZW1lbWJlcl90b19jbGVhbnVwX2RpcmVjdG9yeShjaGFyICp0 YXJnZXRfcGF0aCwgYm9vbCBybXRvcGRpcik7CitzdGF0aWMgdm9pZCByZXNldF9kaXJlY3Rvcnlf Y2xlYW51cF9saXN0KHZvaWQpOworc3RhdGljIGNiX3RhYmxlc3BhY2UgKnNjYW5fZm9yX2V4aXN0 aW5nX3RhYmxlc3BhY2VzKGNoYXIgKnBhdGhuYW1lLAorCQkJCQkJCQkJCQkJCWNiX29wdGlvbnMg Km9wdCk7CitzdGF0aWMgdm9pZCBzbHVycF9maWxlKGludCBmZCwgY2hhciAqZmlsZW5hbWUsIFN0 cmluZ0luZm8gYnVmLCBpbnQgbWF4bGVuKTsKKworLyoKKyAqIE1haW4gcHJvZ3JhbS4KKyAqLwor aW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RhdGljIHN0cnVjdCBvcHRp b24gbG9uZ19vcHRpb25zW10gPSB7CisJCXsiZGVidWciLCBub19hcmd1bWVudCwgTlVMTCwgJ2Qn fSwKKwkJeyJkcnktcnVuIiwgbm9fYXJndW1lbnQsIE5VTEwsICduJ30sCisJCXsibm8tc3luYyIs IG5vX2FyZ3VtZW50LCBOVUxMLCAnTid9LAorCQl7Im91dHB1dCIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAnbyd9LAorCQl7InRhYmxlc3BhY2UtbWFwcGluZyIsIG5vX2FyZ3VtZW50LCBOVUxM LCAnVCd9LAorCQl7Im1hbmlmZXN0LWNoZWNrc3VtcyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCAxfSwKKwkJeyJuby1tYW5pZmVzdCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAyfSwKKwkJeyJzeW5j LW1ldGhvZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAzfSwKKwkJe05VTEwsIDAsIE5VTEws IDB9CisJfTsKKworCWNvbnN0IGNoYXIgKnByb2duYW1lOworCWNoYXIJICAgKmxhc3RfaW5wdXRf ZGlyOworCWludAkJCW9wdGluZGV4OworCWludAkJCWM7CisJaW50CQkJbl9iYWNrdXBzOworCWlu dAkJCW5fcHJpb3JfYmFja3VwczsKKwlpbnQJCQl2ZXJzaW9uOworCWNoYXIJICAqKnByaW9yX2Jh Y2t1cF9kaXJzOworCWNiX29wdGlvbnMJb3B0OworCWNiX3RhYmxlc3BhY2UgKnRhYmxlc3BhY2Vz OworCWNiX3RhYmxlc3BhY2UgKnRzOworCVN0cmluZ0luZm8JbGFzdF9iYWNrdXBfbGFiZWw7CisJ bWFuaWZlc3RfZGF0YSAqKm1hbmlmZXN0czsKKwltYW5pZmVzdF93cml0ZXIgKm13cml0ZXI7CisK KwlwZ19sb2dnaW5nX2luaXQoYXJndlswXSk7CisJcHJvZ25hbWUgPSBnZXRfcHJvZ25hbWUoYXJn dlswXSk7CisJaGFuZGxlX2hlbHBfdmVyc2lvbl9vcHRzKGFyZ2MsIGFyZ3YsIHByb2duYW1lLCBo ZWxwKTsKKworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0Lm1hbmlmZXN0X2No ZWNrc3VtcyA9IENIRUNLU1VNX1RZUEVfQ1JDMzJDOworCW9wdC5zeW5jX21ldGhvZCA9IERBVEFf RElSX1NZTkNfTUVUSE9EX0ZTWU5DOworCisJLyogcHJvY2VzcyBjb21tYW5kLWxpbmUgb3B0aW9u cyAqLworCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJkbk5QbzpUOiIsCisJ CQkJCQkJbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKKwl7CisJCXN3aXRjaCAoYykK KwkJeworCQkJY2FzZSAnZCc6CisJCQkJb3B0LmRlYnVnID0gdHJ1ZTsKKwkJCQlwZ19sb2dnaW5n X2luY3JlYXNlX3ZlcmJvc2l0eSgpOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJb3B0 LmRyeV9ydW4gPSB0cnVlOworCQkJCWJyZWFrOworCQkJY2FzZSAnTic6CisJCQkJb3B0Lm5vX3N5 bmMgPSB0cnVlOworCQkJCWJyZWFrOworCQkJY2FzZSAnbyc6CisJCQkJb3B0Lm91dHB1dCA9IG9w dGFyZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCWFkZF90YWJsZXNwYWNlX21hcHBp bmcoJm9wdCwgb3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlpZiAoIXBnX2No ZWNrc3VtX3BhcnNlX3R5cGUob3B0YXJnLAorCQkJCQkJCQkJCQkmb3B0Lm1hbmlmZXN0X2NoZWNr c3VtcykpCisJCQkJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgY2hlY2tzdW0gYWxnb3JpdGhtOiBc IiVzXCIiLAorCQkJCQkJCSBvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCW9w dC5ub19tYW5pZmVzdCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJaWYgKCFw YXJzZV9zeW5jX21ldGhvZChvcHRhcmcsICZvcHQuc3luY19tZXRob2QpKQorCQkJCQlleGl0KDEp OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVt aXR0ZWQgYSBjb21wbGFpbnQgKi8KKwkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1o ZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJCWV4aXQoMSk7CisJ CX0KKwl9CisKKwlpZiAob3B0aW5kID49IGFyZ2MpCisJeworCQlwZ19sb2dfZXJyb3IoIiVzOiBu byBpbnB1dCBkaXJlY3RvcmllcyBzcGVjaWZpZWQiLCBwcm9nbmFtZSk7CisJCXBnX2xvZ19lcnJv cl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFt ZSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKG9wdC5vdXRwdXQgPT0gTlVMTCkKKwkJcGdfZmF0 YWwoIm5vIG91dHB1dCBkaXJlY3Rvcnkgc3BlY2lmaWVkIik7CisKKwkvKiBJZiBubyBtYW5pZmVz dCBpcyBuZWVkZWQsIG5vIGNoZWNrc3VtcyBhcmUgbmVlZGVkLCBlaXRoZXIuICovCisJaWYgKG9w dC5ub19tYW5pZmVzdCkKKwkJb3B0Lm1hbmlmZXN0X2NoZWNrc3VtcyA9IENIRUNLU1VNX1RZUEVf Tk9ORTsKKworCS8qIFJlYWQgdGhlIHNlcnZlciB2ZXJzaW9uIGZyb20gdGhlIGZpbmFsIGJhY2t1 cC4gKi8KKwl2ZXJzaW9uID0gcmVhZF9wZ192ZXJzaW9uX2ZpbGUoYXJndlthcmdjIC0gMV0pOwor CisJLyogU2FuaXR5LWNoZWNrIGNvbnRyb2wgZmlsZXMuICovCisJbl9iYWNrdXBzID0gYXJnYyAt IG9wdGluZDsKKwljaGVja19jb250cm9sX2ZpbGVzKG5fYmFja3VwcywgYXJndiArIG9wdGluZCk7 CisKKwkvKiBTYW5pdHktY2hlY2sgYmFja3VwX2xhYmVsIGZpbGVzLCBhbmQgZ2V0IHRoZSBjb250 ZW50cyBvZiB0aGUgbGFzdCBvbmUuICovCisJbGFzdF9iYWNrdXBfbGFiZWwgPSBjaGVja19iYWNr dXBfbGFiZWxfZmlsZXMobl9iYWNrdXBzLCBhcmd2ICsgb3B0aW5kKTsKKworCS8qCisJICogV2Un bGwgbmVlZCB0aGUgcGF0aG5hbWVzIHRvIHRoZSBwcmlvciBiYWNrdXBzLiBCeSAicHJpb3IiIHdl IG1lYW4gYWxsCisJICogYnV0IHRoZSBsYXN0IG9uZSBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGlu ZS4KKwkgKi8KKwluX3ByaW9yX2JhY2t1cHMgPSBhcmdjIC0gb3B0aW5kIC0gMTsKKwlwcmlvcl9i YWNrdXBfZGlycyA9IGFyZ3YgKyBvcHRpbmQ7CisKKwkvKiBMb2FkIGJhY2t1cCBtYW5pZmVzdHMu ICovCisJbWFuaWZlc3RzID0gbG9hZF9iYWNrdXBfbWFuaWZlc3RzKG5fYmFja3VwcywgcHJpb3Jf YmFja3VwX2RpcnMpOworCisJLyogRmlndXJlIG91dCB3aGljaCB0YWJsZXNwYWNlcyBhcmUgZ29p bmcgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gKi8KKwlsYXN0X2lucHV0X2RpciA9IGFy Z3ZbYXJnYyAtIDFdOworCWNoZWNrX2lucHV0X2Rpcl9wZXJtaXNzaW9ucyhsYXN0X2lucHV0X2Rp cik7CisJdGFibGVzcGFjZXMgPSBzY2FuX2Zvcl9leGlzdGluZ190YWJsZXNwYWNlcyhsYXN0X2lu cHV0X2RpciwgJm9wdCk7CisKKwkvKgorCSAqIENyZWF0ZSBvdXRwdXQgZGlyZWN0b3JpZXMuCisJ ICoKKwkgKiBXZSBjcmVhdGUgb25lIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBtYWluIGRhdGEg ZGlyZWN0b3J5IHBsdXMgb25lIGZvcgorCSAqIGVhY2ggbm9uLWluLXBsYWNlIHRhYmxlc3BhY2Uu IGNyZWF0ZV9vdXRwdXRfZGlyZWN0b3J5KCkgd2lsbCBhcnJhbmdlCisJICogZm9yIHRob3NlIGRp cmVjdG9yaWVzIHRvIGJlIGNsZWFuZWQgdXAgb24gZmFpbHVyZS4gSW4tcGxhY2UgdGFibGVzcGFj ZXMKKwkgKiBhcmVuJ3QgaGFuZGxlZCBhdCB0aGlzIHN0YWdlIGJlY2F1c2UgdGhleSdyZSBsb2Nh dGVkIGJlbmVhdGggdGhlIG1haW4KKwkgKiBvdXRwdXQgZGlyZWN0b3J5LCBhbmQgdGh1cyB0aGUg Y2xlYW51cCBvZiB0aGF0IGRpcmVjdG9yeSB3aWxsIGdldCByaWQKKwkgKiBvZiB0aGVtLiBQbHVz LCB0aGUgcGdfdGJsc3BjIGRpcmVjdG9yeSB0aGF0IG5lZWRzIHRvIGNvbnRhaW4gdGhlbQorCSAq IGRvZXNuJ3QgZXhpc3QgeWV0LgorCSAqLworCWF0ZXhpdChjbGVhbnVwX2RpcmVjdG9yaWVzX2F0 ZXhpdCk7CisJY3JlYXRlX291dHB1dF9kaXJlY3Rvcnkob3B0Lm91dHB1dCwgJm9wdCk7CisJZm9y ICh0cyA9IHRhYmxlc3BhY2VzOyB0cyAhPSBOVUxMOyB0cyA9IHRzLT5uZXh0KQorCQlpZiAoIXRz LT5pbl9wbGFjZSkKKwkJCWNyZWF0ZV9vdXRwdXRfZGlyZWN0b3J5KHRzLT5uZXdfZGlyLCAmb3B0 KTsKKworCS8qIElmIHdlIG5lZWQgdG8gd3JpdGUgYSBiYWNrdXBfbWFuaWZlc3QsIHByZXBhcmUg dG8gZG8gc28uICovCisJaWYgKCFvcHQuZHJ5X3J1biAmJiAhb3B0Lm5vX21hbmlmZXN0KQorCXsK KwkJbXdyaXRlciA9IGNyZWF0ZV9tYW5pZmVzdF93cml0ZXIob3B0Lm91dHB1dCk7CisKKwkJLyoK KwkJICogVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGJhY2t1cCBtYW5pZmVzdCBmb3IgdGhlIGZpbmFs IGJhY2t1cDsgZWxzZSB3ZQorCQkgKiB3b24ndCBoYXZlIHRoZSBXQUwgcmFuZ2VzIGZvciB0aGUg cmVzdWx0aW5nIG1hbmlmZXN0LgorCQkgKi8KKwkJaWYgKG1hbmlmZXN0c1tuX3ByaW9yX2JhY2t1 cHNdID09IE5VTEwpCisJCQlwZ19mYXRhbCgiY2FuJ3QgZ2VuZXJhdGUgYSBtYW5pZmVzdCBiZWNh dXNlIG5vIG1hbmlmZXN0IGlzIGF2YWlsYWJsZSBmb3IgdGhlIGZpbmFsIGlucHV0IGJhY2t1cCIp OworCX0KKwllbHNlCisJCW13cml0ZXIgPSBOVUxMOworCisJLyogV3JpdGUgYmFja3VwIGxhYmVs IGludG8gb3V0cHV0IGRpcmVjdG9yeS4gKi8KKwlpZiAob3B0LmRyeV9ydW4pCisJCXBnX2xvZ19k ZWJ1Zygid291bGQgZ2VuZXJhdGUgXCIlcy9iYWNrdXBfbGFiZWxcIiIsIG9wdC5vdXRwdXQpOwor CWVsc2UKKwl7CisJCXBnX2xvZ19kZWJ1ZygiZ2VuZXJhdGluZyBcIiVzL2JhY2t1cF9sYWJlbFwi Iiwgb3B0Lm91dHB1dCk7CisJCWxhc3RfYmFja3VwX2xhYmVsLT5jdXJzb3IgPSAwOworCQl3cml0 ZV9iYWNrdXBfbGFiZWwob3B0Lm91dHB1dCwgbGFzdF9iYWNrdXBfbGFiZWwsCisJCQkJCQkgICBv cHQubWFuaWZlc3RfY2hlY2tzdW1zLCBtd3JpdGVyKTsKKwl9CisKKwkvKiBQcm9jZXNzIGV2ZXJ5 dGhpbmcgdGhhdCdzIG5vdCBwYXJ0IG9mIGEgdXNlci1kZWZpbmVkIHRhYmxlc3BhY2UuICovCisJ cGdfbG9nX2RlYnVnKCJwcm9jZXNzaW5nIGJhY2t1cCBkaXJlY3RvcnkgXCIlc1wiIiwgbGFzdF9p bnB1dF9kaXIpOworCXByb2Nlc3NfZGlyZWN0b3J5X3JlY3Vyc2l2ZWx5KEludmFsaWRPaWQsIGxh c3RfaW5wdXRfZGlyLCBvcHQub3V0cHV0LAorCQkJCQkJCQkgIE5VTEwsIG5fcHJpb3JfYmFja3Vw cywgcHJpb3JfYmFja3VwX2RpcnMsCisJCQkJCQkJCSAgbWFuaWZlc3RzLCBtd3JpdGVyLCAmb3B0 KTsKKworCS8qIFByb2Nlc3MgdXNlci1kZWZpbmVkIHRhYmxlc3BhY2VzLiAqLworCWZvciAodHMg PSB0YWJsZXNwYWNlczsgdHMgIT0gTlVMTDsgdHMgPSB0cy0+bmV4dCkKKwl7CisJCXBnX2xvZ19k ZWJ1ZygicHJvY2Vzc2luZyB0YWJsZXNwYWNlIGRpcmVjdG9yeSBcIiVzXCIiLCB0cy0+b2xkX2Rp cik7CisKKwkJLyoKKwkJICogSWYgaXQncyBhIG5vcm1hbCB0YWJsZXNwYWNlLCB3ZSBuZWVkIHRv IHNldCB1cCBhIHN5bWJvbGljIGxpbmsgZnJvbQorCQkgKiBwZ190YmxzcGMvJHtPSUR9IHRvIHRo ZSB0YXJnZXQgZGlyZWN0b3J5OyBpZiBpdCdzIGFuIGluLXBsYWNlCisJCSAqIHRhYmxlc3BhY2Us IHdlIG5lZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IGF0IHBnX3RibHNwYy8ke09JRH0uCisJCSAq LworCQlpZiAoIXRzLT5pbl9wbGFjZSkKKwkJeworCQkJY2hhcgkJbGlua3BhdGhbTUFYUEdQQVRI XTsKKworCQkJc25wcmludGYobGlua3BhdGgsIE1BWFBHUEFUSCwgIiVzL3BnX3RibHNwYy8ldSIs IG9wdC5vdXRwdXQsCisJCQkJCSB0cy0+b2lkKTsKKworCQkJaWYgKG9wdC5kcnlfcnVuKQorCQkJ CXBnX2xvZ19kZWJ1Zygid291bGQgY3JlYXRlIHN5bWJvbGljIGxpbmsgZnJvbSBcIiVzXCIgdG8g XCIlc1wiIiwKKwkJCQkJCQkgbGlua3BhdGgsIHRzLT5uZXdfZGlyKTsKKwkJCWVsc2UKKwkJCXsK KwkJCQlwZ19sb2dfZGVidWcoImNyZWF0aW5nIHN5bWJvbGljIGxpbmsgZnJvbSBcIiVzXCIgdG8g XCIlc1wiIiwKKwkJCQkJCQkgbGlua3BhdGgsIHRzLT5uZXdfZGlyKTsKKwkJCQlpZiAoc3ltbGlu ayh0cy0+bmV3X2RpciwgbGlua3BhdGgpICE9IDApCisJCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg Y3JlYXRlIHN5bWJvbGljIGxpbmsgZnJvbSBcIiVzXCIgdG8gXCIlc1wiOiAlbSIsCisJCQkJCQkJ IGxpbmtwYXRoLCB0cy0+bmV3X2Rpcik7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAo b3B0LmRyeV9ydW4pCisJCQkJcGdfbG9nX2RlYnVnKCJ3b3VsZCBjcmVhdGUgZGlyZWN0b3J5IFwi JXNcIiIsIHRzLT5uZXdfZGlyKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlwZ19sb2dfZGVidWcoImNy ZWF0aW5nIGRpcmVjdG9yeSBcIiVzXCIiLCB0cy0+bmV3X2Rpcik7CisJCQkJaWYgKHBnX21rZGly X3AodHMtPm5ld19kaXIsIHBnX2Rpcl9jcmVhdGVfbW9kZSkgPT0gLTEpCisJCQkJCXBnX2ZhdGFs KCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwKKwkJCQkJCQkgdHMtPm5l d19kaXIpOworCQkJfQorCQl9CisKKwkJLyogT0ssIG5vdyBoYW5kbGUgdGhlIGRpcmVjdG9yeSBj b250ZW50cy4gKi8KKwkJcHJvY2Vzc19kaXJlY3RvcnlfcmVjdXJzaXZlbHkodHMtPm9pZCwgdHMt Pm9sZF9kaXIsIHRzLT5uZXdfZGlyLAorCQkJCQkJCQkJICBOVUxMLCBuX3ByaW9yX2JhY2t1cHMs IHByaW9yX2JhY2t1cF9kaXJzLAorCQkJCQkJCQkJICBtYW5pZmVzdHMsIG13cml0ZXIsICZvcHQp OworCX0KKworCS8qIEZpbmFsaXplIHRoZSBiYWNrdXBfbWFuaWZlc3QsIGlmIHdlJ3JlIGdlbmVy YXRpbmcgb25lLiAqLworCWlmIChtd3JpdGVyICE9IE5VTEwpCisJCWZpbmFsaXplX21hbmlmZXN0 KG13cml0ZXIsCisJCQkJCQkgIG1hbmlmZXN0c1tuX3ByaW9yX2JhY2t1cHNdLT5maXJzdF93YWxf cmFuZ2UpOworCisJLyogZnN5bmMgdGhhdCBvdXRwdXQgZGlyZWN0b3J5IHVubGVzcyB3ZSd2ZSBi ZWVuIHRvbGQgbm90IHRvIGRvIHNvICovCisJaWYgKCFvcHQubm9fc3luYykKKwl7CisJCWlmIChv cHQuZHJ5X3J1bikKKwkJCXBnX2xvZ19kZWJ1Zygid291bGQgcmVjdXJzaXZlbHkgZnN5bmMgXCIl c1wiIiwgb3B0Lm91dHB1dCk7CisJCWVsc2UKKwkJeworCQkJcGdfbG9nX2RlYnVnKCJyZWN1cnNp dmVseSBmc3luY2luZyBcIiVzXCIiLCBvcHQub3V0cHV0KTsKKwkJCXN5bmNfcGdkYXRhKG9wdC5v dXRwdXQsIHZlcnNpb24gKiAxMDAwMCwgb3B0LnN5bmNfbWV0aG9kKTsKKwkJfQorCX0KKworCS8q IEl0J3MgYSBzdWNjZXNzLCBzbyBkb24ndCByZW1vdmUgdGhlIG91dHB1dCBkaXJlY3Rvcmllcy4g Ki8KKwlyZXNldF9kaXJlY3RvcnlfY2xlYW51cF9saXN0KCk7CisJZXhpdCgwKTsKK30KKworLyoK KyAqIFByb2Nlc3MgdGhlIG9wdGlvbiBhcmd1bWVudCBmb3IgdGhlIC1ULCAtLXRhYmxlc3BhY2Ut bWFwcGluZyBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkCithZGRfdGFibGVzcGFjZV9tYXBwaW5n KGNiX29wdGlvbnMgKm9wdCwgY2hhciAqYXJnKQoreworCWNiX3RhYmxlc3BhY2VfbWFwcGluZyAq dHNtYXAgPSBwZ19tYWxsb2MwKHNpemVvZihjYl90YWJsZXNwYWNlX21hcHBpbmcpKTsKKwljaGFy CSAgICpkc3Q7CisJY2hhcgkgICAqZHN0X3B0cjsKKwljaGFyCSAgICphcmdfcHRyOworCisJLyoK KwkgKiBCYXNpY2FsbHksIHdlIGp1c3Qgd2FudCB0byBjb3B5IGV2ZXJ5dGhpbmcgYmVmb3JlIHRo ZSBlcXVhbHMgc2lnbiB0bworCSAqIHRzbWFwLT5vbGRfZGlyIGFuZCBldmVyeXRoaW5nIGFmdGVy d2FyZHMgdG8gdHNtYXAtPm5ld19kaXIsIGJ1dCBpZgorCSAqIHRoZXJlJ3MgbW9yZSBvciBsZXNz IHRoYW4gb25lIGVxdWFscyBzaWduLCB0aGF0J3MgYW4gZXJyb3IsIGFuZCBpZgorCSAqIHRoZXJl J3MgYW4gZXF1YWxzIHNpZ24gcHJlY2VkZWQgYnkgYSBiYWNrc2xhc2gsIGRvbid0IHRyZWF0IGl0 IGFzIGEKKwkgKiBmaWVsZCBzZXBhcmF0b3IgYnV0IGluc3RlYWQgY29weSBhIGxpdGVyYWwgZXF1 YWxzIHNpZ24uCisJICovCisJZHN0X3B0ciA9IGRzdCA9IHRzbWFwLT5vbGRfZGlyOworCWZvciAo YXJnX3B0ciA9IGFyZzsgKmFyZ19wdHIgIT0gJ1wwJzsgYXJnX3B0cisrKQorCXsKKwkJaWYgKGRz dF9wdHIgLSBkc3QgPj0gTUFYUEdQQVRIKQorCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRv byBsb25nIik7CisKKwkJaWYgKCphcmdfcHRyID09ICdcXCcgJiYgKihhcmdfcHRyICsgMSkgPT0g Jz0nKQorCQkJOwkJCQkJLyogc2tpcCBiYWNrc2xhc2ggZXNjYXBpbmcgPSAqLworCQllbHNlIGlm ICgqYXJnX3B0ciA9PSAnPScgJiYgKGFyZ19wdHIgPT0gYXJnIHx8ICooYXJnX3B0ciAtIDEpICE9 ICdcXCcpKQorCQl7CisJCQlpZiAodHNtYXAtPm5ld19kaXJbMF0gIT0gJ1wwJykKKwkJCQlwZ19m YXRhbCgibXVsdGlwbGUgXCI9XCIgc2lnbnMgaW4gdGFibGVzcGFjZSBtYXBwaW5nIik7CisJCQll bHNlCisJCQkJZHN0ID0gZHN0X3B0ciA9IHRzbWFwLT5uZXdfZGlyOworCQl9CisJCWVsc2UKKwkJ CSpkc3RfcHRyKysgPSAqYXJnX3B0cjsKKwl9CisJaWYgKCF0c21hcC0+b2xkX2RpclswXSB8fCAh dHNtYXAtPm5ld19kaXJbMF0pCisJCXBnX2ZhdGFsKCJpbnZhbGlkIHRhYmxlc3BhY2UgbWFwcGlu ZyBmb3JtYXQgXCIlc1wiLCBtdXN0IGJlIFwiT0xERElSPU5FV0RJUlwiIiwgYXJnKTsKKworCS8q CisJICogQWxsIHRhYmxlc3BhY2VzIGFyZSBjcmVhdGVkIHdpdGggYWJzb2x1dGUgZGlyZWN0b3Jp ZXMsIHNvIHNwZWNpZnlpbmcgYQorCSAqIG5vbi1hYnNvbHV0ZSBwYXRoIGhlcmUgd291bGQgbmV2 ZXIgbWF0Y2gsIHBvc3NpYmx5IGNvbmZ1c2luZyB1c2Vycy4KKwkgKgorCSAqIEluIGNvbnRyYXN0 IHRvIHBnX2Jhc2ViYWNrdXAsIGJvdGggdGhlIG9sZCBhbmQgbmV3IGRpcmVjdG9yaWVzIGFyZSBv bgorCSAqIHRoZSBsb2NhbCBtYWNoaW5lLCBzbyB0aGUgbG9jYWwgbWFjaGluZSdzIGRlZmluaXRp b24gb2YgYW4gYWJzb2x1dGUKKwkgKiBwYXRoIGlzIHRoZSBvbmx5IHJlbGV2YW50IG9uZS4KKwkg Ki8KKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgodHNtYXAtPm9sZF9kaXIpKQorCQlwZ19mYXRhbCgi b2xkIGRpcmVjdG9yeSBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aCBpbiB0YWJsZXNwYWNlIG1hcHBp bmc6ICVzIiwKKwkJCQkgdHNtYXAtPm9sZF9kaXIpOworCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRo KHRzbWFwLT5uZXdfZGlyKSkKKwkJcGdfZmF0YWwoIm9sZCBkaXJlY3RvcnkgaXMgbm90IGFuIGFi c29sdXRlIHBhdGggaW4gdGFibGVzcGFjZSBtYXBwaW5nOiAlcyIsCisJCQkJIHRzbWFwLT5uZXdf ZGlyKTsKKworCS8qIENhbm9uaWNhbGl6ZSBwYXRocyB0byBhdm9pZCBzcHVyaW91cyBmYWlsdXJl cyB3aGVuIGNvbXBhcmluZy4gKi8KKwljYW5vbmljYWxpemVfcGF0aCh0c21hcC0+b2xkX2Rpcik7 CisJY2Fub25pY2FsaXplX3BhdGgodHNtYXAtPm5ld19kaXIpOworCisJLyogQWRkIGl0IHRvIHRo ZSBsaXN0LiAqLworCXRzbWFwLT5uZXh0ID0gb3B0LT50c21hcHBpbmdzOworCW9wdC0+dHNtYXBw aW5ncyA9IHRzbWFwOworfQorCisvKgorICogQ2hlY2sgdGhhdCB0aGUgYmFja3VwX2xhYmVsIGZp bGVzIGZvcm0gYSBjb2hlcmVudCBiYWNrdXAgY2hhaW4sIGFuZCByZXR1cm4KKyAqIHRoZSBjb250 ZW50cyBvZiB0aGUgYmFja3VwX2xhYmVsIGZpbGUgZnJvbSB0aGUgbGF0ZXN0IGJhY2t1cC4KKyAq Lworc3RhdGljIFN0cmluZ0luZm8KK2NoZWNrX2JhY2t1cF9sYWJlbF9maWxlcyhpbnQgbl9iYWNr dXBzLCBjaGFyICoqYmFja3VwX2RpcnMpCit7CisJU3RyaW5nSW5mbwlidWYgPSBtYWtlU3RyaW5n SW5mbygpOworCVN0cmluZ0luZm8JbGFzdGJ1ZiA9IGJ1ZjsKKwlpbnQJCQlpOworCVRpbWVMaW5l SUQJY2hlY2tfdGxpID0gMDsKKwlYTG9nUmVjUHRyCWNoZWNrX2xzbiA9IEludmFsaWRYTG9nUmVj UHRyOworCisJLyogVHJ5IHRvIHJlYWQgZWFjaCBiYWNrdXBfbGFiZWwgZmlsZSBpbiB0dXJuLCBs YXN0IHRvIGZpcnN0LiAqLworCWZvciAoaSA9IG5fYmFja3VwcyAtIDE7IGkgPj0gMDsgLS1pKQor CXsKKwkJY2hhcgkJcGF0aGJ1ZltNQVhQR1BBVEhdOworCQlpbnQJCQlmZDsKKwkJVGltZUxpbmVJ RAlzdGFydF90bGk7CisJCVRpbWVMaW5lSUQJcHJldmlvdXNfdGxpOworCQlYTG9nUmVjUHRyCXN0 YXJ0X2xzbjsKKwkJWExvZ1JlY1B0cglwcmV2aW91c19sc247CisKKwkJLyogT3BlbiB0aGUgYmFj a3VwX2xhYmVsIGZpbGUuICovCisJCXNucHJpbnRmKHBhdGhidWYsIE1BWFBHUEFUSCwgIiVzL2Jh Y2t1cF9sYWJlbCIsIGJhY2t1cF9kaXJzW2ldKTsKKwkJcGdfbG9nX2RlYnVnKCJyZWFkaW5nIFwi JXNcIiIsIHBhdGhidWYpOworCQlpZiAoKGZkID0gb3BlbihwYXRoYnVmLCBPX1JET05MWSwgMCkp IDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBwYXRo YnVmKTsKKworCQkvKgorCQkgKiBTbHVycCB0aGUgd2hvbGUgZmlsZSBpbnRvIG1lbW9yeS4KKwkJ ICoKKwkJICogVGhlIGV4YWN0IHNpemUgbGltaXQgdGhhdCB3ZSBpbXBvc2UgaGVyZSBkb2Vzbid0 IHJlYWxseSBtYXR0ZXIgLS0KKwkJICogbW9zdCBvZiB3aGF0J3Mgc3VwcG9zZWQgdG8gYmUgaW4g dGhlIGZpbGUgaXMgZml4ZWQgc2l6ZSBhbmQgcXVpdGUKKwkJICogc2hvcnQuIEhvd2V2ZXIsIHRo ZSBsZW5ndGggb2YgdGhlIGJhY2t1cF9sYWJlbCBpcyBsaW1pdGVkIChhdCBsZWFzdAorCQkgKiBi eSBzb21lIHBhcnRzIG9mIHRoZSBjb2RlKSB0byBNQVhHUEFUSCwgc28gaW5jbHVkZSB0aGF0IHZh bHVlIGluCisJCSAqIHRoZSBtYXhpbXVtIGxlbmd0aCB0aGF0IHdlIHRvbGVyYXRlLgorCQkgKi8K KwkJc2x1cnBfZmlsZShmZCwgcGF0aGJ1ZiwgYnVmLCAxMDAwMCArIE1BWFBHUEFUSCk7CisKKwkJ LyogQ2xvc2UgdGhlIGZpbGUuICovCisJCWlmIChjbG9zZShmZCkgIT0gMCkKKwkJCXBnX2ZhdGFs KCJjb3VsZCBub3QgY2xvc2UgXCIlc1wiOiAlbSIsIHBhdGhidWYpOworCisJCS8qIFBhcnNlIHRo ZSBmaWxlIGNvbnRlbnRzLiAqLworCQlwYXJzZV9iYWNrdXBfbGFiZWwocGF0aGJ1ZiwgYnVmLCAm c3RhcnRfdGxpLCAmc3RhcnRfbHNuLAorCQkJCQkJICAgJnByZXZpb3VzX3RsaSwgJnByZXZpb3Vz X2xzbik7CisKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrcy4KKwkJICoKKwkJICogWFhYLiBJdCdz IGFjdHVhbGx5IG5vdCByZXF1aXJlZCB0aGF0IHN0YXJ0X2xzbiA9PSBjaGVja19sc24uIEl0CisJ CSAqIHdvdWxkIGJlIE9LIGlmIHN0YXJ0X2xzbiA+IGNoZWNrX2xzbiBwcm92aWRlZCB0aGF0IHN0 YXJ0X2xzbiBpcworCQkgKiBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJlbGV2YW50IHN3aXRj aHBvaW50LiBCdXQgYXQgdGhlIG1vbWVudAorCQkgKiB3ZSBkb24ndCBoYXZlIHRoYXQgaW5mb3Jt YXRpb24uCisJCSAqLworCQlpZiAoaSA+IDAgJiYgcHJldmlvdXNfdGxpID09IDApCisJCQlwZ19m YXRhbCgiYmFja3VwIGF0IFwiJXNcIiBpcyBhIGZ1bGwgYmFja3VwLCBidXQgb25seSB0aGUgZmly c3QgYmFja3VwIHNob3VsZCBiZSBhIGZ1bGwgYmFja3VwIiwKKwkJCQkJIGJhY2t1cF9kaXJzW2ld KTsKKwkJaWYgKGkgPT0gMCAmJiBwcmV2aW91c190bGkgIT0gMCkKKwkJCXBnX2ZhdGFsKCJiYWNr dXAgYXQgXCIlc1wiIGlzIGFuIGluY3JlbWVudGFsIGJhY2t1cCwgYnV0IHRoZSBmaXJzdCBiYWNr dXAgc2hvdWxkIGJlIGEgZnVsbCBiYWNrdXAiLAorCQkJCQkgYmFja3VwX2RpcnNbaV0pOworCQlp ZiAoaSA8IG5fYmFja3VwcyAtIDEgJiYgc3RhcnRfdGxpICE9IGNoZWNrX3RsaSkKKwkJCXBnX2Zh dGFsKCJiYWNrdXAgYXQgXCIlc1wiIHN0YXJ0cyBvbiB0aW1lbGluZSAldSwgYnV0IGV4cGVjdGVk ICV1IiwKKwkJCQkJIGJhY2t1cF9kaXJzW2ldLCBzdGFydF90bGksIGNoZWNrX3RsaSk7CisJCWlm IChpIDwgbl9iYWNrdXBzIC0gMSAmJiBzdGFydF9sc24gIT0gY2hlY2tfbHNuKQorCQkJcGdfZmF0 YWwoImJhY2t1cCBhdCBcIiVzXCIgc3RhcnRzIGF0IExTTiAlWC8lWCwgYnV0IGV4cGVjdGVkICVY LyVYIiwKKwkJCQkJIGJhY2t1cF9kaXJzW2ldLAorCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHN0YXJ0 X2xzbiksCisJCQkJCSBMU05fRk9STUFUX0FSR1MoY2hlY2tfbHNuKSk7CisJCWNoZWNrX3RsaSA9 IHByZXZpb3VzX3RsaTsKKwkJY2hlY2tfbHNuID0gcHJldmlvdXNfbHNuOworCisJCS8qCisJCSAq IFRoZSBsYXN0IGJhY2t1cCBsYWJlbCBpbiB0aGUgY2hhaW4gbmVlZHMgdG8gYmUgc2F2ZWQgZm9y IGxhdGVyIHVzZSwKKwkJICogd2hpbGUgdGhlIG90aGVycyBhcmUgb25seSBuZWVkZWQgd2l0aGlu IHRoaXMgbG9vcC4KKwkJICovCisJCWlmIChsYXN0YnVmID09IGJ1ZikKKwkJCWJ1ZiA9IG1ha2VT dHJpbmdJbmZvKCk7CisJCWVsc2UKKwkJCXJlc2V0U3RyaW5nSW5mbyhidWYpOworCX0KKworCS8q IEZyZWUgbWVtb3J5IHRoYXQgd2UgZG9uJ3QgbmVlZCBhbnkgbW9yZS4gKi8KKwlpZiAobGFzdGJ1 ZiAhPSBidWYpCisJeworCQlwZnJlZShidWYtPmRhdGEpOworCQlwZnJlZShidWYpOworCX0KKwor CS8qCisJICogUmV0dXJuIHRoZSBkYXRhIGZyb20gdGhlIGZpcnN0IGJhY2t1cF9pbmZvIHRoYXQg d2UgcmVhZCAod2hpY2ggaXMgdGhlCisJICogYmFja3VwX2xhYmVsIGZyb20gdGhlIGxhc3QgZGly ZWN0b3J5IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lKS4KKwkgKi8KKwlyZXR1cm4gbGFz dGJ1ZjsKK30KKworLyoKKyAqIFNhbml0eSBjaGVjayBjb250cm9sIGZpbGVzLgorICovCitzdGF0 aWMgdm9pZAorY2hlY2tfY29udHJvbF9maWxlcyhpbnQgbl9iYWNrdXBzLCBjaGFyICoqYmFja3Vw X2RpcnMpCit7CisJaW50CQkJaTsKKwl1aW50NjQJCXN5c3RlbV9pZGVudGlmaWVyID0gMDsJLyog cGxhY2F0ZSBjb21waWxlciAqLworCisJLyogVHJ5IHRvIHJlYWQgZWFjaCBjb250cm9sIGZpbGUg aW4gdHVybiwgbGFzdCB0byBmaXJzdC4gKi8KKwlmb3IgKGkgPSBuX2JhY2t1cHMgLSAxOyBpID49 IDA7IC0taSkKKwl7CisJCUNvbnRyb2xGaWxlRGF0YSAqY29udHJvbF9maWxlOworCQlib29sCQlj cmNfb2s7CisJCWNoYXIJICAgKmNvbnRyb2xwYXRoOworCisJCWNvbnRyb2xwYXRoID0gcHNwcmlu dGYoIiVzLyVzIiwgYmFja3VwX2RpcnNbaV0sICJnbG9iYWwvcGdfY29udHJvbCIpOworCQlwZ19s b2dfZGVidWcoInJlYWRpbmcgXCIlc1wiIiwgY29udHJvbHBhdGgpOworCQljb250cm9sX2ZpbGUg PSBnZXRfY29udHJvbGZpbGUoYmFja3VwX2RpcnNbaV0sICZjcmNfb2spOworCisJCS8qIENvbnRy b2wgZmlsZSBjb250ZW50cyBub3QgbWVhbmluZ2Z1bCBpZiBDUkMgaXMgYmFkLiAqLworCQlpZiAo IWNyY19vaykKKwkJCXBnX2ZhdGFsKCIlczogY3JjIGlzIGluY29ycmVjdCIsIGNvbnRyb2xwYXRo KTsKKworCQkvKiBDYW4ndCBpbnRlcnByZXQgY29udHJvbCBmaWxlIGlmIG5vdCBjdXJyZW50IHZl cnNpb24uICovCisJCWlmIChjb250cm9sX2ZpbGUtPnBnX2NvbnRyb2xfdmVyc2lvbiAhPSBQR19D T05UUk9MX1ZFUlNJT04pCisJCQlwZ19mYXRhbCgiJXM6IHVuZXhwZWN0ZWQgY29udHJvbCBmaWxl IHZlcnNpb24iLAorCQkJCQkgY29udHJvbHBhdGgpOworCisJCS8qIFN5c3RlbSBpZGVudGlmaWVy cyBzaG91bGQgYWxsIG1hdGNoLiAqLworCQlpZiAoaSA9PSBuX2JhY2t1cHMgLSAxKQorCQkJc3lz dGVtX2lkZW50aWZpZXIgPSBjb250cm9sX2ZpbGUtPnN5c3RlbV9pZGVudGlmaWVyOworCQllbHNl IGlmIChzeXN0ZW1faWRlbnRpZmllciAhPSBjb250cm9sX2ZpbGUtPnN5c3RlbV9pZGVudGlmaWVy KQorCQkJcGdfZmF0YWwoIiVzOiBleHBlY3RlZCBzeXN0ZW0gaWRlbnRpZmllciAlbGx1LCBidXQg Zm91bmQgJWxsdSIsCisJCQkJCSBjb250cm9scGF0aCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3lz dGVtX2lkZW50aWZpZXIsCisJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBjb250cm9sX2ZpbGUt PnN5c3RlbV9pZGVudGlmaWVyKTsKKworCQkvKiBSZWxlYXNlIG1lbW9yeS4gKi8KKwkJcGZyZWUo Y29udHJvbF9maWxlKTsKKwkJcGZyZWUoY29udHJvbHBhdGgpOworCX0KKworCS8qCisJICogSWYg ZGVidWcgb3V0cHV0IGlzIGVuYWJsZWQsIG1ha2UgYSBub3RlIG9mIHRoZSBzeXN0ZW0gaWRlbnRp ZmllciB0aGF0CisJICogd2UgZm91bmQgaW4gYWxsIG9mIHRoZSByZWxldmFudCBjb250cm9sIGZp bGVzLgorCSAqLworCXBnX2xvZ19kZWJ1Zygic3lzdGVtIGlkZW50aWZpZXIgaXMgJWxsdSIsCisJ CQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIHN5c3RlbV9pZGVudGlmaWVyKTsKK30KKworLyoKKyAq IFNldCBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBuZXcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGJh c2VkIG9uIHRoZQorICogcGVybWlzc2lvbnMgb2YgdGhlIGdpdmVuIGRpcmVjdG9yeS4gVGhlIGlu dGVudCBoZXJlIGlzIHRoYXQgdGhlIG91dHB1dAorICogZGlyZWN0b3J5IHNob3VsZCB1c2UgdGhl IHNhbWUgcGVybWlzc2lvbnMgc2NoZW1lIGFzIHRoZSBmaW5hbCBpbnB1dAorICogZGlyZWN0b3J5 LgorICovCitzdGF0aWMgdm9pZAorY2hlY2tfaW5wdXRfZGlyX3Blcm1pc3Npb25zKGNoYXIgKmRp cikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChzdGF0KGRpciwgJnN0KSAhPSAwKQorCQlw Z19mYXRhbCgiY291bGQgbm90IHN0YXQgXCIlc1wiOiAlbSIsIGRpcik7CisKKwlTZXREYXRhRGly ZWN0b3J5Q3JlYXRlUGVybShzdC5zdF9tb2RlKTsKK30KKworLyoKKyAqIENsZWFuIHVwIG91dHB1 dCBkaXJlY3RvcmllcyBiZWZvcmUgZXhpdGluZy4KKyAqLworc3RhdGljIHZvaWQKK2NsZWFudXBf ZGlyZWN0b3JpZXNfYXRleGl0KHZvaWQpCit7CisJd2hpbGUgKGNsZWFudXBfZGlyX2xpc3QgIT0g TlVMTCkKKwl7CisJCWNiX2NsZWFudXBfZGlyICpkaXIgPSBjbGVhbnVwX2Rpcl9saXN0OworCisJ CWlmIChkaXItPnJtdG9wZGlyKQorCQl7CisJCQlwZ19sb2dfaW5mbygicmVtb3Zpbmcgb3V0cHV0 IGRpcmVjdG9yeSBcIiVzXCIiLCBkaXItPnRhcmdldF9wYXRoKTsKKwkJCWlmICghcm10cmVlKGRp ci0+dGFyZ2V0X3BhdGgsIGRpci0+cm10b3BkaXIpKQorCQkJCXBnX2xvZ19lcnJvcigiZmFpbGVk IHRvIHJlbW92ZSBvdXRwdXQgZGlyZWN0b3J5Iik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwZ19s b2dfaW5mbygicmVtb3ZpbmcgY29udGVudHMgb2Ygb3V0cHV0IGRpcmVjdG9yeSBcIiVzXCIiLAor CQkJCQkJZGlyLT50YXJnZXRfcGF0aCk7CisJCQlpZiAoIXJtdHJlZShkaXItPnRhcmdldF9wYXRo LCBkaXItPnJtdG9wZGlyKSkKKwkJCQlwZ19sb2dfZXJyb3IoImZhaWxlZCB0byByZW1vdmUgY29u dGVudHMgb2Ygb3V0cHV0IGRpcmVjdG9yeSIpOworCQl9CisKKwkJY2xlYW51cF9kaXJfbGlzdCA9 IGNsZWFudXBfZGlyX2xpc3QtPm5leHQ7CisJCXBmcmVlKGRpcik7CisJfQorfQorCisvKgorICog Q3JlYXRlIHRoZSBuYW1lZCBvdXRwdXQgZGlyZWN0b3J5LCB1bmxlc3MgaXQgYWxyZWFkeSBleGlz dHMgb3Igd2UncmUgaW4KKyAqIGRyeS1ydW4gbW9kZS4gSWYgaXQgYWxyZWFkeSBleGlzdHMgYnV0 IGlzIG5vdCBlbXB0eSwgdGhhdCdzIGEgZmF0YWwgZXJyb3IuCisgKgorICogQWRkcyB0aGUgY3Jl YXRlZCBkaXJlY3RvcnkgdG8gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gYmUgY2xlYW5lZCB1 cAorICogYXQgcHJvY2VzcyBleGl0LgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX291dHB1dF9k aXJlY3RvcnkoY2hhciAqZGlybmFtZSwgY2Jfb3B0aW9ucyAqb3B0KQoreworCXN3aXRjaCAocGdf Y2hlY2tfZGlyKGRpcm5hbWUpKQorCXsKKwkJY2FzZSAwOgorCQkJaWYgKG9wdC0+ZHJ5X3J1bikK KwkJCXsKKwkJCQlwZ19sb2dfZGVidWcoIndvdWxkIGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiIiwg ZGlybmFtZSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJcGdfbG9nX2RlYnVnKCJjcmVhdGluZyBk aXJlY3RvcnkgXCIlc1wiIiwgZGlybmFtZSk7CisJCQlpZiAocGdfbWtkaXJfcChkaXJuYW1lLCBw Z19kaXJfY3JlYXRlX21vZGUpID09IC0xKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRl IGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGlybmFtZSk7CisJCQlyZW1lbWJlcl90b19jbGVhbnVw X2RpcmVjdG9yeShkaXJuYW1lLCB0cnVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMToKKwkJCXBn X2xvZ19kZWJ1ZygidXNpbmcgZXhpc3RpbmcgZGlyZWN0b3J5IFwiJXNcIiIsIGRpcm5hbWUpOwor CQkJcmVtZW1iZXJfdG9fY2xlYW51cF9kaXJlY3RvcnkoZGlybmFtZSwgZmFsc2UpOworCQkJYnJl YWs7CisKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJCWNhc2UgNDoKKwkJCXBnX2ZhdGFsKCJkaXJl Y3RvcnkgXCIlc1wiIGV4aXN0cyBidXQgaXMgbm90IGVtcHR5IiwgZGlybmFtZSk7CisKKwkJY2Fz ZSAtMToKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgYWNjZXNzIGRpcmVjdG9yeSBcIiVzXCI6ICVt IiwgZGlybmFtZSk7CisJfQorfQorCisvKgorICogaGVscAorICoKKyAqIFByaW50cyBoZWxwIHBh Z2UgZm9yIHRoZSBwcm9ncmFtCisgKgorICogcHJvZ25hbWU6IHRoZSBuYW1lIG9mIHRoZSBleGVj dXRlZCBwcm9ncmFtLCBzdWNoIGFzICJwZ19jb21iaW5lYmFja3VwIgorICovCitzdGF0aWMgdm9p ZAoraGVscChjb25zdCBjaGFyICpwcm9nbmFtZSkKK3sKKwlwcmludGYoXygiJXMgcmVjb25zdHJ1 Y3RzIGZ1bGwgYmFja3VwcyBmcm9tIGluY3JlbWVudGFscy5cblxuIiksIHByb2duYW1lKTsKKwlw cmludGYoXygiVXNhZ2U6XG4iKSk7CisJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi4gRElSRUNU T1JZLi4uXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCJcbk9wdGlvbnM6XG4iKSk7CisJcHJp bnRmKF8oIiAgLWQsIC0tZGVidWcgICAgICAgICAgICAgICBnZW5lcmF0ZSBsb3RzIG9mIGRlYnVn Z2luZyBvdXRwdXRcbiIpKTsKKwlwcmludGYoXygiICAtbiwgLS1kcnktcnVuICAgICAgICAgICAg IGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nXG4iKSk7CisJcHJpbnRmKF8oIiAgLU4sIC0tbm8t c3luYyAgICAgICAgICAgICBkbyBub3Qgd2FpdCBmb3IgY2hhbmdlcyB0byBiZSB3cml0dGVuIHNh ZmVseSB0byBkaXNrXG4iKSk7CisJcHJpbnRmKF8oIiAgLW8sIC0tb3V0cHV0ICAgICAgICAgICAg ICBvdXRwdXQgZGlyZWN0b3J5XG4iKSk7CisJcHJpbnRmKF8oIiAgLVQsIC0tdGFibGVzcGFjZS1t YXBwaW5nPU9MRERJUj1ORVdESVJcbiIpKTsKKwlwcmludGYoXygiICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlbG9jYXRlIHRhYmxlc3BhY2UgaW4gT0xERElSIHRvIE5FV0RJUlxuIikpOwor CXByaW50ZihfKCIgICAgICAtLW1hbmlmZXN0LWNoZWNrc3Vtcz1TSEF7MjI0LDI1NiwzODQsNTEy fXxDUkMzMkN8Tk9ORVxuIgorCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIGFs Z29yaXRobSBmb3IgbWFuaWZlc3QgY2hlY2tzdW1zXG4iKSk7CisJcHJpbnRmKF8oIiAgICAgIC0t bm8tbWFuaWZlc3QgICAgICAgICBzdXBwcmVzcyBnZW5lcmF0aW9uIG9mIGJhY2t1cCBtYW5pZmVz dFxuIikpOworCXByaW50ZihfKCIgICAgICAtLXN5bmMtbWV0aG9kPU1FVEhPRCAgc2V0IG1ldGhv ZCBmb3Igc3luY2luZyBmaWxlcyB0byBkaXNrXG4iKSk7CisJcHJpbnRmKF8oIiAgLT8sIC0taGVs cCAgICAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCwgdGhlbiBleGl0XG4iKSk7CisKKwlwcmlu dGYoXygiXG5SZXBvcnQgYnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKKwlw cmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VS TCk7Cit9CisKKy8qCisgKiBUcnkgdG8gcGFyc2UgYSBzdHJpbmcgYXMgYSBub24temVybyBPSUQg d2l0aG91dCBsZWFkaW5nIHplcm9lcy4KKyAqCisgKiBJZiBpdCB3b3JrcywgcmV0dXJuIHRydWUg YW5kIHNldCAqcmVzdWx0IHRvIHRoZSBhbnN3ZXIsIGVsc2UgcmV0dXJuIGZhbHNlLgorICovCitz dGF0aWMgYm9vbAorcGFyc2Vfb2lkKGNoYXIgKnMsIE9pZCAqcmVzdWx0KQoreworCU9pZAkJCW9p ZDsKKwljaGFyCSAgICplcDsKKworCWVycm5vID0gMDsKKwlvaWQgPSBzdHJ0b3VsKHMsICZlcCwg MTApOworCWlmIChlcnJubyAhPSAwIHx8ICplcCAhPSAnXDAnIHx8IG9pZCA8IDEgfHwgb2lkID4g UEdfVUlOVDMyX01BWCkKKwkJcmV0dXJuIGZhbHNlOworCisJKnJlc3VsdCA9IG9pZDsKKwlyZXR1 cm4gdHJ1ZTsKK30KKworLyoKKyAqIENvcHkgZmlsZXMgZnJvbSB0aGUgaW5wdXQgZGlyZWN0b3J5 IHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LCByZWNvbnN0cnVjdGluZworICogZnVsbCBmaWxlcyBm cm9tIGluY3JlbWVudGFsIGZpbGVzIGFzIHJlcXVpcmVkLgorICoKKyAqIElmIHByb2Nlc3Npbmcg aXMgYSB1c2VyLWRlZmluZWQgdGFibGVzcGFjZSwgdGhlIHRzb2lkIHNob3VsZCBiZSB0aGUgT0lE CisgKiBvZiB0aGF0IHRhYmxlc3BhY2UgYW5kIGlucHV0X2RpcmVjdG9yeSBhbmQgb3V0cHV0X2Rp cmVjdG9yeSBzaG91bGQgYmUgdGhlCisgKiB0b3BsZXZlbCBpbnB1dCBhbmQgb3V0cHV0IGRpcmVj dG9yaWVzIGZvciB0aGF0IHRhYmxlc3BhY2UuIE90aGVyd2lzZSwKKyAqIHRzb2lkIHNob3VsZCBi ZSBJbnZhbGlkT2lkIGFuZCBpbnB1dF9kaXJlY3RvcnkgYW5kIG91dHB1dF9kaXJlY3Rvcnkgc2hv dWxkCisgKiBiZSB0aGUgbWFpbiBpbnB1dCBhbmQgb3V0cHV0IGRpcmVjdG9yaWVzLgorICoKKyAq IHJlbGF0aXZlX3BhdGggaXMgdGhlIHBhdGggYmVuZWF0aCB0aGUgZ2l2ZW4gaW5wdXQgYW5kIG91 dHB1dCBkaXJlY3RvcmllcworICogdGhhdCB3ZSBhcmUgY3VycmVudGx5IHByb2Nlc3NpbmcuIElm IE5VTEwsIGl0IGluZGljYXRlcyB0aGF0IHdlJ3JlCisgKiBwcm9jZXNzaW5nIHRoZSBpbnB1dCBh bmQgb3V0cHV0IGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXMuCisgKgorICogbl9wcmlvcl9iYWNrdXBz IGlzIHRoZSBudW1iZXIgb2YgcHJpb3IgYmFja3VwcyB0aGF0IHdlIGhhdmUgYXZhaWxhYmxlLgor ICogVGhpcyBkb2Vzbid0IGNvdW50IHRoZSB2ZXJ5IGxhc3QgYmFja3VwLCB3aGljaCBpcyByZWZl cmVuY2VkIGJ5CisgKiBvdXRwdXRfZGlyZWN0b3J5LCBqdXN0IHRoZSBvbGRlciBvbmVzLiBwcmlv cl9iYWNrdXBfZGlycyBpcyBhbiBhcnJheSBvZgorICogdGhlIGxvY2F0aW9ucyBvZiB0aG9zZSBw cmV2aW91cyBiYWNrdXBzLgorICovCitzdGF0aWMgdm9pZAorcHJvY2Vzc19kaXJlY3RvcnlfcmVj dXJzaXZlbHkoT2lkIHRzb2lkLAorCQkJCQkJCSAgY2hhciAqaW5wdXRfZGlyZWN0b3J5LAorCQkJ CQkJCSAgY2hhciAqb3V0cHV0X2RpcmVjdG9yeSwKKwkJCQkJCQkgIGNoYXIgKnJlbGF0aXZlX3Bh dGgsCisJCQkJCQkJICBpbnQgbl9wcmlvcl9iYWNrdXBzLAorCQkJCQkJCSAgY2hhciAqKnByaW9y X2JhY2t1cF9kaXJzLAorCQkJCQkJCSAgbWFuaWZlc3RfZGF0YSAqKm1hbmlmZXN0cywKKwkJCQkJ CQkgIG1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciwKKwkJCQkJCQkgIGNiX29wdGlvbnMgKm9wdCkK K3sKKwljaGFyCQlpZnVsbGRpcltNQVhQR1BBVEhdOworCWNoYXIJCW9mdWxsZGlyW01BWFBHUEFU SF07CisJY2hhcgkJbWFuaWZlc3RfcHJlZml4W01BWFBHUEFUSF07CisJRElSCQkgICAqZGlyOwor CXN0cnVjdCBkaXJlbnQgKmRlOworCWJvb2wJCWlzX3BnX3RibHNwYzsKKwlib29sCQlpc19wZ193 YWw7CisJbWFuaWZlc3RfZGF0YSAqbGF0ZXN0X21hbmlmZXN0ID0gbWFuaWZlc3RzW25fcHJpb3Jf YmFja3Vwc107CisJcGdfY2hlY2tzdW1fdHlwZSBjaGVja3N1bV90eXBlOworCisJLyoKKwkgKiBw Z190YmxzcGMgYW5kIHBnX3dhbCBhcmUgc3BlY2lhbCBjYXNlcywgc28gZGV0ZWN0IHRob3NlIGhl cmUuCisJICoKKwkgKiBwZ190YmxzcGMgaXMgb25seSBzcGVjaWFsIGF0IHRoZSB0b3AgbGV2ZWws IGJ1dCBzdWJkaXJlY3RvcmllcyBvZgorCSAqIHBnX3dhbCBhcmUganVzdCBhcyBzcGVjaWFsIGFz IHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5LgorCSAqCisJICogU2luY2UgaW5jcmVtZW50YWwgYmFj a3VwIGRvZXMgbm90IGV4aXN0IGluIHByZS12MTAgdmVyc2lvbnMsIHdlIGRvbid0CisJICogaGF2 ZSB0byB3b3JyeSBhYm91dCB0aGUgb2xkIHBnX3hsb2cgbmFtaW5nLgorCSAqLworCWlzX3BnX3Ri bHNwYyA9ICFPaWRJc1ZhbGlkKHRzb2lkKSAmJiByZWxhdGl2ZV9wYXRoICE9IE5VTEwgJiYKKwkJ c3RyY21wKHJlbGF0aXZlX3BhdGgsICJwZ190YmxzcGMiKSA9PSAwOworCWlzX3BnX3dhbCA9ICFP aWRJc1ZhbGlkKHRzb2lkKSAmJiByZWxhdGl2ZV9wYXRoICE9IE5VTEwgJiYKKwkJKHN0cmNtcChy ZWxhdGl2ZV9wYXRoLCAicGdfd2FsIikgPT0gMCB8fAorCQkgc3RybmNtcChyZWxhdGl2ZV9wYXRo LCAicGdfd2FsLyIsIDcpID09IDApOworCisJLyoKKwkgKiBJZiB3ZSdyZSB1bmRlciBwZ193YWws IHRoZW4gd2UgZG9uJ3QgbmVlZCBjaGVja3N1bXMsIGJlY2F1c2UgdGhlc2UKKwkgKiBmaWxlcyBh cmVuJ3QgaW5jbHVkZWQgaW4gdGhlIGJhY2t1cCBtYW5pZmVzdC4gT3RoZXJ3aXNlIHVzZSB3aGF0 ZXZlcgorCSAqIHR5cGUgb2YgY2hlY2tzdW0gaXMgY29uZmlndXJlZC4KKwkgKi8KKwlpZiAoIWlz X3BnX3dhbCkKKwkJY2hlY2tzdW1fdHlwZSA9IG9wdC0+bWFuaWZlc3RfY2hlY2tzdW1zOworCWVs c2UKKwkJY2hlY2tzdW1fdHlwZSA9IENIRUNLU1VNX1RZUEVfTk9ORTsKKworCS8qCisJICogQXBw ZW5kIHRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRpcmVjdG9yaWVz LCBhbmQKKwkgKiBmaWd1cmUgb3V0IHRoZSBhcHByb3ByaWF0ZSBwcmVmaXggdG8gYWRkIHRvIGZp bGVzIGluIHRoaXMgZGlyZWN0b3J5CisJICogd2hlbiBsb29raW5nIHRoZW0gdXAgaW4gYSBiYWNr dXAgbWFuaWZlc3QuCisJICovCisJaWYgKHJlbGF0aXZlX3BhdGggPT0gTlVMTCkKKwl7CisJCXN0 cm5jcHkoaWZ1bGxkaXIsIGlucHV0X2RpcmVjdG9yeSwgTUFYUEdQQVRIKTsKKwkJc3RybmNweShv ZnVsbGRpciwgb3V0cHV0X2RpcmVjdG9yeSwgTUFYUEdQQVRIKTsKKwkJaWYgKE9pZElzVmFsaWQo dHNvaWQpKQorCQkJc25wcmludGYobWFuaWZlc3RfcHJlZml4LCBNQVhQR1BBVEgsICJwZ190Ymxz cGMvJXUvIiwgdHNvaWQpOworCQllbHNlCisJCQltYW5pZmVzdF9wcmVmaXhbMF0gPSAnXDAnOwor CX0KKwllbHNlCisJeworCQlzbnByaW50ZihpZnVsbGRpciwgTUFYUEdQQVRILCAiJXMvJXMiLCBp bnB1dF9kaXJlY3RvcnksCisJCQkJIHJlbGF0aXZlX3BhdGgpOworCQlzbnByaW50ZihvZnVsbGRp ciwgTUFYUEdQQVRILCAiJXMvJXMiLCBvdXRwdXRfZGlyZWN0b3J5LAorCQkJCSByZWxhdGl2ZV9w YXRoKTsKKwkJaWYgKE9pZElzVmFsaWQodHNvaWQpKQorCQkJc25wcmludGYobWFuaWZlc3RfcHJl Zml4LCBNQVhQR1BBVEgsICJwZ190YmxzcGMvJXUvJXMvIiwKKwkJCQkJIHRzb2lkLCByZWxhdGl2 ZV9wYXRoKTsKKwkJZWxzZQorCQkJc25wcmludGYobWFuaWZlc3RfcHJlZml4LCBNQVhQR1BBVEgs ICIlcy8iLCByZWxhdGl2ZV9wYXRoKTsKKwl9CisKKwkvKgorCSAqIFRvcGxldmVsIG91dHB1dCBk aXJlY3RvcmllcyBoYXZlIGFscmVhZHkgYmVlbiBjcmVhdGVkIGJ5IHRoZSB0aW1lIHRoaXMKKwkg KiBmdW5jdGlvbiBpcyBjYWxsZWQsIGJ1dCBhbnkgc3ViZGlyZWN0b3JpZXMgYXJlIG91ciByZXNw b25zaWJpbGl0eS4KKwkgKi8KKwlpZiAocmVsYXRpdmVfcGF0aCAhPSBOVUxMKQorCXsKKwkJaWYg KG9wdC0+ZHJ5X3J1bikKKwkJCXBnX2xvZ19kZWJ1Zygid291bGQgY3JlYXRlIGRpcmVjdG9yeSBc IiVzXCIiLCBvZnVsbGRpcik7CisJCWVsc2UKKwkJeworCQkJcGdfbG9nX2RlYnVnKCJjcmVhdGlu ZyBkaXJlY3RvcnkgXCIlc1wiIiwgb2Z1bGxkaXIpOworCQkJaWYgKG1rZGlyKG9mdWxsZGlyLCBw Z19kaXJfY3JlYXRlX21vZGUpID09IC0xKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRl IGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgb2Z1bGxkaXIpOworCQl9CisJfQorCisJLyogSXQncyB0 aW1lIHRvIHNjYW4gdGhlIGRpcmVjdG9yeS4gKi8KKwlpZiAoKGRpciA9IG9wZW5kaXIoaWZ1bGxk aXIpKSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5IFwiJXNc IjogJW0iLCBpZnVsbGRpcik7CisJd2hpbGUgKGVycm5vID0gMCwgKGRlID0gcmVhZGRpcihkaXIp KSAhPSBOVUxMKQorCXsKKwkJUEdGaWxlVHlwZQl0eXBlOworCQljaGFyCQlpZnVsbHBhdGhbTUFY UEdQQVRIXTsKKwkJY2hhcgkJb2Z1bGxwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCW1hbmlmZXN0 X3BhdGhbTUFYUEdQQVRIXTsKKwkJT2lkCQkJb2lkID0gSW52YWxpZE9pZDsKKwkJaW50CQkJY2hl Y2tzdW1fbGVuZ3RoID0gMDsKKwkJdWludDgJICAgKmNoZWNrc3VtX3BheWxvYWQgPSBOVUxMOwor CQlwZ19jaGVja3N1bV9jb250ZXh0IGNoZWNrc3VtX2N0eDsKKworCQkvKiBJZ25vcmUgIi4iIGFu ZCAiLi4iIGVudHJpZXMuICovCisJCWlmIChzdHJjbXAoZGUtPmRfbmFtZSwgIi4iKSA9PSAwIHx8 CisJCQlzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8q IENvbnN0cnVjdCBpbnB1dCBwYXRoLiAqLworCQlzbnByaW50ZihpZnVsbHBhdGgsIE1BWFBHUEFU SCwgIiVzLyVzIiwgaWZ1bGxkaXIsIGRlLT5kX25hbWUpOworCisJCS8qIEZpZ3VyZSBvdXQgd2hh dCBraW5kIG9mIGRpcmVjdG9yeSBlbnRyeSB0aGlzIGlzLiAqLworCQl0eXBlID0gZ2V0X2RpcmVu dF90eXBlKGlmdWxscGF0aCwgZGUsIGZhbHNlLCBQR19MT0dfRVJST1IpOworCQlpZiAodHlwZSA9 PSBQR0ZJTEVUWVBFX0VSUk9SKQorCQkJZXhpdCgxKTsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSBw cm9jZXNzaW5nIHBnX3RibHNwYywgdGhlbiBjaGVjayB3aGV0aGVyIHRoZSBmaWxlbmFtZQorCQkg KiBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGEgdGFibGVzcGFjZSBPSUQuIElmIHNvLCBhbmQgaWYg dGhlCisJCSAqIGRpcmVjdG9yeSBlbnRyeSBpcyBhIHN5bWJvbGljIGxpbmsgb3IgYSBkaXJlY3Rv cnksIHNraXAgaXQuCisJCSAqCisJCSAqIE91ciBnb2FsIGhlcmUgaXMgdG8gaWdub3JlIGFueXRo aW5nIHRoYXQgd291bGQgaGF2ZSBiZWVuIGNvbnNpZGVyZWQKKwkJICogYnkgc2Nhbl9mb3JfZXhp c3RpbmdfdGFibGVzcGFjZXMgdG8gYmUgYSB0YWJsZXNwYWNlLgorCQkgKi8KKwkJaWYgKGlzX3Bn X3RibHNwYyAmJiBwYXJzZV9vaWQoZGUtPmRfbmFtZSwgJm9pZCkgJiYKKwkJCSh0eXBlID09IFBH RklMRVRZUEVfTE5LIHx8IHR5cGUgPT0gUEdGSUxFVFlQRV9ESVIpKQorCQkJY29udGludWU7CisK KwkJLyogSWYgaXQncyBhIGRpcmVjdG9yeSwgcmVjdXJzZS4gKi8KKwkJaWYgKHR5cGUgPT0gUEdG SUxFVFlQRV9ESVIpCisJCXsKKwkJCWNoYXIJCW5ld19yZWxhdGl2ZV9wYXRoW01BWFBHUEFUSF07 CisKKwkJCS8qIEFwcGVuZCBuZXcgcGF0aG5hbWUgY29tcG9uZW50IHRvIHJlbGF0aXZlIHBhdGgu ICovCisJCQlpZiAocmVsYXRpdmVfcGF0aCA9PSBOVUxMKQorCQkJCXN0cm5jcHkobmV3X3JlbGF0 aXZlX3BhdGgsIGRlLT5kX25hbWUsIE1BWFBHUEFUSCk7CisJCQllbHNlCisJCQkJc25wcmludGYo bmV3X3JlbGF0aXZlX3BhdGgsIE1BWFBHUEFUSCwgIiVzLyVzIiwgcmVsYXRpdmVfcGF0aCwKKwkJ CQkJCSBkZS0+ZF9uYW1lKTsKKworCQkJLyogQW5kIHJlY3Vyc2UuICovCisJCQlwcm9jZXNzX2Rp cmVjdG9yeV9yZWN1cnNpdmVseSh0c29pZCwKKwkJCQkJCQkJCQkgIGlucHV0X2RpcmVjdG9yeSwg b3V0cHV0X2RpcmVjdG9yeSwKKwkJCQkJCQkJCQkgIG5ld19yZWxhdGl2ZV9wYXRoLAorCQkJCQkJ CQkJCSAgbl9wcmlvcl9iYWNrdXBzLCBwcmlvcl9iYWNrdXBfZGlycywKKwkJCQkJCQkJCQkgIG1h bmlmZXN0cywgbXdyaXRlciwgb3B0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2tpcCBh bnl0aGluZyB0aGF0J3Mgbm90IGEgcmVndWxhciBmaWxlLiAqLworCQlpZiAodHlwZSAhPSBQR0ZJ TEVUWVBFX1JFRykKKwkJeworCQkJaWYgKHR5cGUgPT0gUEdGSUxFVFlQRV9MTkspCisJCQkJcGdf bG9nX3dhcm5pbmcoInNraXBwaW5nIHN5bWJvbGljIGxpbmsgXCIlc1wiIiwgaWZ1bGxwYXRoKTsK KwkJCWVsc2UKKwkJCQlwZ19sb2dfd2FybmluZygic2tpcHBpbmcgc3BlY2lhbCBmaWxlIFwiJXNc IiIsIGlmdWxscGF0aCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNraXAgdGhl IGJhY2t1cF9sYWJlbCBhbmQgYmFja3VwX21hbmlmZXN0IGZpbGVzOyB0aGV5IHJlcXVpcmUKKwkJ ICogc3BlY2lhbCBoYW5kbGluZyBhbmQgYXJlIGhhbmRsZWQgZWxzZXdoZXJlLgorCQkgKi8KKwkJ aWYgKHJlbGF0aXZlX3BhdGggPT0gTlVMTCAmJgorCQkJKHN0cmNtcChkZS0+ZF9uYW1lLCAiYmFj a3VwX2xhYmVsIikgPT0gMCB8fAorCQkJIHN0cmNtcChkZS0+ZF9uYW1lLCAiYmFja3VwX21hbmlm ZXN0IikgPT0gMCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiBpdCdzIGFuIGluY3Jl bWVudGFsIGZpbGUsIGhhbmQgaXQgb2ZmIHRvIHRoZSByZWNvbnN0cnVjdGlvbgorCQkgKiBjb2Rl LCB3aGljaCB3aWxsIGZpZ3VyZSBvdXQgd2hhdCB0byBkby4KKwkJICovCisJCWlmIChzdHJuY21w KGRlLT5kX25hbWUsIElOQ1JFTUVOVEFMX1BSRUZJWCwKKwkJCQkJSU5DUkVNRU5UQUxfUFJFRklY X0xFTkdUSCkgPT0gMCkKKwkJeworCQkJLyogT3V0cHV0IHBhdGggc2hvdWxkIG5vdCBpbmNsdWRl ICJJTkNSRU1FTlRBTC4iIHByZWZpeC4gKi8KKwkJCXNucHJpbnRmKG9mdWxscGF0aCwgTUFYUEdQ QVRILCAiJXMvJXMiLCBvZnVsbGRpciwKKwkJCQkJIGRlLT5kX25hbWUgKyBJTkNSRU1FTlRBTF9Q UkVGSVhfTEVOR1RIKTsKKworCisJCQkvKiBNYW5pZmVzdCBwYXRoIGxpa2V3aXNlIG9taXRzIGlu Y3JlbWVudGFsIHByZWZpeC4gKi8KKwkJCXNucHJpbnRmKG1hbmlmZXN0X3BhdGgsIE1BWFBHUEFU SCwgIiVzJXMiLCBtYW5pZmVzdF9wcmVmaXgsCisJCQkJCSBkZS0+ZF9uYW1lICsgSU5DUkVNRU5U QUxfUFJFRklYX0xFTkdUSCk7CisKKwkJCS8qIFJlY29uc3RydWN0aW9uIGxvZ2ljIHdpbGwgZG8g dGhlIHJlc3QuICovCisJCQlyZWNvbnN0cnVjdF9mcm9tX2luY3JlbWVudGFsX2ZpbGUoaWZ1bGxw YXRoLCBvZnVsbHBhdGgsCisJCQkJCQkJCQkJCSAgcmVsYXRpdmVfcGF0aCwKKwkJCQkJCQkJCQkJ ICBkZS0+ZF9uYW1lICsgSU5DUkVNRU5UQUxfUFJFRklYX0xFTkdUSCwKKwkJCQkJCQkJCQkJICBu X3ByaW9yX2JhY2t1cHMsCisJCQkJCQkJCQkJCSAgcHJpb3JfYmFja3VwX2RpcnMsCisJCQkJCQkJ CQkJCSAgbWFuaWZlc3RzLAorCQkJCQkJCQkJCQkgIG1hbmlmZXN0X3BhdGgsCisJCQkJCQkJCQkJ CSAgY2hlY2tzdW1fdHlwZSwKKwkJCQkJCQkJCQkJICAmY2hlY2tzdW1fbGVuZ3RoLAorCQkJCQkJ CQkJCQkgICZjaGVja3N1bV9wYXlsb2FkLAorCQkJCQkJCQkJCQkgIG9wdC0+ZGVidWcsCisJCQkJ CQkJCQkJCSAgb3B0LT5kcnlfcnVuKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIENvbnN0cnVj dCB0aGUgcGF0aCB0aGF0IHRoZSBiYWNrdXBfbWFuaWZlc3Qgd2lsbCB1c2UuICovCisJCQlzbnBy aW50ZihtYW5pZmVzdF9wYXRoLCBNQVhQR1BBVEgsICIlcyVzIiwgbWFuaWZlc3RfcHJlZml4LAor CQkJCQkgZGUtPmRfbmFtZSk7CisKKwkJCS8qCisJCQkgKiBJdCdzIG5vdCBhbiBpbmNyZW1lbnRh bCBmaWxlLCBzbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIGVudGlyZQorCQkJICogZmlsZSB0byB0aGUg b3V0cHV0IGRpcmVjdG9yeS4KKwkJCSAqCisJCQkgKiBJZiBhIGNoZWNrc3VtIG9mIHRoZSByZXF1 aXJlZCB0eXBlIGFscmVhZHkgZXhpc3RzIGluIHRoZQorCQkJICogYmFja3VwX21hbmlmZXN0IGZv ciB0aGUgZmluYWwgaW5wdXQgZGlyZWN0b3J5LCB3ZSBjYW4gc2F2ZSBzb21lCisJCQkgKiB3b3Jr IGJ5IHJldXNpbmcgdGhhdCBjaGVja3N1bSBpbnN0ZWFkIG9mIGNvbXB1dGluZyBhIG5ldyBvbmUu CisJCQkgKi8KKwkJCWlmIChjaGVja3N1bV90eXBlICE9IENIRUNLU1VNX1RZUEVfTk9ORSAmJgor CQkJCWxhdGVzdF9tYW5pZmVzdCAhPSBOVUxMKQorCQkJeworCQkJCW1hbmlmZXN0X2ZpbGUgKm1m aWxlOworCisJCQkJbWZpbGUgPSBtYW5pZmVzdF9maWxlc19sb29rdXAobGF0ZXN0X21hbmlmZXN0 LT5maWxlcywKKwkJCQkJCQkJCQkJICBtYW5pZmVzdF9wYXRoKTsKKwkJCQlpZiAobWZpbGUgPT0g TlVMTCkKKwkJCQl7CisJCQkJCWNoYXIJICAgKmJtcGF0aDsKKworCQkJCQkvKgorCQkJCQkgKiBU aGUgZGlyZWN0b3J5IGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIGJhY2t1cF9tYW5pZmVzdCwKKwkJ CQkJICogc28gZW1pdCBhIHdhcm5pbmcuCisJCQkJCSAqLworCQkJCQlibXBhdGggPSBwc3ByaW50 ZigiJXMvJXMiLCBpbnB1dF9kaXJlY3RvcnksCisJCQkJCQkJCQkgICJiYWNrdXBfbWFuaWZlc3Qi KTsKKwkJCQkJcGdfbG9nX3dhcm5pbmcoIlwiJXNcIiBjb250YWlucyBubyBlbnRyeSBmb3IgXCIl c1wiIiwKKwkJCQkJCQkJICAgYm1wYXRoLCBtYW5pZmVzdF9wYXRoKTsKKwkJCQkJcGZyZWUoYm1w YXRoKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAobWZpbGUtPmNoZWNrc3VtX3R5cGUgPT0gY2hlY2tz dW1fdHlwZSkKKwkJCQl7CisJCQkJCWNoZWNrc3VtX2xlbmd0aCA9IG1maWxlLT5jaGVja3N1bV9s ZW5ndGg7CisJCQkJCWNoZWNrc3VtX3BheWxvYWQgPSBtZmlsZS0+Y2hlY2tzdW1fcGF5bG9hZDsK KwkJCQl9CisJCQl9CisKKwkJCS8qCisJCQkgKiBJZiB3ZSdyZSByZXVzaW5nIGEgY2hlY2tzdW0s IHRoZW4gd2UgZG9uJ3QgbmVlZCBjb3B5X2ZpbGUoKSB0bworCQkJICogY29tcHV0ZSBvbmUgZm9y IHVzLCBidXQgb3RoZXJ3aXNlLCBpdCBuZWVkcyB0byBjb21wdXRlIHdoYXRldmVyCisJCQkgKiB0 eXBlIG9mIGNoZWNrc3VtIHdlIG5lZWQuCisJCQkgKi8KKwkJCWlmIChjaGVja3N1bV9sZW5ndGgg IT0gMCkKKwkJCQlwZ19jaGVja3N1bV9pbml0KCZjaGVja3N1bV9jdHgsIENIRUNLU1VNX1RZUEVf Tk9ORSk7CisJCQllbHNlCisJCQkJcGdfY2hlY2tzdW1faW5pdCgmY2hlY2tzdW1fY3R4LCBjaGVj a3N1bV90eXBlKTsKKworCQkJLyogQWN0dWFsbHkgY29weSB0aGUgZmlsZS4gKi8KKwkJCXNucHJp bnRmKG9mdWxscGF0aCwgTUFYUEdQQVRILCAiJXMvJXMiLCBvZnVsbGRpciwgZGUtPmRfbmFtZSk7 CisJCQljb3B5X2ZpbGUoaWZ1bGxwYXRoLCBvZnVsbHBhdGgsICZjaGVja3N1bV9jdHgsIG9wdC0+ ZHJ5X3J1bik7CisKKwkJCS8qCisJCQkgKiBJZiBjb3B5X2ZpbGUoKSBwZXJmb3JtZWQgYSBjaGVj a3N1bSBjYWxjdWxhdGlvbiBmb3IgdXMsIHRoZW4KKwkJCSAqIHNhdmUgdGhlIHJlc3VsdHMgKGV4 Y2VwdCBpbiBkcnktcnVuIG1vZGUsIHdoZW4gdGhlcmUncyBubworCQkJICogcG9pbnQpLgorCQkJ ICovCisJCQlpZiAoY2hlY2tzdW1fY3R4LnR5cGUgIT0gQ0hFQ0tTVU1fVFlQRV9OT05FICYmICFv cHQtPmRyeV9ydW4pCisJCQl7CisJCQkJY2hlY2tzdW1fcGF5bG9hZCA9IHBnX21hbGxvYyhQR19D SEVDS1NVTV9NQVhfTEVOR1RIKTsKKwkJCQljaGVja3N1bV9sZW5ndGggPSBwZ19jaGVja3N1bV9m aW5hbCgmY2hlY2tzdW1fY3R4LAorCQkJCQkJCQkJCQkJCWNoZWNrc3VtX3BheWxvYWQpOworCQkJ fQorCQl9CisKKwkJLyogR2VuZXJhdGUgbWFuaWZlc3QgZW50cnksIGlmIG5lZWRlZC4gKi8KKwkJ aWYgKG13cml0ZXIgIT0gTlVMTCkKKwkJeworCQkJc3RydWN0IHN0YXQgc2I7CisKKwkJCS8qCisJ CQkgKiBJbiBvcmRlciB0byBnZW5lcmF0ZSBhIG1hbmlmZXN0IGVudHJ5LCB3ZSBuZWVkIHRoZSBm aWxlIHNpemUKKwkJCSAqIGFuZCBtdGltZS4gV2UgaGF2ZSBubyB3YXkgdG8ga25vdyB0aGUgY29y cmVjdCBtdGltZSBleGNlcHQgdG8KKwkJCSAqIHN0YXQoKSB0aGUgZmlsZSwgc28ganVzdCBkbyB0 aGF0IGFuZCBnZXQgdGhlIHNpemUgYXMgd2VsbC4KKwkJCSAqCisJCQkgKiBJZiB3ZSBkaWRuJ3Qg bmVlZCB0aGUgbXRpbWUgaGVyZSwgd2UgY291bGQgdHJ5IHRvIG9idGFpbiB0aGUKKwkJCSAqIGZp bGUgc2l6ZSBmcm9tIHRoZSByZWNvbnN0cnVjdGlvbiBvciBmaWxlIGNvcHkgcHJvY2VzcyBhYm92 ZSwKKwkJCSAqIGFsdGhvdWdoIHRoYXQgaXMgYWN0dWFsbHkgbm90IGNvbnZlbmllbnQgaW4gYWxs IGNhc2VzLiBJZiB3ZQorCQkJICogd3JpdGUgdGhlIGZpbGUgb3Vyc2VsdmVzIHRoZW4gY2xlYXJs eSB3ZSBjYW4ga2VlcCBhIGNvdW50IG9mCisJCQkgKiBieXRlcywgYnV0IGlmIHdlIHVzZSBzb21l dGhpbmcgbGlrZSBDb3B5RmlsZSgpIHRoZW4gaXQncworCQkJICogdHJpY2tpZXIuIFNpbmNlIHdl IGhhdmUgdG8gc3RhdCgpIGFueXdheSB0byBnZXQgdGhlIG10aW1lLAorCQkJICogdGhlcmUncyBu byBwb2ludCBpbiB3b3JyeWluZyBhYm91dCBpdC4KKwkJCSAqLworCQkJaWYgKHN0YXQob2Z1bGxw YXRoLCAmc2IpIDwgMCkKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHN0YXQgZmlsZSBcIiVzXCI6 ICVtIiwgb2Z1bGxwYXRoKTsKKworCQkJLyogT0ssIG5vdyBkbyB0aGUgd29yay4gKi8KKwkJCWFk ZF9maWxlX3RvX21hbmlmZXN0KG13cml0ZXIsIG1hbmlmZXN0X3BhdGgsCisJCQkJCQkJCSBzYi5z dF9zaXplLCBzYi5zdF9tdGltZSwKKwkJCQkJCQkJIGNoZWNrc3VtX3R5cGUsIGNoZWNrc3VtX2xl bmd0aCwKKwkJCQkJCQkJIGNoZWNrc3VtX3BheWxvYWQpOworCQl9CisKKwkJLyogQXZvaWQgbGVh a2luZyBtZW1vcnkuICovCisJCWlmIChjaGVja3N1bV9wYXlsb2FkICE9IE5VTEwpCisJCQlwZnJl ZShjaGVja3N1bV9wYXlsb2FkKTsKKwl9CisKKwljbG9zZWRpcihkaXIpOworfQorCisvKgorICog UmVhZCB0aGUgdmVyc2lvbiBudW1iZXIgZnJvbSBQR19WRVJTSU9OIGFuZCBjb252ZXJ0IGl0IHRv IHRoZSB1c3VhbCBzZXJ2ZXIKKyAqIHZlcnNpb24gbnVtYmVyIGZvcm1hdC4gKGUuZy4gSWYgUEdf VkVSU0lPTiBjb250YWlucyAiMTRcbiIgdGhpcyBmdW5jdGlvbgorICogd2lsbCByZXR1cm4gMTQw MDAwKQorICovCitzdGF0aWMgaW50CityZWFkX3BnX3ZlcnNpb25fZmlsZShjaGFyICpkaXJlY3Rv cnkpCit7CisJY2hhcgkJZmlsZW5hbWVbTUFYUEdQQVRIXTsKKwlTdHJpbmdJbmZvRGF0YSBidWY7 CisJaW50CQkJZmQ7CisJaW50CQkJdmVyc2lvbjsKKwljaGFyCSAgICplcDsKKworCS8qIENvbnN0 cnVjdCBwYXRobmFtZS4gKi8KKwlzbnByaW50ZihmaWxlbmFtZSwgTUFYUEdQQVRILCAiJXMvUEdf VkVSU0lPTiIsIGRpcmVjdG9yeSk7CisKKwkvKiBPcGVuIGZpbGUuICovCisJaWYgKChmZCA9IG9w ZW4oZmlsZW5hbWUsIE9fUkRPTkxZLCAwKSkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9w ZW4gZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOworCisJLyogUmVhZCBpbnRvIG1lbW9yeS4g TGVuZ3RoIGxpbWl0IG9mIDEyOCBzaG91bGQgYmUgbW9yZSB0aGFuIGdlbmVyb3VzLiAqLworCWlu aXRTdHJpbmdJbmZvKCZidWYpOworCXNsdXJwX2ZpbGUoZmQsIGZpbGVuYW1lLCAmYnVmLCAxMjgp OworCisJLyogQ2xvc2UgdGhlIGZpbGUuICovCisJaWYgKGNsb3NlKGZkKSAhPSAwKQorCQlwZ19m YXRhbCgiY291bGQgbm90IGNsb3NlIFwiJXNcIjogJW0iLCBmaWxlbmFtZSk7CisKKwkvKiBDb252 ZXJ0IHRvIGludGVnZXIuICovCisJZXJybm8gPSAwOworCXZlcnNpb24gPSBzdHJ0b3VsKGJ1Zi5k YXRhLCAmZXAsIDEwKTsKKwlpZiAoZXJybm8gIT0gMCB8fCAqZXAgIT0gJ1xuJykKKwl7CisJCS8q CisJCSAqIEluY3JlbWVudGFsIGJhY2t1cCBpcyBub3QgcmVsZXZhbnQgdG8gdmVyeSBvbGQgc2Vy dmVyIHZlcnNpb25zIHRoYXQKKwkJICogdXNlZCBtdWx0aS1wYXJ0IHZlcnNpb24gbnVtYmVyIChl LmcuIDkuNiwgb3IgOC40KS4gU28gaWYgd2Ugc2VlCisJCSAqIHdoYXQgbG9va3MgbGlrZSB0aGUg YmVnaW5uaW5nIG9mIHN1Y2ggYSB2ZXJzaW9uIG51bWJlciwganVzdCBiYWlsCisJCSAqIG91dC4K KwkJICovCisJCWlmICh2ZXJzaW9uIDwgMTAgJiYgKmVwID09ICcuJykKKwkJCXBnX2ZhdGFsKCIl czogc2VydmVyIHZlcnNpb24gdG9vIG9sZFxuIiwgZmlsZW5hbWUpOworCQlwZ19mYXRhbCgiJXM6 IGNvdWxkIG5vdCBwYXJzZSB2ZXJzaW9uIG51bWJlclxuIiwgZmlsZW5hbWUpOworCX0KKworCS8q IERlYnVnZ2luZyBvdXRwdXQuICovCisJcGdfbG9nX2RlYnVnKCJyZWFkIHNlcnZlciB2ZXJzaW9u ICVkIGZyb20gXCIlc1wiIiwgdmVyc2lvbiwgZmlsZW5hbWUpOworCisJLyogUmVsZWFzZSBtZW1v cnkgYW5kIHJldHVybiByZXN1bHQuICovCisJcGZyZWUoYnVmLmRhdGEpOworCXJldHVybiB2ZXJz aW9uICogMTAwMDA7Cit9CisKKy8qCisgKiBBZGQgYSBkaXJlY3RvcnkgdG8gdGhlIGxpc3Qgb2Yg b3V0cHV0IGRpcmVjdG9yaWVzIHRvIGNsZWFuIHVwLgorICovCitzdGF0aWMgdm9pZAorcmVtZW1i ZXJfdG9fY2xlYW51cF9kaXJlY3RvcnkoY2hhciAqdGFyZ2V0X3BhdGgsIGJvb2wgcm10b3BkaXIp Cit7CisJY2JfY2xlYW51cF9kaXIgKmRpciA9IHBnX21hbGxvYyhzaXplb2YoY2JfY2xlYW51cF9k aXIpKTsKKworCWRpci0+dGFyZ2V0X3BhdGggPSB0YXJnZXRfcGF0aDsKKwlkaXItPnJtdG9wZGly ID0gcm10b3BkaXI7CisJZGlyLT5uZXh0ID0gY2xlYW51cF9kaXJfbGlzdDsKKwljbGVhbnVwX2Rp cl9saXN0ID0gZGlyOworfQorCisvKgorICogRW1wdHkgb3V0IHRoZSBsaXN0IG9mIGRpcmVjdG9y aWVzIHNjaGVkdWxlZCBmb3IgY2xlYW51cCBhIGV4aXQuCisgKgorICogV2Ugd2FudCB0byByZW1v dmUgdGhlIG91dHB1dCBkaXJlY3RvcmllcyBvbmx5IG9uIGEgZmFpbHVyZSwgc28gY2FsbCB0aGlz CisgKiBmdW5jdGlvbiB3aGVuIHdlIGtub3cgdGhhdCB0aGUgb3BlcmF0aW9uIGhhcyBzdWNjZWVk ZWQuCisgKgorICogU2luY2Ugd2Ugb25seSBleHBlY3QgdGhpcyB0byBiZSBjYWxsZWQgd2hlbiB3 ZSdyZSBhYm91dCB0byBleGl0LCB3ZSBjb3VsZAorICoganVzdCBzZXQgY2xlYW51cF9kaXJfbGlz dCB0byBOVUxMIGFuZCBiZSBkb25lIHdpdGggaXQsIGJ1dCB3ZSBmcmVlIHRoZQorICogbWVtb3J5 IHRvIGJlIHRpZHkuCisgKi8KK3N0YXRpYyB2b2lkCityZXNldF9kaXJlY3RvcnlfY2xlYW51cF9s aXN0KHZvaWQpCit7CisJd2hpbGUgKGNsZWFudXBfZGlyX2xpc3QgIT0gTlVMTCkKKwl7CisJCWNi X2NsZWFudXBfZGlyICpkaXIgPSBjbGVhbnVwX2Rpcl9saXN0OworCisJCWNsZWFudXBfZGlyX2xp c3QgPSBjbGVhbnVwX2Rpcl9saXN0LT5uZXh0OworCQlwZnJlZShkaXIpOworCX0KK30KKworLyoK KyAqIFNjYW4gdGhlIHBnX3RibHNwYyBkaXJlY3Rvcnkgb2YgdGhlIGZpbmFsIGlucHV0IGJhY2t1 cCB0byBnZXQgYSBjYW5vbmljYWwKKyAqIGxpc3Qgb2Ygd2hhdCB0YWJsZXNwYWNlcyBhcmUgcGFy dCBvZiB0aGUgYmFja3VwLgorICoKKyAqICdwYXRobmFtZScgc2hvdWxkIGJlIHRoZSBwYXRoIHRv IHRoZSB0b3BsZXZlbCBiYWNrdXAgZGlyZWN0b3J5IGZvciB0aGUKKyAqIGZpbmFsIGJhY2t1cCBp biB0aGUgYmFja3VwIGNoYWluLgorICovCitzdGF0aWMgY2JfdGFibGVzcGFjZSAqCitzY2FuX2Zv cl9leGlzdGluZ190YWJsZXNwYWNlcyhjaGFyICpwYXRobmFtZSwgY2Jfb3B0aW9ucyAqb3B0KQor eworCWNoYXIJCXBnX3RibHNwY1tNQVhQR1BBVEhdOworCURJUgkJICAgKmRpcjsKKwlzdHJ1Y3Qg ZGlyZW50ICpkZTsKKwljYl90YWJsZXNwYWNlICp0c2xpc3QgPSBOVUxMOworCisJc25wcmludGYo cGdfdGJsc3BjLCBNQVhQR1BBVEgsICIlcy9wZ190YmxzcGMiLCBwYXRobmFtZSk7CisJcGdfbG9n X2RlYnVnKCJzY2FubmluZyBcIiVzXCIiLCBwZ190YmxzcGMpOworCisJaWYgKChkaXIgPSBvcGVu ZGlyKHBnX3RibHNwYykpID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBkaXJl Y3RvcnkgXCIlc1wiOiAlbSIsIHBhdGhuYW1lKTsKKworCXdoaWxlIChlcnJubyA9IDAsIChkZSA9 IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkKKwl7CisJCU9pZAkJCW9pZDsKKwkJY2hhcgkJdGJsc3Bj ZGlyW01BWFBHUEFUSF07CisJCWNoYXIJCWxpbmtfdGFyZ2V0W01BWFBHUEFUSF07CisJCWludAkJ CWxpbmtfbGVuZ3RoOworCQljYl90YWJsZXNwYWNlICp0czsKKwkJY2JfdGFibGVzcGFjZSAqb3Ro ZXJ0czsKKwkJUEdGaWxlVHlwZQl0eXBlOworCisJCS8qIFNpbGVudGx5IGlnbm9yZSAiLiIgYW5k ICIuLiIgZW50cmllcy4gKi8KKwkJaWYgKHN0cmNtcChkZS0+ZF9uYW1lLCAiLiIpID09IDAgfHwg c3RyY21wKGRlLT5kX25hbWUsICIuLiIpID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBDb25z dHJ1Y3QgZnVsbCBwYXRobmFtZS4gKi8KKwkJc25wcmludGYodGJsc3BjZGlyLCBNQVhQR1BBVEgs ICIlcy8lcyIsIHBnX3RibHNwYywgZGUtPmRfbmFtZSk7CisKKwkJLyogSWdub3JlIGFueSBmaWxl IG5hbWUgdGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBhIHByb3BlciBPSUQuICovCisJCWlmICghcGFy c2Vfb2lkKGRlLT5kX25hbWUsICZvaWQpKQorCQl7CisJCQlwZ19sb2dfZGVidWcoInNraXBwaW5n IFwiJXNcIiBiZWNhdXNlIHRoZSBmaWxlbmFtZSBpcyBub3QgYSBsZWdhbCB0YWJsZXNwYWNlIE9J RCIsCisJCQkJCQkgdGJsc3BjZGlyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogT25seSBz eW1ib2xpYyBsaW5rcyBhbmQgZGlyZWN0b3JpZXMgYXJlIHRhYmxlc3BhY2VzLiAqLworCQl0eXBl ID0gZ2V0X2RpcmVudF90eXBlKHRibHNwY2RpciwgZGUsIGZhbHNlLCBQR19MT0dfRVJST1IpOwor CQlpZiAodHlwZSA9PSBQR0ZJTEVUWVBFX0VSUk9SKQorCQkJZXhpdCgxKTsKKwkJaWYgKHR5cGUg IT0gUEdGSUxFVFlQRV9MTksgJiYgdHlwZSAhPSBQR0ZJTEVUWVBFX0RJUikKKwkJeworCQkJcGdf bG9nX2RlYnVnKCJza2lwcGluZyBcIiVzXCIgYmVjYXVzZSBpdCBpcyBuZWl0aGVyIGEgc3ltYm9s aWMgbGluayBub3IgYSBkaXJlY3RvcnkiLAorCQkJCQkJIHRibHNwY2Rpcik7CisJCQljb250aW51 ZTsKKwkJfQorCisJCS8qIENyZWF0ZSBhIG5ldyB0YWJsZXNwYWNlIG9iamVjdC4gKi8KKwkJdHMg PSBwZ19tYWxsb2MwKHNpemVvZihjYl90YWJsZXNwYWNlKSk7CisJCXRzLT5vaWQgPSBvaWQ7CisK KwkJLyoKKwkJICogSWYgaXQncyBhIGxpbmssIGl0J3Mgbm90IGFuIGluLXBsYWNlIHRhYmxlc3Bh Y2UuIE90aGVyd2lzZSwgaXQgbXVzdAorCQkgKiBiZSBhIGRpcmVjdG9yeSwgYW5kIHRodXMgYW4g aW4tcGxhY2UgdGFibGVzcGFjZS4KKwkJICovCisJCWlmICh0eXBlID09IFBHRklMRVRZUEVfTE5L KQorCQl7CisJCQljYl90YWJsZXNwYWNlX21hcHBpbmcgKnRzbWFwOworCisJCQkvKiBSZWFkIHRo ZSBsaW5rIHRhcmdldC4gKi8KKwkJCWxpbmtfbGVuZ3RoID0gcmVhZGxpbmsodGJsc3BjZGlyLCBs aW5rX3RhcmdldCwgc2l6ZW9mKGxpbmtfdGFyZ2V0KSk7CisJCQlpZiAobGlua19sZW5ndGggPCAw KQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBzeW1ib2xpYyBsaW5rIFwiJXNcIjogJW0i LAorCQkJCQkJIHRibHNwY2Rpcik7CisJCQlpZiAobGlua19sZW5ndGggPj0gc2l6ZW9mKGxpbmtf dGFyZ2V0KSkKKwkJCQlwZ19mYXRhbCgic3ltYm9saWMgbGluayBcIiVzXCIgaXMgdG9vIGxvbmci LCB0YmxzcGNkaXIpOworCQkJbGlua190YXJnZXRbbGlua19sZW5ndGhdID0gJ1wwJzsKKwkJCWlm ICghaXNfYWJzb2x1dGVfcGF0aChsaW5rX3RhcmdldCkpCisJCQkJcGdfZmF0YWwoInN5bWJvbGlj IGxpbmsgXCIlc1wiIGlzIHJlbGF0aXZlIiwgdGJsc3BjZGlyKTsKKworCQkJLyogQ2FvbmljYWxp emUgdGhlIGxpbmsgdGFyZ2V0LiAqLworCQkJY2Fub25pY2FsaXplX3BhdGgobGlua190YXJnZXQp OworCisJCQkvKgorCQkJICogRmluZCB0aGUgY29ycmVzcG9uZGluZyB0YWJsZXNwYWNlIG1hcHBp bmcgYW5kIGNvcHkgdGhlIHJlbGV2YW50CisJCQkgKiBkZXRhaWxzIGludG8gdGhlIG5ldyB0YWJs ZXNwYWNlIGVudHJ5LgorCQkJICovCisJCQlmb3IgKHRzbWFwID0gb3B0LT50c21hcHBpbmdzOyB0 c21hcCAhPSBOVUxMOyB0c21hcCA9IHRzbWFwLT5uZXh0KQorCQkJeworCQkJCWlmIChzdHJjbXAo dHNtYXAtPm9sZF9kaXIsIGxpbmtfdGFyZ2V0KSA9PSAwKQorCQkJCXsKKwkJCQkJc3RybmNweSh0 cy0+b2xkX2RpciwgdHNtYXAtPm9sZF9kaXIsIE1BWFBHUEFUSCk7CisJCQkJCXN0cm5jcHkodHMt Pm5ld19kaXIsIHRzbWFwLT5uZXdfZGlyLCBNQVhQR1BBVEgpOworCQkJCQl0cy0+aW5fcGxhY2Ug PSBmYWxzZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQkvKiBFdmVyeSBub24taW4t cGxhY2UgdGFibGVzcGFjZSBtdXN0IGJlIG1hcHBlZC4gKi8KKwkJCWlmICh0c21hcCA9PSBOVUxM KQorCQkJCXBnX2ZhdGFsKCJ0YWJsZXNwYWNlIGF0IFwiJXNcIiBoYXMgbm8gdGFibGVzcGFjZSBt YXBwaW5nIiwKKwkJCQkJCSBsaW5rX3RhcmdldCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgor CQkJICogRm9yIGFuIGluLXBsYWNlIHRhYmxlc3BhY2UsIHRoZXJlJ3Mgbm8gc2VwYXJhdGUgZGly ZWN0b3J5LCBzbworCQkJICogd2UganVzdCByZWNvcmQgdGhlIHBhdGhzIHdpdGhpbiB0aGUgZGF0 YSBkaXJlY3Rvcmllcy4KKwkJCSAqLworCQkJc25wcmludGYodHMtPm9sZF9kaXIsIE1BWFBHUEFU SCwgIiVzLyVzIiwgcGdfdGJsc3BjLCBkZS0+ZF9uYW1lKTsKKwkJCXNucHJpbnRmKHRzLT5uZXdf ZGlyLCBNQVhQR1BBVEgsICIlcy9wZ190YmxwYy8lcyIsIG9wdC0+b3V0cHV0LAorCQkJCQkgZGUt PmRfbmFtZSk7CisJCQl0cy0+aW5fcGxhY2UgPSB0cnVlOworCQl9CisKKwkJLyogVGFibGVzcGFj ZXMgc2hvdWxkIG5vdCBzaGFyZSBhIGRpcmVjdG9yeS4gKi8KKwkJZm9yIChvdGhlcnRzID0gdHNs aXN0OyBvdGhlcnRzICE9IE5VTEw7IG90aGVydHMgPSBvdGhlcnRzLT5uZXh0KQorCQkJaWYgKHN0 cmNtcCh0cy0+bmV3X2Rpciwgb3RoZXJ0cy0+bmV3X2RpcikgPT0gMCkKKwkJCQlwZ19mYXRhbCgi dGFibGVzcGFjZXMgd2l0aCBPSURzICV1IGFuZCAldSBib3RoIHBvaW50IGF0IFwiJXNcIiIsCisJ CQkJCQkgb3RoZXJ0cy0+b2lkLCBvaWQsIHRzLT5uZXdfZGlyKTsKKworCQkvKiBBZGQgdGhpcyB0 YWJsZXNwYWNlIHRvIHRoZSBsaXN0LiAqLworCQl0cy0+bmV4dCA9IHRzbGlzdDsKKwkJdHNsaXN0 ID0gdHM7CisJfQorCisJcmV0dXJuIHRzbGlzdDsKK30KKworLyoKKyAqIFJlYWQgYSBmaWxlIGlu dG8gYSBTdHJpbmdJbmZvLgorICoKKyAqIGZkIGlzIHVzZWQgZm9yIHRoZSBhY3R1YWwgZmlsZSBJ L08sIGZpbGVuYW1lIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMuCisgKiBBIGZpbGUgbG9u Z2VyIHRoYW4gbWF4bGVuIGlzIGEgZmF0YWwgZXJyb3IuCisgKi8KK3N0YXRpYyB2b2lkCitzbHVy cF9maWxlKGludCBmZCwgY2hhciAqZmlsZW5hbWUsIFN0cmluZ0luZm8gYnVmLCBpbnQgbWF4bGVu KQoreworCXN0cnVjdCBzdGF0IHN0OworCXNzaXplX3QJCXJiOworCisJLyogQ2hlY2sgZmlsZSBz aXplLCBhbmQgY29tcGxhaW4gaWYgaXQncyB0b28gbGFyZ2UuICovCisJaWYgKGZzdGF0KGZkLCAm c3QpICE9IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgc3RhdCBcIiVzXCI6ICVtIiwgZmlsZW5h bWUpOworCWlmIChzdC5zdF9zaXplID4gbWF4bGVuKQorCQlwZ19mYXRhbCgiZmlsZSBcIiVzXCIg aXMgdG9vIGxhcmdlIiwgZmlsZW5hbWUpOworCisJLyogTWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdo IHNwYWNlLiAqLworCWVubGFyZ2VTdHJpbmdJbmZvKGJ1Ziwgc3Quc3Rfc2l6ZSk7CisKKwkvKiBS ZWFkIHRoZSBkYXRhLiAqLworCXJiID0gcmVhZChmZCwgJmJ1Zi0+ZGF0YVtidWYtPmxlbl0sIHN0 LnN0X3NpemUpOworCisJLyoKKwkgKiBXZSBkb24ndCBleHBlY3QgYW55IGNvbmN1cnJlbnQgY2hh bmdlcywgc28gd2Ugc2hvdWxkIHJlYWQgZXhhY3RseSB0aGUKKwkgKiBleHBlY3RlZCBudW1iZXIg b2YgYnl0ZXMuCisJICovCisJaWYgKHJiICE9IHN0LnN0X3NpemUpCisJeworCQlpZiAocmIgPCAw KQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1l KTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiByZWFk IG9ubHkgJWQgb2YgJWQgYnl0ZXMiLAorCQkJCQkgZmlsZW5hbWUsIChpbnQpIHJiLCAoaW50KSBz dC5zdF9zaXplKTsKKwl9CisKKwkvKiBBZGp1c3QgYnVmZmVyIGxlbmd0aCBmb3IgbmV3IGRhdGEg YW5kIHJlc3RvcmUgdHJhaWxpbmctXDAgaW52YXJpYW50ICovCisJYnVmLT5sZW4gKz0gcmI7CisJ YnVmLT5kYXRhW2J1Zi0+bGVuXSA9ICdcMCc7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Nv bWJpbmViYWNrdXAvcmVjb25zdHJ1Y3QuYyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC9yZWNv bnN0cnVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZkZWNkZDg5 MzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvcmVjb25zdHJ1 Y3QuYwpAQCAtMCwwICsxLDY4NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcmVjb25z dHJ1Y3QuYworICoJCVJlY29uc3RydWN0IGZ1bGwgZmlsZSBmcm9tIGluY3JlbWVudGFsIGZpbGUg YW5kIGJhY2t1cCBjaGFpbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMywgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICBzcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvcmVjb25zdHJ1Y3QuYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgPHVuaXN0 ZC5oPgorCisjaW5jbHVkZSAiYmFja3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwuaCIKKyNpbmNs dWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKKyNp bmNsdWRlICJjb3B5X2ZpbGUuaCIKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1 ZGUgInJlY29uc3RydWN0LmgiCisjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgorCisvKgorICog QW4gcmZpbGUgc3RvcmVzIHRoZSBkYXRhIHRoYXQgd2UgbmVlZCBpbiBvcmRlciB0byBiZSBhYmxl IHRvIHVzZSBzb21lIGZpbGUKKyAqIG9uIGRpc2sgZm9yIHJlY29uc3RydWN0aW9uLiBGb3IgYW55 IGdpdmVuIG91dHB1dCBmaWxlLCB3ZSBjcmVhdGUgb25lIHJmaWxlCisgKiBwZXIgYmFja3VwIHRo YXQgd2UgbmVlZCB0byBjb25zdWx0IHdoZW4gd2UgY29uc3RydWN0aW5nIHRoYXQgb3V0cHV0IGZp bGUuCisgKgorICogSWYgd2UgZmluZCBhIGZ1bGwgdmVyc2lvbiBvZiB0aGUgZmlsZSBpbiB0aGUg YmFja3VwIGNoYWluLCB0aGVuIG9ubHkKKyAqIGZpbGVuYW1lIGFuZCBmZCBhcmUgaW5pdGlhbGl6 ZWQ7IHRoZSByZW1haW5pbmcgZmllbGRzIGFyZSAwIG9yIE5VTEwuCisgKiBGb3IgYW4gaW5jcmVt ZW50YWwgZmlsZSwgaGVhZGVyX2xlbmd0aCwgbnVtX2Jsb2NrcywgcmVsYXRpdmVfYmxvY2tfbnVt YmVycywKKyAqIGFuZCB0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCBhcmUgYWxzbyBzZXQuCisgKgor ICogbnVtX2Jsb2Nrc19yZWFkIGFuZCBoaWdoZXN0X29mZnNldF9yZWFkIGFsd2F5cyBzdGFydCBv dXQgYXMgMC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcmZpbGUKK3sKKwljaGFyCSAgICpmaWxlbmFt ZTsKKwlpbnQJCQlmZDsKKwlzaXplX3QJCWhlYWRlcl9sZW5ndGg7CisJdW5zaWduZWQJbnVtX2Js b2NrczsKKwlCbG9ja051bWJlciAqcmVsYXRpdmVfYmxvY2tfbnVtYmVyczsKKwl1bnNpZ25lZAl0 cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aDsKKwl1bnNpZ25lZAludW1fYmxvY2tzX3JlYWQ7CisJb2Zm X3QJCWhpZ2hlc3Rfb2Zmc2V0X3JlYWQ7Cit9IHJmaWxlOworCitzdGF0aWMgdm9pZCBkZWJ1Z19y ZWNvbnN0cnVjdGlvbihpbnQgbl9zb3VyY2UsCisJCQkJCQkJCSByZmlsZSAqKnNvdXJjZXMsCisJ CQkJCQkJCSBib29sIGRyeV9ydW4pOworc3RhdGljIHVuc2lnbmVkIGZpbmRfcmVjb25zdHJ1Y3Rl ZF9ibG9ja19sZW5ndGgocmZpbGUgKnMpOworc3RhdGljIHJmaWxlICptYWtlX2luY3JlbWVudGFs X3JmaWxlKGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRpYyByZmlsZSAqbWFrZV9yZmlsZShjaGFyICpm aWxlbmFtZSwgYm9vbCBtaXNzaW5nX29rKTsKK3N0YXRpYyB2b2lkIHdyaXRlX3JlY29uc3RydWN0 ZWRfZmlsZShjaGFyICppbnB1dF9maWxlbmFtZSwKKwkJCQkJCQkJCSBjaGFyICpvdXRwdXRfZmls ZW5hbWUsCisJCQkJCQkJCQkgdW5zaWduZWQgYmxvY2tfbGVuZ3RoLAorCQkJCQkJCQkJIHJmaWxl ICoqc291cmNlbWFwLAorCQkJCQkJCQkJIG9mZl90ICpvZmZzZXRtYXAsCisJCQkJCQkJCQkgcGdf Y2hlY2tzdW1fY29udGV4dCAqY2hlY2tzdW1fY3R4LAorCQkJCQkJCQkJIGJvb2wgZGVidWcsCisJ CQkJCQkJCQkgYm9vbCBkcnlfcnVuKTsKK3N0YXRpYyB2b2lkIHJlYWRfYnl0ZXMocmZpbGUgKnJm LCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCk7CisKKy8qCisgKiBSZWNvbnN0cnVjdCBh IGZ1bGwgZmlsZSBmcm9tIGFuIGluY3JlbWVudGFsIGZpbGUgYW5kIGEgY2hhaW4gb2YgcHJpb3IK KyAqIGJhY2t1cHMuCisgKgorICogaW5wdXRfZmlsZW5hbWUgc2hvdWxkIGJlIHRoZSBwYXRoIHRv IHRoZSBpbmNyZW1lbnRhbCBmaWxlLCBhbmQKKyAqIG91dHB1dF9maWxlbmFtZSBzaG91bGQgYmUg dGhlIHBhdGggd2hlcmUgdGhlIHJlY29uc3RydWN0ZWQgZmlsZSBpcyB0byBiZQorICogd3JpdHRl bi4KKyAqCisgKiByZWxhdGl2ZV9wYXRoIHNob3VsZCBiZSB0aGUgcmVsYXRpdmUgcGF0aCB0byB0 aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcworICogZmlsZS4gYmFyZV9maWxlX25hbWUgc2hv dWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSwKKyAqIHdp dGhvdXQgIklOQ1JFTUVOVEFMLiIuCisgKgorICogbl9wcmlvcl9iYWNrdXBzIGlzIHRoZSBudW1i ZXIgb2YgcHJpb3IgYmFja3VwcywgYW5kIHByaW9yX2JhY2t1cF9kaXJzIGlzCisgKiBhbiBhcnJh eSBvZiBwYXRobmFtZXMgd2hlcmUgdGhvc2UgYmFja3VwcyBjYW4gYmUgZm91bmQuCisgKi8KK3Zv aWQKK3JlY29uc3RydWN0X2Zyb21faW5jcmVtZW50YWxfZmlsZShjaGFyICppbnB1dF9maWxlbmFt ZSwKKwkJCQkJCQkJICBjaGFyICpvdXRwdXRfZmlsZW5hbWUsCisJCQkJCQkJCSAgY2hhciAqcmVs YXRpdmVfcGF0aCwKKwkJCQkJCQkJICBjaGFyICpiYXJlX2ZpbGVfbmFtZSwKKwkJCQkJCQkJICBp bnQgbl9wcmlvcl9iYWNrdXBzLAorCQkJCQkJCQkgIGNoYXIgKipwcmlvcl9iYWNrdXBfZGlycywK KwkJCQkJCQkJICBtYW5pZmVzdF9kYXRhICoqbWFuaWZlc3RzLAorCQkJCQkJCQkgIGNoYXIgKm1h bmlmZXN0X3BhdGgsCisJCQkJCQkJCSAgcGdfY2hlY2tzdW1fdHlwZSBjaGVja3N1bV90eXBlLAor CQkJCQkJCQkgIGludCAqY2hlY2tzdW1fbGVuZ3RoLAorCQkJCQkJCQkgIHVpbnQ4ICoqY2hlY2tz dW1fcGF5bG9hZCwKKwkJCQkJCQkJICBib29sIGRlYnVnLAorCQkJCQkJCQkgIGJvb2wgZHJ5X3J1 bikKK3sKKwlyZmlsZQkgICoqc291cmNlOworCXJmaWxlCSAgICpsYXRlc3Rfc291cmNlID0gTlVM TDsKKwlyZmlsZQkgICoqc291cmNlbWFwOworCW9mZl90CSAgICpvZmZzZXRtYXA7CisJdW5zaWdu ZWQJYmxvY2tfbGVuZ3RoOworCXVuc2lnbmVkCWk7CisJdW5zaWduZWQJc2lkeCA9IG5fcHJpb3Jf YmFja3VwczsKKwlib29sCQlmdWxsX2NvcHlfcG9zc2libGUgPSB0cnVlOworCWludAkJCWNvcHlf c291cmNlX2luZGV4ID0gLTE7CisJcmZpbGUJICAgKmNvcHlfc291cmNlID0gTlVMTDsKKwlwZ19j aGVja3N1bV9jb250ZXh0IGNoZWNrc3VtX2N0eDsKKworCS8qCisJICogRXZlcnkgYmxvY2sgbXVz dCBjb21lIGVpdGhlciBmcm9tIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZmlsZSBvcgorCSAq IGZyb20gb25lIG9mIHRoZSBwcmlvciBiYWNrdXBzLgorCSAqLworCXNvdXJjZSA9IHBnX21hbGxv YzAoc2l6ZW9mKHJmaWxlICopICogKDEgKyBuX3ByaW9yX2JhY2t1cHMpKTsKKworCS8qCisJICog VXNlIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBsYXRlc3QgaW5jcmVtZW50YWwgZmlsZSB0byBm aWd1cmUgb3V0IGhvdworCSAqIGxvbmcgdGhlIHJlY29uc3RydWN0ZWQgZmlsZSBzaG91bGQgYmUu CisJICovCisJbGF0ZXN0X3NvdXJjZSA9IG1ha2VfaW5jcmVtZW50YWxfcmZpbGUoaW5wdXRfZmls ZW5hbWUpOworCXNvdXJjZVtuX3ByaW9yX2JhY2t1cHNdID0gbGF0ZXN0X3NvdXJjZTsKKwlibG9j a19sZW5ndGggPSBmaW5kX3JlY29uc3RydWN0ZWRfYmxvY2tfbGVuZ3RoKGxhdGVzdF9zb3VyY2Up OworCisJLyoKKwkgKiBGb3IgZWFjaCBibG9jayBpbiB0aGUgb3V0cHV0IGZpbGUsIHdlIG5lZWQg dG8ga25vdyBmcm9tIHdoaWNoIGZpbGUgd2UKKwkgKiBuZWVkIHRvIG9idGFpbiBpdCBhbmQgYXQg d2hhdCBvZmZzZXQgaW4gdGhhdCBmaWxlIGl0J3Mgc3RvcmVkLgorCSAqIHNvdXJjZW1hcCBnaXZl cyB1cyB0aGUgZmlyc3Qgb2YgdGhlc2UgdGhpbmdzLCBhbmQgb2Zmc2V0bWFwIHRoZSBsYXR0ZXIu CisJICovCisJc291cmNlbWFwID0gcGdfbWFsbG9jMChzaXplb2YocmZpbGUgKikgKiBibG9ja19s ZW5ndGgpOworCW9mZnNldG1hcCA9IHBnX21hbGxvYzAoc2l6ZW9mKG9mZl90KSAqIGJsb2NrX2xl bmd0aCk7CisKKwkvKgorCSAqIEV2ZXJ5IGJsb2NrIHRoYXQgaXMgcHJlc2VudCBpbiB0aGUgbmV3 ZXN0IGluY3JlbWVudGFsIGZpbGUgc2hvdWxkIGJlCisJICogc291cmNlZCBmcm9tIHRoYXQgZmls ZS4gSWYgaXQgcHJlY2VkZXMgdGhlIHRydW5jYXRpb25fYmxvY2tfbGVuZ3RoLAorCSAqIGl0J3Mg YSBibG9jayB0aGF0IHdlIHdvdWxkIG90aGVyd2lzZSBoYXZlIGhhZCB0byBmaW5kIGluIGFuIG9s ZGVyCisJICogYmFja3VwIGFuZCB0aHVzIHJlZHVjZXMgdGhlIG51bWJlciBvZiBibG9ja3MgcmVt YWluaW5nIHRvIGJlIGZvdW5kIGJ5CisJICogb25lOyBvdGhlcndpc2UsIGl0J3MgYW4gZXh0cmEg YmxvY2sgdGhhdCBuZWVkcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUKKwkgKiBvdXRwdXQgYnV0IHdv dWxkIG5vdCBoYXZlIG5lZWRlZCB0byBiZSBmb3VuZCBpbiBhbiBvbGRlciBiYWNrdXAgaWYgaXQK KwkgKiBoYWQgbm90IGJlZW4gcHJlc2VudC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGF0ZXN0 X3NvdXJjZS0+bnVtX2Jsb2NrczsgKytpKQorCXsKKwkJQmxvY2tOdW1iZXIgYiA9IGxhdGVzdF9z b3VyY2UtPnJlbGF0aXZlX2Jsb2NrX251bWJlcnNbaV07CisKKwkJQXNzZXJ0KGIgPCBibG9ja19s ZW5ndGgpOworCQlzb3VyY2VtYXBbYl0gPSBsYXRlc3Rfc291cmNlOworCQlvZmZzZXRtYXBbYl0g PSBsYXRlc3Rfc291cmNlLT5oZWFkZXJfbGVuZ3RoICsgKGkgKiBCTENLU1opOworCisJCS8qCisJ CSAqIEEgZnVsbCBjb3B5IG9mIGEgZmlsZSBmcm9tIGFuIGVhcmxpZXIgYmFja3VwIGlzIG9ubHkg cG9zc2libGUgaWYgbm8KKwkJICogYmxvY2tzIGFyZSBuZWVkZWQgZnJvbSBhbnkgbGF0ZXIgaW5j cmVtZW50YWwgZmlsZS4KKwkJICovCisJCWZ1bGxfY29weV9wb3NzaWJsZSA9IGZhbHNlOworCX0K KworCXdoaWxlICgxKQorCXsKKwkJY2hhcgkJc291cmNlX2ZpbGVuYW1lW01BWFBHUEFUSF07CisJ CXJmaWxlCSAgICpzOworCisJCS8qCisJCSAqIE1vdmUgdG8gdGhlIG5leHQgYmFja3VwIGluIHRo ZSBjaGFpbi4gSWYgdGhlcmUgYXJlIG5vIG1vcmUsIHRoZW4KKwkJICogd2UncmUgZG9uZS4KKwkJ ICovCisJCWlmIChzaWR4ID09IDApCisJCQlicmVhazsKKwkJLS1zaWR4OworCisJCS8qCisJCSAq IExvb2sgZm9yIHRoZSBmdWxsIGZpbGUgaW4gdGhlIHByZXZpb3VzIGJhY2t1cC4gSWYgbm90IGZv dW5kLCB0aGVuCisJCSAqIGxvb2sgZm9yIGFuIGluY3JlbWVudGFsIGZpbGUgaW5zdGVhZC4KKwkJ ICovCisJCXNucHJpbnRmKHNvdXJjZV9maWxlbmFtZSwgTUFYUEdQQVRILCAiJXMvJXMvJXMiLAor CQkJCSBwcmlvcl9iYWNrdXBfZGlyc1tzaWR4XSwgcmVsYXRpdmVfcGF0aCwgYmFyZV9maWxlX25h bWUpOworCQlpZiAoKHMgPSBtYWtlX3JmaWxlKHNvdXJjZV9maWxlbmFtZSwgdHJ1ZSkpID09IE5V TEwpCisJCXsKKwkJCXNucHJpbnRmKHNvdXJjZV9maWxlbmFtZSwgTUFYUEdQQVRILCAiJXMvJXMv SU5DUkVNRU5UQUwuJXMiLAorCQkJCQkgcHJpb3JfYmFja3VwX2RpcnNbc2lkeF0sIHJlbGF0aXZl X3BhdGgsIGJhcmVfZmlsZV9uYW1lKTsKKwkJCXMgPSBtYWtlX2luY3JlbWVudGFsX3JmaWxlKHNv dXJjZV9maWxlbmFtZSk7CisJCX0KKwkJc291cmNlW3NpZHhdID0gczsKKworCQkvKgorCQkgKiBJ ZiBzLT5oZWFkZXJfbGVuZ3RoID09IDAsIHRoZW4gdGhpcyBpcyBhIGZ1bGwgZmlsZTsgb3RoZXJ3 aXNlLCBpdCdzCisJCSAqIGFuIGluY3JlbWVudGFsIGZpbGUuCisJCSAqLworCQlpZiAocy0+aGVh ZGVyX2xlbmd0aCA9PSAwKQorCQl7CisJCQlzdHJ1Y3Qgc3RhdCBzYjsKKwkJCUJsb2NrTnVtYmVy IGI7CisJCQlCbG9ja051bWJlciBibG9ja2xlbmd0aDsKKworCQkJLyogV2UgbmVlZCB0byBrbm93 IHRoZSBsZW5ndGggb2YgdGhlIGZpbGUuICovCisJCQlpZiAoZnN0YXQocy0+ZmQsICZzYikgPCAw KQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgc3RhdCBcIiVzXCI6ICVtIiwgcy0+ZmlsZW5hbWUp OworCisJCQkvKgorCQkJICogU2luY2Ugd2UgZm91bmQgYSBmdWxsIGZpbGUsIHNvdXJjZSBhbGwg YmxvY2tzIGZyb20gaXQgdGhhdAorCQkJICogZXhpc3QgaW4gdGhlIGZpbGUuCisJCQkgKgorCQkJ ICogTm90ZSB0aGF0IHRoZXJlIG1heSBiZSBibG9ja3MgdGhhdCBkb24ndCBleGlzdCBlaXRoZXIg aW4gdGhpcworCQkJICogZmlsZSBvciBpbiBhbnkgaW5jcmVtZW50YWwgZmlsZSBidXQgdGhhdCBw cmVjZWRlCisJCQkgKiB0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aC4gVGhlc2UgYXJlLCBwcmVzdW1h Ymx5LCB6ZXJvLWZpbGxlZAorCQkJICogYmxvY2tzIHRoYXQgcmVzdWx0IGZyb20gdGhlIHNlcnZl ciBleHRlbmRpbmcgdGhlIGZpbGUgYnV0CisJCQkgKiB0YWtpbmcgbm8gYWN0aW9uIG9uIHRob3Nl IGJsb2NrcyB0aGF0IGdlbmVyYXRlZCBhbnkgV0FMLgorCQkJICoKKwkJCSAqIFNhZGx5LCB3ZSBo YXZlIG5vIHdheSBvZiB2YWxpZGF0aW5nIHRoYXQgdGhpcyBpcyByZWFsbHkgd2hhdAorCQkJICog aGFwcGVuZWQsIGFuZCBuZWl0aGVyIGRvZXMgdGhlIHNlcnZlci4gRnJvbSBpdCdzIHBlcnNwZWN0 aXZlLAorCQkJICogYW4gdW5tb2RpZmllZCBibG9jayB0aGF0IGNvbnRhaW5zIGRhdGEgbG9va3Mg ZXhhY3RseSB0aGUgc2FtZQorCQkJICogYXMgYSB6ZXJvLWZpbGxlZCBibG9jayB0aGF0IG5ldmVy IGhhZCBhbnkgZGF0YTogZWl0aGVyIHdheSwKKwkJCSAqIGl0J3Mgbm90IG1lbnRpb25lZCBpbiBh bnkgV0FMIHN1bW1hcnkgYW5kIHRoZSBzZXJ2ZXIgaGFzIG5vCisJCQkgKiByZWFzb24gdG8gcmVh ZCBpdC4gRnJvbSBvdXIgcGVyc3BlY3RpdmUsIGFsbCB3ZSBrbm93IGlzIHRoYXQKKwkJCSAqIG5v Ym9keSBoYWQgYSByZWFzb24gdG8gYmFjayB1cCB0aGUgYmxvY2suIFRoYXQgY2VydGFpbmx5IG1l YW5zCisJCQkgKiB0aGF0IHRoZSBibG9jayBkaWRuJ3QgZXhpc3QgYXQgdGhlIHRpbWUgb2YgdGhl IGZ1bGwgYmFja3VwLCBidXQKKwkJCSAqIHRoZSBzdXBwb3NpdGlvbiB0aGF0IGl0IHdhcyBhbGwg emVyb2VzIGF0IHRoZSB0aW1lIG9mIGV2ZXJ5CisJCQkgKiBsYXRlciBiYWNrdXAgaXMgb25lIHRo YXQgd2UgY2FuJ3QgdmFsaWRhdGUuCisJCQkgKi8KKwkJCWJsb2NrbGVuZ3RoID0gc2Iuc3Rfc2l6 ZSAvIEJMQ0tTWjsKKwkJCWZvciAoYiA9IDA7IGIgPCBsYXRlc3Rfc291cmNlLT50cnVuY2F0aW9u X2Jsb2NrX2xlbmd0aDsgKytiKQorCQkJeworCQkJCWlmIChzb3VyY2VtYXBbYl0gPT0gTlVMTCAm JiBiIDwgYmxvY2tsZW5ndGgpCisJCQkJeworCQkJCQlzb3VyY2VtYXBbYl0gPSBzOworCQkJCQlv ZmZzZXRtYXBbYl0gPSBiICogQkxDS1NaOworCQkJCX0KKwkJCX0KKworCQkJLyoKKwkJCSAqIElm IGEgZnVsbCBjb3B5IGxvb2tzIHBvc3NpYmxlLCBjaGVjayB3aGV0aGVyIHRoZSByZXN1bHRpbmcg ZmlsZQorCQkJICogc2hvdWxkIGJlIGV4YWN0bHkgYXMgbG9uZyBhcyB0aGUgc291cmNlIGZpbGUg aXMuIElmIHNvLCBhIGZ1bGwKKwkJCSAqIGNvcHkgaXMgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIG5v dC4KKwkJCSAqLworCQkJaWYgKGZ1bGxfY29weV9wb3NzaWJsZSkKKwkJCXsKKwkJCQl1aW50NjQJ CWV4cGVjdGVkX2xlbmd0aDsKKworCQkJCWV4cGVjdGVkX2xlbmd0aCA9CisJCQkJCSh1aW50NjQp IGxhdGVzdF9zb3VyY2UtPnRydW5jYXRpb25fYmxvY2tfbGVuZ3RoOworCQkJCWV4cGVjdGVkX2xl bmd0aCAqPSBCTENLU1o7CisJCQkJaWYgKGV4cGVjdGVkX2xlbmd0aCA9PSBzYi5zdF9zaXplKQor CQkJCXsKKwkJCQkJY29weV9zb3VyY2UgPSBzOworCQkJCQljb3B5X3NvdXJjZV9pbmRleCA9IHNp ZHg7CisJCQkJfQorCQkJfQorCisJCQkvKiBXZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIGFueSBm dXJ0aGVyIHNvdXJjZXMuICovCisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFNpbmNlIHdl IGZvdW5kIGFub3RoZXIgaW5jcmVtZW50YWwgZmlsZSwgc291cmNlIGFsbCBibG9ja3MgZnJvbSBp dAorCQkgKiB0aGF0IHdlIG5lZWQgYnV0IGRvbid0IHlldCBoYXZlLgorCQkgKi8KKwkJZm9yIChp ID0gMDsgaSA8IHMtPm51bV9ibG9ja3M7ICsraSkKKwkJeworCQkJQmxvY2tOdW1iZXIgYiA9IHMt PnJlbGF0aXZlX2Jsb2NrX251bWJlcnNbaV07CisKKwkJCWlmIChiIDwgbGF0ZXN0X3NvdXJjZS0+ dHJ1bmNhdGlvbl9ibG9ja19sZW5ndGggJiYKKwkJCQlzb3VyY2VtYXBbYl0gPT0gTlVMTCkKKwkJ CXsKKwkJCQlzb3VyY2VtYXBbYl0gPSBzOworCQkJCW9mZnNldG1hcFtiXSA9IHMtPmhlYWRlcl9s ZW5ndGggKyAoaSAqIEJMQ0tTWik7CisKKwkJCQkvKgorCQkJCSAqIEEgZnVsbCBjb3B5IG9mIGEg ZmlsZSBmcm9tIGFuIGVhcmxpZXIgYmFja3VwIGlzIG9ubHkKKwkJCQkgKiBwb3NzaWJsZSBpZiBu byBibG9ja3MgYXJlIG5lZWRlZCBmcm9tIGFueSBsYXRlciBpbmNyZW1lbnRhbAorCQkJCSAqIGZp bGUuCisJCQkJICovCisJCQkJZnVsbF9jb3B5X3Bvc3NpYmxlID0gZmFsc2U7CisJCQl9CisJCX0K Kwl9CisKKwkvKgorCSAqIElmIGEgY2hlY2tzdW0gb2YgdGhlIHJlcXVpcmVkIHR5cGUgYWxyZWFk eSBleGlzdHMgaW4gdGhlCisJICogYmFja3VwX21hbmlmZXN0IGZvciB0aGUgcmVsZXZhbnQgaW5w dXQgZGlyZWN0b3J5LCB3ZSBjYW4gc2F2ZSBzb21lIHdvcmsKKwkgKiBieSByZXVzaW5nIHRoYXQg Y2hlY2tzdW0gaW5zdGVhZCBvZiBjb21wdXRpbmcgYSBuZXcgb25lLgorCSAqLworCWlmIChjb3B5 X3NvdXJjZV9pbmRleCA+PSAwICYmIG1hbmlmZXN0c1tjb3B5X3NvdXJjZV9pbmRleF0gIT0gTlVM TCAmJgorCQljaGVja3N1bV90eXBlICE9IENIRUNLU1VNX1RZUEVfTk9ORSkKKwl7CisJCW1hbmlm ZXN0X2ZpbGUgKm1maWxlOworCisJCW1maWxlID0gbWFuaWZlc3RfZmlsZXNfbG9va3VwKG1hbmlm ZXN0c1tjb3B5X3NvdXJjZV9pbmRleF0tPmZpbGVzLAorCQkJCQkJCQkJICBtYW5pZmVzdF9wYXRo KTsKKwkJaWYgKG1maWxlID09IE5VTEwpCisJCXsKKwkJCWNoYXIJICAgKnBhdGggPSBwc3ByaW50 ZigiJXMvYmFja3VwX21hbmlmZXN0IiwKKwkJCQkJCQkJCQlwcmlvcl9iYWNrdXBfZGlyc1tjb3B5 X3NvdXJjZV9pbmRleF0pOworCisJCQkvKgorCQkJICogVGhlIGRpcmVjdG9yeSBpcyBvdXQgb2Yg c3luYyB3aXRoIHRoZSBiYWNrdXBfbWFuaWZlc3QsIHNvIGVtaXQKKwkJCSAqIGEgd2FybmluZy4K KwkJCSAqLworCQkJLyotIHRyYW5zbGF0b3I6IHRoZSBmaXJzdCAlcyBpcyBhIGJhY2t1cCBtYW5p ZmVzdCBmaWxlLCB0aGUgc2Vjb25kIGlzIGEgZmlsZSBhYnNlbnQgdGhlcmVpbiAqLworCQkJcGdf bG9nX3dhcm5pbmcoIlwiJXNcIiBjb250YWlucyBubyBlbnRyeSBmb3IgXCIlc1wiIiwKKwkJCQkJ CSAgIHBhdGgsCisJCQkJCQkgICBtYW5pZmVzdF9wYXRoKTsKKwkJCXBmcmVlKHBhdGgpOworCQl9 CisJCWVsc2UgaWYgKG1maWxlLT5jaGVja3N1bV90eXBlID09IGNoZWNrc3VtX3R5cGUpCisJCXsK KwkJCSpjaGVja3N1bV9sZW5ndGggPSBtZmlsZS0+Y2hlY2tzdW1fbGVuZ3RoOworCQkJKmNoZWNr c3VtX3BheWxvYWQgPSBwZ19tYWxsb2MoKmNoZWNrc3VtX2xlbmd0aCk7CisJCQltZW1jcHkoKmNo ZWNrc3VtX3BheWxvYWQsIG1maWxlLT5jaGVja3N1bV9wYXlsb2FkLAorCQkJCSAgICpjaGVja3N1 bV9sZW5ndGgpOworCQkJY2hlY2tzdW1fdHlwZSA9IENIRUNLU1VNX1RZUEVfTk9ORTsKKwkJfQor CX0KKworCS8qIFByZXBhcmUgZm9yIGNoZWNrc3VtIGNhbGN1bGF0aW9uLCBpZiByZXF1aXJlZC4g Ki8KKwlwZ19jaGVja3N1bV9pbml0KCZjaGVja3N1bV9jdHgsIGNoZWNrc3VtX3R5cGUpOworCisJ LyoKKwkgKiBJZiB0aGUgZnVsbCBmaWxlIGNhbiBiZSBjcmVhdGVkIGJ5IGNvcHlpbmcgYSBmaWxl IGZyb20gYW4gb2xkZXIgYmFja3VwCisJICogaW4gdGhlIGNoYWluIHdpdGhvdXQgbmVlZGluZyB0 byBvdmVyd3JpdGUgYW55IGJsb2NrcyBvciB0cnVuY2F0ZSB0aGUKKwkgKiByZXN1bHQsIHRoZW4g Zm9yZ2V0IGFib3V0IHBlcmZvcm1pbmcgcmVjb25zdHJ1Y3Rpb24gYW5kIGp1c3QgY29weSB0aGF0 CisJICogZmlsZSBpbiBpdHMgZW50aXJldHkuCisJICoKKwkgKiBPdGhlcndpc2UsIHJlY29uc3Ry dWN0LgorCSAqLworCWlmIChjb3B5X3NvdXJjZSAhPSBOVUxMKQorCQljb3B5X2ZpbGUoY29weV9z b3VyY2UtPmZpbGVuYW1lLCBvdXRwdXRfZmlsZW5hbWUsCisJCQkJICAmY2hlY2tzdW1fY3R4LCBk cnlfcnVuKTsKKwllbHNlCisJeworCQl3cml0ZV9yZWNvbnN0cnVjdGVkX2ZpbGUoaW5wdXRfZmls ZW5hbWUsIG91dHB1dF9maWxlbmFtZSwKKwkJCQkJCQkJIGJsb2NrX2xlbmd0aCwgc291cmNlbWFw LCBvZmZzZXRtYXAsCisJCQkJCQkJCSAmY2hlY2tzdW1fY3R4LCBkZWJ1ZywgZHJ5X3J1bik7CisJ CWRlYnVnX3JlY29uc3RydWN0aW9uKG5fcHJpb3JfYmFja3VwcyArIDEsIHNvdXJjZSwgZHJ5X3J1 bik7CisJfQorCisJLyogU2F2ZSByZXN1bHRzIG9mIGNoZWNrc3VtIGNhbGN1bGF0aW9uLiAqLwor CWlmIChjaGVja3N1bV90eXBlICE9IENIRUNLU1VNX1RZUEVfTk9ORSkKKwl7CisJCSpjaGVja3N1 bV9wYXlsb2FkID0gcGdfbWFsbG9jKFBHX0NIRUNLU1VNX01BWF9MRU5HVEgpOworCQkqY2hlY2tz dW1fbGVuZ3RoID0gcGdfY2hlY2tzdW1fZmluYWwoJmNoZWNrc3VtX2N0eCwKKwkJCQkJCQkJCQkJ ICpjaGVja3N1bV9wYXlsb2FkKTsKKwl9CisKKwkvKgorCSAqIENsb3NlIGZpbGVzIGFuZCByZWxl YXNlIG1lbW9yeS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IG5fcHJpb3JfYmFja3VwczsgKytp KQorCXsKKwkJcmZpbGUJICAgKnMgPSBzb3VyY2VbaV07CisKKwkJaWYgKHMgPT0gTlVMTCkKKwkJ CWNvbnRpbnVlOworCQlpZiAoY2xvc2Uocy0+ZmQpICE9IDApCisJCQlwZ19mYXRhbCgiY291bGQg bm90IGNsb3NlIFwiJXNcIjogJW0iLCBzLT5maWxlbmFtZSk7CisJCWlmIChzLT5yZWxhdGl2ZV9i bG9ja19udW1iZXJzICE9IE5VTEwpCisJCQlwZnJlZShzLT5yZWxhdGl2ZV9ibG9ja19udW1iZXJz KTsKKwkJcGdfZnJlZShzLT5maWxlbmFtZSk7CisJfQorCXBmcmVlKHNvdXJjZW1hcCk7CisJcGZy ZWUob2Zmc2V0bWFwKTsKKwlwZnJlZShzb3VyY2UpOworfQorCisvKgorICogUGVyZm9ybSBwb3N0 LXJlY29uc3RydWN0aW9uIGxvZ2dpbmcgYW5kIHNhbml0eSBjaGVja3MuCisgKi8KK3N0YXRpYyB2 b2lkCitkZWJ1Z19yZWNvbnN0cnVjdGlvbihpbnQgbl9zb3VyY2UsIHJmaWxlICoqc291cmNlcywg Ym9vbCBkcnlfcnVuKQoreworCXVuc2lnbmVkCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9zb3Vy Y2U7ICsraSkKKwl7CisJCXJmaWxlCSAgICpzID0gc291cmNlc1tpXTsKKworCQkvKiBJZ25vcmUg c291cmNlIGlmIG5vdCB1c2VkLiAqLworCQlpZiAocyA9PSBOVUxMKQorCQkJY29udGludWU7CisK KwkJLyogSWYgbm8gZGF0YSBpcyBuZWVkZWQgZnJvbSB0aGlzIGZpbGUsIHdlIGNhbiBpZ25vcmUg aXQuICovCisJCWlmIChzLT5udW1fYmxvY2tzX3JlYWQgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJ CS8qIERlYnVnIGxvZ2dpbmcuICovCisJCWlmIChkcnlfcnVuKQorCQkJcGdfbG9nX2RlYnVnKCJ3 b3VsZCBoYXZlIHJlYWQgJXUgYmxvY2tzIGZyb20gXCIlc1wiIiwKKwkJCQkJCSBzLT5udW1fYmxv Y2tzX3JlYWQsIHMtPmZpbGVuYW1lKTsKKwkJZWxzZQorCQkJcGdfbG9nX2RlYnVnKCJyZWFkICV1 IGJsb2NrcyBmcm9tIFwiJXNcIiIsCisJCQkJCQkgcy0+bnVtX2Jsb2Nrc19yZWFkLCBzLT5maWxl bmFtZSk7CisKKwkJLyoKKwkJICogSW4gZHJ5LXJ1biBtb2RlLCB3ZSBkb24ndCBhY3R1YWxseSB0 cnkgdG8gcmVhZCBkYXRhIGZyb20gdGhlIGZpbGUsCisJCSAqIGJ1dCB3ZSBkbyB0cnkgdG8gdmVy aWZ5IHRoYXQgdGhlIGZpbGUgaXMgbG9uZyBlbm91Z2ggdGhhdCB3ZSBjb3VsZAorCQkgKiBoYXZl IHJlYWQgdGhlIGRhdGEgaWYgd2UnZCB0cmllZC4KKwkJICoKKwkJICogSWYgdGhpcyBmYWlscywg dGhlbiBpdCBtZWFucyB0aGF0IGEgbm9uLWRyeS1ydW4gYXR0ZW1wdCB3b3VsZCBmYWlsLAorCQkg KiBjb21wbGFpbmluZyBvZiBub3QgYmVpbmcgYWJsZSB0byByZWFkIHRoZSByZXF1aXJlZCBieXRl cyBmcm9tIHRoZQorCQkgKiBmaWxlLgorCQkgKi8KKwkJaWYgKGRyeV9ydW4pCisJCXsKKwkJCXN0 cnVjdCBzdGF0IHNiOworCisJCQlpZiAoZnN0YXQocy0+ZmQsICZzYikgPCAwKQorCQkJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgc3RhdCBcIiVzXCI6ICVtIiwgcy0+ZmlsZW5hbWUpOworCQkJaWYgKHNi LnN0X3NpemUgPCBzLT5oaWdoZXN0X29mZnNldF9yZWFkKQorCQkJCXBnX2ZhdGFsKCJmaWxlIFwi JXNcIiBpcyB0b28gc2hvcnQ6IGV4cGVjdGVkICVsbHUsIGZvdW5kICVsbHUiLAorCQkJCQkJIHMt PmZpbGVuYW1lLAorCQkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIHMtPmhpZ2hlc3Rfb2Zmc2V0 X3JlYWQsCisJCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2Iuc3Rfc2l6ZSk7CisJCX0KKwl9 Cit9CisKKy8qCisgKiBXaGVuIHdlIHBlcmZvcm0gcmVjb25zdHJ1Y3Rpb24gdXNpbmcgYW4gaW5j cmVtZW50YWwgZmlsZSwgdGhlIG91dHB1dCBmaWxlCisgKiBzaG91bGQgYmUgYXQgbGVhc3QgYXMg bG9uZyBhcyB0aGUgdHJ1bmNhdGlvbl9ibG9ja19sZW5ndGguIEFueSBibG9ja3MKKyAqIHByZXNl bnQgaW4gdGhlIGluY3JlbWVudGFsIGZpbGUgaW5jcmVhc2UgdGhlIG91dHB1dCBsZW5ndGggYXMg ZmFyIGFzIGlzCisgKiBuZWNlc3NhcnkgdG8gaW5jbHVkZSB0aG9zZSBibG9ja3MuCisgKi8KK3N0 YXRpYyB1bnNpZ25lZAorZmluZF9yZWNvbnN0cnVjdGVkX2Jsb2NrX2xlbmd0aChyZmlsZSAqcykK K3sKKwl1bnNpZ25lZAlibG9ja19sZW5ndGggPSBzLT50cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aDsK Kwl1bnNpZ25lZAlpOworCisJZm9yIChpID0gMDsgaSA8IHMtPm51bV9ibG9ja3M7ICsraSkKKwkJ aWYgKHMtPnJlbGF0aXZlX2Jsb2NrX251bWJlcnNbaV0gPj0gYmxvY2tfbGVuZ3RoKQorCQkJYmxv Y2tfbGVuZ3RoID0gcy0+cmVsYXRpdmVfYmxvY2tfbnVtYmVyc1tpXSArIDE7CisKKwlyZXR1cm4g YmxvY2tfbGVuZ3RoOworfQorCisvKgorICogSW5pdGlhbGl6ZSBhbiBpbmNyZW1lbnRhbCByZmls ZSwgcmVhZGluZyB0aGUgaGVhZGVyIHNvIHRoYXQgd2Uga25vdyB3aGljaAorICogYmxvY2tzIGl0 IGNvbnRhaW5zLgorICovCitzdGF0aWMgcmZpbGUgKgorbWFrZV9pbmNyZW1lbnRhbF9yZmlsZShj aGFyICpmaWxlbmFtZSkKK3sKKwlyZmlsZQkgICAqcmY7CisJdW5zaWduZWQJbWFnaWM7CisKKwly ZiA9IG1ha2VfcmZpbGUoZmlsZW5hbWUsIGZhbHNlKTsKKworCS8qIFJlYWQgYW5kIHZhbGlkYXRl IG1hZ2ljIG51bWJlci4gKi8KKwlyZWFkX2J5dGVzKHJmLCAmbWFnaWMsIHNpemVvZihtYWdpYykp OworCWlmIChtYWdpYyAhPSBJTkNSRU1FTlRBTF9NQUdJQykKKwkJcGdfZmF0YWwoImZpbGUgXCIl c1wiIGhhcyBiYWQgaW5jcmVtZW50YWwgbWFnaWMgbnVtYmVyICgweCV4IG5vdCAweCV4KSIsCisJ CQkJIGZpbGVuYW1lLCBtYWdpYywgSU5DUkVNRU5UQUxfTUFHSUMpOworCisJLyogUmVhZCBibG9j ayBjb3VudC4gKi8KKwlyZWFkX2J5dGVzKHJmLCAmcmYtPm51bV9ibG9ja3MsIHNpemVvZihyZi0+ bnVtX2Jsb2NrcykpOworCWlmIChyZi0+bnVtX2Jsb2NrcyA+IFJFTFNFR19TSVpFKQorCQlwZ19m YXRhbCgiZmlsZSBcIiVzXCIgaGFzIGJsb2NrIGNvdW50ICV1IGluIGV4Y2VzcyBvZiBzZWdtZW50 IHNpemUgJXUiLAorCQkJCSBmaWxlbmFtZSwgcmYtPm51bV9ibG9ja3MsIFJFTFNFR19TSVpFKTsK KworCS8qIFJlYWQgdHJ1bmNhdGlvbiBibG9jayBsZW5ndGguICovCisJcmVhZF9ieXRlcyhyZiwg JnJmLT50cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCwKKwkJCSAgIHNpemVvZihyZi0+dHJ1bmNhdGlv bl9ibG9ja19sZW5ndGgpKTsKKwlpZiAocmYtPnRydW5jYXRpb25fYmxvY2tfbGVuZ3RoID4gUkVM U0VHX1NJWkUpCisJCXBnX2ZhdGFsKCJmaWxlIFwiJXNcIiBoYXMgdHJ1bmNhdGlvbiBibG9jayBs ZW5ndGggJXUgaW4gZXhjZXNzIG9mIHNlZ21lbnQgc2l6ZSAldSIsCisJCQkJIGZpbGVuYW1lLCBy Zi0+dHJ1bmNhdGlvbl9ibG9ja19sZW5ndGgsIFJFTFNFR19TSVpFKTsKKworCS8qIFJlYWQgYmxv Y2sgbnVtYmVycyBpZiB0aGVyZSBhcmUgYW55LiAqLworCWlmIChyZi0+bnVtX2Jsb2NrcyA+IDAp CisJeworCQlyZi0+cmVsYXRpdmVfYmxvY2tfbnVtYmVycyA9CisJCQlwZ19tYWxsb2MwKHNpemVv ZihCbG9ja051bWJlcikgKiByZi0+bnVtX2Jsb2Nrcyk7CisJCXJlYWRfYnl0ZXMocmYsIHJmLT5y ZWxhdGl2ZV9ibG9ja19udW1iZXJzLAorCQkJCSAgIHNpemVvZihCbG9ja051bWJlcikgKiByZi0+ bnVtX2Jsb2Nrcyk7CisJfQorCisJLyogUmVtZW1iZXIgbGVuZ3RoIG9mIGhlYWRlci4gKi8KKwly Zi0+aGVhZGVyX2xlbmd0aCA9IHNpemVvZihtYWdpYykgKyBzaXplb2YocmYtPm51bV9ibG9ja3Mp ICsKKwkJc2l6ZW9mKHJmLT50cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCkgKworCQlzaXplb2YoQmxv Y2tOdW1iZXIpICogcmYtPm51bV9ibG9ja3M7CisKKwlyZXR1cm4gcmY7Cit9CisKKy8qCisgKiBB bGxvY2F0ZSBhbmQgcGVyZm9ybSBiYXNpYyBpbml0aWFsaXphdGlvbiBvZiBhbiByZmlsZS4KKyAq Lworc3RhdGljIHJmaWxlICoKK21ha2VfcmZpbGUoY2hhciAqZmlsZW5hbWUsIGJvb2wgbWlzc2lu Z19vaykKK3sKKwlyZmlsZQkgICAqcmY7CisKKwlyZiA9IHBnX21hbGxvYzAoc2l6ZW9mKHJmaWxl KSk7CisJcmYtPmZpbGVuYW1lID0gcHN0cmR1cChmaWxlbmFtZSk7CisJaWYgKChyZi0+ZmQgPSBv cGVuKGZpbGVuYW1lLCBPX1JET05MWSB8IFBHX0JJTkFSWSwgMCkpIDwgMCkKKwl7CisJCWlmICht aXNzaW5nX29rICYmIGVycm5vID09IEVOT0VOVCkKKwkJeworCQkJcGdfZnJlZShyZik7CisJCQly ZXR1cm4gTlVMTDsKKwkJfQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6 ICVtIiwgZmlsZW5hbWUpOworCX0KKworCXJldHVybiByZjsKK30KKworLyoKKyAqIFJlYWQgdGhl IGluZGljYXRlZCBudW1iZXIgb2YgYnl0ZXMgZnJvbSBhbiByZmlsZSBpbnRvIHRoZSBidWZmZXIu CisgKi8KK3N0YXRpYyB2b2lkCityZWFkX2J5dGVzKHJmaWxlICpyZiwgdm9pZCAqYnVmZmVyLCB1 bnNpZ25lZCBsZW5ndGgpCit7CisJdW5zaWduZWQJcmIgPSByZWFkKHJmLT5mZCwgYnVmZmVyLCBs ZW5ndGgpOworCisJaWYgKHJiICE9IGxlbmd0aCkKKwl7CisJCWlmIChyYiA8IDApCisJCQlwZ19m YXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwgcmYtPmZpbGVuYW1lKTsKKwkJ ZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiByZWFkIG9ubHkg JWQgb2YgJWQgYnl0ZXMiLAorCQkJCQkgcmYtPmZpbGVuYW1lLCAoaW50KSByYiwgbGVuZ3RoKTsK Kwl9Cit9CisKKy8qCisgKiBXcml0ZSBvdXQgYSByZWNvbnN0cnVjdGVkIGZpbGUuCisgKi8KK3N0 YXRpYyB2b2lkCit3cml0ZV9yZWNvbnN0cnVjdGVkX2ZpbGUoY2hhciAqaW5wdXRfZmlsZW5hbWUs CisJCQkJCQkgY2hhciAqb3V0cHV0X2ZpbGVuYW1lLAorCQkJCQkJIHVuc2lnbmVkIGJsb2NrX2xl bmd0aCwKKwkJCQkJCSByZmlsZSAqKnNvdXJjZW1hcCwKKwkJCQkJCSBvZmZfdCAqb2Zmc2V0bWFw LAorCQkJCQkJIHBnX2NoZWNrc3VtX2NvbnRleHQgKmNoZWNrc3VtX2N0eCwKKwkJCQkJCSBib29s IGRlYnVnLAorCQkJCQkJIGJvb2wgZHJ5X3J1bikKK3sKKwlpbnQJCQl3ZmQgPSAtMTsKKwl1bnNp Z25lZAlpOworCXVuc2lnbmVkCXplcm9fYmxvY2tzID0gMDsKKworCS8qIERlYnVnZ2luZyBvdXRw dXQuICovCisJaWYgKGRlYnVnKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgZGVidWdfYnVmOworCQl1 bnNpZ25lZAlzdGFydF9vZl9yYW5nZSA9IDA7CisJCXVuc2lnbmVkCWN1cnJlbnRfYmxvY2sgPSAw OworCisJCS8qIEJhc2ljIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvdXRwdXQgZmlsZSB0byBiZSBw cm9kdWNlZC4gKi8KKwkJaWYgKGRyeV9ydW4pCisJCQlwZ19sb2dfZGVidWcoIndvdWxkIHJlY29u c3RydWN0IFwiJXNcIiAoJXUgYmxvY2tzLCBjaGVja3N1bSAlcykiLAorCQkJCQkJIG91dHB1dF9m aWxlbmFtZSwgYmxvY2tfbGVuZ3RoLAorCQkJCQkJIHBnX2NoZWNrc3VtX3R5cGVfbmFtZShjaGVj a3N1bV9jdHgtPnR5cGUpKTsKKwkJZWxzZQorCQkJcGdfbG9nX2RlYnVnKCJyZWNvbnN0cnVjdGlu ZyBcIiVzXCIgKCV1IGJsb2NrcywgY2hlY2tzdW0gJXMpIiwKKwkJCQkJCSBvdXRwdXRfZmlsZW5h bWUsIGJsb2NrX2xlbmd0aCwKKwkJCQkJCSBwZ19jaGVja3N1bV90eXBlX25hbWUoY2hlY2tzdW1f Y3R4LT50eXBlKSk7CisKKwkJLyogUHJpbnQgb3V0IHRoZSBwbGFuIGZvciByZWNvbnN0cnVjdGlu ZyB0aGlzIGZpbGUuICovCisJCWluaXRTdHJpbmdJbmZvKCZkZWJ1Z19idWYpOworCQl3aGlsZSAo Y3VycmVudF9ibG9jayA8IGJsb2NrX2xlbmd0aCkKKwkJeworCQkJcmZpbGUJICAgKnMgPSBzb3Vy Y2VtYXBbY3VycmVudF9ibG9ja107CisKKwkJCS8qIEV4dGVuZCByYW5nZSwgaWYgcG9zc2libGUu ICovCisJCQlpZiAoY3VycmVudF9ibG9jayArIDEgPCBibG9ja19sZW5ndGggJiYKKwkJCQlzID09 IHNvdXJjZW1hcFtjdXJyZW50X2Jsb2NrICsgMV0pCisJCQl7CisJCQkJKytjdXJyZW50X2Jsb2Nr OworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBBZGQgZGV0YWlscyBhYm91dCB0aGlzIHJh bmdlLiAqLworCQkJaWYgKHMgPT0gTlVMTCkKKwkJCXsKKwkJCQlpZiAoY3VycmVudF9ibG9jayA9 PSBzdGFydF9vZl9yYW5nZSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVidWdfYnVmLCAiICV1 Onplcm8iLCBjdXJyZW50X2Jsb2NrKTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0luZm8o JmRlYnVnX2J1ZiwgIiAldS0ldTp6ZXJvIiwKKwkJCQkJCQkJCSBzdGFydF9vZl9yYW5nZSwgY3Vy cmVudF9ibG9jayk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKGN1cnJlbnRfYmxvY2sg PT0gc3RhcnRfb2ZfcmFuZ2UpCisJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlYnVnX2J1ZiwgIiAl dTolc0AiIFVJTlQ2NF9GT1JNQVQsCisJCQkJCQkJCQkgY3VycmVudF9ibG9jaywKKwkJCQkJCQkJ CSBzID09IE5VTEwgPyAiWkVSTyIgOiBzLT5maWxlbmFtZSwKKwkJCQkJCQkJCSAodWludDY0KSBv ZmZzZXRtYXBbY3VycmVudF9ibG9ja10pOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5m bygmZGVidWdfYnVmLCAiICV1LSV1OiVzQCIgVUlOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCSBzdGFy dF9vZl9yYW5nZSwgY3VycmVudF9ibG9jaywKKwkJCQkJCQkJCSBzID09IE5VTEwgPyAiWkVSTyIg OiBzLT5maWxlbmFtZSwKKwkJCQkJCQkJCSAodWludDY0KSBvZmZzZXRtYXBbY3VycmVudF9ibG9j a10pOworCQkJfQorCisJCQkvKiBCZWdpbiBuZXcgcmFuZ2UuICovCisJCQlzdGFydF9vZl9yYW5n ZSA9ICsrY3VycmVudF9ibG9jazsKKworCQkJLyogSWYgdGhlIG91dHB1dCBpcyB2ZXJ5IGxvbmcg b3Igd2UgYXJlIGRvbmUsIGR1bXAgaXQgbm93LiAqLworCQkJaWYgKGN1cnJlbnRfYmxvY2sgPT0g YmxvY2tfbGVuZ3RoIHx8IGRlYnVnX2J1Zi5sZW4gPiAxMDI0KQorCQkJeworCQkJCXBnX2xvZ19k ZWJ1ZygicmVjb25zdHJ1Y3Rpb24gcGxhbjolcyIsIGRlYnVnX2J1Zi5kYXRhKTsKKwkJCQlyZXNl dFN0cmluZ0luZm8oJmRlYnVnX2J1Zik7CisJCQl9CisJCX0KKworCQkvKiBGcmVlIG1lbW9yeS4g Ki8KKwkJcGZyZWUoZGVidWdfYnVmLmRhdGEpOworCX0KKworCS8qIE9wZW4gdGhlIG91dHB1dCBm aWxlLCBleGNlcHQgaW4gZHJ5X3J1biBtb2RlLiAqLworCWlmICghZHJ5X3J1biAmJgorCQkod2Zk ID0gb3BlbihvdXRwdXRfZmlsZW5hbWUsCisJCQkJCU9fUkRXUiB8IFBHX0JJTkFSWSB8IE9fQ1JF QVQgfCBPX0VYQ0wsCisJCQkJCXBnX2ZpbGVfY3JlYXRlX21vZGUpKSA8IDApCisJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBvdXRwdXRfZmlsZW5hbWUpOworCisJ LyogUmVhZCBhbmQgd3JpdGUgdGhlIGJsb2NrcyBhcyByZXF1aXJlZC4gKi8KKwlmb3IgKGkgPSAw OyBpIDwgYmxvY2tfbGVuZ3RoOyArK2kpCisJeworCQl1aW50OAkJYnVmZmVyW0JMQ0tTWl07CisJ CXJmaWxlCSAgICpzID0gc291cmNlbWFwW2ldOworCQl1bnNpZ25lZAl3YjsKKworCQkvKiBVcGRh dGUgYWNjb3VudGluZyBpbmZvcm1hdGlvbi4gKi8KKwkJaWYgKHMgPT0gTlVMTCkKKwkJCSsremVy b19ibG9ja3M7CisJCWVsc2UKKwkJeworCQkJcy0+bnVtX2Jsb2Nrc19yZWFkKys7CisJCQlzLT5o aWdoZXN0X29mZnNldF9yZWFkID0gTWF4KHMtPmhpZ2hlc3Rfb2Zmc2V0X3JlYWQsCisJCQkJCQkJ CQkJIG9mZnNldG1hcFtpXSArIEJMQ0tTWik7CisJCX0KKworCQkvKiBTa2lwIHRoZSByZXN0IG9m IHRoaXMgaW4gZHJ5LXJ1biBtb2RlLiAqLworCQlpZiAoZHJ5X3J1bikKKwkJCWNvbnRpbnVlOwor CisJCS8qIFJlYWQgb3IgemVyby1maWxsIHRoZSBibG9jayBhcyBhcHByb3ByaWF0ZS4gKi8KKwkJ aWYgKHMgPT0gTlVMTCkKKwkJeworCQkJLyoKKwkJCSAqIE5ldyBibG9jayBub3QgbWVudGlvbmVk IGluIHRoZSBXQUwgc3VtbWFyeS4gU2hvdWxkIGhhdmUgYmVlbiBhbgorCQkJICogdW5pbml0aWFs aXplZCBibG9jaywgc28ganVzdCB6ZXJvLWZpbGwgaXQuCisJCQkgKi8KKwkJCW1lbXNldChidWZm ZXIsIDAsIEJMQ0tTWik7CisJCX0KKwkJZWxzZQorCQl7CisJCQl1bnNpZ25lZAlyYjsKKworCQkJ LyogUmVhZCB0aGUgYmxvY2sgZnJvbSB0aGUgY29ycmVjdCBzb3VyY2UsIGV4Y2VwdCBpZiBkcnkt cnVuLiAqLworCQkJcmIgPSBwZ19wcmVhZChzLT5mZCwgYnVmZmVyLCBCTENLU1osIG9mZnNldG1h cFtpXSk7CisJCQlpZiAocmIgIT0gQkxDS1NaKQorCQkJeworCQkJCWlmIChyYiA8IDApCisJCQkJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNcIjogJW0iLCBzLT5maWxlbmFtZSk7 CisJCQkJZWxzZQorCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6IHJl YWQgb25seSAlZCBvZiAlZCBieXRlcyBhdCBvZmZzZXQgJXUiLAorCQkJCQkJCSBzLT5maWxlbmFt ZSwgKGludCkgcmIsIEJMQ0tTWiwKKwkJCQkJCQkgKHVuc2lnbmVkKSBvZmZzZXRtYXBbaV0pOwor CQkJfQorCQl9CisKKwkJLyogV3JpdGUgb3V0IHRoZSBibG9jay4gKi8KKwkJaWYgKCh3YiA9IHdy aXRlKHdmZCwgYnVmZmVyLCBCTENLU1opKSAhPSBCTENLU1opCisJCXsKKwkJCWlmICh3YiA8IDAp CisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwiJXNcIjogJW0iLCBvdXRwdXRf ZmlsZW5hbWUpOworCQkJZWxzZQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBc IiVzXCI6IHdyb3RlIG9ubHkgJWQgb2YgJWQgYnl0ZXMiLAorCQkJCQkJIG91dHB1dF9maWxlbmFt ZSwgKGludCkgd2IsIEJMQ0tTWik7CisJCX0KKworCQkvKiBVcGRhdGUgdGhlIGNoZWNrc3VtIGNv bXB1dGF0aW9uLiAqLworCQlpZiAocGdfY2hlY2tzdW1fdXBkYXRlKGNoZWNrc3VtX2N0eCwgYnVm ZmVyLCBCTENLU1opIDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdXBkYXRlIGNoZWNrc3Vt IG9mIGZpbGUgXCIlc1wiIiwKKwkJCQkJIG91dHB1dF9maWxlbmFtZSk7CisJfQorCisJLyogRGVi dWdnaW5nIG91dHB1dC4gKi8KKwlpZiAoemVyb19ibG9ja3MgPiAwKQorCXsKKwkJaWYgKGRyeV9y dW4pCisJCQlwZ19sb2dfZGVidWcoIndvdWxkIGhhdmUgemVyby1maWxsZWQgJXUgYmxvY2tzIiwg emVyb19ibG9ja3MpOworCQllbHNlCisJCQlwZ19sb2dfZGVidWcoInplcm8tZmlsbGVkICV1IGJs b2NrcyIsIHplcm9fYmxvY2tzKTsKKwl9CisKKwkvKiBDbG9zZSB0aGUgb3V0cHV0IGZpbGUuICov CisJaWYgKHdmZCA+PSAwICYmIGNsb3NlKHdmZCkgIT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5v dCBjbG9zZSBcIiVzXCI6ICVtIiwgb3V0cHV0X2ZpbGVuYW1lKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfY29tYmluZWJhY2t1cC9yZWNvbnN0cnVjdC5oIGIvc3JjL2Jpbi9wZ19jb21iaW5l YmFja3VwL3JlY29uc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uZDY4OWFlYjVjMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1 cC9yZWNvbnN0cnVjdC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHJlY29uc3RydWN0LmgKKyAqCQlSZWNvbnN0cnVjdCBmdWxsIGZpbGUgZnJvbSBpbmNyZW1l bnRhbCBmaWxlIGFuZCBiYWNrdXAgY2hhaW4uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIw MjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklD QVRJT04KKyAqCSAgc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3JlY29uc3RydWN0LmgKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBSRUNPTlNUUlVDVF9ICisjZGVmaW5lIFJF Q09OU1RSVUNUX0gKKworI2luY2x1ZGUgImNvbW1vbi9jaGVja3N1bV9oZWxwZXIuaCIKKyNpbmNs dWRlICJsb2FkX21hbmlmZXN0LmgiCisKK2V4dGVybiB2b2lkIHJlY29uc3RydWN0X2Zyb21faW5j cmVtZW50YWxfZmlsZShjaGFyICppbnB1dF9maWxlbmFtZSwKKwkJCQkJCQkJCQkJICBjaGFyICpv dXRwdXRfZmlsZW5hbWUsCisJCQkJCQkJCQkJCSAgY2hhciAqcmVsYXRpdmVfcGF0aCwKKwkJCQkJ CQkJCQkJICBjaGFyICpiYXJlX2ZpbGVfbmFtZSwKKwkJCQkJCQkJCQkJICBpbnQgbl9wcmlvcl9i YWNrdXBzLAorCQkJCQkJCQkJCQkgIGNoYXIgKipwcmlvcl9iYWNrdXBfZGlycywKKwkJCQkJCQkJ CQkJICBtYW5pZmVzdF9kYXRhICoqbWFuaWZlc3RzLAorCQkJCQkJCQkJCQkgIGNoYXIgKm1hbmlm ZXN0X3BhdGgsCisJCQkJCQkJCQkJCSAgcGdfY2hlY2tzdW1fdHlwZSBjaGVja3N1bV90eXBlLAor CQkJCQkJCQkJCQkgIGludCAqY2hlY2tzdW1fbGVuZ3RoLAorCQkJCQkJCQkJCQkgIHVpbnQ4ICoq Y2hlY2tzdW1fcGF5bG9hZCwKKwkJCQkJCQkJCQkJICBib29sIGRlYnVnLAorCQkJCQkJCQkJCQkg IGJvb2wgZHJ5X3J1bik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19jb21iaW5l YmFja3VwL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3QvMDAxX2Jh c2ljLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmZiNjYwNzVkMWEK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvdC8wMDFfYmFzaWMu cGwKQEAgLTAsMCArMSwyMyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyMywgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkdGVt cGRpciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworCitwcm9ncmFtX2hlbHBf b2soJ3BnX2NvbWJpbmViYWNrdXAnKTsKK3Byb2dyYW1fdmVyc2lvbl9vaygncGdfY29tYmluZWJh Y2t1cCcpOworcHJvZ3JhbV9vcHRpb25zX2hhbmRsaW5nX29rKCdwZ19jb21iaW5lYmFja3VwJyk7 CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbJ3BnX2NvbWJpbmViYWNrdXAnXSwKKwlxci9ubyBp bnB1dCBkaXJlY3RvcmllcyBzcGVjaWZpZWQvLAorCSdpbnB1dCBkaXJlY3RvcmllcyBtdXN0IGJl IHNwZWNpZmllZCcpOworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2NvbWJpbmViYWNrdXAn LCAkdGVtcGRpciBdLAorCXFyL25vIG91dHB1dCBkaXJlY3Rvcnkgc3BlY2lmaWVkLywKKwknb3V0 cHV0IGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCcpOworCitkb25lX3Rlc3RpbmcoKTsKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90LzAwMl9jb21wYXJlX2JhY2t1cHMu cGwgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvdC8wMDJfY29tcGFyZV9iYWNrdXBzLnBsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBiODA0NTVhZmYKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNrdXAvdC8wMDJfY29tcGFyZV9iYWNrdXBz LnBsCkBAIC0wLDAgKzEsMTU0IEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDIzLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdz OwordXNlIEZpbGU6OkNvbXBhcmU7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIFNldCB1cCBh IG5ldyBkYXRhYmFzZSBpbnN0YW5jZS4KK215ICRwcmltYXJ5ID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCdwcmltYXJ5Jyk7CiskcHJpbWFyeS0+aW5pdChoYXNfYXJjaGl2aW5nID0+ IDEsIGFsbG93c19zdHJlYW1pbmcgPT4gMSk7CiskcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3Rn cmVzcWwuY29uZicsICdzdW1tYXJpemVfd2FsID0gb24nKTsKKyRwcmltYXJ5LT5zdGFydDsKKwor IyBDcmVhdGUgc29tZSB0ZXN0IHRhYmxlcywgZWFjaCBjb250YWluaW5nIG9uZSByb3cgb2YgZGF0 YSwgcGx1cyBhIHdob2xlCisjIGV4dHJhIGRhdGFiYXNlLgorJHByaW1hcnktPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCA8PEVPTSk7CitDUkVBVEUgVEFCTEUgd2lsbF9jaGFuZ2UgKGEgaW50LCBiIHRl eHQpOworSU5TRVJUIElOVE8gd2lsbF9jaGFuZ2UgVkFMVUVTICgxLCAnaW5pdGlhbCB0ZXN0IHJv dycpOworQ1JFQVRFIFRBQkxFIHdpbGxfZ3JvdyAoYSBpbnQsIGIgdGV4dCk7CitJTlNFUlQgSU5U TyB3aWxsX2dyb3cgVkFMVUVTICgxLCAnaW5pdGlhbCB0ZXN0IHJvdycpOworQ1JFQVRFIFRBQkxF IHdpbGxfc2hyaW5rIChhIGludCwgYiB0ZXh0KTsKK0lOU0VSVCBJTlRPIHdpbGxfc2hyaW5rIFZB TFVFUyAoMSwgJ2luaXRpYWwgdGVzdCByb3cnKTsKK0NSRUFURSBUQUJMRSB3aWxsX2dldF92YWN1 dW1lZCAoYSBpbnQsIGIgdGV4dCk7CitJTlNFUlQgSU5UTyB3aWxsX2dldF92YWN1dW1lZCBWQUxV RVMgKDEsICdpbml0aWFsIHRlc3Qgcm93Jyk7CitDUkVBVEUgVEFCTEUgd2lsbF9nZXRfZHJvcHBl ZCAoYSBpbnQsIGIgdGV4dCk7CitJTlNFUlQgSU5UTyB3aWxsX2dldF9kcm9wcGVkIFZBTFVFUyAo MSwgJ2luaXRpYWwgdGVzdCByb3cnKTsKK0NSRUFURSBUQUJMRSB3aWxsX2dldF9yZXdyaXR0ZW4g KGEgaW50LCBiIHRleHQpOworSU5TRVJUIElOVE8gd2lsbF9nZXRfcmV3cml0dGVuIFZBTFVFUyAo MSwgJ2luaXRpYWwgdGVzdCByb3cnKTsKK0NSRUFURSBEQVRBQkFTRSBkYl93aWxsX2dldF9kcm9w cGVkOworRU9NCisKKyMgVGFrZSBhIGZ1bGwgYmFja3VwLgorbXkgJGJhY2t1cDFwYXRoID0gJHBy aW1hcnktPmJhY2t1cF9kaXIgLiAnL2JhY2t1cDEnOworJHByaW1hcnktPmNvbW1hbmRfb2soCisJ WyAncGdfYmFzZWJhY2t1cCcsICctRCcsICRiYWNrdXAxcGF0aCwgJy0tbm8tc3luYycsICctY2Zh c3QnIF0sCisJImZ1bGwgYmFja3VwIik7CisKKyMgTm93IG1ha2Ugc29tZSBkYXRhYmFzZSBjaGFu Z2VzLgorJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitVUERBVEUgd2ls bF9jaGFuZ2UgU0VUIGIgPSAnbW9kaWZpZWQgdmFsdWUnIFdIRVJFIGEgPSAxOworSU5TRVJUIElO VE8gd2lsbF9ncm93CisJU0VMRUNUIGcsICdhZGRpdGlvbmFsIHJvdycgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMiwgNTAwMCkgZzsKK1RSVU5DQVRFIHdpbGxfc2hyaW5rOworVkFDVVVNIHdpbGxfZ2V0 X3ZhY3V1bWVkOworRFJPUCBUQUJMRSB3aWxsX2dldF9kcm9wcGVkOworQ1JFQVRFIFRBQkxFIG5l d2x5X2NyZWF0ZWQgKGEgaW50LCBiIHRleHQpOworSU5TRVJUIElOVE8gbmV3bHlfY3JlYXRlZCBW QUxVRVMgKDEsICdyb3cgZm9yIG5ldyB0YWJsZScpOworVkFDVVVNIEZVTEwgd2lsbF9nZXRfcmV3 cml0dGVuOworRFJPUCBEQVRBQkFTRSBkYl93aWxsX2dldF9kcm9wcGVkOworQ1JFQVRFIERBVEFC QVNFIGRiX25ld2x5X2NyZWF0ZWQ7CitFT00KKworIyBUYWtlIGFuIGluY3JlbWVudGFsIGJhY2t1 cC4KK215ICRiYWNrdXAycGF0aCA9ICRwcmltYXJ5LT5iYWNrdXBfZGlyIC4gJy9iYWNrdXAyJzsK KyRwcmltYXJ5LT5jb21tYW5kX29rKAorCVsgJ3BnX2Jhc2ViYWNrdXAnLCAnLUQnLCAkYmFja3Vw MnBhdGgsICctLW5vLXN5bmMnLCAnLWNmYXN0JywKKwkgICctLWluY3JlbWVudGFsJywgJGJhY2t1 cDFwYXRoIC4gJy9iYWNrdXBfbWFuaWZlc3QnIF0sCisJImluY3JlbWVudGFsIGJhY2t1cCIpOwor CisjIEZpbmQgYW4gTFNOIHRvIHdoaWNoIGVpdGhlciBiYWNrdXAgY2FuIGJlIHJlY292ZXJlZC4K K215ICRsc24gPSAkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3Vy cmVudF93YWxfbHNuKCk7Iik7CisKKyMgTWFrZSBzdXJlIHRoYXQgdGhlIFdBTCBzZWdtZW50IGNv bnRhaW5pbmcgdGhhdCBMU04gaGFzIGJlZW4gYXJjaGl2ZWQuCisjIFBvc3RncmVTUUwgd29uJ3Qg aXNzdWUgdHdvIGNvbnNlY3V0aXZlIFhMT0dfU1dJVENIIHJlY29yZHMsIGFuZCB0aGUgYmFja3Vw CisjIGp1c3QgaXNzdWVkIG9uZSwgc28gY2FsbCB0eGlkX2N1cnJlbnQoKSB0byBnZW5lcmF0ZSBz b21lIFdBTCBhY3Rpdml0eQorIyBiZWZvcmUgY2FsbGluZyBwZ19zd2l0Y2hfd2FsKCkuCiskcHJp bWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgdHhpZF9jdXJyZW50KCk7Jyk7Cisk cHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgcGdfc3dpdGNoX3dhbCgpJyk7 CisKKyMgTm93IHdhaXQgZm9yIHRoZSBMU04gd2UgY2hvc2UgYWJvdmUgdG8gYmUgYXJjaGl2ZWQu CitteSAkYXJjaGl2ZV93YWl0X3F1ZXJ5ID0KKyAgIlNFTEVDVCBwZ193YWxmaWxlX25hbWUoJyRs c24nKSA8PSBsYXN0X2FyY2hpdmVkX3dhbCBGUk9NIHBnX3N0YXRfYXJjaGl2ZXI7IjsKKyRwcmlt YXJ5LT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICRhcmNoaXZlX3dhaXRfcXVlcnkpCisg IG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIFdBTCBzZWdtZW50IHRvIGJlIGFy Y2hpdmVkIjsKKworIyBQZXJmb3JtIFBJVFIgZnJvbSB0aGUgZnVsbCBiYWNrdXAuIERpc2FibGUg YXJjaGl2ZV9tb2RlIHNvIHRoYXQgdGhlIGFyY2hpdmUKKyMgZG9lc24ndCBmaW5kIG91dCBhYm91 dCB0aGUgbmV3IHRpbWVsaW5lOyB0aGF0IHdheSwgdGhlIGxhdGVyIFBJVFIgYmVsb3cgd2lsbAor IyBjaG9vc2UgdGhlIHNhbWUgdGltZWxpbmUuCitteSAkcGl0cjEgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoJ3BpdHIxJyk7CiskcGl0cjEtPmluaXRfZnJvbV9iYWNrdXAoJHByaW1h cnksICdiYWNrdXAxJywKKwkJCQkJCSBzdGFuZGJ5ID0+IDEsIGhhc19yZXN0b3JpbmcgPT4gMSk7 CiskcGl0cjEtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKK3JlY292ZXJ5X3Rh cmdldF9sc24gPSAnJGxzbicKK3JlY292ZXJ5X3RhcmdldF9hY3Rpb24gPSAncHJvbW90ZScKK2Fy Y2hpdmVfbW9kZSA9ICdvZmYnCit9KTsKKyRwaXRyMS0+c3RhcnQoKTsKKworIyBQZXJmb3JtIFBJ VFIgdG8gdGhlIHNhbWUgTFNOIGZyb20gdGhlIGluY3JlbWVudGFsIGJhY2t1cC4gVXNlIHRoZSBz YW1lCisjIGJhc2ljIGNvbmZpZ3VyYXRpb24gYXMgYmVmb3JlLgorbXkgJHBpdHIyID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwaXRyMicpOworJHBpdHIyLT5pbml0X2Zyb21fYmFj a3VwKCRwcmltYXJ5LCAnYmFja3VwMicsCisJCQkJCQkgc3RhbmRieSA9PiAxLCBoYXNfcmVzdG9y aW5nID0+IDEsCisJCQkJCQkgY29tYmluZV93aXRoX3ByaW9yID0+IFsgJ2JhY2t1cDEnIF0pOwor JHBpdHIyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXF7CityZWNvdmVyeV90YXJn ZXRfbHNuID0gJyRsc24nCityZWNvdmVyeV90YXJnZXRfYWN0aW9uID0gJ3Byb21vdGUnCithcmNo aXZlX21vZGUgPSAnb2ZmJworfSk7CiskcGl0cjItPnN0YXJ0KCk7CisKKyMgV2FpdCB1bnRpbCBi b3RoIHNlcnZlcnMgZXhpdCByZWNvdmVyeS4KKyRwaXRyMS0+cG9sbF9xdWVyeV91bnRpbCgncG9z dGdyZXMnLAorCQkJCQkJICJTRUxFQ1QgTk9UIHBnX2lzX2luX3JlY292ZXJ5KCk7IikKKyAgb3Ig ZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBhcHBseSB0byByZWFjaCBMU04gJGxzbiI7Cisk cGl0cjItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkJCQkJCSAiU0VMRUNUIE5PVCBw Z19pc19pbl9yZWNvdmVyeSgpOyIpCisgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcg YXBwbHkgdG8gcmVhY2ggTFNOICRsc24iOworCisjIFBlcmZvcm0gYSBsb2dpY2FsIGR1bXAgb2Yg ZWFjaCBzZXJ2ZXIsIGFuZCBjaGVjayB0aGF0IHRoZXkgbWF0Y2guCisjIEl0IHdvdWxkIGJlIG11 Y2ggbmljZXIgaWYgd2UgY291bGQgcGh5c2ljYWxseSBjb21wYXJlIHRoZSBkYXRhIGZpbGVzLCBi dXQKKyMgdGhhdCBkb2Vzbid0IHJlYWxseSB3b3JrLiBUaGUgY29udGVudHMgb2YgdGhlIHBhZ2Ug aG9sZSBhcmVuJ3QgZ3VhcmFudGVlZCB0bworIyBiZSBpZGVudGljYWwsIGFuZCB0aGVyZSBjYW4g YmUgb3RoZXIgZGlzY3JlcGFuY2llcyBhcyB3ZWxsLiBUbyBtYWtlIHRoaXMgd29yaworIyB3ZSdk IG5lZWQgdGhlIGVxdWl2YWxlbnQgb2YgZWFjaCBBTSdzIHJtX21hc2sgZnVuY3RvbiB3cml0dGVu IG9yIGF0IGxlYXN0CisjIGNhbGxhYmxlIGZyb20gUGVybCwgYW5kIHRoYXQgZG9lc24ndCBzZWVt IHByYWN0aWNhbC4KKyMKKyMgTkI6IFdlJ3JlIGp1c3QgdXNpbmcgdGhlIHByaW1hcnkncyBiYWNr dXAgZGlyZWN0b3J5IGZvciBzY3JhdGNoIHNwYWNlIGhlcmUuCisjIFRoaXMgY291bGQgZXF1YWxs eSB3ZWxsIGJlIGFueSBvdGhlciBkaXJlY3Rvcnkgd2Ugd2FudGVkIHRvIHBpY2suCitteSAkYmFj a3VwZGlyID0gJHByaW1hcnktPmJhY2t1cF9kaXI7CitteSAkZHVtcDEgPSAkYmFja3VwZGlyIC4g Jy9waXRyMS5kdW1wJzsKK215ICRkdW1wMiA9ICRiYWNrdXBkaXIgLiAnL3BpdHIyLmR1bXAnOwor JHBpdHIxLT5jb21tYW5kX29rKFsKKwkncGdfZHVtcGFsbCcsICctZicsICRkdW1wMSwgJy0tbm8t c3luYycsICctLW5vLXVubG9nZ2VkLXRhYmxlLWRhdGEnLAorCQknLWQnLCAkcGl0cjEtPmNvbm5z dHIoJ3Bvc3RncmVzJyksCisJXSwKKwknZHVtcCBmcm9tIFBJVFIgMScpOworJHBpdHIxLT5jb21t YW5kX29rKFsKKwkncGdfZHVtcGFsbCcsICctZicsICRkdW1wMiwgJy0tbm8tc3luYycsICctLW5v LXVubG9nZ2VkLXRhYmxlLWRhdGEnLAorCQknLWQnLCAkcGl0cjEtPmNvbm5zdHIoJ3Bvc3RncmVz JyksCisJXSwKKwknZHVtcCBmcm9tIFBJVFIgMicpOworCisjIENvbXBhcmUgdGhlIHR3byBkdW1w cywgdGhlcmUgc2hvdWxkIGJlIG5vIGRpZmZlcmVuY2VzLgorbXkgJGNvbXBhcmVfcmVzID0gY29t cGFyZSgkZHVtcDEsICRkdW1wMik7Citub3RlKCRkdW1wMSk7Citub3RlKCRkdW1wMik7Citpcygk Y29tcGFyZV9yZXMsIDAsICJkdW1wcyBhcmUgaWRlbnRpY2FsIik7CisKKyMgUHJvdmlkZSBtb3Jl IGNvbnRleHQgaWYgdGhlIGR1bXBzIGRvIG5vdCBtYXRjaC4KK2lmICgkY29tcGFyZV9yZXMgIT0g MCkKK3sKKwlteSAoJHN0ZG91dCwgJHN0ZGVycikgPQorCQlydW5fY29tbWFuZChbICdkaWZmJywg Jy11JywgJGR1bXAxLCAkZHVtcDIgXSk7CisJcHJpbnQgIj09PSBkaWZmIG9mICRkdW1wMSBhbmQg JGR1bXAyXG4iOworCXByaW50ICI9PT0gc3Rkb3V0ID09PVxuIjsKKwlwcmludCAkc3Rkb3V0Owor CXByaW50ICI9PT0gc3RkZXJyID09PVxuIjsKKwlwcmludCAkc3RkZXJyOworCXByaW50ICI9PT0g RU9GID09PVxuIjsKK30KKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2NvbWJpbmViYWNrdXAvdC8wMDNfdGltZWxpbmUucGwgYi9zcmMvYmluL3BnX2NvbWJpbmViYWNr dXAvdC8wMDNfdGltZWxpbmUucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uYmMwNTNjYTVlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1 cC90LzAwM190aW1lbGluZS5wbApAQCAtMCwwICsxLDkwIEBACisjIENvcHlyaWdodCAoYykgMjAy MS0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIworIyBUaGlzIHRl c3QgYWltcyB0byB2YWxpZGF0ZSB0aGF0IHJlc3RvcmluZyBhbiBpbmNyZW1lbnRhbCBiYWNrdXAg d29ya3MKKyMgcHJvcGVybHkgZXZlbiB3aGVuIHRoZSByZWZlcmVuY2UgYmFja3VwIGlzIG9uIGEg ZGlmZmVyZW50IHRpbWVsaW5lLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEZp bGU6OkNvbXBhcmU7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIFNldCB1cCBhIG5ldyBkYXRh YmFzZSBpbnN0YW5jZS4KK215ICRub2RlMSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygnbm9kZTEnKTsKKyRub2RlMS0+aW5pdChoYXNfYXJjaGl2aW5nID0+IDEsIGFsbG93c19zdHJl YW1pbmcgPT4gMSk7Ciskbm9kZTEtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3Vt bWFyaXplX3dhbCA9IG9uJyk7Ciskbm9kZTEtPnN0YXJ0OworCisjIENyZWF0ZSBhIHRhYmxlIGFu ZCBpbnNlcnQgYSB0ZXN0IHJvdyBpbnRvIGl0LgorJG5vZGUxLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgPDxFT00pOworQ1JFQVRFIFRBQkxFIG15dGFibGUgKGEgaW50LCBiIHRleHQpOworSU5TRVJU IElOVE8gbXl0YWJsZSBWQUxVRVMgKDEsICdhYXJkdmFyaycpOworRU9NCisKKyMgVGFrZSBhIGZ1 bGwgYmFja3VwLgorbXkgJGJhY2t1cDFwYXRoID0gJG5vZGUxLT5iYWNrdXBfZGlyIC4gJy9iYWNr dXAxJzsKKyRub2RlMS0+Y29tbWFuZF9vaygKKwlbICdwZ19iYXNlYmFja3VwJywgJy1EJywgJGJh Y2t1cDFwYXRoLCAnLS1uby1zeW5jJywgJy1jZmFzdCcgXSwKKwkiZnVsbCBiYWNrdXAgZnJvbSBu b2RlMSIpOworCisjIEluc2VydCBhIHNlY29uZCByb3cgb24gdGhlIG9yaWdpbmFsIG5vZGUuCisk bm9kZTEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitJTlNFUlQgSU5UTyBteXRhYmxl IFZBTFVFUyAoMiwgJ2JlZXRsZScpOworRU9NCisKKyMgTm93IHRha2UgYW4gaW5jcmVtZW50YWwg YmFja3VwLgorbXkgJGJhY2t1cDJwYXRoID0gJG5vZGUxLT5iYWNrdXBfZGlyIC4gJy9iYWNrdXAy JzsKKyRub2RlMS0+Y29tbWFuZF9vaygKKwlbICdwZ19iYXNlYmFja3VwJywgJy1EJywgJGJhY2t1 cDJwYXRoLCAnLS1uby1zeW5jJywgJy1jZmFzdCcsCisJICAnLS1pbmNyZW1lbnRhbCcsICRiYWNr dXAxcGF0aCAuICcvYmFja3VwX21hbmlmZXN0JyBdLAorCSJpbmNyZW1lbnRhbCBiYWNrdXAgZnJv bSBub2RlMSIpOworCisjIFJlc3RvcmUgdGhlIGluY3JlbWVudGFsIGJhY2t1cCBhbmQgdXNlIGl0 IHRvIGNyZWF0ZSBhIG5ldyBub2RlLgorbXkgJG5vZGUyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3Rlci0+bmV3KCdub2RlMicpOworJG5vZGUyLT5pbml0X2Zyb21fYmFja3VwKCRub2RlMSwgJ2Jh Y2t1cDInLAorCQkJCQkJIGNvbWJpbmVfd2l0aF9wcmlvciA9PiBbICdiYWNrdXAxJyBdKTsKKyRu b2RlMi0+c3RhcnQoKTsKKworIyBJbnNlcnQgcm93cyBvbiBib3RoIG5vZGVzLgorJG5vZGUxLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworSU5TRVJUIElOVE8gbXl0YWJsZSBWQUxVRVMg KDMsICdjcmFiJyk7CitFT00KKyRub2RlMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsK K0lOU0VSVCBJTlRPIG15dGFibGUgVkFMVUVTICg0LCAnZGluZ28nKTsKK0VPTQorCisjIFRha2Ug YW5vdGhlciBpbmNyZW1lbnRhbCBiYWNrdXAsIGZyb20gbm9kZTIsIGJhc2VkIG9uIGJhY2t1cDIg ZnJvbSBub2RlMS4KK215ICRiYWNrdXAzcGF0aCA9ICRub2RlMS0+YmFja3VwX2RpciAuICcvYmFj a3VwMyc7Ciskbm9kZTItPmNvbW1hbmRfb2soCisJWyAncGdfYmFzZWJhY2t1cCcsICctRCcsICRi YWNrdXAzcGF0aCwgJy0tbm8tc3luYycsICctY2Zhc3QnLAorCSAgJy0taW5jcmVtZW50YWwnLCAk YmFja3VwMnBhdGggLiAnL2JhY2t1cF9tYW5pZmVzdCcgXSwKKwkiaW5jcmVtZW50YWwgYmFja3Vw IGZyb20gbm9kZTIiKTsKKworIyBSZXN0b3JlIHRoZSBpbmNyZW1lbnRhbCBiYWNrdXAgYW5kIHVz ZSBpdCB0byBjcmVhdGUgYSBuZXcgbm9kZS4KK215ICRub2RlMyA9IFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXItPm5ldygnbm9kZTMnKTsKKyRub2RlMy0+aW5pdF9mcm9tX2JhY2t1cCgkbm9kZTEs ICdiYWNrdXAzJywKKwkJCQkJCSBjb21iaW5lX3dpdGhfcHJpb3IgPT4gWyAnYmFja3VwMScsICdi YWNrdXAyJyBdKTsKKyRub2RlMy0+c3RhcnQoKTsKKworIyBMZXQncyBpbnNlcnQgb25lIG1vcmUg cm93LgorJG5vZGUzLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworSU5TRVJUIElOVE8g bXl0YWJsZSBWQUxVRVMgKDUsICdlbGVwaGFudCcpOworRU9NCisKKyMgTm93IGNoZWNrIHRoYXQg d2UgaGF2ZSB0aGUgZXhwZWN0ZWQgcm93cy4KK215ICRyZXN1bHQgPSAkbm9kZTMtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCA8PEVPTSk7CitzZWxlY3Qgc3RyaW5nX2FnZyhhOjp0ZXh0LCAnOicpLCBz dHJpbmdfYWdnKGIsICc6JykgZnJvbSBteXRhYmxlOworRU9NCitpcygkcmVzdWx0LCAnMToyOjQ6 NXxhYXJkdmFyazpiZWV0bGU6ZGluZ286ZWxlcGhhbnQnKTsKKworIyBMZXQncyBhbHNvIHZlcmlm eSBhbGwgdGhlIGJhY2t1cHMuCitmb3IgbXkgJGJhY2t1cF9uYW1lIChxdyhiYWNrdXAxIGJhY2t1 cDIgYmFja3VwMykpCit7CisJJG5vZGUxLT5jb21tYW5kX29rKAorCQlbICdwZ192ZXJpZnliYWNr dXAnLCAkbm9kZTEtPmJhY2t1cF9kaXIgLiAnLycgLiAkYmFja3VwX25hbWUgXSwKKwkJInZlcmlm eSBiYWNrdXAgJGJhY2t1cF9uYW1lIik7Cit9CisKKyMgT0ssIHRoYXQncyBhbGwuCitkb25lX3Rl c3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90LzAwNF9tYW5p ZmVzdC5wbCBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC90LzAwNF9tYW5pZmVzdC5wbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zN2RlNjFhYzA2Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3QvMDA0X21hbmlmZXN0LnBsCkBAIC0w LDAgKzEsNzUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjMsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisjCisjIFRoaXMgdGVzdCBhaW1zIHRvIHZhbGlkYXRlIHRoYXQg cGdfY29tYmluZWJhY2t1cCB3b3JrcyBpbiB0aGUgZGVnZW5lcmF0ZQorIyBjYXNlIHdoZXJlIGl0 IGlzIGludm9rZWQgb24gYSBzaW5nbGUgZnVsbCBiYWNrdXAgYW5kIHRoYXQgaXQgY2FuIHByb2R1 Y2UKKyMgYSBuZXcsIHZhbGlkIG1hbmlmZXN0IHdoZW4gaXQgZG9lcy4gU2Vjb25kYXJpbHksIGl0 IGNoZWNrcyB0aGF0CisjIHBnX2NvbWJpbmViYWNrdXAgZG9lcyBub3QgcHJvZHVjZSBhIG1hbmlm ZXN0IHdoZW4gcnVuIHdpdGggLS1uby1tYW5pZmVzdC4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJu aW5nczsKK3VzZSBGaWxlOjpDb21wYXJlOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBTZXQg dXAgYSBuZXcgZGF0YWJhc2UgaW5zdGFuY2UuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXItPm5ldygnbm9kZScpOworJG5vZGUtPmluaXQoaGFzX2FyY2hpdmluZyA9PiAxLCBh bGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGUtPnN0YXJ0OworCisjIFRha2UgYSBmdWxsIGJh Y2t1cC4KK215ICRvcmlnaW5hbF9iYWNrdXBfcGF0aCA9ICRub2RlLT5iYWNrdXBfZGlyIC4gJy9v cmlnaW5hbCc7Ciskbm9kZS0+Y29tbWFuZF9vaygKKwlbICdwZ19iYXNlYmFja3VwJywgJy1EJywg JG9yaWdpbmFsX2JhY2t1cF9wYXRoLCAnLS1uby1zeW5jJywgJy1jZmFzdCcgXSwKKwkiZnVsbCBi YWNrdXAiKTsKKworIyBWZXJpZnkgdGhlIGZ1bGwgYmFja3VwLgorJG5vZGUtPmNvbW1hbmRfb2so WyAncGdfdmVyaWZ5YmFja3VwJywgJG9yaWdpbmFsX2JhY2t1cF9wYXRoIF0sCisJInZlcmlmeSBv cmlnaW5hbCBiYWNrdXAiKTsKKworIyBQcm9jZXNzIHRoZSBiYWNrdXAgd2l0aCBwZ19jb21iaW5l YmFja3VwIHVzaW5nIHZhcmlvdXMgbWFuaWZlc3Qgb3B0aW9ucy4KK3N1YiBjb21iaW5lX2FuZF90 ZXN0X29uZV9iYWNrdXAKK3sKKwlteSAoJGJhY2t1cF9uYW1lLCAkZmFpbHVyZV9wYXR0ZXJuLCBA ZXh0cmFfb3B0aW9ucykgPSBAXzsKKwlteSAkcmV2aXNlZF9iYWNrdXBfcGF0aCA9ICRub2RlLT5i YWNrdXBfZGlyIC4gJy8nIC4gJGJhY2t1cF9uYW1lOworCSRub2RlLT5jb21tYW5kX29rKAorCQlb ICdwZ19jb21iaW5lYmFja3VwJywgJG9yaWdpbmFsX2JhY2t1cF9wYXRoLCAnLW8nLCAkcmV2aXNl ZF9iYWNrdXBfcGF0aCwKKwkJCQknLS1uby1zeW5jJywgQGV4dHJhX29wdGlvbnMgXSwKKwkJInBn X2NvbWJpbmViYWNrdXAgd2l0aCBAZXh0cmFfb3B0aW9ucyIpOworCWlmIChkZWZpbmVkICRmYWls dXJlX3BhdHRlcm4pCisJeworCQkkbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCQkJWyAncGdf dmVyaWZ5YmFja3VwJywgJHJldmlzZWRfYmFja3VwX3BhdGggXSwKKwkJCSRmYWlsdXJlX3BhdHRl cm4sCisJCQkidW5hYmxlIHRvIHZlcmlmeSBiYWNrdXAgJGJhY2t1cF9uYW1lIik7CisJfQorCWVs c2UKKwl7CisJCSRub2RlLT5jb21tYW5kX29rKAorCQkJWyAncGdfdmVyaWZ5YmFja3VwJywgJHJl dmlzZWRfYmFja3VwX3BhdGggXSwKKwkJCSJ2ZXJpZnkgYmFja3VwICRiYWNrdXBfbmFtZSIpOwor CX0KK30KK2NvbWJpbmVfYW5kX3Rlc3Rfb25lX2JhY2t1cCgnbm9tYW5pZmVzdCcsCisJcXIvY291 bGQgbm90IG9wZW4gZmlsZS4qYmFja3VwX21hbmlmZXN0LywgJy0tbm8tbWFuaWZlc3QnKTsKK2Nv bWJpbmVfYW5kX3Rlc3Rfb25lX2JhY2t1cCgnY3N1bV9ub25lJywKKwl1bmRlZiwgJy0tbWFuaWZl c3QtY2hlY2tzdW1zPU5PTkUnKTsKK2NvbWJpbmVfYW5kX3Rlc3Rfb25lX2JhY2t1cCgnY3N1bV9z aGEyMjQnLAorCXVuZGVmLCAnLS1tYW5pZmVzdC1jaGVja3N1bXM9U0hBMjI0Jyk7CisKKyMgVmVy aWZ5IHRoYXQgU0hBMjI0IGlzIG1lbnRpb25lZCBpbiB0aGUgU0hBMjI0IG1hbmlmZXN0IGxvdHMg b2YgdGltZXMuCitteSAkc2hhMjI0X21hbmlmZXN0ID0KKwlzbHVycF9maWxlKCRub2RlLT5iYWNr dXBfZGlyIC4gJy9jc3VtX3NoYTIyNC9iYWNrdXBfbWFuaWZlc3QnKTsKK215ICRzaGEyMjRfY291 bnQgPSAoKCkgPSAkc2hhMjI0X21hbmlmZXN0ID1+IC9TSEEyMjQvbWlnKTsKK2NtcF9vaygkc2hh MjI0X2NvdW50LAorCSc+JywgMTAwLCAiU0hBMjI0IGlzIG1lbnRpb25lZCBtYW55IHRpbWVzIGlu IFNIQTIyNCBtYW5pZmVzdCIpOworCisjIFZlcmlmeSB0aGF0IFNIQTIyNCBpcyBtZW50aW9uZWQg aW4gdGhlIFNIQTIyNCBtYW5pZmVzdCBsb3RzIG9mIHRpbWVzLgorbXkgJG5vY3N1bV9tYW5pZmVz dCA9CisJc2x1cnBfZmlsZSgkbm9kZS0+YmFja3VwX2RpciAuICcvY3N1bV9ub25lL2JhY2t1cF9t YW5pZmVzdCcpOworbXkgJG5vY3N1bV9jb3VudCA9ICgoKSA9ICRub2NzdW1fbWFuaWZlc3QgPX4g L0NoZWNrc3VtLUFsZ29yaXRobS9taWcpOworaXMoJG5vY3N1bV9jb3VudCwgMCwKKwkiQ2hlY2tz dW1fQWxnb3JpdGhtIGlzIG5vdCBtZW50aW9uZWQgaW4gbm8tY2hlY2tzdW0gbWFuaWZlc3QiKTsK KworIyBPSywgdGhhdCdzIGFsbC4KK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19jb21iaW5lYmFja3VwL3QvMDA1X2ludGVncml0eS5wbCBiL3NyYy9iaW4vcGdfY29tYmlu ZWJhY2t1cC90LzAwNV9pbnRlZ3JpdHkucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uYjFmNjNhNDNlMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29tYmlu ZWJhY2t1cC90LzAwNV9pbnRlZ3JpdHkucGwKQEAgLTAsMCArMSwxMjUgQEAKKyMgQ29weXJpZ2h0 IChjKSAyMDIxLTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisjCisj IFRoaXMgdGVzdCBhaW1zIHRvIHZhbGlkYXRlIHRoYXQgYW4gaW5jcmVtZW50YWwgYmFja3VwIGNh biBiZSBjb21iaW5lZAorIyB3aXRoIGEgdmFsaWQgcHJpb3IgYmFja3VwIGFuZCB0aGF0IGl0IGNh bm5vdCBiZSBjb21iaW5lZCB3aXRoIGFuIGludmFsaWQKKyMgcHJpb3IgYmFja3VwLgorCit1c2Ug c3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEZpbGU6OkNvbXBhcmU7Cit1c2UgRmlsZTo6UGF0 aCBxdyhybXRyZWUpOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBTZXQgdXAgYSBuZXcgZGF0 YWJhc2UgaW5zdGFuY2UuCitteSAkbm9kZTEgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoJ25vZGUxJyk7Ciskbm9kZTEtPmluaXQoaGFzX2FyY2hpdmluZyA9PiAxLCBhbGxvd3Nfc3Ry ZWFtaW5nID0+IDEpOworJG5vZGUxLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3N1 bW1hcml6ZV93YWwgPSBvbicpOworJG5vZGUxLT5zdGFydDsKKworIyBTZXQgdXAgYW5vdGhlciBu ZXcgZGF0YWJhc2UgaW5zdGFuY2UuIFdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBjYWNoZWQKKyMg SU5JVERCX1RFTVBMQVRFIGZvciB0aGlzLCBiZWNhdXNlIHdlIHdhbnQgaXQgdG8gYmUgYSBzZXBh cmF0ZSBjbHVzdGVyCisjIHdpdGggYSBkaWZmZXJlbnQgc3lzdGVtIElELgorbXkgJG5vZGUyOwor eworCWxvY2FsICRFTlZ7J0lOSVREQl9URU1QTEFURSd9ID0gdW5kZWY7CisKKwkkbm9kZTIgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUyJyk7CisJJG5vZGUyLT5pbml0KGhh c19hcmNoaXZpbmcgPT4gMSwgYWxsb3dzX3N0cmVhbWluZyA9PiAxKTsKKwkkbm9kZTItPmFwcGVu ZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3VtbWFyaXplX3dhbCA9IG9uJyk7CisJJG5vZGUy LT5zdGFydDsKK30KKworIyBUYWtlIGEgZnVsbCBiYWNrdXAgZnJvbSBub2RlMS4KK215ICRiYWNr dXAxcGF0aCA9ICRub2RlMS0+YmFja3VwX2RpciAuICcvYmFja3VwMSc7Ciskbm9kZTEtPmNvbW1h bmRfb2soCisJWyAncGdfYmFzZWJhY2t1cCcsICctRCcsICRiYWNrdXAxcGF0aCwgJy0tbm8tc3lu YycsICctY2Zhc3QnIF0sCisJImZ1bGwgYmFja3VwIGZyb20gbm9kZTEiKTsKKworIyBOb3cgdGFr ZSBhbiBpbmNyZW1lbnRhbCBiYWNrdXAuCitteSAkYmFja3VwMnBhdGggPSAkbm9kZTEtPmJhY2t1 cF9kaXIgLiAnL2JhY2t1cDInOworJG5vZGUxLT5jb21tYW5kX29rKAorCVsgJ3BnX2Jhc2ViYWNr dXAnLCAnLUQnLCAkYmFja3VwMnBhdGgsICctLW5vLXN5bmMnLCAnLWNmYXN0JywKKwkgICctLWlu Y3JlbWVudGFsJywgJGJhY2t1cDFwYXRoIC4gJy9iYWNrdXBfbWFuaWZlc3QnIF0sCisJImluY3Jl bWVudGFsIGJhY2t1cCBmcm9tIG5vZGUxIik7CisKKyMgTm93IHRha2UgYW5vdGhlciBpbmNyZW1l bnRhbCBiYWNrdXAuCitteSAkYmFja3VwM3BhdGggPSAkbm9kZTEtPmJhY2t1cF9kaXIgLiAnL2Jh Y2t1cDMnOworJG5vZGUxLT5jb21tYW5kX29rKAorCVsgJ3BnX2Jhc2ViYWNrdXAnLCAnLUQnLCAk YmFja3VwM3BhdGgsICctLW5vLXN5bmMnLCAnLWNmYXN0JywKKwkgICctLWluY3JlbWVudGFsJywg JGJhY2t1cDJwYXRoIC4gJy9iYWNrdXBfbWFuaWZlc3QnIF0sCisJImFub3RoZXIgaW5jcmVtZW50 YWwgYmFja3VwIGZyb20gbm9kZTEiKTsKKworIyBUYWtlIGEgZnVsbCBiYWNrdXAgZnJvbSBub2Rl Mi4KK215ICRiYWNrdXBvdGhlcjFwYXRoID0gJG5vZGUxLT5iYWNrdXBfZGlyIC4gJy9iYWNrdXBv dGhlcjEnOworJG5vZGUyLT5jb21tYW5kX29rKAorCVsgJ3BnX2Jhc2ViYWNrdXAnLCAnLUQnLCAk YmFja3Vwb3RoZXIxcGF0aCwgJy0tbm8tc3luYycsICctY2Zhc3QnIF0sCisJImZ1bGwgYmFja3Vw IGZyb20gbm9kZTIiKTsKKworIyBUYWtlIGFuIGluY3JlbWVudGFsIGJhY2t1cCBmcm9tIG5vZGUy LgorbXkgJGJhY2t1cG90aGVyMnBhdGggPSAkbm9kZTEtPmJhY2t1cF9kaXIgLiAnL2JhY2t1cG90 aGVyMic7Ciskbm9kZTItPmNvbW1hbmRfb2soCisJWyAncGdfYmFzZWJhY2t1cCcsICctRCcsICRi YWNrdXBvdGhlcjJwYXRoLCAnLS1uby1zeW5jJywgJy1jZmFzdCcsCisJICAnLS1pbmNyZW1lbnRh bCcsICRiYWNrdXBvdGhlcjFwYXRoIC4gJy9iYWNrdXBfbWFuaWZlc3QnIF0sCisJImluY3JlbWVu dGFsIGJhY2t1cCBmcm9tIG5vZGUyIik7CisKKyMgUmVzdWx0IGRpcmVjdG9yeS4KK215ICRyZXN1 bHRwYXRoID0gJG5vZGUxLT5iYWNrdXBfZGlyIC4gJy9yZXN1bHQnOworCisjIENhbid0IGNvbWJp bmUgMiBmdWxsIGJhY2t1cHMuCiskbm9kZTEtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19j b21iaW5lYmFja3VwJywgJGJhY2t1cDFwYXRoLCAkYmFja3VwMXBhdGgsICctbycsICRyZXN1bHRw YXRoIF0sCisJcXIvaXMgYSBmdWxsIGJhY2t1cCwgYnV0IG9ubHkgdGhlIGZpcnN0IGJhY2t1cCBz aG91bGQgYmUgYSBmdWxsIGJhY2t1cC8sCisJImNhbid0IGNvbWJpbmUgZnVsbCBiYWNrdXBzIik7 CisKKyMgQ2FuJ3QgY29tYmluZSAyIGluY3JlbWVudGFsIGJhY2t1cHMuCiskbm9kZTEtPmNvbW1h bmRfZmFpbHNfbGlrZSgKKwlbICdwZ19jb21iaW5lYmFja3VwJywgJGJhY2t1cDJwYXRoLCAkYmFj a3VwMnBhdGgsICctbycsICRyZXN1bHRwYXRoIF0sCisJcXIvaXMgYW4gaW5jcmVtZW50YWwgYmFj a3VwLCBidXQgdGhlIGZpcnN0IGJhY2t1cCBzaG91bGQgYmUgYSBmdWxsIGJhY2t1cC8sCisJImNh bid0IGNvbWJpbmUgZnVsbCBiYWNrdXBzIik7CisKKyMgQ2FuJ3QgY29tYmluZSBmdWxsIGJhY2t1 cCB3aXRoIGFuIGluY3JlbWVudGFsIGJhY2t1cCBmcm9tIGEgZGlmZmVyZW50IHN5c3RlbS4KKyRu b2RlMS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2NvbWJpbmViYWNrdXAnLCAkYmFja3Vw MXBhdGgsICRiYWNrdXBvdGhlcjJwYXRoLCAnLW8nLCAkcmVzdWx0cGF0aCBdLAorCXFyL2V4cGVj dGVkIHN5c3RlbSBpZGVudGlmaWVyLipidXQgZm91bmQvLAorCSJjYW4ndCBjb21iaW5lIGJhY2t1 cHMgZnJvbSBkaWZmZXJlbnQgbm9kZXMiKTsKKworIyBDYW4ndCBvbWl0IGEgcmVxdWlyZWQgYmFj a3VwLgorJG5vZGUxLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfY29tYmluZWJhY2t1cCcs ICRiYWNrdXAxcGF0aCwgJGJhY2t1cDNwYXRoLCAnLW8nLCAkcmVzdWx0cGF0aCBdLAorCXFyL3N0 YXJ0cyBhdCBMU04uKmJ1dCBleHBlY3RlZC8sCisJImNhbid0IG9taXQgYSByZXF1aXJlZCBiYWNr dXAiKTsKKworIyBDYW4ndCBjb21iaW5lIGJhY2t1cHMgaW4gdGhlIHdyb25nIG9yZGVyLgorJG5v ZGUxLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfY29tYmluZWJhY2t1cCcsICRiYWNrdXAx cGF0aCwgJGJhY2t1cDNwYXRoLCAkYmFja3VwMnBhdGgsICctbycsICRyZXN1bHRwYXRoIF0sCisJ cXIvc3RhcnRzIGF0IExTTi4qYnV0IGV4cGVjdGVkLywKKwkiY2FuJ3QgY29tYmluZSBiYWNrdXBz IGluIHRoZSB3cm9uZyBvcmRlciIpOworCisjIENhbiBjb21iaW5lIDMgYmFja3VwcyB0aGF0IG1h dGNoIHVwIHByb3Blcmx5LgorJG5vZGUxLT5jb21tYW5kX29rKAorCVsgJ3BnX2NvbWJpbmViYWNr dXAnLCAkYmFja3VwMXBhdGgsICRiYWNrdXAycGF0aCwgJGJhY2t1cDNwYXRoLCAnLW8nLCAkcmVz dWx0cGF0aCBdLAorCSJjYW4gY29tYmluZSAzIG1hdGNoaW5nIGJhY2t1cHMiKTsKK3JtdHJlZSgk cmVzdWx0cGF0aCk7CisKKyMgQ2FuIGNvbWJpbmUgZnVsbCBiYWNrdXAgd2l0aCBmaXJzdCBpbmNy ZW1lbnRhbC4KK215ICRzeW50aGV0aWMxMnBhdGggPSAkbm9kZTEtPmJhY2t1cF9kaXIgLiAnL3N5 bnRoZXRpYzEyJzsKKyRub2RlMS0+Y29tbWFuZF9vaygKKwlbICdwZ19jb21iaW5lYmFja3VwJywg JGJhY2t1cDFwYXRoLCAkYmFja3VwMnBhdGgsICctbycsICRzeW50aGV0aWMxMnBhdGggXSwKKwki Y2FuIGNvbWJpbmUgMiBtYXRjaGluZyBiYWNrdXBzIik7CisKKyMgQ2FuIGNvbWJpbmUgcmVzdWx0 IG9mIHByZXZpb3VzIHN0ZXAgd2l0aCBzZWNvbmQgaW5jcmVtZW50YWwuCiskbm9kZTEtPmNvbW1h bmRfb2soCisJWyAncGdfY29tYmluZWJhY2t1cCcsICRzeW50aGV0aWMxMnBhdGgsICRiYWNrdXAz cGF0aCwgJy1vJywgJHJlc3VsdHBhdGggXSwKKwkiY2FuIGNvbWJpbmUgc3ludGhldGljIGJhY2t1 cCB3aXRoIGxhdGVyIGluY3JlbWVudGFsIik7CitybXRyZWUoJHJlc3VsdHBhdGgpOworCisjIENh bid0IGNvbWJpbmUgcmVzdWx0IG9mIDErMiB3aXRoIDIuCiskbm9kZTEtPmNvbW1hbmRfZmFpbHNf bGlrZSgKKwlbICdwZ19jb21iaW5lYmFja3VwJywgJHN5bnRoZXRpYzEycGF0aCwgJGJhY2t1cDJw YXRoLCAnLW8nLCAkcmVzdWx0cGF0aCBdLAorCXFyL3N0YXJ0cyBhdCBMU04uKmJ1dCBleHBlY3Rl ZC8sCisJImNhbid0IGNvbWJpbmUgc3ludGhldGljIGJhY2t1cCB3aXRoIGluY2x1ZGVkIGluY3Jl bWVudGFsIik7CisKKyMgT0ssIHRoYXQncyBhbGwuCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC93cml0ZV9tYW5pZmVzdC5jIGIvc3JjL2Jpbi9w Z19jb21iaW5lYmFja3VwL3dyaXRlX21hbmlmZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uODIxNjAxMzRkOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdf Y29tYmluZWJhY2t1cC93cml0ZV9tYW5pZmVzdC5jCkBAIC0wLDAgKzEsMjkzIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBXcml0ZSBhIG5ldyBiYWNrdXAgbWFuaWZlc3QuCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9iaW4vcGdfY29tYmluZWJh Y2t1cC93cml0ZV9tYW5pZmVzdC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lu Y2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRp bWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNvbW1vbi9jaGVja3N1bV9o ZWxwZXIuaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiY29tbW9u L2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1ZGUgImxvYWRf bWFuaWZlc3QuaCIKKyNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgIndyaXRlX21h bmlmZXN0LmgiCisKK3N0cnVjdCBtYW5pZmVzdF93cml0ZXIKK3sKKwljaGFyCQlwYXRobmFtZVtN QVhQR1BBVEhdOworCWludAkJCWZkOworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlib29sCQlmaXJz dF9maWxlOworCWJvb2wJCXN0aWxsX2NoZWNrc3VtbWluZzsKKwlwZ19jaGVja3N1bV9jb250ZXh0 IG1hbmlmZXN0X2N0eDsKK307CisKK3N0YXRpYyB2b2lkIGVzY2FwZV9qc29uKFN0cmluZ0luZm8g YnVmLCBjb25zdCBjaGFyICpzdHIpOworc3RhdGljIHZvaWQgZmx1c2hfbWFuaWZlc3QobWFuaWZl c3Rfd3JpdGVyICptd3JpdGVyKTsKK3N0YXRpYyBzaXplX3QgaGV4X2VuY29kZShjb25zdCB1aW50 OCAqc3JjLCBzaXplX3QgbGVuLCBjaGFyICpkc3QpOworCisvKgorICogQ3JlYXRlIGEgbmV3IGJh Y2t1cCBtYW5pZmVzdCB3cml0ZXIuCisgKgorICogVGhlIGJhY2t1cCBtYW5pZmVzdCB3aWxsIGJl IHdyaXR0ZW4gaW50byBhIGZpbGUgbmFtZWQgYmFja3VwX21hbmlmZXN0CisgKiBpbiB0aGUgc3Bl Y2lmaWVkIGRpcmVjdG9yeS4KKyAqLworbWFuaWZlc3Rfd3JpdGVyICoKK2NyZWF0ZV9tYW5pZmVz dF93cml0ZXIoY2hhciAqZGlyZWN0b3J5KQoreworCW1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciA9 IHBnX21hbGxvYyhzaXplb2YobWFuaWZlc3Rfd3JpdGVyKSk7CisKKwlzbnByaW50Zihtd3JpdGVy LT5wYXRobmFtZSwgTUFYUEdQQVRILCAiJXMvYmFja3VwX21hbmlmZXN0IiwgZGlyZWN0b3J5KTsK Kwltd3JpdGVyLT5mZCA9IC0xOworCWluaXRTdHJpbmdJbmZvKCZtd3JpdGVyLT5idWYpOworCW13 cml0ZXItPmZpcnN0X2ZpbGUgPSB0cnVlOworCW13cml0ZXItPnN0aWxsX2NoZWNrc3VtbWluZyA9 IHRydWU7CisJcGdfY2hlY2tzdW1faW5pdCgmbXdyaXRlci0+bWFuaWZlc3RfY3R4LCBDSEVDS1NV TV9UWVBFX1NIQTI1Nik7CisKKwlhcHBlbmRTdHJpbmdJbmZvKCZtd3JpdGVyLT5idWYsCisJCQkJ CSAieyBcIlBvc3RncmVTUUwtQmFja3VwLU1hbmlmZXN0LVZlcnNpb25cIjogMSxcbiIKKwkJCQkJ ICJcIkZpbGVzXCI6IFsiKTsKKworCXJldHVybiBtd3JpdGVyOworfQorCisvKgorICogQWRkIGFu IGVudHJ5IGZvciBhIGZpbGUgdG8gYSBiYWNrdXAgbWFuaWZlc3QuCisgKgorICogVGhpcyBpcyB2 ZXJ5IHNpbWlsYXIgdG8gdGhlIGJhY2tlbmQncyBBZGRGaWxlVG9CYWNrdXBNYW5pZmVzdCwgYnV0 CisgKiB2YXJpb3VzIGFkanVzdG1lbnRzIGFyZSByZXF1aXJlZCBkdWUgdG8gZnJvbnRlbmQvYmFj a2VuZCBkaWZmZXJlbmNlcworICogYW5kIG90aGVyIGRldGFpbHMuCisgKi8KK3ZvaWQKK2FkZF9m aWxlX3RvX21hbmlmZXN0KG1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciwgY29uc3QgY2hhciAqbWFu aWZlc3RfcGF0aCwKKwkJCQkJIHNpemVfdCBzaXplLCBwZ190aW1lX3QgbXRpbWUsCisJCQkJCSBw Z19jaGVja3N1bV90eXBlIGNoZWNrc3VtX3R5cGUsCisJCQkJCSBpbnQgY2hlY2tzdW1fbGVuZ3Ro LAorCQkJCQkgdWludDggKmNoZWNrc3VtX3BheWxvYWQpCit7CisJaW50CQkJcGF0aGxlbiA9IHN0 cmxlbihtYW5pZmVzdF9wYXRoKTsKKworCWlmIChtd3JpdGVyLT5maXJzdF9maWxlKQorCXsKKwkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoJm13cml0ZXItPmJ1ZiwgJ1xuJyk7CisJCW13cml0ZXItPmZp cnN0X2ZpbGUgPSBmYWxzZTsKKwl9CisJZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZt d3JpdGVyLT5idWYsICIsXG4iKTsKKworCWlmIChwZ19lbmNvZGluZ192ZXJpZnltYnN0cihQR19V VEY4LCBtYW5pZmVzdF9wYXRoLCBwYXRobGVuKSA9PSBwYXRobGVuKQorCXsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmbXdyaXRlci0+YnVmLCAieyBcIlBhdGhcIjogIik7CisJCWVzY2FwZV9q c29uKCZtd3JpdGVyLT5idWYsIG1hbmlmZXN0X3BhdGgpOworCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZtd3JpdGVyLT5idWYsICIsICIpOworCX0KKwllbHNlCisJeworCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZtd3JpdGVyLT5idWYsICJ7IFwiRW5jb2RlZC1QYXRoXCI6IFwiIik7CisJCWVu bGFyZ2VTdHJpbmdJbmZvKCZtd3JpdGVyLT5idWYsIDIgKiBwYXRobGVuKTsKKwkJbXdyaXRlci0+ YnVmLmxlbiArPSBoZXhfZW5jb2RlKChjb25zdCB1aW50OCAqKSBtYW5pZmVzdF9wYXRoLCBwYXRo bGVuLAorCQkJCQkJCQkJICAgJm13cml0ZXItPmJ1Zi5kYXRhW213cml0ZXItPmJ1Zi5sZW5dKTsK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmbXdyaXRlci0+YnVmLCAiXCIsICIpOworCX0KKwor CWFwcGVuZFN0cmluZ0luZm8oJm13cml0ZXItPmJ1ZiwgIlwiU2l6ZVwiOiAlenUsICIsIHNpemUp OworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmbXdyaXRlci0+YnVmLCAiXCJMYXN0LU1vZGlm aWVkXCI6IFwiIik7CisJZW5sYXJnZVN0cmluZ0luZm8oJm13cml0ZXItPmJ1ZiwgMTI4KTsKKwlt d3JpdGVyLT5idWYubGVuICs9IHN0cmZ0aW1lKCZtd3JpdGVyLT5idWYuZGF0YVttd3JpdGVyLT5i dWYubGVuXSwgMTI4LAorCQkJCQkJCQkgIiVZLSVtLSVkICVIOiVNOiVTICVaIiwKKwkJCQkJCQkJ IGdtdGltZSgmbXRpbWUpKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmbXdyaXRlci0+YnVmLCAn IicpOworCisJaWYgKG13cml0ZXItPmJ1Zi5sZW4gPiAxMjggKiAxMDI0KQorCQlmbHVzaF9tYW5p ZmVzdChtd3JpdGVyKTsKKworCWlmIChjaGVja3N1bV9sZW5ndGggPiAwKQorCXsKKwkJYXBwZW5k U3RyaW5nSW5mbygmbXdyaXRlci0+YnVmLAorCQkJCQkJICIsIFwiQ2hlY2tzdW0tQWxnb3JpdGht XCI6IFwiJXNcIiwgXCJDaGVja3N1bVwiOiBcIiIsCisJCQkJCQkgcGdfY2hlY2tzdW1fdHlwZV9u YW1lKGNoZWNrc3VtX3R5cGUpKTsKKworCQllbmxhcmdlU3RyaW5nSW5mbygmbXdyaXRlci0+YnVm LCAyICogY2hlY2tzdW1fbGVuZ3RoKTsKKwkJbXdyaXRlci0+YnVmLmxlbiArPSBoZXhfZW5jb2Rl KGNoZWNrc3VtX3BheWxvYWQsIGNoZWNrc3VtX2xlbmd0aCwKKwkJCQkJCQkJCSAgICZtd3JpdGVy LT5idWYuZGF0YVttd3JpdGVyLT5idWYubGVuXSk7CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Jm13cml0ZXItPmJ1ZiwgJyInKTsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZtd3Jp dGVyLT5idWYsICIgfSIpOworCisJaWYgKG13cml0ZXItPmJ1Zi5sZW4gPiAxMjggKiAxMDI0KQor CQlmbHVzaF9tYW5pZmVzdChtd3JpdGVyKTsKK30KKworLyoKKyAqIEZpbmFsaXplIHRoZSBiYWNr dXBfbWFuaWZlc3QuCisgKi8KK3ZvaWQKK2ZpbmFsaXplX21hbmlmZXN0KG1hbmlmZXN0X3dyaXRl ciAqbXdyaXRlciwKKwkJCQkgIG1hbmlmZXN0X3dhbF9yYW5nZSAqZmlyc3Rfd2FsX3JhbmdlKQor eworCXVpbnQ4CQljaGVja3N1bWJ1ZltQR19TSEEyNTZfRElHRVNUX0xFTkdUSF07CisJaW50CQkJ bGVuOworCW1hbmlmZXN0X3dhbF9yYW5nZSAqd2FsX3JhbmdlOworCisJLyogVGVybWluYXRlIHRo ZSBsaXN0IG9mIGZpbGVzLiAqLworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJm13cml0ZXItPmJ1 ZiwgIlxuXSxcbiIpOworCisJLyogU3RhcnQgYSBsaXN0IG9mIExTTiByYW5nZXMuICovCisJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmbXdyaXRlci0+YnVmLCAiXCJXQUwtUmFuZ2VzXCI6IFtcbiIp OworCisJZm9yICh3YWxfcmFuZ2UgPSBmaXJzdF93YWxfcmFuZ2U7IHdhbF9yYW5nZSAhPSBOVUxM OworCQkgd2FsX3JhbmdlID0gd2FsX3JhbmdlLT5uZXh0KQorCQlhcHBlbmRTdHJpbmdJbmZvKCZt d3JpdGVyLT5idWYsCisJCQkJCQkgIiVzeyBcIlRpbWVsaW5lXCI6ICV1LCBcIlN0YXJ0LUxTTlwi OiBcIiVYLyVYXCIsIFwiRW5kLUxTTlwiOiBcIiVYLyVYXCIgfSIsCisJCQkJCQkgd2FsX3Jhbmdl ID09IGZpcnN0X3dhbF9yYW5nZSA/ICIiIDogIixcbiIsCisJCQkJCQkgd2FsX3JhbmdlLT50bGks CisJCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHdhbF9yYW5nZS0+c3RhcnRfbHNuKSwKKwkJCQkJCSBM U05fRk9STUFUX0FSR1Mod2FsX3JhbmdlLT5lbmRfbHNuKSk7CisKKwkvKiBUZXJtaW5hdGUgdGhl IGxpc3Qgb2YgV0FMIHJhbmdlcy4gKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZtd3JpdGVy LT5idWYsICJcbl0sXG4iKTsKKworCS8qIEZsdXNoIGFjY3VtdWxhdGVkIGRhdGEgYW5kIHVwZGF0 ZSBjaGVja3N1bSBjYWxjdWxhdGlvbi4gKi8KKwlmbHVzaF9tYW5pZmVzdChtd3JpdGVyKTsKKwor CS8qIENoZWNrc3VtIG9ubHkgaW5jbHVkZXMgZGF0YSB1cCB0byB0aGlzIHBvaW50LiAqLworCW13 cml0ZXItPnN0aWxsX2NoZWNrc3VtbWluZyA9IGZhbHNlOworCisJLyogQ29tcHV0ZSBhbmQgaW5z ZXJ0IG1hbmlmZXN0IGNoZWNrc3VtLiAqLworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJm13cml0 ZXItPmJ1ZiwgIlwiTWFuaWZlc3QtQ2hlY2tzdW1cIjogXCIiKTsKKwllbmxhcmdlU3RyaW5nSW5m bygmbXdyaXRlci0+YnVmLCAyICogUEdfU0hBMjU2X0RJR0VTVF9TVFJJTkdfTEVOR1RIKTsKKwls ZW4gPSBwZ19jaGVja3N1bV9maW5hbCgmbXdyaXRlci0+bWFuaWZlc3RfY3R4LCBjaGVja3N1bWJ1 Zik7CisJQXNzZXJ0KGxlbiA9PSBQR19TSEEyNTZfRElHRVNUX0xFTkdUSCk7CisJbXdyaXRlci0+ YnVmLmxlbiArPQorCQloZXhfZW5jb2RlKGNoZWNrc3VtYnVmLCBsZW4sICZtd3JpdGVyLT5idWYu ZGF0YVttd3JpdGVyLT5idWYubGVuXSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmbXdyaXRl ci0+YnVmLCAiXCJ9XG4iKTsKKworCS8qIEZsdXNoIHRoZSBsYXN0IG1hbmlmZXN0IGNoZWNrc3Vt IGl0c2VsZi4gKi8KKwlmbHVzaF9tYW5pZmVzdChtd3JpdGVyKTsKKworCS8qIENsb3NlIHRoZSBm aWxlLiAqLworCWlmIChjbG9zZShtd3JpdGVyLT5mZCkgIT0gMCkKKwkJcGdfZmF0YWwoImNvdWxk IG5vdCBjbG9zZSBcIiVzXCI6ICVtIiwgbXdyaXRlci0+cGF0aG5hbWUpOworCW13cml0ZXItPmZk ID0gLTE7Cit9CisKKy8qCisgKiBQcm9kdWNlIGEgSlNPTiBzdHJpbmcgbGl0ZXJhbCwgcHJvcGVy bHkgZXNjYXBpbmcgY2hhcmFjdGVycyBpbiB0aGUgdGV4dC4KKyAqLworc3RhdGljIHZvaWQKK2Vz Y2FwZV9qc29uKFN0cmluZ0luZm8gYnVmLCBjb25zdCBjaGFyICpzdHIpCit7CisJY29uc3QgY2hh ciAqcDsKKworCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAnIicpOworCWZvciAocCA9 IHN0cjsgKnA7IHArKykKKwl7CisJCXN3aXRjaCAoKnApCisJCXsKKwkJCWNhc2UgJ1xiJzoKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxcYiIpOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnXGYnOgorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXFxmIik7CisJCQkJYnJl YWs7CisJCQljYXNlICdcbic6CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcXG4i KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1xyJzoKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZiwgIlxcciIpOworCQkJCWJyZWFrOworCQkJY2FzZSAnXHQnOgorCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoYnVmLCAiXFx0Iik7CisJCQkJYnJlYWs7CisJCQljYXNlICciJzoKKwkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxcXCIiKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug J1xcJzoKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxcXFwiKTsKKwkJCQlicmVh azsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKCh1bnNpZ25lZCBjaGFyKSAqcCA8ICcgJykKKwkJCQkJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICJcXHUlMDR4IiwgKGludCkgKnApOworCQkJCWVsc2UKKwkJ CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpwKTsKKwkJCQlicmVhazsKKwkJfQor CX0KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgJyInKTsKK30KKworLyoKKyAqIEZs dXNoIHdoYXRldmVyIHBvcnRpb24gb2YgdGhlIGJhY2t1cCBtYW5pZmVzdCB3ZSBoYXZlIGdlbmVy YXRlZCBhbmQKKyAqIGJ1ZmZlcmVkIGluIG1lbW9yeSBvdXQgdG8gYSBmaWxlIG9uIGRpc2suCisg KgorICogVGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSB0aGUgZmls ZS4gQWZ0ZXIgdGhhdCwgd2UKKyAqIGtlZXAgaXQgb3BlbiBhbmQganVzdCBhcHBlbmQgbW9yZSBk YXRhLgorICovCitzdGF0aWMgdm9pZAorZmx1c2hfbWFuaWZlc3QobWFuaWZlc3Rfd3JpdGVyICpt d3JpdGVyKQoreworCWNoYXIJCXBhdGhuYW1lW01BWFBHUEFUSF07CisKKwlpZiAobXdyaXRlci0+ ZmQgPT0gLTEgJiYKKwkJKG13cml0ZXItPmZkID0gb3Blbihtd3JpdGVyLT5wYXRobmFtZSwKKwkJ CQkJCQlPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wgfCBQR19CSU5BUlksCisJCQkJCQkJcGdf ZmlsZV9jcmVhdGVfbW9kZSkpIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUg XCIlc1wiOiAlbSIsIG13cml0ZXItPnBhdGhuYW1lKTsKKworCWlmIChtd3JpdGVyLT5idWYubGVu ID4gMCkKKwl7CisJCXNzaXplX3QJCXdiOworCisJCXdiID0gd3JpdGUobXdyaXRlci0+ZmQsIG13 cml0ZXItPmJ1Zi5kYXRhLCBtd3JpdGVyLT5idWYubGVuKTsKKwkJaWYgKHdiICE9IG13cml0ZXIt PmJ1Zi5sZW4pCisJCXsKKwkJCWlmICh3YiA8IDApCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3 cml0ZSBcIiVzXCI6ICVtIiwgbXdyaXRlci0+cGF0aG5hbWUpOworCQkJZWxzZQorCQkJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6IHdyb3RlIG9ubHkgJWQgb2YgJWQgYnl0 ZXMiLAorCQkJCQkJIHBhdGhuYW1lLCAoaW50KSB3YiwgbXdyaXRlci0+YnVmLmxlbik7CisJCX0K KworCQlpZiAobXdyaXRlci0+c3RpbGxfY2hlY2tzdW1taW5nKQorCQkJcGdfY2hlY2tzdW1fdXBk YXRlKCZtd3JpdGVyLT5tYW5pZmVzdF9jdHgsCisJCQkJCQkJICAgKHVpbnQ4ICopIG13cml0ZXIt PmJ1Zi5kYXRhLAorCQkJCQkJCSAgIG13cml0ZXItPmJ1Zi5sZW4pOworCQlyZXNldFN0cmluZ0lu Zm8oJm13cml0ZXItPmJ1Zik7CisJfQorfQorCisvKgorICogRW5jb2RlIGJ5dGVzIHVzaW5nIHR3 byBoZXhhZGVtaWNhbCBkaWdpdHMgZm9yIGVhY2ggb25lLgorICovCitzdGF0aWMgc2l6ZV90Cito ZXhfZW5jb2RlKGNvbnN0IHVpbnQ4ICpzcmMsIHNpemVfdCBsZW4sIGNoYXIgKmRzdCkKK3sKKwlj b25zdCB1aW50OCAqZW5kID0gc3JjICsgbGVuOworCisJd2hpbGUgKHNyYyA8IGVuZCkKKwl7CisJ CXVuc2lnbmVkCW4xID0gKCpzcmMgPj4gNCkgJiAweEY7CisJCXVuc2lnbmVkCW4yID0gKnNyYyAm IDB4RjsKKworCQkqZHN0KysgPSBuMSA8IDEwID8gJzAnICsgbjEgOiAnYScgKyBuMSAtIDEwOwor CQkqZHN0KysgPSBuMiA8IDEwID8gJzAnICsgbjIgOiAnYScgKyBuMiAtIDEwOworCQkrK3NyYzsK Kwl9CisKKwlyZXR1cm4gbGVuICogMjsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29tYmlu ZWJhY2t1cC93cml0ZV9tYW5pZmVzdC5oIGIvc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3dyaXRl X21hbmlmZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOGZkN2Zl MDJjOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfY29tYmluZWJhY2t1cC93cml0ZV9t YW5pZmVzdC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFdy aXRlIGEgbmV3IGJhY2t1cCBtYW5pZmVzdC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogc3JjL2Jpbi9wZ19jb21iaW5lYmFja3VwL3dyaXRlX21hbmlmZXN0LmgK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBXUklURV9NQU5JRkVTVF9ICisj ZGVmaW5lIFdSSVRFX01BTklGRVNUX0gKKworI2luY2x1ZGUgImNvbW1vbi9jaGVja3N1bV9oZWxw ZXIuaCIKKyNpbmNsdWRlICJwZ3RpbWUuaCIKKworc3RydWN0IG1hbmlmZXN0X3dhbF9yYW5nZTsK Kworc3RydWN0IG1hbmlmZXN0X3dyaXRlcjsKK3R5cGVkZWYgc3RydWN0IG1hbmlmZXN0X3dyaXRl ciBtYW5pZmVzdF93cml0ZXI7CisKK2V4dGVybiBtYW5pZmVzdF93cml0ZXIgKmNyZWF0ZV9tYW5p ZmVzdF93cml0ZXIoY2hhciAqZGlyZWN0b3J5KTsKK2V4dGVybiB2b2lkIGFkZF9maWxlX3RvX21h bmlmZXN0KG1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciwKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKm1h bmlmZXN0X3BhdGgsCisJCQkJCQkJCSBzaXplX3Qgc2l6ZSwgcGdfdGltZV90IG10aW1lLAorCQkJ CQkJCQkgcGdfY2hlY2tzdW1fdHlwZSBjaGVja3N1bV90eXBlLAorCQkJCQkJCQkgaW50IGNoZWNr c3VtX2xlbmd0aCwKKwkJCQkJCQkJIHVpbnQ4ICpjaGVja3N1bV9wYXlsb2FkKTsKK2V4dGVybiB2 b2lkIGZpbmFsaXplX21hbmlmZXN0KG1hbmlmZXN0X3dyaXRlciAqbXdyaXRlciwKKwkJCQkJCQkg IHN0cnVjdCBtYW5pZmVzdF93YWxfcmFuZ2UgKmZpcnN0X3dhbF9yYW5nZSk7CisKKyNlbmRpZgkJ CQkJCQkvKiBXUklURV9NQU5JRkVTVF9IICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jlc2V0 d2FsL3BnX3Jlc2V0d2FsLmMgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKaW5k ZXggM2FlM2ZjMDZkZi4uNTQwN2Y1MWE0ZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdh bC9wZ19yZXNldHdhbC5jCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYwpA QCAtODUsNiArODUsNyBAQCBzdGF0aWMgdm9pZCBSZXdyaXRlQ29udHJvbEZpbGUodm9pZCk7CiBz dGF0aWMgdm9pZCBGaW5kRW5kT2ZYTE9HKHZvaWQpOwogc3RhdGljIHZvaWQgS2lsbEV4aXN0aW5n WExPRyh2b2lkKTsKIHN0YXRpYyB2b2lkIEtpbGxFeGlzdGluZ0FyY2hpdmVTdGF0dXModm9pZCk7 CitzdGF0aWMgdm9pZCBLaWxsRXhpc3RpbmdXQUxTdW1tYXJpZXModm9pZCk7CiBzdGF0aWMgdm9p ZCBXcml0ZUVtcHR5WExPRyh2b2lkKTsKIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpOwogCkBAIC00 OTMsNiArNDk0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCVJld3JpdGVDb250 cm9sRmlsZSgpOwogCUtpbGxFeGlzdGluZ1hMT0coKTsKIAlLaWxsRXhpc3RpbmdBcmNoaXZlU3Rh dHVzKCk7CisJS2lsbEV4aXN0aW5nV0FMU3VtbWFyaWVzKCk7CiAJV3JpdGVFbXB0eVhMT0coKTsK IAogCXByaW50ZihfKCJXcml0ZS1haGVhZCBsb2cgcmVzZXRcbiIpKTsKQEAgLTEwMzQsNiArMTAz Niw0MCBAQCBLaWxsRXhpc3RpbmdBcmNoaXZlU3RhdHVzKHZvaWQpCiAJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgY2xvc2UgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBBUkNIU1RBVERJUik7CiB9CiAKKy8q CisgKiBSZW1vdmUgZXhpc3RpbmcgV0FMIHN1bW1hcnkgZmlsZXMKKyAqLworc3RhdGljIHZvaWQK K0tpbGxFeGlzdGluZ1dBTFN1bW1hcmllcyh2b2lkKQoreworI2RlZmluZSBXQUxTVU1NQVJZRElS IFhMT0dESVIJIi9zdW1tYXJpZXMiCisjZGVmaW5lIFdBTFNVTU1BUllfTkhFWENIQVJTCTQwCisK KwlESVIJCSAgICp4bGRpcjsKKwlzdHJ1Y3QgZGlyZW50ICp4bGRlOworCWNoYXIJCXBhdGhbTUFY UEdQQVRIICsgc2l6ZW9mKFdBTFNVTU1BUllESVIpXTsKKworCXhsZGlyID0gb3BlbmRpcihXQUxT VU1NQVJZRElSKTsKKwlpZiAoeGxkaXIgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBv cGVuIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgV0FMU1VNTUFSWURJUik7CisKKwl3aGlsZSAoZXJy bm8gPSAwLCAoeGxkZSA9IHJlYWRkaXIoeGxkaXIpKSAhPSBOVUxMKQorCXsKKwkJaWYgKHN0cnNw bih4bGRlLT5kX25hbWUsICIwMTIzNDU2Nzg5QUJDREVGIikgPT0gV0FMU1VNTUFSWV9OSEVYQ0hB UlMgJiYKKwkJCXN0cmNtcCh4bGRlLT5kX25hbWUgKyBXQUxTVU1NQVJZX05IRVhDSEFSUywgIi5z dW1tYXJ5IikgPT0gMCkKKwkJeworCQkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMv JXMiLCBXQUxTVU1NQVJZRElSLCB4bGRlLT5kX25hbWUpOworCQkJaWYgKHVubGluayhwYXRoKSA8 IDApCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBkZWxldGUgZmlsZSBcIiVzXCI6ICVtIiwgcGF0 aCk7CisJCX0KKwl9CisKKwlpZiAoZXJybm8pCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBk aXJlY3RvcnkgXCIlc1wiOiAlbSIsIFdBTFNVTU1BUllESVIpOworCisJaWYgKGNsb3NlZGlyKHhs ZGlyKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIs IEFSQ0hTVEFURElSKTsKK30KIAogLyoKICAqIFdyaXRlIGFuIGVtcHR5IFhMT0cgZmlsZSwgY29u dGFpbmluZyBvbmx5IHRoZSBjaGVja3BvaW50IHJlY29yZApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2diYWNrdXAuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nYmFja3VwLmgK aW5kZXggMTYxMTM1ODEzNy4uOTBlMDRjYWQ1NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3hsb2diYWNrdXAuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ2JhY2t1cC5oCkBA IC0yOCw2ICsyOCw4IEBAIHR5cGVkZWYgc3RydWN0IEJhY2t1cFN0YXRlCiAJWExvZ1JlY1B0cglj aGVja3BvaW50bG9jOwkvKiBsYXN0IGNoZWNrcG9pbnQgbG9jYXRpb24gKi8KIAlwZ190aW1lX3QJ c3RhcnR0aW1lOwkJLyogYmFja3VwIHN0YXJ0IHRpbWUgKi8KIAlib29sCQlzdGFydGVkX2luX3Jl Y292ZXJ5OwkvKiBiYWNrdXAgc3RhcnRlZCBpbiByZWNvdmVyeT8gKi8KKwlYTG9nUmVjUHRyCWlz dGFydHBvaW50OwkvKiBpbmNyZW1lbnRhbCBiYXNlZCBvbiBiYWNrdXAgYXQgdGhpcyBMU04gKi8K KwlUaW1lTGluZUlECWlzdGFydHRsaTsJCS8qIGluY3JlbWVudGFsIGJhc2VkIG9uIGJhY2t1cCBv biB0aGlzIFRMSSAqLwogCiAJLyogRmllbGRzIHNhdmVkIGF0IHRoZSBlbmQgb2YgYmFja3VwICov CiAJWExvZ1JlY1B0cglzdG9wcG9pbnQ7CQkvKiBiYWNrdXAgc3RvcCBXQUwgbG9jYXRpb24gKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2JhY2t1cC9iYXNlYmFja3VwLmggYi9zcmMvaW5jbHVk ZS9iYWNrdXAvYmFzZWJhY2t1cC5oCmluZGV4IDE0MzJkOWMyMDYuLjM0NWJkMjI1MzQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2JhY2t1cC9iYXNlYmFja3VwLmgKKysrIGIvc3JjL2luY2x1ZGUv YmFja3VwL2Jhc2ViYWNrdXAuaApAQCAtMzQsNiArMzQsOSBAQCB0eXBlZGVmIHN0cnVjdAogCWlu dDY0CQlzaXplOwkJCS8qIHRvdGFsIHNpemUgYXMgc2VudDsgLTEgaWYgbm90IGtub3duICovCiB9 IHRhYmxlc3BhY2VpbmZvOwogCi1leHRlcm4gdm9pZCBTZW5kQmFzZUJhY2t1cChCYXNlQmFja3Vw Q21kICpjbWQpOworc3RydWN0IEluY3JlbWVudGFsQmFja3VwSW5mbzsKKworZXh0ZXJuIHZvaWQg U2VuZEJhc2VCYWNrdXAoQmFzZUJhY2t1cENtZCAqY21kLAorCQkJCQkJICAgc3RydWN0IEluY3Jl bWVudGFsQmFja3VwSW5mbyAqaWIpOwogCiAjZW5kaWYJCQkJCQkJLyogX0JBU0VCQUNLVVBfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYmFja3VwL2Jhc2ViYWNrdXBfaW5jcmVtZW50YWwu aCBiL3NyYy9pbmNsdWRlL2JhY2t1cC9iYXNlYmFja3VwX2luY3JlbWVudGFsLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZGU5OTExNzU5OQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9pbmNsdWRlL2JhY2t1cC9iYXNlYmFja3VwX2luY3JlbWVudGFsLmgKQEAgLTAsMCAr MSw1NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogYmFzZWJhY2t1cF9pbmNyZW1lbnRh bC5oCisgKgkgIEFQSSBmb3IgaW5jcmVtZW50YWwgYmFja3VwIHN1cHBvcnQKKyAqCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqCisgKiBzcmMvaW5jbHVkZS9iYWNrdXAvYmFzZWJhY2t1cF9pbmNyZW1lbnRh bC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgQkFTRUJBQ0tVUF9JTkNS RU1FTlRBTF9ICisjZGVmaW5lIEJBU0VCQUNLVVBfSU5DUkVNRU5UQUxfSAorCisjaW5jbHVkZSAi YWNjZXNzL3hsb2diYWNrdXAuaCIKKyNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvYmxvY2suaCIKKyNpbmNsdWRlICJ1dGlscy9wYWxsb2MuaCIKKworI2RlZmlu ZSBJTkNSRU1FTlRBTF9NQUdJQwkJCTB4ZDNhZTFmMGQKKwordHlwZWRlZiBlbnVtCit7CisJQkFD S19VUF9GSUxFX0ZVTExZLAorCUJBQ0tfVVBfRklMRV9JTkNSRU1FTlRBTExZCit9IEZpbGVCYWNr dXBNZXRob2Q7CisKK3N0cnVjdCBJbmNyZW1lbnRhbEJhY2t1cEluZm87Cit0eXBlZGVmIHN0cnVj dCBJbmNyZW1lbnRhbEJhY2t1cEluZm8gSW5jcmVtZW50YWxCYWNrdXBJbmZvOworCitleHRlcm4g SW5jcmVtZW50YWxCYWNrdXBJbmZvICpDcmVhdGVJbmNyZW1lbnRhbEJhY2t1cEluZm8oTWVtb3J5 Q29udGV4dCk7CisKK2V4dGVybiB2b2lkIEFwcGVuZEluY3JlbWVudGFsTWFuaWZlc3REYXRhKElu Y3JlbWVudGFsQmFja3VwSW5mbyAqaWIsCisJCQkJCQkJCQkJICBjb25zdCBjaGFyICpkYXRhLAor CQkJCQkJCQkJCSAgaW50IGxlbik7CitleHRlcm4gdm9pZCBGaW5hbGl6ZUluY3JlbWVudGFsTWFu aWZlc3QoSW5jcmVtZW50YWxCYWNrdXBJbmZvICppYik7CisKK2V4dGVybiB2b2lkIFByZXBhcmVG b3JJbmNyZW1lbnRhbEJhY2t1cChJbmNyZW1lbnRhbEJhY2t1cEluZm8gKmliLAorCQkJCQkJCQkJ CUJhY2t1cFN0YXRlICpiYWNrdXBfc3RhdGUpOworCitleHRlcm4gY2hhciAqR2V0SW5jcmVtZW50 YWxGaWxlUGF0aChPaWQgZGJvaWQsIE9pZCBzcGNvaWQsCisJCQkJCQkJCQlSZWxGaWxlTnVtYmVy IHJlbGZpbGVudW1iZXIsCisJCQkJCQkJCQlGb3JrTnVtYmVyIGZvcmtudW0sIHVuc2lnbmVkIHNl Z25vKTsKK2V4dGVybiBGaWxlQmFja3VwTWV0aG9kIEdldEZpbGVCYWNrdXBNZXRob2QoSW5jcmVt ZW50YWxCYWNrdXBJbmZvICppYiwKKwkJCQkJCQkJCQkJY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJ CQkJCQkJT2lkIGRib2lkLCBPaWQgc3Bjb2lkLAorCQkJCQkJCQkJCQlSZWxGaWxlTnVtYmVyIHJl bGZpbGVudW1iZXIsCisJCQkJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJCQkJCQkJ dW5zaWduZWQgc2Vnbm8sIHNpemVfdCBzaXplLAorCQkJCQkJCQkJCQl1bnNpZ25lZCAqbnVtX2Js b2Nrc19yZXF1aXJlZCwKKwkJCQkJCQkJCQkJQmxvY2tOdW1iZXIgKnJlbGF0aXZlX2Jsb2NrX251 bWJlcnMsCisJCQkJCQkJCQkJCXVuc2lnbmVkICp0cnVuY2F0aW9uX2Jsb2NrX2xlbmd0aCk7Citl eHRlcm4gc2l6ZV90IEdldEluY3JlbWVudGFsRmlsZVNpemUodW5zaWduZWQgbnVtX2Jsb2Nrc19y ZXF1aXJlZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcmVwbG5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaAppbmRleCA1MTQyYTA4NzI5Li5j OTg5NjFjMzI5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9yZXBsbm9kZXMuaApAQCAtMTA4LDQgKzEwOCwxMyBAQCB0eXBl ZGVmIHN0cnVjdCBUaW1lTGluZUhpc3RvcnlDbWQKIAlUaW1lTGluZUlECXRpbWVsaW5lOwogfSBU aW1lTGluZUhpc3RvcnlDbWQ7CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlVUExP QURfTUFOSUZFU1QgY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBl ZGVmIHN0cnVjdCBVcGxvYWRNYW5pZmVzdENtZAoreworCU5vZGVUYWcJCXR5cGU7Cit9IFVwbG9h ZE1hbmlmZXN0Q21kOworCiAjZW5kaWYJCQkJCQkJLyogUkVQTE5PREVTX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0gYi9zcmMvdGVzdC9w ZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtCmluZGV4IGEwMjAzNzc3NjEuLjQ2Y2IyYTY1 NTAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0K KysrIGIvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbQpAQCAtNzc5LDYg Kzc3OSwxMCBAQCBhIHRhci1mb3JtYXQgYmFja3VwLCBwYXNzIHRoZSBuYW1lIG9mIHRoZSB0YXIg cHJvZ3JhbSB0byB1c2UgaW4gdGhlCiBrZXl3b3JkIHBhcmFtZXRlciB0YXJfcHJvZ3JhbS4gIE5v dGUgdGhhdCB0YWJsZXNwYWNlIHRhciBmaWxlcyBhcmVuJ3QKIGhhbmRsZWQgaGVyZS4KIAorVG8g cmVzdG9yZSBmcm9tIGFuIGluY3JlbWVudGFsIGJhY2t1cCwgcGFzcyB0aGUgcGFyYW1ldGVyIGNv bWJpbmVfd2l0aF9wcmlvcgorYXMgYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2YgcHJpb3IgYmFj a3VwIG5hbWVzIHdpdGggd2hpY2ggdGhpcyBiYWNrdXAKK2lzIHRvIGJlIGNvbWJpbmVkIHVzaW5n IHBnX2NvbWJpbmViYWNrdXAuCisKIFN0cmVhbWluZyByZXBsaWNhdGlvbiBjYW4gYmUgZW5hYmxl ZCBvbiB0aGlzIG5vZGUgYnkgcGFzc2luZyB0aGUga2V5d29yZAogcGFyYW1ldGVyIGhhc19zdHJl YW1pbmcgPT4gMS4gVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgogCkBAIC04MTYsNyArODIw LDIyIEBAIHN1YiBpbml0X2Zyb21fYmFja3VwCiAJbWtkaXIgJHNlbGYtPmFyY2hpdmVfZGlyOwog CiAJbXkgJGRhdGFfcGF0aCA9ICRzZWxmLT5kYXRhX2RpcjsKLQlpZiAoZGVmaW5lZCAkcGFyYW1z e3Rhcl9wcm9ncmFtfSkKKwlpZiAoZGVmaW5lZCAkcGFyYW1ze2NvbWJpbmVfd2l0aF9wcmlvcn0p CisJeworCQlteSBAcHJpb3JfYmFja3VwcyA9IEB7JHBhcmFtc3tjb21iaW5lX3dpdGhfcHJpb3J9 fTsKKwkJbXkgQHByaW9yX2JhY2t1cF9wYXRoOworCisJCWZvciBteSAkcHJpb3JfYmFja3VwX25h bWUgKEBwcmlvcl9iYWNrdXBzKQorCQl7CisJCQlwdXNoIEBwcmlvcl9iYWNrdXBfcGF0aCwKKwkJ CQkkcm9vdF9ub2RlLT5iYWNrdXBfZGlyIC4gJy8nIC4gJHByaW9yX2JhY2t1cF9uYW1lOworCQl9 CisKKwkJbG9jYWwgJUVOViA9ICRzZWxmLT5fZ2V0X2VudigpOworCQlQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczo6c3lzdGVtX29yX2JhaWwoJ3BnX2NvbWJpbmViYWNrdXAnLCAnLWQnLAorCQkJQHBy aW9yX2JhY2t1cF9wYXRoLCAkYmFja3VwX3BhdGgsICctbycsICRkYXRhX3BhdGgpOworCX0KKwll bHNpZiAoZGVmaW5lZCAkcGFyYW1ze3Rhcl9wcm9ncmFtfSkKIAl7CiAJCW1rZGlyKCRkYXRhX3Bh dGgpOwogCQlQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6c3lzdGVtX29yX2JhaWwoJHBhcmFtc3t0 YXJfcHJvZ3JhbX0sICd4ZicsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDkzOTAwNDkz MTQuLmUzN2VmOWFhNzYgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00MDIzLDMgKzQw MjMsMTUgQEAgU3VtbWFyaXplclJlYWRMb2NhbFhMb2dQcml2YXRlCiBXYWxTdW1tYXJpemVyRGF0 YQogV2FsU3VtbWFyeUZpbGUKIFdhbFN1bW1hcnlJTworRmlsZUJhY2t1cE1ldGhvZAorSW5jcmVt ZW50YWxCYWNrdXBJbmZvCitVcGxvYWRNYW5pZmVzdENtZAorYmFja3VwX2ZpbGVfZW50cnkKK2Jh Y2t1cF93YWxfcmFuZ2UKK2NiX2NsZWFudXBfZGlyCitjYl9vcHRpb25zCitjYl90YWJsZXNwYWNl CitjYl90YWJsZXNwYWNlX21hcHBpbmcKK21hbmlmZXN0X2RhdGEKK21hbmlmZXN0X3dyaXRlcgor cmZpbGUKLS0gCjIuMzkuMyAoQXBwbGUgR2l0LTE0NSkKCg== --00000000000069928c060ce2d17a--