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.96) (envelope-from ) id 1w4f0d-002Q0G-0f for pgpool-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 13:07:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4f0a-00055R-2N for pgpool-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 13:07:53 +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.96) (envelope-from ) id 1w4f0a-00055J-16 for pgpool-hackers@lists.postgresql.org; Mon, 23 Mar 2026 13:07:52 +0000 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w4f0W-00000000ghb-29Be for pgpool-hackers@lists.postgresql.org; Mon, 23 Mar 2026 13:07:52 +0000 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-4043b909ed4so2242178fac.3 for ; Mon, 23 Mar 2026 06:07:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774271267; cv=none; d=google.com; s=arc-20240605; b=kBhiJdNzsiqjCabD4h365tpzVpOYbp5HX/Dk/f0Cj8LjLedTGzaCDFCU33Au0MVIyq beNLa5lvtrSy3xWEAdFHprf5AqyCUHiuOfNy+wyTTvpTYTfDInaJESrInVygmGbMPoR8 erM5YTg6PdGZEJm7CyMQZz6com2ecQRKYEy5K8D1l+kF6Qz/YaY8yEDqc8lNJHKgZAtT CKNR9PoBz6tJJjfaRI4EP2wkPPo7Iu69fQsSPPAtcVNqBGzsX8JnGof4ivgqzsxsd240 2hBkWyFlpbAMhDwFgarzjpDkKWIcdWGLfe74zNIZWq75XRj5aeX9x/taiuOX/P/uyY+/ uNmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=coesqdwjlqmFbTWBAdZjXHZ1A8wJTRubNOV7z17+zrQ=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=P6eeBYN8AZvAmyG6w8fo9moJ+h/Aomrgdy6ZWa+I8t2viNIl+7PnhTa8uCLCwUl+UH p+9Pxm6l28iRr/Piq+B+qPmpQHX0pMFsZYzsGOlLR61FrGVlNU3EHovJZ2hfh92AvxSK 5TtdcN7HKs6wHx8riqFaz3HGJb+NCGIaibH5OiojFSVaD5zPaEM/fdzekrEyk7Y5oqfc Pl3vyaC0JJ8OB1DjnkiV4HUNsdr5Mzo38BJvBg4XlYDkTUTtDJGTVTcv6CHafvRJrRGH 4X9Ur+yVFVTm0QM6gV2QmlwiH8zk3W24FFf7wiOyiE91JPhMqxhp6GAYdsBs+N80Txor uRtw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tailorbrands.com; s=google; t=1774271267; x=1774876067; darn=lists.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=coesqdwjlqmFbTWBAdZjXHZ1A8wJTRubNOV7z17+zrQ=; b=I1IjaOgKZ89TKz/O1JwiX6zFyFe2zsa+23vHORPNuMgwnQLGpnd6VvS4zlrEq4w4nt RRRxz/+TTxnx4ZAGw0OAj5tsrCdvkNHOL6VZu8OZ4jbBBYKjEe2mG5GXqy/fOdx9BCwr Cq8XC9lzIGGdifSQghWZIoc23Hcqf0CKDrTxZRFMN+HK1Ep57j5sgcRy5vRKyV6wKhst OkHSWchZZQI/hTMg7BGbyq9lb4c4pK/NxfHqCcyi38ce36n4eJ6lv5mqlc0kZNEMKxdw k5rV3JNlx7IUN71V6cfY+YjHcA+lnlnAwYLwGB6vyqvLWEEEzgCXHTv0MO6r7e1Ob/yc v8Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271267; x=1774876067; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=coesqdwjlqmFbTWBAdZjXHZ1A8wJTRubNOV7z17+zrQ=; b=VtJS/UPKfvDbhGMp3amzgqBHX4yeewxfmCqL5aeXCbN7f8M4UXjE/aj6wPAlO89PRg UtfZypc8cW7+6QMJLosYFl5XsYeH+1+3XKLzE294MR+pEashv1yoKqG1w3OLGadFxPQ6 NBvufSfY+n8QD6N4jeKWE126hKbEAwdCHrRa6o4D+QZVWI/EGnXy/tX9YblhWAqo+2Kl bO6jYnd3+rob9XAs+e4OvRO57lDQf+4p/LvrLzcUD37HR+XQ73I/aIB/XbnHO7Bd3mYT XNSLRMADX/G1NzAxD1TSw/eWel4JCbXtC1jYQcS+hj3xysDfQM1xsgZdYKQI10CIuaCS Zw0A== X-Gm-Message-State: AOJu0YxghlnvlMarMuFNQOenzbFR8CKJMuHNrR54agSw9C6kyhU5aqjt Ak/Wle82m1lbxHS7oaSHG997zPSIABkHqwfT2PUqer6DfH0FqaVC7uUYKgHpDNkVis/jvelcJsT zAZbqv5eaTdHVXQrVeguJnjfEzO61R1ItMh+ozQj9aAeZNyPL3KZdDWL6haAqneWB1w== X-Gm-Gg: ATEYQzwIn7tx0x77JnpATewufTnKqabGltF7iHCqRMkqtRw1D9NSG741oMnAjOqGke9 vXcoy89/cPEvMlRn+x64onQ6uYGDhtcKx0oHHtRTieYi7UIw+3YbtNiahCAMSEnVaShuey8NUTc xPKyEGphPVaFNRpLoeagUu8q3d1Wo8+d9VuzLLdheN3y32kaFI9zrgeQhrlhUwGgSD2kboFxbol 9n6L8IDtuLPEaa37TnpuBVHvH4Vx3KYSFmzH0pfqdp0s+65G6+WsqzQboFvuMB2GNBJsArblpFr eu1R44rPp49LfzKj/I1GwJ6WpRgBROWl5xCSFHCbQGaIZjcbgjRKMTPrwwPINuVQhlZbyNDbJF0 3WgJNSqGIAQjJVJSo1nZU1JkaeZjFJHMd8a7A9A== X-Received: by 2002:a05:6870:d361:b0:417:5b05:6869 with SMTP id 586e51a60fabf-41c10fdc93emr8061131fac.22.1774271266434; Mon, 23 Mar 2026 06:07:46 -0700 (PDT) MIME-Version: 1.0 References: <20260309.141839.397327759559519126.ishii@postgresql.org> <20260323.141315.1197840295971477812.ishii@postgresql.org> In-Reply-To: <20260323.141315.1197840295971477812.ishii@postgresql.org> From: Nadav Shatz Date: Mon, 23 Mar 2026 14:07:33 +0100 X-Gm-Features: AQROBzArqXPiAYCsOCjewDMDXedNtaznE4zdgvozK0B_dKfQ6Aok1f2Mxjx4lpk Message-ID: Subject: Re: Proposal: Recent mutated table tracking in memory To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000926926064db0b8d0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000926926064db0b8d0 Content-Type: multipart/alternative; boundary="000000000000926925064db0b8ce" --000000000000926925064db0b8ce Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Tatsuo, Thank you for the thorough review and the fix to the tests!. Here's the updated patch addressing all your comments. re - replication_delay_source_cmd requirement Good catch =E2=80=94 the feature now also works when `delay_threshold_by_ti= me > 0`. I've added the TTL update call to `check_replication_time_lag()` (the pg_stat_replication path), not just `check_replication_time_lag_with_cmd()`. The docs are updated to reflect that either `replication_delay_source_cmd` or `delay_threshold_by_time` can provide the time-based delay. re - Documentation compile error Fixed =E2=80=94 the xref was pointing to `runtime-config-track-table-mutati= on` but the actual section ID is `runtime-config-table-mutation-map`. Thanks again and looking forward to hearing back from you. On Mon, Mar 23, 2026 at 6:13=E2=80=AFAM Tatsuo Ishii = wrote: > > > Thank you for looking into this, fixing it and getting back to me. > > > > Looking forward to your update. > > It seems my commit fixed the issue. > > https://git.postgresql.org/gitweb/?p=3Dpgpool2.git;a=3Dcommit;h=3D18f7f63= 2de982d8fb5d0da2f2fdc48e26ac467e7 > > So, I continue the review. > > + > + This feature requires linkend=3D"guc-replication-delay-source-cmd"> to be configured > + for monitoring replication delay from replicas. > + > > Why this feature requires replication_delay_source_cmd to be set? Why > can't we enable the feature as well when delay_threshold_by_time > 0? > Both replication_delay_source_cmd and delay_threshold_by_time should > provide standy delay in time, which provides enogh information to > run the feature. > > 1. documentation > > - I get a compile error. > > openjade -wall -wno-unused-param -wno-empty -wfully-tagged -c > /usr/share/sgml/docbook/stylesheet/dsssl/modular/catalog -d stylesheet.ds= l > -t sgml -i output-html -V html-index pgpool.sgml > openjade:loadbalance.sgml:1122:21:X: reference to non-existent ID > "RUNTIME-CONFIG-TRACK-TABLE-MUTATION" > > Best regards, > -- > Tatsuo Ishii > SRA OSS K.K. > English: http://www.sraoss.co.jp/index_en/ > Japanese:http://www.sraoss.co.jp > --=20 Nadav Shatz Tailor Brands | CTO --000000000000926925064db0b8ce Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Tatsuo,

Thank you for the thorough review and th= e fix to the tests!. Here's the updated patch addressing all your comme= nts.

re - replication_delay_source_cmd requirement

Good catch= =E2=80=94 the feature now also works when `delay_threshold_by_time > 0`= . I've added the TTL update call to `check_replication_time_lag()` (the= pg_stat_replication path), not just `check_replication_time_lag_with_cmd()= `. The docs are updated to reflect that either `replication_delay_source_cm= d` or `delay_threshold_by_time` can provide the time-based delay.

re= - Documentation compile error

Fixed =E2=80=94 the xref was pointing= to `runtime-config-track-table-mutation` but the actual section ID is `run= time-config-table-mutation-map`.

Thanks again and lo= oking forward to hearing back from you.

On Mon, = Mar 23, 2026 at 6:13=E2=80=AFAM Tatsuo Ishii <ishii@postgresql.org> wrote:

> Thank you for looking into this, fixing it and getting back to me.
>
> Looking forward to your update.

It seems my commit fixed the issue.
https://git.postgresql.org/gitweb/?p=3Dpgpool2.git;a=3Dcommit;h=3D18= f7f632de982d8fb5d0da2f2fdc48e26ac467e7

So, I continue the review.

+=C2=A0 <para>
+=C2=A0 =C2=A0This feature requires <xref linkend=3D"guc-replicatio= n-delay-source-cmd"> to be configured
+=C2=A0 =C2=A0for monitoring replication delay from replicas.
+=C2=A0 </para>

Why this feature requires replication_delay_source_cmd to be set? Why
can't we enable the feature as well when delay_threshold_by_time > 0= ?
Both replication_delay_source_cmd and delay_threshold_by_time should
provide standy delay in time, which provides enogh information to
run the feature.

1. documentation

- I get a compile error.

openjade=C2=A0 -wall -wno-unused-param -wno-empty -wfully-tagged=C2=A0 -c /= usr/share/sgml/docbook/stylesheet/dsssl/modular/catalog -d stylesheet.dsl -= t sgml -i output-html=C2=A0 -V html-index pgpool.sgml
openjade:loadbalance.sgml:1122:21:X: reference to non-existent ID "RUN= TIME-CONFIG-TRACK-TABLE-MUTATION"

Best regards,
--
Tatsuo Ishii
SRA OSS K.K.
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--000000000000926925064db0b8ce-- --000000000000926926064db0b8d0 Content-Type: application/octet-stream; name="table_track.patch" Content-Disposition: attachment; filename="table_track.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn37ajtz0 RnJvbSAwYTQyYmNhMDExNDYwZTgzMTU2ZTUxODFjYTdlMmM0ODk1YjY4OWM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogVHVlLCA2IEphbiAyMDI2IDEyOjQxOjUwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gZmVh dChsb2FkX2JhbGFuY2UpOiBhZGQgaW4tbWVtb3J5IHRhYmxlIG11dGF0aW9uIHRyYWNraW5nCgpJ bnRyb2R1Y2VzICdkbWxfYWRhcHRpdmVfZ2xvYmFsJyBhcyBhIG5ldyB2YWx1ZSBmb3IgZGlzYWJs ZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUuClRoaXMgbW9kZSBpcyBhIHN1cGVyc2V0IG9mIGRtbF9h ZGFwdGl2ZTogaXQgcGVyZm9ybXMgcGVyLXRyYW5zYWN0aW9uIGxvY2FsIHRyYWNraW5nCkFORCBj cm9zcy1zZXNzaW9uIHNoYXJlZC1tZW1vcnkgdHJhY2tpbmcgb2YgcmVjZW50bHkgd3JpdHRlbiB0 YWJsZXMsIHJvdXRpbmcgcmVhZHMKdG8gcHJpbWFyeSB1bnRpbCBhIFRUTCAoYmFzZWQgb24gbWVh c3VyZWQgcmVwbGljYXRpb24gZGVsYXkpIGV4cGlyZXMuCgpTdWItcGFyYW1ldGVycyAodHJhY2tf dGFibGVfbXV0YXRpb25fKikgY29udHJvbCBUVEwgZmFjdG9yLCBjb2xkIHN0YXJ0IGR1cmF0aW9u LApoYXNoIHRhYmxlIHNpemluZywgYW5kIHF1ZXJ5IHBhcnNlIGNhY2hlIHNpemluZy4KLS0tCiBk b2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbCAgICAgICAgICAgICAgICAgfCAgMzM0ICsrKysK IHNyYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwog c3JjL2NvbmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYyAgICAgICAgICAgIHwgICA4OSArCiBz cmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYyAgICAgICAgICAgICAgfCAgMjI3ICsrLQog c3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYyAgICAgICAgICAgIHwgICAxNSArLQog c3JjL2luY2x1ZGUvcG9vbC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQog c3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaCAgICAgICAgICAgICAgICAgICAgIHwgICAyNCArLQog c3JjL2luY2x1ZGUvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oIHwgIDI0NSArKysK IHNyYy9tYWluL3BncG9vbF9tYWluLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjkgKy0K IHNyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxldGUuYyAgICAgICAgICAgICAgICB8ICAgMjkgKwog c3JjL3Byb3RvY29sL2NoaWxkLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCArCiBz cmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1bGVzLmMgICAgICAgICAgICAgfCAgICA2ICstCiBz cmMvcXVlcnlfY2FjaGUvcG9vbF9tZW1xY2FjaGUuYyAgICAgICAgICAgICAgfCAgICA2ICsKIHNy Yy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbSAgICAgICAgICB8ICAgNTYgKwogc3Jj L3N0cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jIHwgICAyNCArCiBzcmMv dGVzdC9yZWdyZXNzaW9uL2xpYnMuc2ggICAgICAgICAgICAgICAgICAgfCAgICAyICsKIC4uLi90 ZXN0cy8wNDIudHJhY2tfdGFibGVfbXV0YXRpb24vdGVzdC5zaCAgICB8ICAzNTQgKysrKwogLi4u LzA0My50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy90ZXN0LnNoIHwgIDE4NCArKysKIHNy Yy91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmMgICAgICAgICB8IDE0NTMgKysrKysr KysrKysrKysrKysKIDE5IGZpbGVzIGNoYW5nZWQsIDMwNzUgaW5zZXJ0aW9ucygrKSwgMTUgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdXRpbHMvcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbi5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL3Rlc3QvcmVncmVzc2lv bi90ZXN0cy8wNDIudHJhY2tfdGFibGVfbXV0YXRpb24vdGVzdC5zaAogY3JlYXRlIG1vZGUgMTAw NzU1IHNyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dh dGNoZG9nL3Rlc3Quc2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdXRpbHMvcG9vbF90cmFja190 YWJsZV9tdXRhdGlvbi5jCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2xvYWRiYWxhbmNlLnNn bWwgYi9kb2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbAppbmRleCA5ZTFlN2IzOWIuLjczODRj ZTgxYSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2xvYWRiYWxhbmNlLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2xvYWRiYWxhbmNlLnNnbWwKQEAgLTExMTAsNiArMTExMCwxOCBAQCBhcHBfbmFt ZV9yZWRpcmVjdF9wcmVmZXJlbmNlX2xpc3QgJmd0OyBkYXRhYmFzZV9yZWRpcmVjdF9wcmVmZXJl bmNlX2xpc3QgJmd0OyB1cwogCQlEZXBlbmRlbnQgZnVuY3Rpb25zLCB0cmlnZ2VycywgYW5kIHZp ZXdzIG9uIHRoZSB0YWJsZXMgY2FuIGJlIGNvbmZpZ3VyZWQKIAkJdXNpbmcgPHhyZWYgbGlua2Vu ZD0iZ3VjLWRtbC1hZGFwdGl2ZS1vYmplY3QtcmVsYXRpb25zaGlwLWxpc3QiPgogICAgICA8L3Bh cmE+CisKKyAgICAgPHBhcmE+CisJCUlmIHRoaXMgcGFyYW1ldGVyIGlzIHNldCB0byA8dmFybmFt ZT5kbWxfYWRhcHRpdmVfZ2xvYmFsPC92YXJuYW1lPiwKKwkJPHByb2R1Y3RuYW1lPlBncG9vbC1J STwvPiBiZWhhdmVzIGxpa2UgPHZhcm5hbWU+ZG1sX2FkYXB0aXZlPC92YXJuYW1lPgorCQkocGVy LXRyYW5zYWN0aW9uIHdyaXRlIHRyYWNraW5nKSBhbmQgYWRkaXRpb25hbGx5IHVzZXMgc2hhcmVk IG1lbW9yeSB0byB0cmFjaworCQlyZWNlbnRseSB3cml0dGVuIHRhYmxlcyBhY3Jvc3MgYWxsIHNl c3Npb25zIGNsdXN0ZXItd2lkZS4gV2hlbiBhIHRhYmxlIGlzCisJCXdyaXR0ZW4gaW4gYW55IHNl c3Npb24sIHN1YnNlcXVlbnQgcmVhZHMgb2YgdGhhdCB0YWJsZSBmcm9tIGFueSBzZXNzaW9uIGFy ZQorCQlyb3V0ZWQgdG8gcHJpbWFyeSB1bnRpbCBhIFRUTCAoYmFzZWQgb24gbWVhc3VyZWQgcmVw bGljYXRpb24gZGVsYXkpIGV4cGlyZXMuCisJCVRoaXMgcHJldmVudHMgc3RhbGUgcmVhZHMgYWZ0 ZXIgd3JpdGVzIGV2ZW4gYWNyb3NzIGRpZmZlcmVudCBjb25uZWN0aW9ucy4KKwkJU2VlIDx4cmVm IGxpbmtlbmQ9InJ1bnRpbWUtY29uZmlnLXRhYmxlLW11dGF0aW9uLW1hcCI+IGZvciB0aGUgc3Vi LXBhcmFtZXRlcnMKKwkJdGhhdCBjb250cm9sIHRoZSBzaGFyZWQtbWVtb3J5IHRyYWNraW5nIGJl aGF2aW9yLgorICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5 PgogCkBAIC0xMTk1LDQgKzEyMDcsMzI2IEBAIGRtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRpb25z aGlwX2xpc3QgPSAndGFibGVfMTp0YWJsZV8yJwogCiAgIDwvdmFyaWFibGVsaXN0PgogIDwvc2Vj dDI+CisKKyA8c2VjdDIgaWQ9InJ1bnRpbWUtY29uZmlnLXRhYmxlLW11dGF0aW9uLW1hcCI+Cisg IDx0aXRsZT5UYWJsZSBNdXRhdGlvbiBNYXAgQ29uZmlndXJhdGlvbiAoTGFnbGVzcyBSZXBsaWNh IFJlYWRzKTwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGVzZSBwYXJhbWV0ZXJzIGNvbmZpZ3Vy ZSB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSwgd2hpY2ggaXMgYWN0aXZhdGVkIGJ5 IHNldHRpbmcKKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1kaXNhYmxlLWxvYWQtYmFsYW5jZS1vbi13 cml0ZSI+IHRvIDxsaXRlcmFsPmRtbF9hZGFwdGl2ZV9nbG9iYWw8L2xpdGVyYWw+LgorICAgVGhl IGZlYXR1cmUgdHJhY2tzIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzIHRvIHByZXZlbnQgc3RhbGUg cmVhZHMgZnJvbSByZXBsaWNhIG5vZGVzIGR1cmluZworICAgcmVwbGljYXRpb24gbGFnLCBpbXBs ZW1lbnRpbmcgdGhlICJsYWdsZXNzIiBhcmNoaXRlY3R1cmUgcGF0dGVybiBmb3IgZGlzdHJpYnV0 ZWQgc3lzdGVtcworICAgd2l0aCByZWFkIHJlcGxpY2FzLgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBXaGVuIGEgdGFibGUgaXMgbW9kaWZpZWQgKElOU0VSVC9VUERBVEUvREVMRVRFKSwgaXQg aXMgbWFya2VkIGFzICJzdGFsZSIgZm9yIGEgVFRMIHBlcmlvZAorICAgKDxsaXRlcmFsPnJlcGxp Y2F0aW9uX2RlbGF5ICogdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjwvbGl0ZXJhbD4p LiBBbnkgU0VMRUNUIHF1ZXJpZXMgb24gc3RhbGUgdGFibGVzIGFyZSByb3V0ZWQKKyAgIHRvIHRo ZSBwcmltYXJ5IG5vZGUgaW5zdGVhZCBvZiByZXBsaWNhcywgZW5zdXJpbmcgcmVhZC1hZnRlci13 cml0ZSBjb25zaXN0ZW5jeS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhpcyBmZWF0dXJl IHJlcXVpcmVzIHRpbWUtYmFzZWQgcmVwbGljYXRpb24gZGVsYXkgbW9uaXRvcmluZy4gVGhpcyBj YW4gYmUgcHJvdmlkZWQgYnkgZWl0aGVyCisgICA8eHJlZiBsaW5rZW5kPSJndWMtcmVwbGljYXRp b24tZGVsYXktc291cmNlLWNtZCI+IChleHRlcm5hbCBjb21tYW5kIG1vZGUpIG9yIGJ5IHNldHRp bmcKKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1kZWxheS10aHJlc2hvbGQtYnktdGltZSI+ICh3aGlj aCB1c2VzIDxsaXRlcmFsPnBnX3N0YXRfcmVwbGljYXRpb24ucmVwbGF5X2xhZzwvbGl0ZXJhbD4K KyAgIGZyb20gUG9zdGdyZVNRTCAxMCspLiBBdCBsZWFzdCBvbmUgb2YgdGhlc2UgbXVzdCBiZSBj b25maWd1cmVkIGZvciB0aGUgVFRMIGNhbGN1bGF0aW9uIHRvIHdvcmsuCisgIDwvcGFyYT4KKwor ICA8d2FybmluZz4KKyAgIDxwYXJhPgorICAgIEVuYWJsaW5nIDxsaXRlcmFsPmRtbF9hZGFwdGl2 ZV9nbG9iYWw8L2xpdGVyYWw+IGluY3JlYXNlcyBzaGFyZWQgbWVtb3J5IGNvbnN1bXB0aW9uLiBX aXRoIGRlZmF1bHQgc2V0dGluZ3MsCisgICAgdGhlIGZlYXR1cmUgcmVxdWlyZXMgYXBwcm94aW1h dGVseSA2LjQgTUIgb2Ygc2hhcmVkIG1lbW9yeSAoMC4xIE1CIGZvciB0YWJsZSB0cmFja2luZyAr IDYuMyBNQiBmb3IgcXVlcnkgY2FjaGUpLgorICAgIE1lbW9yeSB1c2FnZSBzY2FsZXMgd2l0aCBj b25maWd1cmF0aW9uIHBhcmFtZXRlcnM6CisgICA8L3BhcmE+CisgICA8aXRlbWl6ZWRsaXN0Pgor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBUYWJsZSB0cmFja2luZzogPGxpdGVy YWw+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSAqIDQwIGJ5dGVzPC9saXRlcmFsPiAo ZGVmYXVsdDogMjA0OCAqIDQwID0gfjgwIEtCKQorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRl bT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUXVlcnkgY2FjaGU6IDxsaXRl cmFsPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUgKiA2NDAgYnl0 ZXM8L2xpdGVyYWw+IChkZWZhdWx0OiAxMDAwMCAqIDY0MCA9IH42LjMgTUIpCisgICAgIDwvcGFy YT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisgICA8cGFyYT4KKyAgICBG b3IgaGlnaC10cmFmZmljIHN5c3RlbXMgd2l0aCBsYXJnZSBjYWNoZSBzaXplcyAoZS5nLiwgPGxp dGVyYWw+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSA9IDEwMDAw MDwvbGl0ZXJhbD4pLAorICAgIG1lbW9yeSB1c2FnZSBjYW4gcmVhY2ggNjQgTUIgb3IgbW9yZS4g Q29uc2lkZXIgeW91ciBzeXN0ZW0ncyBhdmFpbGFibGUgc2hhcmVkIG1lbW9yeSB3aGVuIHVzaW5n IDxsaXRlcmFsPmRtbF9hZGFwdGl2ZV9nbG9iYWw8L2xpdGVyYWw+LgorICAgPC9wYXJhPgorICA8 L3dhcm5pbmc+CisKKyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3Vj LXRyYWNrLXRhYmxlLW11dGF0aW9uLXR0bC1mYWN0b3IiIHhyZWZsYWJlbD0idHJhY2tfdGFibGVf bXV0YXRpb25fdHRsX2ZhY3RvciI+CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0 YXRpb25fdHRsX2ZhY3RvcjwvdmFybmFtZT4gKDx0eXBlPmZsb2F0aW5nIHBvaW50PC90eXBlPikK KyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211 dGF0aW9uX3R0bF9mYWN0b3I8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmlt YXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAg ICA8cGFyYT4KKyAgICAgIE11bHRpcGxpZXIgZm9yIGNhbGN1bGF0aW5nIHRoZSBUVEw6IDxsaXRl cmFsPlRUTCA9IHJlcGxpY2F0aW9uX2RlbGF5ICogdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2Zh Y3RvcjwvbGl0ZXJhbD4uCisgICAgICBIaWdoZXIgdmFsdWVzIHByb3ZpZGUgbW9yZSBzYWZldHkg bWFyZ2luIGJ1dCBtYXkgcmVkdWNlIHJlYWQgcmVwbGljYSB1dGlsaXphdGlvbi4KKyAgICAgPC9w YXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiAxLjAtMTAwLjAuIERlZmF1bHQg aXMgPGxpdGVyYWw+NS4wPC9saXRlcmFsPi4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBj aGFuZ2VkIGJ5IHJlbG9hZGluZyB0aGUgPHByb2R1Y3RuYW1lPlBncG9vbC1JSTwvPiBjb25maWd1 cmF0aW9ucy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXRyYWNrLXRhYmxlLW11dGF0aW9uLW1heC1z dGFsZW5lc3MiIHhyZWZsYWJlbD0idHJhY2tfdGFibGVfbXV0YXRpb25fbWF4X3N0YWxlbmVzcyI+ CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fbWF4X3N0YWxlbmVzczwv dmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAg PHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fbWF4X3N0YWxlbmVzczwvdmFy bmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJt PgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTWF4aW11 bSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdGhhdCBhIHNpbmdsZSB0YWJsZSBlbnRyeSBjYW4g Y29udGludW91c2x5IGZvcmNlIHF1ZXJpZXMgdG8gcHJpbWFyeSwKKyAgICAgIG1lYXN1cmVkIGZy b20gd2hlbiB0aGUgdGFibGUgd2FzIGZpcnN0IG1hcmtlZCBzdGFsZS4gV2hlbiB0aGlzIGNhcCBp cyByZWFjaGVkLCB0aGUgZW50cnkgaXMgZXhwaXJlZAorICAgICAgcmVnYXJkbGVzcyBvZiByZWNl bnQgd3JpdGVzLiBJZiB0aGUgdGFibGUgaXMgd3JpdHRlbiB0byBhZ2FpbiBhZnRlciBleHBpcnks IGEgZnJlc2ggdHJhY2tpbmcgZW50cnkKKyAgICAgIGlzIGNyZWF0ZWQuCisgICAgIDwvcGFyYT4K KyAgICAgPHBhcmE+CisgICAgICBUaGlzIHBhcmFtZXRlciBib3VuZHMgdGhlIGNyb3NzLXNlc3Np b24gaW1wYWN0IG9mIHRhYmxlIG11dGF0aW9uIHRyYWNraW5nLiBFdmVuIGlmIGEgdGFibGUgaXMg d3JpdHRlbgorICAgICAgdG8gaW4gYSB0aWdodCBsb29wLCBpdHMgZWZmZWN0IG9uIG90aGVyIHNl c3Npb25zJyBsb2FkIGJhbGFuY2luZyBpcyBsaW1pdGVkIHRvIHRoaXMgZHVyYXRpb24uIEZvcgor ICAgICAgbGVnaXRpbWF0ZWx5IGJ1c3kgdGFibGVzLCB0aGUgZ2FwIGJldHdlZW4gZm9yY2VkIGV4 cGlyeSBhbmQgdGhlIG5leHQgd3JpdGUgcmUtbWFya2luZyB0aGUgdGFibGUgaXMKKyAgICAgIG5l Z2xpZ2libGUgKHR5cGljYWxseSBtaWxsaXNlY29uZHMpLgorICAgICA8L3BhcmE+CisgICAgIDxw YXJhPgorICAgICAgU2V0IHRvIDAgdG8gZGlzYWJsZSB0aGUgY2FwIChub3QgcmVjb21tZW5kZWQg Zm9yIHByb2R1Y3Rpb24pLgorICAgICAgVmFsaWQgcmFuZ2U6IDAtMzYwMDAwMCBtcy4gRGVmYXVs dCBpcyA8bGl0ZXJhbD42MDAwMDwvbGl0ZXJhbD4gKDYwIHNlY29uZHMpLgorICAgICAgVGhpcyBw YXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVsb2FkaW5nIHRoZSA8cHJvZHVjdG5hbWU+UGdw b29sLUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFi bGUtbXV0YXRpb24tY29sZC1zdGFydC1kdXJhdGlvbiIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9t dXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190 YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdl cjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFj a190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uPC92YXJuYW1lPiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBEdXJhdGlvbiBpbiBtaWxsaXNlY29u ZHMgdG8gcm91dGUgYWxsIHF1ZXJpZXMgdG8gcHJpbWFyeSBhZnRlciBhIGNoaWxkIHByb2Nlc3Mg c3RhcnRzLgorICAgICAgVGhpcyBwcmV2ZW50cyBzdGFsZSByZWFkcyB3aGVuIGEgbmV3IGNvbm5l Y3Rpb24gaXMgZXN0YWJsaXNoZWQgYmVmb3JlIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbgorICAg ICAgaXMgcG9wdWxhdGVkIHdpdGggcmVjZW50IHdyaXRlIGhpc3RvcnkuCisgICAgIDwvcGFyYT4K KyAgICAgPHBhcmE+CisgICAgICBXaGVuIHdhdGNoZG9nIGlzIGVuYWJsZWQgYW5kIHRoZSBsb2Nh bCBub2RlIGJlY29tZXMgdGhlIGxlYWRlciwgUGdwb29sLUlJIGFsc28gdHJpZ2dlcnMgYQorICAg ICAgZ2xvYmFsIGNvbGQgc3RhcnQgZm9yIHRoaXMgZHVyYXRpb24gdG8gYXZvaWQgc3RhbGUgcmVh ZHMgYWZ0ZXIgbGVhZGVyc2hpcCBjaGFuZ2VzLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgor ICAgICAgVmFsaWQgcmFuZ2U6IDAtNjAwMDAgbXMuIERlZmF1bHQgaXMgPGxpdGVyYWw+MjAwMDwv bGl0ZXJhbD4gKDIgc2Vjb25kcykuCisgICAgICBTZXQgdG8gMCB0byBkaXNhYmxlIGNvbGQgc3Rh cnQgYmVoYXZpb3IuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCBieSByZWxv YWRpbmcgdGhlIDxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gY29uZmlndXJhdGlvbnMuCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJs aXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi10YWJsZS1idWNrZXRzIiB4cmVm bGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMiPgorICAgIDx0ZXJtPjx2 YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM8L3Zhcm5hbWU+ICg8dHlw ZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJu YW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM8L3Zhcm5hbWU+IGNvbmZpZ3Vy YXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+ CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE51bWJlciBvZiBoYXNoIGJ1Y2tl dHMgZm9yIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxlLgorICAgICAgSGlnaGVy IHZhbHVlcyByZWR1Y2UgaGFzaCBjb2xsaXNpb25zIGFuZCBpbXByb3ZlIGxvb2t1cCBwZXJmb3Jt YW5jZS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiA2NC02 NTUzNi4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4xMDI0PC9saXRlcmFsPi4KKyAgICAgIFRoaXMgcGFy YW1ldGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9 Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi10YWJsZS1zaXplIiB4cmVmbGFiZWw9InRyYWNrX3Rh YmxlX211dGF0aW9uX3RhYmxlX3NpemUiPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxl X211dGF0aW9uX3RhYmxlX3NpemU8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAg ICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0 aW9uX3RhYmxlX3NpemU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5 PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8 cGFyYT4KKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIHRhYmxlcyB0aGF0IGNhbiBiZSB0cmFja2Vk IHNpbXVsdGFuZW91c2x5IGluIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbi4KKyAgICAgIFdoZW4g ZnVsbCwgb2xkZXN0IGVudHJpZXMgYXJlIGV2aWN0ZWQgdXNpbmcgYSBzaW1wbGUgZXZpY3Rpb24g c3RyYXRlZ3kuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBWYWxpZCByYW5nZTog MTI4LTEzMTA3Mi4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4yMDQ4PC9saXRlcmFsPi4KKyAgICAgIE1l bW9yeSB1c2FnZTogYXBwcm94aW1hdGVseSA0MCBieXRlcyBwZXIgZW50cnkuCisgICAgICBUaGlz IHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQgc2VydmVyIHN0YXJ0LgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5 IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tcXVlcnktYnVja2V0cyIgeHJlZmxhYmVsPSJ0 cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzIj4KKyAgICA8dGVybT48dmFybmFtZT50 cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdl cjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFj a190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxs aXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciB0 aGUgcXVlcnkgcGFyc2UgY2FjaGUuIFRoZSBjYWNoZSBzdG9yZXMgbm9ybWFsaXplZAorICAgICAg cXVlcnkgc3RyaW5ncyBtYXBwZWQgdG8gdGhlaXIgdGFibGUgZGVwZW5kZW5jaWVzIHRvIGF2b2lk IHJlcGVhdGVkIHBhcnNpbmcuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBWYWxp ZCByYW5nZTogNjQtNjU1MzYuIERlZmF1bHQgaXMgPGxpdGVyYWw+MjA0ODwvbGl0ZXJhbD4uCisg ICAgICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQgc2VydmVyIHN0YXJ0LgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFy bGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tcXVlcnktcGFyc2UtY2FjaGUt c2l6ZSIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9z aXplIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJz ZV9jYWNoZV9zaXplPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRl eHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVy eV9wYXJzZV9jYWNoZV9zaXplPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJp bWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAg ICAgPHBhcmE+CisgICAgICBNYXhpbXVtIG51bWJlciBvZiBxdWVyeSBwYXJzZSByZXN1bHRzIHRv IGNhY2hlLiBVc2VzIExSVSBldmljdGlvbiB3aGVuIGZ1bGwuCisgICAgICBMYXJnZXIgY2FjaGVz IHJlZHVjZSBwYXJzaW5nIG92ZXJoZWFkIGJ1dCBjb25zdW1lIG1vcmUgc2hhcmVkIG1lbW9yeS4K KyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiAxMDAtMTAwMDAw MC4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4xMDAwMDwvbGl0ZXJhbD4uCisgICAgICBNZW1vcnkgdXNh Z2U6IGFwcHJveGltYXRlbHkgNjQwIGJ5dGVzIHBlciBlbnRyeSAofjYuMyBNQiBmb3IgZGVmYXVs dCwgfjY0IE1CIGZvciAxMDAwMDAgZW50cmllcykuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4g b25seSBiZSBzZXQgYXQgc2VydmVyIHN0YXJ0LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRl bT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgIDxzZWN0MyBp ZD0icnVudGltZS1jb25maWctdHJhY2stdGFibGUtbXV0YXRpb24tZXhhbXBsZSI+CisgICA8dGl0 bGU+VHJhY2sgVGFibGUgTXV0YXRpb24gQ29uZmlndXJhdGlvbiBFeGFtcGxlPC90aXRsZT4KKyAg IDxwYXJhPgorICAgIFRvIGVuYWJsZSB0cmFjayB0YWJsZSBtdXRhdGlvbiB3aXRoIHJlcGxpY2F0 aW9uIGRlbGF5IG1vbml0b3Jpbmc6CisgICA8L3BhcmE+CisgICA8cHJvZ3JhbWxpc3Rpbmc+Cisj IEVuYWJsZSBkbWxfYWRhcHRpdmVfZ2xvYmFsIG1vZGUgKGluY2x1ZGVzIHRyYWNrIHRhYmxlIG11 dGF0aW9uKQorZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSAnZG1sX2FkYXB0aXZlX2ds b2JhbCcKK3RyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IgPSA1LjAKK3RyYWNrX3RhYmxl X211dGF0aW9uX21heF9zdGFsZW5lc3MgPSA2MDAwMAordHJhY2tfdGFibGVfbXV0YXRpb25fY29s ZF9zdGFydF9kdXJhdGlvbiA9IDIwMDAKKworIyBPcHRpb24gQTogVXNlIGV4dGVybmFsIGNvbW1h bmQgZm9yIHJlcGxpY2F0aW9uIGRlbGF5CityZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfY21kID0g Jy9wYXRoL3RvL2dldC1yZXBsaWNhdGlvbi1kZWxheS5zaCcKK3JlcGxpY2F0aW9uX2RlbGF5X3Nv dXJjZV90aW1lb3V0ID0gMTAKKworIyBPcHRpb24gQjogVXNlIHBnX3N0YXRfcmVwbGljYXRpb24g cmVwbGF5X2xhZyAoUEcgMTArKQorIyBkZWxheV90aHJlc2hvbGRfYnlfdGltZSA9IDEwMDAKKwor IyBBZGp1c3QgY2FjaGUgc2l6ZXMgYmFzZWQgb24gd29ya2xvYWQgKGluY3JlYXNlcyBtZW1vcnkg dXNhZ2UpCit0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplID0gNDA5NgordHJhY2tfdGFi bGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSA9IDUwMDAwCisgICA8L3Byb2dyYW1s aXN0aW5nPgorICAgPHBhcmE+CisgICAgVG90YWwgc2hhcmVkIG1lbW9yeSByZXF1aXJlZCBmb3Ig YWJvdmUgY29uZmlndXJhdGlvbjogYXBwcm94aW1hdGVseSAzMS4yIE1CICgzMSBNQiBxdWVyeSBj YWNoZSArIDAuMiBNQiB0YWJsZSBtYXAgKyBvdmVyaGVhZCkuCisgICAgRGVmYXVsdCBjb25maWd1 cmF0aW9uICgxMDAwMCBxdWVyeSBjYWNoZSBlbnRyaWVzLCAyMDQ4IHRhYmxlcykgcmVxdWlyZXMg YXBwcm94aW1hdGVseSA2LjQgTUIuCisgICA8L3BhcmE+CisgIDwvc2VjdDM+CisKKyAgPHNlY3Qz IGlkPSJydW50aW1lLWNvbmZpZy10cmFjay10YWJsZS1tdXRhdGlvbi1saW1pdGF0aW9ucyI+Cisg ICA8dGl0bGU+TGltaXRhdGlvbnM8L3RpdGxlPgorICAgPHBhcmE+CisgICAgVGhlIHRyYWNrIHRh YmxlIG11dGF0aW9uIGZlYXR1cmUgaGFzIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbjoKKyAgIDwv cGFyYT4KKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIDxsaXRlcmFsPlBSRVBBUkU8L2xpdGVyYWw+IHN0YXRlbWVudHMgYXJlIG5vdCB0cmFja2Vk LiBXaGVuIGEgcHJlcGFyZWQgc3RhdGVtZW50CisgICAgICBjb250YWluaW5nIGRhdGEgbW9kaWZp Y2F0aW9uIGlzIGV4ZWN1dGVkLCB0aGUgdGFibGUgbXV0YXRpb24gaXMgbm90IHJlY29yZGVkLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICAgPHBh cmE+CisgICAgSWYgeW91ciBhcHBsaWNhdGlvbiB1c2VzIHByZXBhcmVkIHN0YXRlbWVudHMgYW5k IHJlcXVpcmVzIHJlYWQtYWZ0ZXItd3JpdGUgY29uc2lzdGVuY3ksCisgICAgY29uc2lkZXIgdXNp bmcgZXhwbGljaXQgdHJhbnNhY3Rpb24gcm91dGluZyBvciB0aGUgPGxpdGVyYWw+LypOTyBMT0FE IEJBTEFOQ0UqLzwvbGl0ZXJhbD4KKyAgICBjb21tZW50IGRpcmVjdGl2ZSBmb3IgYWZmZWN0ZWQg cXVlcmllcy4KKyAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgIFRoZSBmb2xsb3dpbmcgc3RhdGVt ZW50IHR5cGVzIDxlbXBoYXNpcz5hcmU8L2VtcGhhc2lzPiB0cmFja2VkIGFuZCB3aWxsIG1hcmsg dGFibGVzIGFzIHN0YWxlOgorICAgPC9wYXJhPgorICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+SU5TRVJUPC9saXRlcmFsPiwgPGxp dGVyYWw+VVBEQVRFPC9saXRlcmFsPiwgPGxpdGVyYWw+REVMRVRFPC9saXRlcmFsPgorICAgICAg c3RhdGVtZW50cyAoaW5jbHVkaW5nIHRob3NlIHdpdGggPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRl cmFsPiBjbGF1c2VzKS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3Rp dGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPlRSVU5DQVRFPC9saXRlcmFsPiBzdGF0 ZW1lbnRzIChpbmNsdWRpbmcgbXVsdGlwbGUgdGFibGVzKS4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPk1F UkdFPC9saXRlcmFsPiBzdGF0ZW1lbnRzIChQb3N0Z3JlU1FMIDE1KykuCisgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0 ZXJhbD5XSVRIPC9saXRlcmFsPiBjbGF1c2VzIGNvbnRhaW5pbmcgZGF0YSBtb2RpZmljYXRpb25z IChDb21tb24gVGFibGUgRXhwcmVzc2lvbnMKKyAgICAgIHdpdGggPGxpdGVyYWw+SU5TRVJUPC9s aXRlcmFsPiwgPGxpdGVyYWw+VVBEQVRFPC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+REVMRVRFPC9s aXRlcmFsPikuCisgICAgICBGb3IgZXhhbXBsZSwgPGxpdGVyYWw+V0lUSCBkZWxldGVkIEFTIChE RUxFVEUgRlJPTSB0MSBSRVRVUk5JTkcgKikgU0VMRUNUICogRlJPTSBkZWxldGVkPC9saXRlcmFs PgorICAgICAgd2lsbCBwcm9wZXJseSBtYXJrIHRhYmxlIDxsaXRlcmFsPnQxPC9saXRlcmFsPiBh cyBzdGFsZS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlz dD4KKyAgIDxwYXJhPgorICAgIDxlbXBoYXNpcz5UcmFuc2FjdGlvbiBSb2xsYmFjayBCZWhhdmlv cjo8L2VtcGhhc2lzPiBXaXRoaW4gZXhwbGljaXQgdHJhbnNhY3Rpb25zLCB0YWJsZXMKKyAgICBh cmUgb25seSBtYXJrZWQgYXMgc3RhbGUgaW4gc2hhcmVkIG1lbW9yeSB3aGVuIHRoZSB0cmFuc2Fj dGlvbiBpcyBjb21taXR0ZWQuIElmIHRoZQorICAgIHRyYW5zYWN0aW9uIGlzIHJvbGxlZCBiYWNr LCBubyB0YWJsZXMgYXJlIG1hcmtlZCwgc2luY2Ugbm8gYWN0dWFsIGRhdGEgbW9kaWZpY2F0aW9u CisgICAgb2NjdXJyZWQgb24gcmVwbGljYXMuIFRoaXMgcHJldmVudHMgcm9sbGVkLWJhY2sgdHJh bnNhY3Rpb25zIGZyb20gdW5uZWNlc3NhcmlseQorICAgIGRpc2FibGluZyBsb2FkIGJhbGFuY2lu Zy4gRm9yIGF1dG9jb21taXQgc3RhdGVtZW50cyAob3V0c2lkZSBleHBsaWNpdCB0cmFuc2FjdGlv bnMpLAorICAgIHRhYmxlcyBhcmUgbWFya2VkIGltbWVkaWF0ZWx5IHVwb24gY29tbWFuZCBjb21w bGV0aW9uLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICA8ZW1waGFzaXM+Q3Jvc3MtU2Vz c2lvbiBJbXBhY3QgYW5kIFNhZmV0eSBCb3VuZHM6PC9lbXBoYXNpcz4KKyAgICBVbmxpa2UgPGxp dGVyYWw+ZG1sX2FkYXB0aXZlPC9saXRlcmFsPiAod2hpY2ggb25seSBhZmZlY3RzIHRoZSBzZXNz aW9uIHRoYXQgaXNzdWVkIHRoZSB3cml0ZSksCisgICAgPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2ds b2JhbDwvbGl0ZXJhbD4gYWZmZWN0cyBhbGwgc2Vzc2lvbnMgcmVhZGluZyB0aGUgc2FtZSB0YWJs ZSBpbiB0aGUgc2FtZSBkYXRhYmFzZS4KKyAgICBUaGUgZm9sbG93aW5nIHNhZmV0eSBtZWNoYW5p c21zIGJvdW5kIHRoaXMgY3Jvc3Mtc2Vzc2lvbiBpbXBhY3Q6CisgICA8L3BhcmE+CisgICA8aXRl bWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8ZW1waGFzaXM+ TWF4aW11bSBzdGFsZW5lc3MgY2FwOjwvZW1waGFzaXM+IFRoZSA8eHJlZiBsaW5rZW5kPSJndWMt dHJhY2stdGFibGUtbXV0YXRpb24tbWF4LXN0YWxlbmVzcyI+CisgICAgICBwYXJhbWV0ZXIgKGRl ZmF1bHQ6IDYwIHNlY29uZHMpIGxpbWl0cyBob3cgbG9uZyBhbnkgc2luZ2xlIHRhYmxlIGVudHJ5 IGNhbiBjb250aW51b3VzbHkgZm9yY2UgcHJpbWFyeQorICAgICAgcm91dGluZy4gRXZlbiB1bmRl ciBzdXN0YWluZWQgd3JpdGVzLCB0aGUgZW50cnkgZXhwaXJlcyBhZnRlciB0aGlzIHBlcmlvZCBh bmQgaXMgb25seSByZW5ld2VkIGJ5CisgICAgICBzdWJzZXF1ZW50IGNvbW1pdHRlZCB3cml0ZXMu CisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBh cmE+CisgICAgICA8ZW1waGFzaXM+RGF0YWJhc2UgaXNvbGF0aW9uOjwvZW1waGFzaXM+IFRhYmxl IHN0YWxlbmVzcyB0cmFja2luZyBpcyBzY29wZWQgYnkgZGF0YWJhc2UgT0lELiBXcml0ZXMKKyAg ICAgIGluIG9uZSBkYXRhYmFzZSBuZXZlciBhZmZlY3QgbG9hZCBiYWxhbmNpbmcgZGVjaXNpb25z IGZvciBzZXNzaW9ucyBjb25uZWN0ZWQgdG8gYSBkaWZmZXJlbnQgZGF0YWJhc2UuCisgICAgICBJ biBtdWx0aS10ZW5hbnQgZGVwbG95bWVudHMgd2hlcmUgdGVuYW50cyB1c2Ugc2VwYXJhdGUgZGF0 YWJhc2VzLCBvbmUgdGVuYW50J3Mgd3JpdGUgYWN0aXZpdHkgY2Fubm90CisgICAgICBpbmZsdWVu Y2UgYW5vdGhlciB0ZW5hbnQncyBxdWVyeSByb3V0aW5nLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGVtcGhhc2lzPkNv bW1pdHRlZCB3cml0ZXMgb25seTo8L2VtcGhhc2lzPiBPbmx5IGNvbW1pdHRlZCB0cmFuc2FjdGlv bnMgbWFyayB0YWJsZXMgYXMgc3RhbGUuCisgICAgICBSb2xsZWQtYmFjayB0cmFuc2FjdGlvbnMg aGF2ZSBubyBlZmZlY3Qgb24gdGhlIHNoYXJlZCB0cmFja2luZyBzdGF0ZS4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxl bXBoYXNpcz5Cb3VuZGVkIHRhYmxlIG1hcCBzaXplOjwvZW1waGFzaXM+IFRoZSBzaGFyZWQgbWVt b3J5IHRhYmxlIG1hcCBoYXMgYSBmaXhlZCBtYXhpbXVtIHNpemUKKyAgICAgICg8eHJlZiBsaW5r ZW5kPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tdGFibGUtc2l6ZSI+KS4gQXQgbW9zdCB0aGlz IG1hbnkgdGFibGVzIGNhbiBiZSBtYXJrZWQgc3RhbGUKKyAgICAgIHNpbXVsdGFuZW91c2x5LCBw cm92aWRpbmcgYSBuYXR1cmFsIGNlaWxpbmcgb24gdGhlIGZlYXR1cmUncyBpbXBhY3QuCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisgIDwvc2VjdDM+ CisKKyA8L3NlY3QyPgorCiA8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIv c3JjL01ha2VmaWxlLmFtCmluZGV4IDQ2NzhhYjUzMC4uMzk1ODhhZjU4IDEwMDY0NAotLS0gYS9z cmMvTWFrZWZpbGUuYW0KKysrIGIvc3JjL01ha2VmaWxlLmFtCkBAIC0zNSw2ICszNSw3IEBAIHBn cG9vbF9TT1VSQ0VTID0gbWFpbi9tYWluLmMgXAogCXJld3JpdGUvcG9vbF90aW1lc3RhbXAuYyBc CiAJcmV3cml0ZS9wb29sX2xvYmouYyBcCiAJdXRpbHMvcG9vbF9zZWxlY3Rfd2Fsa2VyLmMgXAor CXV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYyBcCiAJdXRpbHMvc3RybGNweS5jIFwK IAl1dGlscy9wc3ByaW50Zi5jIFwKIAl1dGlscy9wb29sX3BhcmFtcy5jIFwKZGlmZiAtLWdpdCBh L3NyYy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMgYi9zcmMvY29uZmlnL3Bvb2xfY29u ZmlnX3ZhcmlhYmxlcy5jCmluZGV4IGNlMTNjNDJmNi4uYTZiOTA5ZDQyIDEwMDY0NAotLS0gYS9z cmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jCisrKyBiL3NyYy9jb25maWcvcG9vbF9j b25maWdfdmFyaWFibGVzLmMKQEAgLTI5MCw2ICsyOTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGNvbmZpZ19lbnVtX2VudHJ5IGRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlX29wdGlvbnNb XSA9CiAJeyJ0cmFuc190cmFuc2FjdGlvbiIsIERMQk9XX1RSQU5TX1RSQU5TQUNUSU9OLCBmYWxz ZX0sCiAJeyJhbHdheXMiLCBETEJPV19BTFdBWVMsIGZhbHNlfSwKIAl7ImRtbF9hZGFwdGl2ZSIs IERMQk9XX0RNTF9BREFQVElWRSwgZmFsc2V9LAorCXsiZG1sX2FkYXB0aXZlX2dsb2JhbCIsIERM Qk9XX0RNTF9BREFQVElWRV9HTE9CQUwsIGZhbHNlfSwKIAl7TlVMTCwgMCwgZmFsc2V9CiB9Owog CkBAIC0xNzc3LDYgKzE3NzgsMTkgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50X2FycmF5IENv bmZpZ3VyZU5hbWVzSW50QXJyYXlbXSA9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2RvdWJsZSBD b25maWd1cmVOYW1lc0RvdWJsZVtdID0KIHsKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25f dHRsX2ZhY3RvciIsCisJCQlDRkdDWFRfUkVMT0FELCBMT0FEX0JBTEFOQ0VfQ09ORklHLAorCQkJ IlRUTCBtdWx0aXBsaWVyIGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbiAiCisJCQkiKFRUTCA9IHJl cGxpY2F0aW9uX2RlbGF5ICogZmFjdG9yKSIsCisJCQlDT05GSUdfVkFSX1RZUEVfRE9VQkxFLCBm YWxzZSwgMAorCQl9LAorCQkmZ19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90dGxf ZmFjdG9yLAorCQk1LjAsCQkJCQkvKiBib290IHZhbHVlOiA1eCByZXBsaWNhdGlvbiBkZWxheSAq LworCQkxLjAsIDEwMC4wLAkJCQkvKiBtaW4sIG1heCAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJ fSwKKwogCS8qIEVuZC1vZi1saXN0IG1hcmtlciAqLwogCUVNUFRZX0NPTkZJR19ET1VCTEUKIH07 CkBAIC0yMzk3LDYgKzI0MTEsODEgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3Vy ZU5hbWVzSW50W10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJ0cmFja190 YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzIiwKKwkJCUNGR0NYVF9SRUxPQUQsIExPQURfQkFM QU5DRV9DT05GSUcsCisJCQkiTWF4aW11bSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdGhhdCBh ICIKKwkJCSJ0YWJsZSBjYW4gYmUgbWFya2VkIHN0YWxlIGZyb20gaXRzIGZpcnN0ICIKKwkJCSJ3 cml0ZS4gMCBkaXNhYmxlcyB0aGUgY2FwLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxz ZSwgR1VDX1VOSVRfTVMKKwkJfSwKKwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRp b25fbWF4X3N0YWxlbmVzcywKKwkJNjAwMDAsCQkJCQkvKiA2MCBzZWNvbmRzICovCisJCTAsIDM2 MDAwMDAsCQkJCS8qIDAgdG8gMSBob3VyICovCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJ eworCQl7InRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24iLAorCQkJQ0ZH Q1hUX1JFTE9BRCwgTE9BRF9CQUxBTkNFX0NPTkZJRywKKwkJCSJEdXJhdGlvbiBpbiBtaWxsaXNl Y29uZHMgdG8gZm9yY2UgcXVlcmllcyAiCisJCQkidG8gcHJpbWFyeSBhZnRlciBjaGlsZCBwcm9j ZXNzIHN0YXJ0cy4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIEdVQ19VTklUX01T CisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRf ZHVyYXRpb24sCisJCTIwMDAsCQkJCQkvKiAyIHNlY29uZHMgKi8KKwkJMCwgNjAwMDAsCQkJCS8q IDAgdG8gNjAgc2Vjb25kcyAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJ0 cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzIiwKKwkJCUNGR0NYVF9JTklULCBMT0FE X0JBTEFOQ0VfQ09ORklHLAorCQkJIk51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRyYWNrIHRh YmxlIG11dGF0aW9uLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAor CQkmZ19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzLAorCQkx MDI0LAorCQk2NCwgNjU1MzYsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7InRy YWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUiLAorCQkJQ0ZHQ1hUX0lOSVQsIExPQURfQkFM QU5DRV9DT05GSUcsCisJCQkiTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiB0cmFjayB0YWJs ZSBtdXRhdGlvbi4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIDAKKwkJfSwKKwkJ JmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSwKKwkJMjA0OCwK KwkJMTI4LCAxMzEwNzIsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7InRyYWNr X3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHMiLAorCQkJQ0ZHQ1hUX0lOSVQsIExPQURfQkFM QU5DRV9DT05GSUcsCisJCQkiTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgcXVlcnkgcGFyc2Ug Y2FjaGUuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bv b2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHMsCisJCTIwNDgsCisJ CTY0LCA2NTUzNiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsidHJhY2tfdGFi bGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSIsCisJCQlDRkdDWFRfSU5JVCwgTE9B RF9CQUxBTkNFX0NPTkZJRywKKwkJCSJNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXJ5 IHBhcnNlIGNhY2hlLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAor CQkmZ19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9z aXplLAorCQkxMDAwMCwKKwkJMTAwLCAxMDAwMDAwLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwK KwogCS8qIEVuZC1vZi1saXN0IG1hcmtlciAqLwogCUVNUFRZX0NPTkZJR19JTlQKIH07CmRpZmYg LS1naXQgYS9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYyBiL3NyYy9jb250ZXh0L3Bv b2xfcXVlcnlfY29udGV4dC5jCmluZGV4IDdjZjk4MTNlYi4uNjgzYjBlYzY2IDEwMDY0NAotLS0g YS9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYworKysgYi9zcmMvY29udGV4dC9wb29s X3F1ZXJ5X2NvbnRleHQuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgInV0aWxzL3N0YXRp c3RpY3MuaCIKICNpbmNsdWRlICJ1dGlscy9wb29sX3NlbGVjdF93YWxrZXIuaCIKICNpbmNsdWRl ICJ1dGlscy9wb29sX3N0cmVhbS5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFibGVf bXV0YXRpb24uaCIKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmgiCiAj aW5jbHVkZSAiY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuaCIKICNpbmNsdWRlICJwYXJzZXIv bm9kZXMuaCIKQEAgLTE4MjgsMTUgKzE4MjksMjMgQEAgaXNfaW5fbGlzdChjaGFyICpuYW1lLCBM aXN0ICpsaXN0KQogc3RhdGljIGJvb2wKIGlzX3NlbGVjdF9vYmplY3RfaW5fdGVtcF93cml0ZV9s aXN0KE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCiB7Ci0JaWYgKG5vZGUgPT0gTlVMTCB8fCBw b29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gRExCT1dfRE1MX0FE QVBUSVZFKQorCWlmIChub2RlID09IE5VTEwgfHwKKwkJIURMQk9XX0lTX0RNTF9BREFQVElWRSgK KwkJCXBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJCXJldHVy biBmYWxzZTsKIAogCWlmIChJc0Eobm9kZSwgUmFuZ2VWYXIpKQogCXsKIAkJUmFuZ2VWYXIgICAq cmd2ID0gKFJhbmdlVmFyICopIG5vZGU7Ci0JCVBPT0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9u X2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpOworCQlQT09MX1NFU1NJ T05fQ09OVEVYVCAqc2Vzc2lvbl9jb250ZXh0OworCQlib29sCQlpc19hZGFwdGl2ZTsKIAotCQlp ZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RN TF9BREFQVElWRSAmJiBzZXNzaW9uX2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uKQorCQlzZXNz aW9uX2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpOworCQlpc19hZGFw dGl2ZSA9IERMQk9XX0lTX0RNTF9BREFQVElWRSgKKwkJCXBvb2xfY29uZmlnLT5kaXNhYmxlX2xv YWRfYmFsYW5jZV9vbl93cml0ZSk7CisKKwkJaWYgKGlzX2FkYXB0aXZlICYmCisJCQlzZXNzaW9u X2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uKQogCQl7CiAJCQllcmVwb3J0KERFQlVHMSwKIAkJ CQkJKGVycm1zZygiaXNfc2VsZWN0X29iamVjdF9pbl90ZW1wX3dyaXRlX2xpc3Q6IFwiJXNcIiwg Zm91bmQgcmVsYXRpb24gXCIlc1wiIiwgKGNoYXIgKikgY29udGV4dCwgcmd2LT5yZWxuYW1lKSkp OwpAQCAtMTg4MCw3ICsxODg5LDEzIEBAIHN0YXRpYyBjaGFyICpnZXRfYXNzb2NpYXRlZF9vYmpl Y3RfZnJvbV9kbWxfYWRhcHRpdmVfcmVsYXRpb25zCiB2b2lkCiBjaGVja19vYmplY3RfcmVsYXRp b25zaGlwX2xpc3QoY2hhciAqbmFtZSwgYm9vbCBpc19mdW5jX25hbWUpCiB7Ci0JaWYgKHBvb2xf Y29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJ VkUgJiYgcG9vbF9jb25maWctPnBhcnNlZF9kbWxfYWRhcHRpdmVfb2JqZWN0X3JlbGF0aW9uc2hp cF9saXN0KQorCWJvb2wJCWlzX2FkYXB0aXZlOworCisJaXNfYWRhcHRpdmUgPSBETEJPV19JU19E TUxfQURBUFRJVkUoCisJCXBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0 ZSk7CisKKwlpZiAoaXNfYWRhcHRpdmUgJiYKKwkJcG9vbF9jb25maWctPnBhcnNlZF9kbWxfYWRh cHRpdmVfb2JqZWN0X3JlbGF0aW9uc2hpcF9saXN0KQogCXsKIAkJUE9PTF9TRVNTSU9OX0NPTlRF WFQgKnNlc3Npb25fY29udGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSk7CiAK QEAgLTE5NDQsNyArMTk1OSw3IEBAIGFkZF9vYmplY3RfaW50b190ZW1wX3dyaXRlX2xpc3QoTm9k ZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIHN0YXRpYyB2b2lkCiBkbWxfYWRhcHRpdmUoTm9kZSAq bm9kZSwgY2hhciAqcXVlcnkpCiB7Ci0JaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFs YW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJVkUpCisJaWYgKERMQk9XX0lTX0RNTF9B REFQVElWRShwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpKQogCXsK IAkJLyogU2V0L1Vuc2V0IHRyYW5zYWN0aW9uIHN0YXR1cyBmbGFncyAqLwogCQlpZiAoSXNBKG5v ZGUsIFRyYW5zYWN0aW9uU3RtdCkpCkBAIC0xOTYzLDYgKzE5NzgsNDYgQEAgZG1sX2FkYXB0aXZl KE5vZGUgKm5vZGUsIGNoYXIgKnF1ZXJ5KQogCQkJfQogCQkJZWxzZSBpZiAoaXNfY29tbWl0X29y X3JvbGxiYWNrX3F1ZXJ5KG5vZGUpKQogCQkJeworCQkJCS8qCisJCQkJICogRm9yIGRtbF9hZGFw dGl2ZV9nbG9iYWw6IG9uIENPTU1JVCwgZmx1c2gKKwkJCQkgKiB0aGUgYWNjdW11bGF0ZWQgdGFi bGUgd3JpdGVzIHRvIHNoYXJlZAorCQkJCSAqIG1lbW9yeS4gIE9uIFJPTExCQUNLLCBza2lwIC0t IHRoZSB3cml0ZXMKKwkJCQkgKiBuZXZlciBjb21taXR0ZWQgc28gbm8gc3RhbGUtcmVhZCByaXNr CisJCQkJICogZXhpc3RzLiAgVGhpcyBwcmV2ZW50cyBwb2xsdXRpbmcgdGhlIHRhYmxlCisJCQkJ ICogbWFwIHdpdGggcm9sbGVkLWJhY2sgdHJhbnNhY3Rpb25zLgorCQkJCSAqLworCQkJCWludAkJ ZGxib3cgPQorCQkJCQlwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGU7 CisJCQkJTGlzdCAgICp3bGlzdCA9CisJCQkJCXNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25f dGVtcF93cml0ZV9saXN0OworCisJCQkJaWYgKGRsYm93ID09IERMQk9XX0RNTF9BREFQVElWRV9H TE9CQUwgJiYKKwkJCQkJaXNfY29tbWl0X3F1ZXJ5KG5vZGUpICYmCisJCQkJCXdsaXN0ICE9IE5J TCkKKwkJCQl7CisJCQkJCUxpc3RDZWxsICAgKmNlbGw7CisJCQkJCWludAkJCWRib2lkOworCisJ CQkJCWRib2lkID0KKwkJCQkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNl X29pZCgpOworCQkJCQlpZiAoZGJvaWQgPiAwKQorCQkJCQl7CisJCQkJCQlmb3JlYWNoKGNlbGws IHdsaXN0KQorCQkJCQkJeworCQkJCQkJCWNoYXIgICAqdG5hbWU7CisJCQkJCQkJaW50CQl0b2lk OworCisJCQkJCQkJdG5hbWUgPSAoY2hhciAqKSBsZmlyc3QoY2VsbCk7CisJCQkJCQkJdG9pZCA9 CisJCQkJCQkJCXBvb2xfdGFibGVfbmFtZV90b19vaWQodG5hbWUpOworCisJCQkJCQkJaWYgKHRv aWQgPiAwKQorCQkJCQkJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVfd3Jp dHRlbigKKwkJCQkJCQkJCXRvaWQsIGRib2lkKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwog CQkJCXNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24gPSBmYWxzZTsKIAogCQkJCWlm IChzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCAhPSBOSUwpCkBA IC0yMDEwLDYgKzIwNjUsMjAgQEAgd2hlcmVfdG9fc2VuZF9tYWluX3JlcGxpY2EoUE9PTF9RVUVS WV9DT05URVhUICpxdWVyeV9jb250ZXh0LCBjaGFyICpxdWVyeSwgTm9kZQogCWlmIChkZXN0ID09 IFBPT0xfUFJJTUFSWSkKIAl7CiAJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250 ZXh0LCBQUklNQVJZX05PREVfSUQpOworCisJCS8qCisJCSAqIFJlc29sdmUgdGFibGUgYW5kIGRh dGFiYXNlIE9JRHMgbm93IHRvIHBvcHVsYXRlIHJlbGNhY2hlLgorCQkgKiBUaGlzIGF2b2lkcyBw b3RlbnRpYWwgaGFuZ3MgaW4gQ29tbWFuZENvbXBsZXRlIHdoZXJlIHdlIHNob3VsZG4ndAorCQkg KiBiZSBydW5uaW5nIG5ldyBxdWVyaWVzIGFnYWluc3QgdGhlIGJhY2tlbmQuCisJCSAqLworCQlp ZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCQlETEJP V19ETUxfQURBUFRJVkVfR0xPQkFMKQorCQl7CisJCQlpbnQgKm9pZHM7CisKKwkJCXBvb2xfZXh0 cmFjdF90YWJsZV9vaWRzKG5vZGUsICZvaWRzKTsKKwkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRp b25fZ2V0X2RhdGFiYXNlX29pZCgpOworCQl9CiAJfQogCS8qIFNob3VsZCBiZSBzZW50IHRvIGJv dGggcHJpbWFyeSBhbmQgc3RhbmRieT8gKi8KIAllbHNlIGlmIChkZXN0ID09IFBPT0xfQk9USCkK QEAgLTIxMzksNiArMjIwOCwxNTQgQEAgd2hlcmVfdG9fc2VuZF9tYWluX3JlcGxpY2EoUE9PTF9R VUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0LCBjaGFyICpxdWVyeSwgTm9kZQogCQkJCXsKIAkJ CQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9J RCk7CiAJCQkJfQorCQkJCS8qCisJCQkJICogQ2hlY2sgdHJhY2sgdGFibGUgbXV0YXRpb24gZm9y IHJlY2VudGx5CisJCQkJICogd3JpdHRlbiB0YWJsZXMuICBJZiBpbiBjb2xkIHN0YXJ0IG9yIGFu eQorCQkJCSAqIHRhYmxlIHdhcyByZWNlbnRseSB3cml0dGVuLCByb3V0ZSB0bworCQkJCSAqIHBy aW1hcnkgdG8gYXZvaWQgc3RhbGUgcmVhZHMuCisJCQkJICovCisJCQkJZWxzZSBpZiAocG9vbF9j b25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCQkJCQkgRExCT1dfRE1M X0FEQVBUSVZFX0dMT0JBTCkKKwkJCQl7CisJCQkJCWJvb2wJZm9yY2VfcHJpbWFyeSA9IGZhbHNl OworCQkJCQlpbnQJCWxiX25vZGU7CisJCQkJCVBPT0xfUVVFUllfQ09OVEVYVCAqcWN0eCA9CisJ CQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2NvbnRleHQ7CisKKwkJCQkJaWYgKHBvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb25faW5fY29sZF9zdGFydCgpKQorCQkJCQl7CisJCQkJCQllcmVwb3J0 KERFQlVHMSwKKwkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIgorCQkJCQkJ CQkiIGJlY2F1c2Ugb2YgdHJhY2sgdGFibGUiCisJCQkJCQkJCSIgbXV0YXRpb24gY29sZCBzdGFy dCIpLAorCQkJCQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9uID0gUFJJTUFSWSIKKwkJCQkJCQkJ IiBmb3IgcXVlcnk9IFwiJXNcIiIsCisJCQkJCQkJCXF1ZXJ5KSkpOworCQkJCQkJZm9yY2VfcHJp bWFyeSA9IHRydWU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlTZWxlY3RDb250 ZXh0IGN0eDsKKwkJCQkJCWludAkJZGJvaWQ7CisJCQkJCQlpbnQJCW51bV9vaWRzOworCQkJCQkJ aW50CQlpOworCisJCQkJCQltZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOworCQkJCQkJbnVt X29pZHMgPQorCQkJCQkJCXBvb2xfZXh0cmFjdF90YWJsZV9vaWRzX2Zyb21fc2VsZWN0X3N0bXQo CisJCQkJCQkJCW5vZGUsICZjdHgpOworCQkJCQkJaWYgKG51bV9vaWRzID4gMCkKKwkJCQkJCXsK KwkJCQkJCQlkYm9pZCA9CisJCQkJCQkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2Rh dGFiYXNlX29pZCgpOworCisJCQkJCQkJaWYgKGRib2lkIDw9IDApCisJCQkJCQkJeworCQkJCQkJ CQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBsb2FkIgorCQkJ CQkJCQkJCSIgYmFsYW5jZSBiZWNhdXNlIgorCQkJCQkJCQkJCSIgZGF0YWJhc2Ugb2lkIHdhcyIK KwkJCQkJCQkJCQkiIHVuYXZhaWxhYmxlIiksCisJCQkJCQkJCQkgZXJyZGV0YWlsKCJkZXN0aW5h dGlvbiIKKwkJCQkJCQkJCQkiID0gUFJJTUFSWSBmb3IiCisJCQkJCQkJCQkJIiBxdWVyeT0gXCIl c1wiIiwKKwkJCQkJCQkJCQlxdWVyeSkpKTsKKwkJCQkJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7 CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCWZvciAoaSA9IDA7IGkg PCBudW1fb2lkczsgaSsrKQorCQkJCQkJCQl7CisJCQkJCQkJCQlib29sIHN0YWxlOworCisJCQkJ CQkJCQlzdGFsZSA9CisJCQkJCQkJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2lz X3N0YWxlKAorCQkJCQkJCQkJCWN0eC50YWJsZV9vaWRzW2ldLAorCQkJCQkJCQkJCWRib2lkKTsK KwkJCQkJCQkJCWlmIChzdGFsZSkKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQllcmVwb3J0KERFQlVH MSwKKwkJCQkJCQkJCQkJKGVycm1zZygiY291bGQgbm90IGxvYWQiCisJCQkJCQkJCQkJCQkiIGJh bGFuY2UgYmVjYXVzZSIKKwkJCQkJCQkJCQkJCSIgdGFibGUgXCIlc1wiIHdhcyIKKwkJCQkJCQkJ CQkJCSIgcmVjZW50bHkgd3JpdHRlbiIsCisJCQkJCQkJCQkJCQljdHgudGFibGVfbmFtZXNbaV0p LAorCQkJCQkJCQkJCQkgZXJyZGV0YWlsKCJkZXN0aW5hdGlvbiIKKwkJCQkJCQkJCQkJCSIgPSBQ UklNQVJZIGZvciIKKwkJCQkJCQkJCQkJCSIgcXVlcnk9IFwiJXNcIiIsCisJCQkJCQkJCQkJCQlx dWVyeSkpKTsKKwkJCQkJCQkJCQlmb3JjZV9wcmltYXJ5ID0gdHJ1ZTsKKwkJCQkJCQkJCQlicmVh azsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCisJ CQkJCWlmIChmb3JjZV9wcmltYXJ5KQorCQkJCQl7CisJCQkJCQlwb29sX3NldF9ub2RlX3RvX2Jl X3NlbnQoCisJCQkJCQkJcXVlcnlfY29udGV4dCwKKwkJCQkJCQlQUklNQVJZX05PREVfSUQpOwor CQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJaWYgKHBvb2xfY29uZmlnLT5zdGF0ZW1l bnRfbGV2ZWxfbG9hZF9iYWxhbmNlKQorCQkJCQkJeworCQkJCQkJCXNlc3Npb25fY29udGV4dC0+ bG9hZF9iYWxhbmNlX25vZGVfaWQgPQorCQkJCQkJCQlzZWxlY3RfbG9hZF9iYWxhbmNpbmdfbm9k ZSgpOworCQkJCQkJfQorCisJCQkJCQkvKgorCQkJCQkJICogSWYgcmVwbGljYXRpb24gZGVsYXkg aXMgdG9vIG11Y2gsCisJCQkJCQkgKiBhbmQgcHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkgaXMK KwkJCQkJCSAqIHRydWUgdGhlbiBlbGVjdCB0aGUgbG93ZXN0LWRlbGF5ZWQKKwkJCQkJCSAqIG5v ZGUsIG90aGVyd2lzZSBzZW5kIHRvIHByaW1hcnkuCisJCQkJCQkgKi8KKwkJCQkJCWxiX25vZGUg PQorCQkJCQkJCXNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQ7CisJCQkJCQlp ZiAoU1RSRUFNICYmCisJCQkJCQkJY2hlY2tfcmVwbGljYXRpb25fZGVsYXkobGJfbm9kZSkpCisJ CQkJCQl7CisJCQkJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCShlcnJtc2coImNvdWxkIG5v dCBsb2FkIgorCQkJCQkJCQkJIiBiYWxhbmNlIGJlY2F1c2Ugb2YiCisJCQkJCQkJCQkiIHRvbyBt dWNoIHJlcGxpY2F0aW9uIgorCQkJCQkJCQkJIiBkZWxheSIpLAorCQkJCQkJCQkgZXJyZGV0YWls KCJkZXN0aW5hdGlvbiIKKwkJCQkJCQkJCSIgPSAlZCBmb3IiCisJCQkJCQkJCQkiIHF1ZXJ5PSBc IiVzXCIiLAorCQkJCQkJCQkJZGVzdCwgcXVlcnkpKSk7CisKKwkJCQkJCQlpZiAocG9vbF9jb25m aWctPnByZWZlcl9sb3dlcl9kZWxheV9zdGFuZGJ5KQorCQkJCQkJCXsKKwkJCQkJCQkJbGJfbm9k ZSA9CisJCQkJCQkJCQlzZWxlY3RfbG9hZF9iYWxhbmNpbmdfbm9kZSgpOworCQkJCQkJCQlzZXNz aW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0KKwkJCQkJCQkJCWxiX25vZGU7CisJ CQkJCQkJCXFjdHgtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0KKwkJCQkJCQkJCWxiX25vZGU7CisJ CQkJCQkJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudCgKKwkJCQkJCQkJCXF1ZXJ5X2NvbnRleHQs CisJCQkJCQkJCQlsYl9ub2RlKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJ CQkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KAorCQkJCQkJCQkJcXVlcnlfY29udGV4dCwK KwkJCQkJCQkJCVBSSU1BUllfTk9ERV9JRCk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJZWxz ZQorCQkJCQkJeworCQkJCQkJCXFjdHgtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0KKwkJCQkJCQkJ c2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZDsKKwkJCQkJCQlwb29sX3NldF9u b2RlX3RvX2JlX3NlbnQoCisJCQkJCQkJCXF1ZXJ5X2NvbnRleHQsCisJCQkJCQkJCXFjdHgtPmxv YWRfYmFsYW5jZV9ub2RlX2lkKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KIAkJCQllbHNlCiAJ CQkJewogCQkJCQlpZiAocG9vbF9jb25maWctPnN0YXRlbWVudF9sZXZlbF9sb2FkX2JhbGFuY2Up CmRpZmYgLS1naXQgYS9zcmMvY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5jIGIvc3JjL2Nv bnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYwppbmRleCBkZWQ0MWM3ZmMuLjNlYmQ2OGUxMCAx MDA2NDQKLS0tIGEvc3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYworKysgYi9zcmMv Y29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5jCkBAIC01MzIsNyArNTMyLDcgQEAgZHVtcF9z ZW50X21lc3NhZ2UoY2hhciAqY2FsbGVyLCBQT09MX1NFTlRfTUVTU0FHRSAqbSkKIHN0YXRpYyB2 b2lkCiBkbWxfYWRhcHRpdmVfaW5pdCh2b2lkKQogewotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJs ZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFKQorCWlmIChETEJP V19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dy aXRlKSkKIAl7CiAJCXNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24gPSBmYWxzZTsK IAkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QgPSBOSUw7CkBA IC01NDIsNyArNTQyLDkgQEAgZG1sX2FkYXB0aXZlX2luaXQodm9pZCkKIHN0YXRpYyB2b2lkCiBk bWxfYWRhcHRpdmVfZGVzdHJveSh2b2lkKQogewotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9s b2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmIHNlc3Npb25fY29u dGV4dCkKKwlpZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKAorCQlwb29sX2NvbmZpZy0+ZGlzYWJs ZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpICYmCisJCXNlc3Npb25fY29udGV4dCkKIAl7CiAJCWlm IChzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCAhPSBOSUwpCiAJ CQlsaXN0X2ZyZWVfZGVlcChzZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVf bGlzdCk7CkBAIC03MzgsMTAgKzc0MCwxMyBAQCB2b2lkCiBwb29sX3NldF93cml0aW5nX3RyYW5z YWN0aW9uKHZvaWQpCiB7CiAJLyoKLQkgKiBJZiBkaXNhYmxlX3RyYW5zYWN0aW9uX29uX3dyaXRl IGlzICdvZmYnIG9yICdkbWxfYWRhcHRpdmUnLCB0aGVuIG5ldmVyCi0JICogdHVybiBvbiB3cml0 aW5nIHRyYW5zYWN0aW9uIGZsYWcuCisJICogSWYgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3Jp dGUgaXMgJ29mZicgb3IgJ2RtbF9hZGFwdGl2ZScgb3IKKwkgKiAnZG1sX2FkYXB0aXZlX2dsb2Jh bCcsIHRoZW4gbmV2ZXIgdHVybiBvbiB3cml0aW5nIHRyYW5zYWN0aW9uIGZsYWcuCiAJICovCi0J aWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19P RkYgJiYgcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9X X0RNTF9BREFQVElWRSkKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlICE9CisJCURMQk9XX09GRiAmJgorCQkhRExCT1dfSVNfRE1MX0FEQVBUSVZFKAorCQkJ cG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSkKIAl7CiAJCXBvb2xf Z2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSktPndyaXRpbmdfdHJhbnNhY3Rpb24gPSB0cnVlOwog CQllcmVwb3J0KERFQlVHNSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvb2wuaCBiL3NyYy9p bmNsdWRlL3Bvb2wuaAppbmRleCA2NTkwN2RjZjEuLjBlOTAxNjkxYSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcG9vbC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvb2wuaApAQCAtNDI0LDcgKzQyNCw3 IEBAIHR5cGVkZWYgZW51bQogI2RlZmluZSBNaW4oeCwgeSkJCSgoeCkgPCAoeSkgPyAoeCkgOiAo eSkpCiAKIAotI2RlZmluZSBNQVhfTlVNX1NFTUFQSE9SRVMJCTgKKyNkZWZpbmUgTUFYX05VTV9T RU1BUEhPUkVTCQkxMAogI2RlZmluZSBDT05OX0NPVU5URVJfU0VNCQkwCiAjZGVmaW5lIFJFUVVF U1RfSU5GT19TRU0JCTEKICNkZWZpbmUgUVVFUllfQ0FDSEVfU1RBVFNfU0VNCTIKQEAgLTQzNCw2 ICs0MzQsOCBAQCB0eXBlZGVmIGVudW0KICNkZWZpbmUgRk9MTE9XX1BSSU1BUllfU0VNCQk2CiAj ZGVmaW5lIE1BSU5fRVhJVF9IQU5ETEVSX1NFTQk3CS8qIHVzZWQgaW4gZXhpdF9oYW5kZXIgaW4g cGdwb29sIG1haW4KIAkJCQkJCQkJCSAqIHByb2Nlc3MgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVf TVVUQVRJT05fVEFCTEVfU0VNCTgKKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fUVVFUllf U0VNCTkKICNkZWZpbmUgTUFYX1JFUVVFU1RfUVVFVUVfU0laRQkxMAogCiAjZGVmaW5lIE1BWF9T RUNfV0FJVF9GT1JfQ0xVU1RFUl9UUkFOU0FDVElPTiAxMCAvKiB0aW1lIGluIHNlY29uZHMgdG8g a2VlcApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaCBiL3NyYy9pbmNsdWRl L3Bvb2xfY29uZmlnLmgKaW5kZXggOWEzOTdkMTY2Li5jMWU2ZWNjNmYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3Bvb2xfY29uZmlnLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcuaApA QCAtMTA1LDkgKzEwNSwxMyBAQCB0eXBlZGVmIGVudW0gRExCT1dfT1BUSU9OCiAJRExCT1dfVFJB TlNBQ1RJT04sCiAJRExCT1dfVFJBTlNfVFJBTlNBQ1RJT04sCiAJRExCT1dfQUxXQVlTLAotCURM Qk9XX0RNTF9BREFQVElWRQorCURMQk9XX0RNTF9BREFQVElWRSwKKwlETEJPV19ETUxfQURBUFRJ VkVfR0xPQkFMCiB9IERMQk9XX09QVElPTjsKIAorI2RlZmluZSBETEJPV19JU19ETUxfQURBUFRJ VkUob3B0KSBcCisJKChvcHQpID09IERMQk9XX0RNTF9BREFQVElWRSB8fCAob3B0KSA9PSBETEJP V19ETUxfQURBUFRJVkVfR0xPQkFMKQorCiB0eXBlZGVmIGVudW0gUkVMUVRBUkdFVF9PUFRJT04K IHsKIAlSRUxRVEFSR0VUX1BSSU1BUlkgPSAxLApAQCAtMzY1LDYgKzM2OSwyNCBAQCB0eXBlZGVm IHN0cnVjdAogCQkJCQkJCQkJICogcmVwbGljYXRpb24gY2hlY2sgKi8KIAljaGFyCSAgICpyZXBs aWNhdGlvbl9kZWxheV9zb3VyY2VfY21kOwkvKiBleHRlcm5hbCBjb21tYW5kIGZvciByZXBsaWNh dGlvbiBkZWxheSAqLwogCWludAkJCXJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0Owkv KiB0aW1lb3V0IGZvciBleHRlcm5hbCBjb21tYW5kIGluIHNlY29uZHMgKi8KKworCS8qIFRyYWNr IHRhYmxlIG11dGF0aW9uIGNvbmZpZ3VyYXRpb24gKi8KKwlkb3VibGUJCXRyYWNrX3RhYmxlX211 dGF0aW9uX3R0bF9mYWN0b3I7CS8qIFRUTCBtdWx0aXBsaWVyIGZvcgorCQkJCQkJCQkJCQkJICog cmVwbGljYXRpb24gZGVsYXkgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3Rh bGVuZXNzOwkvKiBtYXggc3RhbGVuZXNzCisJCQkJCQkJCQkJCQkJICogZHVyYXRpb24gbXMgKi8K KwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uOwkvKiBjb2xk IHN0YXJ0CisJCQkJCQkJCQkJCQkJCQkgKiBkdXJhdGlvbiBtcyAqLworCWludAkJCXRyYWNrX3Rh YmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM7CS8qIGhhc2ggYnVja2V0cyBmb3IKKwkJCQkJCQkJ CQkJCQkgKiB0YWJsZSBtYXAgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9z aXplOwkvKiBtYXggdGFibGUgbWFwCisJCQkJCQkJCQkJCQkgKiBlbnRyaWVzICovCisJaW50CQkJ dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfYnVja2V0czsJLyogaGFzaCBidWNrZXRzIGZvcgor CQkJCQkJCQkJCQkJCSAqIHF1ZXJ5IGNhY2hlICovCisJaW50CQkJdHJhY2tfdGFibGVfbXV0YXRp b25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZTsJLyogbWF4IHF1ZXJ5CisJCQkJCQkJCQkJCQkJCQkJ ICogY2FjaGUKKwkJCQkJCQkJCQkJCQkJCQkgKiBlbnRyaWVzICovCisKIAljaGFyCSAgICpmYWls b3Zlcl9jb21tYW5kOwkvKiBleGVjdXRlIGNvbW1hbmQgd2hlbiBmYWlsb3ZlciBoYXBwZW5zICov CiAJY2hhcgkgICAqZm9sbG93X3ByaW1hcnlfY29tbWFuZDsgLyogZXhlY3V0ZSBjb21tYW5kIHdo ZW4gZmFpbG92ZXIgaXMKIAkJCQkJCQkJCQkgKiBlbmRlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oIGIvc3JjL2luY2x1ZGUvdXRp bHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMC4uYjBkZTJkODA5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oCkBAIC0wLDAgKzEsMjQ1IEBACisvKiAtKi1w Z3NxbC1jLSotICovCisvKgorICogcGdwb29sOiBhIGxhbmd1YWdlIGluZGVwZW5kZW50IGNvbm5l Y3Rpb24gcG9vbCBzZXJ2ZXIgZm9yIFBvc3RncmVTUUwKKyAqIHdyaXR0ZW4gYnkgVGF0c3VvIElz aGlpCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMjYJUGdQb29sIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBk aXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55 IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorICogZ3JhbnRlZCwgcHJvdmlkZWQg dGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCisgKiBjb3BpZXMg YW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbgor ICogbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRo ZSBuYW1lIG9mIHRoZQorICogYXV0aG9yIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1 YmxpY2l0eSBwZXJ0YWluaW5nIHRvCisgKiBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdp dGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uIFRoZSBhdXRob3Ig bWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZQorICogc3VpdGFiaWxpdHkgb2YgdGhp cyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3 aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uLmg6IEluLW1lbW9yeSB0cmFja2luZyBvZgorICogICByZWNlbnRseSB3cml0 dGVuIHRhYmxlcyB0byBwcmV2ZW50IHN0YWxlIHJlYWRzLgorICovCisKKyNpZm5kZWYgUE9PTF9U UkFDS19UQUJMRV9NVVRBVElPTl9ICisjZGVmaW5lIFBPT0xfVFJBQ0tfVEFCTEVfTVVUQVRJT05f SAorCisjaW5jbHVkZSAicG9vbC5oIgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKy8qCisgKiBN YXhpbXVtIHRhYmxlIG5hbWUgbGVuZ3RoIGluY2x1ZGluZyBzY2hlbWE6ICJzY2hlbWEiLiJ0YWJs ZSIKKyAqIFVzaW5nIE5BTUVEQVRBTEVOICogMiArIDQgZm9yIHF1b3RlcyBhbmQgZG90CisgKi8K KyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfTkFNRV9MRU4JKE5BTUVEQVRBTEVO ICogMiArIDQpCisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiB0YWJsZXMgd2UgdHJhY2sgcGVy IHF1ZXJ5CisgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fTUFYX1RBQkxFU19QRVJf UVVFUlkJOAorCisvKgorICogSW52YWxpZCBpbmRleCBtYXJrZXIgZm9yIGxpbmtlZCBsaXN0cwor ICovCisjZGVmaW5lIFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgJKC0xKQorCisv KgorICogRGVmYXVsdCBUVEwgaW4gbWljcm9zZWNvbmRzICgxMDBtcykgdXNlZCB3aGVuIHJlcGxp Y2F0aW9uIGRlbGF5IGlzIHVua25vd24KKyAqLworI2RlZmluZSBUUkFDS19UQUJMRV9NVVRBVElP Tl9ERUZBVUxUX1RUTF9VUwkoMTAwICogMTAwMCkKKworLyoKKyAqIEVudHJ5IGluIHRoZSB0YWJs ZSBtdXRhdGlvbiBoYXNoIHRhYmxlIChrZXllZCBieSB0YWJsZS9kYXRhYmFzZSBvaWRzKQorICov Cit0eXBlZGVmIHN0cnVjdCBUcmFja1RhYmxlTXV0YXRpb25FbnRyeQoreworCWludAkJCXRhYmxl X29pZDsJCQkJLyogVGFibGUgb2lkICovCisJaW50CQkJZGJvaWQ7CQkJCQkvKiBEYXRhYmFzZSBv aWQgKi8KKwlzdHJ1Y3QgdGltZXZhbCBmaXJzdF93cml0ZV90aW1lOwkvKiBXaGVuIHRoZSBlbnRy eSB3YXMgZmlyc3QgY3JlYXRlZCAqLworCXN0cnVjdCB0aW1ldmFsIGxhc3Rfd3JpdGVfdGltZTsJ CS8qIFdoZW4gdGhlIHRhYmxlIHdhcyBsYXN0IHdyaXR0ZW4gKi8KKwl1aW50MzIJCWhhc2g7CQkJ CQkvKiBQcmUtY29tcHV0ZWQgaGFzaCB2YWx1ZSAqLworCWludAkJCW5leHQ7CQkJCS8qIE5leHQg aW4gY29sbGlzaW9uIGNoYWluICovCisJYm9vbAkJaW5fdXNlOwkJCQkJLyogSXMgdGhpcyBlbnRy eSBpbiB1c2U/ICovCit9IFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5OworCisvKgorICogSGVhZGVy IGZvciB0aGUgdGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSBpbiBzaGFyZWQgbWVtb3J5CisgKi8K K3R5cGVkZWYgc3RydWN0IFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZQoreworCWludAkJCW51 bV9idWNrZXRzOwkJLyogTnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLworCWludAkJCW1heF9lbnRy aWVzOwkJLyogTWF4aW11bSBlbnRyaWVzIGFsbG93ZWQgKi8KKwlpbnQJCQludW1fZW50cmllczsJ CS8qIEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgKi8KKwlpbnQJCQlmcmVlX2xpc3RfaGVhZDsJ CS8qIEhlYWQgb2YgZnJlZSBlbnRyeSBsaXN0ICovCisJLyogRmxleGlibGUgYXJyYXkgbWVtYmVy cyBmb2xsb3cgaW4gc2hhcmVkIG1lbW9yeToKKwkgKiBpbnQgYnVja2V0c1tudW1fYnVja2V0c107 CisJICogVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgZW50cmllc1ttYXhfZW50cmllc107CisJICov Cit9IFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZTsKKworLyoKKyAqIEVudHJ5IGluIHRoZSBx dWVyeSBwYXJzZSBjYWNoZQorICovCit0eXBlZGVmIHN0cnVjdCBRdWVyeVBhcnNlRW50cnkKK3sK Kwl1aW50NjQJCXF1ZXJ5X2hhc2g7CQkJLyogSGFzaCBvZiBub3JtYWxpemVkIHF1ZXJ5ICovCisJ Ym9vbAkJaXNfd3JpdGU7CQkJLyogVHJ1ZSBpZiBJTlNFUlQvVVBEQVRFL0RFTEVURSAqLworCWlu dAkJCW51bV90YWJsZXM7CQkJLyogTnVtYmVyIG9mIHRhYmxlcyBpbiBxdWVyeSAqLworCWNoYXIJ CXRhYmxlX25hbWVzCisJCQkJW1RSQUNLX1RBQkxFX01VVEFUSU9OX01BWF9UQUJMRVNfUEVSX1FV RVJZXQorCQkJCVtUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJMRV9OQU1FX0xFTl07CisJaW50CQkJ bmV4dDsJCQkJLyogTmV4dCBlbnRyeSBpbiBjb2xsaXNpb24gY2hhaW4gKi8KKwlpbnQJCQlscnVf cHJldjsJCQkvKiBQcmV2aW91cyBpbiBMUlUgbGlzdCAqLworCWludAkJCWxydV9uZXh0OwkJCS8q IE5leHQgaW4gTFJVIGxpc3QgKi8KKwlib29sCQlpbl91c2U7CQkJCS8qIElzIHRoaXMgZW50cnkg aW4gdXNlPyAqLworfSBRdWVyeVBhcnNlRW50cnk7CisKKy8qCisgKiBIZWFkZXIgZm9yIHRoZSBx dWVyeSBwYXJzZSBjYWNoZSBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK3R5cGVkZWYgc3RydWN0IFF1 ZXJ5UGFyc2VDYWNoZQoreworCWludAkJCW51bV9idWNrZXRzOwkJLyogTnVtYmVyIG9mIGhhc2gg YnVja2V0cyAqLworCWludAkJCW1heF9lbnRyaWVzOwkJLyogTWF4aW11bSBlbnRyaWVzIGFsbG93 ZWQgKi8KKwlpbnQJCQludW1fZW50cmllczsJCS8qIEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMg Ki8KKwlpbnQJCQlmcmVlX2xpc3RfaGVhZDsJCS8qIEhlYWQgb2YgZnJlZSBlbnRyeSBsaXN0ICov CisJaW50CQkJbHJ1X2hlYWQ7CQkJLyogTW9zdCByZWNlbnRseSB1c2VkICovCisJaW50CQkJbHJ1 X3RhaWw7CQkJLyogTGVhc3QgcmVjZW50bHkgdXNlZCAqLworCS8qIEZsZXhpYmxlIGFycmF5IG1l bWJlcnMgZm9sbG93IGluIHNoYXJlZCBtZW1vcnk6CisJICogaW50IGJ1Y2tldHNbbnVtX2J1Y2tl dHNdOworCSAqIFF1ZXJ5UGFyc2VFbnRyeSBlbnRyaWVzW21heF9lbnRyaWVzXTsKKwkgKi8KK30g UXVlcnlQYXJzZUNhY2hlOworCisvKgorICogR2xvYmFsIHN0YXRlIGZvciB0cmFjayB0YWJsZSBt dXRhdGlvbiBmZWF0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0IFRyYWNrVGFibGVNdXRhdGlvblN0 YXRlCit7CisJYm9vbAkJaW5pdGlhbGl6ZWQ7CQkvKiBTaG1lbSBpbml0aWFsaXplZD8gKi8KKwl1 aW50NjQJCWN1cnJlbnRfdHRsX3VzOwkJCS8qIEN1cnJlbnQgVFRMIGluIG1pY3Jvc2Vjb25kcyAq LworCXN0cnVjdCB0aW1ldmFsIHR0bF9sYXN0X3VwZGF0ZWQ7CS8qIFdoZW4gVFRMIHdhcyBsYXN0 IHVwZGF0ZWQgKi8KKwlzdHJ1Y3QgdGltZXZhbCBsYXN0X2NsZWFudXBfdGltZTsJLyogV2hlbiBs YXN0IGV4cGlyZWQgY2xlYW51cCByYW4gKi8KKwlzdHJ1Y3QgdGltZXZhbCBnbG9iYWxfY29sZF9z dGFydF91bnRpbDsJLyogR2xvYmFsIGNvbGQgc3RhcnQgZW5kIHRpbWUgKi8KKwl1aW50MzIJCXN0 YXRzX3F1ZXJpZXNfY2hlY2tlZDsJLyogUXVlcmllcyBjaGVja2VkICovCisJdWludDMyCQlzdGF0 c19mb3JjZWRfcHJpbWFyeTsJLyogRm9yY2VkIHRvIHByaW1hcnkgKi8KKwl1aW50MzIJCXN0YXRz X2FsbG93ZWRfcmVwbGljYTsJLyogQWxsb3dlZCB0byByZXBsaWNhICovCit9IFRyYWNrVGFibGVN dXRhdGlvblN0YXRlOworCisvKgorICogTWFpbiBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBjb250 YWluaW5nIGFsbCBjb21wb25lbnRzCisgKi8KK3R5cGVkZWYgc3RydWN0IFRyYWNrVGFibGVNdXRh dGlvblNobWVtCit7CisJVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUJc3RhdGU7CisJVHJhY2tUYWJs ZU11dGF0aW9uSGFzaFRhYmxlCSp0YWJsZV9tYXA7CisJUXVlcnlQYXJzZUNhY2hlCQkqcXVlcnlf Y2FjaGU7Cit9IFRyYWNrVGFibGVNdXRhdGlvblNobWVtOworCisvKiAtLS0tLS0tLS0tLS0tLS0t CisgKiBQdWJsaWMgQVBJIGZ1bmN0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8q CisgKiBJbml0aWFsaXplIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcyBmb3IgdHJhY2sgdGFibGUg bXV0YXRpb24uCisgKiBDYWxsZWQgZnJvbSBwZ3Bvb2xfbWFpbi5jIGFmdGVyIHBvb2xfaW5pdF9w b29sX2luZm8oKS4KKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9p bml0KHZvaWQpOworCisvKgorICogSW5pdGlhbGl6ZSBwZXItY2hpbGQgcHJvY2VzcyBzdGF0ZSBm b3IgdHJhY2sgdGFibGUgbXV0YXRpb24uCisgKiBDYWxsZWQgZnJvbSBjaGlsZC5jIHdoZW4gYSBu ZXcgY2hpbGQgcHJvY2VzcyBzdGFydHMuCisgKiBTZXRzIHVwIGNvbGQgc3RhcnQgdHJhY2tpbmcu CisgKi8KK2V4dGVybiB2b2lkIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fY2hpbGRfaW5pdCh2 b2lkKTsKKworLyoKKyAqIENoZWNrIGlmIHRoZSBjaGlsZCBwcm9jZXNzIGlzIGluIGNvbGQgc3Rh cnQgcGVyaW9kLgorICogRHVyaW5nIGNvbGQgc3RhcnQsIGFsbCBxdWVyaWVzIGFyZSByb3V0ZWQg dG8gcHJpbWFyeS4KKyAqIFJldHVybnMgdHJ1ZSBpZiBpbiBjb2xkIHN0YXJ0LCBmYWxzZSBvdGhl cndpc2UuCisgKi8KK2V4dGVybiBib29sIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25faW5fY29s ZF9zdGFydCh2b2lkKTsKKworLyoKKyAqIFRyaWdnZXIgYSBnbG9iYWwgY29sZCBzdGFydCBwZXJp b2QgZm9yIGFsbCBwcm9jZXNzZXMuCisgKiBVc2VkIGFmdGVyIHdhdGNoZG9nIGxlYWRlciBjaGFu Z2UgdG8gYXZvaWQgc3RhbGUgcmVhZHMuCisgKi8KK2V4dGVybiB2b2lkIHBvb2xfdHJhY2tfdGFi bGVfbXV0YXRpb25fdHJpZ2dlcl9nbG9iYWxfY29sZF9zdGFydCh2b2lkKTsKKworLyoKKyAqIEdl dCBvaWQgb2YgY3VycmVudCBkYXRhYmFzZS4KKyAqLworZXh0ZXJuIGludCBwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWQodm9pZCk7CisKKy8qCisgKiBDaGVjayBpZiBh IHRhYmxlIHdhcyByZWNlbnRseSB3cml0dGVuIHRvIChpcyAic3RhbGUiKS4KKyAqIElmIHN0YWxl LCByZWFkcyBmcm9tIHRoaXMgdGFibGUgc2hvdWxkIGdvIHRvIHByaW1hcnkuCisgKiBSZXR1cm5z IHRydWUgaWYgdGFibGUgaXMgc3RhbGUgKHJlY2VudGx5IHdyaXR0ZW4pLCBmYWxzZSBvdGhlcndp c2UuCisgKi8KK2V4dGVybiBib29sIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfaXNf c3RhbGUoCisJaW50IHRhYmxlX29pZCwgaW50IGRib2lkKTsKKworLyoKKyAqIE1hcmsgdGFibGVz IGFzIHJlY2VudGx5IHdyaXR0ZW4uCisgKiBDYWxsZWQgYWZ0ZXIgSU5TRVJUL1VQREFURS9ERUxF VEUgcXVlcmllcyBjb21wbGV0ZS4KKyAqIHRhYmxlX29pZHM6IGFycmF5IG9mIHRhYmxlIG9pZHMK KyAqIG51bV90YWJsZXM6IG51bWJlciBvZiB0YWJsZXMgaW4gYXJyYXkKKyAqIGRib2lkOiBkYXRh YmFzZSBvaWQKKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJr X3RhYmxlc193cml0dGVuKAorCWNvbnN0IGludCAqdGFibGVfb2lkcywgaW50IG51bV90YWJsZXMs IGludCBkYm9pZCk7CisKKy8qCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBtYXJrIGEgc2lu Z2xlIHRhYmxlIGFzIHdyaXR0ZW4uCisgKiB0YWJsZV9vaWQ6IHRhYmxlIG9pZAorICogZGJvaWQ6 IGRhdGFiYXNlIG9pZAorICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9u X21hcmtfdGFibGVfd3JpdHRlbigKKwlpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQpOworCisvKgor ICogVXBkYXRlIHRoZSBUVEwgYmFzZWQgb24gY3VycmVudCByZXBsaWNhdGlvbiBkZWxheS4KKyAq IENhbGxlZCBmcm9tIHBvb2xfd29ya2VyX2NoaWxkLmMgd2hlbiByZXBsaWNhdGlvbiBkZWxheSBp cyB1cGRhdGVkLgorICogZGVsYXlfdXM6IHJlcGxpY2F0aW9uIGRlbGF5IGluIG1pY3Jvc2Vjb25k cworICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3VwZGF0ZV90dGwo dWludDY0IGRlbGF5X3VzKTsKKworLyoKKyAqIExvb2sgdXAgY2FjaGVkIHBhcnNlIHJlc3VsdCBm b3IgYSBxdWVyeS4KKyAqIGhhc2g6IGhhc2ggb2Ygbm9ybWFsaXplZCBxdWVyeQorICogaXNfd3Jp dGU6IG91dHB1dCAtIHRydWUgaWYgcXVlcnkgaXMgYSB3cml0ZQorICogdGFibGVfbmFtZXM6IG91 dHB1dCAtIGFycmF5IHRvIGZpbGwgd2l0aCB0YWJsZSBuYW1lcworICogbnVtX3RhYmxlczogb3V0 cHV0IC0gbnVtYmVyIG9mIHRhYmxlcyBmb3VuZAorICogUmV0dXJucyB0cnVlIGlmIGZvdW5kIGlu IGNhY2hlLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2V4dGVybiBib29sIHBvb2xfdHJhY2tfdGFi bGVfbXV0YXRpb25fZ2V0X2NhY2hlZF9wYXJzZSgKKwl1aW50NjQgaGFzaCwgYm9vbCAqaXNfd3Jp dGUsCisJY2hhciB0YWJsZV9uYW1lc1tdW1RSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX05BTUVf TEVOXSwKKwlpbnQgKm51bV90YWJsZXMpOworCisvKgorICogQ2FjaGUgYSBwYXJzZSByZXN1bHQg Zm9yIGEgcXVlcnkuCisgKiBoYXNoOiBoYXNoIG9mIG5vcm1hbGl6ZWQgcXVlcnkKKyAqIGlzX3dy aXRlOiB0cnVlIGlmIHF1ZXJ5IGlzIGEgd3JpdGUKKyAqIHRhYmxlX25hbWVzOiBhcnJheSBvZiB0 YWJsZSBuYW1lcworICogbnVtX3RhYmxlczogbnVtYmVyIG9mIHRhYmxlcworICovCitleHRlcm4g dm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2NhY2hlX3BhcnNlKAorCXVpbnQ2NCBoYXNo LCBib29sIGlzX3dyaXRlLAorCWNvbnN0IGNoYXIgdGFibGVfbmFtZXNbXVtUUkFDS19UQUJMRV9N VVRBVElPTl9UQUJMRV9OQU1FX0xFTl0sCisJaW50IG51bV90YWJsZXMpOworCisvKgorICogTm9y bWFsaXplIGEgcXVlcnkgYW5kIGNvbXB1dGUgaXRzIGhhc2guCisgKiBTdHJpcHMgY29tbWVudHMs IG5vcm1hbGl6ZXMgd2hpdGVzcGFjZSBhbmQgbGl0ZXJhbHMuCisgKiBxdWVyeTogaW5wdXQgU1FM IHF1ZXJ5IHN0cmluZworICogUmV0dXJuczogNjQtYml0IGhhc2ggb2Ygbm9ybWFsaXplZCBxdWVy eQorICovCitleHRlcm4gdWludDY0IHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbm9ybWFsaXpl X2FuZF9oYXNoKGNvbnN0IGNoYXIgKnF1ZXJ5KTsKKworLyoKKyAqIENhbGN1bGF0ZSByZXF1aXJl ZCBzaGFyZWQgbWVtb3J5IHNpemUgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uLgorICovCitleHRl cm4gU2l6ZSBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUodm9pZCk7CisKKyNl bmRpZiAvKiBQT09MX1RSQUNLX1RBQkxFX01VVEFUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9t YWluL3BncG9vbF9tYWluLmMgYi9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jCmluZGV4IGJmN2M0NTJl Mi4uZDRlMjc0ZjAyIDEwMDY0NAotLS0gYS9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jCisrKyBiL3Ny Yy9tYWluL3BncG9vbF9tYWluLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJhdXRoL3Bv b2xfcGFzc3dkLmgiCiAjaW5jbHVkZSAiYXV0aC9wb29sX2hiYS5oIgogI2luY2x1ZGUgInF1ZXJ5 X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbi5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dkX2ludGVybmFsX2NvbW1hbmRzLmgi CiAjaW5jbHVkZSAid2F0Y2hkb2cvd2RfbGlmZWNoZWNrLmgiCiAjaW5jbHVkZSAid2F0Y2hkb2cv d2F0Y2hkb2cuaCIKQEAgLTE1MDAsMTEgKzE1MDEsMTQgQEAgc2lndXNyMV9pbnRlcnJ1cHRfcHJv Y2Vzc29yKHZvaWQpCiAKIAlpZiAodXNlcjFTaWduYWxTbG90LT5zaWduYWxGbGFnc1tTSUdfV0FU Q0hET0dfU1RBVEVfQ0hBTkdFRF0pCiAJeworCQlXRF9TVEFURVMJd2Rfc3RhdGU7CisKIAkJZXJl cG9ydChMT0csCiAJCQkJKGVycm1zZygiUGdwb29sLUlJIHBhcmVudCBwcm9jZXNzIHJlY2VpdmVk IHdhdGNoZG9nIHN0YXRlIGNoYW5nZSBzaWduYWwgZnJvbSB3YXRjaGRvZyIpKSk7CiAKIAkJdXNl cjFTaWduYWxTbG90LT5zaWduYWxGbGFnc1tTSUdfV0FUQ0hET0dfU1RBVEVfQ0hBTkdFRF0gPSBm YWxzZTsKLQkJaWYgKHdkX2ludGVybmFsX2dldF93YXRjaGRvZ19sb2NhbF9ub2RlX3N0YXRlKCkg PT0gV0RfU1RBTkRCWSkKKwkJd2Rfc3RhdGUgPSB3ZF9pbnRlcm5hbF9nZXRfd2F0Y2hkb2dfbG9j YWxfbm9kZV9zdGF0ZSgpOworCQlpZiAod2Rfc3RhdGUgPT0gV0RfU1RBTkRCWSkKIAkJewogCQkJ ZXJlcG9ydChMT0csCiAJCQkJCShlcnJtc2coIndlIGhhdmUgam9pbmVkIHRoZSB3YXRjaGRvZyBj bHVzdGVyIGFzIFNUQU5EQlkgbm9kZSIpLApAQCAtMTUxOCw2ICsxNTIyLDEyIEBAIHNpZ3VzcjFf aW50ZXJydXB0X3Byb2Nlc3Nvcih2b2lkKQogCQkJICovCiAJCQlwb29sX3JlbGVhc2VfZm9sbG93 X3ByaW1hcnlfbG9jayh0cnVlKTsKIAkJfQorCQllbHNlIGlmICh3ZF9zdGF0ZSA9PSBXRF9DT09S RElOQVRPUiAmJgorCQkJCSBwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3Jp dGUgPT0KKwkJCQkgRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwkJeworCQkJcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl90cmlnZ2VyX2dsb2JhbF9jb2xkX3N0YXJ0KCk7CisJCX0KIAl9CiAJ aWYgKHVzZXIxU2lnbmFsU2xvdC0+c2lnbmFsRmxhZ3NbU0lHX0ZBSUxPVkVSX0lOVEVSUlVQVF0p CiAJewpAQCAtMzA4Myw2ICszMDkzLDE2IEBAIGluaXRpYWxpemVfc2hhcmVkX21lbV9vYmplY3Rz KGJvb2wgY2xlYXJfbWVtY2FjaGVfb2lkbWFwcykKIAkJZWxvZyhERUJVRzEsICJ3YXRjaGRvZzog JXp1IGJ5dGVzIHJlcXVlc3RlZCBmb3Igc2hhcmVkIG1lbW9yeSIsIE1BWEFMSUdOKHdkX2lwY19n ZXRfc2hhcmVkX21lbV9zaXplKCkpKTsKIAl9CiAKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJ eworCQlzaXplICs9IE1BWEFMSUdOKHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6 ZSgpKTsKKwkJZWxvZyhERUJVRzEsCisJCQkgInRyYWNrX3RhYmxlX211dGF0aW9uOiAlenUgYnl0 ZXMgcmVxdWVzdGVkIgorCQkJICIgZm9yIHNoYXJlZCBtZW1vcnkiLAorCQkJIE1BWEFMSUdOKHBv b2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSgpKSk7CisJfQorCiAJaW5pdGlhbGl6 ZV9zaGFyZWRfbWVtb3J5X21haW5fc2VnbWVudChzaXplKTsKIAogCS8qIE1vdmUgdGhlIGJhY2tl bmQgZGVzY3JpcHRvcnMgdG8gc2hhcmVkIG1lbW9yeSAqLwpAQCAtMzE5OSw2ICszMjE5LDEzIEBA IGluaXRpYWxpemVfc2hhcmVkX21lbV9vYmplY3RzKGJvb2wgY2xlYXJfbWVtY2FjaGVfb2lkbWFw cykKIAkJd2RfaXBjX2luaXRpYWxpemVfZGF0YSgpOwogCX0KIAorCS8qIEluaXRpYWxpemUgdHJh Y2sgdGFibGUgbXV0YXRpb24gZm9yIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzICovCisJaWYgKHBv b2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PQorCQlETEJPV19ETUxf QURBUFRJVkVfR0xPQkFMKQorCXsKKwkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbml0KCk7 CisJfQorCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvQ29tbWFuZENvbXBsZXRl LmMgYi9zcmMvcHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMKaW5kZXggYTNiOGYwZWExLi5hNGVj ODNmOTMgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90b2NvbC9Db21tYW5kQ29tcGxldGUuYworKysgYi9z cmMvcHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMKQEAgLTM4LDYgKzM4LDggQEAKICNpbmNsdWRl ICJ1dGlscy9wYWxsb2MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUg InV0aWxzL3Bvb2xfc3RyZWFtLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9t dXRhdGlvbi5oIgorI2luY2x1ZGUgInF1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmgiCiAKIHN0 YXRpYyBpbnQJZXh0cmFjdF9udHVwbGVzKGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIFBPT0xfU1RB VFVTIGhhbmRsZV9taXNtYXRjaF90dXBsZXMoUE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwgUE9P TF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQsIGNoYXIgKnBhY2tldCwgaW50IHBhY2tldGxlbiwg Ym9vbCBjb21tYW5kX2NvbXBsZXRlKTsKQEAgLTMwNCw2ICszMDYsMzMgQEAgaGFuZGxlX3F1ZXJ5 X2NvbnRleHQoUE9PTF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQpCiAKIAlub2RlID0gc2Vzc2lv bl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5wYXJzZV90cmVlOwogCisJLyoKKwkgKiBUcmFjayB0 YWJsZSB3cml0ZXMgZm9yIGRtbF9hZGFwdGl2ZV9nbG9iYWwgZmVhdHVyZS4KKwkgKiBGb3IgYXV0 b2NvbW1pdCBzdGF0ZW1lbnRzIChub3QgaW4gZXhwbGljaXQgdHJhbnNhY3Rpb24pLCBtYXJrIHRh YmxlcworCSAqIGltbWVkaWF0ZWx5LiBGb3IgZXhwbGljaXQgdHJhbnNhY3Rpb25zLCBtYXJraW5n IGlzIGRlZmVycmVkIHRvIENPTU1JVAorCSAqIGluIGRtbF9hZGFwdGl2ZSgpIHNvIHRoYXQgUk9M TEJBQ0tlZCB3cml0ZXMgZG9uJ3QgcG9sbHV0ZSB0aGUgc2hhcmVkCisJICogbWVtb3J5IHRhYmxl IG1hcC4KKwkgKi8KKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dy aXRlID09CisJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgJiYKKwkJbm9kZSAhPSBOVUxMICYm CisJCSFzZXNzaW9uX2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uKQorCXsKKwkJaW50CQkgICAq b2lkczsKKwkJaW50CQkJbnVtX29pZHM7CisKKwkJbnVtX29pZHMgPSBwb29sX2V4dHJhY3RfdGFi bGVfb2lkcyhub2RlLCAmb2lkcyk7CisJCWlmIChudW1fb2lkcyA+IDApCisJCXsKKwkJCWludAkJ ZGJvaWQ7CisKKwkJCWRib2lkID0gcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJh c2Vfb2lkKCk7CisJCQlpZiAoZGJvaWQgPiAwKQorCQkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRp b25fbWFya190YWJsZXNfd3JpdHRlbigKKwkJCQkJb2lkcywgbnVtX29pZHMsIGRib2lkKTsKKwkJ fQorCX0KKwogCWlmIChJc0Eobm9kZSwgUHJlcGFyZVN0bXQpKQogCXsKIAkJaWYgKHNlc3Npb25f Y29udGV4dC0+dW5jb21wbGV0ZWRfbWVzc2FnZSkKZGlmZiAtLWdpdCBhL3NyYy9wcm90b2NvbC9j aGlsZC5jIGIvc3JjL3Byb3RvY29sL2NoaWxkLmMKaW5kZXggYzM0ZjA1NzI4Li4zMTZiNzYyMzkg MTAwNjQ0Ci0tLSBhL3NyYy9wcm90b2NvbC9jaGlsZC5jCisrKyBiL3NyYy9wcm90b2NvbC9jaGls ZC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAidXRpbHMvZWxvZy5oIgogI2luY2x1ZGUg InV0aWxzL3BzX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorI2luY2x1 ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCIKIAogI2luY2x1ZGUgImNvbnRl eHQvcG9vbF9wcm9jZXNzX2NvbnRleHQuaCIKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lv bl9jb250ZXh0LmgiCkBAIC0yMTMsNiArMjE0LDEzIEBAIGRvX2NoaWxkKGludCAqZmRzKQogCS8q IEluaXRpYWxpemUgcGVyIHByb2Nlc3MgY29udGV4dCAqLwogCXBvb2xfaW5pdF9wcm9jZXNzX2Nv bnRleHQoKTsKIAorCS8qIEluaXRpYWxpemUgdHJhY2sgdGFibGUgbXV0YXRpb24gY2hpbGQgc3Rh dGUgZm9yIGNvbGQgc3RhcnQgdHJhY2tpbmcgKi8KKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJ eworCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2NoaWxkX2luaXQoKTsKKwl9CisKIAkvKiBp bml0aWFsaXplIGNvbm5lY3Rpb24gcG9vbCAqLwogCWlmIChwb29sX2luaXRfY3AoKSkKIAl7CmRp ZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1bGVzLmMgYi9zcmMvcHJvdG9j b2wvcG9vbF9wcm90b19tb2R1bGVzLmMKaW5kZXggZjk0NThiYjU1Li43MDZhYmZmNWIgMTAwNjQ0 Ci0tLSBhL3NyYy9wcm90b2NvbC9wb29sX3Byb3RvX21vZHVsZXMuYworKysgYi9zcmMvcHJvdG9j b2wvcG9vbF9wcm90b19tb2R1bGVzLmMKQEAgLTE0NjEsNyArMTQ2MSw5IEBAIFBhcnNlKFBPT0xf Q09OTkVDVElPTiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpiYWNrZW5kLAogCQlw b29sX3doZXJlX3RvX3NlbmQocXVlcnlfY29udGV4dCwgcXVlcnlfY29udGV4dC0+b3JpZ2luYWxf cXVlcnksCiAJCQkJCQkgICBxdWVyeV9jb250ZXh0LT5wYXJzZV90cmVlKTsKIAotCQlpZiAocG9v bF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQ VElWRSAmJiBzdHJsZW4obmFtZSkgIT0gMCkKKwkJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRSgK KwkJCQlwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpCisJCQkmJiBz dHJsZW4obmFtZSkgIT0gMCkKIAkJCXBvb2xfc2V0YWxsX25vZGVfdG9fYmVfc2VudChxdWVyeV9j b250ZXh0KTsKIAogCQlpZiAoUkVQTElDQVRJT04pCkBAIC0xODA0LDcgKzE4MDYsNyBAQCBCaW5k KFBPT0xfQ09OTkVDVElPTiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpiYWNrZW5k LAogCQkJcmV0dXJuIFBPT0xfRU5EOwogCX0KIAotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9s b2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmCisJaWYgKERMQk9X X0lTX0RNTF9BREFQVElWRShwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3Jp dGUpICYmCiAJCVRTVEFURShiYWNrZW5kLCBNQUlOX1JFUExJQ0EgPyBQUklNQVJZX05PREVfSUQg OiBSRUFMX01BSU5fTk9ERV9JRCkgPT0gJ1QnKQogCXsKIAkJcG9vbF93aGVyZV90b19zZW5kKHF1 ZXJ5X2NvbnRleHQsIHF1ZXJ5X2NvbnRleHQtPm9yaWdpbmFsX3F1ZXJ5LApkaWZmIC0tZ2l0IGEv c3JjL3F1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmMgYi9zcmMvcXVlcnlfY2FjaGUvcG9vbF9t ZW1xY2FjaGUuYwppbmRleCBmMzhmNzExNDYuLmRjYTkzMzM0ZSAxMDA2NDQKLS0tIGEvc3JjL3F1 ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmMKKysrIGIvc3JjL3F1ZXJ5X2NhY2hlL3Bvb2xfbWVt cWNhY2hlLmMKQEAgLTEzMDUsNiArMTMwNSwxMiBAQCBwb29sX2V4dHJhY3RfdGFibGVfb2lkcyhO b2RlICpub2RlLCBpbnQgKipvaWRzcCkKIAkJfQogCQlyZXR1cm4gbnVtX29pZHM7CiAJfQorCWVs c2UgaWYgKElzQShub2RlLCBNZXJnZVN0bXQpKQorCXsKKwkJTWVyZ2VTdG10ICAqc3RtdCA9IChN ZXJnZVN0bXQgKikgbm9kZTsKKworCQl0YWJsZSA9IG1ha2VfdGFibGVfbmFtZV9mcm9tX3Jhbmdl dmFyKHN0bXQtPnJlbGF0aW9uKTsKKwl9CiAJZWxzZSBpZiAoSXNBKG5vZGUsIEV4cGxhaW5TdG10 KSkKIAl7CiAJCUxpc3RDZWxsICAgKmNlbGw7CmRpZmYgLS1naXQgYS9zcmMvc2FtcGxlL3BncG9v bC5jb25mLnNhbXBsZS1zdHJlYW0gYi9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBsZS1zdHJl YW0KaW5kZXggMWFjOTgyOTA3Li4wMDEzMmQ1MzQgMTAwNjQ0Ci0tLSBhL3NyYy9zYW1wbGUvcGdw b29sLmNvbmYuc2FtcGxlLXN0cmVhbQorKysgYi9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBs ZS1zdHJlYW0KQEAgLTQ3OCw2ICs0NzgsMTQgQEAgYmFja2VuZF9jbHVzdGVyaW5nX21vZGUgPSBz dHJlYW1pbmdfcmVwbGljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyAgICAgbW9kaWZpZWQgd2l0aGluIHRoZSBjdXJyZW50IGV4cGxpY2l0IHRyYW5zYWN0aW9uIHdp bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm90IGJlIGxvYWQg YmFsYW5jZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24uCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBkbWxfYWRhcHRpdmVfZ2xvYmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjICAgICBTdXBlcnNldCBvZiBkbWxfYWRhcHRpdmUuIEluIGFkZGl0aW9uIHRvIHBlci10 cmFuc2FjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICB0cmFj a2luZywgdXNlcyBzaGFyZWQgbWVtb3J5IHRvIHRyYWNrIHJlY2VudGx5IHdyaXR0ZW4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgdGFibGVzIGFjcm9zcyBhbGwgc2Vz c2lvbnMuIFJlYWRzIGZyb20gcmVjZW50bHkgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjICAgICB0YWJsZXMgYXJlIHJvdXRlZCB0byBwcmltYXJ5IHVudGlsIGEg VFRMIChiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBy ZXBsaWNhdGlvbiBkZWxheSkgZXhwaXJlcy4gUmVxdWlyZXMgYWRkaXRpb25hbCBzaGFyZWQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbWVtb3J5LiBTZWUgdHJhY2tf dGFibGVfbXV0YXRpb25fKiBwYXJhbWV0ZXJzIGJlbG93LgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWx3 YXlzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBpZiBhIHdyaXRl IHF1ZXJ5IGlzIGlzc3VlZCwgcmVhZCBxdWVyaWVzIHdpbGwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyAgICAgbm90IGJlIGxvYWQgYmFsYW5jZWQgdW50aWwgdGhlIHNlc3Np b24gZW5kcy4KQEAgLTQ5OSw2ICs1MDcsNTQgQEAgYmFja2VuZF9jbHVzdGVyaW5nX21vZGUgPSBz dHJlYW1pbmdfcmVwbGljYXRpb24KICNzdGF0ZW1lbnRfbGV2ZWxfbG9hZF9iYWxhbmNlID0gb2Zm CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRW5hYmxlcyBzdGF0ZW1lbnQg bGV2ZWwgbG9hZCBiYWxhbmNpbmcKIAorIyAtIFRyYWNrIFRhYmxlIE11dGF0aW9uICh1c2VkIGJ5 IGRtbF9hZGFwdGl2ZV9nbG9iYWwpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBXQVJOSU5HOiBkbWxfYWRhcHRpdmVfZ2xvYmFsIGluY3JlYXNlcyBzaGFyZWQgbWVtb3J5 IHVzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRGVmYXVsdCBzZXR0 aW5ncyByZXF1aXJlIH42LjQgTUIgc2hhcmVkIG1lbW9yeQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjICgwLjEgTUIgdGFibGUgdHJhY2tpbmcgKyA2LjMgTUIgcXVlcnkgY2Fj aGUpCisKKyN0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yID0gNS4wCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgVFRMIG11bHRpcGxpZXI6IFRUTCA9IHJlcGxpY2F0 aW9uX2RlbGF5ICogZmFjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg SGlnaGVyIHZhbHVlcyBwcm92aWRlIG1vcmUgc2FmZXR5IG1hcmdpbgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiAxLjAtMTAwLjAgKGRlZmF1bHQ6IDUuMCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlbG9h ZCkKKworI3RyYWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5lc3MgPSA2MDAwMAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heGltdW0gZHVyYXRpb24gKG1zKSBhIHRh YmxlIGNhbiBiZSBtYXJrZWQgc3RhbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBmcm9tIGl0cyBmaXJzdCB3cml0ZS4gQm91bmRzIGNyb3NzLXNlc3Npb24gaW1wYWN0Ogor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGV2ZW4gdW5kZXIgY29udGludW91 cyB3cml0ZXMsIHN0YWxlbmVzcyBleHBpcmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgYWZ0ZXIgdGhpcyBwZXJpb2QgYW5kIGlzIG9ubHkgcmVuZXdlZCBieSBuZXcgd3Jp dGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDAgZGlzYWJsZXMgdGhl IGNhcC4gUmFuZ2U6IDAtMzYwMDAwMCAoZGVmYXVsdDogNjAwMDAgPSA2MHMpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZWxvYWQpCisKKyN0 cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uID0gMjAwMAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byBy b3V0ZSBhbGwgcXVlcmllcyB0byBwcmltYXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgYWZ0ZXIgY2hpbGQgcHJvY2VzcyBzdGFydHMgKGNvbGQgc3RhcnQgcGVyaW9kKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiAwLTYwMDAwIG1zIChk ZWZhdWx0OiAyMDAwIG1zID0gMiBzZWNvbmRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIFNldCB0byAwIHRvIGRpc2FibGUgY29sZCBzdGFydCBiZWhhdmlvcgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVsb2FkKQor CisjdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyA9IDEwMjQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciB0cmFj ayB0YWJsZSBtdXRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhp Z2hlciB2YWx1ZXMgcmVkdWNlIGhhc2ggY29sbGlzaW9ucworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIFJhbmdlOiA2NC02NTUzNiAoZGVmYXVsdDogMTAyNCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCisK KyN0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplID0gMjA0OAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIE1heGltdW0gbnVtYmVyIG9mIHRhYmxlcyB0byB0cmFjayBz aW11bHRhbmVvdXNseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJhbmdl OiAxMjgtMTMxMDcyIChkZWZhdWx0OiAyMDQ4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKworI3RyYWNrX3RhYmxlX211dGF0 aW9uX3F1ZXJ5X2J1Y2tldHMgPSAyMDQ4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgcXVlcnkgcGFyc2UgY2FjaGUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogNjQtNjU1MzYgKGRlZmF1bHQ6 IDIwNDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1 aXJlcyByZXN0YXJ0KQorCisjdHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVf c2l6ZSA9IDEwMDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWF4aW11 bSBudW1iZXIgb2YgcXVlcnkgcGFyc2UgcmVzdWx0cyB0byBjYWNoZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiAxMDAtMTAwMDAwMCAoZGVmYXVsdDogMTAwMDAp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWVtb3J5IHVzYWdlOiB+NjQw IGJ5dGVzIHBlciBlbnRyeSAofjYuMyBNQiBkZWZhdWx0LCB+NjQgTUIgZm9yIDEwMDAwMCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3Rh cnQpCisKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgU1RSRUFNSU5HIFJFUExJQ0FUSU9OIE1P REUKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9zdHJlYW1pbmdfcmVw bGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYyBiL3NyYy9zdHJlYW1pbmdfcmVwbGljYXRpb24v cG9vbF93b3JrZXJfY2hpbGQuYwppbmRleCAzMTFiNjM4NjUuLjNhZDgwNmUzZSAxMDA2NDQKLS0t IGEvc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jCisrKyBiL3Ny Yy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYwpAQCAtNTgsNiArNTgs NyBAQAogI2luY2x1ZGUgInV0aWxzL3Bvb2xfaXAuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0 dXMuaCIKICNpbmNsdWRlICJ1dGlscy9wb29sX3N0cmVhbS5oIgorI2luY2x1ZGUgInV0aWxzL3Bv b2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCIKIAogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9wcm9j ZXNzX2NvbnRleHQuaCIKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0Lmgi CkBAIC00MTksNiArNDIwLDcgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWcodm9pZCkKIAlC YWNrZW5kSW5mbyAqYmtpbmZvOwogCXVpbnQ2NAkJbGFnOwogCXVpbnQ2NAkJZGVsYXlfdGhyZXNo b2xkX2J5X3RpbWU7CisJdWludDY0CQltYXhfZGVsYXlfdXMgPSAwOwogCUVycm9yQ29udGV4dENh bGxiYWNrIGNhbGxiYWNrOwogCWludAkJCWFjdGl2ZV9zdGFuZGJ5X25vZGU7CiAJYm9vbAkJcmVw bGljYXRpb25fZGVsYXlfYnlfdGltZTsKQEAgLTY0Myw2ICs2NDUsMTAgQEAgY2hlY2tfcmVwbGlj YXRpb25fdGltZV9sYWcodm9pZCkKIAkJCQkJCQkJCQkJCQkgKiBzZWNvbmRzIHRvIG1pY3JvCiAJ CQkJCQkJCQkJCQkJICogc2Vjb25kcyAqLwogCisJCQkJLyogVHJhY2sgbWF4IGRlbGF5IGZvciBt dXRhdGlvbiBUVEwgKi8KKwkJCQlpZiAobGFnID4gbWF4X2RlbGF5X3VzKQorCQkJCQltYXhfZGVs YXlfdXMgPSBsYWc7CisKIAkJCQkvKiBMb2cgZGVsYXkgaWYgbmVjZXNzYXJ5ICovCiAJCQkJaWYg KChwb29sX2NvbmZpZy0+bG9nX3N0YW5kYnlfZGVsYXkgPT0gTFNEX0FMV0FZUyAmJiBsYWcgPiAw KSB8fAogCQkJCQkocG9vbF9jb25maWctPmxvZ19zdGFuZGJ5X2RlbGF5ID09IExTRF9PVkVSX1RI UkVTSE9MRCAmJgpAQCAtNjY4LDYgKzY3NCwxMyBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xh Zyh2b2lkKQogCQl9CiAJfQogCisJLyoKKwkgKiBVcGRhdGUgdHJhY2sgdGFibGUgbXV0YXRpb24g VFRMIGZyb20gdGhlIG1heAorCSAqIG9ic2VydmVkIHRpbWUtYmFzZWQgcmVwbGljYXRpb24gZGVs YXkuCisJICovCisJaWYgKHJlcGxpY2F0aW9uX2RlbGF5X2J5X3RpbWUgJiYgbWF4X2RlbGF5X3Vz ID4gMCkKKwkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl91cGRhdGVfdHRsKG1heF9kZWxheV91 cyk7CisKIAllcnJvcl9jb250ZXh0X3N0YWNrID0gY2FsbGJhY2sucHJldmlvdXM7CiB9CiAKQEAg LTY5NSw2ICs3MDgsNyBAQCBjaGVja19yZXBsaWNhdGlvbl90aW1lX2xhZ193aXRoX2NtZCh2b2lk KQogCWRvdWJsZQkJZGVsYXlfbXM7CiAJdWludDY0CQlkZWxheTsKIAl1aW50NjQJCWRlbGF5X3Ro cmVzaG9sZF9ieV90aW1lOworCXVpbnQ2NAkJbWF4X2RlbGF5X3VzID0gMDsJLyogVHJhY2sgbWF4 IGRlbGF5IGZvciBtdXRhdGlvbiBtYXAgKi8KIAlpbnQJCQl0b2tlbl9jb3VudCA9IDA7CiAJaW50 CQkJcHJpbWFyeV9ub2RlX2lkOwogCWludAkJCXNhdmVfZXJybm87CkBAIC0xMDAzLDYgKzEwMTcs MTAgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWdfd2l0aF9jbWQodm9pZCkKIAkJCWJraW5m by0+c3RhbmRieV9kZWxheSA9IGRlbGF5OwogCQkJYmtpbmZvLT5zdGFuZGJ5X2RlbGF5X2J5X3Rp bWUgPSB0cnVlOwogCisJCQkvKiBUcmFjayBtYXhpbXVtIGRlbGF5IGZvciB0YWJsZSBtdXRhdGlv biBtYXAgVFRMIGNhbGN1bGF0aW9uICovCisJCQlpZiAoZGVsYXkgPiBtYXhfZGVsYXlfdXMpCisJ CQkJbWF4X2RlbGF5X3VzID0gZGVsYXk7CisKIAkJCS8qCiAJCQkgKiBMb2cgZGVsYXkgaWYgbmVj ZXNzYXJ5LiB0aHJlc2hvbGQgaXMgaW4gbWlsbGlzZWNvbmRzLCBjb252ZXJ0CiAJCQkgKiB0byBt aWNyb3NlY29uZHMuCkBAIC0xMDIxLDYgKzEwMzksMTIgQEAgY2hlY2tfcmVwbGljYXRpb25fdGlt ZV9sYWdfd2l0aF9jbWQodm9pZCkKIAkJCXRva2VuID0gc3RydG9rX3IoTlVMTCwgIiBcdFxuIiwg JnNhdmVwdHIpOwogCQl9CiAKKwkJLyogVXBkYXRlIHRhYmxlIG11dGF0aW9uIFRUTCBiYXNlZCBv biBtYXggb2JzZXJ2ZWQgZGVsYXkgKi8KKwkJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRf YmFsYW5jZV9vbl93cml0ZSA9PQorCQkJRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCAmJgorCQkJ bWF4X2RlbGF5X3VzID4gMCkKKwkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdXBkYXRlX3R0 bChtYXhfZGVsYXlfdXMpOworCiAJfQogCVBHX0NBVENIKCk7CiAJewpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzc2lvbi9saWJzLnNoIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi9saWJzLnNoCmlu ZGV4IDdjNWEwYzE4Mi4uMWM4YWUzOTJkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzaW9u L2xpYnMuc2gKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi9saWJzLnNoCkBAIC00Miw2ICs0Miw4 IEBAIGZ1bmN0aW9uIHdhaXRfZm9yX2ZhaWxvdmVyX2RvbmUgewogZnVuY3Rpb24gY2xlYW5fYWxs IHsKIAlwZ3JlcCBwZ3Bvb2wgfCB4YXJncyBraWxsIC05ID4gL2Rldi9udWxsIDI+JjEKIAlwZ3Jl cCBwb3N0Z3JlcyB8IHhhcmdzIGtpbGwgLTkgPiAvZGV2L251bGwgMj4mMQorCSMgQ2xlYW4gdXAg bGVha2VkIFN5c1YgSVBDIHJlc291cmNlcyBsZWZ0IGJlaGluZCBieSBraWxsIC05CisJaXBjcm0g LS1hbGwgMj4vZGV2L251bGwgfHwgdHJ1ZQogCXJtIC1mICRQR1NPQ0tFVF9ESVIvLnMuUEdTUUwu KgogCW5ldHN0YXQgLXQgLXAgMj4vZGV2L251bGx8Z3JlcCBwZ3Bvb2wKIH0KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQyLnRyYWNrX3RhYmxlX211dGF0aW9uL3Rlc3Qu c2ggYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0Mi50cmFja190YWJsZV9tdXRhdGlvbi90 ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMC4uOGI0ZGQxN2I4Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDIudHJhY2tfdGFi bGVfbXV0YXRpb24vdGVzdC5zaApAQCAtMCwwICsxLDM1NCBAQAorIyEvdXNyL2Jpbi9lbnYgYmFz aAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyMgdGVzdCBzY3JpcHQgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZl YXR1cmUgKGluLW1lbW9yeSB0YWJsZSB0cmFja2luZykuCisjIFRlc3RzIHJvdXRpbmcgb2YgcXVl cmllcyBiYXNlZCBvbiByZWNlbnRseSB3cml0dGVuIHRhYmxlcy4KKyMKK3NvdXJjZSAkVEVTVExJ QlMKK1RFU1RESVI9dGVzdGRpcgorUFNRTD0kUEdCSU4vcHNxbAorUFNRTE9QVFM9Ii1hIC1xIC1Y IgorUEdQT09MQklOPSRQR1BPT0xfSU5TVEFMTF9ESVIvYmluCitleHBvcnQgUEdEQVRBQkFTRT10 ZXN0CisKKyMgT25seSBydW4gaW4gc3RyZWFtaW5nIHJlcGxpY2F0aW9uIG1vZGUgc2luY2UgdGhh dCdzIHRoZSB0YXJnZXQgdXNlIGNhc2UKK2ZvciBtb2RlIGluIHMKK2RvCisgICAgcm0gLWZyICRU RVNURElSCisgICAgbWtkaXIgJFRFU1RESVIKKyAgICBjZCAkVEVTVERJUgorCisgICAgIyBDcmVh dGUgdGVzdCBlbnZpcm9ubWVudCB3aXRoIDIgbm9kZXMKKyAgICBlY2hvIC1uICJjcmVhdGluZyB0 ZXN0IGVudmlyb25tZW50Li4uIgorICAgICRQR1BPT0xfU0VUVVAgLW0gJG1vZGUgLW4gMiB8fCBl eGl0IDEKKyAgICBlY2hvICJkb25lLiIKKworICAgIHNvdXJjZSAuL2Jhc2hyYy5wb3J0cworCisg ICAgIyBDb25maWd1cmUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSB2aWEgZG1sX2FkYXB0 aXZlX2dsb2JhbAorICAgIGVjaG8gImRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID0gJ2Rt bF9hZGFwdGl2ZV9nbG9iYWwnIiA+PiBldGMvcGdwb29sLmNvbmYKKyAgICBlY2hvICJ0cmFja190 YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yID0gNS4wIiA+PiBldGMvcGdwb29sLmNvbmYKKyAgICBl Y2hvICJ0cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uID0gMTAwMDAiID4+ IGV0Yy9wZ3Bvb2wuY29uZgorCisgICAgIyBFbmFibGUgbG9hZCBiYWxhbmNpbmcgZXhwbGljaXRs eQorICAgIGVjaG8gImxvYWRfYmFsYW5jZV9tb2RlID0gb24iID4+IGV0Yy9wZ3Bvb2wuY29uZgor CisgICAgIyBDb25maWd1cmUgd2VpZ2h0cyBzbyB3ZSBjYW4gZGlzdGluZ3Vpc2ggcm91dGluZwor ICAgICMgQmFja2VuZCAwIChwcmltYXJ5KSB3ZWlnaHQ9MCwgQmFja2VuZCAxIChzdGFuZGJ5KSB3 ZWlnaHQ9MQorICAgICMgVGhpcyBtZWFucyBsb2FkIGJhbGFuY2VkIHF1ZXJpZXMgZ28gdG8gbm9k ZSAxIGJ5IGRlZmF1bHQKKyAgICBlY2hvICJiYWNrZW5kX3dlaWdodDAgPSAwIiA+PiBldGMvcGdw b29sLmNvbmYKKyAgICBlY2hvICJiYWNrZW5kX3dlaWdodDEgPSAxIiA+PiBldGMvcGdwb29sLmNv bmYKKworICAgICMgRW5hYmxlIGRlYnVnIGxvZ2dpbmcgdG8gc2VlIHJvdXRpbmcgZGVjaXNpb25z CisgICAgZWNobyAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIgPj4gZXRjL3BncG9vbC5jb25m CisKKyAgICAuL3N0YXJ0YWxsCisKKyAgICBleHBvcnQgUEdQT1JUPSRQR1BPT0xfUE9SVAorICAg IGV4cG9ydCBQR0hPU1Q9bG9jYWxob3N0CisKKyAgICB3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAor CisgICAgIyBDcmVhdGUgdGVzdCB0YWJsZXMKKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitDUkVBVEUg VEFCTEUgdDEoaSBJTlRFR0VSKTsKK0NSRUFURSBUQUJMRSB0MihpIElOVEVHRVIpOworQ1JFQVRF IFRBQkxFIHQzKGkgSU5URUdFUik7CitFT0YKKworICAgIGVjaG8gIj09PSBUZXN0IDE6IENvbGQg U3RhcnQgUm91dGluZyA9PT0iCisgICAgIyBEdXJpbmcgY29sZCBzdGFydCwgYWxsIHF1ZXJpZXMg c2hvdWxkIGdvIHRvIHByaW1hcnkKKyAgICAjIFJlc3RhcnQgcGdwb29sIHRvIHRyaWdnZXIgY29s ZCBzdGFydAorICAgIC4vc2h1dGRvd25hbGwKKyAgICAuL3N0YXJ0YWxsCisgICAgd2FpdF9mb3Jf cGdwb29sX3N0YXJ0dXAKKworICAgICMgSW1tZWRpYXRlbHkgcXVlcnkgLSBzaG91bGQgZ28gdG8g cHJpbWFyeSBkdWUgdG8gY29sZCBzdGFydAorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAnY29s ZF9zdGFydF90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0MTsiID4gL2Rldi9udWxsIDI+JjEKKwor ICAgICMgQ2hlY2sgbG9nIGZvciBjb2xkIHN0YXJ0IG1lc3NhZ2UgKHVzZSAtYSB0byBoYW5kbGUg YmluYXJ5IGxvZyBmaWxlcykKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxh bmNlIGJlY2F1c2Ugb2YgdHJhY2sgdGFibGUgbXV0YXRpb24gY29sZCBzdGFydCIgbG9nL3BncG9v bC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCAxIFBBU1NFRDogQ29sZCBzdGFydCByb3V0 aW5nIHdvcmtzIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCAxIEZBSUxFRDogQ29sZCBz dGFydCByb3V0aW5nIG5vdCBkZXRlY3RlZCIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAg ICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgMjogV2FpdCBmb3IgY29sZCBz dGFydCB0byBlbmQgPT09IgorICAgICMgV2FpdCBmb3IgY29sZCBzdGFydCBwZXJpb2QgdG8gZW5k ICgxMCBzZWNvbmRzKS4KKyAgICAjIFVzZSBnZW5lcm91cyBtYXJnaW4gdG8gYXZvaWQgZmxha2lu ZXNzIHVuZGVyIGxvYWQgKGUuZy4gZnVsbCByZWdyZXNzaW9uIHN1aXRlKS4KKyAgICBzbGVlcCAx MgorCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBO b3cgYSBjbGVhbiB0YWJsZSBxdWVyeSBzaG91bGQgbG9hZCBiYWxhbmNlIChnbyB0byBub2RlIDEp CisgICAgJFBTUUwgdGVzdCAtYyAiU0VMRUNUICdhZnRlcl9jb2xkX3N0YXJ0JyBhcyBtYXJrZXIs ICogRlJPTSB0MzsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgQWZ0ZXIgY29sZCBzdGFydCwg cXVlcmllcyB0byBjbGVhbiB0YWJsZXMgc2hvdWxkIGxvYWQgYmFsYW5jZQorICAgICMgQ2hlY2sg dGhhdCBpdCBkaWQgTk9UIGdldCBmb3JjZWQgdG8gcHJpbWFyeSBkdWUgdG8gdHJhY2sgdGFibGUg bXV0YXRpb24KKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1 c2Ugb2YgdHJhY2sgdGFibGUgbXV0YXRpb24gY29sZCBzdGFydCIgbG9nL3BncG9vbC5sb2c7IHRo ZW4KKyAgICAgICAgZWNobyAiVGVzdCAyIEZBSUxFRDogU3RpbGwgaW4gY29sZCBzdGFydCBhZnRl ciB3YWl0aW5nIgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZp CisgICAgZWNobyAiVGVzdCAyIFBBU1NFRDogQ29sZCBzdGFydCBlbmRlZCBjb3JyZWN0bHkiCisK KyAgICBlY2hvICI9PT0gVGVzdCAzOiBXcml0ZS10aGVuLVJlYWQgUm91dGluZyA9PT0iCisgICAg IyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBXcml0ZSB0byB0 MSBhbmQgdGhlbiByZWFkIC0gdXNlIHNpbmdsZSBjb25uZWN0aW9uIHRvIGVuc3VyZSBzYW1lIHNl c3Npb24KKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitJTlNFUlQgSU5UTyB0MSBWQUxVRVMgKDEpOwor U0VMRUNUICd3cml0ZV9yZWFkX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQxOworRU9GCisKKyAg ICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQor CisgICAgIyBDaGVjayBsb2cgZm9yIHRhYmxlIHN0YWxlbmVzcyBtZXNzYWdlCisgICAgaWYgZ3Jl cCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50 bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCAzIFBB U1NFRDogV3JpdGUtdGhlbi1yZWFkIHJvdXRpbmcgd29ya3MiCisgICAgZWxzZQorICAgICAgICBl Y2hvICJUZXN0IDMgRkFJTEVEOiBUYWJsZSBzdGFsZW5lc3Mgbm90IGRldGVjdGVkIGFmdGVyIHdy aXRlIgorICAgICAgICAjIFNob3cgcmVsZXZhbnQgbG9nIGVudHJpZXMgZm9yIGRlYnVnZ2luZwor ICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9vbC5sb2cg fCB0YWlsIC0yMAorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZp CisKKyAgICBlY2hvICI9PT0gVGVzdCA0OiBDbGVhbiBUYWJsZSBTdGlsbCBMb2FkIEJhbGFuY2Vz ID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAj IFJlYWQgZnJvbSB0MiAobmV2ZXIgd3JpdHRlbiB0bykgLSBzaG91bGQgbG9hZCBiYWxhbmNlCisg ICAgJFBTUUwgdGVzdCAtYyAiU0VMRUNUICdjbGVhbl90YWJsZV90ZXN0JyBhcyBtYXJrZXIsICog RlJPTSB0MjsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgU2hvdWxkIE5PVCBzZWUgdHJhY2sg dGFibGUgbXV0YXRpb24gYmxvY2tpbmcgbWVzc2FnZSBmb3IgdDIKKyAgICBpZiBncmVwIC1hIC1x ICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKnQyLip3YXMgcmVjZW50bHkg d3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA0IEZBSUxF RDogQ2xlYW4gdGFibGUgaW5jb3JyZWN0bHkgbWFya2VkIGFzIHN0YWxlIgorICAgICAgICAuL3No dXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZWNobyAiVGVzdCA0IFBBU1NF RDogQ2xlYW4gdGFibGVzIHN0aWxsIGxvYWQgYmFsYW5jZSIKKworICAgIGVjaG8gIj09PSBUZXN0 IDU6IFVQREFURSBNYXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9n CisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBVcGRhdGUgdDIgYW5kIHRoZW4gcmVhZCAt IHVzZSBzaW5nbGUgY29ubmVjdGlvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK1VQREFURSB0MiBT RVQgaSA9IDk5OSBXSEVSRSBpID0gMDsKK1NFTEVDVCAndXBkYXRlX3Rlc3QnIGFzIG1hcmtlciwg KiBGUk9NIHQyOworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1 c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQg YmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5s b2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA1IFBBU1NFRDogVVBEQVRFIG1hcmtzIHRhYmxl IGFzIHN0YWxlIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCA1IEZBSUxFRDogVVBEQVRF IGRpZCBub3QgbWFyayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAg ICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgNjogREVMRVRFIE1hcmtz IFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bv b2wubG9nCisKKyAgICAjIERlbGV0ZSBmcm9tIHQzIGFuZCB0aGVuIHJlYWQgLSB1c2Ugc2luZ2xl IGNvbm5lY3Rpb24KKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitERUxFVEUgRlJPTSB0MyBXSEVSRSBp ID0gMDsKK1NFTEVDVCAnZGVsZXRlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQzOworRU9GCisK KyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVwIDAu NQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRh YmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAg ZWNobyAiVGVzdCA2IFBBU1NFRDogREVMRVRFIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgIGVs c2UKKyAgICAgICAgZWNobyAiVGVzdCA2IEZBSUxFRDogREVMRVRFIGRpZCBub3QgbWFyayB0YWJs ZSBhcyBzdGFsZSIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBm aQorCisgICAgZWNobyAiPT09IFRlc3QgNzogVFJVTkNBVEUgTWFya3MgVGFibGUgYXMgU3RhbGUg PT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMg Q3JlYXRlIGEgZnJlc2ggdGFibGUgZm9yIFRSVU5DQVRFIHRlc3QKKyAgICAkUFNRTCB0ZXN0IC1j ICJDUkVBVEUgVEFCTEUgdF90cnVuY2F0ZShpIElOVEVHRVIpOyIgPiAvZGV2L251bGwgMj4mMQor ICAgICRQU1FMIHRlc3QgLWMgIklOU0VSVCBJTlRPIHRfdHJ1bmNhdGUgVkFMVUVTICgxKSwgKDIp LCAoMyk7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFdhaXQgZm9yIGFueSBUVEwgdG8gZXhw aXJlCisgICAgc2xlZXAgMworCisgICAgIyBDbGVhciB0aGUgbG9nIGFnYWluCisgICAgPiBsb2cv cGdwb29sLmxvZworCisgICAgIyBUcnVuY2F0ZSBhbmQgdGhlbiByZWFkIC0gdXNlIHNpbmdsZSBj b25uZWN0aW9uCisgICAgJFBTUUwgdGVzdCA8PEVPRgorVFJVTkNBVEUgdF90cnVuY2F0ZTsKK1NF TEVDVCAndHJ1bmNhdGVfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdF90cnVuY2F0ZTsKK0VPRgor CisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAw LjUKKworICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0 YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAg IGVjaG8gIlRlc3QgNyBQQVNTRUQ6IFRSVU5DQVRFIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAg IGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCA3IEZBSUxFRDogVFJVTkNBVEUgZGlkIG5vdCBtYXJr IHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlv biIgbG9nL3BncG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAuL3NodXRkb3duYWxsCisgICAg ICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA4OiBXSVRIIENsYXVzZSAo Q1RFIHdpdGggREVMRVRFKSBNYXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVhciB0 aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBDcmVhdGUgYSBmcmVzaCB0YWJs ZSBmb3IgV0lUSCB0ZXN0CisgICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfY3RlKGkg SU5URUdFUik7IiA+IC9kZXYvbnVsbCAyPiYxCisgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJUIElO VE8gdF9jdGUgVkFMVUVTICgxKSwgKDIpLCAoMyk7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAj IFdhaXQgZm9yIGFueSBUVEwgdG8gZXhwaXJlCisgICAgc2xlZXAgMworCisgICAgIyBDbGVhciB0 aGUgbG9nIGFnYWluCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBVc2UgV0lUSCBjbGF1 c2Ugd2l0aCBERUxFVEUsIHRoZW4gcmVhZCBmcm9tIHRoZSB0YWJsZQorICAgICRQU1FMIHRlc3Qg PDxFT0YKK1dJVEggZGVsZXRlZCBBUyAoREVMRVRFIEZST00gdF9jdGUgV0hFUkUgaSA9IDEgUkVU VVJOSU5HICopCitTRUxFQ1QgKiBGUk9NIGRlbGV0ZWQ7CitTRUxFQ1QgJ2N0ZV90ZXN0JyBhcyBt YXJrZXIsICogRlJPTSB0X2N0ZTsKK0VPRgorCisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUg bG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgIGlmIGdyZXAgLWEgLXEgImNvdWxk IG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxv Zy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgOCBQQVNTRUQ6IFdJVEggY2xh dXNlIChDVEUpIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAi VGVzdCA4IEZBSUxFRDogV0lUSCBjbGF1c2UgKENURSkgZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0 YWxlIgorICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9v bC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQor ICAgIGZpCisKKyAgICAjIFRlc3QgOTogTUVSR0UgKFBvc3RncmVTUUwgMTUrIG9ubHkpCisgICAg UEdfTUFKT1JfVkVSU0lPTj0kKCRQU1FMIC10IC1jICJTRUxFQ1Qgc3Vic3RyaW5nKHZlcnNpb24o KSBmcm9tICdQb3N0Z3JlU1FMIChbMC05XSspJyk7IiB8IHRyIC1kICcgJykKKyAgICBpZiBbICIk UEdfTUFKT1JfVkVSU0lPTiIgLWdlIDE1IF0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNo byAiPT09IFRlc3QgOTogTUVSR0UgTWFya3MgVGFibGUgYXMgU3RhbGUgKFBvc3RncmVTUUwgJFBH X01BSk9SX1ZFUlNJT04pID09PSIKKyAgICAgICAgIyBDbGVhciB0aGUgbG9nCisgICAgICAgID4g bG9nL3BncG9vbC5sb2cKKworICAgICAgICAjIENyZWF0ZSB0YWJsZXMgZm9yIE1FUkdFIHRlc3QK KyAgICAgICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfbWVyZ2VfdGFyZ2V0KGlkIElO VEVHRVIgUFJJTUFSWSBLRVksIHZhbCBURVhUKTsiID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAg JFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfbWVyZ2Vfc291cmNlKGlkIElOVEVHRVIsIHZh bCBURVhUKTsiID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgJFBTUUwgdGVzdCAtYyAiSU5TRVJU IElOVE8gdF9tZXJnZV90YXJnZXQgVkFMVUVTICgxLCAnb2xkJyk7IiA+IC9kZXYvbnVsbCAyPiYx CisgICAgICAgICRQU1FMIHRlc3QgLWMgIklOU0VSVCBJTlRPIHRfbWVyZ2Vfc291cmNlIFZBTFVF UyAoMSwgJ25ldycpLCAoMiwgJ2luc2VydCcpOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgICAg ICMgV2FpdCBmb3IgYW55IFRUTCB0byBleHBpcmUKKyAgICAgICAgc2xlZXAgMworCisgICAgICAg ICMgQ2xlYXIgdGhlIGxvZyBhZ2FpbgorICAgICAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAg ICAgIyBVc2UgTUVSR0UsIHRoZW4gcmVhZCBmcm9tIHRoZSB0YXJnZXQgdGFibGUKKyAgICAgICAg JFBTUUwgdGVzdCA8PEVPRgorTUVSR0UgSU5UTyB0X21lcmdlX3RhcmdldCB0CitVU0lORyB0X21l cmdlX3NvdXJjZSBzIE9OIHQuaWQgPSBzLmlkCitXSEVOIE1BVENIRUQgVEhFTiBVUERBVEUgU0VU IHZhbCA9IHMudmFsCitXSEVOIE5PVCBNQVRDSEVEIFRIRU4gSU5TRVJUIFZBTFVFUyAocy5pZCwg cy52YWwpOworU0VMRUNUICdtZXJnZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0X21lcmdlX3Rh cmdldDsKK0VPRgorCisgICAgICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVz aGVkCisgICAgICAgIHNsZWVwIDAuNQorCisgICAgICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5v dCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9w Z3Bvb2wubG9nOyB0aGVuCisgICAgICAgICAgICBlY2hvICJUZXN0IDkgUEFTU0VEOiBNRVJHRSBt YXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiVGVz dCA5IEZBSUxFRDogTUVSR0UgZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICAg ICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0YXRpb24iIGxvZy9wZ3Bvb2wubG9nIHwgdGFp bCAtMjAKKyAgICAgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgICAgIGV4aXQgMQorICAg ICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgZWNobyAiPT09IFRlc3QgOTogTUVSR0Ugc2tpcHBl ZCAocmVxdWlyZXMgUG9zdGdyZVNRTCAxNSssIGhhdmUgJFBHX01BSk9SX1ZFUlNJT04pID09PSIK KyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgMTA6IFJPTExCQUNLIERvZXMgTk9UIE1hcmsg VGFibGUgYXMgU3RhbGUgPT09IgorICAgICMgQ3JlYXRlIGEgZnJlc2ggdGFibGUgZm9yIHJvbGxi YWNrIHRlc3QKKyAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9yb2xsYmFjayhpIElO VEVHRVIpOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4 cGlyZQorICAgIHNsZWVwIDMKKworICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9v bC5sb2cKKworICAgICMgV3JpdGUgaW5zaWRlIGEgdHJhbnNhY3Rpb24sIHRoZW4gcm9sbGJhY2sK KyAgICAkUFNRTCB0ZXN0IDw8RU9GCitCRUdJTjsKK0lOU0VSVCBJTlRPIHRfcm9sbGJhY2sgVkFM VUVTICgxKTsKK1JPTExCQUNLOworU0VMRUNUICdyb2xsYmFja190ZXN0JyBhcyBtYXJrZXIsICog RlJPTSB0X3JvbGxiYWNrOworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cg aXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAgIyBTaG91bGQgTk9UIHNlZSB0X3JvbGxi YWNrIG1hcmtlZCBhcyBzdGFsZSBzaW5jZSB0aGUgd3JpdGUgd2FzIHJvbGxlZCBiYWNrCisgICAg aWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip0X3Jv bGxiYWNrLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAg ICAgZWNobyAiVGVzdCAxMCBGQUlMRUQ6IFJvbGxlZC1iYWNrIHdyaXRlIGluY29ycmVjdGx5IG1h cmtlZCB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0 YXRpb24iIGxvZy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAgICAgICAgLi9zaHV0ZG93bmFsbAor ICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGVjaG8gIlRlc3QgMTAgUEFTU0VEOiBST0xMQkFD SyBkb2VzIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorCisgICAgZWNobyAiPT09IFRlc3QgMTE6 IENPTU1JVCBNYXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDcmVhdGUgYSBmcmVzaCB0 YWJsZSBmb3IgY29tbWl0IHRlc3QKKyAgICAkUFNRTCB0ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF9j b21taXQoaSBJTlRFR0VSKTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgV2FpdCBmb3IgYW55 IFRUTCB0byBleHBpcmUKKyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+ IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAjIFdyaXRlIGluc2lkZSBhIHRyYW5zYWN0aW9uLCB0aGVu IGNvbW1pdCwgdGhlbiByZWFkCisgICAgJFBTUUwgdGVzdCA8PEVPRgorQkVHSU47CitJTlNFUlQg SU5UTyB0X2NvbW1pdCBWQUxVRVMgKDEpOworQ09NTUlUOworU0VMRUNUICdjb21taXRfdGVzdCcg YXMgbWFya2VyLCAqIEZST00gdF9jb21taXQ7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8g ZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1x ICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0 dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDExIFBBU1NFRDog Q09NTUlUIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVz dCAxMSBGQUlMRUQ6IENvbW1pdHRlZCB3cml0ZSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUi CisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBsb2cvcGdwb29sLmxv ZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAg ZmkKKworICAgIGVjaG8gIiIKKyAgICBlY2hvICI9PT0gQWxsIFRyYWNrIFRhYmxlIE11dGF0aW9u IFRlc3RzIFBBU1NFRCA9PT0iCisKKyAgICAuL3NodXRkb3duYWxsCisKKyAgICBjZCAuLgorZG9u ZQorCitleGl0IDAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRy YWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3Rlc3Quc2ggYi9zcmMvdGVzdC9yZWdyZXNzaW9u L3Rlc3RzLzA0My50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy90ZXN0LnNoCm5ldyBmaWxl IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMC4uYzUwYzIxM2Q2Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0 Y2hkb2cvdGVzdC5zaApAQCAtMCwwICsxLDE4NCBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorIy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyMgVGVzdCBzY3JpcHQgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uIGdsb2JhbCBj b2xkIHN0YXJ0CisjIG9uIHdhdGNoZG9nIGxlYWRlciBjaGFuZ2UuCisjCisjIFVzZXMgJFdBVENI RE9HX1NFVFVQIHRvIGNyZWF0ZSBhIDItbm9kZSB3YXRjaGRvZyBjbHVzdGVyLAorIyB0aGVuIHZl cmlmaWVzIHRoYXQgd2hlbiB0aGUgbGVhZGVyIGlzIHN0b3BwZWQgdGhlIG5ldworIyBsZWFkZXIg dHJpZ2dlcnMgYSBnbG9iYWwgY29sZCBzdGFydC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzb3VyY2UgJFRFU1RM SUJTCitURVNURElSPXRlc3RkaXIKK1BTUUw9JFBHQklOL3BzcWwKK3N1Y2Nlc3NfY291bnQ9MAor CitkaXI9YHB3ZGAKK3JtIC1mciAkVEVTVERJUgorbWtkaXIgJFRFU1RESVIKK2NkICRURVNURElS CisKKyMgQ3JlYXRlIDItbm9kZSB3YXRjaGRvZyBjbHVzdGVyCiskV0FUQ0hET0dfU0VUVVAgLXdu IDIgfHwgZXhpdCAxCisKKyMgRW5zdXJlIHBlci1ub2RlIHNjcmlwdHMgYXJlIGV4ZWN1dGFibGUK KyMgKHNlZCAtaSBpbiB3YXRjaGRvZ19zZXR1cCBjYW4gc3RyaXAgcGVybWlzc2lvbnMpCitjaG1v ZCA3NTUgcGdwb29sKi9zdGFydGFsbCBwZ3Bvb2wqL3NodXRkb3duYWxsCisKKyMgQXBwZW5kIHRy YWNrX3RhYmxlX211dGF0aW9uIGNvbmZpZyB0byBib3RoIG5vZGVzCitmb3IgaSBpbiAwIDEKK2Rv CisJY2F0ID4+IHBncG9vbCR7aX0vZXRjL3BncG9vbC5jb25mIDw8RU9GCitkaXNhYmxlX2xvYWRf YmFsYW5jZV9vbl93cml0ZSA9ICdkbWxfYWRhcHRpdmVfZ2xvYmFsJwordHJhY2tfdGFibGVfbXV0 YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbiA9IDIwMDAKK2VuYWJsZV9jb25zZW5zdXNfd2l0aF9o YWxmX3ZvdGVzID0gb24KK2xvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEKK0VPRgorZG9uZQorCisu L3N0YXJ0YWxsCitleHBvcnQgUENQUEFTU0ZJTEU9JGRpci8kVEVTVERJUi9wZ3Bvb2wwL3BjcHBh c3MKKworIyBXYWl0IGZvciB3YXRjaGRvZyBsaWZlY2hlY2sgb24gbm9kZSAwCitlY2hvIC1uICJ3 YWl0aW5nIGZvciB3YXRjaGRvZyBub2RlIDAgc3RhcnRpbmcgdXAuLi4iCitmb3IgaSBpbiAxIDIg MyA0IDUgNiA3IDggOSAxMAorZG8KKwlncmVwICJsaWZlY2hlY2sgc3RhcnRlZCIgXAorCQlwZ3Bv b2wwL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVu CisJCWJyZWFrCisJZmkKKwlzbGVlcCAyCitkb25lCitlY2hvICJkb25lLiIKKworIyBUZXN0IDE6 IFZlcmlmeSBsZWFkZXIgY2FtZSB1cAorZWNobyAiPT09IFRlc3QgMTogV2FpdGluZyBmb3IgdGhl IHBncG9vbCBsZWFkZXIuLi4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2Rv CisJZ3JlcCAiSSBhbSB0aGUgY2x1c3RlciBsZWFkZXIgbm9kZSIgXAorCQlwZ3Bvb2wwL2xvZy9w Z3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nl c3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8gIlRlc3QgMSBQQVNTRUQ6 IExlYWRlciBicm91Z2h0IHVwLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGlt ZXMiCisJc2xlZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCAxIF07IHRoZW4K KwllY2hvICJUZXN0IDEgRkFJTEVEOiBMZWFkZXIgZGlkIG5vdCBzdGFydCIKKwkuL3NodXRkb3du YWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgMjogVmVyaWZ5IHN0YW5kYnkgam9pbmVkIGNsdXN0 ZXIKK2VjaG8gIj09PSBUZXN0IDI6IFdhaXRpbmcgZm9yIHN0YW5kYnkgdG8gam9pbi4uLiA9PT0i Citmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMAorZG8KKwlncmVwICJzdWNjZXNzZnVsbHkg am9pbmVkIHRoZSB3YXRjaGRvZyBjbHVzdGVyIiBcCisJCXBncG9vbDEvbG9nL3BncG9vbC5sb2cg PiAvZGV2L251bGwgMj4mMQorCWlmIFsgJD8gPSAwIF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0k KCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwkJZWNobyAiVGVzdCAyIFBBU1NFRDogU3RhbmRieSBq b2luZWQuIgorCQlicmVhaworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAy Citkb25lCisKK2lmIFsgJHN1Y2Nlc3NfY291bnQgLWx0IDIgXTsgdGhlbgorCWVjaG8gIlRlc3Qg MiBGQUlMRUQ6IFN0YW5kYnkgZGlkIG5vdCBqb2luIgorCS4vc2h1dGRvd25hbGwKKwlleGl0IDEK K2ZpCisKKyMgVGVzdCAzOiBWZXJpZnkgdHJhY2tfdGFibGVfbXV0YXRpb24gaW5pdGlhbGl6ZWQK K2VjaG8gIj09PSBUZXN0IDM6IFZlcmlmeSBmZWF0dXJlIGluaXRpYWxpemVkID09PSIKK2lmIGdy ZXAgLWEgInRyYWNrX3RhYmxlX211dGF0aW9uOiBpbml0aWFsaXplZCIgXAorCXBncG9vbDAvbG9n L3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorCXN1Y2Nlc3NfY291bnQ9JCgoIHN1 Y2Nlc3NfY291bnQgKyAxICkpCisJZWNobyAiVGVzdCAzIFBBU1NFRDogRmVhdHVyZSBpbml0aWFs aXplZC4iCitlbHNlCisJZWNobyAiVGVzdCAzIEZBSUxFRDogRmVhdHVyZSBub3QgaW5pdGlhbGl6 ZWQiCisJLi9zaHV0ZG93bmFsbAorCWV4aXQgMQorZmkKKworIyBUZXN0IDQ6IFN0b3AgbGVhZGVy IChwZ3Bvb2wwKSB0byB0cmlnZ2VyIGZhaWxvdmVyCitlY2hvICI9PT0gVGVzdCA0OiBTdG9wcGlu ZyBsZWFkZXIuLi4gPT09IgorY2QgcGdwb29sMAorc291cmNlIC4vYmFzaHJjLnBvcnRzCiskUEdQ T09MX0lOU1RBTExfRElSL2Jpbi9wZ3Bvb2wgXAorCS1mIGV0Yy9wZ3Bvb2wuY29uZiAtbSBmIHN0 b3AKK2NkIC4uCisKK2VjaG8gIkNoZWNraW5nIHN0YW5kYnkgZGV0ZWN0ZWQgc2h1dGRvd24uLi4i Citmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMAorZG8KKwlncmVwIC1hICJpcyBzaHV0dGlu ZyBkb3duIiBcCisJCXBncG9vbDEvbG9nL3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlm IFsgJD8gPSAwIF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEg KSkKKwkJZWNobyAiVGVzdCA0IFBBU1NFRDogU2h1dGRvd24gZGV0ZWN0ZWQuIgorCQlicmVhawor CWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisKK2lmIFsgJHN1 Y2Nlc3NfY291bnQgLWx0IDQgXTsgdGhlbgorCWVjaG8gIlRlc3QgNCBGQUlMRUQ6IFNodXRkb3du IG5vdCBkZXRlY3RlZCIKKwkuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgNTog VmVyaWZ5IHN0YW5kYnkgYmVjYW1lIG5ldyBsZWFkZXIKK2VjaG8gIj09PSBUZXN0IDU6IENoZWNr aW5nIHN0YW5kYnkgdGFrZXMgb3Zlci4uLiA9PT0iCitmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDgg OSAxMAorZG8KKwlncmVwIC1hICJJIGFtIHRoZSBjbHVzdGVyIGxlYWRlciBub2RlIiBcCisJCXBn cG9vbDEvbG9nL3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlmIFsgJD8gPSAwIF07IHRo ZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwkJZWNobyAiVGVz dCA1IFBBU1NFRDogU3RhbmRieSBiZWNhbWUgbGVhZGVyLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8g IltjaGVja10gJGkgdGltZXMiCisJc2xlZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50 IC1sdCA1IF07IHRoZW4KKwllY2hvICJUZXN0IDUgRkFJTEVEOiBTdGFuZGJ5IGRpZCBub3QgYmVj b21lIGxlYWRlciIKKwkuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgNjogVmVy aWZ5IGdsb2JhbCBjb2xkIHN0YXJ0IHdhcyB0cmlnZ2VyZWQKK2VjaG8gIj09PSBUZXN0IDY6IENo ZWNraW5nIGdsb2JhbCBjb2xkIHN0YXJ0Li4uID09PSIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcg OCA5IDEwCitkbworCWdyZXAgLWEgInRyYWNrX3RhYmxlX211dGF0aW9uOiBnbG9iYWwgY29sZCBz dGFydCIgXAorCQlwZ3Bvb2wxL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBb ICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkp CisJCWVjaG8gIlRlc3QgNiBQQVNTRUQ6IEdsb2JhbCBjb2xkIHN0YXJ0IHRyaWdnZXJlZC4iCisJ CWJyZWFrCisJZmkKKwllY2hvICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKwor IyBDbGVhbnVwCisuL3NodXRkb3duYWxsCisKK2VjaG8gIiIKK2VjaG8gIiRzdWNjZXNzX2NvdW50 IG91dCBvZiA2IHN1Y2Nlc3NmdWwiCisKK2lmIHRlc3QgJHN1Y2Nlc3NfY291bnQgLWVxIDYKK3Ro ZW4KKwllY2hvICI9PT0gQWxsIFdhdGNoZG9nIFRlc3RzIFBBU1NFRCA9PT0iCisJZXhpdCAwCitm aQorCitleGl0IDEKZGlmZiAtLWdpdCBhL3NyYy91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uLmMgYi9zcmMvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZWUwOWIzZjUwCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYwpAQCAtMCwwICsxLDE0NTMgQEAK Ky8qIC0qLXBnc3FsLWMtKi0gKi8KKy8qCisgKiBwZ3Bvb2w6IGEgbGFuZ3VhZ2UgaW5kZXBlbmRl bnQgY29ubmVjdGlvbiBwb29sIHNlcnZlciBmb3IgUG9zdGdyZVNRTAorICogd3JpdHRlbiBieSBU YXRzdW8gSXNoaWkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAyNglQZ1Bvb2wgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlm eSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9u IGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CisgKiBncmFudGVkLCBw cm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKKyAq IGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uCisgKiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5k IHRoYXQgdGhlIG5hbWUgb2YgdGhlCisgKiBhdXRob3Igbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNp bmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KKyAqIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorICogcGVybWlzc2lvbi4gVGhl IGF1dGhvciBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0 eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcwor ICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIHBvb2xf dHJhY2tfdGFibGVfbXV0YXRpb24uYzogSW4tbWVtb3J5IHRyYWNraW5nIG9mIHJlY2VudGx5Cisg KiAgIHdyaXR0ZW4gdGFibGVzIHRvIHByZXZlbnQgc3RhbGUgcmVhZHMgZnJvbSByZXBsaWNhcy4K KyAqCisgKiBCYXNlZCBvbiB0aGUgImxhZ2xlc3MiIGFyY2hpdGVjdHVyZSBmcm9tIFRhaWxvciBC cmFuZHMuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor I2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJw b29sLmgiCisjaW5jbHVkZSAicG9vbF9jb25maWcuaCIKKyNpbmNsdWRlICJjb250ZXh0L3Bvb2xf c2Vzc2lvbl9jb250ZXh0LmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRh dGlvbi5oIgorI2luY2x1ZGUgInV0aWxzL2Vsb2cuaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX2lw Yy5oIgorI2luY2x1ZGUgInV0aWxzL3BhbGxvYy5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfcmVs Y2FjaGUuaCIKKworI2RlZmluZSBEQVRBQkFTRV9UT19PSURfUVVFUlkgXAorCSJTRUxFQ1Qgb2lk IEZST00gcGdfY2F0YWxvZy5wZ19kYXRhYmFzZSIgXAorCSIgV0hFUkUgZGF0bmFtZSA9ICclcyci CisKKy8qCisgKiBIZWxwZXIgbWFjcm86IHRydWUgd2hlbiB0aGUgZmVhdHVyZSBpcyBub3QgYWN0 aXZlLgorICovCisjZGVmaW5lIFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkgXAorCShw b29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gXAorCSBETEJPV19E TUxfQURBUFRJVkVfR0xPQkFMIHx8IFwKKwkgdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPT0g TlVMTCkKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzCisgKiAtLS0t LS0tLS0tLS0tLS0tCisgKi8KKworLyogUG9pbnRlciB0byBzaGFyZWQgbWVtb3J5IHN0cnVjdHVy ZSAqLworc3RhdGljIFRyYWNrVGFibGVNdXRhdGlvblNobWVtICp0cmFja190YWJsZV9tdXRhdGlv bl9zaG1lbSA9IE5VTEw7CisKKy8qIFBlci1wcm9jZXNzIGNvbGQgc3RhcnQgdHJhY2tpbmcgKG5v dCBpbiBzaGFyZWQgbWVtb3J5KSAqLworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHByb2Nlc3Nfc3Rh cnRfdGltZTsKK3N0YXRpYyBib29sIGNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwor LyogLS0tLS0tLS0tLS0tLS0tLQorICogSGVscGVyIG1hY3JvcyBmb3IgZmxleGlibGUgYXJyYXlz IGluIHNoYXJlZCBtZW1vcnkKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBHZXQgcG9p bnRlciB0byBidWNrZXQgYXJyYXkgaW4gdGFibGUgbWFwICovCisjZGVmaW5lIFRBQkxFX01BUF9C VUNLRVRTKG1hcCkgXAorCSgoaW50ICopKChjaGFyICopKG1hcCkgKyBcCisJCXNpemVvZihUcmFj a1RhYmxlTXV0YXRpb25IYXNoVGFibGUpKSkKKworLyogR2V0IHBvaW50ZXIgdG8gZW50cnkgYXJy YXkgaW4gdGFibGUgbWFwICovCisjZGVmaW5lIFRBQkxFX01BUF9FTlRSSUVTKG1hcCkgXAorCSgo VHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKikoKGNoYXIgKikobWFwKSArIFwKKwkJc2l6ZW9mKFRy YWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSkgKyBcCisJCShtYXApLT5udW1fYnVja2V0cyAqIHNp emVvZihpbnQpKSkKKworLyogR2V0IHBvaW50ZXIgdG8gYnVja2V0IGFycmF5IGluIHBhcnNlIGNh Y2hlICovCisjZGVmaW5lIFBBUlNFX0NBQ0hFX0JVQ0tFVFMoY2FjaGUpIFwKKwkoKGludCAqKSgo Y2hhciAqKShjYWNoZSkgKyBzaXplb2YoUXVlcnlQYXJzZUNhY2hlKSkpCisKKy8qIEdldCBwb2lu dGVyIHRvIGVudHJ5IGFycmF5IGluIHBhcnNlIGNhY2hlICovCisjZGVmaW5lIFBBUlNFX0NBQ0hF X0VOVFJJRVMoY2FjaGUpIFwKKwkoKFF1ZXJ5UGFyc2VFbnRyeSAqKSgoY2hhciAqKShjYWNoZSkg KyBcCisJCXNpemVvZihRdWVyeVBhcnNlQ2FjaGUpICsgXAorCQkoY2FjaGUpLT5udW1fYnVja2V0 cyAqIHNpemVvZihpbnQpKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogU2VtYXBob3JlIGxv Y2sgaGVscGVycworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBpbmxpbmUgdm9p ZAordGFibGVfbWFwX2xvY2sodm9pZCkKK3sKKwlwb29sX3NlbWFwaG9yZV9sb2NrKFRSQUNLX1RB QkxFX01VVEFUSU9OX1RBQkxFX1NFTSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVf bWFwX3VubG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBob3JlX3VubG9jayhUUkFDS19UQUJMRV9N VVRBVElPTl9UQUJMRV9TRU0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BhcnNlX2NhY2hl X2xvY2sodm9pZCkKK3sKKwlwb29sX3NlbWFwaG9yZV9sb2NrKFRSQUNLX1RBQkxFX01VVEFUSU9O X1FVRVJZX1NFTSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGFyc2VfY2FjaGVfdW5sb2Nr KHZvaWQpCit7CisJcG9vbF9zZW1hcGhvcmVfdW5sb2NrKFRSQUNLX1RBQkxFX01VVEFUSU9OX1FV RVJZX1NFTSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIEhhc2ggZnVuY3Rpb25zCisg KiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEZOVi0xYSBoYXNoIGZvciB0YWJsZS9k YXRhYmFzZSBvaWQgcGFpcgorICovCitzdGF0aWMgdWludDMyCitmbnYxYV9oYXNoX3RhYmxlX2tl eShpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQpCit7CisJdWludDMyIGhhc2ggPSAyMTY2MTM2MjYx dTsJLyogRk5WIG9mZnNldCBiYXNpcyAqLworCXVpbnQzMiBkYXRhWzJdOworCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmJ5dGVzOworCXNpemVfdCBpOworCisJZGF0YVswXSA9ICh1aW50MzIpIHRhYmxl X29pZDsKKwlkYXRhWzFdID0gKHVpbnQzMikgZGJvaWQ7CisJYnl0ZXMgPSAoY29uc3QgdW5zaWdu ZWQgY2hhciAqKSBkYXRhOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihkYXRhKTsgaSsrKQor CXsKKwkJaGFzaCBePSBieXRlc1tpXTsKKwkJaGFzaCAqPSAxNjc3NzYxOXU7CQkvKiBGTlYgcHJp bWUgKi8KKwl9CisKKwlyZXR1cm4gaGFzaDsKK30KKworLyoKKyAqIEZOVi0xYSBoYXNoIGZvciA2 NC1iaXQgdmFsdWUKKyAqLworc3RhdGljIHVpbnQ2NAorZm52MWFfaGFzaF82NChjb25zdCBjaGFy ICpzdHIsIHNpemVfdCBsZW4pCit7CisJLyogRk5WIG9mZnNldCBiYXNpcyBmb3IgNjQtYml0ICov CisJdWludDY0IGhhc2ggPSAxNDY5NTk4MTAzOTM0NjY1NjAzN1VMTDsKKwlzaXplX3QgaTsKKwor CWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwl7CisJCWhhc2ggXj0gKHVpbnQ4KXN0cltpXTsK KwkJaGFzaCAqPSAxMDk5NTExNjI4MjExVUxMOwkvKiBGTlYgcHJpbWUgKi8KKwl9CisKKwlyZXR1 cm4gaGFzaDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogVGltZSB1dGlsaXRpZXMKKyAq IC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogR2V0IGVsYXBzZWQgdGltZSBpbiBtaWNy b3NlY29uZHMgYmV0d2VlbiB0d28gdGltZXZhbHMKKyAqLworc3RhdGljIGludDY0CitlbGFwc2Vk X3VzKHN0cnVjdCB0aW1ldmFsICpzdGFydCwgc3RydWN0IHRpbWV2YWwgKmVuZCkKK3sKKwlyZXR1 cm4gKChpbnQ2NCkoZW5kLT50dl9zZWMgLSBzdGFydC0+dHZfc2VjKSAqIDEwMDAwMDApCisJCSsg KGVuZC0+dHZfdXNlYyAtIHN0YXJ0LT50dl91c2VjKTsKK30KKworLyoKKyAqIEdldCBjdXJyZW50 IHRpbWUKKyAqLworc3RhdGljIHZvaWQKK2dldF9jdXJyZW50X3RpbWUoc3RydWN0IHRpbWV2YWwg KnR2KQoreworCWdldHRpbWVvZmRheSh0diwgTlVMTCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0KKyAqIERhdGFiYXNlIG9pZCBsb29rdXAKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitz dGF0aWMgaW50Cit0cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkX2ludGVybmFs KHZvaWQpCit7CisJaW50CQkJb2lkID0gMDsKKwlzdGF0aWMgUE9PTF9SRUxDQUNIRSAqcmVsY2Fj aGU7CisJUE9PTF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQ7CisJUE9PTF9TRVNTSU9OX0NPTlRF WFQgKnNlc3Npb25fY29udGV4dDsKKworCS8qIFNhZmV0eSBjaGVjazogbXVzdCBoYXZlIHNobWVt IGluaXRpYWxpemVkICovCisJaWYgKHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwp CisJCXJldHVybiBvaWQ7CisKKwlzZXNzaW9uX2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2Nv bnRleHQoZmFsc2UpOworCWlmIChzZXNzaW9uX2NvbnRleHQgPT0gTlVMTCkKKwkJcmV0dXJuIG9p ZDsKKworCWJhY2tlbmQgPSBzZXNzaW9uX2NvbnRleHQtPmJhY2tlbmQ7CisJaWYgKGJhY2tlbmQg PT0gTlVMTCB8fAorCQlNQUlOX0NPTk5FQ1RJT04oYmFja2VuZCkgPT0gTlVMTCB8fAorCQlNQUlO X0NPTk5FQ1RJT04oYmFja2VuZCktPnNwID09IE5VTEwpCisJCXJldHVybiBvaWQ7CisKKwkvKiBF bnN1cmUgZGF0YWJhc2UgbmFtZSBpcyB2YWxpZCAqLworCWlmIChNQUlOX0NPTk5FQ1RJT04oYmFj a2VuZCktPnNwLT5kYXRhYmFzZSA9PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJaWYgKCFyZWxj YWNoZSkKKwl7CisJCXJlbGNhY2hlID0gcG9vbF9jcmVhdGVfcmVsY2FjaGUoCisJCQkJCXBvb2xf Y29uZmlnLT5yZWxjYWNoZV9zaXplLAorCQkJCQlEQVRBQkFTRV9UT19PSURfUVVFUlksCisJCQkJ CWludF9yZWdpc3Rlcl9mdW5jLAorCQkJCQlpbnRfdW5yZWdpc3Rlcl9mdW5jLAorCQkJCQlmYWxz ZSk7CisJCWlmIChyZWxjYWNoZSA9PSBOVUxMKQorCQl7CisJCQllcmVwb3J0KExPRywKKwkJCQko ZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkJImVycm9yIGNyZWF0aW5nIHJl bGNhY2hlIikpKTsKKwkJCXJldHVybiBvaWQ7CisJCX0KKwl9CisKKwlvaWQgPSAoaW50KSAoaW50 cHRyX3QpIHBvb2xfc2VhcmNoX3JlbGNhY2hlKAorCQkJCXJlbGNhY2hlLCBiYWNrZW5kLAorCQkJ CU1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AtPmRhdGFiYXNlKTsKKwlyZXR1cm4gb2lkOwor fQorCitpbnQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZCh2b2lk KQoreworCXJldHVybiB0cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkX2ludGVy bmFsKCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIFRhYmxlIG11dGF0aW9uIGhhc2gg dGFibGUgb3BlcmF0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBJbml0 aWFsaXplIHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUKKyAqLworc3RhdGljIHZvaWQKK3RhYmxl X21hcF9pbml0KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLAorCQkJICAgaW50IG51 bV9idWNrZXRzLCBpbnQgbWF4X2VudHJpZXMpCit7CisJaW50ICpidWNrZXRzOworCVRyYWNrVGFi bGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzOworCWludCBpOworCWludCBpbnZhbGlkID0gVFJBQ0tf VEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKworCW1hcC0+bnVtX2J1Y2tldHMgPSBudW1f YnVja2V0czsKKwltYXAtPm1heF9lbnRyaWVzID0gbWF4X2VudHJpZXM7CisJbWFwLT5udW1fZW50 cmllcyA9IDA7CisJbWFwLT5mcmVlX2xpc3RfaGVhZCA9IDA7CisKKwlidWNrZXRzID0gVEFCTEVf TUFQX0JVQ0tFVFMobWFwKTsKKwllbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwor CS8qIEluaXRpYWxpemUgYWxsIGJ1Y2tldHMgdG8gZW1wdHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwg bnVtX2J1Y2tldHM7IGkrKykKKwkJYnVja2V0c1tpXSA9IGludmFsaWQ7CisKKwkvKiBJbml0aWFs aXplIGZyZWUgbGlzdCAtIGNoYWluIGFsbCBlbnRyaWVzICovCisJZm9yIChpID0gMDsgaSA8IG1h eF9lbnRyaWVzOyBpKyspCisJeworCQllbnRyaWVzW2ldLmluX3VzZSA9IGZhbHNlOworCQllbnRy aWVzW2ldLm5leHQgPSAoaSA8IG1heF9lbnRyaWVzIC0gMSkgPworCQkJaSArIDEgOiBpbnZhbGlk OworCX0KKworCWVyZXBvcnQoREVCVUcxLAorCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlv bjogIgorCQkJCSJ0YWJsZSBtYXAgaW5pdCAlZCBidWNrZXRzLCAiCisJCQkJIiVkIG1heCBlbnRy aWVzIiwKKwkJCQludW1fYnVja2V0cywgbWF4X2VudHJpZXMpKSk7Cit9CisKKy8qCisgKiBBbGxv Y2F0ZSBhbiBlbnRyeSBmcm9tIHRoZSBmcmVlIGxpc3QKKyAqLworc3RhdGljIGludAordGFibGVf bWFwX2FsbG9jX2VudHJ5KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwKQoreworCVRy YWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzOworCWludCBpZHg7CisJaW50IGludmFsaWQg PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJZW50cmllcyA9IFRBQkxF X01BUF9FTlRSSUVTKG1hcCk7CisKKwlpZiAobWFwLT5mcmVlX2xpc3RfaGVhZCA9PSBpbnZhbGlk KQorCQlyZXR1cm4gaW52YWxpZDsKKworCWlkeCA9IG1hcC0+ZnJlZV9saXN0X2hlYWQ7CisJbWFw LT5mcmVlX2xpc3RfaGVhZCA9IGVudHJpZXNbaWR4XS5uZXh0OworCWVudHJpZXNbaWR4XS5pbl91 c2UgPSB0cnVlOworCWVudHJpZXNbaWR4XS5uZXh0ID0gaW52YWxpZDsKKwltYXAtPm51bV9lbnRy aWVzKys7CisKKwlyZXR1cm4gaWR4OworfQorCisvKgorICogRnJlZSBhbiBlbnRyeSBiYWNrIHRv IHRoZSBmcmVlIGxpc3QKKyAqLworc3RhdGljIHZvaWQKK3RhYmxlX21hcF9mcmVlX2VudHJ5KFRy YWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLAorCQkJCQkgaW50IGlkeCkKK3sKKwlUcmFj a1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsKKworCWVudHJpZXMgPSBUQUJMRV9NQVBfRU5U UklFUyhtYXApOworCisJZW50cmllc1tpZHhdLmluX3VzZSA9IGZhbHNlOworCWVudHJpZXNbaWR4 XS5uZXh0ID0gbWFwLT5mcmVlX2xpc3RfaGVhZDsKKwltYXAtPmZyZWVfbGlzdF9oZWFkID0gaWR4 OworCW1hcC0+bnVtX2VudHJpZXMtLTsKK30KKworLyoKKyAqIExvb2sgdXAgYSB0YWJsZSBpbiB0 aGUgaGFzaCB0YWJsZS4KKyAqIFJldHVybnMgZW50cnkgaW5kZXggb3IgSU5WQUxJRF9JTkRFWCBp ZiBub3QgZm91bmQuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZC4KKyAqLworc3Rh dGljIGludAordGFibGVfbWFwX2xvb2t1cChUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1h cCwKKwkJCQkgaW50IHRhYmxlX29pZCwgaW50IGRib2lkLAorCQkJCSB1aW50MzIgaGFzaCkKK3sK KwlpbnQgKmJ1Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApOworCVRyYWNrVGFibGVNdXRh dGlvbkVudHJ5ICplbnRyaWVzOworCWludCBidWNrZXQgPSBoYXNoICUgbWFwLT5udW1fYnVja2V0 czsKKwlpbnQgaWR4ID0gYnVja2V0c1tidWNrZXRdOworCWludCBpbnZhbGlkID0gVFJBQ0tfVEFC TEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKworCWVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklF UyhtYXApOworCisJd2hpbGUgKGlkeCAhPSBpbnZhbGlkKQorCXsKKwkJaWYgKGVudHJpZXNbaWR4 XS5oYXNoID09IGhhc2ggJiYKKwkJCWVudHJpZXNbaWR4XS50YWJsZV9vaWQgPT0gdGFibGVfb2lk ICYmCisJCQllbnRyaWVzW2lkeF0uZGJvaWQgPT0gZGJvaWQpCisJCXsKKwkJCXJldHVybiBpZHg7 CisJCX0KKwkJaWR4ID0gZW50cmllc1tpZHhdLm5leHQ7CisJfQorCisJcmV0dXJuIGludmFsaWQ7 Cit9CisKKy8qCisgKiBJbnNlcnQgb3IgdXBkYXRlIGEgdGFibGUgZW50cnkuCisgKiBNdXN0IGJl IGNhbGxlZCB3aXRoIGxvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQKK3RhYmxlX21hcF9pbnNl cnQoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXAsCisJCQkJIGludCB0YWJsZV9vaWQs IGludCBkYm9pZCwKKwkJCQkgdWludDMyIGhhc2gsCisJCQkJIHN0cnVjdCB0aW1ldmFsICp3cml0 ZV90aW1lKQoreworCWludCAqYnVja2V0cyA9IFRBQkxFX01BUF9CVUNLRVRTKG1hcCk7CisJVHJh Y2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisJaW50IGJ1Y2tldCA9IGhhc2ggJSBtYXAt Pm51bV9idWNrZXRzOworCWludCBpZHg7CisJaW50IGludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRB VElPTl9JTlZBTElEX0lOREVYOworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7 CisKKwkvKiBDaGVjayBpZiBlbnRyeSBhbHJlYWR5IGV4aXN0cyAqLworCWlkeCA9IHRhYmxlX21h cF9sb29rdXAobWFwLCB0YWJsZV9vaWQsIGRib2lkLCBoYXNoKTsKKwlpZiAoaWR4ICE9IGludmFs aWQpCisJeworCQkvKiBVcGRhdGUgbGFzdCB3cml0ZSB0aW1lOyBrZWVwIGZpcnN0X3dyaXRlX3Rp bWUgKi8KKwkJZW50cmllc1tpZHhdLmxhc3Rfd3JpdGVfdGltZSA9ICp3cml0ZV90aW1lOworCQly ZXR1cm47CisJfQorCisJLyogQWxsb2NhdGUgbmV3IGVudHJ5ICovCisJaWR4ID0gdGFibGVfbWFw X2FsbG9jX2VudHJ5KG1hcCk7CisJaWYgKGlkeCA9PSBpbnZhbGlkKQorCXsKKwkJaW50IGI7CisK KwkJLyogVGFibGUgaXMgZnVsbCAtIGV2aWN0IGZpcnN0IG5vbi1lbXB0eSBidWNrZXQgKi8KKwkJ Zm9yIChiID0gMDsgYiA8IG1hcC0+bnVtX2J1Y2tldHM7IGIrKykKKwkJeworCQkJaWYgKGJ1Y2tl dHNbYl0gIT0gaW52YWxpZCkKKwkJCXsKKwkJCQlpbnQgdmljdGltID0gYnVja2V0c1tiXTsKKwor CQkJCWJ1Y2tldHNbYl0gPSBlbnRyaWVzW3ZpY3RpbV0ubmV4dDsKKwkJCQl0YWJsZV9tYXBfZnJl ZV9lbnRyeShtYXAsIHZpY3RpbSk7CisJCQkJaWR4ID0gdGFibGVfbWFwX2FsbG9jX2VudHJ5KG1h cCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaWR4ID09IGludmFsaWQpCisJCXsK KwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjog IgorCQkJCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBlbnRyeSAiCisJCQkJCQkiZm9yIG9pZCAlZCAo ZGJvaWQgJWQpIiwKKwkJCQkJCXRhYmxlX29pZCwgZGJvaWQpKSk7CisJCQlyZXR1cm47CisJCX0K Kwl9CisKKwkvKiBJbml0aWFsaXplIG5ldyBlbnRyeSAqLworCWVudHJpZXNbaWR4XS50YWJsZV9v aWQgPSB0YWJsZV9vaWQ7CisJZW50cmllc1tpZHhdLmRib2lkID0gZGJvaWQ7CisJZW50cmllc1tp ZHhdLmhhc2ggPSBoYXNoOworCWVudHJpZXNbaWR4XS5maXJzdF93cml0ZV90aW1lID0gKndyaXRl X3RpbWU7CisJZW50cmllc1tpZHhdLmxhc3Rfd3JpdGVfdGltZSA9ICp3cml0ZV90aW1lOworCisJ LyogSW5zZXJ0IGF0IGhlYWQgb2YgYnVja2V0IGNoYWluICovCisJZW50cmllc1tpZHhdLm5leHQg PSBidWNrZXRzW2J1Y2tldF07CisJYnVja2V0c1tidWNrZXRdID0gaWR4OworCisJZXJlcG9ydChE RUJVRzIsCisJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJIm1hcmtlZCBv aWQgJWQgKGRib2lkICVkKSB3cml0dGVuIiwKKwkJCQl0YWJsZV9vaWQsIGRib2lkKSkpOworfQor CisvKgorICogUmVtb3ZlIGV4cGlyZWQgZW50cmllcyBmcm9tIHRoZSB0YWJsZSBtYXAuCisgKiBN dXN0IGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQKK3RhYmxlX21h cF9jbGVhbnVwX2V4cGlyZWQoCisJVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXAsIHVp bnQ2NCB0dGxfdXMpCit7CisJaW50ICpidWNrZXRzID0gVEFCTEVfTUFQX0JVQ0tFVFMobWFwKTsK KwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7 CisJaW50NjQgbWF4X3N0YWxlX3VzOworCWludCByZW1vdmVkID0gMDsKKwlpbnQgYjsKKwlpbnQg aW52YWxpZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisKKwllbnRyaWVz ID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwlnZXRfY3VycmVudF90aW1lKCZub3cpOworCisJ bWF4X3N0YWxlX3VzID0gKGludDY0KXBvb2xfY29uZmlnCisJCS0+dHJhY2tfdGFibGVfbXV0YXRp b25fbWF4X3N0YWxlbmVzcyAqIDEwMDBMTDsKKworCWZvciAoYiA9IDA7IGIgPCBtYXAtPm51bV9i dWNrZXRzOyBiKyspCisJeworCQlpbnQgKnByZXZfcHRyID0gJmJ1Y2tldHNbYl07CisJCWludCBp ZHggPSBidWNrZXRzW2JdOworCisJCXdoaWxlIChpZHggIT0gaW52YWxpZCkKKwkJeworCQkJaW50 NjQgYWdlOworCQkJaW50NjQgdG90YWxfYWdlOworCQkJYm9vbCBleHBpcmVkOworCisJCQlhZ2Ug PSBlbGFwc2VkX3VzKAorCQkJCSZlbnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lLCAmbm93KTsK KwkJCWV4cGlyZWQgPSAoYWdlID4gKGludDY0KXR0bF91cyk7CisKKwkJCS8qCisJCQkgKiBBbHNv IGV2aWN0IGVudHJpZXMgdGhhdCBleGNlZWQKKwkJCSAqIG1heF9zdGFsZW5lc3MgZnJvbSBmaXJz dCB3cml0ZS4KKwkJCSAqLworCQkJaWYgKCFleHBpcmVkICYmIG1heF9zdGFsZV91cyA+IDApCisJ CQl7CisJCQkJdG90YWxfYWdlID0gZWxhcHNlZF91cygKKwkJCQkJJmVudHJpZXNbaWR4XS5maXJz dF93cml0ZV90aW1lLAorCQkJCQkmbm93KTsKKwkJCQlleHBpcmVkID0gKHRvdGFsX2FnZSA+PSBt YXhfc3RhbGVfdXMpOworCQkJfQorCisJCQlpZiAoZXhwaXJlZCkKKwkJCXsKKwkJCQkvKiBFbnRy eSBoYXMgZXhwaXJlZCAtIHJlbW92ZSBpdCAqLworCQkJCWludCBuZXh0ID0gZW50cmllc1tpZHhd Lm5leHQ7CisKKwkJCQkqcHJldl9wdHIgPSBuZXh0OworCQkJCXRhYmxlX21hcF9mcmVlX2VudHJ5 KG1hcCwgaWR4KTsKKwkJCQlpZHggPSBuZXh0OworCQkJCXJlbW92ZWQrKzsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQlwcmV2X3B0ciA9ICZlbnRyaWVzW2lkeF0ubmV4dDsKKwkJCQlpZHggPSBl bnRyaWVzW2lkeF0ubmV4dDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChyZW1vdmVkID4gMCkKKwl7 CisJCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIK KwkJCQkJImNsZWFuZWQgdXAgJWQgZXhwaXJlZCBlbnRyaWVzIiwKKwkJCQkJcmVtb3ZlZCkpKTsK Kwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIFBhcnNlIGNhY2hlIG9wZXJhdGlvbnMK KyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogSW5pdGlhbGl6ZSBwYXJzZSBjYWNo ZQorICovCitzdGF0aWMgdm9pZAorcGFyc2VfY2FjaGVfaW5pdChRdWVyeVBhcnNlQ2FjaGUgKmNh Y2hlLAorCQkJCSBpbnQgbnVtX2J1Y2tldHMsIGludCBtYXhfZW50cmllcykKK3sKKwlpbnQgKmJ1 Y2tldHM7CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzOworCWludCBpOworCWludCBpbnZhbGlk ID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKworCWNhY2hlLT5udW1fYnVj a2V0cyA9IG51bV9idWNrZXRzOworCWNhY2hlLT5tYXhfZW50cmllcyA9IG1heF9lbnRyaWVzOwor CWNhY2hlLT5udW1fZW50cmllcyA9IDA7CisJY2FjaGUtPmZyZWVfbGlzdF9oZWFkID0gMDsKKwlj YWNoZS0+bHJ1X2hlYWQgPSBpbnZhbGlkOworCWNhY2hlLT5scnVfdGFpbCA9IGludmFsaWQ7CisK KwlidWNrZXRzID0gUEFSU0VfQ0FDSEVfQlVDS0VUUyhjYWNoZSk7CisJZW50cmllcyA9IFBBUlNF X0NBQ0hFX0VOVFJJRVMoY2FjaGUpOworCisJLyogSW5pdGlhbGl6ZSBhbGwgYnVja2V0cyB0byBl bXB0eSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKQorCQlidWNrZXRzW2ld ID0gaW52YWxpZDsKKworCS8qIEluaXRpYWxpemUgZnJlZSBsaXN0ICovCisJZm9yIChpID0gMDsg aSA8IG1heF9lbnRyaWVzOyBpKyspCisJeworCQllbnRyaWVzW2ldLmluX3VzZSA9IGZhbHNlOwor CQllbnRyaWVzW2ldLm5leHQgPSAoaSA8IG1heF9lbnRyaWVzIC0gMSkgPworCQkJaSArIDEgOiBp bnZhbGlkOworCQllbnRyaWVzW2ldLmxydV9wcmV2ID0gaW52YWxpZDsKKwkJZW50cmllc1tpXS5s cnVfbmV4dCA9IGludmFsaWQ7CisJfQorCisJZXJlcG9ydChERUJVRzEsCisJCShlcnJtc2coInRy YWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJInBhcnNlIGNhY2hlIGluaXQgJWQgYnVja2V0cywg IgorCQkJCSIlZCBtYXggZW50cmllcyIsCisJCQkJbnVtX2J1Y2tldHMsIG1heF9lbnRyaWVzKSkp OworfQorCisvKgorICogTW92ZSBlbnRyeSB0byBmcm9udCBvZiBMUlUgbGlzdCAobW9zdCByZWNl bnRseSB1c2VkKQorICovCitzdGF0aWMgdm9pZAorcGFyc2VfY2FjaGVfbHJ1X3RvdWNoKFF1ZXJ5 UGFyc2VDYWNoZSAqY2FjaGUsIGludCBpZHgpCit7CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVz ID0gUEFSU0VfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJaW50IGludmFsaWQgPSBUUkFDS19UQUJM RV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJLyogQWxyZWFkeSBhdCBoZWFkPyAqLworCWlm IChjYWNoZS0+bHJ1X2hlYWQgPT0gaWR4KQorCQlyZXR1cm47CisKKwkvKiBSZW1vdmUgZnJvbSBj dXJyZW50IHBvc2l0aW9uICovCisJaWYgKGVudHJpZXNbaWR4XS5scnVfcHJldiAhPSBpbnZhbGlk KQorCQllbnRyaWVzW2VudHJpZXNbaWR4XS5scnVfcHJldl0ubHJ1X25leHQgPQorCQkJZW50cmll c1tpZHhdLmxydV9uZXh0OworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X25leHQgIT0gaW52YWxpZCkK KwkJZW50cmllc1tlbnRyaWVzW2lkeF0ubHJ1X25leHRdLmxydV9wcmV2ID0KKwkJCWVudHJpZXNb aWR4XS5scnVfcHJldjsKKwlpZiAoY2FjaGUtPmxydV90YWlsID09IGlkeCkKKwkJY2FjaGUtPmxy dV90YWlsID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCisJLyogSW5zZXJ0IGF0IGhlYWQgKi8K KwllbnRyaWVzW2lkeF0ubHJ1X3ByZXYgPSBpbnZhbGlkOworCWVudHJpZXNbaWR4XS5scnVfbmV4 dCA9IGNhY2hlLT5scnVfaGVhZDsKKwlpZiAoY2FjaGUtPmxydV9oZWFkICE9IGludmFsaWQpCisJ CWVudHJpZXNbY2FjaGUtPmxydV9oZWFkXS5scnVfcHJldiA9IGlkeDsKKwljYWNoZS0+bHJ1X2hl YWQgPSBpZHg7CisJaWYgKGNhY2hlLT5scnVfdGFpbCA9PSBpbnZhbGlkKQorCQljYWNoZS0+bHJ1 X3RhaWwgPSBpZHg7Cit9CisKKy8qCisgKiBBZGQgZW50cnkgdG8gTFJVIGxpc3QgKGF0IGhlYWQp CisgKi8KK3N0YXRpYyB2b2lkCitwYXJzZV9jYWNoZV9scnVfYWRkKFF1ZXJ5UGFyc2VDYWNoZSAq Y2FjaGUsIGludCBpZHgpCit7CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzID0gUEFSU0VfQ0FD SEVfRU5UUklFUyhjYWNoZSk7CisJaW50IGludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9J TlZBTElEX0lOREVYOworCisJZW50cmllc1tpZHhdLmxydV9wcmV2ID0gaW52YWxpZDsKKwllbnRy aWVzW2lkeF0ubHJ1X25leHQgPSBjYWNoZS0+bHJ1X2hlYWQ7CisKKwlpZiAoY2FjaGUtPmxydV9o ZWFkICE9IGludmFsaWQpCisJCWVudHJpZXNbY2FjaGUtPmxydV9oZWFkXS5scnVfcHJldiA9IGlk eDsKKworCWNhY2hlLT5scnVfaGVhZCA9IGlkeDsKKworCWlmIChjYWNoZS0+bHJ1X3RhaWwgPT0g aW52YWxpZCkKKwkJY2FjaGUtPmxydV90YWlsID0gaWR4OworfQorCisvKgorICogUmVtb3ZlIGVu dHJ5IGZyb20gTFJVIGxpc3QKKyAqLworc3RhdGljIHZvaWQKK3BhcnNlX2NhY2hlX2xydV9yZW1v dmUoUXVlcnlQYXJzZUNhY2hlICpjYWNoZSwgaW50IGlkeCkKK3sKKwlRdWVyeVBhcnNlRW50cnkg KmVudHJpZXMgPSBQQVJTRV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKwlpbnQgaW52YWxpZCA9IFRS QUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisKKwlpZiAoZW50cmllc1tpZHhdLmxy dV9wcmV2ICE9IGludmFsaWQpCisJCWVudHJpZXNbZW50cmllc1tpZHhdLmxydV9wcmV2XS5scnVf bmV4dCA9CisJCQllbnRyaWVzW2lkeF0ubHJ1X25leHQ7CisJZWxzZQorCQljYWNoZS0+bHJ1X2hl YWQgPSBlbnRyaWVzW2lkeF0ubHJ1X25leHQ7CisKKwlpZiAoZW50cmllc1tpZHhdLmxydV9uZXh0 ICE9IGludmFsaWQpCisJCWVudHJpZXNbZW50cmllc1tpZHhdLmxydV9uZXh0XS5scnVfcHJldiA9 CisJCQllbnRyaWVzW2lkeF0ubHJ1X3ByZXY7CisJZWxzZQorCQljYWNoZS0+bHJ1X3RhaWwgPSBl bnRyaWVzW2lkeF0ubHJ1X3ByZXY7CisKKwllbnRyaWVzW2lkeF0ubHJ1X3ByZXYgPSBpbnZhbGlk OworCWVudHJpZXNbaWR4XS5scnVfbmV4dCA9IGludmFsaWQ7Cit9CisKKy8qCisgKiBBbGxvY2F0 ZSBlbnRyeSBmcm9tIGZyZWUgbGlzdCwgZXZpY3RpbmcgTFJVIGlmIG5lZWRlZAorICovCitzdGF0 aWMgaW50CitwYXJzZV9jYWNoZV9hbGxvY19lbnRyeShRdWVyeVBhcnNlQ2FjaGUgKmNhY2hlKQor eworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50cmllcyA9IFBBUlNFX0NBQ0hFX0VOVFJJRVMoY2FjaGUp OworCWludCAqYnVja2V0cyA9IFBBUlNFX0NBQ0hFX0JVQ0tFVFMoY2FjaGUpOworCWludCBpZHg7 CisJaW50IGludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJ aWYgKGNhY2hlLT5mcmVlX2xpc3RfaGVhZCAhPSBpbnZhbGlkKQorCXsKKwkJaWR4ID0gY2FjaGUt PmZyZWVfbGlzdF9oZWFkOworCQljYWNoZS0+ZnJlZV9saXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0u bmV4dDsKKwkJZW50cmllc1tpZHhdLmluX3VzZSA9IHRydWU7CisJCWVudHJpZXNbaWR4XS5uZXh0 ID0gaW52YWxpZDsKKwkJY2FjaGUtPm51bV9lbnRyaWVzKys7CisJCXJldHVybiBpZHg7CisJfQor CisJLyogTm8gZnJlZSBlbnRyaWVzIC0gZXZpY3QgTFJVICovCisJaWYgKGNhY2hlLT5scnVfdGFp bCA9PSBpbnZhbGlkKQorCQlyZXR1cm4gaW52YWxpZDsKKworCWlkeCA9IGNhY2hlLT5scnVfdGFp bDsKKworCS8qIFJlbW92ZSBmcm9tIGhhc2ggYnVja2V0ICovCisJeworCQlpbnQgYnVja2V0Owor CQlpbnQgKnByZXZfcHRyOworCQlpbnQgY3VycjsKKworCQlidWNrZXQgPSBlbnRyaWVzW2lkeF0u cXVlcnlfaGFzaCAlCisJCQkJIGNhY2hlLT5udW1fYnVja2V0czsKKwkJcHJldl9wdHIgPSAmYnVj a2V0c1tidWNrZXRdOworCQljdXJyID0gYnVja2V0c1tidWNrZXRdOworCisJCXdoaWxlIChjdXJy ICE9IGludmFsaWQpCisJCXsKKwkJCWlmIChjdXJyID09IGlkeCkKKwkJCXsKKwkJCQkqcHJldl9w dHIgPSBlbnRyaWVzW2N1cnJdLm5leHQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQlwcmV2X3B0ciA9 ICZlbnRyaWVzW2N1cnJdLm5leHQ7CisJCQljdXJyID0gZW50cmllc1tjdXJyXS5uZXh0OworCQl9 CisJfQorCisJLyogUmVtb3ZlIGZyb20gTFJVIGxpc3QgKi8KKwlwYXJzZV9jYWNoZV9scnVfcmVt b3ZlKGNhY2hlLCBpZHgpOworCisJLyogUmVpbml0aWFsaXplIGVudHJ5ICovCisJZW50cmllc1tp ZHhdLmluX3VzZSA9IHRydWU7CisJZW50cmllc1tpZHhdLm5leHQgPSBpbnZhbGlkOworCisJcmV0 dXJuIGlkeDsKK30KKworLyoKKyAqIExvb2sgdXAgYSBxdWVyeSBpbiB0aGUgcGFyc2UgY2FjaGUK KyAqLworc3RhdGljIGludAorcGFyc2VfY2FjaGVfbG9va3VwKFF1ZXJ5UGFyc2VDYWNoZSAqY2Fj aGUsIHVpbnQ2NCBoYXNoKQoreworCWludCAqYnVja2V0cyA9IFBBUlNFX0NBQ0hFX0JVQ0tFVFMo Y2FjaGUpOworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50cmllcyA9IFBBUlNFX0NBQ0hFX0VOVFJJRVMo Y2FjaGUpOworCWludCBidWNrZXQgPSBoYXNoICUgY2FjaGUtPm51bV9idWNrZXRzOworCWludCBp ZHggPSBidWNrZXRzW2J1Y2tldF07CisJaW50IGludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElP Tl9JTlZBTElEX0lOREVYOworCisJd2hpbGUgKGlkeCAhPSBpbnZhbGlkKQorCXsKKwkJaWYgKGVu dHJpZXNbaWR4XS5xdWVyeV9oYXNoID09IGhhc2gpCisJCQlyZXR1cm4gaWR4OworCQlpZHggPSBl bnRyaWVzW2lkeF0ubmV4dDsKKwl9CisKKwlyZXR1cm4gaW52YWxpZDsKK30KKworLyogLS0tLS0t LS0tLS0tLS0tLQorICogUXVlcnkgbm9ybWFsaXphdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLQor ICovCisKKy8qCisgKiBTaW1wbGUgcXVlcnkgbm9ybWFsaXphdGlvbjoKKyAqIC0gU3RyaXAgY29t bWVudHMgKC0tIGFuZCBDLXN0eWxlIGJsb2NrIGNvbW1lbnRzKQorICogLSBDb2xsYXBzZSB3aGl0 ZXNwYWNlCisgKiAtIENvbnZlcnQgdG8gbG93ZXJjYXNlIChleGNlcHQgaW5zaWRlIHN0cmluZ3Mp CisgKiAtIFJlcGxhY2UgbGl0ZXJhbCB2YWx1ZXMgd2l0aCBwbGFjZWhvbGRlcnMKKyAqLworc3Rh dGljIHNpemVfdAorbm9ybWFsaXplX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBjaGFyICpvdXRw dXQsCisJCQkJc2l6ZV90IG91dHB1dF9zaXplKQoreworCWNvbnN0IGNoYXIgKnNyYyA9IHF1ZXJ5 OworCWNoYXIgKmRzdCA9IG91dHB1dDsKKwljaGFyICpkc3RfZW5kID0gb3V0cHV0ICsgb3V0cHV0 X3NpemUgLSAxOworCWJvb2wgaW5fc3RyaW5nID0gZmFsc2U7CisJY2hhciBzdHJpbmdfY2hhciA9 IDA7CisJYm9vbCBsYXN0X3dhc19zcGFjZSA9IHRydWU7CisKKwl3aGlsZSAoKnNyYyAmJiBkc3Qg PCBkc3RfZW5kKQorCXsKKwkJLyogSGFuZGxlIHN0cmluZyBsaXRlcmFscyAqLworCQlpZiAoaW5f c3RyaW5nKQorCQl7CisJCQlpZiAoKnNyYyA9PSBzdHJpbmdfY2hhcikKKwkJCXsKKwkJCQlpZiAo KihzcmMgKyAxKSA9PSBzdHJpbmdfY2hhcikKKwkJCQl7CisJCQkJCS8qIEVzY2FwZWQgcXVvdGUg Ki8KKwkJCQkJc3JjICs9IDI7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpbl9zdHJpbmcg PSBmYWxzZTsKKwkJCQkvKiBSZXBsYWNlIHN0cmluZyB3aXRoIHBsYWNlaG9sZGVyICovCisJCQkJ KmRzdCsrID0gJyQnOworCQkJfQorCQkJc3JjKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8q IENoZWNrIGZvciBzdHJpbmcgc3RhcnQgKi8KKwkJaWYgKCpzcmMgPT0gJ1wnJyB8fCAqc3JjID09 ICciJykKKwkJeworCQkJaW5fc3RyaW5nID0gdHJ1ZTsKKwkJCXN0cmluZ19jaGFyID0gKnNyYzsK KwkJCXNyYysrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5kbGUgc2luZ2xlLWxpbmUg Y29tbWVudHMgKi8KKwkJaWYgKCpzcmMgPT0gJy0nICYmICooc3JjICsgMSkgPT0gJy0nKQorCQl7 CisJCQl3aGlsZSAoKnNyYyAmJiAqc3JjICE9ICdcbicpCisJCQkJc3JjKys7CisJCQljb250aW51 ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBtdWx0aS1saW5lIGNvbW1lbnRzICovCisJCWlmICgqc3Jj ID09ICcvJyAmJiAqKHNyYyArIDEpID09ICcqJykKKwkJeworCQkJc3JjICs9IDI7CisJCQl3aGls ZSAoKnNyYyAmJgorCQkJCSAgICEoKnNyYyA9PSAnKicgJiYgKihzcmMgKyAxKSA9PSAnLycpKQor CQkJCXNyYysrOworCQkJaWYgKCpzcmMpCisJCQkJc3JjICs9IDI7CisJCQljb250aW51ZTsKKwkJ fQorCisJCS8qIEhhbmRsZSB3aGl0ZXNwYWNlICovCisJCWlmICgqc3JjID09ICcgJyB8fCAqc3Jj ID09ICdcdCcgfHwKKwkJCSpzcmMgPT0gJ1xuJyB8fCAqc3JjID09ICdccicpCisJCXsKKwkJCWlm ICghbGFzdF93YXNfc3BhY2UpCisJCQl7CisJCQkJKmRzdCsrID0gJyAnOworCQkJCWxhc3Rfd2Fz X3NwYWNlID0gdHJ1ZTsKKwkJCX0KKwkJCXNyYysrOworCQkJY29udGludWU7CisJCX0KKworCQkv KiBIYW5kbGUgbnVtYmVycyAtIHJlcGxhY2Ugd2l0aCBwbGFjZWhvbGRlciAqLworCQlpZiAoKCpz cmMgPj0gJzAnICYmICpzcmMgPD0gJzknKSB8fAorCQkJKCpzcmMgPT0gJy4nICYmICooc3JjICsg MSkgPj0gJzAnICYmCisJCQkgKihzcmMgKyAxKSA8PSAnOScpKQorCQl7CisJCQl3aGlsZSAoKnNy YyAmJgorCQkJCSAgICgoKnNyYyA+PSAnMCcgJiYgKnNyYyA8PSAnOScpIHx8CisJCQkJCSpzcmMg PT0gJy4nKSkKKwkJCQlzcmMrKzsKKwkJCWlmICghbGFzdF93YXNfc3BhY2UgJiYKKwkJCQlkc3Qg PiBvdXRwdXQgJiYgKihkc3QgLSAxKSAhPSAnJCcpCisJCQkJKmRzdCsrID0gJyQnOworCQkJbGFz dF93YXNfc3BhY2UgPSBmYWxzZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogUmVndWxhciBj aGFyYWN0ZXIgLSBjb252ZXJ0IHRvIGxvd2VyY2FzZSAqLworCQlpZiAoKnNyYyA+PSAnQScgJiYg KnNyYyA8PSAnWicpCisJCQkqZHN0KysgPSAqc3JjICsgMzI7CisJCWVsc2UKKwkJCSpkc3QrKyA9 ICpzcmM7CisKKwkJbGFzdF93YXNfc3BhY2UgPSBmYWxzZTsKKwkJc3JjKys7CisJfQorCisJLyog UmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisJaWYgKGRzdCA+IG91dHB1dCAmJiAqKGRzdCAtIDEp ID09ICcgJykKKwkJZHN0LS07CisKKwkqZHN0ID0gJ1wwJzsKKwlyZXR1cm4gZHN0IC0gb3V0cHV0 OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBQdWJsaWMgQVBJIGltcGxlbWVudGF0aW9u CisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgdG90YWwg c2hhcmVkIG1lbW9yeSBzaXplIHJlcXVpcmVkCisgKiBmb3IgdGhlIHRyYWNrIHRhYmxlIG11dGF0 aW9uIGZlYXR1cmUuCisgKi8KK1NpemUKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1f c2l6ZSh2b2lkKQoreworCVNpemUgc2l6ZSA9IDA7CisJaW50IHRibF9ia3Q7CisJaW50IHRibF9z ejsKKwlpbnQgcXJ5X2JrdDsKKwlpbnQgcXJ5X3N6OworCisJdGJsX2JrdCA9IHBvb2xfY29uZmln LT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzOworCXRibF9zeiA9IHBvb2xfY29u ZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplOworCXFyeV9ia3QgPSBwb29sX2Nv bmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfYnVja2V0czsKKwlxcnlfc3ogPSBwb29s X2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZTsKKwor CS8qIE1haW4gc3RydWN0dXJlICovCisJc2l6ZSArPSBzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9u U2htZW0pOworCisJLyogVGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSAqLworCXNpemUgKz0gc2l6 ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSk7CisJc2l6ZSArPSB0YmxfYmt0ICogc2l6 ZW9mKGludCk7CisJc2l6ZSArPSB0Ymxfc3ogKiBzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9uRW50 cnkpOworCisJLyogUGFyc2UgY2FjaGUgKi8KKwlzaXplICs9IHNpemVvZihRdWVyeVBhcnNlQ2Fj aGUpOworCXNpemUgKz0gcXJ5X2JrdCAqIHNpemVvZihpbnQpOworCXNpemUgKz0gcXJ5X3N6ICog c2l6ZW9mKFF1ZXJ5UGFyc2VFbnRyeSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIElu aXRpYWxpemUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGZvciB0aGUKKyAqIHRyYWNrIHRhYmxl IG11dGF0aW9uIGZlYXR1cmUuICBBbGxvY2F0ZXMgYW5kIHNldHMKKyAqIHVwIHRoZSB0YWJsZSBt YXAgYW5kIHBhcnNlIGNhY2hlIGluIHNoYXJlZCBtZW1vcnkuCisgKiBDYWxsZWQgb25jZSBmcm9t IHBncG9vbCBtYWluIHByb2Nlc3MgYXQgc3RhcnR1cC4KKyAqLwordm9pZAorcG9vbF90cmFja190 YWJsZV9tdXRhdGlvbl9pbml0KHZvaWQpCit7CisjaWZuZGVmIFBPT0xfUFJJVkFURQorCVNpemUJ CXNobWVtX3NpemU7CisJY2hhcgkgICAqc2htZW1fcHRyOworCVRyYWNrVGFibGVNdXRhdGlvblN0 YXRlICpzdDsKKwlpbnQJCQl0YmxfYmt0OworCWludAkJCXRibF9zejsKKwlpbnQJCQlxcnlfYmt0 OworCWludAkJCXFyeV9zejsKKworCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFu Y2Vfb25fd3JpdGUgIT0KKwkJRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwl7CisJCWVyZXBv cnQoREVCVUcxLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJImZl YXR1cmUgZGlzYWJsZWQiKSkpOworCQlyZXR1cm47CisJfQorCisJdGJsX2JrdCA9IHBvb2xfY29u ZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzOworCXRibF9zeiA9IHBvb2xf Y29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplOworCXFyeV9ia3QgPSBwb29s X2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfYnVja2V0czsKKwlxcnlfc3ogPSBw b29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZTsK KworCXNobWVtX3NpemUgPSBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUoKTsK KworCS8qCisJICogQWxsb2NhdGUgZnJvbSB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5IHNlZ21lbnQu CisJICogTWVtb3J5IGlzIHplcm9lZCBieQorCSAqIGluaXRpYWxpemVfc2hhcmVkX21lbW9yeV9t YWluX3NlZ21lbnQoKS4KKwkgKi8KKwlzaG1lbV9wdHIgPSBwb29sX3NoYXJlZF9tZW1vcnlfc2Vn bWVudF9nZXRfY2h1bmsoCisJCQkJCXNobWVtX3NpemUpOworCWlmIChzaG1lbV9wdHIgPT0gTlVM TCkKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlv bjogIgorCQkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlICV6dSBieXRlcyIsCisJCQkJCXNobWVtX3Np emUpKSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTZXQgdXAgcG9pbnRlcnMgd2l0aGluIHNoYXJl ZCBtZW1vcnkgKi8KKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbSA9CisJCShUcmFja1RhYmxl TXV0YXRpb25TaG1lbSAqKSBzaG1lbV9wdHI7CisJc2htZW1fcHRyICs9IHNpemVvZihUcmFja1Rh YmxlTXV0YXRpb25TaG1lbSk7CisKKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVf bWFwID0KKwkJKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqKSBzaG1lbV9wdHI7CisJc2ht ZW1fcHRyICs9IHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUpOworCXNobWVtX3B0 ciArPSB0YmxfYmt0ICogc2l6ZW9mKGludCk7CisJc2htZW1fcHRyICs9IHRibF9zeiAqIHNpemVv ZihUcmFja1RhYmxlTXV0YXRpb25FbnRyeSk7CisKKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1l bS0+cXVlcnlfY2FjaGUgPQorCQkoUXVlcnlQYXJzZUNhY2hlICopIHNobWVtX3B0cjsKKworCS8q IEluaXRpYWxpemUgc3RydWN0dXJlcyAqLworCXRhYmxlX21hcF9pbml0KAorCQl0cmFja190YWJs ZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwLAorCQl0YmxfYmt0LCB0Ymxfc3opOworCisJcGFy c2VfY2FjaGVfaW5pdCgKKwkJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnF1ZXJ5X2NhY2hl LAorCQlxcnlfYmt0LCBxcnlfc3opOworCisJLyogSW5pdGlhbGl6ZSBnbG9iYWwgc3RhdGUgKi8K KwlzdCA9ICZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGU7CisJc3QtPmluaXRpYWxp emVkID0gdHJ1ZTsKKwlzdC0+Y3VycmVudF90dGxfdXMgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9E RUZBVUxUX1RUTF9VUzsKKwlnZXRfY3VycmVudF90aW1lKCZzdC0+dHRsX2xhc3RfdXBkYXRlZCk7 CisJZ2V0X2N1cnJlbnRfdGltZSgmc3QtPmxhc3RfY2xlYW51cF90aW1lKTsKKwlzdC0+Z2xvYmFs X2NvbGRfc3RhcnRfdW50aWwudHZfc2VjID0gMDsKKwlzdC0+Z2xvYmFsX2NvbGRfc3RhcnRfdW50 aWwudHZfdXNlYyA9IDA7CisJc3QtPnN0YXRzX3F1ZXJpZXNfY2hlY2tlZCA9IDA7CisJc3QtPnN0 YXRzX2ZvcmNlZF9wcmltYXJ5ID0gMDsKKwlzdC0+c3RhdHNfYWxsb3dlZF9yZXBsaWNhID0gMDsK KworCWVyZXBvcnQoTE9HLAorCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJ CSJpbml0aWFsaXplZCB3aXRoICV6dSBieXRlcyBzaG1lbSIsCisJCQkJc2htZW1fc2l6ZSkpKTsK KyNlbmRpZgorfQorCisvKgorICogSW5pdGlhbGl6ZSBwZXItY2hpbGQgcHJvY2VzcyBzdGF0ZS4K KyAqIFJlY29yZHMgdGhlIHByb2Nlc3Mgc3RhcnQgdGltZSBmb3IgY29sZCBzdGFydAorICogcGVy aW9kIHRyYWNraW5nLiAgQ2FsbGVkIHdoZW4gYSBjaGlsZCBwcm9jZXNzIHN0YXJ0cy4KKyAqLwor dm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9jaGlsZF9pbml0KHZvaWQpCit7CisJaW50 IGR1cjsKKworCWlmIChUUkFDS19UQUJMRV9NVVRBVElPTl9ESVNBQkxFRCgpKQorCQlyZXR1cm47 CisKKwlnZXRfY3VycmVudF90aW1lKCZwcm9jZXNzX3N0YXJ0X3RpbWUpOworCWNvbGRfc3RhcnRf aW5pdGlhbGl6ZWQgPSB0cnVlOworCWR1ciA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRh dGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uOworCisJZXJlcG9ydChERUJVRzEsCisJCShlcnJtc2co InRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJImNoaWxkIGluaXQsIGNvbGQgc3RhcnQgJWQg bXMiLAorCQkJCWR1cikpKTsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSBwcm9jZXNzIGlzIGlu IGNvbGQgc3RhcnQgcGVyaW9kLgorICogRHVyaW5nIGNvbGQgc3RhcnQsIGFsbCBxdWVyaWVzIGFy ZSByb3V0ZWQgdG8KKyAqIHByaW1hcnkgdG8gYXZvaWQgc3RhbGUgcmVhZHMuICBDaGVja3MgYm90 aAorICogcGVyLXByb2Nlc3MgYW5kIGdsb2JhbCAod2F0Y2hkb2cpIGNvbGQgc3RhcnQuCisgKi8K K2Jvb2wKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25faW5fY29sZF9zdGFydCh2b2lkKQorewor CXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQ2NAkJZWxhcHNlZF9tczsKKwlpbnQJCQlkdXI7CisJ VHJhY2tUYWJsZU11dGF0aW9uU3RhdGUgKnN0OworCisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9O X0RJU0FCTEVEKCkpCisJCXJldHVybiBmYWxzZTsKKworCWR1ciA9IHBvb2xfY29uZmlnLT50cmFj a190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uOworCWlmIChkdXIgPD0gMCkKKwkJ cmV0dXJuIGZhbHNlOworCisJZ2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKwlzdCA9ICZ0cmFja190 YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGU7CisKKwkvKiBDaGVjayB3YXRjaGRvZy10cmlnZ2Vy ZWQgZ2xvYmFsIGNvbGQgc3RhcnQgKi8KKwlpZiAoc3QtPmdsb2JhbF9jb2xkX3N0YXJ0X3VudGls LnR2X3NlYyAhPSAwICYmCisJCWVsYXBzZWRfdXMoJm5vdywKKwkJCQkgICAmc3QtPmdsb2JhbF9j b2xkX3N0YXJ0X3VudGlsKSA+IDApCisJeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBDaGVj ayBwZXItcHJvY2VzcyBjb2xkIHN0YXJ0ICovCisJaWYgKCFjb2xkX3N0YXJ0X2luaXRpYWxpemVk KQorCQlyZXR1cm4gZmFsc2U7CisKKwllbGFwc2VkX21zID0gZWxhcHNlZF91cygmcHJvY2Vzc19z dGFydF90aW1lLCAmbm93KSAvIDEwMDA7CisKKwlpZiAoZWxhcHNlZF9tcyA8IGR1cikKKwl7CisJ CWVyZXBvcnQoREVCVUcyLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJ CQkJImNvbGQgc3RhcnQgKCVsZC8lZCBtcykiLAorCQkJCQkobG9uZyllbGFwc2VkX21zLCBkdXIp KSk7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIFRy aWdnZXIgYSBnbG9iYWwgY29sZCBzdGFydCBmb3IgYWxsIHByb2Nlc3Nlcy4KKyAqIFNldHMgdGhl IGNvbGQgc3RhcnQgZW5kIHRpbWUgaW4gc2hhcmVkIG1lbW9yeS4KKyAqIENhbGxlZCBhZnRlciB3 YXRjaGRvZyBsZWFkZXIgY2hhbmdlIHRvIGZvcmNlIGFsbAorICogcXVlcmllcyB0byBwcmltYXJ5 IGR1cmluZyB0aGUgdHJhbnNpdGlvbi4KKyAqLwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRh dGlvbl90cmlnZ2VyX2dsb2JhbF9jb2xkX3N0YXJ0KHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwg bm93OworCXN0cnVjdCB0aW1ldmFsICp1bnRpbDsKKwlpbnQJCQlkdXI7CisKKwlpZiAoVFJBQ0tf VEFCTEVfTVVUQVRJT05fRElTQUJMRUQoKSkKKwkJcmV0dXJuOworCisJZHVyID0gcG9vbF9jb25m aWctPnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb247CisJaWYgKGR1ciA8 PSAwKQorCQlyZXR1cm47CisKKwlnZXRfY3VycmVudF90aW1lKCZub3cpOworCXVudGlsID0gJnRy YWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZQorCQkJCS5nbG9iYWxfY29sZF9zdGFydF91 bnRpbDsKKwkqdW50aWwgPSBub3c7CisJdW50aWwtPnR2X3NlYyArPSBkdXIgLyAxMDAwOworCXVu dGlsLT50dl91c2VjICs9IChkdXIgJSAxMDAwKSAqIDEwMDA7CisJaWYgKHVudGlsLT50dl91c2Vj ID49IDEwMDAwMDApCisJeworCQl1bnRpbC0+dHZfc2VjICs9IHVudGlsLT50dl91c2VjIC8gMTAw MDAwMDsKKwkJdW50aWwtPnR2X3VzZWMgJT0gMTAwMDAwMDsKKwl9CisKKwllcmVwb3J0KExPRywK KwkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkiZ2xvYmFsIGNvbGQgc3Rh cnQgZm9yICVkIG1zIiwKKwkJCQlkdXIpKSk7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHRhYmxl IHdhcyByZWNlbnRseSB3cml0dGVuIChpcyAic3RhbGUiKS4KKyAqIFJldHVybnMgdHJ1ZSBpZiBy ZWFkcyBzaG91bGQgZ28gdG8gcHJpbWFyeSBiZWNhdXNlCisgKiB0aGUgdGFibGUgd2FzIHdyaXR0 ZW4gd2l0aGluIHRoZSBjdXJyZW50IFRUTCB3aW5kb3cuCisgKi8KK2Jvb2wKK3Bvb2xfdHJhY2tf dGFibGVfbXV0YXRpb25fdGFibGVfaXNfc3RhbGUoCisJaW50IHRhYmxlX29pZCwgaW50IGRib2lk KQoreworCVRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwOworCXN0cnVjdCB0aW1ldmFs IG5vdzsKKwl1aW50NjQJCXR0bF91czsKKwl1aW50MzIJCWhhc2g7CisJaW50CQkJaWR4OworCWJv b2wJCWlzX3N0YWxlID0gZmFsc2U7CisKKwlpZiAoVFJBQ0tfVEFCTEVfTVVUQVRJT05fRElTQUJM RUQoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHRhYmxlX29pZCA8PSAwIHx8IGRib2lkIDw9 IDApCisJeworCQlpc19zdGFsZSA9IHRydWU7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKwor CW1hcCA9IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT50YWJsZV9tYXA7CisJaGFzaCA9IGZu djFhX2hhc2hfdGFibGVfa2V5KHRhYmxlX29pZCwgZGJvaWQpOworCisJdGFibGVfbWFwX2xvY2so KTsKKworCWlkeCA9IHRhYmxlX21hcF9sb29rdXAobWFwLCB0YWJsZV9vaWQsIGRib2lkLCBoYXNo KTsKKwlpZiAoaWR4ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJewor CQlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsKKwkJaW50NjQJYWdlOworCQlpbnQ2 NAl0b3RhbF9hZ2U7CisJCWludDY0CW1heF9zdGFsZV91czsKKworCQllbnRyaWVzID0gVEFCTEVf TUFQX0VOVFJJRVMobWFwKTsKKwkJZ2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKwkJdHRsX3VzID0g dHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlCisJCQkJCS5jdXJyZW50X3R0bF91czsK KworCQlhZ2UgPSBlbGFwc2VkX3VzKAorCQkJJmVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUs ICZub3cpOworCQlpc19zdGFsZSA9IChhZ2UgPCAoaW50NjQpdHRsX3VzKTsKKworCQkvKgorCQkg KiBFbmZvcmNlIG1heF9zdGFsZW5lc3MgaGFyZCBjYXA6IG5vIGVudHJ5CisJCSAqIGNhbiBmb3Jj ZSBwcmltYXJ5IHJvdXRpbmcgbG9uZ2VyIHRoYW4KKwkJICogbWF4X3N0YWxlbmVzcyBmcm9tIGl0 cyBmaXJzdCB3cml0ZS4KKwkJICovCisJCWlmIChpc19zdGFsZSkKKwkJeworCQkJbWF4X3N0YWxl X3VzID0gKGludDY0KXBvb2xfY29uZmlnCisJCQkJLT50cmFja190YWJsZV9tdXRhdGlvbl9tYXhf c3RhbGVuZXNzCisJCQkJKiAxMDAwTEw7CisJCQlpZiAobWF4X3N0YWxlX3VzID4gMCkKKwkJCXsK KwkJCQl0b3RhbF9hZ2UgPSBlbGFwc2VkX3VzKAorCQkJCQkmZW50cmllc1tpZHhdLmZpcnN0X3dy aXRlX3RpbWUsCisJCQkJCSZub3cpOworCQkJCWlmICh0b3RhbF9hZ2UgPj0gbWF4X3N0YWxlX3Vz KQorCQkJCQlpc19zdGFsZSA9IGZhbHNlOworCQkJfQorCQl9CisKKwkJZXJlcG9ydChERUJVRzIs CisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkib2lkICVkIGRib2lk ICVkICIKKwkJCQkJImVsYXBzZWQ9JWxkIHR0bD0lbHUgc3RhbGU9JWQiLAorCQkJCQl0YWJsZV9v aWQsIGRib2lkLAorCQkJCQkobG9uZylhZ2UsCisJCQkJCSh1bnNpZ25lZCBsb25nKXR0bF91cywK KwkJCQkJaXNfc3RhbGUpKSk7CisJfQorCisJdGFibGVfbWFwX3VubG9jaygpOworCit1cGRhdGVf c3RhdHM6CisJLyogVXBkYXRlIHN0YXRpc3RpY3MgdXNpbmcgc2VtYXBob3JlICovCisJaWYgKHRy YWNrX3RhYmxlX211dGF0aW9uX3NobWVtICE9IE5VTEwpCisJeworCQlUcmFja1RhYmxlTXV0YXRp b25TdGF0ZSAqc3Q7CisKKwkJdGFibGVfbWFwX2xvY2soKTsKKwkJc3QgPSAmdHJhY2tfdGFibGVf bXV0YXRpb25fc2htZW0tPnN0YXRlOworCQlzdC0+c3RhdHNfcXVlcmllc19jaGVja2VkKys7CisJ CWlmIChpc19zdGFsZSkKKwkJCXN0LT5zdGF0c19mb3JjZWRfcHJpbWFyeSsrOworCQllbHNlCisJ CQlzdC0+c3RhdHNfYWxsb3dlZF9yZXBsaWNhKys7CisJCXRhYmxlX21hcF91bmxvY2soKTsKKwl9 CisKKwlyZXR1cm4gaXNfc3RhbGU7Cit9CisKKy8qCisgKiBNYXJrIG11bHRpcGxlIHRhYmxlcyBh cyByZWNlbnRseSB3cml0dGVuLgorICogQ2FsbGVkIGFmdGVyIERNTCBxdWVyaWVzIGNvbXBsZXRl IHRvIHJlY29yZAorICogd2hpY2ggdGFibGVzIHdlcmUgbW9kaWZpZWQuCisgKi8KK3ZvaWQKK3Bv b2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZXNfd3JpdHRlbigKKwljb25zdCBpbnQg KnRhYmxlX29pZHMsIGludCBudW1fdGFibGVzLCBpbnQgZGJvaWQpCit7CisJVHJhY2tUYWJsZU11 dGF0aW9uSGFzaFRhYmxlICptYXA7CisJVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUgKnN0OworCXN0 cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQJCQlpOworCisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9O X0RJU0FCTEVEKCkpCisJCXJldHVybjsKKworCWlmIChudW1fdGFibGVzIDw9IDAgfHwgdGFibGVf b2lkcyA9PSBOVUxMIHx8CisJCWRib2lkIDw9IDApCisJCXJldHVybjsKKworCW1hcCA9IHRyYWNr X3RhYmxlX211dGF0aW9uX3NobWVtLT50YWJsZV9tYXA7CisJc3QgPSAmdHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW0tPnN0YXRlOworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisKKwl0YWJsZV9t YXBfbG9jaygpOworCisJLyogUGVyaW9kaWNhbGx5IGNsZWFuIHVwIGV4cGlyZWQgZW50cmllcyAq LworCWlmIChtYXAtPm51bV9lbnRyaWVzID4gbWFwLT5tYXhfZW50cmllcyAqIDMgLyA0KQorCXsK KwkJaW50NjQgc2luY2VfY2xlYW51cDsKKworCQlzaW5jZV9jbGVhbnVwID0gZWxhcHNlZF91cygK KwkJCSZzdC0+bGFzdF9jbGVhbnVwX3RpbWUsICZub3cpOworCQkvKiAxMDBtcyBpbnRlcnZhbCAq LworCQlpZiAoc2luY2VfY2xlYW51cCA+IDEwMDAwMCkKKwkJeworCQkJdGFibGVfbWFwX2NsZWFu dXBfZXhwaXJlZCgKKwkJCQltYXAsIHN0LT5jdXJyZW50X3R0bF91cyk7CisJCQlzdC0+bGFzdF9j bGVhbnVwX3RpbWUgPSBub3c7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3RhYmxl czsgaSsrKQorCXsKKwkJdWludDMyCWhhc2g7CisJCWludAkJdGFibGVfb2lkID0gdGFibGVfb2lk c1tpXTsKKworCQlpZiAodGFibGVfb2lkID4gMCkKKwkJeworCQkJaGFzaCA9IGZudjFhX2hhc2hf dGFibGVfa2V5KAorCQkJCXRhYmxlX29pZCwgZGJvaWQpOworCQkJdGFibGVfbWFwX2luc2VydCht YXAsIHRhYmxlX29pZCwKKwkJCQkJCQkgZGJvaWQsIGhhc2gsICZub3cpOworCQl9CisJfQorCisJ dGFibGVfbWFwX3VubG9jaygpOworfQorCisvKgorICogTWFyayBhIHNpbmdsZSB0YWJsZSBhcyBy ZWNlbnRseSB3cml0dGVuLgorICovCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21h cmtfdGFibGVfd3JpdHRlbigKKwlpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQpCit7CisJaWYgKHRh YmxlX29pZCA+IDAgJiYgZGJvaWQgPiAwKQorCXsKKwkJY29uc3QgaW50IHRhYmxlc1sxXSA9IHsg dGFibGVfb2lkIH07CisKKwkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlc193 cml0dGVuKAorCQkJdGFibGVzLCAxLCBkYm9pZCk7CisJfQorfQorCisvKgorICogVXBkYXRlIHRo ZSBzdGFsZW5lc3MgVFRMIGJhc2VkIG9uIG9ic2VydmVkCisgKiByZXBsaWNhdGlvbiBkZWxheS4g IE5ldyBUVEwgPSBkZWxheSAqIGZhY3RvciwKKyAqIGNsYW1wZWQgdG8gW2RlZmF1bHRfdHRsLCAx IGhvdXJdLgorICovCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3VwZGF0ZV90dGwo dWludDY0IGRlbGF5X3VzKQoreworCXVpbnQ2NAkJbmV3X3R0bDsKKwlkb3VibGUJCWZhY3RvcjsK KwlUcmFja1RhYmxlTXV0YXRpb25TdGF0ZSAqc3Q7CisKKwlpZiAoVFJBQ0tfVEFCTEVfTVVUQVRJ T05fRElTQUJMRUQoKSkKKwkJcmV0dXJuOworCisJZmFjdG9yID0gcG9vbF9jb25maWctPnRyYWNr X3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3I7CisJbmV3X3R0bCA9ICh1aW50NjQpKGRlbGF5X3Vz ICogZmFjdG9yKTsKKwlpZiAobmV3X3R0bCA8IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RFRkFVTFRf VFRMX1VTKQorCQluZXdfdHRsID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVM7 CisKKwkvKiBNYXhpbXVtIFRUTCBvZiAxIGhvdXIgKi8KKwlpZiAobmV3X3R0bCA+IDM2MDBVTEwg KiAxMDAwMDAwVUxMKQorCQluZXdfdHRsID0gMzYwMFVMTCAqIDEwMDAwMDBVTEw7CisKKwlzdCA9 ICZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGU7CisJc3QtPmN1cnJlbnRfdHRsX3Vz ID0gbmV3X3R0bDsKKwlnZXRfY3VycmVudF90aW1lKCZzdC0+dHRsX2xhc3RfdXBkYXRlZCk7CisK KwllcmVwb3J0KERFQlVHMSwKKwkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJ CQkiVFRMPSVsdSB1cyAoZGVsYXk9JWx1IGZhY3Rvcj0lLjFmKSIsCisJCQkJKHVuc2lnbmVkIGxv bmcpbmV3X3R0bCwKKwkJCQkodW5zaWduZWQgbG9uZylkZWxheV91cywKKwkJCQlmYWN0b3IpKSk7 Cit9CisKKy8qCisgKiBMb29rIHVwIGEgY2FjaGVkIHBhcnNlIHJlc3VsdCBieSBxdWVyeSBoYXNo LgorICogUmV0dXJucyB0cnVlIGFuZCBmaWxscyBvdXRwdXQgcGFyYW1ldGVycyBpZgorICogdGhl IHF1ZXJ5IHdhcyBmb3VuZCBpbiB0aGUgcGFyc2UgY2FjaGUuCisgKi8KK2Jvb2wKK3Bvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb25fZ2V0X2NhY2hlZF9wYXJzZSgKKwl1aW50NjQgaGFzaCwgYm9vbCAq aXNfd3JpdGUsCisJY2hhciB0YWJsZV9uYW1lc1tdW1RSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxF X05BTUVfTEVOXSwKKwlpbnQgKm51bV90YWJsZXMpCit7CisJUXVlcnlQYXJzZUNhY2hlICpjYWNo ZTsKKwlpbnQJCQlpZHg7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKKwlpbnQJCQltYXhfdGFibGVz OworCisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkpCisJCXJldHVybiBmYWxz ZTsKKworCW1heF90YWJsZXMgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9NQVhfVEFCTEVTX1BFUl9R VUVSWTsKKwljYWNoZSA9IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5xdWVyeV9jYWNoZTsK KworCXBhcnNlX2NhY2hlX2xvY2soKTsKKworCWlkeCA9IHBhcnNlX2NhY2hlX2xvb2t1cChjYWNo ZSwgaGFzaCk7CisJaWYgKGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVY KQorCXsKKwkJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzOworCQlpbnQJCWk7CisJCWludAkJbmFt ZWxlbjsKKworCQllbnRyaWVzID0gUEFSU0VfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJCW5hbWVs ZW4gPSBUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJMRV9OQU1FX0xFTjsKKwkJKmlzX3dyaXRlID0g ZW50cmllc1tpZHhdLmlzX3dyaXRlOworCQkqbnVtX3RhYmxlcyA9IGVudHJpZXNbaWR4XS5udW1f dGFibGVzOworCisJCWZvciAoaSA9IDA7CisJCQkgaSA8IGVudHJpZXNbaWR4XS5udW1fdGFibGVz ICYmCisJCQkgaSA8IG1heF90YWJsZXM7CisJCQkgaSsrKQorCQl7CisJCQlzdHJsY3B5KHRhYmxl X25hbWVzW2ldLAorCQkJCQllbnRyaWVzW2lkeF0udGFibGVfbmFtZXNbaV0sCisJCQkJCW5hbWVs ZW4pOworCQl9CisKKwkJLyogTW92ZSB0byBmcm9udCBvZiBMUlUgKi8KKwkJcGFyc2VfY2FjaGVf bHJ1X3RvdWNoKGNhY2hlLCBpZHgpOworCQlmb3VuZCA9IHRydWU7CisJfQorCisJcGFyc2VfY2Fj aGVfdW5sb2NrKCk7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiBTdG9yZSBhIHBhcnNl IHJlc3VsdCBpbiB0aGUgc2hhcmVkIGNhY2hlLgorICogRXZpY3RzIHRoZSBMUlUgZW50cnkgaWYg dGhlIGNhY2hlIGlzIGZ1bGwuCisgKi8KK3ZvaWQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25f Y2FjaGVfcGFyc2UoCisJdWludDY0IGhhc2gsIGJvb2wgaXNfd3JpdGUsCisJY29uc3QgY2hhciB0 YWJsZV9uYW1lc1tdW1RSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX05BTUVfTEVOXSwKKwlpbnQg bnVtX3RhYmxlcykKK3sKKwlRdWVyeVBhcnNlQ2FjaGUgKmNhY2hlOworCWludAkJICAgKmJ1Y2tl dHM7CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzOworCWludAkJCWlkeDsKKwlpbnQJCQlidWNr ZXQ7CisJaW50CQkJbWF4X3RhYmxlczsKKwlpbnQJCQluYW1lbGVuOworCisJaWYgKFRSQUNLX1RB QkxFX01VVEFUSU9OX0RJU0FCTEVEKCkpCisJCXJldHVybjsKKworCW1heF90YWJsZXMgPSBUUkFD S19UQUJMRV9NVVRBVElPTl9NQVhfVEFCTEVTX1BFUl9RVUVSWTsKKwluYW1lbGVuID0gVFJBQ0tf VEFCTEVfTVVUQVRJT05fVEFCTEVfTkFNRV9MRU47CisJY2FjaGUgPSB0cmFja190YWJsZV9tdXRh dGlvbl9zaG1lbS0+cXVlcnlfY2FjaGU7CisKKwlwYXJzZV9jYWNoZV9sb2NrKCk7CisKKwkvKiBD aGVjayBpZiBhbHJlYWR5IGV4aXN0cyAqLworCWlkeCA9IHBhcnNlX2NhY2hlX2xvb2t1cChjYWNo ZSwgaGFzaCk7CisJaWYgKGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVY KQorCXsKKwkJcGFyc2VfY2FjaGVfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBBbGxv Y2F0ZSBuZXcgZW50cnkgKG1heSBldmljdCBMUlUpICovCisJaWR4ID0gcGFyc2VfY2FjaGVfYWxs b2NfZW50cnkoY2FjaGUpOworCWlmIChpZHggPT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJ RF9JTkRFWCkKKwl7CisJCXBhcnNlX2NhY2hlX3VubG9jaygpOworCQllcmVwb3J0KFdBUk5JTkcs CisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkicGFyc2UgY2FjaGUg YWxsb2MgZmFpbGVkIikpKTsKKwkJcmV0dXJuOworCX0KKworCWVudHJpZXMgPSBQQVJTRV9DQUNI RV9FTlRSSUVTKGNhY2hlKTsKKwlidWNrZXRzID0gUEFSU0VfQ0FDSEVfQlVDS0VUUyhjYWNoZSk7 CisKKwkvKiBGaWxsIGluIGVudHJ5ICovCisJZW50cmllc1tpZHhdLnF1ZXJ5X2hhc2ggPSBoYXNo OworCWVudHJpZXNbaWR4XS5pc193cml0ZSA9IGlzX3dyaXRlOworCWVudHJpZXNbaWR4XS5udW1f dGFibGVzID0KKwkJKG51bV90YWJsZXMgPiBtYXhfdGFibGVzKSA/CisJCW1heF90YWJsZXMgOiBu dW1fdGFibGVzOworCisJeworCQlpbnQJCWk7CisKKwkJZm9yIChpID0gMDsgaSA8IGVudHJpZXNb aWR4XS5udW1fdGFibGVzOyBpKyspCisJCXsKKwkJCXN0cmxjcHkoZW50cmllc1tpZHhdLnRhYmxl X25hbWVzW2ldLAorCQkJCQl0YWJsZV9uYW1lc1tpXSwgbmFtZWxlbik7CisJCX0KKwl9CisKKwkv KiBJbnNlcnQgaW50byBoYXNoIGJ1Y2tldCAqLworCWJ1Y2tldCA9IGhhc2ggJSBjYWNoZS0+bnVt X2J1Y2tldHM7CisJZW50cmllc1tpZHhdLm5leHQgPSBidWNrZXRzW2J1Y2tldF07CisJYnVja2V0 c1tidWNrZXRdID0gaWR4OworCisJLyogQWRkIHRvIExSVSBsaXN0ICovCisJcGFyc2VfY2FjaGVf bHJ1X2FkZChjYWNoZSwgaWR4KTsKKworCXBhcnNlX2NhY2hlX3VubG9jaygpOworfQorCisvKgor ICogTm9ybWFsaXplIGEgU1FMIHF1ZXJ5IGFuZCBjb21wdXRlIGl0cyA2NC1iaXQgaGFzaC4KKyAq IFN0cmlwcyBjb21tZW50cywgY29sbGFwc2VzIHdoaXRlc3BhY2UsIGxvd2VyY2FzZXMsCisgKiBh bmQgcmVwbGFjZXMgbGl0ZXJhbHMgd2l0aCBwbGFjZWhvbGRlcnMuCisgKi8KK3VpbnQ2NAorcG9v bF90cmFja190YWJsZV9tdXRhdGlvbl9ub3JtYWxpemVfYW5kX2hhc2goCisJY29uc3QgY2hhciAq cXVlcnkpCit7CisJY2hhcglub3JtYWxpemVkWzgxOTJdOworCXNpemVfdAlsZW47CisKKwlpZiAo cXVlcnkgPT0gTlVMTCB8fCBxdWVyeVswXSA9PSAnXDAnKQorCQlyZXR1cm4gMDsKKworCWxlbiA9 IG5vcm1hbGl6ZV9xdWVyeShxdWVyeSwgbm9ybWFsaXplZCwKKwkJCQkJCSAgc2l6ZW9mKG5vcm1h bGl6ZWQpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGZudjFhX2hh c2hfNjQobm9ybWFsaXplZCwgbGVuKTsKK30KLS0gCjIuNTMuMAoK --000000000000926926064db0b8d0--