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 1wBuuW-001Uop-0z for pgsql-hackers@arkaria.postgresql.org; Sun, 12 Apr 2026 13:31:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wBuuU-002LWg-1S for pgsql-hackers@arkaria.postgresql.org; Sun, 12 Apr 2026 13:31:35 +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 1wBuuU-002LWX-0C for pgsql-hackers@lists.postgresql.org; Sun, 12 Apr 2026 13:31:35 +0000 Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wBuuS-00000000fmC-2Qr1 for pgsql-hackers@lists.postgresql.org; Sun, 12 Apr 2026 13:31:34 +0000 Received: by mail-lj1-x235.google.com with SMTP id 38308e7fff4ca-38dd9f0fdc6so33266151fa.0 for ; Sun, 12 Apr 2026 06:31:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776000691; cv=none; d=google.com; s=arc-20240605; b=XjW+j7cvY0u9OHKCCeA2nni7OHvD2hjL4cA7dNJOTA7rrN79jcG9H2Y5Oka8qIgvK0 +J5j/NjZikhh2XQ1qpHMlE95jyKdEbdSdFAguyJQz1+KVDXmmRo1M82kGULXxtrJCX6n xAIFShx3aYoyYnm6fLy+BJac4ZSULyce6acSPTjBnQSFrcb+Lad31vP72ucrCrwUBRw0 VTI8vGH2l+Z+6IzllnxUqpNaZEBqPBXcLV2+2bt/Rl8kibKBMDQ/SIKyUWdyfx9yWc7U Hs6d+yZy/5IVmz/J++nuX6MQR/srpIbjeZOwyiDmpHQow5UAHwLDGy99Gj6WdbY1qyPn 81Uw== 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=iAyz0o3ffTMsB09GX0WGy4Afw8A4NxVMt81D6SG8ie8=; fh=Edb/L6/SSuo1cYdWBhZ2W54qK8c729uC6so69nvz2vk=; b=EBhXcSzUd9By+qDhQJR6xMHUpi1pKgU+lzXu8UticVHLCPrtO7MaLmjgfM9OBNFdAG 4vd7B+ofaeESauz4+MmwlKLsuEDfkqltpYfsdLUg3vDHgdaBHb3t5FNUyrK4INz5xBvg N134w74WaH96G//Xz8xxE2UDUdV0nRlQSdf/N17ERnBUesJRTq0qB+qu3ZA3IIMhdHwW NdpuWL/bjpX2i+GGFmJVK8sPij/VbptHEEtjMA6+hJK7E5modeYKKQnePqcPd7lTJQxL FGgfLdjA8yprnEyY1SVzpgQxqnD4WO472GWXo/BMhdmlZRGBUYzFy6YCJQGPb6++Zub2 +fUw==; 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=gmail.com; s=20251104; t=1776000691; x=1776605491; 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=iAyz0o3ffTMsB09GX0WGy4Afw8A4NxVMt81D6SG8ie8=; b=f8yjuSoFGIyMnp/ttXzsBgvauc4tyuKEnoRb3CNUYxDSQJ3LJfsFwyWwb+X/0CTWcL SIjNlUrCtH5ewGwBHfY7YE48jmTRQdSO5+NbR8U54lG0Q8UHzsBiIn1bqmoshbrdhEGP 8f/0L3rFPHKeS8pDn04Y/l2a2dCE2m0CN2O3vtxPjiNH8JvVbKY3rhe0a91XWATZn0Fu V4zoT2T7pMzJk4jAF1ceLfdEJps/aHdGpk4JvuQZ/Krn9WWdpzU0iNohZhE3R21uvnox 8ekUGXoIxrltRCi0cUr/AMvRqppCvLH90f1l1dgVOCE1bdxgKqiDJJXsd10aeO4IPBLQ l/bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776000691; x=1776605491; 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=iAyz0o3ffTMsB09GX0WGy4Afw8A4NxVMt81D6SG8ie8=; b=eqssoc4+/dU4Im4l2rrO5fVxUgyK8FlZTwm2GPm/+qQRxxSW0V6O6UP/eHOPuyzm7n jwPXkMm1Koa1drdfvZHRK+MhkaqLkDTmfCYsFpCCrrjWmxkWcR+EKY8iVgK/SRW4HG+s U3V8dndISwtfWt+X0rfNhFJB1X3JcHWaltqizrvTyPqkJL8/Ua8mEXtWkRgx5s2rJauc gYt0cZqFZSzXyv0OJ4JO7XALOT9/cqz3VMWIb8Hunr+hbJhF4Iq5N8QdsH+q4Ht37Usk QXi8zRZSQHhzXP4hPRWVzAh0gQmGOjx9oqXqqpSOq/0naBY3xiVB9wow2iwP7J9lYa56 GVTw== X-Forwarded-Encrypted: i=1; AFNElJ+LOHQgiywkR8/NxPMobddOQ1cbgZ5I36ym/mKteB9+XBgfYnXit34RhIAqXrwlEEP/oP17flvkH4j/tLj0@lists.postgresql.org X-Gm-Message-State: AOJu0YxWUknFK/vHEEG3TVc6BZUPnAE17G2O4gxKsFGu9fleTiv6Qnfv Zl5fdLNDe2iRgo1WD0Yg9SKT1JdyPfFvbb5wbfPMDljpQGTClE71Y780stfiSMxCjL6J05iEQ80 WKs69EE0AmFF7NLC6NJpugOYGLaHg5uM= X-Gm-Gg: AeBDieuTiisUWJsOKMhh1iYD+4edqZQawbjxDnlmQxp+dI5RETqV8b8yfjw9NRz3wOG wPrBgXRyW1op0aVesQVhE4u4IiPllU/vsXTRviqakkYNzUFyUDfrSTI99nEKhPhAZyDAzrYCKzs mtowpZfWEI/rN+BcEyQfzCnqvK+ndE5PxFGaEqzWSh4/XqxKgZqoqj9iE/rBINQZnx9aq6Harmh XtBgY03B+mSAshDg5z7Fga2nxRD3XzbCemUva7JPbcGg1to5nRVYvnQ8dXsVC7AMwu6+xvARmDH Cdkwi636wroF2a8Ispi0ZqSt9o20t+S8Pm5s4ssn2+5oRZIr+m1jO5E2+3GkA5UZch/osyJa++6 PgQcdS9uzB0dMccMsXXGthKSmQjQ= X-Received: by 2002:a05:6512:118d:b0:5a2:b514:4fbb with SMTP id 2adb3069b0e04-5a3f086e9dcmr3022307e87.11.1776000690681; Sun, 12 Apr 2026 06:31:30 -0700 (PDT) MIME-Version: 1.0 References: <202604062213.cgo352cdsgsm@alvherre.pgsql> <4n4q3preb3lgyhpzstebhux7b2aojhsw7gik4ivaznyggiezrs@lrznutssxlh2> <9539.1775724194@localhost> In-Reply-To: From: Mihail Nikalayeu Date: Sun, 12 Apr 2026 15:31:20 +0200 X-Gm-Features: AQROBzDwzQclGQc3Wgq6gF1VpfmajjsvC053SVNpdyq6jshKVs-tmgR_yQlOOQs Message-ID: Subject: Re: Adding REPACK [concurrently] To: Andres Freund Cc: Antonin Houska , Amit Kapila , Alvaro Herrera , Srinath Reddy Sadipiralla , Matthias van de Meent , Pg Hackers , Robert Treat Content-Type: multipart/mixed; boundary="0000000000004a14f5064f4362a1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004a14f5064f4362a1 Content-Type: multipart/alternative; boundary="0000000000004a14f3064f43629f" --0000000000004a14f3064f43629f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello! On Thu, Apr 9, 2026 at 4:20=E2=80=AFPM Andres Freund w= rote: > But with my proposal to properly teach the deadlock detector about assuming > there's a wait edge for the eventual lock upgrade by S1, the first exampl= e > would still work, because the lock upgrade would not be considered a hard > cycle, and the second example would have S2 error out. Attached patch contains some (maybe naive) POC for similar approach. It adds a 'deadlock_protected' flag, which changes how the deadlock detector cancels backends. Instead of cancelling the backend entered the deadlock detector - it cancel some another (nearest hard edge) until it is possible to get the lock (either by reordering or directly). Also, I added test cases with the scenarios you mentioned into the repack spec - to ensure repack is still working while other backend are cancelled. > > Anti-wraparound (failsafe) VACUUM is a bit different case [1] (i.e. it should > > possibly have higher priority than REPACK), but I think this prioritization > > should be implemented in other way than just letting it get in the way of > > REPACK (at the time REPACK is nearly finished). > > Yea, it makes no sense to interrupt the long running repack, given that the > new relation will have much less stuff for vacuum to do. For now I decided to keep anti-wraparound unaffected because the feature is may be used not only for repack but also for other potential scenarios. But yes, maybe it's worth canceling antiwraparound in the repack case. Also, checking proc flags to detect antuwraparound requires LWLockConditionalAcquire(ProcArrayLock) - something I don't like in deadlock detector. Best regards, Mikhail. --0000000000004a14f3064f43629f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello!

On Thu, Apr 9, 2026 at 4:20=E2=80=AFPM Andres Freund <andres@anarazel.de= > wrote:
> But with my proposal to properly teach the deadlock detector about ass= uming
> there's a wait edge for the eventual lock upgrade by S1, the first= example
> would still work, because the lock upgrade would not be considered a h= ard
> cycle, and the second example would have S2 error out.

Attached patch contains some (maybe naive) POC for similar approach.
It adds a 'deadlock_protected' flag, which changes how the deadlock=
detector cancels backends.

Instead of cancelling the backend entered the deadlock detector - it
cancel some another (nearest hard edge) until it is possible to get the loc= k (either by
reordering or directly).

Also, I added test cases with the scenarios you mentioned into the repack s= pec - to ensure repack is still working while other backend are cancelled.<= br>
> > Anti-wraparound (failsafe) VACUUM is a bit different case [1] (i.= e. it should
> > possibly have higher priority than REPACK), but I think this prio= ritization
> > should be implemented in other way than just letting it get in th= e way of
> > REPACK (at the time REPACK is nearly finished).
>
> Yea, it makes no sense to interrupt the long running repack, given tha= t the
> new relation will have much less stuff for vacuum to do.

For now I decided to keep anti-wraparound unaffected because the
feature is may be used not only for repack but also for other potential
scenarios.
But yes, maybe it's worth canceling antiwraparound in the repack case.<= br>Also, checking proc flags to detect antuwraparound requires LWLockCondit= ionalAcquire(ProcArrayLock) -=C2=A0 something I don't like in deadlock = detector.

Best regards,
Mikhail.
--0000000000004a14f3064f43629f-- --0000000000004a14f5064f4362a1 Content-Type: application/x-patch; name="nocfbot-v1-0001-Prefer-canceling-blockers-for-deadlock-protected-.patch" Content-Disposition: attachment; filename="nocfbot-v1-0001-Prefer-canceling-blockers-for-deadlock-protected-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnvryfky0 RnJvbSA3MjQxNGEzNDBiMzliYzgxNGM0YTc3YjVhNjI1MGJhZTRmODVlMDc5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU3VuLCAxMiBBcHIgMjAyNiAxNDoyNDowMiArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjFdIFByZWZlciBjYW5jZWxpbmcgYmxvY2tlcnMgZm9yIGRlYWRsb2NrLXByb3RlY3Rl ZCByZXBhY2sKIHdhaXRzCgpUZWFjaCB0aGUgbG9jayBtYW5hZ2VyIHRvIHRyZWF0IHNlbGVjdGVk IHdhaXRzIGFzIGRlYWRsb2NrLXByb3RlY3RlZCwgc28KUkVQQUNLIENPTkNVUlJFTlRMWSBjYW4g cHJlc2VydmUgdGhlIHdvcmsgZG9uZSBiZWZvcmUgd2FpdGluZyBmb3IgdGhlCmZpbmFsIEFjY2Vz c0V4Y2x1c2l2ZUxvY2sgc2V0LgoKV2hlbiBkZWFkbG9ja19wcm90ZWN0ZWQgaXMgc2V0IGFuZCBh IGhhcmQgZGVhZGxvY2sgaXMgZm91bmQsIGNhbmNlbCBhCmJsb2NraW5nIGxvY2sgd2FpdCBhbmQg bGV0IHRoZSBwcm90ZWN0ZWQgYmFja2VuZCBjb250aW51ZSB3YWl0aW5nCmluc3RlYWQgb2YgbWFr aW5nIGl0IHRoZSBkZWFkbG9jayB2aWN0aW0uIEtlZXAgYW50aS13cmFwYXJvdW5kCmF1dG92YWN1 dW0gd29ya2VycyBpbmVsaWdpYmxlIGFzIGNhbmNlbGxhdGlvbiB0YXJnZXRzLCB1c2luZyBhCmNv bmRpdGlvbmFsIFByb2NBcnJheUxvY2sgY2hlY2sgZm9yIHRoZSB3cmFwYXJvdW5kIGZsYWcgc28g ZGVhZGxvY2sKZGV0ZWN0aW9uIGRvZXMgbm90IGJsb2NrIG9uIExXTG9ja3MuCgpTZXQgdGhpcyBw cm90ZWN0aW9uIGFyb3VuZCByZXBhY2sncyBmaW5hbCBsb2NrIGFjcXVpc2l0aW9uIGFuZCBjbGVh ciBpdAp0aHJvdWdoIHRoZSBub3JtYWwgd2FpdC90cmFuc2FjdGlvbiBjbGVhbnVwIHBhdGhzLgot LS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jICAgICAgICAgICAgICAgICB8ICAgOCAr Kwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgICAgICAgIHwgICAzICsK IHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9kZWFkbG9jay5jICAgICAgICAgICB8IDEwMyArKysr KysrKysrKysrLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyAgICAgICAgICAgICAg IHwgIDE4ICsrLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgICAgICAgICAg IHwgIDYzICsrKysrKystLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggICAgICAgICAgICAg ICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaCAgICAgICAgICAgICAg ICAgICAgfCAgIDkgKy0KIC4uLi9pbmplY3Rpb25fcG9pbnRzL2V4cGVjdGVkL3JlcGFjay5vdXQg ICAgICB8IDEzMCArKysrKysrKysrKysrKysrKy0KIC4uLi9pbmplY3Rpb25fcG9pbnRzL3NwZWNz L3JlcGFjay5zcGVjICAgICAgICB8ICA4MCArKysrKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCAz OTkgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvcmVwYWNrLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9yZXBhY2suYwppbmRl eCA1OGUzODY3MjQ2Zi4uY2VlMmFhNDljMDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3JlcGFjay5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jCkBAIC0zMDU1 LDcgKzMwNTUsMTUgQEAgcmVidWlsZF9yZWxhdGlvbl9maW5pc2hfY29uY3VycmVudChSZWxhdGlv biBOZXdIZWFwLCBSZWxhdGlvbiBPbGRIZWFwLAogCS8qCiAJICogQWNxdWlyZSBBY2Nlc3NFeGNs dXNpdmVMb2NrIG9uIHRoZSB0YWJsZSwgaXRzIFRPQVNUIHJlbGF0aW9uIChpZiB0aGVyZQogCSAq IGlzIG9uZSksIGFsbCBpdHMgaW5kZXhlcywgc28gdGhhdCB3ZSBjYW4gc3dhcCB0aGUgZmlsZXMu CisJICoKKwkgKiBTZXQgZGVhZGxvY2tfcHJvdGVjdGVkIHNvIHRoYXQgaWYgYSBkZWFkbG9jayBv Y2N1cnMgd2hpbGUgd2UgYXJlCisJICogd2FpdGluZyBmb3IgdGhlc2UgbG9ja3MsIHRoZSBkZWFk bG9jayBkZXRlY3RvciBjYW5jZWxzIHRoZSBibG9ja2luZworCSAqIHByb2MncyBsb2NrIHdhaXQg aW5zdGVhZCBvZiBvdXJzLiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZG9uZSB0aGUKKwkgKiBleHBl bnNpdmUgZGF0YSBjb3B5IGFuZCBpbmRleCByZWJ1aWxkIC0gYWJvcnRpbmcgbm93IHdvdWxkIHdh c3RlIGFsbAorCSAqIHRoYXQgd29yay4KIAkgKi8KKwlkZWFkbG9ja19wcm90ZWN0ZWQgPSB0cnVl OworCiAJTG9ja1JlbGF0aW9uT2lkKG9sZF90YWJsZV9vaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sp OwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKaW5kZXggOTI5OWJjZWJiZGEu LjFkYmJhZTU0MDE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJy YXkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAtNzE0LDYg KzcxNCw5IEBAIFByb2NBcnJheUVuZFRyYW5zYWN0aW9uKFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rp b25JZCBsYXRlc3RYaWQpCiAJCQlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwogCQl9CiAJ fQorCisJLyogQ2xlYXIgYmFja2VuZC1sb2NhbCBkZWFkbG9jayBwcm90ZWN0aW9uIGZsYWcgYXQg ZW5kIG9mIHRyYW5zYWN0aW9uLiAqLworCWRlYWRsb2NrX3Byb3RlY3RlZCA9IGZhbHNlOwogfQog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2RlYWRsb2NrLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvZGVhZGxvY2suYwppbmRleCBiODk2MmQ4NzViNi4uN2I1 M2UyZmIxOWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9kZWFkbG9jay5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9kZWFkbG9jay5jCkBAIC0xMjUsNiArMTI1 LDE1IEBAIHN0YXRpYyBpbnQJbWF4UG9zc2libGVDb25zdHJhaW50czsKIHN0YXRpYyBERUFETE9D S19JTkZPICpkZWFkbG9ja0RldGFpbHM7CiBzdGF0aWMgaW50CW5EZWFkbG9ja0RldGFpbHM7CiAK Ky8qCisgKiBQZXItZWRnZSBwYXJhbGxlbCBhcnJheSB0byBkZWFkbG9ja0RldGFpbHNbXTogdGhl IHdhaXRpbmcgcHJvYyB3aG9zZSB3YWl0CisgKiBmb3JtcyB0aGUgZWRnZSBhdCB0aGUgY29ycmVz cG9uZGluZyBpbmRleC4gIFVubGlrZSBkZWFkbG9ja0RldGFpbHNbXSwgdGhlc2UKKyAqIHBvaW50 ZXJzIHJlZmVyZW5jZSBsaXZlIFBHUFJPQ3MgYW5kIGFyZSBvbmx5IHZhbGlkIHdoaWxlIGFsbCBw YXJ0aXRpb24KKyAqIGxvY2tzIGFyZSBoZWxkIChpLmUuLCBkdXJpbmcgRGVhZExvY2tDaGVjayku ICBVc2VkIGJ5IGRlYWRsb2NrX3Byb3RlY3RlZAorICogcmVzb2x1dGlvbiBpbiBEZWFkTG9ja0No ZWNrIHRvIHBpY2sgYSBjYW5jZWxsYXRpb24gdmljdGltLgorICovCitzdGF0aWMgUEdQUk9DICoq ZGVhZGxvY2tQcm9jczsKKwogLyogUEdQUk9DIHBvaW50ZXIgb2YgYW55IGJsb2NraW5nIGF1dG92 YWN1dW0gd29ya2VyIGZvdW5kICovCiBzdGF0aWMgUEdQUk9DICpibG9ja2luZ19hdXRvdmFjdXVt X3Byb2MgPSBOVUxMOwogCkBAIC0xNDgsMTEgKzE1NywxMiBAQCBJbml0RGVhZExvY2tDaGVja2lu Zyh2b2lkKQogCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0 KTsKIAogCS8qCi0JICogRmluZExvY2tDeWNsZSBuZWVkcyBhdCBtb3N0IE1heEJhY2tlbmRzIGVu dHJpZXMgaW4gdmlzaXRlZFByb2NzW10gYW5kCi0JICogZGVhZGxvY2tEZXRhaWxzW10uCisJICog RmluZExvY2tDeWNsZSBuZWVkcyBhdCBtb3N0IE1heEJhY2tlbmRzIGVudHJpZXMgaW4gdmlzaXRl ZFByb2NzW10sCisJICogZGVhZGxvY2tEZXRhaWxzW10sIGFuZCBkZWFkbG9ja1Byb2NzW10uCiAJ ICovCiAJdmlzaXRlZFByb2NzID0gKFBHUFJPQyAqKikgcGFsbG9jKE1heEJhY2tlbmRzICogc2l6 ZW9mKFBHUFJPQyAqKSk7CiAJZGVhZGxvY2tEZXRhaWxzID0gKERFQURMT0NLX0lORk8gKikgcGFs bG9jKE1heEJhY2tlbmRzICogc2l6ZW9mKERFQURMT0NLX0lORk8pKTsKKwlkZWFkbG9ja1Byb2Nz ID0gKFBHUFJPQyAqKikgcGFsbG9jKE1heEJhY2tlbmRzICogc2l6ZW9mKFBHUFJPQyAqKSk7CiAK IAkvKgogCSAqIFRvcG9Tb3J0IG5lZWRzIHRvIGNvbnNpZGVyIGF0IG1vc3QgTWF4QmFja2VuZHMg d2FpdC1xdWV1ZSBlbnRyaWVzLCBhbmQKQEAgLTIxOSw2ICsyMjksOSBAQCBJbml0RGVhZExvY2tD aGVja2luZyh2b2lkKQogRGVhZExvY2tTdGF0ZQogRGVhZExvY2tDaGVjayhQR1BST0MgKnByb2Mp CiB7CisJYm9vbAkJdmljdGltc19jYW5jZWxlZCA9IGZhbHNlOworCityZXRyeToKIAkvKiBJbml0 aWFsaXplIHRvICJubyBjb25zdHJhaW50cyIgKi8KIAluQ3VyQ29uc3RyYWludHMgPSAwOwogCW5Q b3NzaWJsZUNvbnN0cmFpbnRzID0gMDsKQEAgLTI0Miw2ICsyNTUsNzYgQEAgRGVhZExvY2tDaGVj ayhQR1BST0MgKnByb2MpCiAJCWlmICghRmluZExvY2tDeWNsZShwcm9jLCBwb3NzaWJsZUNvbnN0 cmFpbnRzLCAmblNvZnRFZGdlcykpCiAJCQllbG9nKEZBVEFMLCAiZGVhZGxvY2sgc2VlbXMgdG8g aGF2ZSBkaXNhcHBlYXJlZCIpOwogCisJCS8qCisJCSAqIElmIGRlYWRsb2NrX3Byb3RlY3RlZCBp cyBzZXQsIHRyeSB0byByZXNvbHZlIHRoZSBkZWFkbG9jayBieQorCQkgKiBjYW5jZWxpbmcgYSBi bG9ja2luZyBwcm9jJ3MgbG9jayB3YWl0LCB0aGVuIHJlc3RhcnRpbmcgdGhlIHdob2xlCisJCSAq IGRlYWRsb2NrIGNoZWNrLiAgV2UgcmUtcnVuIERlYWRMb2NrQ2hlY2tSZWN1cnNlIChub3QganVz dAorCQkgKiBGaW5kTG9ja0N5Y2xlKSBhZnRlciBlYWNoIGNhbmNlbGxhdGlvbiBzbyB0aGF0IGFu eSByZW1haW5pbmcgY3ljbGUKKwkJICogYWxzbyBnZXRzIGEgY2hhbmNlIHRvIGJlIHJlc29sdmVk IGJ5IHRoZSBvcmRpbmFyeSBzb2Z0LWRlYWRsb2NrCisJCSAqIHF1ZXVlLXJlb3JkZXJpbmcgcGF0 aC4KKwkJICoKKwkJICogVGhlIHZpY3RpbSBpcyBjaG9zZW4gYnkgd2Fsa2luZyBkZWFkbG9ja1By b2NzW10gd2hpY2ggRmluZExvY2tDeWNsZQorCQkgKiBqdXN0IHBvcHVsYXRlZCB3aXRoIG9uZSBs aXZlIFBHUFJPQyBwb2ludGVyIHBlciBlZGdlIGluIHRoZSBjeWNsZS4KKwkJICogSW5kZXggMCBp cyBhbHdheXMgTXlQcm9jICh3ZSBzdGFydGVkIHRoZSBzZWFyY2ggZnJvbSBpdCksIHNvIHdlCisJ CSAqIHN0YXJ0IGF0IGluZGV4IDEsIHdoaWNoIGlzIHRoZSBkaXJlY3QgYmxvY2tlciBvZiBNeVBy b2MuCisJCSAqCisJCSAqIFdlIHNraXAgYW55IHByb2MgcnVubmluZyBhbiBhbnRpLXdyYXBhcm91 bmQgYXV0b3ZhY3V1bTogY2FuY2VsaW5nIHRoYXQKKwkJICogd291bGQgcmlzayBYSUQgd3JhcGFy b3VuZCwgd2hpY2ggaXMgc3RyaWN0bHkgd29yc2UgdGhhbiBsb3NpbmcgdGhlCisJCSAqIHdvcmsg dGhlIGRlYWRsb2NrX3Byb3RlY3RlZCBjYWxsZXIgaXMgdHJ5aW5nIHRvIHByZXNlcnZlLiBYWFg6 IGlzIGl0IHRydWU/CisJCSAqCisJCSAqIElmIG5vIGFjY2VwdGFibGUgdmljdGltIGV4aXN0cywg d2UgZmFsbCB0aHJvdWdoIHRvIERTX0hBUkRfREVBRExPQ0sKKwkJICogYW5kIHRoZSBwcm90ZWN0 ZWQgcHJvYyBjYW5jZWxzIGl0c2VsZiBhcyB1c3VhbC4KKwkJICovCisJCWlmIChkZWFkbG9ja19w cm90ZWN0ZWQpCisJCXsKKwkJCVBHUFJPQwkgICAqdmljdGltID0gTlVMTDsKKworCQkJZm9yIChp bnQgaSA9IDE7IGkgPCBuRGVhZGxvY2tEZXRhaWxzOyBpKyspCisJCQl7CisJCQkJUEdQUk9DCSAg ICp3ID0gZGVhZGxvY2tQcm9jc1tpXTsKKworCQkJCWlmICh3ID09IE15UHJvYykKKwkJCQkJY29u dGludWU7CisKKwkJCQkvKgorCQkJCSAqIFBST0NfSVNfQVVUT1ZBQ1VVTSBpcyBzYWZlIHRvIGNo ZWNrIGxvY2tsZXNzbHkgYmVjYXVzZSBpdCBpcworCQkJCSAqIHNldCBhdCBwcm9jZXNzIHN0YXJ0 IGFuZCBuZXZlciByZXNldC4gRm9yIGF1dG92YWMgd29ya2VycywKKwkJCQkgKiBhdm9pZCB3YWl0 aW5nIGZvciBQcm9jQXJyYXlMb2NrIGhlcmU7IGlmIHdlIGNhbiBhY3F1aXJlIGl0CisJCQkJICog Y29uZGl0aW9uYWxseSwgY2hlY2sgdGhlIG1pcnJvcmVkIHdyYXBhcm91bmQgZmxhZyB0byBhdm9p ZAorCQkJCSAqIGNhbmNlbGluZyBhbiBlbWVyZ2VuY3kgdmFjdXVtLiBJZiBub3QsIHNraXAgdGhp cyBjYW5kaWRhdGUKKwkJCQkgKiBjb25zZXJ2YXRpdmVseSBhbmQga2VlcCBsb29raW5nIGZvciBh bm90aGVyIHZpY3RpbS4KKwkJCQkgKi8KKwkJCQlpZiAody0+c3RhdHVzRmxhZ3MgJiBQUk9DX0lT X0FVVE9WQUNVVU0pCisJCQkJeworCQkJCQl1aW50OAkJc3RhdHVzRmxhZ3M7CisKKwkJCQkJaWYg KCFMV0xvY2tDb25kaXRpb25hbEFjcXVpcmUoUHJvY0FycmF5TG9jaywgTFdfU0hBUkVEKSkKKwkJ CQkJCWNvbnRpbnVlOworCisJCQkJCXN0YXR1c0ZsYWdzID0gUHJvY0dsb2JhbC0+c3RhdHVzRmxh Z3Nbdy0+cGd4YWN0b2ZmXTsKKwkJCQkJTFdMb2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKKwor CQkJCQlpZiAoc3RhdHVzRmxhZ3MgJiBQUk9DX1ZBQ1VVTV9GT1JfV1JBUEFST1VORCkKKwkJCQkJ CWNvbnRpbnVlOworCQkJCX0KKworCQkJCUFzc2VydCh3LT53YWl0TG9jayAhPSBOVUxMKTsKKwkJ CQlBc3NlcnQoIWRsaXN0X25vZGVfaXNfZGV0YWNoZWQoJnctPndhaXRMaW5rKSk7CisJCQkJdmlj dGltID0gdzsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHZpY3RpbSAhPSBOVUxMKQorCQkJ eworCQkJCVJlbW92ZUZyb21XYWl0UXVldWUodmljdGltLAorCQkJCQkJCQkJTG9ja1RhZ0hhc2hD b2RlKCYodmljdGltLT53YWl0TG9jay0+dGFnKSksCisJCQkJCQkJCQlQUk9DX1dBSVRfU1RBVFVT X0RFQURMT0NLX0NBTkNFTCk7CisJCQkJU2V0TGF0Y2goJnZpY3RpbS0+cHJvY0xhdGNoKTsKKwkJ CQl2aWN0aW1zX2NhbmNlbGVkID0gdHJ1ZTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfQorCQl9CisK IAkJcmV0dXJuIERTX0hBUkRfREVBRExPQ0s7CS8qIGNhbm5vdCBmaW5kIGEgbm9uLWRlYWRsb2Nr ZWQgc3RhdGUgKi8KIAl9CiAKQEAgLTI3Miw4ICszNTUsMTYgQEAgRGVhZExvY2tDaGVjayhQR1BS T0MgKnByb2MpCiAJCVByb2NMb2NrV2FrZXVwKEdldExvY2tzTWV0aG9kVGFibGUobG9jayksIGxv Y2spOwogCX0KIAotCS8qIFJldHVybiBjb2RlIHRlbGxzIGNhbGxlciBpZiB3ZSBoYWQgdG8gZXNj YXBlIGEgZGVhZGxvY2sgb3Igbm90ICovCi0JaWYgKG5XYWl0T3JkZXJzID4gMCkKKwkvKgorCSAq IFJldHVybiBjb2RlIHRlbGxzIGNhbGxlciBpZiB3ZSBoYWQgdG8gZXNjYXBlIGEgZGVhZGxvY2sg b3Igbm90LgorCSAqCisJICogSWYgd2UgY2FuY2VsZWQgYW55IHdhaXRlciBiZWNhdXNlIGRlYWRs b2NrX3Byb3RlY3RlZCB3YXMgc2V0LCByZXBvcnQKKwkgKiBEU19IQVJEX0RFQURMT0NLX0NBTkNF TEVEIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcmVtYWluZGVyIHdhcworCSAqIHJlc29sdmVk IGJ5IHF1ZXVlIHJlYXJyYW5nZW1lbnQgb3IgbmVlZGVkIG5vdGhpbmcgZnVydGhlci4KKwkgKi8K KwlpZiAodmljdGltc19jYW5jZWxlZCkKKwkJcmV0dXJuIERTX0hBUkRfREVBRExPQ0tfQ0FOQ0VM RUQ7CisJZWxzZSBpZiAobldhaXRPcmRlcnMgPiAwKQogCQlyZXR1cm4gRFNfU09GVF9ERUFETE9D SzsKIAllbHNlIGlmIChibG9ja2luZ19hdXRvdmFjdXVtX3Byb2MgIT0gTlVMTCkKIAkJcmV0dXJu IERTX0JMT0NLRURfQllfQVVUT1ZBQ1VVTTsKQEAgLTU5MCw2ICs2ODEsNyBAQCBGaW5kTG9ja0N5 Y2xlUmVjdXJzZU1lbWJlcihQR1BST0MgKmNoZWNrUHJvYywKIAkJCQkJCWluZm8tPmxvY2t0YWcg PSBsb2NrLT50YWc7CiAJCQkJCQlpbmZvLT5sb2NrbW9kZSA9IGNoZWNrUHJvYy0+d2FpdExvY2tN b2RlOwogCQkJCQkJaW5mby0+cGlkID0gY2hlY2tQcm9jLT5waWQ7CisJCQkJCQlkZWFkbG9ja1By b2NzW2RlcHRoXSA9IGNoZWNrUHJvYzsKIAogCQkJCQkJcmV0dXJuIHRydWU7CiAJCQkJCX0KQEAg LTY3OSw2ICs3NzEsNyBAQCBGaW5kTG9ja0N5Y2xlUmVjdXJzZU1lbWJlcihQR1BST0MgKmNoZWNr UHJvYywKIAkJCQkJaW5mby0+bG9ja3RhZyA9IGxvY2stPnRhZzsKIAkJCQkJaW5mby0+bG9ja21v ZGUgPSBjaGVja1Byb2MtPndhaXRMb2NrTW9kZTsKIAkJCQkJaW5mby0+cGlkID0gY2hlY2tQcm9j LT5waWQ7CisJCQkJCWRlYWRsb2NrUHJvY3NbZGVwdGhdID0gY2hlY2tQcm9jOwogCiAJCQkJCS8q CiAJCQkJCSAqIEFkZCB0aGlzIGVkZ2UgdG8gdGhlIGxpc3Qgb2Ygc29mdCBlZGdlcyBpbiB0aGUg Y3ljbGUKQEAgLTc1Myw2ICs4NDYsNyBAQCBGaW5kTG9ja0N5Y2xlUmVjdXJzZU1lbWJlcihQR1BS T0MgKmNoZWNrUHJvYywKIAkJCQkJaW5mby0+bG9ja3RhZyA9IGxvY2stPnRhZzsKIAkJCQkJaW5m by0+bG9ja21vZGUgPSBjaGVja1Byb2MtPndhaXRMb2NrTW9kZTsKIAkJCQkJaW5mby0+cGlkID0g Y2hlY2tQcm9jLT5waWQ7CisJCQkJCWRlYWRsb2NrUHJvY3NbZGVwdGhdID0gY2hlY2tQcm9jOwog CiAJCQkJCS8qCiAJCQkJCSAqIEFkZCB0aGlzIGVkZ2UgdG8gdGhlIGxpc3Qgb2Ygc29mdCBlZGdl cyBpbiB0aGUgY3ljbGUKQEAgLTExNTksNCArMTI1Myw1IEBAIFJlbWVtYmVyU2ltcGxlRGVhZExv Y2soUEdQUk9DICpwcm9jMSwKIAlpbmZvLT5sb2NrbW9kZSA9IHByb2MyLT53YWl0TG9ja01vZGU7 CiAJaW5mby0+cGlkID0gcHJvYzItPnBpZDsKIAluRGVhZGxvY2tEZXRhaWxzID0gMjsKKwlkZWFk bG9ja1Byb2NzWzBdID0gZGVhZGxvY2tQcm9jc1sxXSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L2xvY2suYwppbmRleCBjMjIxZmU5Njg4OS4uMWEyNjhmMDU5NjUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L2xvY2suYwpAQCAtMTI0NSw2ICsxMjQ1LDE0IEBAIExvY2tBY3F1aXJlRXh0ZW5kZWQoY29uc3Qg TE9DS1RBRyAqbG9ja3RhZywKIAkJCURlYWRMb2NrUmVwb3J0KCk7CiAJCQkvKiBEZWFkTG9ja1Jl cG9ydCgpIHdpbGwgbm90IHJldHVybiAqLwogCQl9CisJCWVsc2UgaWYgKHdhaXRSZXN1bHQgPT0g UFJPQ19XQUlUX1NUQVRVU19ERUFETE9DS19DQU5DRUwpCisJCXsKKwkJCUFzc2VydCghZG9udFdh aXQpOworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9UX1JfREVBRExP Q0tfREVURUNURUQpLAorCQkJCQkgZXJybXNnKCJkZWFkbG9jayBkZXRlY3RlZCIpLAorCQkJCQkg ZXJyZGV0YWlsKCJUaGlzIGJhY2tlbmQncyBsb2NrIHdhaXQgd2FzIGNhbmNlbGVkIHRvIHJlc29s dmUgYSBkZWFkbG9jayB3aXRoIGEgcHJvdGVjdGVkIHByb2Nlc3MuIikpKTsKKwkJfQogCX0KIAll bHNlCiAJCUxXTG9ja1JlbGVhc2UocGFydGl0aW9uTG9jayk7CkBAIC0yMDQzLDggKzIwNTEsOCBA QCB3YWl0b25sb2NrX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZykKIAogLyoKICAqIFJlbW92ZSBh IHByb2MgZnJvbSB0aGUgd2FpdC1xdWV1ZSBpdCBpcyBvbiAoY2FsbGVyIG11c3Qga25vdyBpdCBp cyBvbiBvbmUpLgotICogVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgcHJvYyBoYXMgZmFpbGVk IHRvIGdldCB0aGUgbG9jaywgc28gd2Ugc2V0IGl0cwotICogd2FpdFN0YXR1cyB0byBQUk9DX1dB SVRfU1RBVFVTX0VSUk9SLgorICogVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgcHJvYyBoYXMg ZmFpbGVkIHRvIGdldCB0aGUgbG9jaywgc28gY2FsbGVyIG11c3QKKyAqIHNwZWNpZnkgdGhlIGZh aWx1cmUgd2FpdFN0YXR1cyB0byBzdG9yZS4KICAqCiAgKiBBcHByb3ByaWF0ZSBwYXJ0aXRpb24g bG9jayBtdXN0IGJlIGhlbGQgYnkgY2FsbGVyLiAgQWxzbywgY2FsbGVyIGlzCiAgKiByZXNwb25z aWJsZSBmb3Igc2lnbmFsaW5nIHRoZSBwcm9jIGlmIG5lZWRlZC4KQEAgLTIwNTIsNyArMjA2MCw3 IEBAIHdhaXRvbmxvY2tfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogICogTkI6IHRoaXMgZG9l cyBub3QgY2xlYW4gdXAgYW55IGxvY2FsbG9jayBvYmplY3QgdGhhdCBtYXkgZXhpc3QgZm9yIHRo ZSBsb2NrLgogICovCiB2b2lkCi1SZW1vdmVGcm9tV2FpdFF1ZXVlKFBHUFJPQyAqcHJvYywgdWlu dDMyIGhhc2hjb2RlKQorUmVtb3ZlRnJvbVdhaXRRdWV1ZShQR1BST0MgKnByb2MsIHVpbnQzMiBo YXNoY29kZSwgUHJvY1dhaXRTdGF0dXMgd2FpdFN0YXR1cykKIHsKIAlMT0NLCSAgICp3YWl0TG9j ayA9IHByb2MtPndhaXRMb2NrOwogCVBST0NMT0NLICAgKnByb2Nsb2NrID0gcHJvYy0+d2FpdFBy b2NMb2NrOwpAQCAtMjA2NSw2ICsyMDczLDggQEAgUmVtb3ZlRnJvbVdhaXRRdWV1ZShQR1BST0Mg KnByb2MsIHVpbnQzMiBoYXNoY29kZSkKIAlBc3NlcnQod2FpdExvY2spOwogCUFzc2VydCghZGNs aXN0X2lzX2VtcHR5KCZ3YWl0TG9jay0+d2FpdFByb2NzKSk7CiAJQXNzZXJ0KDAgPCBsb2NrbWV0 aG9kaWQgJiYgbG9ja21ldGhvZGlkIDwgbGVuZ3Rob2YoTG9ja01ldGhvZHMpKTsKKwlBc3NlcnQo d2FpdFN0YXR1cyA9PSBQUk9DX1dBSVRfU1RBVFVTX0VSUk9SIHx8CisJCSAgIHdhaXRTdGF0dXMg PT0gUFJPQ19XQUlUX1NUQVRVU19ERUFETE9DS19DQU5DRUwpOwogCiAJLyogUmVtb3ZlIHByb2Mg ZnJvbSBsb2NrJ3Mgd2FpdCBxdWV1ZSAqLwogCWRjbGlzdF9kZWxldGVfZnJvbV90aG9yb3VnaGx5 KCZ3YWl0TG9jay0+d2FpdFByb2NzLCAmcHJvYy0+d2FpdExpbmspOwpAQCAtMjA4Miw3ICsyMDky LDcgQEAgUmVtb3ZlRnJvbVdhaXRRdWV1ZShQR1BST0MgKnByb2MsIHVpbnQzMiBoYXNoY29kZSkK IAkvKiBDbGVhbiB1cCB0aGUgcHJvYydzIG93biBzdGF0ZSwgYW5kIHBhc3MgaXQgdGhlIG9rL2Zh aWwgc2lnbmFsICovCiAJcHJvYy0+d2FpdExvY2sgPSBOVUxMOwogCXByb2MtPndhaXRQcm9jTG9j ayA9IE5VTEw7Ci0JcHJvYy0+d2FpdFN0YXR1cyA9IFBST0NfV0FJVF9TVEFUVVNfRVJST1I7CisJ cHJvYy0+d2FpdFN0YXR1cyA9IHdhaXRTdGF0dXM7CiAKIAkvKgogCSAqIERlbGV0ZSB0aGUgcHJv Y2xvY2sgaW1tZWRpYXRlbHkgaWYgaXQgcmVwcmVzZW50cyBubyBhbHJlYWR5LWhlbGQgbG9ja3Mu CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCAxYWMyNTA2OGQ2Mi4uOGFmYzI0N2JlYmUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAtOTIsNiArOTIsOSBAQCBzdGF0aWMgc2l6ZV90IEZh c3RQYXRoTG9ja0FycmF5U2htZW1TaXplOwogLyogSXMgYSBkZWFkbG9jayBjaGVjayBwZW5kaW5n PyAqLwogc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBnb3RfZGVhZGxvY2tfdGltZW91dDsK IAorLyogU2VlIHByb2MuaCAqLworYm9vbAkJZGVhZGxvY2tfcHJvdGVjdGVkID0gZmFsc2U7CisK IHN0YXRpYyB2b2lkIFJlbW92ZVByb2NGcm9tQXJyYXkoaW50IGNvZGUsIERhdHVtIGFyZyk7CiBz dGF0aWMgdm9pZCBQcm9jS2lsbChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIEF1 eGlsaWFyeVByb2NLaWxsKGludCBjb2RlLCBEYXR1bSBhcmcpOwpAQCAtODI1LDYgKzgyOCw4IEBA IExvY2tFcnJvckNsZWFudXAodm9pZCkKIAogCUFib3J0U3Ryb25nTG9ja0FjcXVpcmUoKTsKIAor CWRlYWRsb2NrX3Byb3RlY3RlZCA9IGZhbHNlOworCiAJLyogTm90aGluZyB0byBkbyBpZiB3ZSB3 ZXJlbid0IHdhaXRpbmcgZm9yIGEgbG9jayAqLwogCWxvY2tBd2FpdGVkID0gR2V0QXdhaXRlZExv Y2soKTsKIAlpZiAobG9ja0F3YWl0ZWQgPT0gTlVMTCkKQEAgLTg1NCw3ICs4NTksNyBAQCBMb2Nr RXJyb3JDbGVhbnVwKHZvaWQpCiAJaWYgKCFkbGlzdF9ub2RlX2lzX2RldGFjaGVkKCZNeVByb2Mt PndhaXRMaW5rKSkKIAl7CiAJCS8qIFdlIGNvdWxkIG5vdCBoYXZlIGJlZW4gZ3JhbnRlZCB0aGUg bG9jayB5ZXQgKi8KLQkJUmVtb3ZlRnJvbVdhaXRRdWV1ZShNeVByb2MsIGxvY2tBd2FpdGVkLT5o YXNoY29kZSk7CisJCVJlbW92ZUZyb21XYWl0UXVldWUoTXlQcm9jLCBsb2NrQXdhaXRlZC0+aGFz aGNvZGUsIFBST0NfV0FJVF9TVEFUVVNfRVJST1IpOwogCX0KIAllbHNlCiAJewpAQCAtMTI2Niw4 ICsxMjcxLDE2IEBAIEpvaW5XYWl0UXVldWUoTE9DQUxMT0NLICpsb2NhbGxvY2ssIExvY2tNZXRo b2QgbG9ja01ldGhvZFRhYmxlLCBib29sIGRvbnRXYWl0KQogCS8qCiAJICogSWYgd2UgZGV0ZWN0 ZWQgZGVhZGxvY2ssIGdpdmUgdXAgd2l0aG91dCB3YWl0aW5nLiAgVGhpcyBtdXN0IGFncmVlIHdp dGgKIAkgKiBDaGVja0RlYWRMb2NrJ3MgcmVjb3ZlcnkgY29kZS4KKwkgKgorCSAqIEhvd2V2ZXIs IGlmIGRlYWRsb2NrX3Byb3RlY3RlZCBpcyBzZXQsIHNraXAgdGhlIGVhcmx5IGV4aXQgYW5kIHBy b2NlZWQKKwkgKiB0byBQcm9jU2xlZXAgc28gdGhlIGZ1bGwgZGVhZGxvY2sgZGV0ZWN0b3IgY2Fu IGhhbmRsZSBpdCAoYnkgbWFraW5nIGEKKwkgKiBibG9ja2luZyBwcm9jIHRoZSB2aWN0aW0gaW5z dGVhZCBvZiB1cykuCisJICoKKwkgKiBYWFg6IHdoZW4gd2UgYnlwYXNzIHRoZSBlYXJseS1leGl0 IGhlcmUsIHdlIGxvc2UgdGhlIGFiaWxpdHkgdG8gcmVhY3QgdG8KKwkgKiB0aGUgZGVhZGxvY2sg aW1tZWRpYXRlbHk6IFByb2NTbGVlcCB3aWxsIG9ubHkgcnVuIHRoZSBmdWxsIGRldGVjdG9yCisJ ICogYWZ0ZXIgZGVhZGxvY2tfdGltZW91dCBlbGFwc2VzLiBTaG91bGQgd2UgZml4IHRoYXQ/CiAJ ICovCi0JaWYgKGVhcmx5X2RlYWRsb2NrKQorCWlmIChlYXJseV9kZWFkbG9jayAmJiAhZGVhZGxv Y2tfcHJvdGVjdGVkKQogCQlyZXR1cm4gUFJPQ19XQUlUX1NUQVRVU19FUlJPUjsKIAogCS8qCkBA IC0xMzA4LDggKzEzMjEsMTAgQEAgSm9pbldhaXRRdWV1ZShMT0NBTExPQ0sgKmxvY2FsbG9jaywg TG9ja01ldGhvZCBsb2NrTWV0aG9kVGFibGUsIGJvb2wgZG9udFdhaXQpCiAgKgogICogUmVzdWx0 IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICoKLSAqICBQUk9DX1dBSVRfU1RBVFVTX09LICAg ICAgLSBsb2NrIHdhcyBncmFudGVkCi0gKiAgUFJPQ19XQUlUX1NUQVRVU19FUlJPUiAgIC0gYSBk ZWFkbG9jayB3YXMgZGV0ZWN0ZWQKKyAqICBQUk9DX1dBSVRfU1RBVFVTX09LICAgICAgICAgICAg ICAgLSBsb2NrIHdhcyBncmFudGVkCisgKiAgUFJPQ19XQUlUX1NUQVRVU19FUlJPUiAgICAgICAg ICAgIC0gYSBkZWFkbG9jayB3YXMgZGV0ZWN0ZWQKKyAqICBQUk9DX1dBSVRfU1RBVFVTX0RFQURM T0NLX0NBTkNFTCAgLSB0aGlzIGJhY2tlbmQgd2FzIGNob3NlbiBhcyB0aGUKKyAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWN0aW0gb2YgYSBwcm90ZWN0ZWQgZGVhZGxv Y2sKICAqLwogUHJvY1dhaXRTdGF0dXMKIFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaykK QEAgLTEzNDUsOCArMTM2MCw4IEBAIFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaykKIAkv KgogCSAqIFNldCB0aW1lciBzbyB3ZSBjYW4gd2FrZSB1cCBhZnRlciBhd2hpbGUgYW5kIGNoZWNr IGZvciBhIGRlYWRsb2NrLiBJZiBhCiAJICogZGVhZGxvY2sgaXMgZGV0ZWN0ZWQsIHRoZSBoYW5k bGVyIHNldHMgTXlQcm9jLT53YWl0U3RhdHVzID0KLQkgKiBQUk9DX1dBSVRfU1RBVFVTX0VSUk9S LCBhbGxvd2luZyB1cyB0byBrbm93IHRoYXQgd2UgbXVzdCByZXBvcnQgZmFpbHVyZQotCSAqIHJh dGhlciB0aGFuIHN1Y2Nlc3MuCisJICogb25lIG9mIHRoZSBmYWlsdXJlIHdhaXQgc3RhdHVzZXMs IGFsbG93aW5nIHVzIHRvIGtub3cgdGhhdCB3ZSBtdXN0CisJICogcmVwb3J0IGZhaWx1cmUgcmF0 aGVyIHRoYW4gc3VjY2Vzcy4KIAkgKgogCSAqIEJ5IGRlbGF5aW5nIHRoZSBjaGVjayB1bnRpbCB3 ZSd2ZSB3YWl0ZWQgZm9yIGEgYml0LCB3ZSBjYW4gYXZvaWQKIAkgKiBydW5uaW5nIHRoZSByYXRo ZXIgZXhwZW5zaXZlIGRlYWRsb2NrLWNoZWNrIGNvZGUgaW4gbW9zdCBjYXNlcy4KQEAgLTE1NjAs NiArMTU3NSwxNyBAQCBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxvY2spCiAJCQlhbGxvd19h dXRvdmFjdXVtX2NhbmNlbCA9IGZhbHNlOwogCQl9CiAKKwkJLyoKKwkJICogSWYgdGhlIGRlYWRs b2NrIGRldGVjdG9yIHJlc29sdmVkIGEgaGFyZCBkZWFkbG9jayBieSBjYW5jZWxpbmcgYQorCQkg KiBibG9ja2luZyBwcm9jJ3MgbG9jayB3YWl0IChiZWNhdXNlIHdlIGhhdmUgZGVhZGxvY2tfcHJv dGVjdGVkIHNldCksCisJCSAqIHJlc3RhcnQgdGhlIGRlYWRsb2NrIHRpbWVvdXQgYW5kIGNvbnRp bnVlIHdhaXRpbmcgZm9yIHRoZSBsb2NrLgorCQkgKi8KKwkJaWYgKGRlYWRsb2NrX3N0YXRlID09 IERTX0hBUkRfREVBRExPQ0tfQ0FOQ0VMRUQpCisJCXsKKwkJCWdvdF9kZWFkbG9ja190aW1lb3V0 ID0gZmFsc2U7CisJCQllbmFibGVfdGltZW91dF9hZnRlcihERUFETE9DS19USU1FT1VULCBEZWFk bG9ja1RpbWVvdXQpOworCQl9CisKIAkJLyoKIAkJICogSWYgYXdva2VuIGFmdGVyIHRoZSBkZWFk bG9jayBjaGVjayBpbnRlcnJ1cHQgaGFzIHJ1biwgaW5jcmVtZW50IHRoZQogCQkgKiBsb2NrIHN0 YXRpc3RpY3MgY291bnRlcnMgYW5kIGlmIGxvZ19sb2NrX3dhaXRzIGlzIG9uLCB0aGVuIHJlcG9y dApAQCAtMTYyNyw2ICsxNjUzLDEzIEBAIFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaykK IAkJCQkJCQkJCQkJCSAgICJQcm9jZXNzZXMgaG9sZGluZyB0aGUgbG9jazogJXMuIFdhaXQgcXVl dWU6ICVzLiIsCiAJCQkJCQkJCQkJCQkgICBsb2NrSG9sZGVyc051bSwgbG9ja19ob2xkZXJzX3Ni dWYuZGF0YSwgbG9ja193YWl0ZXJzX3NidWYuZGF0YSkpKSk7CiAJCQkJfQorCQkJCWVsc2UgaWYg KGRlYWRsb2NrX3N0YXRlID09IERTX0hBUkRfREVBRExPQ0tfQ0FOQ0VMRUQpCisJCQkJCWVyZXBv cnQoTE9HLAorCQkJCQkJCShlcnJtc2coInByb2Nlc3MgJWQgcmVzb2x2ZWQgZGVhZGxvY2sgZm9y ICVzIG9uICVzIGJ5IGNhbmNlbGluZyBhIGJsb2NraW5nIGxvY2sgd2FpdCBhZnRlciAlbGQuJTAz ZCBtcyIsCisJCQkJCQkJCQlNeVByb2NQaWQsIG1vZGVuYW1lLCBidWYuZGF0YSwgbXNlY3MsIHVz ZWNzKSwKKwkJCQkJCQkgKGVycmRldGFpbF9sb2dfcGx1cmFsKCJQcm9jZXNzIGhvbGRpbmcgdGhl IGxvY2s6ICVzLiBXYWl0IHF1ZXVlOiAlcy4iLAorCQkJCQkJCQkJCQkJICAgIlByb2Nlc3NlcyBo b2xkaW5nIHRoZSBsb2NrOiAlcy4gV2FpdCBxdWV1ZTogJXMuIiwKKwkJCQkJCQkJCQkJCSAgIGxv Y2tIb2xkZXJzTnVtLCBsb2NrX2hvbGRlcnNfc2J1Zi5kYXRhLCBsb2NrX3dhaXRlcnNfc2J1Zi5k YXRhKSkpKTsKIAogCQkJCWlmIChteVdhaXRTdGF0dXMgPT0gUFJPQ19XQUlUX1NUQVRVU19XQUlU SU5HKQogCQkJCXsKQEAgLTE2NTcsMTMgKzE2OTAsMjEgQEAgUHJvY1NsZWVwKExPQ0FMTE9DSyAq bG9jYWxsb2NrKQogCQkJCQllcmVwb3J0KExPRywKIAkJCQkJCQkoZXJybXNnKCJwcm9jZXNzICVk IGFjcXVpcmVkICVzIG9uICVzIGFmdGVyICVsZC4lMDNkIG1zIiwKIAkJCQkJCQkJCU15UHJvY1Bp ZCwgbW9kZW5hbWUsIGJ1Zi5kYXRhLCBtc2VjcywgdXNlY3MpKSk7CisJCQkJZWxzZSBpZiAobXlX YWl0U3RhdHVzID09IFBST0NfV0FJVF9TVEFUVVNfREVBRExPQ0tfQ0FOQ0VMKQorCQkJCQllcmVw b3J0KExPRywKKwkJCQkJCQkoZXJybXNnKCJwcm9jZXNzICVkIHdhcyBjaG9zZW4gYXMgZGVhZGxv Y2sgdmljdGltIGZvciAlcyBvbiAlcyBhZnRlciAlbGQuJTAzZCBtcyIsCisJCQkJCQkJCQlNeVBy b2NQaWQsIG1vZGVuYW1lLCBidWYuZGF0YSwgbXNlY3MsIHVzZWNzKSwKKwkJCQkJCQkgKGVycmRl dGFpbF9sb2dfcGx1cmFsKCJQcm9jZXNzIGhvbGRpbmcgdGhlIGxvY2s6ICVzLiBXYWl0IHF1ZXVl OiAlcy4iLAorCQkJCQkJCQkJCQkJICAgIlByb2Nlc3NlcyBob2xkaW5nIHRoZSBsb2NrOiAlcy4g V2FpdCBxdWV1ZTogJXMuIiwKKwkJCQkJCQkJCQkJCSAgIGxvY2tIb2xkZXJzTnVtLCBsb2NrX2hv bGRlcnNfc2J1Zi5kYXRhLCBsb2NrX3dhaXRlcnNfc2J1Zi5kYXRhKSkpKTsKIAkJCQllbHNlCiAJ CQkJewogCQkJCQlBc3NlcnQobXlXYWl0U3RhdHVzID09IFBST0NfV0FJVF9TVEFUVVNfRVJST1Ip OwogCiAJCQkJCS8qCi0JCQkJCSAqIEN1cnJlbnRseSwgdGhlIGRlYWRsb2NrIGNoZWNrZXIgYWx3 YXlzIGtpY2tzIGl0cyBvd24KLQkJCQkJICogcHJvY2Vzcywgd2hpY2ggbWVhbnMgdGhhdCB3ZSds bCBvbmx5IHNlZQorCQkJCQkgKiBBIHBsYWluIFBST0NfV0FJVF9TVEFUVVNfRVJST1IgbWVhbnMg dGhlIGRlYWRsb2NrCisJCQkJCSAqIGNoZWNrZXIga2lja2VkIG91ciBvd24gcHJvY2Vzcywgd2hp Y2ggbWVhbnMgdGhhdCB3ZSdsbAorCQkJCQkgKiBvbmx5IHNlZQogCQkJCQkgKiBQUk9DX1dBSVRf U1RBVFVTX0VSUk9SIHdoZW4gZGVhZGxvY2tfc3RhdGUgPT0KIAkJCQkJICogRFNfSEFSRF9ERUFE TE9DSywgYW5kIHRoZXJlJ3Mgbm8gbmVlZCB0byBwcmludAogCQkJCQkgKiByZWR1bmRhbnQgbWVz c2FnZXMuICBCdXQgZm9yIGNvbXBsZXRlbmVzcyBhbmQKQEAgLTE4NzAsMTQgKzE5MTEsMTYgQEAg Q2hlY2tEZWFkTG9jayh2b2lkKQogCQkgKiBHZXQgdGhpcyBwcm9jZXNzIG91dCBvZiB3YWl0IHN0 YXRlLiAoTm90ZTogd2UgY291bGQgZG8gdGhpcyBtb3JlCiAJCSAqIGVmZmljaWVudGx5IGJ5IHJl bHlpbmcgb24gbG9ja0F3YWl0ZWQsIGJ1dCB1c2UgdGhpcyBjb2RpbmcgdG8KIAkJICogcHJlc2Vy dmUgdGhlIGZsZXhpYmlsaXR5IHRvIGtpbGwgc29tZSBvdGhlciB0cmFuc2FjdGlvbiB0aGFuIHRo ZQotCQkgKiBvbmUgZGV0ZWN0aW5nIHRoZSBkZWFkbG9jay4pCisJCSAqIG9uZSBkZXRlY3Rpbmcg dGhlIGRlYWRsb2NrLiAgKERTX0hBUkRfREVBRExPQ0tfQ0FOQ0VMRUQgYWJvdmUKKwkJICogYWxy ZWFkeSBleGVyY2lzZXMgdGhhdCBmbGV4aWJpbGl0eTogd2hlbiBkZWFkbG9ja19wcm90ZWN0ZWQg aXMgc2V0LAorCQkgKiB3ZSBjYW5jZWwgYSAqYmxvY2tpbmcqIHByb2MncyBsb2NrIHdhaXQgaW5z dGVhZCBvZiBvdXIgb3duLikKIAkJICoKIAkJICogUmVtb3ZlRnJvbVdhaXRRdWV1ZSBzZXRzIE15 UHJvYy0+d2FpdFN0YXR1cyB0bwogCQkgKiBQUk9DX1dBSVRfU1RBVFVTX0VSUk9SLCBzbyBQcm9j U2xlZXAgd2lsbCByZXBvcnQgYW4gZXJyb3IgYWZ0ZXIgd2UKIAkJICogcmV0dXJuLgogCQkgKi8K IAkJQXNzZXJ0KE15UHJvYy0+d2FpdExvY2sgIT0gTlVMTCk7Ci0JCVJlbW92ZUZyb21XYWl0UXVl dWUoTXlQcm9jLCBMb2NrVGFnSGFzaENvZGUoJihNeVByb2MtPndhaXRMb2NrLT50YWcpKSk7CisJ CVJlbW92ZUZyb21XYWl0UXVldWUoTXlQcm9jLCBMb2NrVGFnSGFzaENvZGUoJihNeVByb2MtPndh aXRMb2NrLT50YWcpKSwgUFJPQ19XQUlUX1NUQVRVU19FUlJPUik7CiAKIAkJLyoKIAkJICogV2Un cmUgZG9uZSBoZXJlLiAgVHJhbnNhY3Rpb24gYWJvcnQgY2F1c2VkIGJ5IHRoZSBlcnJvciB0aGF0 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvbG9jay5oCmluZGV4IGVlM2NiMWRjMjAzLi41ZTEzZGU1MjljNSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2Nr LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogLyogc3RydWN0IFBHUFJPQyBpcyBkZWNsYXJlZCBpbiBw cm9jLmgsIGJ1dCBtdXN0IGZvcndhcmQtcmVmZXJlbmNlIGl0ICovCiB0eXBlZGVmIHN0cnVjdCBQ R1BST0MgUEdQUk9DOwordHlwZWRlZiBlbnVtIFByb2NXYWl0U3RhdHVzIFByb2NXYWl0U3RhdHVz OwogCiAvKiBHVUMgdmFyaWFibGVzICovCiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9sb2Nr c19wZXJfeGFjdDsKQEAgLTM0Miw2ICszNDMsOSBAQCB0eXBlZGVmIGVudW0KIAlEU19OT19ERUFE TE9DSywJCQkJLyogbm8gZGVhZGxvY2sgZGV0ZWN0ZWQgKi8KIAlEU19TT0ZUX0RFQURMT0NLLAkJ CS8qIGRlYWRsb2NrIGF2b2lkZWQgYnkgcXVldWUgcmVhcnJhbmdlbWVudCAqLwogCURTX0hBUkRf REVBRExPQ0ssCQkJLyogZGVhZGxvY2ssIG5vIHdheSBvdXQgYnV0IEVSUk9SICovCisJRFNfSEFS RF9ERUFETE9DS19DQU5DRUxFRCwJLyogZGVhZGxvY2sgcmVzb2x2ZWQgYnkgY2FuY2VsaW5nIGEg YmxvY2tpbmcKKwkJCQkJCQkJICogcHJvYydzIGxvY2sgd2FpdCAod2hlbgorCQkJCQkJCQkgKiBk ZWFkbG9ja19wcm90ZWN0ZWQgaXMgc2V0KSAqLwogCURTX0JMT0NLRURfQllfQVVUT1ZBQ1VVTSwJ Lyogbm8gZGVhZGxvY2s7IHF1ZXVlIGJsb2NrZWQgYnkgYXV0b3ZhY3V1bQogCQkJCQkJCQkgKiB3 b3JrZXIgKi8KIH0gRGVhZExvY2tTdGF0ZTsKQEAgLTQxOCw3ICs0MjIsNyBAQCBleHRlcm4gdm9p ZCBHcmFudEF3YWl0ZWRMb2NrKHZvaWQpOwogZXh0ZXJuIExPQ0FMTE9DSyAqR2V0QXdhaXRlZExv Y2sodm9pZCk7CiBleHRlcm4gdm9pZCBSZXNldEF3YWl0ZWRMb2NrKHZvaWQpOwogCi1leHRlcm4g dm9pZCBSZW1vdmVGcm9tV2FpdFF1ZXVlKFBHUFJPQyAqcHJvYywgdWludDMyIGhhc2hjb2RlKTsK K2V4dGVybiB2b2lkIFJlbW92ZUZyb21XYWl0UXVldWUoUEdQUk9DICpwcm9jLCB1aW50MzIgaGFz aGNvZGUsIFByb2NXYWl0U3RhdHVzIHdhaXRTdGF0dXMpOwogZXh0ZXJuIExvY2tEYXRhICpHZXRM b2NrU3RhdHVzRGF0YSh2b2lkKTsKIGV4dGVybiBCbG9ja2VkUHJvY3NEYXRhICpHZXRCbG9ja2Vy U3RhdHVzRGF0YShpbnQgYmxvY2tlZF9waWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCmluZGV4IDNlMWQxZmFk NWY5Li5lZjAyNjM5ODM0ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKQEAgLTE0NiwxMSArMTQ2LDEyIEBAIGV4 dGVybiBQR0RMTElNUE9SVCBpbnQgRmFzdFBhdGhMb2NrR3JvdXBzUGVyQmFja2VuZDsKICNkZWZp bmUgREVMQVlfQ0hLUFRfQ09NUExFVEUJKDE8PDEpCiAjZGVmaW5lIERFTEFZX0NIS1BUX0lOX0NP TU1JVAkoREVMQVlfQ0hLUFRfU1RBUlQgfCAxPDwyKQogCi10eXBlZGVmIGVudW0KK3R5cGVkZWYg ZW51bSBQcm9jV2FpdFN0YXR1cwogewogCVBST0NfV0FJVF9TVEFUVVNfT0ssCiAJUFJPQ19XQUlU X1NUQVRVU19XQUlUSU5HLAogCVBST0NfV0FJVF9TVEFUVVNfRVJST1IsCisJUFJPQ19XQUlUX1NU QVRVU19ERUFETE9DS19DQU5DRUwsCiB9IFByb2NXYWl0U3RhdHVzOwogCiAvKgpAQCAtNTQzLDYg KzU0NCwxMiBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IFRyYW5zYWN0aW9uVGltZW91dDsKIGV4 dGVybiBQR0RMTElNUE9SVCBpbnQgSWRsZVNlc3Npb25UaW1lb3V0OwogZXh0ZXJuIFBHRExMSU1Q T1JUIGJvb2wgbG9nX2xvY2tfd2FpdHM7CiAKKy8qCisgKiBCYWNrZW5kLWxvY2FsIGZsYWc6IHdo ZW4gdHJ1ZSwgdGhlIGRlYWRsb2NrIGRldGVjdG9yIHdpbGwgbWFrZSBhIGJsb2NraW5nCisgKiBw cm9jIHRoZSB2aWN0aW0gaW5zdGVhZCBvZiB0aGlzIGJhY2tlbmQuCisgKi8KK2V4dGVybiBQR0RM TElNUE9SVCBib29sIGRlYWRsb2NrX3Byb3RlY3RlZDsKKwogI2lmZGVmIEVYRUNfQkFDS0VORAog ZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAqQXV4aWxpYXJ5UHJvY3M7CiAjZW5kaWYKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9yZXBhY2su b3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2V4cGVjdGVkL3JlcGFjay5v dXQKaW5kZXggYjU3NWU5MDUyZWUuLmFlNzA2MTI1MzYwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9t b2R1bGVzL2luamVjdGlvbl9wb2ludHMvZXhwZWN0ZWQvcmVwYWNrLm91dAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvZXhwZWN0ZWQvcmVwYWNrLm91dApAQCAtMSw0ICsx LDQgQEAKLVBhcnNlZCB0ZXN0IHNwZWMgd2l0aCAyIHNlc3Npb25zCitQYXJzZWQgdGVzdCBzcGVj IHdpdGggMyBzZXNzaW9ucwogCiBzdGFydGluZyBwZXJtdXRhdGlvbjogd2FpdF9iZWZvcmVfbG9j ayBjaGFuZ2VfZXhpc3RpbmcgY2hhbmdlX25ldyBjaGFuZ2Vfc3VieGFjdDEgY2hhbmdlX3N1Ynhh Y3QyIGNoZWNrMiB3YWtldXBfYmVmb3JlX2xvY2sgY2hlY2sxCiBpbmplY3Rpb25fcG9pbnRzX2F0 dGFjaApAQCAtMTExLDMgKzExMSwxMzEgQEAgaW5qZWN0aW9uX3BvaW50c19kZXRhY2gKICAgICAg ICAgICAgICAgICAgICAgICAgCiAoMSByb3cpCiAKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHdh aXRfYmVmb3JlX2xvY2sgYmVnaW5fdHhuIGxvY2tfdGFibGUgczNfd2FrZXVwIGVuZF90eG4KK2lu amVjdGlvbl9wb2ludHNfYXR0YWNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAg ICAgICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCB3YWl0X2JlZm9yZV9sb2NrOiAKKwlSRVBB Q0sgKENPTkNVUlJFTlRMWSkgcmVwYWNrX3Rlc3QgVVNJTkcgSU5ERVggcmVwYWNrX3Rlc3RfcGtl eTsKKyA8d2FpdGluZyAuLi4+CitzdGVwIGJlZ2luX3R4bjogCisJQkVHSU47CisKK3N0ZXAgbG9j a190YWJsZTogCisJTE9DSyBUQUJMRSByZXBhY2tfdGVzdCBJTiBBQ0NFU1MgRVhDTFVTSVZFIE1P REU7CisgPHdhaXRpbmcgLi4uPgorc3RlcCBzM193YWtldXA6IAorCVNFTEVDVCBpbmplY3Rpb25f cG9pbnRzX3dha2V1cCgncmVwYWNrLWNvbmN1cnJlbnRseS1iZWZvcmUtbG9jaycpOworCitpbmpl Y3Rpb25fcG9pbnRzX3dha2V1cAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAg ICAgICAgICAgICAgCisoMSByb3cpCisKK3N0ZXAgd2FpdF9iZWZvcmVfbG9jazogPC4uLiBjb21w bGV0ZWQ+CitzdGVwIGxvY2tfdGFibGU6IDwuLi4gY29tcGxldGVkPgorc3RlcCBlbmRfdHhuOiAK KwlDT01NSVQ7CisKK2luamVjdGlvbl9wb2ludHNfZGV0YWNoCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworCitzdGFydGluZyBwZXJt dXRhdGlvbjogczFfdGltZW91dF9mYXN0IHMyX3RpbWVvdXRfc2xvdyB3YWl0X2JlZm9yZV9sb2Nr IGJlZ2luX2FuZF9yZWFkIGxvY2tfdGFibGUgczNfd2FrZXVwIGVuZF90eG4KK2luamVjdGlvbl9w b2ludHNfYXR0YWNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAg ICAgICAKKygxIHJvdykKKworc3RlcCBzMV90aW1lb3V0X2Zhc3Q6IAorCVNFVCBkZWFkbG9ja190 aW1lb3V0ID0gJzEwbXMnOworCitzdGVwIHMyX3RpbWVvdXRfc2xvdzogCisJU0VUIGRlYWRsb2Nr X3RpbWVvdXQgPSAnMTBzJzsKKworc3RlcCB3YWl0X2JlZm9yZV9sb2NrOiAKKwlSRVBBQ0sgKENP TkNVUlJFTlRMWSkgcmVwYWNrX3Rlc3QgVVNJTkcgSU5ERVggcmVwYWNrX3Rlc3RfcGtleTsKKyA8 d2FpdGluZyAuLi4+CitzdGVwIGJlZ2luX2FuZF9yZWFkOiAKKwlCRUdJTjsKKwlTRUxFQ1QgMSBG Uk9NIHJlcGFja190ZXN0IExJTUlUIDE7CisKKz9jb2x1bW4/CistLS0tLS0tLQorICAgICAgIDEK KygxIHJvdykKKworc3RlcCBsb2NrX3RhYmxlOiAKKwlMT0NLIFRBQkxFIHJlcGFja190ZXN0IElO IEFDQ0VTUyBFWENMVVNJVkUgTU9ERTsKKyA8d2FpdGluZyAuLi4+CitzdGVwIHMzX3dha2V1cDog CisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdyZXBhY2stY29uY3VycmVudGx5LWJl Zm9yZS1sb2NrJyk7CisKK2luamVjdGlvbl9wb2ludHNfd2FrZXVwCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCB3YWl0X2Jl Zm9yZV9sb2NrOiA8Li4uIGNvbXBsZXRlZD4KK3N0ZXAgbG9ja190YWJsZTogPC4uLiBjb21wbGV0 ZWQ+CitFUlJPUjogIGRlYWRsb2NrIGRldGVjdGVkCitzdGVwIGVuZF90eG46IAorCUNPTU1JVDsK KworaW5qZWN0aW9uX3BvaW50c19kZXRhY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg ICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBz MV90aW1lb3V0X3Nsb3cgczJfdGltZW91dF9mYXN0IHdhaXRfYmVmb3JlX2xvY2sgYmVnaW5fYW5k X3JlYWQgbG9ja190YWJsZSBzM193YWtldXAgZW5kX3R4bgoraW5qZWN0aW9uX3BvaW50c19hdHRh Y2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAorKDEg cm93KQorCitzdGVwIHMxX3RpbWVvdXRfc2xvdzogCisJU0VUIGRlYWRsb2NrX3RpbWVvdXQgPSAn MTBzJzsKKworc3RlcCBzMl90aW1lb3V0X2Zhc3Q6IAorCVNFVCBkZWFkbG9ja190aW1lb3V0ID0g JzEwbXMnOworCitzdGVwIHdhaXRfYmVmb3JlX2xvY2s6IAorCVJFUEFDSyAoQ09OQ1VSUkVOVExZ KSByZXBhY2tfdGVzdCBVU0lORyBJTkRFWCByZXBhY2tfdGVzdF9wa2V5OworIDx3YWl0aW5nIC4u Lj4KK3N0ZXAgYmVnaW5fYW5kX3JlYWQ6IAorCUJFR0lOOworCVNFTEVDVCAxIEZST00gcmVwYWNr X3Rlc3QgTElNSVQgMTsKKworP2NvbHVtbj8KKy0tLS0tLS0tCisgICAgICAgMQorKDEgcm93KQor CitzdGVwIGxvY2tfdGFibGU6IAorCUxPQ0sgVEFCTEUgcmVwYWNrX3Rlc3QgSU4gQUNDRVNTIEVY Q0xVU0lWRSBNT0RFOworIDx3YWl0aW5nIC4uLj4KK3N0ZXAgczNfd2FrZXVwOiAKKwlTRUxFQ1Qg aW5qZWN0aW9uX3BvaW50c193YWtldXAoJ3JlcGFjay1jb25jdXJyZW50bHktYmVmb3JlLWxvY2sn KTsKKworaW5qZWN0aW9uX3BvaW50c193YWtldXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg ICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitzdGVwIGxvY2tfdGFibGU6IDwuLi4g Y29tcGxldGVkPgorRVJST1I6ICBkZWFkbG9jayBkZXRlY3RlZAorc3RlcCB3YWl0X2JlZm9yZV9s b2NrOiA8Li4uIGNvbXBsZXRlZD4KK3N0ZXAgZW5kX3R4bjogCisJQ09NTUlUOworCitpbmplY3Rp b25fcG9pbnRzX2RldGFjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAg ICAgICAgICAgCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0 aW9uX3BvaW50cy9zcGVjcy9yZXBhY2suc3BlYyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9u X3BvaW50cy9zcGVjcy9yZXBhY2suc3BlYwppbmRleCBkNzI3YTliMDU2Yi4uZjk1ZjY3ODIzNTUg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcGVjcy9yZXBh Y2suc3BlYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvc3BlY3MvcmVw YWNrLnNwZWMKQEAgLTI4LDYgKzI4LDE0IEBAIHNldHVwCiAJU0VMRUNUIGluamVjdGlvbl9wb2lu dHNfc2V0X2xvY2FsKCk7CiAJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdyZXBhY2st Y29uY3VycmVudGx5LWJlZm9yZS1sb2NrJywgJ3dhaXQnKTsKIH0KK3N0ZXAgczFfdGltZW91dF9m YXN0Cit7CisJU0VUIGRlYWRsb2NrX3RpbWVvdXQgPSAnMTBtcyc7Cit9CitzdGVwIHMxX3RpbWVv dXRfc2xvdworeworCVNFVCBkZWFkbG9ja190aW1lb3V0ID0gJzEwcyc7Cit9CiAjIFBlcmZvcm0g dGhlIGluaXRpYWwgbG9hZCBhbmQgd2FpdCBmb3IgczIgdG8gZG8gc29tZSBkYXRhIGNoYW5nZXMu CiBzdGVwIHdhaXRfYmVmb3JlX2xvY2sKIHsKQEAgLTYxLDYgKzY5LDE0IEBAIHRlYXJkb3duCiB9 CiAKIHNlc3Npb24gczIKK3N0ZXAgczJfdGltZW91dF9mYXN0Cit7CisJU0VUIGRlYWRsb2NrX3Rp bWVvdXQgPSAnMTBtcyc7Cit9CitzdGVwIHMyX3RpbWVvdXRfc2xvdworeworCVNFVCBkZWFkbG9j a190aW1lb3V0ID0gJzEwcyc7Cit9CiAjIENoYW5nZSB0aGUgZXhpc3RpbmcgZGF0YS4gVVBEQVRF IGNoYW5nZXMgYm90aCBrZXkgYW5kIG5vbi1rZXkgY29sdW1ucy4gQWxzbwogIyB1cGRhdGUgb25l IHJvdyB0d2ljZSB0byB0ZXN0IHdoZXRoZXIgdHVwbGUgdmVyc2lvbiBnZW5lcmF0ZWQgYnkgdGhp cyBzZXNzaW9uCiAjIGNhbiBiZSBmb3VuZC4KQEAgLTEyOCw2ICsxNDQsMzAgQEAgc3RlcCB3YWtl dXBfYmVmb3JlX2xvY2sKIHsKIAlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ3JlcGFj ay1jb25jdXJyZW50bHktYmVmb3JlLWxvY2snKTsKIH0KKyMgU3RlcHMgdXNlZCBpbiBsb2NrIGNv bnRlbnRpb24gdGVzdHMuCitzdGVwIGJlZ2luX3R4bgoreworCUJFR0lOOworfQorc3RlcCBiZWdp bl9hbmRfcmVhZAoreworCUJFR0lOOworCVNFTEVDVCAxIEZST00gcmVwYWNrX3Rlc3QgTElNSVQg MTsKK30KK3N0ZXAgbG9ja190YWJsZQoreworCUxPQ0sgVEFCTEUgcmVwYWNrX3Rlc3QgSU4gQUND RVNTIEVYQ0xVU0lWRSBNT0RFOworfQorc3RlcCBlbmRfdHhuCit7CisJQ09NTUlUOworfQorCitz ZXNzaW9uIHMzCitzdGVwIHMzX3dha2V1cAoreworCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dh a2V1cCgncmVwYWNrLWNvbmN1cnJlbnRseS1iZWZvcmUtbG9jaycpOworfQogCiAjIFRlc3QgaWYg ZGF0YSBjaGFuZ2VzIGludHJvZHVjZWQgd2hpbGUgb25lIHNlc3Npb24gaXMgcGVyZm9ybWluZyBS RVBBQ0sKICMgQ09OQ1VSUkVOVExZIGZpbmQgdGhlaXIgd2F5IGludG8gdGhlIHRhYmxlLgpAQCAt MTQwLDMgKzE4MCw0MyBAQCBwZXJtdXRhdGlvbgogCWNoZWNrMgogCXdha2V1cF9iZWZvcmVfbG9j awogCWNoZWNrMQorCisjIFRlc3QgdGhlIHNvZnQtZGVhZGxvY2sgcGF0aCBvZiBSRVBBQ0sgQ09O Q1VSUkVOVExZJ3MgZGVhZGxvY2tfcHJvdGVjdGVkCisjIGJlaGF2aW9yLiAgczIgaXMgcXVldWVk IGFoZWFkIG9mIHMxIChSRVBBQ0spIHdhaXRpbmcgZm9yIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sKKyMg YnV0IGhvbGRzIG5vIGxvY2sgb24gdGhlIHRhYmxlIGl0c2VsZiwgc28gdGhlIGN5Y2xlIGhhcyBv bmx5IHNvZnQgZWRnZXMgYW5kCisjIHRoZSBkZWFkbG9jayBkZXRlY3RvciByZXNvbHZlcyBpdCBi eSByZW9yZGVyaW5nIHRoZSB3YWl0IHF1ZXVlLiAgQm90aAorIyBzZXNzaW9ucyBjb21wbGV0ZSBz dWNjZXNzZnVsbHkuCitwZXJtdXRhdGlvbgorCXdhaXRfYmVmb3JlX2xvY2sKKwliZWdpbl90eG4K Kwlsb2NrX3RhYmxlCisJczNfd2FrZXVwCisJZW5kX3R4bgorCisjIFRlc3QgdGhlIGhhcmQtZGVh ZGxvY2sgcGF0aCBvZiBSRVBBQ0sgQ09OQ1VSUkVOVExZJ3MgZGVhZGxvY2tfcHJvdGVjdGVkCisj IGJlaGF2aW9yIHdoZW4gUkVQQUNLJ3MgZGVhZGxvY2sgZGV0ZWN0b3IgcnVucyBmaXJzdC4gIHMy IGhvbGRzCisjIEFjY2Vzc1NoYXJlTG9jayAoZnJvbSB0aGUgU0VMRUNUKSBhbmQgdGhlbiByZXF1 ZXN0cyBBY2Nlc3NFeGNsdXNpdmVMb2NrLAorIyBjcmVhdGluZyBhIGhhcmQgY3ljbGUgd2l0aCBz MSAoUkVQQUNLKSB0aGF0IGNhbm5vdCBiZSByZXNvbHZlZCBieSBxdWV1ZQorIyByZW9yZGVyaW5n LiAgQmVjYXVzZSBzMSBoYXMgYSBtdWNoIHNob3J0ZXIgZGVhZGxvY2tfdGltZW91dCBhbmQgc2V0 cworIyBkZWFkbG9ja19wcm90ZWN0ZWQgYmVmb3JlIGFjcXVpcmluZyBBY2Nlc3NFeGNsdXNpdmVM b2NrLCBpdHMgZGVhZGxvY2sgY2hlY2sKKyMgcnVucyBmaXJzdCwgY2FuY2VscyBzMidzIGxvY2sg d2FpdCwgYW5kIGxldHMgUkVQQUNLIGNvbXBsZXRlLgorcGVybXV0YXRpb24KKwlzMV90aW1lb3V0 X2Zhc3QKKwlzMl90aW1lb3V0X3Nsb3cKKwl3YWl0X2JlZm9yZV9sb2NrCisJYmVnaW5fYW5kX3Jl YWQKKwlsb2NrX3RhYmxlKHdhaXRfYmVmb3JlX2xvY2spCisJczNfd2FrZXVwCisJZW5kX3R4bgor CisjIFNhbWUgaGFyZC1kZWFkbG9jayBzZXR1cCwgYnV0IHdpdGggczIncyBkZWFkbG9jayBkZXRl Y3RvciBmb3JjZWQgdG8gcnVuCisjIGZpcnN0LiAgSW4gdGhpcyBjYXNlIHMyIGZvbGxvd3MgdGhl IG9yZGluYXJ5IGhhcmQtZGVhZGxvY2sgcGF0aCBhbmQgY2FuY2VscworIyBpdHNlbGYgYmVmb3Jl IFJFUEFDSydzIHByb3RlY3RlZCBkZWFkbG9jayBkZXRlY3RvciBoYXMgYSBjaGFuY2UgdG8gYWN0 LgorcGVybXV0YXRpb24KKwlzMV90aW1lb3V0X3Nsb3cKKwlzMl90aW1lb3V0X2Zhc3QKKwl3YWl0 X2JlZm9yZV9sb2NrKGxvY2tfdGFibGUpCisJYmVnaW5fYW5kX3JlYWQKKwlsb2NrX3RhYmxlCisJ czNfd2FrZXVwCisJZW5kX3R4bgotLSAKMi40My4wCgo= --0000000000004a14f5064f4362a1--