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 1w1DDz-0006Fg-0x for pgsql-hackers@arkaria.postgresql.org; Sat, 14 Mar 2026 00:51:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w1DDy-000d0B-08 for pgsql-hackers@arkaria.postgresql.org; Sat, 14 Mar 2026 00:51:26 +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 1w1DDx-000d03-0a for pgsql-hackers@lists.postgresql.org; Sat, 14 Mar 2026 00:51:26 +0000 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w1DDt-000000003AW-3ztk for pgsql-hackers@lists.postgresql.org; Sat, 14 Mar 2026 00:51:25 +0000 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-48540d21f7dso31884335e9.0 for ; Fri, 13 Mar 2026 17:51:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773449479; cv=none; d=google.com; s=arc-20240605; b=iKyF2Hj0B4lPqfu9mjg18I3q6HYMoA0C/mhSRvi0kfkaO8KREjG3GqHYH9z8wR2Ys1 lSJKq2cFwZ7aZejBY4nsRWErzre1rMA+PHtzzxMB8EkJfQhKEai+Ge+QOIVJmvT0+9Ez l/4qQdDRZXgluvTZb9DwrrkGBZ7ztO8WA/sTeKC3S85VEwTSfk4w6sqUCI4R2CjSiiJH fwR000F45KWm4UipgzggJcDILpz9n2dy3ordNgGiUTXqWviTZag2aJpwdA2xurdRxdBF AY4vzS/Q5biNGn79i3EuL7X3GyZuGZB063xegGofkJ8x7QJeKFPEaZwoaobDwaY7btdM VAag== 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=qnDxrnMoeQq/iHhbAYHE1VSVazmClcNdIPGdQC6Bvgs=; fh=1Uj8Pm1ZvLY+tMyYQ8RQiZbV+6iwpWIZk1vXy08NuK4=; b=I9icf/mXTp/5VTLxMJ+DFt9x9Ag8KzlGjCzO7VnapDmoHAeyKQ7YkkXr3JRgAk8xQq vEhZr0xJmnL+AapmZESC4XvN9NnrvS+GhiaiH9nHRKeTHxz2GjRZnBWU/Vjtaq3Tx10C tN6VaSzPIkfEA3K7ylwdRu7/XK4bCBpFIDw+CbSYnE3Ks0co4pUJqi4m0YaHdLtT3uTw P/LB+bFN+Bs6rFTiABlMLso6vlREpiuC8kp9yRzxfYexZUHcbJXAifA5QjrRsJRvXf41 CB9ivKiB/Ds+IE1Z2lilr1ol60mBggx+5GqxL4oOAfPm4XB0iLH1gXG/Bp4ejgG1DmxU xTjw==; 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=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1773449479; x=1774054279; 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=qnDxrnMoeQq/iHhbAYHE1VSVazmClcNdIPGdQC6Bvgs=; b=hRmuq5MM959jY5d4+o2RVVc6rt7gRr5WEGNZCNo+bE4PYGA0YjmQ89R/qnaOw4KCi4 BAgDj5mCo8hNwIxx1cGoMZRkdTzRqjPeL7RwfxfKBmo3Nu/Z8OYeXhYRTYHGRM+NwWT9 SFTY9PnSAL9jdrBvWm3RKiGsn9Ws2U6kKdDb9tHXrNOsuh8X8CIb2KACmcfxpOJBQAOy nVLINduGpBthjmwkmAusj0SuvOfRJZaH18WH7wDFgCq5VtaL0m+acI+QOL0Jy4ra/31T fv0bgULdSmtEE6d9d89r+1OzbpCYNgHoyoZ1Ubzj4xc2mnz+WhqnyGqygb6KFhd66n27 E77w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773449479; x=1774054279; 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=qnDxrnMoeQq/iHhbAYHE1VSVazmClcNdIPGdQC6Bvgs=; b=UPQ04vRjF7ufEGTDEsUnXVs3pnDGFFDA7vp8/kxSOF3j/7GpXyOvN3EvEF6I7s6dRy JprOungypjbFUIqCqQ/wWtbk5hPFQ5h4MVHwqbChJXrmdq2pnySWmEWohV2FKQJdLVW5 U5aDhgk+7ZKYFiu1cOfKpa1wi7NLNeeO3ebLgOxtLBqkj0ibzaXawqiab5HCrRst0Ts6 A6uq3vpdG8z+PEg4LitCP8bCV20QLXyNZtZXelJEeLNX7TURQKSkMIVl7HrGoYj0TSPc JvNziZdccVicbDr1PTVOPqtEKK29YWlqRa51wvp/4arUz7+wqjk0k6TeZMVJeE8fmKr/ +R2Q== X-Forwarded-Encrypted: i=1; AJvYcCU3SxtWbmGFYD9CoFmvubs/O4fWfdnNrgIb4qQ1K6HralM0oIXlOhzVrs9gEp4mWAvcDDpYFA2a8SPH7khP@lists.postgresql.org X-Gm-Message-State: AOJu0YxLRVgrDsVFcMtu8dwDGEWSzdN1dAYEE3CuIEicSJl14xTFb88M R2WmSTUcrD3LQC6eN+q4h95FbaPu71m6LkRT0ujLyukWHvEAplS0aj1xHZ8PjvMAL5v2BZTygcn 5ZAsBZWxhe11SHqLkbA8gmyttjQG19HO9KHgdlfXNLg== X-Gm-Gg: ATEYQzwJoVbTqeqm6KAXyeIw7c9/Rmy46kAXTyCRcvOP/VwXSfpLkHlmMBYsRE/wqzP Pv+yqtUsmzKt2sGXpjdUvf2+W2R9NZnWlW6EK/hQBjCwtOlpdwOzcaeGUu0iJ6gJN1xKfsER2w5 xmEM3dT1D6QBbIG7v1l9l97WblbwOnsp4yYsL7TCZLIJ/Edr+fz3z4q442LXatkV658U/MuO3q6 DG+JLx2udSzmU+hxtCRmSgMr3YbWHpSPYzpGOQPxko3w7WQZ6U4f8m92Rc1VLzJ32iFRtzyi97L MjP8OtA= X-Received: by 2002:a05:600c:4f8f:b0:485:40c6:f507 with SMTP id 5b1f17b1804b1-48556711c6cmr92568655e9.30.1773449478839; Fri, 13 Mar 2026 17:51:18 -0700 (PDT) MIME-Version: 1.0 References: <52512325-b1f2-4fff-819e-f68122b2e427@vondra.me> <64mfcfv7iihc4pmqlxarii4esnmqry52ckz5m7lmwylnfnuxuz@oxh4ioxkjtep> In-Reply-To: From: Peter Geoghegan Date: Fri, 13 Mar 2026 20:50:50 -0400 X-Gm-Features: AaiRm52m7Uo1ulXybSMAEZUTDixTnmmxRtCNPRXHlxVrOXX2ubbATr8Iy-k5nWo Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="00000000000037c445064cf162d7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000037c445064cf162d7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Mar 12, 2026 at 3:44=E2=80=AFPM Peter Geoghegan wrote: > Attached v13 does things this way. Several patches from this patchset have been committed to master. I'm posting a new version (v14) here to keep the patch applying cleanly. There are no notable changes to the patches themselves here -- just some minor cleanup of the docs, and some comments. --=20 Peter Geoghegan --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0016-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v14-0016-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj3i1 RnJvbSAwYTQxMTc5YmZmY2ZjOGIwNzU1YmVkMjg0OWIzZDFhZTgwNWMwMzUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNCAxNi8xNl0g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgUGxhaW4gaW5kZXggc2NhbnMgb2YgaGFzaCBp bmRleGVzIG5vdyByZXR1cm4KbWF0Y2hpbmcgaXRlbXMgaW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9m IGFsbCBvZiB0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4KYnVja2V0IG9yIG92ZXJmbG93IHBhZ2Uu ICBUaGlzIGdpdmVzIHRoZSBjb3JlIGV4ZWN1dG9yIHRoZSBhYmlsaXR5IHRvCnBlcmZvcm0gb3B0 aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZyBoYXNoIGluZGV4IHNjYW5z LgoKTm90ZSB0aGF0IGhhc2ggaW5kZXggc2NhbnMgd2lsbCBub3cgZHJvcCBpbmRleCBwYWdlIGJ1 ZmZlciBwaW5zIGVhZ2VybHkKKGFjdHVhbGx5LCB0aGUgdGFibGUgQU0gd2lsbCBkbyBzbyBvbiBi ZWhhbGYgb2YgdGhlIGhhc2ggaW5kZXggQU0pLgpUaGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCBm b3IgYW55IGluZGV4IEFNIHRoYXQgYWRvcHRzIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZhY2Uu ICBHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNoZXMgd29uJ3QgaG9sZCBidWZmZXIKcGlucyBv biBpbmRleCBwYWdlcyBncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJp bmcgaW5kZXgKcHJlZmV0Y2hpbmcsIHdoZXJlIHRoZSByZWFkIHN0cmVhbSBpcyBleHBlY3RlZCB0 byBob2xkIG1hbnkgcGlucyBvbiBoZWFwCnBhZ2VzICh0aGF0J3Mgd2h5IGFtZ2V0YmF0Y2ggbWFr ZXMgdGhpcyBhIGhhcmQgcmVxdWlyZW1lbnQpLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBn QGJvd3QuaWU+ClJldmlld2VkLUJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGlz Y3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFjQkgxNjFwZUFXYjVlRj1K YTdDRkFRKzBqU0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvaGFzaC5oICAgICAgICAgICAgfCAgODUgKystLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvUkVBRE1FICAgICAgIHwgIDMxICstLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aC5jICAgICAgIHwgMjExICsrKysrKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoX3hsb2cuYyAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdl LmMgICB8ICAxOSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIHwgMzM4 ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHV0aWwuYyAgIHwgMTI5ICstLS0tLS0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICB8ICAgMyArLQogOCBmaWxlcyBjaGFuZ2VkLCAzMjYgaW5zZXJ0aW9ucygrKSwgNDk0 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCmluZGV4IGE4NzAyZjBlNS4uODRlYzZiYzQwIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9oYXNoLmgKQEAgLTEwMCw1NyArMTAwLDI1IEBAIHR5cGVkZWYgSGFzaFBhZ2VPcGFxdWVEYXRh ICpIYXNoUGFnZU9wYXF1ZTsKICAqLwogI2RlZmluZSBIQVNIT19QQUdFX0lECQkweEZGODAKIAot dHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NJdGVtCS8qIHdoYXQgd2UgcmVtZW1iZXIgYWJvdXQg ZWFjaCBtYXRjaCAqLworLyogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0byB0aGUgaGFzaCBpbmRl eCBBTSAqLwordHlwZWRlZiBzdHJ1Y3QgSGFzaEJhdGNoRGF0YQogewotCUl0ZW1Qb2ludGVyRGF0 YSBoZWFwVGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNlZCBoZWFwIGl0ZW0gKi8KLQlPZmZzZXROdW1i ZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLwot fSBIYXNoU2NhblBvc0l0ZW07CisJQnVmZmVyCQlidWY7CQkJLyogaW5kZXggcGFnZSBidWZmZXIg cGluIChUSUQgcmV1c2UgaW50ZXJsb2NrKSAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyog aW5kZXggcGFnZSB3aXRoIG1hdGNoaW5nIGl0ZW1zICovCisJQmxvY2tOdW1iZXIgcHJldlBhZ2U7 CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLworCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyog Y3VyclBhZ2UncyByaWdodCBsaW5rICovCit9IEhhc2hCYXRjaERhdGE7CiAKLXR5cGVkZWYgc3Ry dWN0IEhhc2hTY2FuUG9zRGF0YQorLyoKKyAqIEFjY2VzcyB0aGUgaGFzaC1wcml2YXRlIHBlci1i YXRjaCBkYXRhIGZyb20gYW4gSW5kZXhTY2FuQmF0Y2ggcG9pbnRlci4KKyAqIFRoaXMgZm9sbG93 cyB0aGUgc3RhbmRhcmQgY29udmVudGlvbiBmb3IgaW5kZXggQU0gb3BhcXVlIHN0YXRlOiBpdCBj YW4gYmUKKyAqIGZvdW5kIGF0IGEgZml4ZWQgbmVnYXRpdmUgb2Zmc2V0IGZyb20gdGhlIEluZGV4 U2NhbkJhdGNoIHBvaW50ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgSGFzaEJhdGNoRGF0YSAqCitI YXNoQmF0Y2hHZXREYXRhKEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewotCUJ1ZmZlcgkJYnVmOwkJ CS8qIGlmIHZhbGlkLCB0aGUgYnVmZmVyIGlzIHBpbm5lZCAqLwotCUJsb2NrTnVtYmVyIGN1cnJQ YWdlOwkJLyogY3VycmVudCBoYXNoIGluZGV4IHBhZ2UgKi8KLQlCbG9ja051bWJlciBuZXh0UGFn ZTsJCS8qIG5leHQgb3ZlcmZsb3cgcGFnZSAqLwotCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyog cHJldiBvdmVyZmxvdyBvciBidWNrZXQgcGFnZSAqLwotCi0JLyoKLQkgKiBUaGUgaXRlbXMgYXJy YXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCi0JICog aW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCB0 byBmaWxsIHRoZQotCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRoZSBs YXN0IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBhIGZp cnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KLQkgKiBpdGVt SW5kZXggaXMgYSBjdXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3YXMgbGFzdCByZXR1cm5lZCB0 byBjYWxsZXIuCi0JICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXgg aW4gaXRlbXNbXSAqLwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBp dGVtc1tdICovCi0JaW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRleCBpbiBpdGVtc1td ICovCi0KLQlIYXNoU2NhblBvc0l0ZW0gaXRlbXNbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsJLyog TVVTVCBCRSBMQVNUICovCi19IEhhc2hTY2FuUG9zRGF0YTsKLQotI2RlZmluZSBIYXNoU2NhblBv c0lzUGlubmVkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxp ZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcyku YnVmKSksIFwKLQlCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpIFwKLSkKLQotI2RlZmluZSBI YXNoU2NhblBvc0lzVmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1i ZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChz Y2FucG9zKS5idWYpKSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2Up IFwKLSkKLQotI2RlZmluZSBIYXNoU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAotCWRvIHsg XAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcykuY3VyclBh Z2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLm5leHRQYWdlID0gSW52YWxp ZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9zKS5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJl cjsgXAotCQkoc2NhbnBvcykuZmlyc3RJdGVtID0gMDsgXAotCQkoc2NhbnBvcykubGFzdEl0ZW0g PSAwOyBcCi0JCShzY2FucG9zKS5pdGVtSW5kZXggPSAwOyBcCi0JfSB3aGlsZSAoMCkKKwlyZXR1 cm4gKEhhc2hCYXRjaERhdGEgKikgKChjaGFyICopIGJhdGNoIC0gTUFYQUxJR04oc2l6ZW9mKEhh c2hCYXRjaERhdGEpKSk7Cit9CiAKIC8qCiAgKglIYXNoU2Nhbk9wYXF1ZURhdGEgaXMgcHJpdmF0 ZSBzdGF0ZSBmb3IgYSBoYXNoIGluZGV4IHNjYW4uCkBAIC0xNzgsMTUgKzE0Niw2IEBAIHR5cGVk ZWYgc3RydWN0IEhhc2hTY2FuT3BhcXVlRGF0YQogCSAqIHJlZmVycmVkIG9ubHkgd2hlbiBoYXNo c29fYnVjX3BvcHVsYXRlZCBpcyB0cnVlLgogCSAqLwogCWJvb2wJCWhhc2hzb19idWNfc3BsaXQ7 Ci0JLyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxM IGlmIG5ldmVyIHVzZWQpICovCi0JaW50CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRl bXMgaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1i ZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCi0JLyoKLQkgKiBJZGVudGlmeSBhbGwg dGhlIG1hdGNoaW5nIGl0ZW1zIG9uIGEgcGFnZSBhbmQgc2F2ZSB0aGVtIGluCi0JICogSGFzaFNj YW5Qb3NEYXRhCi0JICovCi0JSGFzaFNjYW5Qb3NEYXRhIGN1cnJQb3M7CS8qIGN1cnJlbnQgcG9z aXRpb24gZGF0YSAqLwogfSBIYXNoU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgSGFzaFNjYW5P cGFxdWVEYXRhICpIYXNoU2Nhbk9wYXF1ZTsKQEAgLTM2OCwxMSArMzI3LDE1IEBAIGV4dGVybiBi b29sIGhhc2hpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGws CiAJCQkJCSAgIEluZGV4VW5pcXVlQ2hlY2sgY2hlY2tVbmlxdWUsCiAJCQkJCSAgIGJvb2wgaW5k ZXhVbmNoYW5nZWQsCiAJCQkJCSAgIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7Ci1leHRl cm4gYm9vbCBoYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggaGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwKKwkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJICAgU2Nh bkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGhhc2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVz YyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gSW5kZXhTY2FuRGVzYyBoYXNoYmVnaW5z Y2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lk IGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nh bmtleXMsCiAJCQkJCSAgIFNjYW5LZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJu IHZvaWQgaGFzaGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpOworZXh0ZXJuIHZvaWQgaGFzaHJlbGVhc2ViYXRjaChJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiB2b2lkIGhhc2hlbmRzY2FuKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpoYXNoYnVsa2Rl bGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJCSBJbmRleEJ1bGtEZWxldGVS ZXN1bHQgKnN0YXRzLApAQCAtNDQ1LDggKzQwOCw5IEBAIGV4dGVybiB2b2lkIF9oYXNoX2Zpbmlz aF9zcGxpdChSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmLCBCdWZmZXIgb2J1ZiwKIAkJCQkJ CQkgICB1aW50MzIgbG93bWFzayk7CiAKIC8qIGhhc2hzZWFyY2guYyAqLwotZXh0ZXJuIGJvb2wg X2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVy biBib29sIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpOwor ZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpOwogCiAvKiBoYXNoc29ydC5jICovCiB0eXBlZGVmIHN0cnVjdCBIU3Bv b2wgSFNwb29sOwkvKiBvcGFxdWUgc3RydWN0IGluIGhhc2hzb3J0LmMgKi8KQEAgLTQ3Niw3ICs0 NDAsNiBAQCBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hfZ2V0X29sZGJsb2NrX2Zyb21fbmV3YnVj a2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG5ld19idQogZXh0ZXJuIEJsb2NrTnVtYmVyIF9oYXNo X2dldF9uZXdibG9ja19mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVj a2V0KTsKIGV4dGVybiBCdWNrZXQgX2hhc2hfZ2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tldChS ZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVja2V0LAogCQkJCQkJCQkJCQkJIHVpbnQzMiBsb3dt YXNrLCB1aW50MzIgbWF4YnVja2V0KTsKLWV4dGVybiB2b2lkIF9oYXNoX2tpbGxfaXRlbXMoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKIAogLyogaGFzaC5jICovCiBleHRlcm4gdm9pZCBoYXNoYnVja2V0 Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVB RE1FCmluZGV4IGZjOTAzMTExNy4uOTcyYmI2NjZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FCkBA IC0yNTUsMjggKzI1NSwyOSBAQCBUaGUgcmVhZGVyIGFsZ29yaXRobSBpczoKIAkJcmV0YWtlIHRo ZSBidWZmZXIgY29udGVudCBsb2NrIG9uIG5ldyBidWNrZXQKIAkJYXJyYW5nZSB0byBzY2FuIHRo ZSBvbGQgYnVja2V0IG5vcm1hbGx5IGFuZCB0aGUgbmV3IGJ1Y2tldCBmb3IKICAgICAgICAgIHR1 cGxlcyB3aGljaCBhcmUgbm90IG1vdmVkLWJ5LXNwbGl0Ci0tLSB0aGVuLCBwZXIgcmVhZCByZXF1 ZXN0OgorLS0gdGhlbiwgcGVyIGJhdGNoIChwYWdlKSByZXF1ZXN0OgogCXJlYWNxdWlyZSBjb250 ZW50IGxvY2sgb24gY3VycmVudCBwYWdlCiAJc3RlcCB0byBuZXh0IHBhZ2UgaWYgbmVjZXNzYXJ5 IChubyBjaGFpbmluZyBvZiBjb250ZW50IGxvY2tzLCBidXQga2VlcAogCXRoZSBwaW4gb24gdGhl IHByaW1hcnkgYnVja2V0IHRocm91Z2hvdXQgdGhlIHNjYW4pCi0Jc2F2ZSBhbGwgdGhlIG1hdGNo aW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGFuIGl0ZW1zIGFycmF5Ci0J cmVsZWFzZSBwaW4gYW5kIGNvbnRlbnQgbG9jayAoYnV0IGlmIGl0IGlzIHByaW1hcnkgYnVja2V0 IHBhZ2UgcmV0YWluCi0JaXRzIHBpbiB0aWxsIHRoZSBlbmQgb2YgdGhlIHNjYW4pCi0JZ2V0IHR1 cGxlIGZyb20gYW4gaXRlbSBhcnJheQorCXNhdmUgYWxsIHRoZSBtYXRjaGluZyB0dXBsZXMgZnJv bSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBhIGJhdGNoCisJcmVsZWFzZSBjb250ZW50IGxvY2sg b24gY3VycmVudCBwYWdlIHJldHVybiBiYXRjaCB0byB0YWJsZSBBTSAodGFibGUgQU0KKwl3aWxs IGRyb3AgYmF0Y2gncyBidWZmZXIgcGluLCB0aG91Z2ggcHJpbWFyeSBidWNrZXQgcGFnZSBwaW4g aXMga2VwdAorCXVudGlsIHRoZSBlbmQgb2YgdGhlIHNjYW4pCiAtLSBhdCBzY2FuIHNodXRkb3du OgotCXJlbGVhc2UgYWxsIHBpbnMgc3RpbGwgaGVsZAorCXJlbGVhc2Ugc2Nhbi1vd25lZCBwaW5z IChlLmcuLCBwcmltYXJ5IGJ1Y2tldCBwYWdlIHBpbikgYXMgbmVlZGVkCiAKIEhvbGRpbmcgdGhl IGJ1ZmZlciBwaW4gb24gdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UgZm9yIHRoZSB3aG9sZSBzY2Fu IHByZXZlbnRzCi10aGUgcmVhZGVyJ3MgY3VycmVudC10dXBsZSBwb2ludGVyIGZyb20gYmVpbmcg aW52YWxpZGF0ZWQgYnkgc3BsaXRzIG9yCi1jb21wYWN0aW9ucy4gIChPZiBjb3Vyc2UsIG90aGVy IGJ1Y2tldHMgY2FuIHN0aWxsIGJlIHNwbGl0IG9yIGNvbXBhY3RlZC4pCit0aGUgYnVja2V0IGZy b20gYmVpbmcgcmVvcmdhbml6ZWQgYnkgc3BsaXRzIG9yIGNvbXBhY3Rpb25zIHdoaWxlIHRoZSBz Y2FuIGlzCitpbiBwcm9ncmVzcy4gIChPZiBjb3Vyc2UsIG90aGVyIGJ1Y2tldHMgY2FuIHN0aWxs IGJlIHNwbGl0IG9yIGNvbXBhY3RlZC4pCiAKLVRvIG1pbmltaXplIGxvY2svdW5sb2NrIHRyYWZm aWMsIGhhc2ggaW5kZXggc2NhbiBhbHdheXMgc2VhcmNoZXMgdGhlIGVudGlyZQotaGFzaCBwYWdl IHRvIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgYXQgb25jZSwgY29weWluZyB0aGVp ciBoZWFwIHR1cGxlCi1JRHMgaW50byBiYWNrZW5kLWxvY2FsIHN0b3JhZ2UuIFRoZSBoZWFwIHR1 cGxlIElEcyBhcmUgdGhlbiBwcm9jZXNzZWQgd2hpbGUgbm90Ci1ob2xkaW5nIGFueSBwYWdlIGxv Y2sgd2l0aGluIHRoZSBpbmRleCB0aGVyZWJ5LCBhbGxvd2luZyBjb25jdXJyZW50IGluc2VydGlv bgotdG8gaGFwcGVuIG9uIHRoZSBzYW1lIGluZGV4IHBhZ2Ugd2l0aG91dCBhbnkgcmVxdWlyZW1l bnQgb2YgcmUtZmluZGluZyB0aGUKLWN1cnJlbnQgc2NhbiBwb3NpdGlvbiBmb3IgdGhlIHJlYWRl ci4gV2UgZG8gY29udGludWUgdG8gaG9sZCBhIHBpbiBvbiB0aGUKLWJ1Y2tldCBwYWdlLCB0byBw cm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBkZWxldGlvbnMgYW5kIGJ1Y2tldCBzcGxpdC4KK1Rv IG1pbmltaXplIGxvY2svdW5sb2NrIHRyYWZmaWMsIGhhc2ggaW5kZXggc2NhbnMgYWx3YXlzIHNl YXJjaCB0aGUgZW50aXJlCitoYXNoIHBhZ2UgdG8gaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBp dGVtcyBhdCBvbmNlLCByZXR1cm5pbmcgdGhlbSBpbgorYmF0Y2hlcyB0byB0aGUgdGFibGUgQU0u ICBUaGUgdGFibGUgQU0gcHJvY2Vzc2VzIGJhdGNoZXMgd2hpbGUgbm8gcGFnZSBsb2NrCitpcyBo ZWxkIHdpdGhpbiB0aGUgaW5kZXgsIGFsbG93aW5nIGNvbmN1cnJlbnQgaW5zZXJ0aW9uIHRvIGhh cHBlbiBvbiB0aGUKK3NhbWUgaW5kZXggcGFnZSB3aXRob3V0IGFueSByZXF1aXJlbWVudCBvZiBy ZS1maW5kaW5nIHRoZSBjdXJyZW50IHNjYW4KK3Bvc2l0aW9uIGZvciB0aGUgcmVhZGVyLiAgVGhl IHRhYmxlIEFNIGNvbnRyb2xzIHdoZW4gYmF0Y2ggYnVmZmVyIHBpbnMgYXJlCitkcm9wcGVkLiAg V2UgZG8gY29udGludWUgdG8gaG9sZCBhIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSwg dG8KK3Byb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGJ1Y2tldCBzcGxpdHMuCiAKIFRvIGFsbG93 IGZvciBzY2FucyBkdXJpbmcgYSBidWNrZXQgc3BsaXQsIGlmIGF0IHRoZSBzdGFydCBvZiB0aGUg c2NhbiwgdGhlCiBidWNrZXQgaXMgbWFya2VkIGFzIGJ1Y2tldC1iZWluZy1wb3B1bGF0ZWQsIGl0 IHNjYW4gYWxsIHRoZSB0dXBsZXMgaW4gdGhhdApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDI1 MDQ0ZmU4Zi4uMThlNzQ3YTI3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC0xMDEsMTAgKzEw MSwxMCBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1hZGp1c3RtZW1iZXJz ID0gaGFzaGFkanVzdG1lbWJlcnMsCiAJCS5hbWJlZ2luc2NhbiA9IGhhc2hiZWdpbnNjYW4sCiAJ CS5hbXJlc2NhbiA9IGhhc2hyZXNjYW4sCi0JCS5hbWdldHR1cGxlID0gaGFzaGdldHR1cGxlLAot CQkuYW1nZXRiYXRjaCA9IE5VTEwsCi0JCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKLQkJLmFt cmVsZWFzZWJhdGNoID0gTlVMTCwKKwkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRj aCA9IGhhc2hnZXRiYXRjaCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBoYXNoa2lsbGl0ZW1zYmF0 Y2gsCisJCS5hbXJlbGVhc2ViYXRjaCA9IGhhc2hyZWxlYXNlYmF0Y2gsCiAJCS5hbWdldGJpdG1h cCA9IGhhc2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbiwKIAkJLmFtcG9z cmVzZXQgPSBOVUxMLApAQCAtMjg3LDUzICsyODcsMjggQEAgaGFzaGluc2VydChSZWxhdGlvbiBy ZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAogCiAvKgotICoJaGFzaGdldHR1cGxl KCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJaGFzaGdldGJhdGNoKCkg LS0gR2V0IHRoZSBmaXJzdCBvciBuZXh0IGJhdGNoIG9mIHR1cGxlcyBpbiB0aGUgc2NhbgogICov Ci1ib29sCi1oYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKK0luZGV4U2NhbkJhdGNoCitoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlIYXNoU2Nhbk9w YXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKIAog CS8qIEhhc2ggaW5kZXhlcyBhcmUgYWx3YXlzIGxvc3N5IHNpbmNlIHdlIHN0b3JlIG9ubHkgdGhl IGhhc2ggY29kZSAqLwogCXNjYW4tPnhzX3JlY2hlY2sgPSB0cnVlOwogCi0JLyoKLQkgKiBJZiB3 ZSd2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoaXMgc2Nhbiwgd2UgY2FuIGp1c3QgYWR2YW5jZSBp dCBpbiB0aGUKLQkgKiBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUg c28geWV0LCB3ZSBjYWxsIGEgcm91dGluZSB0bwotCSAqIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0 aGUgc2Nhbi4KLQkgKi8KLQlpZiAoIUhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0J CXJlcyA9IF9oYXNoX2ZpcnN0KHNjYW4sIGRpcik7Ci0JZWxzZQorCWlmIChwcmlvcmJhdGNoID09 IE5VTEwpCiAJewotCQkvKgotCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhl IHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJICovCi0JCWlmIChzY2FuLT5raWxsX3ByaW9y X3R1cGxlKQotCQl7Ci0JCQkvKgotCQkJICogWWVzLCBzbyByZW1lbWJlciBpdCBmb3IgbGF0ZXIu IChXZSdsbCBkZWFsIHdpdGggYWxsIHN1Y2ggdHVwbGVzCi0JCQkgKiBhdCBvbmNlIHJpZ2h0IGFm dGVyIGxlYXZpbmcgdGhlIGluZGV4IHBhZ2Ugb3IgYXQgZW5kIG9mIHNjYW4uKQotCQkJICogSW4g Y2FzZSBpZiBjYWxsZXIgcmV2ZXJzZXMgdGhlIGluZGV4c2NhbiBkaXJlY3Rpb24gaXQgaXMgcXVp dGUKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhlIHNhbWUgaXRlbSBtaWdodCBnZXQgZW50ZXJlZCBt dWx0aXBsZSB0aW1lcy4KLQkJCSAqIEJ1dCwgd2UgZG9uJ3QgZGV0ZWN0IHRoYXQ7IGluc3RlYWQs IHdlIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MKLQkJCSAqIGVudHJpZXMuCi0JCQkgKi8KLQkJCWlm IChzby0+a2lsbGVkSXRlbXMgPT0gTlVMTCkKLQkJCQlzby0+a2lsbGVkSXRlbXMgPSBwYWxsb2Nf YXJyYXkoaW50LCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpOworCQlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOwogCi0JCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heEluZGV4VHVwbGVz UGVyUGFnZSkKLQkJCQlzby0+a2lsbGVkSXRlbXNbc28tPm51bUtpbGxlZCsrXSA9IHNvLT5jdXJy UG9zLml0ZW1JbmRleDsKLQkJfQorCQlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCQkv KgotCQkgKiBOb3cgY29udGludWUgdGhlIHNjYW4uCi0JCSAqLwotCQlyZXMgPSBfaGFzaF9uZXh0 KHNjYW4sIGRpcik7CisJCS8qIEluaXRpYWxpemUgdGhlIHNjYW4sIGFuZCByZXR1cm4gZmlyc3Qg YmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgKi8KKwkJcmV0dXJuIF9oYXNoX2ZpcnN0KHNjYW4sIGRp cik7CiAJfQogCi0JcmV0dXJuIHJlczsKKwkvKiBSZXR1cm4gYmF0Y2ggcG9zaXRpb25lZCBhZnRl ciBjYWxsZXIncyBiYXRjaCAoaW4gZGlyZWN0aW9uICdkaXInKSAqLworCXJldHVybiBfaGFzaF9u ZXh0KHNjYW4sIGRpciwgcHJpb3JiYXRjaCk7CiB9CiAKIApAQCAtMzQzLDI2ICszMTgsMjYgQEAg aGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiBpbnQ2 NAogaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewot CUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9v bAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0JSGFz aFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKIAotCXJlcyA9IF9oYXNoX2ZpcnN0KHNjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uKTsKKwliYXRjaCA9IF9oYXNoX2ZpcnN0KHNjYW4sIEZvcndhcmRTY2Fu RGlyZWN0aW9uKTsKIAotCXdoaWxlIChyZXMpCisJd2hpbGUgKGJhdGNoICE9IE5VTEwpCiAJewot CQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwor CQlmb3IgKGludCBpdGVtSW5kZXggPSBiYXRjaC0+Zmlyc3RJdGVtOworCQkJIGl0ZW1JbmRleCA8 PSBiYXRjaC0+bGFzdEl0ZW07CisJCQkgaXRlbUluZGV4KyspCisJCXsKKwkJCXRibV9hZGRfdHVw bGVzKHRibSwgJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkLCAxLCB0cnVlKTsKKwkJ CW50aWRzKys7CisJCX0KIAogCQkvKgotCQkgKiBfaGFzaF9maXJzdCBhbmQgX2hhc2hfbmV4dCBo YW5kbGUgZWxpbWluYXRlIGRlYWQgaW5kZXggZW50cmllcwotCQkgKiB3aGVuZXZlciBzY2FuLT5p Z25vcmVfa2lsbGVkX3R1cGxlcyBpcyB0cnVlLiAgVGhlcmVmb3JlLCB0aGVyZSdzCi0JCSAqIG5v dGhpbmcgdG8gZG8gaGVyZSBleGNlcHQgYWRkIHRoZSByZXN1bHRzIHRvIHRoZSBUSURCaXRtYXAu CisJCSAqIF9oYXNoX25leHQgcmVsZWFzZXMgdGhlIHByaW9yIGJhdGNoIGZvciBiaXRtYXAgY2Fs bGVycyBiZWZvcmUKKwkJICogYWxsb2NhdGluZyB0aGUgbmV4dCBvbmUsIHNvIG9ubHkgb25lIGJh dGNoIGlzIGV2ZXIgdXNlZCBhdCBhIHRpbWUKIAkJICovCi0JCXRibV9hZGRfdHVwbGVzKHRibSwg JihjdXJySXRlbS0+aGVhcFRpZCksIDEsIHRydWUpOwotCQludGlkcysrOwotCi0JCXJlcyA9IF9o YXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCQliYXRjaCA9IF9oYXNoX25l eHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGJhdGNoKTsKIAl9CiAKIAlyZXR1cm4gbnRp ZHM7CkBAIC0zODQsMTcgKzM1OSwxNiBAQCBoYXNoYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50 IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4gPSBSZWxhdGlvbkdldEluZGV4U2NhbihyZWws IG5rZXlzLCBub3JkZXJieXMpOwogCiAJc28gPSAoSGFzaFNjYW5PcGFxdWUpIHBhbGxvY19vYmpl Y3QoSGFzaFNjYW5PcGFxdWVEYXRhKTsKLQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQ b3MpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAJc28tPmhhc2hz b19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAogCXNvLT5oYXNoc29fYnVjX3Bv cHVsYXRlZCA9IGZhbHNlOwogCXNvLT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CiAKLQlzby0+ a2lsbGVkSXRlbXMgPSBOVUxMOwotCXNvLT5udW1LaWxsZWQgPSAwOwotCiAJc2Nhbi0+b3BhcXVl ID0gc287CisJc2Nhbi0+bWF4aXRlbXNiYXRjaCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZTsKKwlz Y2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9IE1BWEFMSUdOKHNpemVvZihIYXNoQmF0Y2hE YXRhKSk7CisJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CiAKIAlyZXR1cm4gc2Nh bjsKIH0KQEAgLTQwOSwxOCArMzgzLDggQEAgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChI YXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0J CS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRl bXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2Fu KTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCS8qIHNldCBwb3NpdGlv biBpbnZhbGlkICh0aGlzIHdpbGwgY2F1c2UgX2hhc2hfZmlyc3QgY2FsbCkgKi8KLQlIYXNoU2Nh blBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCiAJLyogVXBkYXRlIHNjYW4ga2V5LCBpZiBh IG5ldyBvbmUgaXMgZ2l2ZW4gKi8KIAlpZiAoc2NhbmtleSAmJiBzY2FuLT5udW1iZXJPZktleXMg PiAwKQogCQltZW1jcHkoc2Nhbi0+a2V5RGF0YSwgc2NhbmtleSwgc2Nhbi0+bnVtYmVyT2ZLZXlz ICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CkBAIC00MjksNiArMzkzLDExMiBAQCBoYXNocmVzY2Fu KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCXNv LT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CiB9CiAKKy8qCisgKgloYXNoa2lsbGl0ZW1zYmF0 Y2goKSAtLSBNYXJrIGRlYWQgaXRlbXMnIGluZGV4IHR1cGxlcyBMUF9ERUFECisgKi8KK3ZvaWQK K2hhc2hraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJh dGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJSGFzaEJhdGNo RGF0YSAqaGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShiYXRjaCk7CisJQnVmZmVyCQlidWY7 CisJUGFnZQkJcGFnZTsKKwlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CisJT2Zmc2V0TnVtYmVyIG9m Zm51bSwKKwkJCQltYXhvZmY7CisJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CisJWExv Z1JlY1B0cglsYXRlc3Rsc247CisKKwlBc3NlcnQoYmF0Y2gtPm51bURlYWQgPiAwKTsKKworCWJ1 ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGhhc2hiYXRjaC0+Y3VyclBhZ2UsIEhBU0hfUkVBRCwKKwkJ CQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKKworCWxhdGVzdGxzbiA9 IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxz bik7CisJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQorCXsKKwkJLyogTW9kaWZpZWQsIGdp dmUgdXAgb24gaGludGluZyAqLworCQlfaGFzaF9yZWxidWYocmVsLCBidWYpOworCQlyZXR1cm47 CisJfQorCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwlvcGFxdWUgPSBIYXNoUGFnZUdl dE9wYXF1ZShwYWdlKTsKKwltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwor CisJLyogSXRlcmF0ZSB0aHJvdWdoIGJhdGNoLT5kZWFkSXRlbXNbXSBpbiBpbmRleCBwYWdlIG9y ZGVyICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+bnVtRGVhZDsgaSsrKQorCXsKKwkJ aW50CQkJaXRlbUluZGV4ID0gYmF0Y2gtPmRlYWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGluZ0l0 ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOworCisJCW9mZm51bSA9IGN1 cnJJdGVtLT5pbmRleE9mZnNldDsKKworCQlBc3NlcnQoaXRlbUluZGV4ID49IGJhdGNoLT5maXJz dEl0ZW0gJiYKKwkJCSAgIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCisJCXdoaWxl IChvZmZudW0gPD0gbWF4b2ZmKQorCQl7CisJCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQo cGFnZSwgb2ZmbnVtKTsKKwkJCUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVwbGUpIFBhZ2VH ZXRJdGVtKHBhZ2UsIGlpZCk7CisKKwkJCWlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50 X3RpZCwgJmN1cnJJdGVtLT50YWJsZVRpZCkpCisJCQl7CisJCQkJaWYgKCFraWxsZWRzb21ldGhp bmcpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0 dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgorCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVz dCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKKwkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0 aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJCQkJCSAqLworCQkJCQlpZiAoIUJ1ZmZlckJl Z2luU2V0SGludEJpdHMoYnVmKSkKKwkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7CisJCQkJfQorCisJ CQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KKwkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOworCQkJCWtp bGxlZHNvbWV0aGluZyA9IHRydWU7CisJCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJj aCBsb29wICovCisJCQl9CisJCQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7CisJ CX0KKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVk ZWQsIG1hcmsgYXMgZGlydHkgaGludC4gV2hlbmV2ZXIKKwkgKiB3ZSBtYXJrIGFueXRoaW5nIExQ X0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKKwkgKiBMSF9QQUdFX0hBU19ERUFEX1RVUExF UyBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGludC4KKwkgKi8KKwlpZiAoa2lsbGVk c29tZXRoaW5nKQorCXsKKwkJb3BhcXVlLT5oYXNob19mbGFnIHw9IExIX1BBR0VfSEFTX0RFQURf VFVQTEVTOworCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUpOworCX0K KwordW5sb2NrX3BhZ2U6CisJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKK30KKworLyoKKyAqCWhh c2hyZWxlYXNlYmF0Y2goKSAtLSBSZWxlYXNlIGJhdGNoJ3MgaW5kZXggcGFnZSBidWZmZXIgcGlu CisgKgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSAodmlhIGFtcmVsZWFzZWJhdGNoKSB3aGVu IGl0J3Mgc2FmZSB0byBkcm9wIHRoZQorICogYnVmZmVyIHBpbiBoZWxkIHRvIHByZXZlbnQgY29u Y3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTS4KKyAqIE11c3QgYmUgaWRlbXBvdGVudCAt LSBzYWZlIHRvIGNhbGwgd2hlbiB0aGUgcGluIGhhcyBhbHJlYWR5IGJlZW4gcmVsZWFzZWQuCisg Ki8KK3ZvaWQKK2hhc2hyZWxlYXNlYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCkKK3sKKwlIYXNoQmF0Y2hEYXRhICpoYXNoYmF0Y2ggPSBIYXNoQmF0Y2hHZXRE YXRhKGJhdGNoKTsKKworCWlmIChCdWZmZXJJc1ZhbGlkKGhhc2hiYXRjaC0+YnVmKSkKKwl7CisJ CVJlbGVhc2VCdWZmZXIoaGFzaGJhdGNoLT5idWYpOworCQloYXNoYmF0Y2gtPmJ1ZiA9IEludmFs aWRCdWZmZXI7CisJfQorfQorCiAvKgogICoJaGFzaGVuZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEg c2NhbgogICovCkBAIC00MzgsMTcgKzUwOCw4IEBAIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbikKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Q b3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQg cGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQg PiAwKQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1 ZihyZWwsIHNvKTsKIAotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28t PmtpbGxlZEl0ZW1zKTsKIAlwZnJlZShzbyk7CiAJc2Nhbi0+b3BhcXVlID0gTlVMTDsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaF94bG9nLmMKaW5kZXggMjA2MDYyMGM3Li5lMjZlZThiYjkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCkBAIC0xMTQxLDE0ICsxMTQxLDE0IEBAIGhh c2hfbWFzayhjaGFyICpwYWdlZGF0YSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJCS8qCiAJCSAqIElu IGhhc2ggYnVja2V0IGFuZCBvdmVyZmxvdyBwYWdlcywgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5 IHRoZQogCQkgKiBMUF9GTEFHUyB3aXRob3V0IGVtaXR0aW5nIGFueSBXQUwgcmVjb3JkLiBIZW5j ZSwgbWFzayB0aGUgbGluZQotCQkgKiBwb2ludGVyIGZsYWdzLiBTZWUgaGFzaGdldHR1cGxlKCks IF9oYXNoX2tpbGxfaXRlbXMoKSBmb3IgZGV0YWlscy4KKwkJICogcG9pbnRlciBmbGFncy4gU2Vl IGhhc2hraWxsaXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCQkgKi8KIAkJbWFza19scF9mbGFn cyhwYWdlKTsKIAl9CiAKIAkvKgogCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGhpbnQgYml0 IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIG1heSByZW1haW4KLQkgKiB1bmxvZ2dlZC4gU28sIG1h c2sgaXQuIFNlZSBfaGFzaF9raWxsX2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJICogdW5sb2dnZWQu IFNvLCBtYXNrIGl0LiBTZWUgaGFzaGtpbGxpdGVtc2JhdGNoKCkgZm9yIGRldGFpbHMuCiAJICov CiAJb3BhcXVlLT5oYXNob19mbGFnICY9IH5MSF9QQUdFX0hBU19ERUFEX1RVUExFUzsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDI2M2JjNzNmMS4uMzg4ZDI0NDJhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTI4MCwzMSArMjgwLDI0IEBAIF9oYXNoX2Ry b3BidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogfQogCiAvKgotICoJX2hhc2hfZHJvcHNj YW5idWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgdXNlZCBpbiBzY2FuLgorICoJX2hhc2hfZHJvcHNj YW5idWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgb3duZWQgYnkgc2Nhbi4KICAqCi0gKiBUaGlzIHJv dXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIHVzZWQgZHVyaW5nIHNjYW4gb24gd2hpY2ggd2UKLSAq IGhvbGQgbm8gbG9jay4KKyAqIFRoaXMgcm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgZm9yIHRo ZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBmb3IgdGhlCisgKiBidWNrZXQgcGFnZSBvZiBhIGJ1 Y2tldCBiZWluZyBzcGxpdCBhcyBuZWVkZWQuCiAgKi8KIHZvaWQKIF9oYXNoX2Ryb3BzY2FuYnVm KFJlbGF0aW9uIHJlbCwgSGFzaFNjYW5PcGFxdWUgc28pCiB7CiAJLyogcmVsZWFzZSBwaW4gd2Ug aG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhh c2hzb19idWNrZXRfYnVmKSAmJgotCQlzby0+aGFzaHNvX2J1Y2tldF9idWYgIT0gc28tPmN1cnJQ b3MuYnVmKQorCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikpCiAJCV9o YXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fYnVj a2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHBy aW1hcnkgYnVja2V0IHBhZ2UgIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLwotCWlmIChCdWZmZXJJ c1ZhbGlkKHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19zcGxp dF9idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9u IHByaW1hcnkgYnVja2V0IHBhZ2Ugb2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCisJaWYgKEJ1ZmZl cklzVmFsaWQoc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1Zihy ZWwsIHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19zcGxpdF9idWNr ZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2UgYW55IHBpbiB3ZSBzdGlsbCBo b2xkICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKLQkJX2hhc2hfZHJv cGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1 ZmZlcjsKLQogCS8qIHJlc2V0IHNwbGl0IHNjYW4gKi8KIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0 ZWQgPSBmYWxzZTsKIAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHNlYXJjaC5jCmluZGV4IDg5ZDFjNWJjNi4uNzNiYWJlOGNhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCkBAIC0yMiwxMDUgKzIyLDg3IEBACiAjaW5jbHVkZSAi c3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAotc3RhdGljIGJv b2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsCi0JCQkJ CQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgYm9vbCBfaGFzaF9yZWFkcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogc3RhdGljIGludAlfaGFzaF9sb2FkX3F1YWxpZmllZF9p dGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJCQkJCSAgIE9mZnNldE51 bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfaGFz aF9zYXZlaXRlbShIYXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJCSAg IE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkJICAgSW5k ZXhTY2FuQmF0Y2ggYmF0Y2gpOworc3RhdGljIGlubGluZSB2b2lkIF9oYXNoX3NhdmVpdGVtKElu ZGV4U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJCQkJCQkgIE9mZnNldE51bWJl ciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCk7CiBzdGF0aWMgdm9pZCBfaGFzaF9yZWFkbmV4dChJ bmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmcCwKIAkJCQkJCSAgIFBhZ2UgKnBhZ2VwLCBI YXNoUGFnZU9wYXF1ZSAqb3BhcXVlcCk7CiAKIC8qCi0gKglfaGFzaF9uZXh0KCkgLS0gR2V0IHRo ZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBi YXRjaCBvZiBpdGVtcyBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5LCBzby0+Y3VyclBvcyBk ZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5Ci0gKgkJYmUgcGlubmVkIGJ1dCBu b3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlkZW50aWZpZXMKLSAqCQl3aGlj aCBpdGVtIHdhcyBwcmV2aW91c2x5IHJldHVybmVkLgorICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNo IGRlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlIGJhdGNoIHdpdGggaXRlbXMKKyAqCQlhbHJlYWR5 IHJldHVybmVkLgogICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHNjYW4tPnhzX2hlYXB0aWQg aXMgc2V0IHRvIHRoZSBUSUQgb2YgdGhlIG5leHQKLSAqCQloZWFwIHR1cGxlLiAgc28tPmN1cnJQ b3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5z IGEgYmF0Y2ggY29udGFpbmluZyBtYXRjaGluZyBpdGVtcyBmcm9tCisgKgkJbmV4dCBwYWdlLiAg T3RoZXJ3aXNlIHJldHVybnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubworICoJ CWZ1cnRoZXIgbWF0Y2hlcy4gIE5vIGxvY2tzIGFyZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4u CiAgKgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFs c2Ugd2l0aCBwaW4KLSAqCQloZWxkIG9uIGJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tz IGhlbGQgb24gb3ZlcmZsb3cKLSAqCQlwYWdlLgorICoJCVJldGFpbnMgcGlucyBhY2NvcmRpbmcg dG8gdGhlIHNhbWUgcnVsZXMgYXMgX2hhc2hfZmlyc3QuCiAgKi8KLWJvb2wKLV9oYXNoX25leHQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitf aGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2Nh bkJhdGNoIHByaW9yYmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlv bjsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwot CUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJSGFzaEJhdGNoRGF0YSAqaGFzaHByaW9yYmF0 Y2ggPSBIYXNoQmF0Y2hHZXREYXRhKHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJsa25vOwog CUJ1ZmZlcgkJYnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJSW5kZXhTY2FuQmF0 Y2ggYmF0Y2g7CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVwbGUgb24gdGhlIGN1 cnJlbnQgcGFnZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRhIGZyb20gdGhlIG5l eHQgb3IgcHJldmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rpb24uIEJlZm9yZQot CSAqIG1vdmluZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ugc3VyZSB0aGF0IHdl IGRlYWwgd2l0aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIERldGVybWluZSB3aGlj aCBwYWdlIHRvIHJlYWQgbmV4dCBiYXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0YWlscwor CSAqIHRha2VuIGZyb20gdGhlIHByaW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5j dXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hh c2hfa2lsbF9pdGVtcyhzY2FuKTsKKwkJYmxrbm8gPSBoYXNocHJpb3JiYXRjaC0+bmV4dFBhZ2U7 CisJZWxzZQorCQlibGtubyA9IGhhc2hwcmlvcmJhdGNoLT5wcmV2UGFnZTsKIAotCQkJYmxrbm8g PSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKLQkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxrbm8p KQotCQkJewotCQkJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExI X09WRVJGTE9XX1BBR0UpOwotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGly KSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9z Y2FuID0gdHJ1ZTsKLQkJfQotCX0KKwkvKgorCSAqIEZvciBiaXRtYXAgc2NhbiBjYWxsZXJzLCBy ZWxlYXNlIHRoZSBwcmlvciBiYXRjaCBub3cgc28gdGhhdCB0aGUKKwkgKiBhbGxvY2F0aW9uIGJl bG93IGNhbiByZXVzZSBpdHMgbWVtb3J5LiAgVGhpcyB3YXkgYml0bWFwIHNjYW5zIG5ldmVyCisJ ICogbmVlZCBtb3JlIHRoYW4gb25lIGJhdGNoIGFsbG9jYXRpb24uCisJICovCisJaWYgKCFzY2Fu LT51c2ViYXRjaHJpbmcpCisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIHByaW9y YmF0Y2gpOworCisJaWYgKCFCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQorCQlyZXR1cm4gTlVM TDsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXh0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRl eGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CisKKwkvKiBHZXQgdGhlIGJ1ZmZlciBmb3IgbmV4 dCBiYXRjaCAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJ1ZiA9IF9o YXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwogCWVs c2UKIAl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0 SXRlbSkKLQkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRl bXMoc2Nhbik7CisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsCisJ CQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwogCi0JCQlibGtubyA9 IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykp Ci0JCQl7Ci0JCQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKLQkJ CQkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCQkJCS8qCi0J CQkJICogV2UgYWx3YXlzIG1haW50YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xl IHNjYW4KLQkJCQkgKiBvcGVyYXRpb24sIHNvIHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4g d2UgaGF2ZSBhY3F1aXJlZAotCQkJCSAqIGhlcmUuCi0JCQkJICovCi0JCQkJaWYgKGJ1ZiA9PSBz by0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVj a2V0X2J1ZikKLQkJCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7Ci0KLQkJCQlpZiAoIV9oYXNo X3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJ CX0KLQkJCWVsc2UKLQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCX0KKwkJLyoKKwkJICogV2Ug YWx3YXlzIG1haW50YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4gb3Bl cmF0aW9uLAorCQkgKiBzbyByZWxlYXNpbmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNx dWlyZWQgaGVyZS4KKwkJICovCisJCWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8 CisJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCQkJX2hhc2hfZHJvcGJ1 ZihyZWwsIGJ1Zik7CiAJfQogCi0JaWYgKGVuZF9vZl9zY2FuKQorCS8qIFJlYWQgdGhlIG5leHQg cGFnZSBhbmQgbG9hZCBpdGVtcyBpbnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hf cmVhZHBhZ2Uoc2NhbiwgYnVmLCBkaXIsIGJhdGNoKSkKIAl7Ci0JCV9oYXNoX2Ryb3BzY2FuYnVm KHJlbCwgc28pOwotCQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQlyZXR1 cm4gZmFsc2U7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKKwkJ cmV0dXJuIE5VTEw7CiAJfQogCi0JLyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJu ICovCi0JY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4 XTsKLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQlyZXR1cm4gdHJ1 ZTsKKwkvKiBSZXR1cm4gdGhlIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hlZCBpdGVtcyBmcm9tIG5l eHQgcGFnZSAqLworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTI3MCwyMiArMjUyLDIwIEBA IF9oYXNoX3JlYWRwcmV2KEluZGV4U2NhbkRlc2Mgc2NhbiwKIH0KIAogLyoKLSAqCV9oYXNoX2Zp cnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9maXJzdCgp IC0tIEZpbmQgdGhlIGZpcnN0IGJhdGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJV2Ug ZmluZCB0aGUgZmlyc3QgaXRlbSAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0IGl0ZW0p IGluIHRoZQotICoJCWluZGV4IHRoYXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29j aWF0ZWQgd2l0aCB0aGUgc2NhbgotICoJCWRlc2NyaXB0b3IuCisgKgkJV2UgZmluZCB0aGUgZmly c3QgYmF0Y2ggb2YgaXRlbXMgKG9yLCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdAorICoJCWJh dGNoKSBpbiB0aGUgaW5kZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2Np YXRlZCB3aXRoCisgKgkJdGhlIHNjYW4gZGVzY3JpcHRvci4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1 bCBleGl0LCBpZiB0aGUgcGFnZSBjb250YWluaW5nIGN1cnJlbnQgaW5kZXggdHVwbGUgaXMgYW4K LSAqCQlvdmVyZmxvdyBwYWdlLCBib3RoIHBpbiBhbmQgbG9jayBhcmUgcmVsZWFzZWQgd2hlcmVh cyBpZiBpdCBpcyBhIGJ1Y2tldAotICoJCXBhZ2UgdGhlbiBpdCBpcyBwaW5uZWQgYnV0IG5vdCBs b2NrZWQgYW5kIGRhdGEgYWJvdXQgdGhlIG1hdGNoaW5nCi0gKgkJdHVwbGUocykgb24gdGhlIHBh Z2UgaGFzIGJlZW4gbG9hZGVkIGludG8gc28tPmN1cnJQb3MsCi0gKgkJc2Nhbi0+eHNfaGVhcHRp ZCBpcyBzZXQgdG8gdGhlIGhlYXAgVElEIG9mIHRoZSBjdXJyZW50IHR1cGxlLgorICoJCU9uIHN1 Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMu CisgKgkJT3RoZXJ3aXNlIHJldHVybnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBu byBmdXJ0aGVyIG1hdGNoZXMuCisgKgkJTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVuIHdlIHJl dHVybi4KICAqCi0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVy biBmYWxzZSwgd2l0aCBwaW4gaGVsZCBvbgotICoJCWJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9y IGxvY2tzIGhlbGQgb24gb3ZlcmZsb3cgcGFnZS4KKyAqCQlXZSBhbHdheXMgcmV0YWluIG91ciBv d24gcGluIG9uIHRoZSBidWNrZXQgcGFnZS4gIFdoZW4gd2UgcmV0dXJuIGEKKyAqCQliYXRjaCB3 aXRoIGEgYnVja2V0IHBhZ2UsIGl0IHdpbGwgcmV0YWluIGl0cyBvd24gcmVmZXJlbmNlIHBpbi4K ICAqLwotYm9vbAorSW5kZXhTY2FuQmF0Y2gKIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxh dGlvbjsKQEAgLTI5Niw3ICsyNzYsNyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQogCUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBh Z2VPcGFxdWUgb3BhcXVlOwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJSW5kZXhTY2Fu QmF0Y2ggYmF0Y2g7CiAKIAlwZ3N0YXRfY291bnRfaW5kZXhfc2NhbihyZWwpOwogCWlmIChzY2Fu LT5pbnN0cnVtZW50KQpAQCAtMzI2LDcgKzMwNiw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICogaXRlbXMgaW4gdGhlIGluZGV4LgogCSAq LwogCWlmIChjdXItPnNrX2ZsYWdzICYgU0tfSVNOVUxMKQotCQlyZXR1cm4gZmFsc2U7CisJCXJl dHVybiBOVUxMOwogCiAJLyoKIAkgKiBPa2F5IHRvIGNvbXB1dGUgdGhlIGhhc2gga2V5LiAgV2Ug d2FudCB0byBkbyB0aGlzIGJlZm9yZSBhY3F1aXJpbmcgYW55CkBAIC00MTksMTkxICszOTksMTUy IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJ CQlfaGFzaF9yZWFkbmV4dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJfQogCi0JLyog cmVtZW1iZXIgd2hpY2ggYnVmZmVyIHdlIGhhdmUgcGlubmVkLCBpZiBhbnkgKi8KLQlBc3NlcnQo QnVmZmVySXNJbnZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1 ZjsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4 YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKIAotCS8qIE5vdyBmaW5kIGFsbCB0aGUgdHVwbGVz IHNhdGlzZnlpbmcgdGhlIHF1YWxpZmljYXRpb24gZnJvbSBhIHBhZ2UgKi8KLQlpZiAoIV9oYXNo X3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBSZWFkIHRo ZSBmaXJzdCBwYWdlIGFuZCBsb2FkIGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYg KCFfaGFzaF9yZWFkcGFnZShzY2FuLCBidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91 dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkv KiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+ Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQg PSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCS8qIGlmIHdlJ3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdl IGZvdW5kIGEgdmFsaWQgdHVwbGVzICovCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBi YXRjaCBjb250YWluaW5nIG1hdGNoZWQgaXRlbXMgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8q Ci0gKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFn ZSBpbnRvIHNvLT5jdXJyUG9zCisgKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9t IGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGJhdGNoCiAgKgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0 ZW1zIGluIHRoZSBjdXJyZW50IGluZGV4IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbnRvCi0gKglzby0+ Y3VyclBvcyBpZiBpdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5n IGl0ZW1zCisgKgl0aGUgYmF0Y2ggaWYgdGhleSBzYXRpc2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJ ZiBubyBtYXRjaGluZyBpdGVtcwogICoJYXJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHBhZ2UsIHdl IG1vdmUgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZQogICoJaW4gYSBidWNrZXQgY2hhaW4g YXMgaW5kaWNhdGVkIGJ5IHRoZSBkaXJlY3Rpb24uCiAgKgogICoJUmV0dXJuIHRydWUgaWYgYW55 IG1hdGNoaW5nIGl0ZW1zIGFyZSBmb3VuZCBlbHNlIHJldHVybiBmYWxzZS4KICAqLwogc3RhdGlj IGJvb2wKLV9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBT Y2FuRGlyZWN0aW9uIGRpcikKK19oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVm ZmVyIGJ1ZiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkK IHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hTY2FuT3BhcXVl IHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JQnVmZmVyCQlidWY7CisJSGFz aEJhdGNoRGF0YSAqaGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShiYXRjaCk7CiAJUGFnZQkJ cGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG9mZm51bTsKIAl1 aW50MTYJCWl0ZW1JbmRleDsKIAotCWJ1ZiA9ICpidWZQOwogCUFzc2VydChCdWZmZXJJc1ZhbGlk KGJ1ZikpOwogCV9oYXNoX2NoZWNrcGFnZShyZWwsIGJ1ZiwgTEhfQlVDS0VUX1BBR0UgfCBMSF9P VkVSRkxPV19QQUdFKTsKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCW9wYXF1ZSA9IEhh c2hQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCi0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCXNvLT5j dXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwloYXNoYmF0Y2gt PmJ1ZiA9IGJ1ZjsKKwloYXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmKTsKKwliYXRjaC0+ZGlyID0gZGlyOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKIAl7Ci0JCUJsb2NrTnVtYmVyIHByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7 Ci0KIAkJZm9yICg7OykKIAkJewogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3Np dGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFyY2gocGFn ZSwgc28tPmhhc2hzb19za19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFs aWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4ID0gX2hh c2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJ CQkJCQkgICBiYXRjaCk7CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gMCkKIAkJCQlicmVhazsKIAog CQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1 cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIG5leHQgcGFnZS4gQmVmb3JlIGxlYXZpbmcg dGhlIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueQotCQkJICoga2lsbGVkIGl0ZW1zLgorCQkJ ICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdl LCB0cnkgdG8KKwkJCSAqIG1vdmUgdG8gdGhlIG5leHQgcGFnZQogCQkJICovCi0JCQlpZiAoc28t Pm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJLyoKLQkJ CSAqIElmIHRoaXMgaXMgYSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCBoYXNob19wcmV2Ymxrbm8gaXMg bm90IGEgcmVhbAotCQkJICogYmxvY2sgbnVtYmVyLgotCQkJICovCi0JCQlpZiAoc28tPmN1cnJQ b3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9 PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJcHJldl9ibGtubyA9IEludmFsaWRC bG9ja051bWJlcjsKLQkJCWVsc2UKLQkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5oYXNob19wcmV2 Ymxrbm87Ci0KIAkJCV9oYXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsK LQkJCWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZikpCi0JCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0g YnVmOwotCQkJCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVm KTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5k IHByZXZpb3VzIGJsb2NrIG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRv IGtub3cgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0 aW5nIHRoYXQgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkg KiBkb24ndCByZXNldCBjdXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICog X2hhc2hfa2lsbF9pdGVtcyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlz Ci0JCQkJICogZnVuY3Rpb24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2 UGFnZSA9IHByZXZfYmxrbm87Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJaWYgKCFCdWZmZXJJc1Zh bGlkKGJ1ZikpCiAJCQkJcmV0dXJuIGZhbHNlOwotCQkJfQorCisJCQloYXNoYmF0Y2gtPmJ1ZiA9 IGJ1ZjsKKwkJCWhhc2hiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYp OwogCQl9CiAKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFz dEl0ZW0gPSBpdGVtSW5kZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQli YXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsK IAl9CiAJZWxzZQogCXsKLQkJQmxvY2tOdW1iZXIgbmV4dF9ibGtubyA9IEludmFsaWRCbG9ja051 bWJlcjsKLQogCQlmb3IgKDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5n IHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJj aF9sYXN0KHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNo X2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1J bmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGly LAorCQkJCQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4ICE9IE1heEluZGV4 VHVwbGVzUGVyUGFnZSkKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5k IGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICog dGhlIHByZXZpb3VzIHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aAotCQkJICogYW55IGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBt YXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRv IHRoZSBwcmV2aW91cyBwYWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJ CQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNv LT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNv X3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJbmV4dF9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJs a25vOwotCiAJCQlfaGFzaF9yZWFkcHJldihzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0J CQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQotCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1 ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7 Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0IGFuZCBw cmV2aW91cyBibG9jayBudW1iZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICogY3Vyc29ycyB0byBr bm93IHRoZSBzdGFydCBwb3NpdGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJICogaW5kaWNhdGlu ZyB0aGF0IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFsc28sCi0JCQkJICog ZG9uJ3QgcmVzZXQgY3VyclBhZ2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJCSAqIF9o YXNoX2tpbGxfaXRlbXMgdG8gYmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwot CQkJCSAqIGZ1bmN0aW9uIHJldHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBh Z2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0 X2Jsa25vOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCWlmICghQnVmZmVySXNWYWxp ZChidWYpKQogCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KKworCQkJaGFzaGJhdGNoLT5idWYgPSBi dWY7CisJCQloYXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsK IAkJfQogCi0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQ b3MubGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5p dGVtSW5kZXggPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOworCQliYXRjaC0+Zmlyc3RJdGVt ID0gaXRlbUluZGV4OworCQliYXRjaC0+bGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2Ug LSAxOwogCX0KIAotCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVm IHx8Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJ LyoKKwkgKiBTYXZlZCBhdCBsZWFzdCBvbmUgbWF0Y2ggaW4gYmF0Y2guaXRlbXNbXS4gIFByZXBh cmUgZm9yIGhhc2hnZXRiYXRjaCB0bworCSAqIHJldHVybiBpdCBieSBpbml0aWFsaXppbmcgcmVt YWluaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgorCSAqLworCWlmIChoYXNoYmF0Y2gtPmJ1ZiA9 PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKKwkJaGFzaGJhdGNoLT5idWYgPT0gc28tPmhhc2hz b19zcGxpdF9idWNrZXRfYnVmKQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlk QmxvY2tOdW1iZXI7Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0 Ymxrbm87Ci0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0sp OworCQkvKgorCQkgKiBCYXRjaCdzIGJ1ZmZlciBpcyBlaXRoZXIgdGhlIHByaW1hcnkgYnVja2V0 LCBvciBhIGJ1Y2tldCBiZWluZworCQkgKiBwb3B1bGF0ZWQgZHVlIHRvIGEgc3BsaXQuCisJCSAq CisJCSAqIEluY3JlbWVudCBsb2NhbCByZWZlcmVuY2UgY291bnQgc28gdGhhdCBiYXRjaCBnZXRz IGFuIGluZGVwZW5kZW50CisJCSAqIGJ1ZmZlciByZWZlcmVuY2UgdGhhdCBjYW4gYmUgcmVsZWFz ZWQgKGJ5IHRoZSBjb3JlIGNvZGUvdGFibGUgQU0pCisJCSAqIGJlZm9yZSB0aGUgaGFzaHNvX2J1 Y2tldF9idWYvaGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgcmVmZXJlbmNlcyBhcmUKKwkJICogcmVs ZWFzZWQuCisJCSAqLworCQlJbmNyQnVmZmVyUmVmQ291bnQoaGFzaGJhdGNoLT5idWYpOworCisJ CS8qIENhbiBvbmx5IHVzZSBvcGFxdWUtPmhhc2hvX25leHRibGtubyAqLworCQloYXNoYmF0Y2gt PnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQloYXNoYmF0Y2gtPm5leHRQYWdlID0g b3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnBy ZXZQYWdlID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdl ID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0JCV9oYXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJy UG9zLmJ1Zik7Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCS8qIENhbiB1 c2Ugb3BhcXVlLT5oYXNob19wcmV2Ymxrbm8gYW5kIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICov CisJCWhhc2hiYXRjaC0+cHJldlBhZ2UgPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKKwkJaGFz aGJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCX0KIAotCUFzc2Vy dChzby0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCS8qIHdl IHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4gYmF0Y2guaXRlbXNbXSAqLworCWluZGV4YW1f dXRpbF9iYXRjaF91bmxvY2soc2NhbiwgYmF0Y2gsIGhhc2hiYXRjaC0+YnVmKTsKKworCUFzc2Vy dChiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAJcmV0dXJuIHRydWU7CiB9 CiAKIC8qCiAgKiBMb2FkIGFsbCB0aGUgcXVhbGlmaWVkIGl0ZW1zIGZyb20gYSBjdXJyZW50IGlu ZGV4IHBhZ2UKLSAqIGludG8gc28tPmN1cnJQb3MuIEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hf cmVhZHBhZ2UuCisgKiBpbnRvIGJhdGNoLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRw YWdlLgogICovCiBzdGF0aWMgaW50CiBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNj YW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNj YW5EaXJlY3Rpb24gZGlyKQorCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVj dGlvbiBkaXIsCisJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlIYXNoU2Nhbk9w YXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUluZGV4VHVwbGUJaXR1 cDsKQEAgLTY0MCw3ICs1ODEsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNj YW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCQlfaGFzaF9jaGVja3F1YWwoc2NhbiwgaXR1cCkp CiAJCQl7CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJ CV9oYXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hf c2F2ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCQlpdGVtSW5kZXgr KzsKIAkJCX0KIAkJCWVsc2UKQEAgLTY4Nyw3ICs2MjgsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmll ZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCXsKIAkJCQlpdGVtSW5k ZXgtLTsKIAkJCQkvKiB0dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJ X2hhc2hfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9z YXZlaXRlbShiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJfQogCQkJZWxzZQog CQkJewpAQCAtNzA2LDEzICs2NDcsMTQgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5k ZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJfQogfQogCi0vKiBTYXZlIGFuIGluZGV4IGl0 ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBTYXZlIGFuIGluZGV4 IGl0ZW0gaW50byBiYXRjaC0+aXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIGlubGluZSB2b2lk Ci1faGFzaF9zYXZlaXRlbShIYXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKK19oYXNo X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJICAgT2Zm c2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKQogewotCUhhc2hTY2FuUG9zSXRlbSAq Y3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5n SXRlbSAqY3Vyckl0ZW0gPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+ aGVhcFRpZCA9IGl0dXAtPnRfdGlkOworCWN1cnJJdGVtLT50YWJsZVRpZCA9IGl0dXAtPnRfdGlk OwogCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwljdXJySXRlbS0+dHVwbGVPZmZz ZXQgPSAwOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKaW5kZXggM2UxNjExOWQwLi4z MzFkNWY0ZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwpAQCAtMTYsNyArMTYsNiBA QAogCiAjaW5jbHVkZSAiYWNjZXNzL2hhc2guaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9u cy5oIgotI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1 dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3Jl bC5oIgpAQCAtMzMsNyArMzIsNyBAQCBfaGFzaF9jaGVja3F1YWwoSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFR1cGxlIGl0dXApCiAJLyoKIAkgKiBDdXJyZW50bHksIHdlIGNhbid0IGNoZWNrIGFu eSBvZiB0aGUgc2NhbiBjb25kaXRpb25zIHNpbmNlIHdlIGRvIG5vdAogCSAqIGhhdmUgdGhlIG9y aWdpbmFsIGluZGV4IGVudHJ5IHZhbHVlIHRvIHN1cHBseSB0byB0aGUgc2tfZnVuYy4gQWx3YXlz Ci0JICogcmV0dXJuIHRydWU7IHdlIGV4cGVjdCB0aGF0IGhhc2hnZXR0dXBsZSBhbHJlYWR5IHNl dCB0aGUgcmVjaGVjayBmbGFnCisJICogcmV0dXJuIHRydWU7IHdlIGV4cGVjdCB0aGF0IGhhc2hn ZXRiYXRjaCBhbHJlYWR5IHNldCB0aGUgcmVjaGVjayBmbGFnCiAJICogdG8gbWFrZSB0aGUgbWFp biBpbmRleHNjYW4gY29kZSBkbyBpdC4KIAkgKi8KICNpZmRlZiBOT1RfVVNFRApAQCAtNTA1LDEy OSArNTA0LDMgQEAgX2hhc2hfZ2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiBy ZWwsIEJ1Y2tldCBvbGRfYnVja2V0LAogCiAJcmV0dXJuIG5ld19idWNrZXQ7CiB9Ci0KLS8qCi0g KiBfaGFzaF9raWxsX2l0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGluZGV4 c2NhbiBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkLgotICoKLSAqIHNjYW4tPm9w YXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91Z2ggc28sIGNvbnRhaW5zIGluZm9ybWF0aW9u IGFib3V0IHRoZQotICogY3VycmVudCBwYWdlIGFuZCBraWxsZWQgdHVwbGVzIHRoZXJlb24gKGdl bmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBiZQotICogY2FsbGVkIGlmIHNvLT5udW1LaWxsZWQg PiAwKS4KLSAqCi0gKiBUaGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBwYWdl IGFuZCBtYXkgb3IgbWF5IG5vdCBoYXZlIHRoZQotICogcGFnZSBwaW5uZWQgaW4gYSBidWZmZXIu ICBOb3RlIHRoYXQgcmVhZC1sb2NrIGlzIHN1ZmZpY2llbnQgZm9yIHNldHRpbmcKLSAqIExQX0RF QUQgc3RhdHVzICh3aGljaCBpcyBvbmx5IGEgaGludCkuCi0gKgotICogVGhlIGNhbGxlciBtdXN0 IGhhdmUgcGluIG9uIGJ1Y2tldCBidWZmZXIsIGJ1dCBtYXkgb3IgbWF5IG5vdCBoYXZlIHBpbgot ICogb24gb3ZlcmZsb3cgYnVmZmVyLCBhcyBpbmRpY2F0ZWQgYnkgSGFzaFNjYW5Qb3NJc1Bpbm5l ZChzby0+Y3VyclBvcykuCi0gKgotICogV2UgbWF0Y2ggaXRlbXMgYnkgaGVhcCBUSUQgYmVmb3Jl IGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBvbmVzIHRvCi0gKiBkZWxldGUuCi0gKgotICog VGhlcmUgYXJlIG5ldmVyIGFueSBzY2FucyBhY3RpdmUgaW4gYSBidWNrZXQgYXQgdGhlIHRpbWUg VkFDVVVNIGJlZ2lucywKLSAqIGJlY2F1c2UgVkFDVVVNIHRha2VzIGEgY2xlYW51cCBsb2NrIG9u IHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBzY2FucwotICogaG9sZCBhIHBpbi4gIEEgc2Nh biBjYW4gYmVnaW4gYWZ0ZXIgVkFDVVVNIGxlYXZlcyB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZQot ICogYnV0IGJlZm9yZSBpdCBmaW5pc2hlcyB0aGUgZW50aXJlIGJ1Y2tldCwgYnV0IGl0IGNhbiBu ZXZlciBwYXNzIFZBQ1VVTSwKLSAqIGJlY2F1c2UgVkFDVVVNIGFsd2F5cyBsb2NrcyB0aGUgbmV4 dCBwYWdlIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2sgb24KLSAqIHRoZSBwcmV2aW91cyBvbmUu ICBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgYWNjaWRlbnRhbGx5Ci0g KiBraWxsaW5nIGEgVElEIHRoYXQgaGFzIGJlZW4gcmV1c2VkIGZvciBhbiB1bnJlbGF0ZWQgdHVw bGUuCi0gKi8KLXZvaWQKLV9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQotewot CUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JUmVs YXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCbG9ja051bWJlciBibGtubzsKLQlC dWZmZXIJCWJ1ZjsKLQlQYWdlCQlwYWdlOwotCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKLQlPZmZz ZXROdW1iZXIgb2ZmbnVtLAotCQkJCW1heG9mZjsKLQlpbnQJCQludW1LaWxsZWQgPSBzby0+bnVt S2lsbGVkOwotCWludAkJCWk7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0JYm9v bAkJaGF2ZVBpbiA9IGZhbHNlOwotCi0JQXNzZXJ0KHNvLT5udW1LaWxsZWQgPiAwKTsKLQlBc3Nl cnQoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpOwotCUFzc2VydChIYXNoU2NhblBvc0lzVmFsaWQo c28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWx3YXlzIHJlc2V0IHRoZSBzY2FuIHN0YXRlLCBz byB3ZSBkb24ndCBsb29rIGZvciBzYW1lIGl0ZW1zIG9uIG90aGVyCi0JICogcGFnZXMuCi0JICov Ci0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQlibGtubyA9IHNvLT5jdXJyUG9zLmN1cnJQYWdlOwot CWlmIChIYXNoU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qCi0JCSAqIFdl IGFscmVhZHkgaGF2ZSBwaW4gb24gdGhpcyBidWZmZXIsIHNvLCBhbGwgd2UgbmVlZCB0byBkbyBp cwotCQkgKiBhY3F1aXJlIGxvY2sgb24gaXQuCi0JCSAqLwotCQloYXZlUGluID0gdHJ1ZTsKLQkJ YnVmID0gc28tPmN1cnJQb3MuYnVmOwotCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hB UkUpOwotCX0KLQllbHNlCi0JCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JF QUQsIExIX09WRVJGTE9XX1BBR0UpOwotCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKLQlv cGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKLQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zm c2V0TnVtYmVyKHBhZ2UpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bUtpbGxlZDsgaSsrKQotCXsK LQkJaW50CQkJaXRlbUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlIYXNoU2NhblBvc0l0 ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0KLQkJb2ZmbnVt ID0gY3Vyckl0ZW0tPmluZGV4T2Zmc2V0OwotCi0JCUFzc2VydChpdGVtSW5kZXggPj0gc28tPmN1 cnJQb3MuZmlyc3RJdGVtICYmCi0JCQkgICBpdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0 ZW0pOwotCi0JCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQotCQl7Ci0JCQlJdGVtSWQJCWlpZCA9 IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKLQkJCUluZGV4VHVwbGUJaXR1cGxlID0gKElu ZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7Ci0KLQkJCWlmIChJdGVtUG9pbnRlckVx dWFscygmaXR1cGxlLT50X3RpZCwgJmN1cnJJdGVtLT5oZWFwVGlkKSkKLQkJCXsKLQkJCQlpZiAo IWtpbGxlZHNvbWV0aGluZykKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIFVzZSB0aGUgaGludCBi aXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2UgY2FuCi0JCQkJCSAqIHVwZGF0ZSB0aGUg cGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBzaGFyZSBsb2NrLiBJZiB3ZQotCQkJCQkgKiBhcmUg bm90IGFsbG93ZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgY29udGludWluZy4KLQkJCQkJICovCi0JCQkJ CWlmICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhzby0+Y3VyclBvcy5idWYpKQotCQkJCQkJZ290 byB1bmxvY2tfcGFnZTsKLQkJCQl9Ci0KLQkJCQkvKiBmb3VuZCB0aGUgaXRlbSAqLwotCQkJCUl0 ZW1JZE1hcmtEZWFkKGlpZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVh azsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9m ZnNldE51bWJlck5leHQob2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBj YW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LiBXaGVuZXZl cgotCSAqIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBzZXQgdGhlIHBhZ2Uncwot CSAqIExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3Qg YSBoaW50LgotCSAqLwotCWlmIChraWxsZWRzb21ldGhpbmcpCi0JewotCQlvcGFxdWUtPmhhc2hv X2ZsYWcgfD0gTEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7Ci0JCUJ1ZmZlckZpbmlzaFNldEhpbnRC aXRzKHNvLT5jdXJyUG9zLmJ1ZiwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlp ZiAoc28tPmhhc2hzb19idWNrZXRfYnVmID09IHNvLT5jdXJyUG9zLmJ1ZiB8fAotCQloYXZlUGlu KQotCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQll bHNlCi0JCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7Ci19CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CmluZGV4IDI5ZDgxMTFiOC4uYTM3YmJjM2Q4IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApA QCAtMTE4Niw2ICsxMTg2LDcgQEAgSGFzaAogSGFzaEFnZ0JhdGNoCiBIYXNoQWdnU3BpbGwKIEhh c2hBbGxvY0Z1bmMKK0hhc2hCYXRjaERhdGEKIEhhc2hCdWlsZFN0YXRlCiBIYXNoQ29tcGFyZUZ1 bmMKIEhhc2hDb3B5RnVuYwpAQCAtMTIwNiw4ICsxMjA3LDYgQEAgSGFzaFBhZ2VTdGF0CiBIYXNo UGF0aAogSGFzaFNjYW5PcGFxdWUKIEhhc2hTY2FuT3BhcXVlRGF0YQotSGFzaFNjYW5Qb3NEYXRh Ci1IYXNoU2NhblBvc0l0ZW0KIEhhc2hTa2V3QnVja2V0CiBIYXNoU3RhdGUKIEhhc2hWYWx1ZUZ1 bmMKLS0gCjIuNTMuMAoK --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0013-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Disposition: attachment; filename="v14-0013-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj3s4 RnJvbSAwMDY1N2QxN2QyZGIyYTk3ZGM2N2JjODAzYTg3ZjZiMGZjNWU0YzBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNzoyNToyNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDEz LzE2XSBXSVA6IHJlYWRfc3RyZWFtOiBQcmV2ZW50IGRpc3RhbmNlIGZyb20gZGVjYXlpbmcKIHRv byBxdWlja2x5CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYyB8IDMzICsrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDMw IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRf c3RyZWFtLmMKaW5kZXggZTI4YWI1ZGUwLi5lM2MxNmJkMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vcmVhZF9zdHJlYW0uYwpAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgUmVhZFN0cmVhbQogCWlu dDE2CQlmb3J3YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7CiAJaW50MTYJ CWRpc3RhbmNlOworCXVpbnQxNgkJZGlzdGFuY2VfZGVjYXlfaG9sZG9mZjsKIAlpbnQxNgkJaW5p dGlhbGl6ZWRfYnVmZmVyczsKIAlpbnQxNgkJcmVzdW1lX2Rpc3RhbmNlOwogCWludAkJCXJlYWRf YnVmZmVyc19mbGFnczsKQEAgLTM2NCw5ICszNjUsMjIgQEAgcmVhZF9zdHJlYW1fc3RhcnRfcGVu ZGluZ19yZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkvKiBSZW1lbWJlciB3aGV0aGVyIHdlIG5l ZWQgdG8gd2FpdCBiZWZvcmUgcmV0dXJuaW5nIHRoaXMgYnVmZmVyLiAqLwogCWlmICghbmVlZF93 YWl0KQogCXsKLQkJLyogTG9vay1haGVhZCBkaXN0YW5jZSBkZWNheXMsIG5vIEkvTyBuZWNlc3Nh cnkuICovCi0JCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSkKLQkJCXN0cmVhbS0+ZGlzdGFuY2Ut LTsKKwkJLyoKKwkJICogSWYgdGhlcmUgY3VycmVudGx5IGlzIG5vIElPIGluIHByb2dyZXNzLCBh bmQgd2UgaGF2ZSBub3QgbmVlZGVkIHRvCisJCSAqIGlzc3VlIElPIHJlY2VudGx5LCBkZWNheSB0 aGUgbG9vay1haGVhZCBkaXN0YW5jZS4gIFdlIGRldGVjdCBpZiB3ZQorCQkgKiBoYWQgdG8gaXNz dWUgSU8gcmVjZW50bHkgYnkgaGF2aW5nIGEgZGVjYXkgaG9sZG9mZiB0aGF0J3Mgc2V0IHRvCisJ CSAqIHRoZSBtYXggbG9va2FoZWFkIGRpc3RhbmNlIHdoZW5ldmVyIHdlIG5lZWQgdG8gZG8gSU8u ICBUaGlzIGlzCisJCSAqIGltcG9ydGFudCB0byBlbnN1cmUgd2UgZXZlbnR1YWxseSByZWFjaCBh IGhpZ2ggZW5vdWdoIGRpc3RhbmNlIHRvCisJCSAqIHBlcmZvcm0gSU8gYXN5bmNocm9ub3VzbHkg d2hlbiBzdGFydGluZyBvdXQgd2l0aCBhIHNtYWxsIGxvb2thaGVhZAorCQkgKiBkaXN0YW5jZS4K KwkJICovCisJCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSAmJiBzdHJlYW0tPmlvc19pbl9wcm9n cmVzcyA9PSAwKQorCQl7CisJCQlpZiAoc3RyZWFtLT5kaXN0YW5jZV9kZWNheV9ob2xkb2ZmID09 IDApCisJCQkJc3RyZWFtLT5kaXN0YW5jZS0tOworCQkJZWxzZQorCQkJCXN0cmVhbS0+ZGlzdGFu Y2VfZGVjYXlfaG9sZG9mZi0tOworCQl9CiAJfQogCWVsc2UKIAl7CkBAIC03MDIsNiArNzE2LDcg QEAgcmVhZF9zdHJlYW1fYmVnaW5faW1wbChpbnQgZmxhZ3MsCiAJc3RyZWFtLT5zZXFfYmxvY2tu dW0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJc3RyZWFtLT5zZXFfdW50aWxfcHJvY2Vzc2VkID0g SW52YWxpZEJsb2NrTnVtYmVyOwogCXN0cmVhbS0+dGVtcG9yYXJ5ID0gU21ncklzVGVtcChzbWdy KTsKKwlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5X2hvbGRvZmYgPSAwOwogCiAJLyoKIAkgKiBTa2lw IHRoZSBpbml0aWFsIHJhbXAtdXAgcGhhc2UgaWYgdGhlIGNhbGxlciBzYXlzIHdlJ3JlIGdvaW5n IHRvIGJlCkBAIC05NDQsNiArOTU5LDE4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJaWYgKCsrc3RyZWFtLT5v bGRlc3RfaW9faW5kZXggPT0gc3RyZWFtLT5tYXhfaW9zKQogCQkJc3RyZWFtLT5vbGRlc3RfaW9f aW5kZXggPSAwOwogCisJCS8qCisJCSAqIEFzIHdlIG5lZWRlZCBJTywgcHJldmVudCBkaXN0YW5j ZSBmcm9tIGJlaW5nIHJlZHVjZWQgd2l0aGluIG91cgorCQkgKiBtYXhpbXVtIGxvb2thaGVhZCB3 aW5kb3cuIFRoaXMgYXZvaWRzIGhhdmluZyBkaXN0YW5jZSBjb2xsYXBzZSB0b28KKwkJICogcXVp Y2tseSBpbiB3b3JrbG9hZHMgd2hlcmUgbW9zdCBvZiB0aGUgcmVxdWlyZWQgYmxvY2tzIGFyZSBj YWNoZWQsCisJCSAqIGJ1dCB3aGVyZSB0aGUgcmVtYWluaW5nIElPcyBhcmUgYSBzdWZmaWNpZW50 IGVub3VnaCBmYWN0b3IgdG8gY2F1c2UKKwkJICogYSBzdWJzdGFudGlhbCBzbG93ZG93biBpZiBl eGVjdXRlZCBzeW5jaHJvbm91c2x5LgorCQkgKgorCQkgKiBYWFg6IE5vdCBvYnZpb3VzIHdoZXRo ZXIgd2Ugc2hvdWxkIHVzZSBtYXhfaW9zIG9yCisJCSAqIG1heF9waW5uZWRfYnVmZmVycy4gT3Ig c29tZXRoaW5nIGVsc2UgZW50aXJlbHkuCisJCSAqLworCQlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5 X2hvbGRvZmYgPSBzdHJlYW0tPm1heF9pb3M7CisKIAkJLyoKIAkJICogTG9vay1haGVhZCBkaXN0 YW5jZSByYW1wcyB1cCByYXBpZGx5IGFmdGVyIHdlIG5lZWRlZCB0byB3YWl0IGZvcgogCQkgKiBJ Ty4gV2Ugb25seSBpbmNyZWFzZSB0aGUgZGlzdGFuY2Ugd2hlbiB3ZSBuZWVkZWQgdG8gd2FpdCwg dG8gYXZvaWQKLS0gCjIuNTMuMAoK --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0014-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Disposition: attachment; filename="v14-0014-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj3q3 RnJvbSBlNzIyODQxN2E1M2ZkOGI0NDlmZTUyZDRhZDU4MjI5OWYwYTY0NjYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAyMDoyMzo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDE0 LzE2XSBXSVA6IGFpbzogaW9fdXJpbmc6IFVzZSBJTyBzaXplIG5vdCBJTyBxdWV1ZSB0bwogdHJp Z2dlciBhc3luYyBwcm9jZXNzaW5nCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMgfCA1NyArKysrKysrKysrKysrKy0tLS0tLS0tLQogMSBmaWxl IGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKaW5kZXggNGUxMjQ0ZmExLi4wNDFiNzI2Mjkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCkBAIC00MDcsNyAr NDA3LDYgQEAgc3RhdGljIGludAogcGdhaW9fdXJpbmdfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2Vk X2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCXN0cnVjdCBpb191cmluZyAqdXJp bmdfaW5zdGFuY2UgPSAmcGdhaW9fbXlfdXJpbmdfY29udGV4dC0+aW9fdXJpbmdfcmluZzsKLQlp bnQJCQlpbl9mbGlnaHRfYmVmb3JlID0gZGNsaXN0X2NvdW50KCZwZ2Fpb19teV9iYWNrZW5kLT5p bl9mbGlnaHRfaW9zKTsKIAogCUFzc2VydChudW1fc3RhZ2VkX2lvcyA8PSBQR0FJT19TVUJNSVRf QkFUQ0hfU0laRSk7CiAKQEAgLTQyMywyNyArNDIyLDYgQEAgcGdhaW9fdXJpbmdfc3VibWl0KHVp bnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogCiAJCXBnYWlv X2lvX3ByZXBhcmVfc3VibWl0KGlvaCk7CiAJCXBnYWlvX3VyaW5nX3NxX2Zyb21faW8oaW9oLCBz cWUpOwotCi0JCS8qCi0JCSAqIGlvX3VyaW5nIGV4ZWN1dGVzIElPIGluIHByb2Nlc3MgY29udGV4 dCBpZiBwb3NzaWJsZS4gVGhhdCdzCi0JCSAqIGdlbmVyYWxseSBnb29kLCBhcyBpdCByZWR1Y2Vz IGNvbnRleHQgc3dpdGNoaW5nLiBXaGVuIHBlcmZvcm1pbmcgYQotCQkgKiBsb3Qgb2YgYnVmZmVy ZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbiBwYWdlIGNhY2hlIGFuZAotCQkg KiB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMgaW4gdGhlIGZvcmVncm91bmQsIGFzIGl0IGNhbid0 IGJlCi0JCSAqIG9mZmxvYWRlZCB0byBETUEgaGFyZHdhcmUgYXMgaXMgcG9zc2libGUgd2hlbiB1 c2luZyBkaXJlY3QgSU8uIFdoZW4KLQkJICogZXhlY3V0aW5nIGEgbG90IG9mIGJ1ZmZlcmVkIElP IHRoaXMgY2F1c2VzIGlvX3VyaW5nIHRvIGJlIHNsb3dlcgotCQkgKiB0aGFuIHdvcmtlciBtb2Rl LCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhlIGNvcHlpbmcuIGlvX3VyaW5nCi0JCSAq IGNhbiBiZSB0b2xkIHRvIG9mZmxvYWQgd29yayB0byB3b3JrZXIgdGhyZWFkcyBpbnN0ZWFkLgot CQkgKgotCQkgKiBJZiBhbiBJTyBpcyBidWZmZXJlZCBJTyBhbmQgd2UgYWxyZWFkeSBoYXZlIElP cyBpbiBmbGlnaHQgb3IKLQkJICogbXVsdGlwbGUgSU9zIGFyZSBiZWluZyBzdWJtaXR0ZWQsIHdl IHRodXMgdGVsbCBpb191cmluZyB0byBleGVjdXRlCi0JCSAqIHRoZSBJTyBpbiB0aGUgYmFja2dy b3VuZC4gV2UgZG9uJ3QgZG8gc28gZm9yIHRoZSBmaXJzdCBmZXcgSU9zCi0JCSAqIGJlaW5nIHN1 Ym1pdHRlZCBhcyBleGVjdXRpbmcgaW4gdGhpcyBwcm9jZXNzJyBjb250ZXh0IGhhcyBsb3dlcgot CQkgKiBsYXRlbmN5LgotCQkgKi8KLQkJaWYgKGluX2ZsaWdodF9iZWZvcmUgPiA0ICYmIChpb2gt PmZsYWdzICYgUEdBSU9fSEZfQlVGRkVSRUQpKQotCQkJaW9fdXJpbmdfc3FlX3NldF9mbGFncyhz cWUsIElPU1FFX0FTWU5DKTsKLQotCQlpbl9mbGlnaHRfYmVmb3JlKys7CiAJfQogCiAJd2hpbGUg KHRydWUpCkBAIC03MDcsNiArNjg1LDcgQEAgc3RhdGljIHZvaWQKIHBnYWlvX3VyaW5nX3NxX2Zy b21faW8oUGdBaW9IYW5kbGUgKmlvaCwgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogewogCXN0 cnVjdCBpb3ZlYyAqaW92OworCXNpemVfdAkJaW9fc2l6ZSA9IDA7CiAKIAlzd2l0Y2ggKChQZ0Fp b09wKSBpb2gtPm9wKQogCXsKQEAgLTcxOSw2ICs2OTgsOCBAQCBwZ2Fpb191cmluZ19zcV9mcm9t X2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIAkJCQkJCQkJ ICAgaW92LT5pb3ZfYmFzZSwKIAkJCQkJCQkJICAgaW92LT5pb3ZfbGVuLAogCQkJCQkJCQkgICBp b2gtPm9wX2RhdGEucmVhZC5vZmZzZXQpOworCisJCQkJaW9fc2l6ZSA9IGlvdi0+aW92X2xlbjsK IAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcyOCw3ICs3MDksMzkgQEAgcGdhaW9fdXJpbmdfc3Ff ZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJCQkJ CQkJCQlpb2gtPm9wX2RhdGEucmVhZC5pb3ZfbGVuZ3RoLAogCQkJCQkJCQkJaW9oLT5vcF9kYXRh LnJlYWQub2Zmc2V0KTsKIAorCQkJCWZvciAoaW50IGkgPSAwOyBpIDw9IGlvaC0+b3BfZGF0YS5y ZWFkLmlvdl9sZW5ndGg7IGkrKywgaW92KyspCisJCQkJCWlvX3NpemUgKz0gaW92LT5pb3ZfbGVu OwogCQkJfQorCisKKwkJCS8qCisJCQkgKiBpb191cmluZyBleGVjdXRlcyBJTyBpbiBwcm9jZXNz IGNvbnRleHQgaWYgcG9zc2libGUuIFRoYXQncworCQkJICogZ2VuZXJhbGx5IGdvb2QsIGFzIGl0 IHJlZHVjZXMgY29udGV4dCBzd2l0Y2hpbmcuIFdoZW4KKwkJCSAqIHBlcmZvcm1pbmcgYSBsb3Qg b2YgYnVmZmVyZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbgorCQkJICogcGFn ZSBjYWNoZSBhbmQgdXNlcnNwYWNlIG1lbW9yeSBoYXBwZW5zIGluIHRoZSBmb3JlZ3JvdW5kLCBh cworCQkJICogaXQgY2FuJ3QgYmUgb2ZmbG9hZGVkIHRvIERNQSBoYXJkd2FyZSBhcyBpcyBwb3Nz aWJsZSB3aGVuIHVzaW5nCisJCQkgKiBkaXJlY3QgSU8uIFdoZW4gZXhlY3V0aW5nIGEgbG90IG9m IGJ1ZmZlcmVkIElPIHRoaXMgY2F1c2VzCisJCQkgKiBpb191cmluZyB0byBiZSBzbG93ZXIgdGhh biB3b3JrZXIgbW9kZSwgYXMgd29ya2VyIG1vZGUKKwkJCSAqIHBhcmFsbGVsaXplcyB0aGUgY29w eWluZy4gaW9fdXJpbmcgY2FuIGJlIHRvbGQgdG8gb2ZmbG9hZCB3b3JrCisJCQkgKiB0byB3b3Jr ZXIgdGhyZWFkcyBpbnN0ZWFkLgorCQkJICoKKwkJCSAqIElmIHRoZSBJT3MgYXJlIHNtYWxsLCB0 aGVyZSBpcyBubyBiZW5lZml0IGZyb20gZm9yY2luZyB0aGluZ3MKKwkJCSAqIGludG8gdGhlIGJh Y2tncm91bmQsIHRoZSBvdmVyaGVhZCBmcm9tIGNvbnRleHQgc3dpdGNoaW5nIGlzCisJCQkgKiBo aWdoZXIgdGhhbiB0aGUgZ2Fpbi4gIFRoZXJlZm9yZSB3ZSB1c2UgdGhlIHNpemUgb2YgdGhlIHJl YWQgYXMKKwkJCSAqIGEgaGV1cmlzdGljLgorCQkJICoKKwkJCSAqIFhYWDogV2UgdXNlZCB0byBu b3QgZG8gdGhpcyBmb3IgdGhlIGZpcnN0IGZldyBJT3MgaW4gZmxpZ2h0LAorCQkJICogYnV0IG5v dyB3ZSBoYXZlIGEgaGV1cmlzdGljIHByZXZlbnRpbmcgZGVlcGVyIElPIHF1ZXVlcyBpZiBJT3MK KwkJCSAqIGZpbmlzaCBpbiB0aW1lLCB3aGljaCB3aWxsIG9mdGVuIHByZXZlbnQgdXMgZnJvbSBl dmVyIHJlYWNoaW5nCisJCQkgKiB0aGF0IGRlZXAgcXVldWVzLiAgTWF5YmUgdGhlcmUncyBhIGJl dHRlciB3YXk/CisJCQkgKgorCQkJICogWFhYOiBOZWVkIHRvIGV2YWx1YXRlIHRoZSBudW1iZXIg b2YgYmxvY2tzIHdoZW4gSU9TUUVfQVNZTkMKKwkJCSAqIHN0YXJ0cyB0byBtYWtlIHNlbnNlLgor CQkJICovCisJCQlpZiAoaW9fc2l6ZSA+PSAoQkxDS1NaICogNCkgJiYKKwkJCQkoaW9oLT5mbGFn cyAmIFBHQUlPX0hGX0JVRkZFUkVEKSkKKwkJCQlpb191cmluZ19zcWVfc2V0X2ZsYWdzKHNxZSwg SU9TUUVfQVNZTkMpOworCiAJCQlicmVhazsKIAogCQljYXNlIFBHQUlPX09QX1dSSVRFVjoKLS0g CjIuNTMuMAoK --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0001-Make-IndexScanInstrumentation-a-pointer-in-execu.patch" Content-Disposition: attachment; filename="v14-0001-Make-IndexScanInstrumentation-a-pointer-in-execu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj3a0 RnJvbSA2YjUxNTdmNzVmZjkwNTBjNDc2YmNlNTE5NTE0ODgyYjI1MzVhMGI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6MjI6MjUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNCAwMS8xNl0g TWFrZSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gYSBwb2ludGVyIGluIGV4ZWN1dG9yCiBzY2Fu IG5vZGVzLgoKQ2hhbmdlIHRoZSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gZmllbGRzIGluIElu ZGV4U2NhblN0YXRlLApJbmRleE9ubHlTY2FuU3RhdGUsIGFuZCBCaXRtYXBJbmRleFNjYW5TdGF0 ZSBmcm9tIGlubGluZSBzdHJ1Y3RzIHRvCnBvaW50ZXJzLiAgVGhpcyBhdm9pZHMgYWRkaW5nIGFk ZGl0aW9uYWwgb3ZlcmhlYWQgYXMgbmV3IGZpZWxkcyBhcmUKYWRkZWQgdG8gSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uLCBhdCBsZWFzdCBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlCmluc3Ry dW1lbnRhdGlvbiBpc24ndCB1c2VkIChpLmUuIHdoZW4gdGhlIGV4ZWN1dG9yIG5vZGUgaXNuJ3Qg YmVpbmcgcnVuCnRocm91Z2ggYW4gRVhQTEFJTiBBTkFMWVpFKS4KLS0tCiBzcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgfCAgNiArKystLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICB8ICA2ICsrKy0tLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jIHwgIDggKysrKysrLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICB8IDEyICsrKysrKysrLS0tLQogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAgICAgIHwgMTQgKysrKysrKysrLS0tLS0KIDUg ZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAppbmRleCA2M2MwNjdkNWEuLjUxNzgyZDFmYyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKQEAgLTE3MjMsNyArMTcyMyw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAJ RXhwckNvbnRleHQgKmlzc19SdW50aW1lQ29udGV4dDsKIAlSZWxhdGlvbglpc3NfUmVsYXRpb25E ZXNjOwogCXN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqaXNzX1NjYW5EZXNjOwotCUluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiBpc3NfSW5zdHJ1bWVudDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRp b24gKmlzc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaXNz X1NoYXJlZEluZm87CiAKIAkvKiBUaGVzZSBhcmUgbmVlZGVkIGZvciByZS1jaGVja2luZyBPUkRF UiBCWSBleHByIG9yZGVyaW5nICovCkBAIC0xNzc0LDcgKzE3NzQsNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleE9ubHlTY2FuU3RhdGUKIAlFeHByQ29udGV4dCAqaW9zc19SdW50aW1lQ29udGV4dDsK IAlSZWxhdGlvbglpb3NzX1JlbGF0aW9uRGVzYzsKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEg Kmlvc3NfU2NhbkRlc2M7Ci0JSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGlvc3NfSW5zdHJ1bWVu dDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfU2hhcmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xv dCAqaW9zc19UYWJsZVNsb3Q7CiAJQnVmZmVyCQlpb3NzX1ZNQnVmZmVyOwpAQCAtMTgxNSw3ICsx ODE1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQml0bWFwSW5kZXhTY2FuU3RhdGUKIAlFeHByQ29udGV4 dCAqYmlzc19SdW50aW1lQ29udGV4dDsKIAlSZWxhdGlvbgliaXNzX1JlbGF0aW9uRGVzYzsKIAlz dHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmJpc3NfU2NhbkRlc2M7Ci0JSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uIGJpc3NfSW5zdHJ1bWVudDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmJp c3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmJpc3NfU2hh cmVkSW5mbzsKIH0gQml0bWFwSW5kZXhTY2FuU3RhdGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpp bmRleCA5MzkxOGEyMjMuLmJlZDY1ODdjOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMzg3 OCw3ICszODc4LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3Rh dGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJSW5kZXhTY2FuU3RhdGUgKmluZGV4c3Rh dGUgPSAoKEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCQkJbnNlYXJjaGVzID0gaW5k ZXhzdGF0ZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAkJCQlTaGFyZWRJbmZvID0gaW5k ZXhzdGF0ZS0+aXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zODg2LDcgKzM4 ODYsNyBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhw bGFpblN0YXRlICplcykKIAkJCXsKIAkJCQlJbmRleE9ubHlTY2FuU3RhdGUgKmluZGV4c3RhdGUg PSAoKEluZGV4T25seVNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwogCi0JCQkJbnNlYXJjaGVzID0g aW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAkJCQlTaGFyZWRJbmZvID0g aW5kZXhzdGF0ZS0+aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzg5NCw3 ICszODk0LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJQml0bWFwSW5kZXhTY2FuU3RhdGUgKmluZGV4 c3RhdGUgPSAoKEJpdG1hcEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQluc2Vh cmNoZXMgPSBpbmRleHN0YXRlLT5iaXNzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQkJCW5zZWFy Y2hlcyA9IGluZGV4c3RhdGUtPmJpc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOwogCQkJCVNoYXJl ZEluZm8gPSBpbmRleHN0YXRlLT5iaXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggMDU4YTU5ZWY1 Li4yY2E4MjJjZjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJ bmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2Fu LmMKQEAgLTIwMSw3ICsyMDEsNyBAQCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4 U2NhblN0YXRlICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2Nh biBpdCB3aWxsIHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3 IEJpdG1hcEluZGV4U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwotCQl3aW5zdHJ1 bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmJpc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdp bnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+Ymlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7 CiAJfQogCiAJLyoKQEAgLTI3Miw2ICsyNzIsMTAgQEAgRXhlY0luaXRCaXRtYXBJbmRleFNjYW4o Qml0bWFwSW5kZXhTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAo ZWZsYWdzICYgRVhFQ19GTEFHX0VYUExBSU5fT05MWSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAK KwkvKiBTZXQgdXAgaW5zdHJ1bWVudGF0aW9uIG9mIGJpdG1hcCBpbmRleCBzY2FucyBpZiByZXF1 ZXN0ZWQgKi8KKwlpZiAoZXN0YXRlLT5lc19pbnN0cnVtZW50KQorCQlpbmRleHN0YXRlLT5iaXNz X0luc3RydW1lbnQgPSBwYWxsb2MwX29iamVjdChJbmRleFNjYW5JbnN0cnVtZW50YXRpb24pOwor CiAJLyogT3BlbiB0aGUgaW5kZXggcmVsYXRpb24uICovCiAJbG9ja21vZGUgPSBleGVjX3J0X2Zl dGNoKG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlc3RhdGUpLT5yZWxsb2NrbW9kZTsKIAlpbmRleHN0 YXRlLT5iaXNzX1JlbGF0aW9uRGVzYyA9IGluZGV4X29wZW4obm9kZS0+aW5kZXhpZCwgbG9ja21v ZGUpOwpAQCAtMzIzLDcgKzMyNyw3IEBAIEV4ZWNJbml0Qml0bWFwSW5kZXhTY2FuKEJpdG1hcElu ZGV4U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+ Ymlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoaW5kZXhzdGF0ZS0+Ymlz c19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKLQkJCQkJCQkg ICAmaW5kZXhzdGF0ZS0+Ymlzc19JbnN0cnVtZW50LAorCQkJCQkJCSAgIGluZGV4c3RhdGUtPmJp c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkgICBpbmRleHN0YXRlLT5iaXNzX051bVNjYW5LZXlzKTsK IAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCBjMmQw OTM3NDUuLmY4NGRiMDQ3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jCkBAIC05Miw3ICs5Miw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpu b2RlKQogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkgICBl c3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+aW9zc19JbnN0cnVtZW50LAor CQkJCQkJCQkgICBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3Nf TnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMpOwogCkBA IC00MzIsNyArNDMyLDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRl ICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2NhbiBpdCB3aWxs IHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25s eVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KLQkJd2luc3RydW1lbnQtPm5zZWFy Y2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+ bnNlYXJjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOwogCX0KIAogCS8q CkBAIC02MDQsNiArNjA0LDEwIEBAIEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2Fu ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAoZWZsYWdzICYgRVhFQ19G TEFHX0VYUExBSU5fT05MWSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAKKwkvKiBTZXQgdXAgaW5z dHJ1bWVudGF0aW9uIG9mIGluZGV4LW9ubHkgc2NhbnMgaWYgcmVxdWVzdGVkICovCisJaWYgKGVz dGF0ZS0+ZXNfaW5zdHJ1bWVudCkKKwkJaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50ID0gcGFs bG9jMF9vYmplY3QoSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uKTsKKwogCS8qIE9wZW4gdGhlIGlu ZGV4IHJlbGF0aW9uLiAqLwogCWxvY2ttb2RlID0gZXhlY19ydF9mZXRjaChub2RlLT5zY2FuLnNj YW5yZWxpZCwgZXN0YXRlKS0+cmVsbG9ja21vZGU7CiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29w ZW4obm9kZS0+aW5kZXhpZCwgbG9ja21vZGUpOwpAQCAtNzg1LDcgKzc4OSw3IEBAIEV4ZWNJbmRl eE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJbm9kZS0+ aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19j dXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKLQkJCQkJ CQkJICZub2RlLT5pb3NzX0luc3RydW1lbnQsCisJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1l bnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9z c19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CkBAIC04NTEsNyArODU1LDcgQEAg RXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSwKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5v ZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25E ZXNjLAotCQkJCQkJCQkgJm5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlv c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJ CSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCBhNjE2YWJmZjAuLjM2MzIwZDdkMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTA5LDcgKzEwOSw3IEBAIEluZGV4TmV4 dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9k ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+ aXNzX0luc3RydW1lbnQsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJ CQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRl ckJ5S2V5cyk7CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRl eFNjYW5TdGF0ZSAqbm9kZSkKIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Mu c3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAog CQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+aXNzX0lu c3RydW1lbnQsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBu b2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5 cyk7CiAKQEAgLTgxMSw3ICs4MTEsNyBAQCBFeGVjRW5kSW5kZXhTY2FuKEluZGV4U2NhblN0YXRl ICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2NhbiBpdCB3aWxs IHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25s eVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KLQkJd2luc3RydW1lbnQtPm5zZWFy Y2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdpbnN0cnVtZW50LT5u c2VhcmNoZXMgKz0gbm9kZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAl9CiAKIAkvKgpA QCAtOTcxLDYgKzk3MSwxMCBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVT dGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWlmIChlZmxhZ3MgJiBFWEVDX0ZMQUdfRVhQTEFJ Tl9PTkxZKQogCQlyZXR1cm4gaW5kZXhzdGF0ZTsKIAorCS8qIFNldCB1cCBpbnN0cnVtZW50YXRp b24gb2YgaW5kZXggc2NhbnMgaWYgcmVxdWVzdGVkICovCisJaWYgKGVzdGF0ZS0+ZXNfaW5zdHJ1 bWVudCkKKwkJaW5kZXhzdGF0ZS0+aXNzX0luc3RydW1lbnQgPSBwYWxsb2MwX29iamVjdChJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24pOworCiAJLyogT3BlbiB0aGUgaW5kZXggcmVsYXRpb24uICov CiAJbG9ja21vZGUgPSBleGVjX3J0X2ZldGNoKG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlc3RhdGUp LT5yZWxsb2NrbW9kZTsKIAlpbmRleHN0YXRlLT5pc3NfUmVsYXRpb25EZXNjID0gaW5kZXhfb3Bl bihub2RlLT5pbmRleGlkLCBsb2NrbW9kZSk7CkBAIC0xNzIwLDcgKzE3MjQsNyBAQCBFeGVjSW5k ZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pc3NfU2Nh bkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uLAogCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJICZub2Rl LT5pc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJ CQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlL ZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKQEAgLTE3ODQsNyArMTc4OCw3IEBAIEV4ZWNJbmRleFNj YW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCW5vZGUtPmlzc19TY2Fu RGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCiAJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAotCQkJCQkJCQkgJm5vZGUt Pmlzc19JbnN0cnVtZW50LAorCQkJCQkJCQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJ CSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtl eXMsCiAJCQkJCQkJCSBwaXNjYW4pOwotLSAKMi41My4wCgo= --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0015-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v14-0015-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj3m2 RnJvbSBkOWYwYTQxMWFmMGFlNTkyY2Q3YTMwYjZlMGYzZmFjNzRjMTE1YjZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MzI6NTIgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNCAxNS8xNl0g QWRkIGZha2UgTFNOIHN1cHBvcnQgdG8gaGFzaCBpbmRleCBBTS4KClRoaXMgaXMgcHJlcGFyYXRp b24gZm9yIGFuIHVwY29taW5nIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50 ZXJmYWNlIGFuZCBzd2l0Y2ggaGFzaCBvdmVyIHRvIGl0IChmcm9tIGFtZ2V0dHVwbGUpLiAgV2Ug bmVlZCBmYWtlCkxTTnMgdG8gbWFrZSBpdCBzYWZlIHRvIGFwcGx5IGJlaGF2aW9yIHRoYXQgaXMg ZXF1aXZhbGVudCB0byBuYnRyZWUncwpwcmV2aW91cyBkcm9wUGluIGJlaGF2aW9yIHRoYXQgd29y a3Mgd2l0aCB1bmxvZ2dlZCBoYXNoIGluZGV4IHNjYW5zLgoKVGhlIGNvbW1pdCB0aGF0IHdpbGwg YWRkIGhhc2hnZXRiYXRjaCB3aWxsIHJlcGxhY2UgX2hhc2hfa2lsbF9pdGVtcyB3aXRoCmEgbmV3 IGhhc2hraWxsaXRlbXNiYXRjaCByb3V0aW5lLiAgVGhpcyB3aWxsIGJlIHZlcnkgc2ltaWxhciB0 byB0aGUKYnRraWxsaXRlbXNiYXRjaCByb3V0aW5lIGFkZGVkIGJ5IGNvbW1pdCBYWFhYWC4gIElu IHBhcnRpY3VsYXIsIGl0IHdpbGwKdXNlIHRoZSBzYW1lICJkaWQgdGhlIGluZGV4IHBhZ2UncyBM U04gY2hhbmdlIHNpbmNlIHRoZSBwYWdlIHdhcyBmaXJzdApyZWFkPyIgdHJpY2suCgpBdXRob3I6 IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1YzdyUk4zRXROWHBpS3NqUGZPOG1oYiswRHIySzBEdGdA bWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAg fCAgMjEgKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYyB8ICAyMCAr KystLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYyAgIHwgMTExICsrKysrKysr KysrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyAg IHwgIDIyICsrKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMDUgaW5zZXJ0aW9ucygrKSwgNjkgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDIxN2M3ZjVlMS4uMjUwNDRmZThm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC00NzcsNiArNDc3LDcgQEAgaGFzaGJ1bGtkZWxl dGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAog CUJ1ZmZlcgkJbWV0YWJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJSGFzaE1ldGFQYWdlIG1ldGFwOwog CUhhc2hNZXRhUGFnZSBjYWNoZWRtZXRhcDsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCXR1cGxl c19yZW1vdmVkID0gMDsKIAludW1faW5kZXhfdHVwbGVzID0gMDsKQEAgLTYxNiw3ICs2MTcsNiBA QCBsb29wX3RvcDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF91 cGRhdGVfbWV0YV9wYWdlIHhscmVjOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCQl4bHJlYy5u dHVwbGVzID0gbWV0YXAtPmhhc2htX250dXBsZXM7CiAKQEAgLTYyNiw4ICs2MjYsMTEgQEAgbG9v cF90b3A6CiAJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBtZXRhYnVmLCBSRUdCVUZfU1RBTkRBUkQp OwogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1VQREFURV9N RVRBX1BBR0UpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7 CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04o KTsKIApAQCAtNzAwLDYgKzcwMyw3IEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwg QnVja2V0IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCUJ1ZmZlcgkJYnVmOwogCUJ1 Y2tldAkJbmV3X2J1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSBJbnZhbGlkQnVja2V0 OwogCWJvb2wJCWJ1Y2tldF9kaXJ0eSA9IGZhbHNlOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJ Ymxrbm8gPSBidWNrZXRfYmxrbm87CiAJYnVmID0gYnVja2V0X2J1ZjsKQEAgLTgyMiw3ICs4MjYs NiBAQCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LCBC dWZmZXIgYnVja2V0X2J1ZiwKIAkJCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJCQl7CiAJ CQkJeGxfaGFzaF9kZWxldGUgeGxyZWM7Ci0JCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkJCQl4 bHJlYy5jbGVhcl9kZWFkX21hcmtpbmcgPSBjbGVhcl9kZWFkX21hcmtpbmc7CiAJCQkJeGxyZWMu aXNfcHJpbWFyeV9idWNrZXRfcGFnZSA9IChidWYgPT0gYnVja2V0X2J1Zik7CkBAIC04NDcsOCAr ODUwLDExIEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNr ZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCQkJCQkJCQkJbmRlbGV0YWJsZSAqIHNpemVvZihPZmZz ZXROdW1iZXIpKTsKIAogCQkJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19I QVNIX0RFTEVURSk7Ci0JCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZiksIHJlY3B0cik7 CiAJCQl9CisJCQllbHNlCisJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQkJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZiksIHJlY3B0cik7CiAKIAkJCUVORF9DUklUX1NF Q1RJT04oKTsKIAkJfQpAQCAtOTA3LDE0ICs5MTMsMTUgQEAgaGFzaGJ1Y2tldGNsZWFudXAoUmVs YXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwgQnVmZmVyIGJ1Y2tldF9idWYsCiAJCS8qIFhM T0cgc3R1ZmYgKi8KIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJewotCQkJWExvZ1Jl Y1B0cglyZWNwdHI7Ci0KIAkJCVhMb2dCZWdpbkluc2VydCgpOwogCQkJWExvZ1JlZ2lzdGVyQnVm ZmVyKDAsIGJ1Y2tldF9idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJCXJlY3B0ciA9IFhMb2dJ bnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NQTElUX0NMRUFOVVApOwotCQkJUGFnZVNldExT TihwYWdlLCByZWNwdHIpOwogCQl9CisJCWVsc2UKKwkJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNO KHJlbCk7CisKKwkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCiAJCUVORF9DUklUX1NFQ1RJ T04oKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0 LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKaW5kZXggMGNlZmJhY2M5 Li4zMzk1YmJjMTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNl cnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKQEAgLTUwLDYg KzUwLDcgQEAgX2hhc2hfZG9pbnNlcnQoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXAsIFJl bGF0aW9uIGhlYXBSZWwsIGJvb2wgc29ydGVkKQogCXVpbnQzMgkJaGFzaGtleTsKIAlCdWNrZXQJ CWJ1Y2tldDsKIAlPZmZzZXROdW1iZXIgaXR1cF9vZmY7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAK IAkvKgogCSAqIEdldCB0aGUgaGFzaCBrZXkgZm9yIHRoZSBpdGVtIChpdCdzIHN0b3JlZCBpbiB0 aGUgaW5kZXggdHVwbGUgaXRzZWxmKS4KQEAgLTIxNiw3ICsyMTcsNiBAQCByZXN0YXJ0X2luc2Vy dDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9pbnNlcnQgeGxy ZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLm9mZm51bSA9IGl0dXBfb2ZmOwog CkBAIC0yMjksMTAgKzIyOSwxMiBAQCByZXN0YXJ0X2luc2VydDoKIAkJWExvZ1JlZ2lzdGVyQnVm RGF0YSgwLCBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVwKSk7CiAKIAkJcmVjcHRyID0gWExvZ0lu c2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfSU5TRVJUKTsKLQotCQlQYWdlU2V0TFNOKEJ1ZmZl ckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFi dWYpLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7 CisKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNO KEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7 CiAKQEAgLTM3Miw2ICszNzQsNyBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVs LCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAlQYWdlCQlwYWdl ID0gQnVmZmVyR2V0UGFnZShidWYpOwogCUhhc2hQYWdlT3BhcXVlIHBhZ2VvcGFxdWU7CiAJSGFz aE1ldGFQYWdlIG1ldGFwOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogU2NhbiBlYWNoIHR1 cGxlIGluIHBhZ2UgdG8gc2VlIGlmIGl0IGlzIG1hcmtlZCBhcyBMUF9ERUFEICovCiAJbWF4b2Zm ID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKQEAgLTQyNCw3ICs0MjcsNiBAQCBfaGFz aF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0 YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJewogCQkJ eGxfaGFzaF92YWN1dW1fb25lX3BhZ2UgeGxyZWM7Ci0JCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAog CQkJeGxyZWMuaXNDYXRhbG9nUmVsID0gUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNv ZGluZyhocmVsKTsKIAkJCXhscmVjLnNuYXBzaG90Q29uZmxpY3RIb3Jpem9uID0gc25hcHNob3RD b25mbGljdEhvcml6b247CkBAIC00NDUsMTAgKzQ0NywxMiBAQCBfaGFzaF92YWN1dW1fb25lX3Bh Z2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1 ZikKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigxLCBtZXRhYnVmLCBSRUdCVUZfU1RBTkRBUkQpOwog CiAJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9WQUNVVU1fT05F X1BBR0UpOwotCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJ CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAkJfQorCQllbHNl CisJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCVBhZ2VTZXRMU04oQnVmZmVy R2V0UGFnZShidWYpLCByZWNwdHIpOworCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1 ZiksIHJlY3B0cik7CiAKIAkJRU5EX0NSSVRfU0VDVElPTigpOwogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaG92ZmwuYwppbmRleCA4Y2ZiNmNlNzUuLmFiZDFmOTFmYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNob3ZmbC5jCkBAIC0xMzIsNiArMTMyLDcgQEAgX2hhc2hfYWRkb3ZmbHBhZ2UoUmVsYXRp b24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZiwgYm9vbCByZXRhaW5fcGluKQogCXVp bnQzMgkJaSwKIAkJCQlqOwogCWJvb2wJCXBhZ2VfZm91bmQgPSBmYWxzZTsKKwlYTG9nUmVjUHRy CXJlY3B0cjsKIAogCS8qCiAJICogV3JpdGUtbG9jayB0aGUgdGFpbCBwYWdlLiAgSGVyZSwgd2Ug bmVlZCB0byBtYWludGFpbiBsb2NraW5nIG9yZGVyIHN1Y2gKQEAgLTM4MSw3ICszODIsNiBAQCBm b3VuZDoKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7 Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9oYXNoX2FkZF9vdmZsX3BhZ2UgeGxyZWM7CiAK IAkJeGxyZWMuYm1wYWdlX2ZvdW5kID0gcGFnZV9mb3VuZDsKQEAgLTQwOCwxOCArNDA4LDIwIEBA IGZvdW5kOgogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDQsICZtZXRhcC0+aGFzaG1fZmlyc3RmcmVl LCBzaXplb2YodWludDMyKSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBY TE9HX0hBU0hfQUREX09WRkxfUEFHRSk7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG92 ZmxidWYpLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRy KTsKLQotCQlpZiAoQnVmZmVySXNWYWxpZChtYXBidWYpKQotCQkJUGFnZVNldExTTihCdWZmZXJH ZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7Ci0KLQkJaWYgKEJ1ZmZlcklzVmFsaWQobmV3bWFwYnVm KSkKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXdtYXBidWYpLCByZWNwdHIpOwotCi0J CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAl9CisJZWxzZQor CQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihCdWZmZXJHZXRQ YWdlKG92ZmxidWYpLCByZWNwdHIpOworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWYpLCBy ZWNwdHIpOworCisJaWYgKEJ1ZmZlcklzVmFsaWQobWFwYnVmKSkKKwkJUGFnZVNldExTTihCdWZm ZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7CisKKwlpZiAoQnVmZmVySXNWYWxpZChuZXdtYXBi dWYpKQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobmV3bWFwYnVmKSwgcmVjcHRyKTsKKwor CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklU X1NFQ1RJT04oKTsKIApAQCAtNTEwLDcgKzUxMiwxMSBAQCBfaGFzaF9mcmVlb3ZmbHBhZ2UoUmVs YXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAlCdWNrZXQJCWJ1 Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAJQnVmZmVyCQlwcmV2YnVmID0gSW52YWxp ZEJ1ZmZlcjsKIAlCdWZmZXIJCW5leHRidWYgPSBJbnZhbGlkQnVmZmVyOwotCWJvb2wJCXVwZGF0 ZV9tZXRhcCA9IGZhbHNlOworCWJvb2wJCXVwZGF0ZV9tZXRhcCA9IGZhbHNlLAorCQkJCW1vZF93 YnVmLAorCQkJCWlzX3ByaW1fYnVja2V0X3NhbWVfd3J0LAorCQkJCWlzX3ByZXZfYnVja2V0X3Nh bWVfd3J0OworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogR2V0IGluZm9ybWF0aW9uIGZyb20g dGhlIGRvb21lZCBwYWdlICovCiAJX2hhc2hfY2hlY2twYWdlKHJlbCwgb3ZmbGJ1ZiwgTEhfT1ZF UkZMT1dfUEFHRSk7CkBAIC02NDEsMTkgKzY0NywyMSBAQCBfaGFzaF9mcmVlb3ZmbHBhZ2UoUmVs YXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJTWFya0J1ZmZl ckRpcnR5KG1ldGFidWYpOwogCX0KIAorCS8qIERldGVybWluZSB3aGljaCBwYWdlcyBXQUwgcmVj b3JkIG1vZGlmaWVzICovCisJbW9kX3didWYgPSBmYWxzZTsKKwlpc19wcmltX2J1Y2tldF9zYW1l X3dydCA9ICh3YnVmID09IGJ1Y2tldGJ1Zik7CisJaXNfcHJldl9idWNrZXRfc2FtZV93cnQgPSAo d2J1ZiA9PSBwcmV2YnVmKTsKKwogCS8qIFhMT0cgc3R1ZmYgKi8KIAlpZiAoUmVsYXRpb25OZWVk c1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9zcXVlZXplX3BhZ2UgeGxyZWM7Ci0JCVhMb2dSZWNQ dHIJcmVjcHRyOwotCQlpbnQJCQlpOwotCQlib29sCQltb2Rfd2J1ZiA9IGZhbHNlOwogCiAJCXhs cmVjLnByZXZibGtubyA9IHByZXZibGtubzsKIAkJeGxyZWMubmV4dGJsa25vID0gbmV4dGJsa25v OwogCQl4bHJlYy5udHVwcyA9IG5pdHVwczsKLQkJeGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93 cnQgPSAod2J1ZiA9PSBidWNrZXRidWYpOwotCQl4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dy dCA9ICh3YnVmID09IHByZXZidWYpOworCQl4bHJlYy5pc19wcmltX2J1Y2tldF9zYW1lX3dydCA9 IGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0OworCQl4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dy dCA9IGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0OwogCiAJCVhMb2dCZWdpbkluc2VydCgpOwogCQlY TG9nUmVnaXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mSGFzaFNxdWVlemVQYWdlKTsKQEAgLTY2Miwx NCArNjcwLDE0IEBAIF9oYXNoX2ZyZWVvdmZscGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWNr ZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCQkgKiBidWNrZXQgYnVmZmVyIHdhcyBub3QgY2hhbmdl ZCwgYnV0IHN0aWxsIG5lZWRzIHRvIGJlIHJlZ2lzdGVyZWQgdG8KIAkJICogZW5zdXJlIHRoYXQg d2UgY2FuIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gaXQgZHVyaW5nIHJlcGxheS4KIAkJICov Ci0JCWlmICgheGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQpCisJCWlmICghaXNfcHJpbV9i dWNrZXRfc2FtZV93cnQpCiAJCXsKIAkJCXVpbnQ4CQlmbGFncyA9IFJFR0JVRl9TVEFOREFSRCB8 IFJFR0JVRl9OT19JTUFHRSB8IFJFR0JVRl9OT19DSEFOR0U7CiAKIAkJCVhMb2dSZWdpc3RlckJ1 ZmZlcigwLCBidWNrZXRidWYsIGZsYWdzKTsKIAkJfQogCi0JCWlmICh4bHJlYy5udHVwcyA+IDAp CisJCWlmIChuaXR1cHMgPiAwKQogCQl7CiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMSwgd2J1Ziwg UkVHQlVGX1NUQU5EQVJEKTsKIApAQCAtNjc4LDEwICs2ODYsMTAgQEAgX2hhc2hfZnJlZW92Zmxw YWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAKIAkJ CVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwgaXR1cF9vZmZzZXRzLAogCQkJCQkJCQluaXR1cHMgKiBz aXplb2YoT2Zmc2V0TnVtYmVyKSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbml0dXBzOyBpKyspCisJ CQlmb3IgKGludCBpID0gMDsgaSA8IG5pdHVwczsgaSsrKQogCQkJCVhMb2dSZWdpc3RlckJ1ZkRh dGEoMSwgaXR1cHNbaV0sIHR1cHNfc2l6ZVtpXSk7CiAJCX0KLQkJZWxzZSBpZiAoeGxyZWMuaXNf cHJpbV9idWNrZXRfc2FtZV93cnQgfHwgeGxyZWMuaXNfcHJldl9idWNrZXRfc2FtZV93cnQpCisJ CWVsc2UgaWYgKGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0IHx8IGlzX3ByZXZfYnVja2V0X3NhbWVf d3J0KQogCQl7CiAJCQl1aW50OAkJd2J1Zl9mbGFnczsKIApAQCAtNjkxLDEwICs2OTksMTAgQEAg X2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVy IG92ZmxidWYsCiAJCQkgKiBpZiBpdCBpcyB0aGUgc2FtZSBhcyBwcmltYXJ5IGJ1Y2tldCBidWZm ZXIgb3IgdXBkYXRlIHRoZQogCQkJICogbmV4dGJsa25vIGlmIGl0IGlzIHNhbWUgYXMgdGhlIHBy ZXZpb3VzIGJ1Y2tldCBidWZmZXIuCiAJCQkgKi8KLQkJCUFzc2VydCh4bHJlYy5udHVwcyA9PSAw KTsKKwkJCUFzc2VydChuaXR1cHMgPT0gMCk7CiAKIAkJCXdidWZfZmxhZ3MgPSBSRUdCVUZfU1RB TkRBUkQ7Ci0JCQlpZiAoIXhscmVjLmlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQorCQkJaWYgKCFp c19wcmV2X2J1Y2tldF9zYW1lX3dydCkKIAkJCXsKIAkJCQl3YnVmX2ZsYWdzIHw9IFJFR0JVRl9O T19DSEFOR0U7CiAJCQl9CkBAIC03MTQsNyArNzIyLDcgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJl bGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAJCSAqIHByZXZw YWdlLiAgRHVyaW5nIHJlcGxheSwgd2UgY2FuIGRpcmVjdGx5IHVwZGF0ZSB0aGUgbmV4dGJsb2Nr IGluCiAJCSAqIHdyaXRlcGFnZS4KIAkJICovCi0JCWlmIChCdWZmZXJJc1ZhbGlkKHByZXZidWYp ICYmICF4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKKwkJaWYgKEJ1ZmZlcklzVmFsaWQo cHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQogCQkJWExvZ1JlZ2lzdGVyQnVm ZmVyKDMsIHByZXZidWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJaWYgKEJ1ZmZlcklzVmFsaWQo bmV4dGJ1ZikpCkBAIC03MzAsMjMgKzczOCwzMyBAQCBfaGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRp b24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJfQogCiAJCXJlY3B0 ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NRVUVFWkVfUEFHRSk7Ci0KLQkJ LyogU2V0IExTTiBpZmYgd2J1ZiBpcyBtb2RpZmllZC4gKi8KLQkJaWYgKG1vZF93YnVmKQotCQkJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCByZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04o QnVmZmVyR2V0UGFnZShvdmZsYnVmKSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVySXNWYWxpZChw cmV2YnVmKSAmJiAheGxyZWMuaXNfcHJldl9idWNrZXRfc2FtZV93cnQpCi0JCQlQYWdlU2V0TFNO KEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7Ci0JCWlmIChCdWZmZXJJc1ZhbGlkKG5l eHRidWYpKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG5leHRidWYpLCByZWNwdHIpOwot Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNwdHIpOwotCi0JCWlmICh1 cGRhdGVfbWV0YXApCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0 cik7CiAJfQorCWVsc2UJCQkJCQkvKiAhUmVsYXRpb25OZWVkc1dBTChyZWwpICovCisJeworCQly ZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCS8qIERldGVybWluZSBpZiB3YnVmIGlz IG1vZGlmaWVkICovCisJCWlmIChuaXR1cHMgPiAwKQorCQkJbW9kX3didWYgPSB0cnVlOworCQll bHNlIGlmIChpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKKwkJCW1vZF93YnVmID0gdHJ1ZTsKKwl9 CisKKwkvKiBTZXQgTFNOIGlmZiB3YnVmIGlzIG1vZGlmaWVkLiAqLworCWlmIChtb2Rfd2J1ZikK KwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCByZWNwdHIpOworCisJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOworCisJaWYgKEJ1ZmZlcklzVmFsaWQo cHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQorCQlQYWdlU2V0TFNOKEJ1ZmZl ckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7CisJaWYgKEJ1ZmZlcklzVmFsaWQobmV4dGJ1Zikp CisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXh0YnVmKSwgcmVjcHRyKTsKKworCVBhZ2VT ZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNwdHIpOworCisJaWYgKHVwZGF0ZV9tZXRh cCkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIpOwogCiAJRU5E X0NSSVRfU0VDVElPTigpOwogCkBAIC05NTksNiArOTc3LDggQEAgcmVhZHBhZ2U6CiAKIAkJCQlp ZiAobml0dXBzID4gMCkKIAkJCQl7CisJCQkJCVhMb2dSZWNQdHIJcmVjcHRyOworCiAJCQkJCUFz c2VydChuaXR1cHMgPT0gbmRlbGV0YWJsZSk7CiAKIAkJCQkJLyoKQEAgLTk4Niw3ICsxMDA2LDYg QEAgcmVhZHBhZ2U6CiAJCQkJCS8qIFhMT0cgc3R1ZmYgKi8KIAkJCQkJaWYgKFJlbGF0aW9uTmVl ZHNXQUwocmVsKSkKIAkJCQkJewotCQkJCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCQkJCQl4bF9o YXNoX21vdmVfcGFnZV9jb250ZW50cyB4bHJlYzsKIAogCQkJCQkJeGxyZWMubnR1cHMgPSBuaXR1 cHM7CkBAIC0xMDE4LDEwICsxMDM3LDEyIEBAIHJlYWRwYWdlOgogCQkJCQkJCQkJCQluZGVsZXRh YmxlICogc2l6ZW9mKE9mZnNldE51bWJlcikpOwogCiAJCQkJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0 KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9NT1ZFX1BBR0VfQ09OVEVOVFMpOwotCi0JCQkJCQlQYWdl U2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7Ci0JCQkJCQlQYWdlU2V0TFNOKEJ1 ZmZlckdldFBhZ2UocmJ1ZiksIHJlY3B0cik7CiAJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJcmVj cHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBh Z2Uod2J1ZiksIHJlY3B0cik7CisJCQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShyYnVmKSwg cmVjcHRyKTsKIAogCQkJCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNocGFnZS5jCmluZGV4IDhlMjIwYTNhZS4uMjYzYmM3M2YxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hwYWdlLmMKQEAgLTYzMCw2ICs2MzAsNyBAQCBfaGFzaF9leHBhbmR0YWJsZShSZWxhdGlv biByZWwsIEJ1ZmZlciBtZXRhYnVmKQogCXVpbnQzMgkJbG93bWFzazsKIAlib29sCQltZXRhcF91 cGRhdGVfbWFza3MgPSBmYWxzZTsKIAlib29sCQltZXRhcF91cGRhdGVfc3BsaXRwb2ludCA9IGZh bHNlOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiByZXN0YXJ0X2V4cGFuZDoKIApAQCAtOTAwLDcg KzkwMSw2IEBAIHJlc3RhcnRfZXhwYW5kOgogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJ ewogCQl4bF9oYXNoX3NwbGl0X2FsbG9jYXRlX3BhZ2UgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJCXhscmVjLm5ld19idWNrZXQgPSBtYXhidWNrZXQ7CiAJCXhscmVjLm9sZF9idWNr ZXRfZmxhZyA9IG9vcGFxdWUtPmhhc2hvX2ZsYWc7CkBAIC05MzMsMTEgKzkzMywxMyBAQCByZXN0 YXJ0X2V4cGFuZDoKIAkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMsIFNpemVPZkhhc2hTcGxpdEFs bG9jUGFnZSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hf U1BMSVRfQUxMT0NBVEVfUEFHRSk7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Zl9v Ymxrbm8pLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmX25ibGtubyks IHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsK IAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIpOworCVBhZ2VTZXRMU04oQnVmZmVy R2V0UGFnZShidWZfbmJsa25vKSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uo bWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTEwOTIsNiAr MTA5NCw3IEBAIF9oYXNoX3NwbGl0YnVja2V0KFJlbGF0aW9uIHJlbCwKIAlTaXplCQlhbGxfdHVw c19zaXplID0gMDsKIAlpbnQJCQlpOwogCXVpbnQxNgkJbml0dXBzID0gMDsKKwlYTG9nUmVjUHRy CXJlY3B0cjsKIAogCWJ1Y2tldF9vYnVmID0gb2J1ZjsKIAlvcGFnZSA9IEJ1ZmZlckdldFBhZ2Uo b2J1Zik7CkBAIC0xMjk2LDcgKzEyOTksNiBAQCBfaGFzaF9zcGxpdGJ1Y2tldChSZWxhdGlvbiBy ZWwsCiAKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKLQkJWExvZ1JlY1B0cglyZWNw dHI7CiAJCXhsX2hhc2hfc3BsaXRfY29tcGxldGUgeGxyZWM7CiAKIAkJeGxyZWMub2xkX2J1Y2tl dF9mbGFnID0gb29wYXF1ZS0+aGFzaG9fZmxhZzsKQEAgLTEzMTAsMTAgKzEzMTIsMTIgQEAgX2hh c2hfc3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLAogCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMSwgYnVj a2V0X25idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9I QVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQ09NUExFVEUpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVy R2V0UGFnZShidWNrZXRfb2J1ZiksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFn ZShidWNrZXRfbmJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZh a2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWNrZXRfb2J1ZiksIHJl Y3B0cik7CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Y2tldF9uYnVmKSwgcmVjcHRyKTsK IAogCUVORF9DUklUX1NFQ1RJT04oKTsKIAotLSAKMi41My4wCgo= --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0009-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Disposition: attachment; filename="v14-0009-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj418 RnJvbSBhZGVmYmEzNzg0MWQ0ZDc4OGMzNGI1MzQ2NGFmYzJjN2VkODNlYWQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjoyNTo0MSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDA5 LzE2XSBXSVA6IHJlYWRfc3RyZWFtOiBJc3N1ZSBJTyBzeW5jaHJvbm91c2x5IHdoaWxlIGluCiBm YXN0IHBhdGgKCldoaWxlIGluIGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdo dCBlbmNvdW50ZXIKc3luY2hyb25vdXNseS4gQmVjYXVzZSB3ZSBhcmUsIHJpZ2h0IG5vdywgbm90 IHJlYWRpbmcgYWhlYWQsIGRpc3BhdGNoaW5nIGFueQpvY2Nhc2lvbmFsIElPIHRvIHdvcmtlcnMg d291bGQgaGF2ZSB0aGUgb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2VycywKd2l0aG91 dCBhbnkgcmVhbGlzdGljIGNoYW5jZSBvZiB0aGUgSU8gY29tcGxldGluZyBiZWZvcmUgd2UgbmVl ZCBpdC4KCkF1dGhvcjoKUmV2aWV3ZWQtYnk6CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vCkJhY2twYXRjaDoKLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5j IHwgMTUgKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IGNkNTRjMWE3NC4uMzY2N2Q2 N2FiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTgzMyw2ICs4MzMs MTkgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoq cGVyX2J1ZmZlcl9kYXRhKQogCQkJaWYgKHN0cmVhbS0+YWR2aWNlX2VuYWJsZWQpCiAJCQkJZmxh Z3MgfD0gUkVBRF9CVUZGRVJTX0lTU1VFX0FEVklDRTsKIAorCQkJLyoKKwkJCSAqIFdoaWxlIGlu IGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdodCBlbmNvdW50ZXIKKwkJCSAq IHN5bmNocm9ub3VzbHkuIEJlY2F1c2Ugd2UgYXJlLCByaWdodCBub3csIG5vdCByZWFkaW5nIGFo ZWFkLAorCQkJICogZGlzcGF0Y2hpbmcgYW55IG9jY2FzaW9uYWwgSU8gdG8gd29ya2VycyB3b3Vs ZCBoYXZlIHRoZQorCQkJICogb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2Vycywgd2l0 aG91dCBhbnkgcmVhbGlzdGljCisJCQkgKiBjaGFuY2Ugb2YgdGhlIElPIGNvbXBsZXRpbmcgYmVm b3JlIHdlIG5lZWQgaXQuIFdlIHdpbGwgc3dpdGNoCisJCQkgKiB0byBub24tc3luY2hyb25vdXMg SU8gYWZ0ZXIgdGhpcy4KKwkJCSAqCisJCQkgKiBYWFg6IFNob3VsZCB3ZSBkbyBzbyBvbmx5IGZv ciB3b3JrZXIsIG9yIGFsc28gaW9fdXJpbmc/IFRoZXJlJ3MKKwkJCSAqIG5vdCBtdWNoIGRpc3Bh dGNoIG92ZXJoZWFkIHdpdGggaW9fdXJpbmcsIGNvbXBhcmVkIHRvIHdvcmtlci4uLgorCQkJICov CisJCQlmbGFncyB8PSBSRUFEX0JVRkZFUlNfU1lOQ0hST05PVVNMWTsKKwogCQkJLyoKIAkJCSAq IFBpbiBhIGJ1ZmZlciBmb3IgdGhlIG5leHQgY2FsbC4gIFNhbWUgYnVmZmVyIGVudHJ5LCBhbmQK IAkJCSAqIGFyYml0cmFyeSBJL08gZW50cnkgKHRoZXkncmUgYWxsIGZyZWUpLiAgV2UgZG9uJ3Qg aGF2ZSB0bwpAQCAtODYwLDYgKzg3Myw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJCXN0cmVhbS0+aW9zX2lu X3Byb2dyZXNzID0gMTsKIAkJCXN0cmVhbS0+aW9zWzBdLmJ1ZmZlcl9pbmRleCA9IG9sZGVzdF9i dWZmZXJfaW5kZXg7CiAJCQlzdHJlYW0tPnNlcV9ibG9ja251bSA9IG5leHRfYmxvY2tudW0gKyAx OworCisJCQkvKiBGSVhNRTogaXQgd291bGQgcHJvYmFibHkgd29ydGggaXNzdWluZyByZWFkYWhl YWQgaGVyZSAqLwogCQl9CiAJCWVsc2UKIAkJewotLSAKMi41My4wCgo= --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0011-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Disposition: attachment; filename="v14-0011-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj3x6 RnJvbSAwNzkzOWRmYjc5MTllYWM2OTE4NWQ2MmVmYzRjODk5ZWRlMDcyNjljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo1MDo1MCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDEx LzE2XSBidWZtZ3I6IFJldHVybiB3aGV0aGVyIFdhaXRSZWFkQnVmZmVycygpIG5lZWRlZCB0bwog d2FpdAoKSW4gYSBzdWJzZXF1ZW50IGNvbW1pdCByZWFkX3N0cmVhbS5jIHdpbGwgdXNlIHRoaXMg YXMgYW4gaW5wdXQgdG8gdGhlIHJlYWQKYWhlYWQgZGlzdGFuY2UuCgpBdXRob3I6ClJldmlld2Vk LWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgfCAxOCArKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hh bmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApp bmRleCA4ZTFiYWY2OTEuLjMzYmQ0ODAyYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0yNTAsNyAr MjUwLDcgQEAgZXh0ZXJuIGJvb2wgU3RhcnRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlv biAqb3BlcmF0aW9uLAogCQkJCQkJCSBCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkJCQkgaW50 ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgV2FpdFJlYWRCdWZm ZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIGJvb2wgV2FpdFJl YWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRlcm4gdm9p ZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2NrUmVsZWFz ZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5k ZXggM2M0OGFlMWY4Li4wODA2NTA1ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CkBAIC0xNzMxLDEyICsxNzMxLDIwIEBAIFByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCUFzc2VydChvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOwogfQogCi12b2lkCisvKgorICogV2FpdCBmb3IgdGhl IElPIG9wZXJhdGlvbiBpbml0aWF0ZWQgYnkgU3RhcnRSZWFkQnVmZmVycygpIGV0IGFsIHRvCisg KiBjb21wbGV0ZS4KKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIElPIG9wZXJhdGlvbiBhbHJl YWR5IGhhZCBjb21wbGV0ZWQgYnkgdGhlIHRpbWUgb2YgdGhpcworICogY2FsbC4KKyAqLworYm9v bAogV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiB7CiAJ UGdBaW9SZXR1cm4gKmFpb19yZXQgPSAmb3BlcmF0aW9uLT5pb19yZXR1cm47CiAJSU9Db250ZXh0 CWlvX2NvbnRleHQ7CiAJSU9PYmplY3QJaW9fb2JqZWN0OworCWJvb2wJCW5lZWRlZF93YWl0ID0g ZmFsc2U7CiAKIAlpZiAob3BlcmF0aW9uLT5wZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9U RU1QKQogCXsKQEAgLTE3OTgsNiArMTgwNiw3IEBAIFdhaXRSZWFkQnVmZmVycyhSZWFkQnVmZmVy c09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCQkJCWluc3RyX3RpbWUJaW9fc3RhcnQgPSBwZ3N0YXRf cHJlcGFyZV9pb190aW1lKHRyYWNrX2lvX3RpbWluZyk7CiAKIAkJCQlwZ2Fpb193cmVmX3dhaXQo Jm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCQkJbmVlZGVkX3dhaXQgPSB0cnVlOwogCiAJCQkJLyoK IAkJCQkgKiBUaGUgSU8gb3BlcmF0aW9uIGl0c2VsZiB3YXMgYWxyZWFkeSBjb3VudGVkIGVhcmxp ZXIsIGluCkBAIC0xODUwLDYgKzE4NTksMTIgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJz T3BlcmF0aW9uICpvcGVyYXRpb24pCiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAorCQkv KgorCQkgKiBJZiB0aGUgSU8gY29tcGxldGVkIG9ubHkgcGFydGlhbGx5LCB3ZSBuZWVkIHRvIHBl cmZvcm0gYWRkaXRpb25hbAorCQkgKiB3b3JrLCBjb25zaWRlciB0aGF0IGEgZm9ybSBvZiBoYXZp bmcgaGFkIHRvIHdhaXQuCisJCSAqLworCQluZWVkZWRfd2FpdCA9IHRydWU7CisKIAkJLyoKIAkJ ICogVGhpcyBtYXkgb25seSBjb21wbGV0ZSB0aGUgSU8gcGFydGlhbGx5LCBlaXRoZXIgYmVjYXVz ZSBzb21lCiAJCSAqIGJ1ZmZlcnMgd2VyZSBhbHJlYWR5IHZhbGlkLCBvciBiZWNhdXNlIG9mIGEg cGFydGlhbCByZWFkLgpAQCAtMTg2Niw2ICsxODgxLDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRC dWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJQ2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihv cGVyYXRpb24sIHRydWUpOwogCiAJLyogTkI6IFJFQURfRE9ORSB0cmFjZXBvaW50IHdhcyBhbHJl YWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwlyZXR1cm4gbmVlZGVkX3dh aXQ7CiB9CiAKIC8qCi0tIAoyLjUzLjAKCg== --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0010-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Disposition: attachment; filename="v14-0010-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj3z7 RnJvbSA4N2I0Yzg4MzM2YzY3MDA1NmVmNDc0NmY1YTU0YTJkYzI0ZWQxZmU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo0MDozNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDEw LzE2XSBXSVA6IGFpbzogaW9fdXJpbmc6IEFsbG93IElPIG1ldGhvZHMgdG8gY2hlY2sgaWYgSU8K IGNvbXBsZXRlZCBpbiB0aGUgYmFja2dyb3VuZAoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvYWlvX2ludGVybmFsLmggICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIHwgNDcgKysrKysrKysrKysrKysrKysrKysrKysK IDMgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRl cm5hbC5oCmluZGV4IDVmZWVhMTViZS4uMzNlMWUyZGMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2lu dGVybmFsLmgKQEAgLTMyOCw2ICszMjgsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW9NZXRob2RPcHMK IAkgKi8KIAl2b2lkCQkoKndhaXRfb25lKSAoUGdBaW9IYW5kbGUgKmlvaCwKIAkJCQkJCQkgdWlu dDY0IHJlZl9nZW5lcmF0aW9uKTsKKworCS8qIC0tLQorCSAqIENoZWNrIGlmIElPIGhhcyBhbHJl YWR5IGNvbXBsZXRlZC4gT3B0aW9uYWwuCisJICoKKwkgKiBTb21lIElPIG1ldGhvZHMgbmVlZCB0 byBwb2xsIGEga2VybmVsIG9iamVjdCB0byBzZWUgaWYgSU8gaGFzIGFscmVhZHkKKwkgKiBjb21w bGV0ZWQgaW4gdGhlIGJhY2tncm91bmQuIFRoaXMgY2FsbGJhY2sgYWxsb3dzIHRvIGRvIHNvLgor CSAqCisJICogVGhpcyBjYWxsYmFjayBtYXkgbm90IHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLCBo b3dldmVyIGl0IGlzIGFsbG93ZWQsCisJICogYWx0aG91Z2ggbm90IGRlc2lyYWJsZSwgdG8gd2Fp dCBmb3Igc2hvcnQtbGl2ZWQgbG9ja3MuIEl0IGlzIG9rIGZyb20gYQorCSAqIGNvcnJlY3RuZXNz IHBlcnNwZWN0aXZlIHRvIG5vdCBwcm9jZXNzIGFueS9hbGwgYXZhaWxhYmxlIGNvbXBsZXRpb25z LAorCSAqIGl0IGp1c3QgY2FuIGxlYWQgdG8gaW5mZXJpb3IgcGVyZm9ybWFuY2UuCisJICogLS0t CisJICovCisJdm9pZAkJKCpjaGVja19vbmUpIChQZ0Fpb0hhbmRsZSAqaW9oLAorCQkJCQkJCSAg dWludDY0IHJlZl9nZW5lcmF0aW9uKTsKIH0gSW9NZXRob2RPcHM7CiAKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9h aW8uYwppbmRleCBlNGFlMzAzMWYuLjRlNzQyMDM4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vYWlvLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKQEAg LTEwMTksNiArMTAxOSwyMSBAQCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICpp b3cpCiAKIAlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKIAor CS8qCisJICogSWYgdGhlIElPIGlzIG5vdCBleGVjdXRpbmcgc3luY2hyb25vdXNseSwgYWxsb3cg dGhlIElPIG1ldGhvZCB0byBjaGVjaworCSAqIGlmIHRoZSBJTyBhbHJlYWR5IGhhcyBjb21wbGV0 ZWQuCisJICovCisJaWYgKHBnYWlvX21ldGhvZF9vcHMtPmNoZWNrX29uZSAmJiAhKGlvaC0+Zmxh Z3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUykpCisJeworCQlwZ2Fpb19tZXRob2Rfb3BzLT5jaGVj a19vbmUoaW9oLCByZWZfZ2VuZXJhdGlvbik7CisKKwkJaWYgKHBnYWlvX2lvX3dhc19yZWN5Y2xl ZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJaWYg KHN0YXRlID09IFBHQUlPX0hTX0lETEUpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAlpZiAoc3Rh dGUgPT0gUEdBSU9fSFNfQ09NUExFVEVEX1NIQVJFRCB8fAogCQlzdGF0ZSA9PSBQR0FJT19IU19D T01QTEVURURfTE9DQUwpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v bWV0aG9kX2lvX3VyaW5nLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJp bmcuYwppbmRleCBlZDZlNzFiY2QuLjRlMTI0NGZhMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMKQEAgLTU0LDYgKzU0LDcgQEAgc3RhdGljIHZvaWQgcGdhaW9f dXJpbmdfc2htZW1faW5pdChib29sIGZpcnN0X3RpbWUpOwogc3RhdGljIHZvaWQgcGdhaW9fdXJp bmdfaW5pdF9iYWNrZW5kKHZvaWQpOwogc3RhdGljIGludAlwZ2Fpb191cmluZ19zdWJtaXQodWlu dDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpOwogc3RhdGljIHZv aWQgcGdhaW9fdXJpbmdfd2FpdF9vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5l cmF0aW9uKTsKK3N0YXRpYyB2b2lkIHBnYWlvX3VyaW5nX2NoZWNrX29uZShQZ0Fpb0hhbmRsZSAq aW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24pOwogCiAvKiBoZWxwZXIgZnVuY3Rpb25zICovCiBz dGF0aWMgdm9pZCBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVj dCBpb191cmluZ19zcWUgKnNxZSk7CkBAIC03NSw2ICs3Niw3IEBAIGNvbnN0IElvTWV0aG9kT3Bz IHBnYWlvX3VyaW5nX29wcyA9IHsKIAogCS5zdWJtaXQgPSBwZ2Fpb191cmluZ19zdWJtaXQsCiAJ LndhaXRfb25lID0gcGdhaW9fdXJpbmdfd2FpdF9vbmUsCisJLmNoZWNrX29uZSA9IHBnYWlvX3Vy aW5nX2NoZWNrX29uZSwKIH07CiAKIC8qCkBAIC02NTYsNiArNjU4LDUxIEBAIHBnYWlvX3VyaW5n X3dhaXRfb25lKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQl3 YWl0ZWQpOwogfQogCitzdGF0aWMgdm9pZAorcGdhaW9fdXJpbmdfY2hlY2tfb25lKFBnQWlvSGFu ZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKK3sKKwlQcm9jTnVtYmVyCW93bmVyX3By b2NubyA9IGlvaC0+b3duZXJfcHJvY25vOworCVBnQWlvVXJpbmdDb250ZXh0ICpvd25lcl9jb250 ZXh0ID0gJnBnYWlvX3VyaW5nX2NvbnRleHRzW293bmVyX3Byb2Nub107CisJaW50CQkJd2FpdGVk ID0gMDsKKworCS8qCisJICogVGhpcyBjaGVjayBpcyBub3QgcmVsaWFibGUgd2hlbiBub3QgaG9s ZGluZyB0aGUgY29tcGxldGlvbiBsb2NrLCBidXQKKwkgKiBpdCdzIGEgdXNlZnVsIGNoZWFwIHBy ZS1jaGVjayB0byBzZWUgaWYgaXQncyB3b3J0aCB0cnlpbmcgdG8gZ2V0IHRoZQorCSAqIGNvbXBs ZXRpb24gbG9jay4KKwkgKi8KKwlpZiAoIWlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0 LT5pb191cmluZ19yaW5nKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgY29tcGxldGlv biBsb2NrIGlzIGN1cnJlbnRseSBoZWxkLCB0aGUgaG9sZGVyIHdpbGwgbGlrZWx5CisJICogcHJv Y2VzcyBhbnkgcGVuZGluZyBjb21wbGV0aW9ucywgZ2l2ZSB1cC4KKwkgKi8KKwlpZiAoIUxXTG9j a0NvbmRpdGlvbmFsQWNxdWlyZSgmb3duZXJfY29udGV4dC0+Y29tcGxldGlvbl9sb2NrLCBMV19F WENMVVNJVkUpKQorCQlyZXR1cm47CisKKwlwZ2Fpb19kZWJ1Z19pbyhERUJVRzMsIGlvaCwKKwkJ CQkgICAiY2hlY2tfb25lIGlvX2dlbjogJSIgUFJJdTY0ICIsIHJlZl9nZW46ICUiIFBSSXU2NCAi LCBjeWNsZSAlZCIsCisJCQkJICAgaW9oLT5nZW5lcmF0aW9uLAorCQkJCSAgIHJlZl9nZW5lcmF0 aW9uLAorCQkJCSAgIHdhaXRlZCk7CisKKwkvKgorCSAqIFJlY2hlY2sgaWYgdGhlcmUgYXJlIGFu eSBjb21wbGV0aW9ucywgYW5vdGhlciBiYWNrZW5kIGNvdWxkIGhhdmUKKwkgKiBwcm9jZXNzZWQg dGhlbSBzaW5jZSB3ZSBjaGVja2VkIGFib3ZlLCBvciBvdXIgdW5sb2NrZWQgcHJlLWNoZWNrIGNv dWxkCisJICogaGF2ZSBiZWVuIHJlYWRpbmcgb3V0ZGF0ZWQgdmFsdWVzLgorCSAqCisJICogSXQg aXMgcG9zc2libGUgdGhhdCB0aGUgSU8gaGFuZGxlIGhhcyBiZWVuIHJldXNlZCBzaW5jZSB0aGUg c3RhcnQgb2YKKwkgKiB0aGUgY2FsbCwgYnV0IG5vdyB0aGF0IHdlIGhhdmUgdGhlIGxvY2ssIHdl IGNhbiBqdXN0IGFzIHdlbGwgZHJhaW4gYWxsCisJICogY29tcGxldGlvbnMuCisJICovCisJaWYg KGlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0LT5pb191cmluZ19yaW5nKSkKKwl7CisJ CXBnYWlvX3VyaW5nX2RyYWluX2xvY2tlZChvd25lcl9jb250ZXh0KTsKKwl9CisKKwlMV0xvY2tS ZWxlYXNlKCZvd25lcl9jb250ZXh0LT5jb21wbGV0aW9uX2xvY2spOworfQorCiBzdGF0aWMgdm9p ZAogcGdhaW9fdXJpbmdfc3FfZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJp bmdfc3FlICpzcWUpCiB7Ci0tIAoyLjUzLjAKCg== --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0012-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Disposition: attachment; filename="v14-0012-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj3v5 RnJvbSBjYTJlZjNmODE2YjVkYzAzZTgwOTAxOTQ0MjFhNWYyMGMwYjg5ZDQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxODowMDo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDEy LzE2XSBXSVA6IHJlYWRfc3RyZWFtOiBPbmx5IGluY3JlYXNlIGRpc3RhbmNlIHdoZW4KIHdhaXRp bmcgZm9yIElPCgpUaGlzIGF2b2lkcyBpbmNyZWFzaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUgbWF4 aW11bSBpbiBjYXNlcyB3aGVyZSB0aGUgSU8Kc3Vic3lzdGVtIGlzIGFscmVhZHkga2VlcGluZyB1 cC4KClRPRE86IFRoaXMgbWlnaHQgYmUgdG9vIGFnZ3Jlc3NpdmUgd2l0aG91dCBhIHN1YnNlcXVl bnQgcGF0Y2ggdGhhdCByZWR1Y2VzIGhvdwpvZnRlbiB3ZSBkZWNyZWFzZSB0aGUgZGlzdGFuY2Uu CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpC YWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyB8IDI0 ICsrKysrKysrKysrKysrKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMo KyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v cmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5k ZXggMzY2N2Q2N2FiLi5lMjhhYjVkZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYwpAQCAtOTMxLDIyICs5MzEsMzYgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0 cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCXsKIAkJaW50MTYJCWlvX2lu ZGV4ID0gc3RyZWFtLT5vbGRlc3RfaW9faW5kZXg7CiAJCWludDMyCQlkaXN0YW5jZTsJLyogd2lk ZXIgdGVtcG9yYXJ5IHZhbHVlLCBjbGFtcGVkIGJlbG93ICovCisJCWJvb2wJCW5lZWRlZF93YWl0 OwogCiAJCS8qIFNhbml0eSBjaGVjayB0aGF0IHdlIHN0aWxsIGFncmVlIG9uIHRoZSBidWZmZXJz LiAqLwogCQlBc3NlcnQoc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wLmJ1ZmZlcnMgPT0KIAkJCSAg ICZzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0pOwogCi0JCVdhaXRSZWFkQnVm ZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJbmVlZGVkX3dhaXQgPSBXYWl0UmVh ZEJ1ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CiAKIAkJQXNzZXJ0KHN0cmVhbS0+ aW9zX2luX3Byb2dyZXNzID4gMCk7CiAJCXN0cmVhbS0+aW9zX2luX3Byb2dyZXNzLS07CiAJCWlm ICgrK3N0cmVhbS0+b2xkZXN0X2lvX2luZGV4ID09IHN0cmVhbS0+bWF4X2lvcykKIAkJCXN0cmVh bS0+b2xkZXN0X2lvX2luZGV4ID0gMDsKIAotCQkvKiBMb29rLWFoZWFkIGRpc3RhbmNlIHJhbXBz IHVwIHJhcGlkbHkgYWZ0ZXIgd2UgZG8gSS9PLiAqLwotCQlkaXN0YW5jZSA9IHN0cmVhbS0+ZGlz dGFuY2UgKiAyOwotCQlkaXN0YW5jZSA9IE1pbihkaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVk X2J1ZmZlcnMpOwotCQlzdHJlYW0tPmRpc3RhbmNlID0gZGlzdGFuY2U7CisJCS8qCisJCSAqIExv b2stYWhlYWQgZGlzdGFuY2UgcmFtcHMgdXAgcmFwaWRseSBhZnRlciB3ZSBuZWVkZWQgdG8gd2Fp dCBmb3IKKwkJICogSU8uIFdlIG9ubHkgaW5jcmVhc2UgdGhlIGRpc3RhbmNlIHdoZW4gd2UgbmVl ZGVkIHRvIHdhaXQsIHRvIGF2b2lkCisJCSAqIGluY3JlYXNpbmcgdGhlIGRpc3RhbmNlIGZ1cnRo ZXIgdGhhbiBuZWNlc3NhcnksIGFzIHVubmVjZXNzYXJpbHkKKwkJICogcGlubmluZyBtYW55IGJ1 ZmZlcnMgY2FuIGJlIGNvc3RseS4KKwkJICoKKwkJICogTkI6IE1heSBub3QgaW5jcmVhc2UgdGhl IGRpc3RhbmNlIGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUKKwkJICogc3RyZWFtLgorCQkg Ki8KKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPiAwICYmIG5lZWRlZF93YWl0KQorCQl7CisJCQlk aXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFuY2UgKiAyOworCQkJaWYgKGRpc3RhbmNlICYmIGRpc3Rh bmNlIDwgUEdfSU5UMTZfTUFYKQorCQkJCWRpc3RhbmNlKys7CisJCQlkaXN0YW5jZSA9IE1pbihk aXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOworCQkJc3RyZWFtLT5kaXN0YW5j ZSA9IGRpc3RhbmNlOworCQl9CiAKIAkJLyoKIAkJICogSWYgd2UndmUgcmVhY2hlZCB0aGUgZmly c3QgYmxvY2sgb2YgYSBzZXF1ZW50aWFsIHJlZ2lvbiB3ZSdyZQotLSAKMi41My4wCgo= --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0008-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v14-0008-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj459 RnJvbSA1MWVkZTBkNmUzOGZlOGViMzJhYzI5MDlmY2U4MzY3NzIwNWQ4MzM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTQgMDgvMTZdIERvbid0IHdhaXQgZm9yIGFscmVhZHkgaW4tcHJvZ3Jlc3MgSU8KTUlN RS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNv bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCldoZW4gYSBiYWNrZW5kIGF0dGVtcHRzIHRv IHN0YXJ0IGEgcmVhZCBvbiBhIGJ1ZmZlciBhbmQgZmluZHMgdGhhdCBJL08KaXMgYWxyZWFkeSBp biBwcm9ncmVzcywgaXQgcHJldmlvdXNseSB3YWl0ZWQgZm9yIHRoYXQgSS9PIHRvIGNvbXBsZXRl CmJlZm9yZSBpbml0aWF0aW5nIHJlYWRzIGZvciBhbnkgb3RoZXIgYnVmZmVycy4gQWx0aG91Z2gg dGhlIGJhY2tlbmQgbXVzdApzdGlsbCB3YWl0IGZvciB0aGUgSS9PIHRvIGZpbmlzaCB3aGVuIGxh dGVyIGFjcXVpcmluZyB0aGUgYnVmZmVyLCBpdApzaG91bGQgbm90IG5lZWQgdG8gd2FpdCBhdCBy ZWFkIHN0YXJ0IHRpbWUuIE90aGVyIGJ1ZmZlcnMgbWF5IGJlCmF2YWlsYWJsZSBmb3IgSS9PLCBh bmQgaW4gc29tZSB3b3JrbG9hZHMgdGhpcyB3YWl0aW5nIHNpZ25pZmljYW50bHkKcmVkdWNlcyBj b25jdXJyZW5jeS4KCkZvciBleGFtcGxlLCBpbmRleCBzY2FucyBtYXkgcmVwZWF0ZWRseSByZXF1 ZXN0IHRoZSBzYW1lIGhlYXAgYmxvY2suIElmCnRoZSBiYWNrZW5kIHdhaXRzIGVhY2ggdGltZSBp dCBlbmNvdW50ZXJzIGFuIGluLXByb2dyZXNzIHJlYWQsIHRoZQphY2Nlc3MgcGF0dGVybiBlZmZl Y3RpdmVseSBkZWdlbmVyYXRlcyBpbnRvIHN5bmNocm9ub3VzIEkvTy4gQnkKaW50cm9kdWNpbmcg dGhlIGNvbmNlcHQgb2YgZm9yZWlnbiBJL08gb3BlcmF0aW9ucywgYSBiYWNrZW5kIGNhbiByZWNv cmQKdGhlIGJ1ZmZlcuKAmXMgd2FpdCByZWZlcmVuY2UgYW5kIGRlZmVyIHdhaXRpbmcgdW50aWwg V2FpdFJlYWRCdWZmZXJzKCkKd2hlbiBpdCBhY3R1YWxseSBhY3F1aXJlcyB0aGUgYnVmZmVyLgoK SW4gcmFyZSBjYXNlcywgYSBiYWNrZW5kIG1heSBzdGlsbCBuZWVkIHRvIHdhaXQgd2hlbiBzdGFy dGluZyBhIHJlYWQgaWYKaXQgZW5jb3VudGVycyBhIGJ1ZmZlciBhZnRlciBhbm90aGVyIGJhY2tl bmQgaGFzIHNldCBCTV9JT19JTl9QUk9HUkVTUwpidXQgYmVmb3JlIHRoZSBidWZmZXIgZGVzY3Jp cHRvcuKAmXMgd2FpdCByZWZlcmVuY2UgaGFzIGJlZW4gc2V0LiBTdWNoCndpbmRvd3Mgc2hvdWxk IGJlIGJyaWVmIGFuZCB1bmNvbW1vbi4KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyB8IDQ5 MSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDMyNSBpbnNlcnRpb25zKCspLCAx NjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNDAxNzg5NmY5Li44ZTFiYWY2 OTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0cnVjdCBSZWFkQnVm ZmVyc09wZXJhdGlvbgogCWludAkJCWZsYWdzOwogCWludDE2CQluYmxvY2tzOwogCWludDE2CQlu YmxvY2tzX2RvbmU7CisJYm9vbAkJZm9yZWlnbl9pbzsKIAlQZ0Fpb1dhaXRSZWYgaW9fd3JlZjsK IAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YwppbmRleCA3MGE1ZGJhNzMuLjNjNDhhZTFmOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMKQEAgLTE4NSw2ICsxODUsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclNvcnRBcnJheQog CVNNZ3JSZWxhdGlvbiBzcmVsOwogfSBTTWdyU29ydEFycmF5OwogCisKKy8qCisgKiBJbiBBc3lu Y1JlYWRCdWZmZXJzKCksIHdoZW4gcHJlcGFyaW5nIGEgYnVmZmVyIGZvciByZWFkaW5nIGFuZCBz ZXR0aW5nCisgKiBCTV9JT19JTl9QUk9HUkVTUywgdGhlIGJ1ZmZlciBtYXkgYWxyZWFkeSBoYXZl IEkvTyBpbiBwcm9ncmVzcyBvciBtYXkKKyAqIGFscmVhZHkgY29udGFpbiB0aGUgZGVzaXJlZCBi bG9jay4gQXN5bmNSZWFkQnVmZmVycygpIG11c3QgZGlzdGluZ3Vpc2gKKyAqIGJldHdlZW4gdGhl c2UgY2FzZXMgKGFuZCB0aGUgY2FzZSB3aGVyZSBpdCBzaG91bGQgaW5pdGlhdGUgSS9PKSBzbyBp dCBjYW4KKyAqIG1hcmsgYW4gaW4tcHJvZ3Jlc3MgYnVmZmVyIGFzIGZvcmVpZ24gSS9PIHJhdGhl ciB0aGFuIHdhaXRpbmcgb24gaXQuCisgKi8KK3R5cGVkZWYgZW51bSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXMKK3sKKwlSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkUsCisJUkVBRF9CVUZGRVJfSU5f UFJPR1JFU1MsCisJUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPLAorfSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXM7CisKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGJvb2wJCXplcm9fZGFtYWdlZF9wYWdl cyA9IGZhbHNlOwogaW50CQkJYmd3cml0ZXJfbHJ1X21heHBhZ2VzID0gMTAwOwpAQCAtMTYyOCw0 NSArMTY0Myw2IEBAIENoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24oUmVhZEJ1ZmZlcnNPcGVyYXRp b24gKm9wZXJhdGlvbiwgYm9vbCBpc19jb21wbGV0ZSkKICNlbmRpZgogfQogCi0vKiBoZWxwZXIg Zm9yIFJlYWRCdWZmZXJzQ2FuU3RhcnRJTygpLCB0byBhdm9pZCByZXBldGl0aW9uICovCi1zdGF0 aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2FuU3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwg Ym9vbCBub3dhaXQpCi17Ci0JaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKLQkJcmV0dXJuIFN0 YXJ0TG9jYWxCdWZmZXJJTyhHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpLAot CQkJCQkJCQkgIHRydWUsIG5vd2FpdCk7Ci0JZWxzZQotCQlyZXR1cm4gU3RhcnRCdWZmZXJJTyhH ZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpLCB0cnVlLCBub3dhaXQpOwotfQotCi0vKgot ICogSGVscGVyIGZvciBBc3luY1JlYWRCdWZmZXJzIHRoYXQgdHJpZXMgdG8gZ2V0IHRoZSBidWZm ZXIgcmVhZHkgZm9yIElPLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2Fu U3RhcnRJTyhCdWZmZXIgYnVmZmVyLCBib29sIG5vd2FpdCkKLXsKLQkvKgotCSAqIElmIHRoaXMg YmFja2VuZCBjdXJyZW50bHkgaGFzIHN0YWdlZCBJTywgd2UgbmVlZCB0byBzdWJtaXQgdGhlIHBl bmRpbmcKLQkgKiBJTyBiZWZvcmUgd2FpdGluZyBmb3IgdGhlIHJpZ2h0IHRvIGlzc3VlIElPLCB0 byBhdm9pZCB0aGUgcG90ZW50aWFsIGZvcgotCSAqIGRlYWRsb2NrcyAoYW5kLCBtb3JlIGNvbW1v bmx5LCB1bm5lY2Vzc2FyeSBkZWxheXMgZm9yIG90aGVyIGJhY2tlbmRzKS4KLQkgKi8KLQlpZiAo IW5vd2FpdCAmJiBwZ2Fpb19oYXZlX3N0YWdlZCgpKQotCXsKLQkJaWYgKFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoYnVmZmVyLCB0cnVlKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCS8qCi0JCSAq IFVuZm9ydHVuYXRlbHkgU3RhcnRCdWZmZXJJTygpIHJldHVybmluZyBmYWxzZSBkb2Vzbid0IGFs bG93IHRvCi0JCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGJ1ZmZlciBhbHJlYWR5IGJlaW5n IHZhbGlkIGFuZCBJTyBhbHJlYWR5Ci0JCSAqIGJlaW5nIGluIHByb2dyZXNzLiBTaW5jZSBJTyBh bHJlYWR5IGJlaW5nIGluIHByb2dyZXNzIGlzIHF1aXRlCi0JCSAqIHJhcmUsIHRoaXMgYXBwcm9h Y2ggc2VlbXMgZmluZS4KLQkJICovCi0JCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKLQl9Ci0KLQly ZXR1cm4gUmVhZEJ1ZmZlcnNDYW5TdGFydElPT25jZShidWZmZXIsIG5vd2FpdCk7Ci19Ci0KIC8q CiAgKiBXZSB0cmFjayB2YXJpb3VzIHN0YXRzIHJlbGF0ZWQgdG8gYnVmZmVyIGhpdHMuIEJlY2F1 c2UgdGhpcyBpcyBkb25lIGluIGEKICAqIGZldyBzZXBhcmF0ZSBwbGFjZXMsIHRoaXMgaGVscGVy IGV4aXN0cyBmb3IgY29udmVuaWVuY2UuCkBAIC0xODE2LDcgKzE3OTIsNyBAQCBXYWl0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCSAqCiAJCQkgKiB3ZSBm aXJzdCBjaGVjayBpZiB3ZSBhbHJlYWR5IGtub3cgdGhlIElPIGlzIGNvbXBsZXRlLgogCQkJICov Ci0JCQlpZiAoYWlvX3JldC0+cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOICYmCisJ CQlpZiAoKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyB8fCBhaW9fcmV0LT5yZXN1bHQuc3RhdHVzID09 IFBHQUlPX1JTX1VOS05PV04pICYmCiAJCQkJIXBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0 aW9uLT5pb193cmVmKSkKIAkJCXsKIAkJCQlpbnN0cl90aW1lCWlvX3N0YXJ0ID0gcGdzdGF0X3By ZXBhcmVfaW9fdGltZSh0cmFja19pb190aW1pbmcpOwpAQCAtMTgzNSwxMSArMTgxMSwzMyBAQCBX YWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCQlBc3Nl cnQocGdhaW9fd3JlZl9jaGVja19kb25lKCZvcGVyYXRpb24tPmlvX3dyZWYpKTsKIAkJCX0KIAot CQkJLyoKLQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBDaGVjayB0aGUg cmVzdWx0cy4gVGhpcwotCQkJICogaW5jbHVkZXMgcmVwb3J0aW5nIG9uIGVycm9ycyBpZiB0aGVy ZSB3ZXJlIGFueS4KLQkJCSAqLwotCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KG9wZXJhdGlv bik7CisJCQlpZiAodW5saWtlbHkob3BlcmF0aW9uLT5mb3JlaWduX2lvKSkKKwkJCXsKKwkJCQlC dWZmZXIJCWJ1ZmZlciA9IG9wZXJhdGlvbi0+YnVmZmVyc1tvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZV07CisJCQkJQnVmZmVyRGVzYyAqZGVzYyA9IEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSA/CisJCQkJ CUdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSkgOgorCQkJCQlHZXRCdWZmZXJE ZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOworCQkJCXVpbnQzMgkJYnVmX3N0YXRlID0gcGdfYXRvbWlj X3JlYWRfdTY0KCZkZXNjLT5zdGF0ZSk7CisKKwkJCQlpZiAoYnVmX3N0YXRlICYgQk1fVkFMSUQp CisJCQkJeworCQkJCQlvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSArPSAxOworCQkJCQlBc3NlcnQo b3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgPD0gb3BlcmF0aW9uLT5uYmxvY2tzKTsKKworCQkJCQlQ cm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+c3RyYXRlZ3ksCisJCQkJCQkJCQkgb3BlcmF0aW9u LT5yZWwsIG9wZXJhdGlvbi0+cGVyc2lzdGVuY2UsCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5zbWdy LCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5ibG9ja251bSArIG9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBsZXRlZC4gQ2hlY2sgdGhlIHJl c3VsdHMuIFRoaXMKKwkJCQkgKiBpbmNsdWRlcyByZXBvcnRpbmcgb24gZXJyb3JzIGlmIHRoZXJl IHdlcmUgYW55LgorCQkJCSAqLworCQkJCVByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChvcGVyYXRp b24pOworCQkJfQogCQl9CiAKIAkJLyoKQEAgLTE4NzAsNiArMTg2OCwxNTkgQEAgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJLyogTkI6IFJFQURfRE9O RSB0cmFjZXBvaW50IHdhcyBhbHJlYWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sg Ki8KIH0KIAorLyoKKyAqIExvY2FsIHZlcnNpb24gb2YgUHJlcGFyZU5ld1JlYWRCdWZmZXJJTygp LiBIZXJlIGluc3RlYWQgb2YgbG9jYWxidWYuYyB0bworICogYXZvaWQgYW4gZXh0ZXJuYWwgZnVu Y3Rpb24gY2FsbC4KKyAqLworc3RhdGljIFByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cworUHJlcGFy ZU5ld0xvY2FsUmVhZEJ1ZmZlcklPKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCisJ CQkJCQkJQnVmZmVyIGJ1ZmZlcikKK3sKKwlCdWZmZXJEZXNjICpkZXNjID0gR2V0TG9jYWxCdWZm ZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsKKwl1aW50NjQJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21p Y19yZWFkX3U2NCgmZGVzYy0+c3RhdGUpOworCisJLyogQWxyZWFkeSB2YWxpZCwgbm8gd29yayB0 byBkbyAqLworCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwl7CisJCXBnYWlvX3dyZWZfY2xl YXIoJm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJFQURZX0RP TkU7CisJfQorCisJcGdhaW9fc3VibWl0X3N0YWdlZCgpOworCisJaWYgKHBnYWlvX3dyZWZfdmFs aWQoJmRlc2MtPmlvX3dyZWYpKQorCXsKKwkJb3BlcmF0aW9uLT5pb193cmVmID0gZGVzYy0+aW9f d3JlZjsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJcmV0dXJuIFJFQURfQlVG RkVSX0lOX1BST0dSRVNTOworCX0KKworCXJldHVybiBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU87 Cit9CisKKy8qCisgKiBUcnkgdG8gc3RhcnQgSU8gb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiBhIG5l dyBydW4gb2YgYmxvY2tzLiBJZiBBSU8gaXMgaW4KKyAqIHByb2dyZXNzLCBiZSBpdCBpbiB0aGlz IGJhY2tlbmQgb3IgYW5vdGhlciBiYWNrZW5kLCB3ZSBqdXN0IGFzc29jaWF0ZSB0aGUKKyAqIHdh aXQgcmVmZXJlbmNlIHdpdGggdGhlIG9wZXJhdGlvbiBhbmQgd2FpdCBpbiBXYWl0UmVhZEJ1ZmZl cnMoKS4gVGhpcyB0dXJucworICogb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2Ug aW4gdHdvIHdvcmtsb2FkczoKKyAqCisgKiAxKSBBIHJlYWQgc3RyZWFtIHRoYXQgaGFzIHRvIHJl YWQgdGhlIHNhbWUgYmxvY2sgbXVsdGlwbGUgdGltZXMgd2l0aGluIHRoZQorICogICAgcmVhZGFo ZWFkIGRpc3RhbmNlLiBUaGlzIGNhbiBoYXBwZW4gZS5nLiBmb3IgdGhlIHRhYmxlIGFjY2Vzc2Vz IG9mIGFuCisgKiAgICBpbmRleCBzY2FuLgorICoKKyAqIDIpIENvbmN1cnJlbnQgc2NhbnMgYnkg bXVsdGlwbGUgYmFja2VuZHMgb24gdGhlIHNhbWUgcmVsYXRpb24uCisgKgorICogSWYgd2Ugd2Vy ZSB0byBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBpbi1wcm9ncmVzcyBJTywgd2UnZCBub3Qg YmUgYWJsZQorICogdG8ga2VlcCBlbm91Z2ggSS9PIGluIGZsaWdodC4KKyAqCisgKiBJZiB3ZSBk byBmaW5kIHRoZXJlIGlzIG9uZ29pbmcgSS9PIGZvciB0aGUgYnVmZmVyLCB3ZSBzZXQgdXAgYSAx LWJsb2NrCisgKiBSZWFkQnVmZmVyc09wZXJhdGlvbiB0aGF0IFdhaXRSZWFkQnVmZmVycyB0aGVu IGNhbiB3YWl0IG9uLgorICoKKyAqIEl0J3MgcG9zc2libGUgdGhhdCBhbm90aGVyIGJhY2tlbmQg aGFzIHN0YXJ0ZWQgSU8gb24gdGhlIGJ1ZmZlciBidXQgbm90IHlldAorICogc2V0IGl0cyB3YWl0 IHJlZmVyZW5jZS4gSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gd2FpdCBm b3IKKyAqIGVpdGhlciB0aGUgd2FpdCByZWZlcmVuY2UgdG8gYmUgdmFsaWQgb3IgdGhlIElPIHRv IGJlIGRvbmUuCisgKi8KK3N0YXRpYyBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKK1ByZXBhcmVO ZXdSZWFkQnVmZmVySU8oUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKKwkJCQkJICAg QnVmZmVyIGJ1ZmZlcikKK3sKKwl1aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNj OworCisJaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKKwkJcmV0dXJuIFByZXBhcmVOZXdMb2Nh bFJlYWRCdWZmZXJJTyhvcGVyYXRpb24sIGJ1ZmZlcik7CisKKwlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJZGVzYyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVm ZmVyIC0gMSk7CisKKwlmb3IgKDs7KQorCXsKKwkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNj KTsKKworCQkvKiBBbHJlYWR5IHZhbGlkLCBubyB3b3JrIHRvIGRvICovCisJCWlmIChidWZfc3Rh dGUgJiBCTV9WQUxJRCkKKwkJeworCQkJVW5sb2NrQnVmSGRyKGRlc2MpOworCQkJcGdhaW9fd3Jl Zl9jbGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKKwkJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJF QURZX0RPTkU7CisJCX0KKworCQlpZiAoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpCisJ CXsKKwkJCS8qIEpvaW4gZXhpc3RpbmcgcmVhZCAqLworCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQo JmRlc2MtPmlvX3dyZWYpKQorCQkJeworCQkJCW9wZXJhdGlvbi0+aW9fd3JlZiA9IGRlc2MtPmlv X3dyZWY7CisJCQkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQkJcmV0dXJuIFJFQURfQlVGRkVSX0lOX1BST0dSRVNTOworCQkJfQorCisJ CQkvKgorCQkJICogSWYgdGhlIHdhaXQgcmVmIGlzIG5vdCB2YWxpZCBidXQgdGhlIElPIGlzIGlu IHByb2dyZXNzLCBzb21lb25lCisJCQkgKiBlbHNlIHN0YXJ0ZWQgSU8gYnV0IGhhc24ndCBzZXQg dGhlIHdhaXQgcmVmIHlldC4gV2UgaGF2ZSBubworCQkJICogY2hvaWNlIGJ1dCB0byB3YWl0IHVu dGlsIHRoZSB3YWl0IHJlZiBpcyBzZXQgb3IgdGhlIElPCisJCQkgKiBjb21wbGV0ZXMuCisJCQkg Ki8KKwkJCVVubG9ja0J1ZkhkcihkZXNjKTsKKwkJCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKKwkJ CVdhaXRJTyhkZXNjKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTm8gSU8gaW4g cHJvZ3Jlc3MgYW5kIG5vdCBhbHJlYWR5IHZhbGlkOyBXZSB3aWxsIHN0YXJ0IElPLiBJdCdzCisJ CSAqIHBvc3NpYmxlIHRoYXQgdGhlIElPIHdhcyBpbiBwcm9ncmVzcyBhbmQgbmV2ZXIgYmVjYW1l IHZhbGlkIGJlY2F1c2UKKwkJICogdGhlIElPIGVycm9yZWQgb3V0LiBXZSdsbCBkbyB0aGUgSU8g b3Vyc2VsdmVzLgorCQkgKi8KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2MsIGJ1Zl9zdGF0ZSwgQk1f SU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVtZW1iZXJCdWZmZXJJTyhD dXJyZW50UmVzb3VyY2VPd25lciwKKwkJCQkJCQkJCSAgQnVmZmVyRGVzY3JpcHRvckdldEJ1ZmZl cihkZXNjKSk7CisKKwkJcmV0dXJuIFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTzsKKwl9Cit9CisK KworLyoKKyAqIFdoZW4gYnVpbGRpbmcgYSBuZXcgSU8gZnJvbSBtdWx0aXBsZSBidWZmZXJzLCB3 ZSB3b24ndCBpbmNsdWRlIGJ1ZmZlcnMKKyAqIHRoYXQgYXJlIGFscmVhZHkgdmFsaWQgb3IgYWxy ZWFkeSBpbiBwcm9ncmVzcy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZQorICogdXNlZCBm b3IgYWRkaXRpb25hbCBhZGphY2VudCBidWZmZXJzIGZvbGxvd2luZyB0aGUgaGVhZCBidWZmZXIg aW4gYSBuZXcgSU8uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2FzIHN1Y2Nl c3NmdWxseSBwcmVwYXJlZCBmb3IgSU8gYW5kIGZhbHNlIGlmIGl0CisgKiBpcyByZWplY3RlZCBh bmQgdGhlIHJlYWQgSU8gc2hvdWxkIG5vdCBpbmNsdWRlIHRoaXMgYnVmZmVyLgorKi8KK3N0YXRp YyBib29sCitQcmVwYXJlQWRkaXRpb25hbFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlcikKK3sKKwl1 aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNjOworCisJaWYgKEJ1ZmZlcklzTG9j YWwoYnVmZmVyKSkKKwl7CisJCWRlc2MgPSBHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZl ciAtIDEpOworCQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQoJmRlc2MtPnN0YXRlKTsK KwkJLyogTG9jYWwgYnVmZmVycyBkb24ndCB1c2UgQk1fSU9fSU5fUFJPR1JFU1MgKi8KKwkJaWYg KGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEIHx8IHBnYWlvX3dyZWZfdmFsaWQoJmRlc2MtPmlvX3dyZWYp KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1 ZmZlciAtIDEpOworCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGRlc2MpOworCQlpZiAoYnVmX3N0 YXRlICYgKEJNX1ZBTElEIHwgQk1fSU9fSU5fUFJPR1JFU1MpKQorCQl7CisJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2Ms IGJ1Zl9zdGF0ZSwgQk1fSU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVt ZW1iZXJCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKwogLyoKICAqIEluaXRpYXRlIElPIGZvciB0aGUgUmVhZEJ1ZmZlcnNPcGVy YXRpb24KICAqCkBAIC0xOTAzLDcgKzIwNTQsNzUgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJdm9pZAkg ICAqaW9fcGFnZXNbTUFYX0lPX0NPTUJJTkVfTElNSVRdOwogCUlPQ29udGV4dAlpb19jb250ZXh0 OwogCUlPT2JqZWN0CWlvX29iamVjdDsKLQlib29sCQlkaWRfc3RhcnRfaW87CisJaW5zdHJfdGlt ZQlpb19zdGFydDsKKwlQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMgc3RhdHVzOworCisJLyoKKwkg KiBXZSBtdXN0IGdldCBhbiBJTyBoYW5kbGUgYmVmb3JlIFN0YXJ0TmV3QnVmZmVyUmVhZElPKCks IGFzCisJICogcGdhaW9faW9fYWNxdWlyZSgpIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3 YW50IGFmdGVyIHNldHRpbmcKKwkgKiBJT19JTl9QUk9HUkVTUy4gSWYgd2UgZG9uJ3QgbmVlZCB0 byBkbyB0aGUgSU8sIHdlJ2xsIHJlbGVhc2UgdGhlCisJICogaGFuZGxlLgorCSAqCisJICogSWYg d2UgbmVlZCB0byB3YWl0IGZvciBJTyBiZWZvcmUgd2UgY2FuIGdldCBhIGhhbmRsZSwgc3VibWl0 CisJICogYWxyZWFkeS1zdGFnZWQgSU8gZmlyc3QsIHNvIHRoYXQgb3RoZXIgYmFja2VuZHMgZG9u J3QgbmVlZCB0byB3YWl0LgorCSAqIFRoZXJlIHdvdWxkbid0IGJlIGEgZGVhZGxvY2sgcmlzaywg YXMgcGdhaW9faW9fYWNxdWlyZSgpIGp1c3QgbmVlZHMgdG8KKwkgKiB3YWl0IGZvciBhbHJlYWR5 IHN1Ym1pdHRlZCBJTywgd2hpY2ggZG9lc24ndCByZXF1aXJlIGFkZGl0aW9uYWwgbG9ja3MsCisJ ICogYnV0IGl0IGNvdWxkIHN0aWxsIGNhdXNlIHVuZGVzaXJhYmxlIHdhaXRzLgorCSAqCisJICog QSBzZWNvbmRhcnkgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd291bGQgYWxsb3cgdXMgdG8gbWVhc3Vy ZSB0aGUgdGltZSBpbgorCSAqIHBnYWlvX2lvX2FjcXVpcmUoKSB3aXRob3V0IGNhdXNpbmcgdW5k dWUgdGltZXIgb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiwKKwkgKiBub24tYmxvY2tpbmcsIGNhc2Uu ICBIb3dldmVyLCBjdXJyZW50bHkgdGhlIHBnc3RhdHMgaW5mcmFzdHJ1Y3R1cmUKKwkgKiBkb2Vz bid0IHJlYWxseSBhbGxvdyB0aGF0LCBhcyBpdCBhKSBhc3NlcnRzIHRoYXQgYW4gb3BlcmF0aW9u IGNhbid0CisJICogaGF2ZSB0aW1lIHdpdGhvdXQgb3BlcmF0aW9ucyBiKSBkb2Vzbid0IGhhdmUg YW4gQVBJIHRvIHJlcG9ydAorCSAqICJhY2N1bXVsYXRlZCIgdGltZS4KKwkgKi8KKwlpb2ggPSBw Z2Fpb19pb19hY3F1aXJlX25iKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmb3BlcmF0aW9uLT5pb19y ZXR1cm4pOworCWlmICh1bmxpa2VseSghaW9oKSkKKwl7CisJCXBnYWlvX3N1Ym1pdF9zdGFnZWQo KTsKKwkJaW9oID0gcGdhaW9faW9fYWNxdWlyZShDdXJyZW50UmVzb3VyY2VPd25lciwgJm9wZXJh dGlvbi0+aW9fcmV0dXJuKTsKKwl9CisKKwlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSBmYWxzZTsK KworCS8qIENoZWNrIGlmIHdlIGNhbiBzdGFydCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUtcmVhZCBi dWZmZXIgKi8KKwlpZiAoKHN0YXR1cyA9IFByZXBhcmVOZXdSZWFkQnVmZmVySU8ob3BlcmF0aW9u LCBidWZmZXJzW25ibG9ja3NfZG9uZV0pKSA8CisJCVJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTykK Kwl7CisJCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKKwkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOwor CQlpZiAoc3RhdHVzID09IFJFQURfQlVGRkVSX0FMUkVBRFlfRE9ORSkKKwkJeworCQkJLyoKKwkJ CSAqIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBibG9jaywgd2UncmUg ZG9uZS4KKwkJCSAqCisJCQkgKiBXaGVuIElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUg aXMgdXBkYXRlZCBpbgorCQkJICogUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KCksIGJ1dCB0aGF0 IGlzIG5vdCBjYWxsZWQgaWYgbm8gSU8gaXMKKwkJCSAqIG5lY2Vzc2FyeS4gVGh1cyB1cGRhdGUg aGVyZS4KKwkJCSAqLworCQkJb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsKKwkJCUFzc2Vy dChvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkv KgorCQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2gKKwkJCSAqIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3Mg aW4gUGluQnVmZmVyRm9yQmxvY2soKS4gVGhlCisJCQkgKiBvdGhlciBiYWNrZW5kIHdpbGwgdHJh Y2sgdGhpcyBhcyBhICdyZWFkJy4KKwkJCSAqLworCQkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRp b24tPnN0cmF0ZWd5LAorCQkJCQkJCSBvcGVyYXRpb24tPnJlbCwgb3BlcmF0aW9uLT5wZXJzaXN0 ZW5jZSwKKwkJCQkJCQkgb3BlcmF0aW9uLT5zbWdyLCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJ CQkJIG9wZXJhdGlvbi0+YmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBUaGUgSU8gaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyAq LworCQlBc3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX0lOX1BST0dSRVNTKTsKKwkJQ2hlY2tS ZWFkQnVmZmVyc09wZXJhdGlvbihvcGVyYXRpb24sIGZhbHNlKTsKKwkJcmV0dXJuIHRydWU7CisJ fQorCisJLyogV2UgY2FuIHJlYWQgaW4gYXQgbGVhc3QgdGhlIGhlYWQgYnVmZmVyIC4gKi8KKwlB c3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTyk7CiAKIAkvKgogCSAqIFdo ZW4gdGhpcyBJTyBpcyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LCBlaXRoZXIgYmVjYXVzZSB0aGUg Y2FsbGVyIHdpbGwKQEAgLTE5NTQsMTM4ICsyMTczLDc0IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVh ZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCSAq LwogCXBnc3RhdF9wcmVwYXJlX3JlcG9ydF9jaGVja3N1bV9mYWlsdXJlKG9wZXJhdGlvbi0+c21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkKTsKIAotCS8qCi0JICogR2V0IElPIGhhbmRs ZSBiZWZvcmUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKCksIGFzIHBnYWlvX2lvX2FjcXVpcmUoKQot CSAqIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3YW50IGFmdGVyIHNldHRpbmcgSU9fSU5f UFJPR1JFU1MuCi0JICoKLQkgKiBJZiB3ZSBuZWVkIHRvIHdhaXQgZm9yIElPIGJlZm9yZSB3ZSBj YW4gZ2V0IGEgaGFuZGxlLCBzdWJtaXQKLQkgKiBhbHJlYWR5LXN0YWdlZCBJTyBmaXJzdCwgc28g dGhhdCBvdGhlciBiYWNrZW5kcyBkb24ndCBuZWVkIHRvIHdhaXQuCi0JICogVGhlcmUgd291bGRu J3QgYmUgYSBkZWFkbG9jayByaXNrLCBhcyBwZ2Fpb19pb19hY3F1aXJlKCkganVzdCBuZWVkcyB0 bwotCSAqIHdhaXQgZm9yIGFscmVhZHkgc3VibWl0dGVkIElPLCB3aGljaCBkb2Vzbid0IHJlcXVp cmUgYWRkaXRpb25hbCBsb2NrcywKLQkgKiBidXQgaXQgY291bGQgc3RpbGwgY2F1c2UgdW5kZXNp cmFibGUgd2FpdHMuCi0JICoKLQkgKiBBIHNlY29uZGFyeSBiZW5lZml0IGlzIHRoYXQgdGhpcyB3 b3VsZCBhbGxvdyB1cyB0byBtZWFzdXJlIHRoZSB0aW1lIGluCi0JICogcGdhaW9faW9fYWNxdWly ZSgpIHdpdGhvdXQgY2F1c2luZyB1bmR1ZSB0aW1lciBvdmVyaGVhZCBpbiB0aGUgY29tbW9uLAot CSAqIG5vbi1ibG9ja2luZywgY2FzZS4gIEhvd2V2ZXIsIGN1cnJlbnRseSB0aGUgcGdzdGF0cyBp bmZyYXN0cnVjdHVyZQotCSAqIGRvZXNuJ3QgcmVhbGx5IGFsbG93IHRoYXQsIGFzIGl0IGEpIGFz c2VydHMgdGhhdCBhbiBvcGVyYXRpb24gY2FuJ3QKLQkgKiBoYXZlIHRpbWUgd2l0aG91dCBvcGVy YXRpb25zIGIpIGRvZXNuJ3QgaGF2ZSBhbiBBUEkgdG8gcmVwb3J0Ci0JICogImFjY3VtdWxhdGVk IiB0aW1lLgotCSAqLwotCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmVfbmIoQ3VycmVudFJlc291cmNl T3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JaWYgKHVubGlrZWx5KCFpb2gpKQotCXsK LQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCi0JCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmUoQ3Vy cmVudFJlc291cmNlT3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JfQorCUFzc2VydChp b19idWZmZXJzWzBdID09IGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSk7CisJaW9fcGFnZXNbMF0gPSBC dWZmZXJHZXRCbG9jayhidWZmZXJzW25ibG9ja3NfZG9uZV0pOworCWlvX2J1ZmZlcnNfbGVuID0g MTsKIAogCS8qCi0JICogQ2hlY2sgaWYgd2UgY2FuIHN0YXJ0IElPIG9uIHRoZSBmaXJzdCB0by1i ZS1yZWFkIGJ1ZmZlci4KLQkgKgotCSAqIElmIGFuIEkvTyBpcyBhbHJlYWR5IGluIHByb2dyZXNz IGluIGFub3RoZXIgYmFja2VuZCwgd2Ugd2FudCB0byB3YWl0Ci0JICogZm9yIHRoZSBvdXRjb21l OiBlaXRoZXIgZG9uZSwgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdpbGwKLQkgKiBy ZXRyeS4KKwkgKiBIb3cgbWFueSBuZWlnaGJvcmluZy1vbi1kaXNrIGJsb2NrcyBjYW4gd2Ugc2Nh dHRlci1yZWFkIGludG8gb3RoZXIKKwkgKiBidWZmZXJzIGF0IHRoZSBzYW1lIHRpbWU/ICBJbiB0 aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FpdCBpZiB3ZSBzZWUgYW4gSS9PCisJICogYWxyZWFkeSBpbiBw cm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJNX0lPX0lOX1BST0dSRVNTIGZvciB0aGUgaGVhZAor CSAqIGJsb2NrLCBzbyB3ZSBzaG91bGQgZ2V0IG9uIHdpdGggdGhhdCBJL08gYXMgc29vbiBhcyBw b3NzaWJsZS4KIAkgKi8KLQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW25ibG9j a3NfZG9uZV0sIGZhbHNlKSkKKwlmb3IgKGludCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9w ZXJhdGlvbi0+bmJsb2NrczsgaSsrKQogCXsKLQkJLyoKLQkJICogU29tZW9uZSBlbHNlIGhhcyBh bHJlYWR5IGNvbXBsZXRlZCB0aGlzIGJsb2NrLCB3ZSdyZSBkb25lLgotCQkgKgotCQkgKiBXaGVu IElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUgaXMgdXBkYXRlZCBpbgotCQkgKiBQcm9j ZXNzUmVhZEJ1ZmZlcnNSZXN1bHQoKSwgYnV0IHRoYXQgaXMgbm90IGNhbGxlZCBpZiBubyBJTyBp cwotCQkgKiBuZWNlc3NhcnkuIFRodXMgdXBkYXRlIGhlcmUuCi0JCSAqLwotCQlvcGVyYXRpb24t Pm5ibG9ja3NfZG9uZSArPSAxOwotCQkqbmJsb2Nrc19wcm9ncmVzcyA9IDE7CisJCWlmICghUHJl cGFyZUFkZGl0aW9uYWxSZWFkQnVmZmVyKGJ1ZmZlcnNbaV0pKQorCQkJYnJlYWs7CisJCS8qIE11 c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KKwkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZmZlcnNbaSAtIDFdKSA9PQorCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmZmVyc1tpXSkgLSAxKTsKKwkJQXNzZXJ0KGlvX2J1ZmZlcnNbaW9fYnVmZmVyc19sZW5dID09 IGJ1ZmZlcnNbaV0pOwogCi0JCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKLQkJcGdhaW9fd3JlZl9j bGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKLQkJZGlkX3N0YXJ0X2lvID0gZmFsc2U7Ci0KLQkJ LyoKLQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2ggaXQKLQkJICogbXVzdCBoYXZlIHN0YXJ0ZWQgb3V0IGFzIGEgbWlzcyBp biBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUgb3RoZXIKLQkJICogYmFja2VuZCB3aWxsIHRyYWNr IHRoaXMgYXMgYSAncmVhZCcuCi0JCSAqLwotCQlQcm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+ c3RyYXRlZ3ksIG9wZXJhdGlvbi0+cmVsLCBwZXJzaXN0ZW5jZSwKLQkJCQkJCSBvcGVyYXRpb24t PnNtZ3IsIGZvcmtudW0sCi0JCQkJCQkgYmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSk7CisJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0QmxvY2soYnVmZmVy c1tpXSk7CiAJfQorCisJLyogZ2V0IGEgcmVmZXJlbmNlIHRvIHdhaXQgZm9yIGluIFdhaXRSZWFk QnVmZmVycygpICovCisJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3BlcmF0aW9uLT5pb193cmVm KTsKKworCS8qIHByb3ZpZGUgdGhlIGxpc3Qgb2YgYnVmZmVycyB0byB0aGUgY29tcGxldGlvbiBj YWxsYmFja3MgKi8KKwlwZ2Fpb19pb19zZXRfaGFuZGxlX2RhdGFfMzIoaW9oLCAodWludDMyICop IGlvX2J1ZmZlcnMsIGlvX2J1ZmZlcnNfbGVuKTsKKworCXBnYWlvX2lvX3JlZ2lzdGVyX2NhbGxi YWNrcyhpb2gsCisJCQkJCQkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAgPwor CQkJCQkJCQlQR0FJT19IQ0JfTE9DQUxfQlVGRkVSX1JFQURWIDoKKwkJCQkJCQkJUEdBSU9fSENC X1NIQVJFRF9CVUZGRVJfUkVBRFYsCisJCQkJCQkJCWZsYWdzKTsKKworCXBnYWlvX2lvX3NldF9m bGFnKGlvaCwgaW9oX2ZsYWdzKTsKKworCS8qIC0tLQorCSogRXZlbiB0aG91Z2ggd2UncmUgdHJ5 aW5nIHRvIGlzc3VlIElPIGFzeW5jaHJvbm91c2x5LCB0cmFjayB0aGUgdGltZQorCSogaW4gc21n cnN0YXJ0cmVhZHYoKToKKwkqIC0gaWYgaW9fbWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdp bGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCisJKiAgIGltbWVkaWF0ZWx5CisJKiAtIHRoZSBpbyBt ZXRob2QgbWlnaHQgbm90IHN1cHBvcnQgdGhlIElPIChlLmcuIHdvcmtlciBJTyBmb3IgYSB0ZW1w CisJKiAgIHRhYmxlKQorCSogLS0tCisJKi8KKwlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lv X3RpbWUodHJhY2tfaW9fdGltaW5nKTsKKwlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+ c21nciwgZm9ya251bSwKKwkJCQkgICBibG9ja251bSArIG5ibG9ja3NfZG9uZSwKKwkJCQkgICBp b19wYWdlcywgaW9fYnVmZmVyc19sZW4pOworCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29i amVjdCwgaW9fY29udGV4dCwgSU9PUF9SRUFELAorCQkJCQkJCWlvX3N0YXJ0LCAxLCBpb19idWZm ZXJzX2xlbiAqIEJMQ0tTWik7CisKKwlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf VEVNUCkKKwkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47 CiAJZWxzZQotCXsKLQkJaW5zdHJfdGltZQlpb19zdGFydDsKKwkJcGdCdWZmZXJVc2FnZS5zaGFy ZWRfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwogCi0JCS8qIFdlIGZvdW5kIGEgYnVmZmVy IHRoYXQgd2UgbmVlZCB0byByZWFkIGluLiAqLwotCQlBc3NlcnQoaW9fYnVmZmVyc1swXSA9PSBi dWZmZXJzW25ibG9ja3NfZG9uZV0pOwotCQlpb19wYWdlc1swXSA9IEJ1ZmZlckdldEJsb2NrKGJ1 ZmZlcnNbbmJsb2Nrc19kb25lXSk7Ci0JCWlvX2J1ZmZlcnNfbGVuID0gMTsKKwkvKgorCSAqIFRy YWNrIHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0 LiBPdGhlcndpc2UKKwkgKiB3ZSBjb3VsZCBlbmQgdXAgaXNzdWluZyBhIGxvdCBvZiBJTyBpbiBh IHNob3J0IHRpbWVzcGFuLCBkZXNwaXRlIGEgbG93CisJICogY29zdCBsaW1pdC4KKwkgKi8KKwlp ZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBh Z2VNaXNzICogaW9fYnVmZmVyc19sZW47CiAKLQkJLyoKLQkJICogSG93IG1hbnkgbmVpZ2hib3Jp bmctb24tZGlzayBibG9ja3MgY2FuIHdlIHNjYXR0ZXItcmVhZCBpbnRvIG90aGVyCi0JCSAqIGJ1 ZmZlcnMgYXQgdGhlIHNhbWUgdGltZT8gIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YWl0IGlmIHdl IHNlZSBhbgotCQkgKiBJL08gYWxyZWFkeSBpbiBwcm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJN X0lPX0lOX1BST0dSRVNTIGZvciB0aGUKLQkJICogaGVhZCBibG9jaywgc28gd2Ugc2hvdWxkIGdl dCBvbiB3aXRoIHRoYXQgSS9PIGFzIHNvb24gYXMgcG9zc2libGUuCi0JCSAqLwotCQlmb3IgKGlu dCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9wZXJhdGlvbi0+bmJsb2NrczsgaSsrKQotCQl7 Ci0JCQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW2ldLCB0cnVlKSkKLQkJCQli cmVhazsKLQkJCS8qIE11c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KLQkJCUFz c2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2kgLSAxXSkgPT0KLQkJCQkgICBCdWZm ZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2ldKSAtIDEpOwotCQkJQXNzZXJ0KGlvX2J1ZmZlcnNb aW9fYnVmZmVyc19sZW5dID09IGJ1ZmZlcnNbaV0pOworCSpuYmxvY2tzX3Byb2dyZXNzID0gaW9f YnVmZmVyc19sZW47CiAKLQkJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0 QmxvY2soYnVmZmVyc1tpXSk7Ci0JCX0KLQotCQkvKiBnZXQgYSByZWZlcmVuY2UgdG8gd2FpdCBm b3IgaW4gV2FpdFJlYWRCdWZmZXJzKCkgKi8KLQkJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3Bl cmF0aW9uLT5pb193cmVmKTsKLQotCQkvKiBwcm92aWRlIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgdG8g dGhlIGNvbXBsZXRpb24gY2FsbGJhY2tzICovCi0JCXBnYWlvX2lvX3NldF9oYW5kbGVfZGF0YV8z Mihpb2gsICh1aW50MzIgKikgaW9fYnVmZmVycywgaW9fYnVmZmVyc19sZW4pOwotCi0JCXBnYWlv X2lvX3JlZ2lzdGVyX2NhbGxiYWNrcyhpb2gsCi0JCQkJCQkJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QID8KLQkJCQkJCQkJCVBHQUlPX0hDQl9MT0NBTF9CVUZGRVJfUkVBRFYg OgotCQkJCQkJCQkJUEdBSU9fSENCX1NIQVJFRF9CVUZGRVJfUkVBRFYsCi0JCQkJCQkJCQlmbGFn cyk7Ci0KLQkJcGdhaW9faW9fc2V0X2ZsYWcoaW9oLCBpb2hfZmxhZ3MpOwotCi0JCS8qIC0tLQot CQkgKiBFdmVuIHRob3VnaCB3ZSdyZSB0cnlpbmcgdG8gaXNzdWUgSU8gYXN5bmNocm9ub3VzbHks IHRyYWNrIHRoZSB0aW1lCi0JCSAqIGluIHNtZ3JzdGFydHJlYWR2KCk6Ci0JCSAqIC0gaWYgaW9f bWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCi0J CSAqICAgaW1tZWRpYXRlbHkKLQkJICogLSB0aGUgaW8gbWV0aG9kIG1pZ2h0IG5vdCBzdXBwb3J0 IHRoZSBJTyAoZS5nLiB3b3JrZXIgSU8gZm9yIGEgdGVtcAotCQkgKiAgIHRhYmxlKQotCQkgKiAt LS0KLQkJICovCi0JCWlvX3N0YXJ0ID0gcGdzdGF0X3ByZXBhcmVfaW9fdGltZSh0cmFja19pb190 aW1pbmcpOwotCQlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+c21nciwgZm9ya251bSwK LQkJCQkJICAgYmxvY2tudW0gKyBuYmxvY2tzX2RvbmUsCi0JCQkJCSAgIGlvX3BhZ2VzLCBpb19i dWZmZXJzX2xlbik7Ci0JCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9SRUFELAotCQkJCQkJCQlpb19zdGFydCwgMSwgaW9fYnVmZmVyc19sZW4gKiBC TENLU1opOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQotCQkJ cGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47Ci0JCWVsc2UK LQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfcmVhZCArPSBpb19idWZmZXJzX2xlbjsKLQot CQkvKgotCQkgKiBUcmFjayB2YWN1dW0gY29zdCB3aGVuIGlzc3VpbmcgSU8sIG5vdCBhZnRlciB3 YWl0aW5nIGZvciBpdC4KLQkJICogT3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cCBpc3N1aW5nIGEg bG90IG9mIElPIGluIGEgc2hvcnQgdGltZXNwYW4sCi0JCSAqIGRlc3BpdGUgYSBsb3cgY29zdCBs aW1pdC4KLQkJICovCi0JCWlmIChWYWN1dW1Db3N0QWN0aXZlKQotCQkJVmFjdXVtQ29zdEJhbGFu Y2UgKz0gVmFjdXVtQ29zdFBhZ2VNaXNzICogaW9fYnVmZmVyc19sZW47Ci0KLQkJKm5ibG9ja3Nf cHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKLQkJZGlkX3N0YXJ0X2lvID0gdHJ1ZTsKLQl9Ci0K LQlyZXR1cm4gZGlkX3N0YXJ0X2lvOworCXJldHVybiB0cnVlOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCAyYmJlZGZmNmUuLjI5ZDgxMTFiOCAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTIzNTIsNiArMjM1Miw3IEBAIFByZWRpY2F0ZUxvY2tEYXRhCiBQcmVk aWNhdGVMb2NrVGFyZ2V0VHlwZQogUHJlZmV0Y2hCdWZmZXJSZXN1bHQKIFByZXBQYXJhbGxlbFJl c3RvcmVQdHJUeXBlCitQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKIFByZXBhcmVTdG10CiBQcmVw YXJlZFN0YXRlbWVudAogUHJlc29ydGVkS2V5RGF0YQotLSAKMi41My4wCgo= --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0006-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Disposition: attachment; filename="v14-0006-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj4811 RnJvbSBlZTJjMGYzYzdlN2EyNGJlZjNkMGI2YTc5ODQ0M2JkYzI2MjAyMGY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjIgSmFuIDIwMjYgMTM6MDc6MTMgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNCAwNi8xNl0g VXNlIEV4ZWNTZXRUdXBsZUJvdW5kIGhpbnQgZHVyaW5nIGluZGV4IHNjYW5zLgoKVGhpcyBnaXZl cyBpbmRleCBzY2FucyBhIHdheSB0byBhdm9pZCB1c2luZyBhIHJlYWQgc3RyZWFtIGR1cmluZyBj ZXJ0YWluCmtpbmRzIG9mIHF1ZXJpZXMgdGhhdCBhcmUgdmVyeSB1bmxpa2VseSB0byBiZW5lZml0 IGZyb20gcHJlZmV0Y2hpbmc6CnF1ZXJpZXMgd2hvc2UgcGxhbiBpbnZvbHZlcyBhIExJTUlUIG5v ZGUgdGhhdCBpcyBjb25zdW1lcyB0dXBsZXMgZnJvbSBhbgppbmRleCBzY2FuIChvciBpbmRleC1v bmx5IHNjYW4pIG5vZGUuCgpUZXN0aW5nIGhhcyBzaG93biB0aGlzIHRvIGJlIHBhcnRpY3VsYXJs eSBpbXBvcnRhbnQgd2l0aCBuZXN0ZWQgbG9vcApqb2lucyB3aXRoIGEgTElNSVQgb24gYW4gaW5u ZXIgaW5kZXggc2Nhbi4gIFRoaXMgaXMgdHlwaWNhbCBvZiBuZXN0ZWQKbG9vcCBhbnRpLWpvaW5z LCBhbmQgbmVzdGVkIGxvb3Agc2VtaS1qb2lucy4KClhYWCBUaGlzIGlzIHN0aWxsIHZlcnkgbXVj aCBhIFdJUC4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1C eTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaCAgICAgICAgICAgICB8ICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oICAgICAgICAgICAgfCAgNCArKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyB8ICA1ICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAg ICB8ICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICAgfCA1MCAr KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMgfCAxMCArKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j ICAgICB8IDEzICsrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspCgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmgKaW5kZXggZGUxMjczMThiLi4wODVkYmI2ODQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aApAQCAtMzk1LDYgKzM5NSw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJ LyogcGFyYWxsZWwgaW5kZXggc2NhbiBpbmZvcm1hdGlvbiwgaW4gc2hhcmVkIG1lbW9yeSAqLwog CXN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpwYXJhbGxlbF9zY2FuOwogCisJaW50 NjQJCXR1cGxlc19uZWVkZWQ7CisKIAkvKgogCSAqIENvdW50ZXIgdG8gcmVxdWVzdCBlYXJseSBh Ym9ydCBkdXJpbmcgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBzY2Fucy4KIAkgKiBXaGVuIG5v bnplcm8sIHRoZSBzY2FuIHdpbGwgcmVhZCBhdCBtb3N0IHRoaXMgbWFueSBsZWFmIHBhZ2VzIGJl Zm9yZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA3YzFiNDI3ZmIuLjEyZGQ1MzNjMyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKQEAgLTE2OTcsNiArMTY5Nyw3IEBAIHR5cGVkZWYgc3RydWN0CiAgKgkJ U2NhbkRlc2MJCSAgIGluZGV4IHNjYW4gZGVzY3JpcHRvcgogICoJCUluc3RydW1lbnQJCSAgIGxv Y2FsIGluZGV4IHNjYW4gaW5zdHJ1bWVudGF0aW9uCiAgKgkJU2hhcmVkSW5mbwkJICAgcGFyYWxs ZWwgd29ya2VyIGluc3RydW1lbnRhdGlvbiAobm8gbGVhZGVyIGVudHJ5KQorICoJCVR1cGxlc05l ZWRlZAkgICB0dXBsZSBib3VuZCwgc2VlIEV4ZWNTZXRUdXBsZUJvdW5kCiAgKgogICoJCVJlb3Jk ZXJRdWV1ZQkgICB0dXBsZXMgdGhhdCBuZWVkIHJlb3JkZXJpbmcgZHVlIHRvIHJlLWNoZWNrCiAg KgkJUmVhY2hlZEVuZAkJICAgaGF2ZSB3ZSBmZXRjaGVkIGFsbCB0dXBsZXMgZnJvbSBpbmRleCBh bHJlYWR5PwpAQCAtMTcyNSw2ICsxNzI2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3Rh dGUKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmlzc19TY2FuRGVzYzsKIAlJbmRleFNjYW5J bnN0cnVtZW50YXRpb24gKmlzc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1l bnRhdGlvbiAqaXNzX1NoYXJlZEluZm87CisJaW50NjQJCWlzc19UdXBsZXNOZWVkZWQ7CiAKIAkv KiBUaGVzZSBhcmUgbmVlZGVkIGZvciByZS1jaGVja2luZyBPUkRFUiBCWSBleHByIG9yZGVyaW5n ICovCiAJcGFpcmluZ2hlYXAgKmlzc19SZW9yZGVyUXVldWU7CkBAIC0xNzUzLDYgKzE3NTUsNyBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5TdGF0ZQogICoJCVNjYW5EZXNjCQkgICBpbmRleCBz Y2FuIGRlc2NyaXB0b3IKICAqCQlJbnN0cnVtZW50CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3Ry dW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAgIHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50 YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKKyAqCQlUdXBsZXNOZWVkZWQJICAgdHVwbGUgYm91bmQs IHNlZSBFeGVjU2V0VHVwbGVCb3VuZAogICoJCVRhYmxlU2xvdAkJICAgc2xvdCBmb3IgaG9sZGlu ZyB0dXBsZXMgZmV0Y2hlZCBmcm9tIHRoZSB0YWJsZQogICoJCVBzY2FuTGVuCQkgICBzaXplIG9m IHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJTmFtZUNTdHJpbmdBdHRO dW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0byBOQU1FREFUQUxFTgpA QCAtMTc3NSw2ICsxNzc4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJ c3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICppb3NzX1NjYW5EZXNjOwogCUluZGV4U2Nhbkluc3Ry dW1lbnRhdGlvbiAqaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRh dGlvbiAqaW9zc19TaGFyZWRJbmZvOworCWludDY0CQlpb3NzX1R1cGxlc05lZWRlZDsKIAlUdXBs ZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNsb3Q7CiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKIAlBdHRy TnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCmluZGV4IDg4M2ZiMmVkMS4uYzliODdlNjgzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTYzNyw5ICs2MzcsMTQgQEAgaGVhcGFt X2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKIAkJICogaGF2ZW4ndCBkb25lIGFueSBoZWFwIGZldGNoZXMgeWV0LiAgV2UgZG9uJ3Qgd2Fu dCB0byB3YXN0ZSBhbnkKIAkJICogY3ljbGVzIG9uIGFsbG9jYXRpbmcgYSByZWFkIHN0cmVhbSB1 bnRpbCB3ZSBoYXZlIGEgZGVtb25zdHJhdGVkCiAJCSAqIG5lZWQgZm9yIHBlcmZvcm0gaGVhcCBm ZXRjaGVzLgorCQkgKgorCQkgKiBBbHNvIGF2b2lkaW5nIHByZWZldGNoaW5nIHdoZW4gdGhlIGNv cmUgZXhlY3V0b3IgcGFzc2VzIHRoZSBzY2FuIGEKKwkJICogdHVwbGVzX25lZWRlZCBoaW50IHRo YXQgaW5kaWNhdGVzIHRoYXQgdGhlIHNjYW4gaXMgbGlrZWx5IHRvIGVuZAorCQkgKiBiZWZvcmUg bG9uZy4KIAkJICovCiAJCWlmICghaHNjYW4tPnhzX3JlYWRfc3RyZWFtICYmIHByaW9yQmF0Y2gg JiYgc2Nhbi0+TVZDQ1NjYW4gJiYKIAkJCWhzY2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2NrTnVt YmVyICYmCS8qIGZvciBpbmRleC1vbmx5IHNjYW5zICovCisJCQkoc2Nhbi0+dHVwbGVzX25lZWRl ZCA9PSAtMSB8fCBzY2FuLT50dXBsZXNfbmVlZGVkID4gMjApICYmCiAJCQllbmFibGVfaW5kZXhz Y2FuX3ByZWZldGNoKQogCQl7CiAJCQlBc3NlcnQoIWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3Mu dmFsaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCBkNTBlM2ZhNzEuLmFhNDRhMGVj MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsxMjYsNyBAQCBSZWxhdGlv bkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpCiAJc2Nhbi0+eHNfaXR1cGRlc2MgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwID0gTlVM TDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOworCXNjYW4tPnR1cGxlc19uZWVkZWQgPSAt MTsJLyogbm8gbGltaXQgKi8KIAlzY2FuLT54c19yZWFkX2V4dHJlbWFsX29ubHkgPSAwOwogCiAJ c2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJv Y25vZGUuYwppbmRleCA3ZTQwYjg1MjUuLmFhZWQzNTA2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1Byb2Nub2RlLmMKQEAgLTcyLDYgKzcyLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgi CiAKKyNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1 dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFnZy5oIgogI2luY2x1ZGUgImV4ZWN1dG9y L25vZGVBcHBlbmQuaCIKQEAgLTg0MCw2ICs4NDEsMTIgQEAgRXhlY1NodXRkb3duTm9kZV93YWxr ZXIoUGxhblN0YXRlICpub2RlLCB2b2lkICpjb250ZXh0KQogICogQW55IG5lZ2F0aXZlIHR1cGxl c19uZWVkZWQgdmFsdWUgbWVhbnMgIm5vIGxpbWl0Iiwgd2hpY2ggc2hvdWxkIGJlIHRoZQogICog ZGVmYXVsdCBhc3N1bXB0aW9uIHdoZW4gdGhpcyBpcyBub3QgY2FsbGVkIGF0IGFsbCBmb3IgYSBw YXJ0aWN1bGFyIG5vZGUuCiAgKgorICogTm90ZTogZm9yIG5vZGVzIGxpa2UgU29ydCwgdHVwbGVz X25lZWRlZCBpcyBhIGhhcmQgbGltaXQgLS0gdGhlIG5vZGUgY2FuCisgKiBzdG9wIGFmdGVyIHBy b2R1Y2luZyBleGFjdGx5IHRoYXQgbWFueSB0dXBsZXMuICBGb3IgaW5kZXggc2NhbnMsIGhvd2V2 ZXIsCisgKiB0dXBsZXNfbmVlZGVkIGlzIG9ubHkgYW4gYXBwcm94aW1hdGlvbiwgYmVjYXVzZSBu b24taW5kZXggcXVhbHMgbWF5IGZpbHRlcgorICogb3V0IHNvbWUgdHVwbGVzLiAgVGhlIGFjdHVh bCBudW1iZXIgb2YgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgaW5kZXggbWF5CisgKiBuZWVkIHRv IGV4Y2VlZCB0dXBsZXNfbmVlZGVkIHRvIHNhdGlzZnkgdGhlIGNhbGxlcidzIHJlcXVpcmVtZW50 cy4KKyAqCiAgKiBOb3RlOiBpZiB0aGlzIGlzIGNhbGxlZCByZXBlYXRlZGx5IG9uIGEgcGxhbiB0 cmVlLCB0aGUgZXhhY3Qgc2FtZSBzZXQKICAqIG9mIG5vZGVzIG11c3QgYmUgdXBkYXRlZCB3aXRo IHRoZSBuZXcgbGltaXQgZWFjaCB0aW1lOyBiZSBjYXJlZnVsIHRoYXQKICAqIG9ubHkgdW5jaGFu Z2luZyBjb25kaXRpb25zIGFyZSB0ZXN0ZWQgaGVyZS4KQEAgLTk3Nyw2ICs5ODQsNDkgQEAgRXhl Y1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9ub2Rl KQogCiAJCUV4ZWNTZXRUdXBsZUJvdW5kKHR1cGxlc19uZWVkZWQsIG91dGVyUGxhblN0YXRlKGNo aWxkX25vZGUpKTsKIAl9CisJZWxzZSBpZiAoSXNBKGNoaWxkX25vZGUsIEluZGV4U2NhblN0YXRl KSkKKwl7CisJCS8qCisJCSAqIElmIGl0IGlzIGFuIEluZGV4U2Nhbiwgc2F2ZSB0aGUgdHVwbGVz X25lZWRlZCBpbiB0aGUgc3RhdGUgc28gaXQKKwkJICogY2FuIGJlIHByb3BhZ2F0ZWQgdG8gdGhl IEluZGV4U2NhbkRlc2Mgd2hlbiB0aGUgc2NhbiBpcyBzdGFydGVkLgorCQkgKgorCQkgKiBOb3Rl OiBBcyB3aXRoIFNvcnQsIHRoZSBpbmRleCBzY2FuIG5vZGUgaXMgcmVzcG9uc2libGUgZm9yIHJl YWN0aW5nCisJCSAqIHByb3Blcmx5IHRvIGNoYW5nZXMgdG8gdGhpcyBwYXJhbWV0ZXIuCisJCSAq LworCQlJbmRleFNjYW5TdGF0ZSAqaXNzdGF0ZSA9IChJbmRleFNjYW5TdGF0ZSAqKSBjaGlsZF9u b2RlOworCisJCWlzc3RhdGUtPmlzc19UdXBsZXNOZWVkZWQgPSB0dXBsZXNfbmVlZGVkOworCisJ CS8qIElmIHNjYW4gYWxyZWFkeSBzdGFydGVkLCB1cGRhdGUgdGhlIEluZGV4U2NhbkRlc2MgdG9v ICovCisJCWlmIChpc3N0YXRlLT5pc3NfU2NhbkRlc2MpCisJCQlpc3N0YXRlLT5pc3NfU2NhbkRl c2MtPnR1cGxlc19uZWVkZWQgPSB0dXBsZXNfbmVlZGVkOworCX0KKwllbHNlIGlmIChJc0EoY2hp bGRfbm9kZSwgSW5kZXhPbmx5U2NhblN0YXRlKSkKKwl7CisJCS8qIFNhbWUgY29tbWVudHMgYXMg Zm9yIEluZGV4U2NhbiAqLworCQlJbmRleE9ubHlTY2FuU3RhdGUgKmlvc3N0YXRlID0gKEluZGV4 T25seVNjYW5TdGF0ZSAqKSBjaGlsZF9ub2RlOworCisJCWlvc3N0YXRlLT5pb3NzX1R1cGxlc05l ZWRlZCA9IHR1cGxlc19uZWVkZWQ7CisKKwkJLyogSWYgc2NhbiBhbHJlYWR5IHN0YXJ0ZWQsIHVw ZGF0ZSB0aGUgSW5kZXhTY2FuRGVzYyB0b28gKi8KKwkJaWYgKGlvc3N0YXRlLT5pb3NzX1NjYW5E ZXNjKQorCQkJaW9zc3RhdGUtPmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSB0dXBsZXNf bmVlZGVkOworCX0KKwllbHNlIGlmIChJc0EoY2hpbGRfbm9kZSwgTmVzdExvb3BTdGF0ZSkpCisJ eworCQkvKgorCQkgKiBGb3IgTmVzdExvb3Agam9pbnMgd2hlcmUgZWFjaCBvdXRlciB0dXBsZSBw cm9kdWNlcyBhdCBtb3N0IG9uZQorCQkgKiBvdXRwdXQgdHVwbGUsIHdlIGNhbiBwcm9wYWdhdGUg dGhlIGJvdW5kIHRvIHRoZSBvdXRlciBjaGlsZAorCQkgKi8KKwkJTmVzdExvb3BTdGF0ZSAqbmxz dGF0ZSA9IChOZXN0TG9vcFN0YXRlICopIGNoaWxkX25vZGU7CisJCUpvaW5UeXBlCWpvaW50eXBl ID0gbmxzdGF0ZS0+anMuam9pbnR5cGU7CisKKwkJaWYgKGpvaW50eXBlID09IEpPSU5fU0VNSSB8 fCBqb2ludHlwZSA9PSBKT0lOX0FOVEkgfHwKKwkJCW5sc3RhdGUtPmpzLnNpbmdsZV9tYXRjaCkK KwkJeworCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVzX25lZWRlZCwgb3V0ZXJQbGFuU3RhdGUo Y2hpbGRfbm9kZSkpOworCQl9CisJfQogCiAJLyoKIAkgKiBJbiBwcmluY2lwbGUgd2UgY291bGQg ZGVzY2VuZCB0aHJvdWdoIGFueSBwbGFuIG5vZGUgdHlwZSB0aGF0IGlzCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCA4NGJmZjYwY2UuLmYzZmM2M2FiZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC05Niw2ICs5Niw5IEBA IEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQlub2RlLT5pb3NzX1Nj YW5EZXNjID0gc2NhbmRlc2M7CiAJCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50 X2l0dXApOwogCisJCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8KKwkJc2NhbmRlc2Mt PnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJ ZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhl YWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTUyOCw2 ICs1MzEsNyBAQCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5c1Jl YWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5cyA9IE5VTEw7CiAJaW5k ZXhzdGF0ZS0+aW9zc19OdW1SdW50aW1lS2V5cyA9IDA7CisJaW5kZXhzdGF0ZS0+aW9zc19UdXBs ZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhlIGluZGV4IHNjYW4ga2V5cyBmcm9t IHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBAIC03MDQsNiArNzA4LDkgQEAgRXhlY0luZGV4T25s eVNjYW5Jbml0aWFsaXplRFNNKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJIHBp c2Nhbik7CiAJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKKwkv KiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9kZS0+aW9zc19TY2FuRGVzYy0+dHVw bGVzX25lZWRlZCA9IG5vZGUtPmlvc3NfVHVwbGVzTmVlZGVkOworCiAJLyoKIAkgKiBJZiBubyBy dW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5k IHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgpAQCAtNzY5LDYgKzc3Niw5 IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUg Km5vZGUsCiAJCQkJCQkJCSBwaXNjYW4pOwogCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54 c193YW50X2l0dXApOwogCisJLyogUGFzcyBkb3duIGFueSB0dXBsZSBib3VuZCAqLworCW5vZGUt Pmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRlZDsK KwogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUg cmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBB TS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCA2NzgyMjk0N2EuLjNlMTc0 Y2I2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTE1LDYgKzExNSw5 IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAogCQlub2RlLT5pc3NfU2NhbkRl c2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJCXNj YW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCQkvKgog CQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwg Z28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAg LTIxMSw2ICsyMTQsOSBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRvd24g YW55IHR1cGxlIGJvdW5kICovCisJCXNjYW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNz X1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1 bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5r ZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTk4Niw2ICs5OTIsNyBAQCBFeGVjSW5pdEluZGV4U2Nh bihJbmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3Rh dGUtPmlzc19SdW50aW1lS2V5c1JlYWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aXNzX1J1bnRp bWVLZXlzID0gTlVMTDsKIAlpbmRleHN0YXRlLT5pc3NfTnVtUnVudGltZUtleXMgPSAwOworCWlu ZGV4c3RhdGUtPmlzc19UdXBsZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhlIGlu ZGV4IHNjYW4ga2V5cyBmcm9tIHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBAIC0xNzMwLDYgKzE3 MzcsOSBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwK IAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CiAK KwkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9kZS0+aXNzX1NjYW5EZXNjLT50 dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCS8qCiAJICogSWYgbm8g cnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFu ZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTE3OTQsNiArMTgw NCw5IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2Rl LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsK IAorCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8KKwlub2RlLT5pc3NfU2NhbkRlc2Mt PnR1cGxlc19uZWVkZWQgPSBub2RlLT5pc3NfVHVwbGVzTmVlZGVkOworCiAJLyoKIAkgKiBJZiBu byBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQg YW5kIHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgotLSAKMi41My4wCgo= --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0007-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v14-0007-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj4610 RnJvbSAxZjMwOGFiZjFhZDNhM2UwN2QwOTI4OTlkM2YxYmYwOTlkZTM1ZjkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTQgMDcvMTZdIE1ha2UgYnVmZmVyIGhpdCBoZWxwZXIKCkFscmVhZHkgdHdvIHBsYWNl cyBjb3VudCBidWZmZXIgaGl0cywgcmVxdWlyaW5nIHF1aXRlIGEgZmV3IGxpbmVzIG9mCmNvZGUg c2luY2Ugd2UgZG8gYWNjb3VudGluZyBpbiBzbyBtYW55IHBsYWNlcy4gRnV0dXJlIGNvbW1pdHMg d2lsbCBhZGQKbW9yZSBsb2NhdGlvbnMsIHNvIHJlZmFjdG9yIGludG8gYSBoZWxwZXIuCgpOb3Rl OiBJIChwZ2VvZ2hlYW4pIGhhdmUgY2hhbmdlZCB0aGlzIGZyb20gTWVsYW5pZSdzIG9yaWdpbmFs IGJ5CmlubGluaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb246CgpodHRwczovL3Bvc3Rnci5lcy9tL0NB SDItV3prMDJ2UGpzSlB4N0VHTm1ndnNLS2d5SG49WHRHakpjUEUrZVFUUDN4UXQ3d0BtYWlsLmdt YWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwgMTExICsr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1NiBpbnNlcnRpb25z KCspLCA1NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IDAwYmM2MDk1Mi4uNzBhNWRiYTczIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtNjQ4LDYgKzY0OCwxMCBAQCBzdGF0aWMgaW5saW5lIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9j KFNNZ3JSZWxhdGlvbiBzbWdyLAogCQkJCQkJCQkJICBib29sICpmb3VuZFB0ciwgSU9Db250ZXh0 IGlvX2NvbnRleHQpOwogc3RhdGljIGJvb2wgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09w ZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpOwogc3RhdGljIHZvaWQg Q2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9u LCBib29sIGlzX2NvbXBsZXRlKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBQcm9jZXNzQnVmZmVySGl0 KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJUmVsYXRpb24gcmVsLCBj aGFyIHBlcnNpc3RlbmNlLAorCQkJCQkJCQkJU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIg Zm9ya251bSwKKwkJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKIHN0YXRpYyBCdWZmZXIg R2V0VmljdGltQnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBJT0NvbnRleHQg aW9fY29udGV4dCk7CiBzdGF0aWMgdm9pZCBGbHVzaFVubG9ja2VkQnVmZmVyKEJ1ZmZlckRlc2Mg KmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4sCiAJCQkJCQkJCUlPT2JqZWN0IGlvX29iamVjdCwgSU9D b250ZXh0IGlvX2NvbnRleHQpOwpAQCAtMTIyNiw4ICsxMjMwLDYgQEAgUGluQnVmZmVyRm9yQmxv Y2soUmVsYXRpb24gcmVsLAogCQkJCSAgYm9vbCAqZm91bmRQdHIpCiB7CiAJQnVmZmVyRGVzYyAq YnVmSGRyOwotCUlPQ29udGV4dAlpb19jb250ZXh0OwotCUlPT2JqZWN0CWlvX29iamVjdDsKIAog CUFzc2VydChibG9ja051bSAhPSBQX05FVyk7CiAKQEAgLTEyMzYsMTcgKzEyMzgsNiBAQCBQaW5C dWZmZXJGb3JCbG9jayhSZWxhdGlvbiByZWwsCiAJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNU RU5DRV9QRVJNQU5FTlQgfHwKIAkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9H R0VEKSk7CiAKLQlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQl7Ci0J CWlvX2NvbnRleHQgPSBJT0NPTlRFWFRfTk9STUFMOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9U RU1QX1JFTEFUSU9OOwotCX0KLQllbHNlCi0JewotCQlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9y U3RyYXRlZ3koc3RyYXRlZ3kpOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKLQl9 Ci0KIAlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX1NUQVJUKGZvcmtOdW0sIGJsb2NrTnVt LAogCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKIAkJCQkJ CQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKQEAgLTEyNTQsMTggKzEy NDUsMTEgQEAgUGluQnVmZmVyRm9yQmxvY2soUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJICAgc21n ci0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKIAogCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJT SVNURU5DRV9URU1QKQotCXsKIAkJYnVmSGRyID0gTG9jYWxCdWZmZXJBbGxvYyhzbWdyLCBmb3Jr TnVtLCBibG9ja051bSwgZm91bmRQdHIpOwotCQlpZiAoKmZvdW5kUHRyKQotCQkJcGdCdWZmZXJV c2FnZS5sb2NhbF9ibGtzX2hpdCsrOwotCX0KIAllbHNlCi0JewogCQlidWZIZHIgPSBCdWZmZXJB bGxvYyhzbWdyLCBwZXJzaXN0ZW5jZSwgZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJIHN0cmF0 ZWd5LCBmb3VuZFB0ciwgaW9fY29udGV4dCk7Ci0JCWlmICgqZm91bmRQdHIpCi0JCQlwZ0J1ZmZl clVzYWdlLnNoYXJlZF9ibGtzX2hpdCsrOwotCX0KKwkJCQkJCQkgc3RyYXRlZ3ksIGZvdW5kUHRy LCBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSkpOworCiAJaWYgKHJlbCkKIAl7CiAJCS8q CkBAIC0xMjc0LDIyICsxMjU4LDEwIEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwK IAkJICogemVyb2VkIGluc3RlYWQpLCB0aGUgcGVyLXJlbGF0aW9uIHN0YXRzIGFsd2F5cyBjb3Vu dCB0aGVtLgogCQkgKi8KIAkJcGdzdGF0X2NvdW50X2J1ZmZlcl9yZWFkKHJlbCk7Ci0JCWlmICgq Zm91bmRQdHIpCi0JCQlwZ3N0YXRfY291bnRfYnVmZmVyX2hpdChyZWwpOwogCX0KLQlpZiAoKmZv dW5kUHRyKQotCXsKLQkJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29udGV4dCwg SU9PUF9ISVQsIDEsIDApOwotCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKLQkJCVZhY3V1bUNvc3RC YWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OwogCi0JCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwKLQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVs TnVtYmVyLAotCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJ CQkJCSAgdHJ1ZSk7Ci0JfQorCWlmICgqZm91bmRQdHIpCisJCVByb2Nlc3NCdWZmZXJIaXQoc3Ry YXRlZ3ksIHJlbCwgcGVyc2lzdGVuY2UsIHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKIAogCXJl dHVybiBCdWZmZXJEZXNjcmlwdG9yR2V0QnVmZmVyKGJ1Zkhkcik7CiB9CkBAIC0xNjk1LDYgKzE2 NjcsNTEgQEAgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0 KQogCXJldHVybiBSZWFkQnVmZmVyc0NhblN0YXJ0SU9PbmNlKGJ1ZmZlciwgbm93YWl0KTsKIH0K IAorLyoKKyAqIFdlIHRyYWNrIHZhcmlvdXMgc3RhdHMgcmVsYXRlZCB0byBidWZmZXIgaGl0cy4g QmVjYXVzZSB0aGlzIGlzIGRvbmUgaW4gYQorICogZmV3IHNlcGFyYXRlIHBsYWNlcywgdGhpcyBo ZWxwZXIgZXhpc3RzIGZvciBjb252ZW5pZW5jZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitQ cm9jZXNzQnVmZmVySGl0KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCSBSZWxh dGlvbiByZWwsIGNoYXIgcGVyc2lzdGVuY2UsIFNNZ3JSZWxhdGlvbiBzbWdyLAorCQkJCSBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtKQoreworCUlPQ29udGV4dAlpb19j b250ZXh0OworCUlPT2JqZWN0CWlvX29iamVjdDsKKworCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QKQorCXsKKwkJaW9fY29udGV4dCA9IElPQ09OVEVYVF9OT1JNQUw7CisJ CWlvX29iamVjdCA9IElPT0JKRUNUX1RFTVBfUkVMQVRJT047CisJfQorCWVsc2UKKwl7CisJCWlv X2NvbnRleHQgPSBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSk7CisJCWlvX29iamVjdCA9 IElPT0JKRUNUX1JFTEFUSU9OOworCX0KKworCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURf RE9ORShmb3JrbnVtLAorCQkJCQkJCQkJICBibG9ja251bSwKKwkJCQkJCQkJCSAgc21nci0+c21n cl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu cmVsTnVtYmVyLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJCQkJ CQkJCQkgIHRydWUpOworCisJaWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAp CisJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQgKz0gMTsKKwllbHNlCisJCXBnQnVmZmVy VXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwlpZiAocmVsKQorCQlwZ3N0YXRfY291bnRf YnVmZmVyX2hpdChyZWwpOworCisJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9ISVQsIDEsIDApOworCisJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCisJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworfQorCiAvKgogICogSGVscGVyIGZv ciBXYWl0UmVhZEJ1ZmZlcnMoKSB0aGF0IHByb2Nlc3NlcyB0aGUgcmVzdWx0cyBvZiBhIHJlYWR2 CiAgKiBvcGVyYXRpb24sIHJhaXNpbmcgYW4gZXJyb3IgaWYgbmVjZXNzYXJ5LgpAQCAtMTk5MCwy NSArMjAwNyw5IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJh dGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCQkgKiBtdXN0IGhhdmUgc3RhcnRlZCBvdXQg YXMgYSBtaXNzIGluIFBpbkJ1ZmZlckZvckJsb2NrKCkuIFRoZSBvdGhlcgogCQkgKiBiYWNrZW5k IHdpbGwgdHJhY2sgdGhpcyBhcyBhICdyZWFkJy4KIAkJICovCi0JCVRSQUNFX1BPU1RHUkVTUUxf QlVGRkVSX1JFQURfRE9ORShmb3JrbnVtLCBibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19k b25lLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0 b3IuYmFja2VuZCwKLQkJCQkJCQkJCQkgIHRydWUpOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQotCQkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX2hpdCArPSAx OwotCQllbHNlCi0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCArPSAxOwotCi0JCWlm IChvcGVyYXRpb24tPnJlbCkKLQkJCXBnc3RhdF9jb3VudF9idWZmZXJfaGl0KG9wZXJhdGlvbi0+ cmVsKTsKLQotCQlwZ3N0YXRfY291bnRfaW9fb3AoaW9fb2JqZWN0LCBpb19jb250ZXh0LCBJT09Q X0hJVCwgMSwgMCk7Ci0KLQkJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFs YW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKKwkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRpb24t PnN0cmF0ZWd5LCBvcGVyYXRpb24tPnJlbCwgcGVyc2lzdGVuY2UsCisJCQkJCQkgb3BlcmF0aW9u LT5zbWdyLCBmb3JrbnVtLAorCQkJCQkJIGJsb2NrbnVtICsgb3BlcmF0aW9uLT5uYmxvY2tzX2Rv bmUpOwogCX0KIAllbHNlCiAJewotLSAKMi41My4wCgo= --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0005-Add-heapam-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v14-0005-Add-heapam-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj4912 RnJvbSBkYjg1OWM5MDMxYjNhNjk0MTI2ZTUxOTM3MGU0NTM2ZmI1NTE4MTNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNCAwNS8xNl0g QWRkIGhlYXBhbSBpbmRleCBzY2FuIEkvTyBwcmVmZXRjaGluZy4KClRoaXMgY29tbWl0IGltcGxl bWVudHMgSS9PIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyAoYW5kIGluZGV4LW9ubHkKc2Nh bnMgdGhhdCByZXF1aXJlIGhlYXAgZmV0Y2hlcykuIFRoaXMgd2FzIG1hZGUgcG9zc2libGUgYnkg dGhlIHJlY2VudAphZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRvIGJvdGggdGhlIHRh YmxlIEFNIGFuZCBpbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJm YWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgbWF0Y2hpbmcgVElEcwoocmF0aGVyIHRoYW4gb25lIHR1 cGxlIGF0IGEgdGltZSksIGVhY2ggb2Ygd2hpY2ggbXVzdCBiZSB0YWtlbiBmcm9tCmluZGV4IHR1 cGxlcyB0aGF0IGFwcGVhciB0b2dldGhlciBvbiBhIHNpbmdsZSBpbmRleCBwYWdlLiAgVGhpcyBh bGxvd3MKbXVsdGlwbGUgYmF0Y2hlcyB0byBiZSBoZWxkIG9wZW4gc2ltdWx0YW5lb3VzbHkuICBH aXZpbmcgdGhlIHRhYmxlIEFNIGFuCmV4cGxpY2l0IHVuZGVyc3RhbmRpbmcgb2YgaW5kZXggQU0g Y29uY2VwdHMvaW5kZXggcGFnZSBib3VuZGFyaWVzIGFsbG93cwppdCB0byBjb25zaWRlciBhbGwg b2YgdGhlIHJlbGV2YW50IGNvc3RzIGFuZCBiZW5lZml0cy4KClByZWZldGNoaW5nIGlzIGltcGxl bWVudGVkIHVzaW5nIGEgcHJlZmV0Y2hpbmcgcG9zaXRpb24gdW5kZXIgdGhlCmNvbnRyb2wgb2Yg dGhlIHRhYmxlIEFNIGFuZCBjb3JlIGNvZGUuICBUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0 aGUKc2NhbiBwb3NpdGlvbiBhZGRlZCBieSBjb21taXQgRklYTUUsIHdoaWNoIGludHJvZHVjZWQg dGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlLiAgQSByZWFkIHN0cmVhbSBjYWxsYmFjayBhZHZhbmNl cyB0aGUgcmVhZCBzdHJlYW0gYXMgbmVlZGVkIHRvCnByb3ZpZGUgc3VmZmljaWVudGx5IG1hbnkg aGVhcCBibG9jayBudW1iZXJzIHRvIG1haW50YWluIHRoZSByZWFkCnN0cmVhbSdzIHRhcmdldCBw cmVmZXRjaCBkaXN0YW5jZS4KClRlc3RpbmcgaGFzIHNob3duIHRoYXQgaW5kZXggcHJlZmV0Y2hp bmcgY2FuIG1ha2UgaW5kZXggc2NhbnMgbXVjaApmYXN0ZXIuICBMYXJnZSByYW5nZSBzY2FucyB0 aGF0IHJldHVybiBtYW55IHR1cGxlcyBjYW4gYmUgYXMgbXVjaCBhcyAzNXgKZmFzdGVyLgoKQW4g aW1wb3J0YW50IGdvYWwgb2YgdGhlIGFtZ2V0YmF0Y2ggZGVzaWduIGlzIHRvIGVuYWJsZSB0aGUg dGFibGUgQU0ncwpyZWFkIHN0cmVhbSBjYWxsYmFjayB0byBhZHZhbmNlIGl0cyBwcmVmZXRjaCBw b3NpdGlvbiB1c2luZyBUSURzIHRoYXQKYXBwZWFyIG9uIGEgbGVhZiBwYWdlIHRoYXQncyBhaGVh ZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgbGVhZgpwYWdlLiAgVGhpcyBpcyBjcnVj aWFsIHdpdGggc2NhbnMgb2YgaW5kZXhlcyB3aGVyZSBlYWNoIGxlYWYgcGFnZQpoYXBwZW5zIHRv IGhhdmUgcmVsYXRpdmVseSBmZXcgZGlzdGluY3QgaGVhcCBibG9ja3MgYW1vbmcgaXRzIG1hdGNo aW5nClRJRHMgKGFzIHdlbGwgYXMgd2l0aCBzY2FucyB3aXRoIGxlYWYgcGFnZXMgdGhhdCBoYXZl IHJlbGF0aXZlbHkgZmV3CnRvdGFsIG1hdGNoaW5nIGl0ZW1zKS4gIEluZGV4IHNjYW5zIGNhbiBo YXZlIGFzIG1hbnkgYXMgNjQgb3BlbiBiYXRjaGVzLAp3aGljaCB0ZXN0aW5nIGhhcyBzaG93biB0 byBiZSBhYm91dCB0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBjYW4gZXZlciBiZQp1c2VmdWwuICBC YXRjaGVzIGFyZSBtYWludGFpbmVkIGluIHNjYW4gb3JkZXIgdXNpbmcgYSBzaW1wbGUgcmluZyBi dWZmZXIKZGF0YSBzdHJ1Y3R1cmUuCgpJbiByYXJlIGNhc2VzIHdoZXJlIHRoZSBzY2FuIGV4Y2Vl ZHMgdGhpcyBxdWFzaS1hcmJpdHJhcnkgbGltaXQgb2YgNjQsCnRoZSByZWFkIHN0cmVhbSBpcyB0 ZW1wb3JhcmlseSBwYXVzZWQgdXNpbmcgdGhlIHJlYWQgc3RyZWFtIHBhdXNpbmcKbWVjaGFuaXNt IGFkZGVkIGJ5IGNvbW1pdCAzODIyOWNiOS4gIFByZWZldGNoaW5nICh2aWEgdGhlIHJlYWQgc3Ry ZWFtKQppcyByZXN1bWVkIG9ubHkgYWZ0ZXIgdGhlIHNjYW4gcG9zaXRpb24gYWR2YW5jZXMgYmV5 b25kIGl0cyBjdXJyZW50IG9wZW4KYmF0Y2ggYW5kIHRoZW4gZnJlZXMgYW5kIHJlbW92ZXMgdGhl IGJhdGNoIGZyb20gdGhlIHNjYW4ncyBiYXRjaCByaW5nCmJ1ZmZlci4gIFRlc3RpbmcgaGFzIHNo b3duIHRoYXQgaXQgaXNuJ3QgdmVyeSBjb21tb24gZm9yIHNjYW5zIHRvIGhvbGQKb3BlbiBtb3Jl IHRoYW4gYWJvdXQgMTAgYmF0Y2hlcyB0byBnZXQgdGhlIGRlc2lyZWQgSS9PIHByZWZldGNoCmRp c3RhbmNlLgoKVGhlIGhldXJpc3RpYyB1c2VkIHRvIGRlY2lkZSB3aGVuIHRvIGJlZ2luIHByZWZl dGNoaW5nIC0tIGRlbGF5aW5nIHVudGlsCnRoZSBzY2FuJ3Mgc2Vjb25kIGJhdGNoIC0tIGlzIGlt cGVyZmVjdC4gIFNlbGVjdGl2ZSBpbmRleCBzY2FucyB0aGF0CmFjY2VzcyByYW5kb21seS1vcmRl cmVkIGhlYXAgcGFnZXMgd2lsbCBiZW5lZml0IGZyb20gcHJlZmV0Y2hpbmcsIGJ1dAp3b24ndCBh Y3R1YWxseSByZWFjaCB0aGUgcG9pbnQgb2Ygc3RhcnRpbmcgcHJlZmV0Y2hpbmcgd2l0aCB0aGlz IGRlc2lnbi4KSXQgaXMgZGlmZmljdWx0IHRvIGlkZW50aWZ5IHN1Y2ggc2NhbnMgYWhlYWQgb2Yg dGltZS4gIEl0IGRlcGVuZHMgb24gdGhlCnBoeXNpY2FsIG9yZGVyaW5nIG9mIHRoZSBoZWFwIHJl bGF0aXZlIHRvIHRoZSBpbmRleCwgdGhlIHNjYW4ncwpzZWxlY3Rpdml0eSwgYW5kIHdoZXRoZXIg YW4gaW5kZXgtb25seSBzY2FuIHdpbGwgYWN0dWFsbHkgbmVlZCBoZWFwCmZldGNoZXMgYXJlIHVu Y2VydGFpbiB3aGVuIHRoZSBzY2FuIGJlZ2lucy4gIEFkZGluZyBhIHNtYXJ0ZXIgaGV1cmlzdGlj CnJlbWFpbnMgYXMgd29yayBmb3IgYSBmdXR1cmUgcmVsZWFzZS4KCkF1dGhvcjogVG9tYXMgVm9u ZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0Lmll PgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdl ZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0ZWJhYkBl bnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAg ICAgICAgICAgIHwgIDEzICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAg ICAgICAgICB8ICAzNSArKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMg ICAgICB8IDM3MCArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGJhdGNoLmMgICAgICAgICB8ICA1MiArKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv UkVBRE1FICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Bh cmFtZXRlcnMuZGF0ICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUgfCAgIDEgKwogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAg ICAgICAgICAgICAgIHwgIDE2ICsKIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAg ICAgICAgICAgICB8IDEyOCArKysrKy0KIGRvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwgICAgICAg ICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdz Lm91dCAgICAgICAgfCAgIDMgKy0KIDEzIGZpbGVzIGNoYW5nZWQsIDYxNCBpbnNlcnRpb25zKCsp LCAyMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFt LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggMTM2MDE5OTI1Li4xNDkwOGY0 MWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEyMyw2ICsxMjMsMTkgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhGZXRjaEhlYXBEYXRhCiAJQnVmZmVyCQl4c192bWJ1ZjsJCS8qIHZpc2liaWxpdHkgbWFw IGJ1ZmZlciAqLwogCWludAkJCXhzX3ZtX2l0ZW1zOwkvKiAjIGl0ZW1zIHRvIHJlc29sdmUgdmlz aWJpbGl0eSBpbmZvIGZvciAqLwogCisJLyogRm9yIGJhdGNoIGluZGV4IHNjYW5zIHRoYXQgdXNl IHJlYWQgc3RyZWFtIGZvciBwcmVmZXRjaGluZyAqLworCVJlYWRTdHJlYW0gKnhzX3JlYWRfc3Ry ZWFtOworCisJLyoKKwkgKiBUaGUgcmVhZCBzdHJlYW0gaXMgYWxsb2NhdGVkIGF0IHRoZSBiZWdp bm5pbmcgb2YgdGhlIHNjYW4gYW5kIHJlc2V0IG9uCisJICogcmVzY2FuIG9yIHdoZW4gdGhlIHNj YW4gZGlyZWN0aW9uIGNoYW5nZXMuIFRoZSBzY2FuIGRpcmVjdGlvbiBpcyBzYXZlZAorCSAqIGVh Y2ggdGltZSBhIG5ldyB0dXBsZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSBzY2FuIGRpcmVjdGlvbiBj aGFuZ2VzIGZyb20KKwkgKiBvbmUgdHVwbGUgdG8gdGhlIG5leHQsIHRoZSByZWFkIHN0cmVhbSBy ZWxlYXNlcyBhbGwgcHJldmlvdXNseSBwaW5uZWQKKwkgKiBidWZmZXJzIGFuZCByZXNldHMgdGhl IHByZWZldGNoIGJsb2NrLgorCSAqLworCVNjYW5EaXJlY3Rpb24geHNfcmVhZF9zdHJlYW1fZGly OwkvKiBpbmRleCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVyIHhzX3ByZWZldGNoX2Js b2NrOwkvKiBsYXN0IGJsb2NrIHJldHVybmVkIHRvIHhzX3JlYWRfc3RyZWFtICovCisJYm9vbAkJ eHNfcGF1c2VkOwkJLyogcGF1c2VkIHVudGlsIG5leHQgYmF0Y2ggaXMgcmVhZD8gKi8KIAlib29s CQl4c19sYXN0aW5ibG9jazsgLyogbGFzdCBUSUQgb24gdGhpcyBibG9jayBpbiBjdXJyZW50IGJh dGNoPyAqLwogCiAJLyogTkI6IGlmIHhzX2NidWYgb3Igdm1idWYgYXJlIG5vdCBJbnZhbGlkQnVm ZmVyLCB3ZSBob2xkIGEgcGluICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVs c2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCBiMTI1ZDRmN2MuLmRl MTI3MzE4YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0yMDIsNiArMjAyLDEwIEBAIHR5cGVkZWYg c3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQogCSAqIFRoaXMgYWxsb3dzIHRhYmxlIEFNcyB0byBh dm9pZCByZWR1bmRhbnQgYW1nZXRiYXRjaCBjYWxscyB3aXRoIHRoZSBzYW1lCiAJICogcHJpb3Ji YXRjaCAtLSB0aGUgaW5kZXggQU0gbWlnaHQgbmVlZCB0byByZWFkIGFkZGl0aW9uYWwgaW5kZXgg cGFnZXMgdG8KIAkgKiBkZXRlcm1pbmUgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgaXRlbXMg YmV5b25kIGNhbGxlcidzIHByaW9yYmF0Y2guCisJICogSW4gcGFydGljdWxhciwgZHVyaW5nIHBy ZWZldGNoaW5nIHRoZSByZWFkIHN0cmVhbSBjYWxsYmFjayBkaXNjb3ZlcnMKKwkgKiB0aGUgZW5k LW9mLXNjYW4gdmlhIHByZWZldGNoQmF0Y2guICBUaGUgdGFibGUgQU0gY2hlY2tzIHRoZXNlIGZs YWdzIHNvCisJICogdGhhdCB0aGUgc2NhbiBzaWRlIGRvZXNuJ3QgcmVwZWF0IHRoZSBzYW1lIGFt Z2V0YmF0Y2ggY2FsbCB3aGVuIGl0CisJICogbGF0ZXIgcmVhY2hlcyB0aGF0IGJhdGNoIGFzIHNj YW5CYXRjaC4KIAkgKi8KIAlib29sCQlrbm93bkVuZEJhY2t3YXJkOwogCWJvb2wJCWtub3duRW5k Rm9yd2FyZDsKQEAgLTI2MCwxMiArMjY0LDIxIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJh dGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiAgKiBtYXRjaGVzIGluLiAgSG93ZXZlciwgdGFibGUg QU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxlIHR1cGxlcyBpbiB3aGF0ZXZlcgogICogb3JkZXIg aXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVudCAtLSBwcm92aWRlZCB0aGF0IHN1Y2ggcmVvcmRl cmluZyBjYW5ub3QKICAqIGFmZmVjdCB0aGUgb3JkZXIgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMgaW4uCisgKgorICogVGhpcyBkYXRhIHN0cnVjdHVy ZSBhbHNvIHByb3ZpZGVzIHRhYmxlIEFNcyB3aXRoIGEgd2F5IHRvIHJlYWQgYWhlYWQgb2YgdGhl CisgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24gYnkgX211bHRpcGxlXyBiYXRjaGVzL2luZGV4IHBh Z2VzLiAgVGhlIGZ1cnRoZXIgb3V0CisgKiB0aGUgdGFibGUgQU0gcmVhZHMgYWhlYWQgbGlrZSB0 aGlzLCB0aGUgZnVydGhlciBpdCBjYW4gc2VlIGludG8gdGhlIGZ1dHVyZS4KKyAqIFRoYXQgd2F5 IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRvIHJlb3JkZXIgd29yayBhcyBhZ2dyZXNzaXZlbHkgYXMg ZGVzaXJlZC4KKyAqIEZvciBleGFtcGxlLCBpbmRleCBzY2FucyBzb21ldGltZXMgbmVlZCB0byBy ZWFkYWhlYWQgYnkgYXMgbWFueSBhcyBhIGZldworICogZG96ZW4gYW1nZXRiYXRjaCBiYXRjaGVz IGluIG9yZGVyIHRvIG1haW50YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoCisgKiBkaXN0YW5j ZSAoZGlzdGFuY2UgZm9yIHJlYWRpbmcgdGFibGUgYmxvY2tzL2ZldGNoaW5nIHRhYmxlIHR1cGxl cykuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgogewogCS8qIGN1cnJlbnQg cG9zaXRpb25zIGluIGJhdGNoZXNbXSBmb3Igc2NhbiAqLwogCUJhdGNoUmluZ0l0ZW1Qb3Mgc2Nh blBvczsJLyogc2NhbidzIHJlYWQgcG9zaXRpb24gKi8KIAlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQ b3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3MgcHJlZmV0 Y2hQb3M7CS8qIHByZWZldGNoaW5nIHBvc2l0aW9uICovCiAKIAlJbmRleFNjYW5CYXRjaCBtYXJr QmF0Y2g7CiAKQEAgLTQ3Nyw2ICs0OTAsMjggQEAgaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoSW5k ZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogCXJpbmdidWYtPm5l eHRCYXRjaCsrOwogfQogCisvKgorICogQ29tcGFyZSB0d28gYmF0Y2ggcmluZyBwb3NpdGlvbnMg aW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgorICoKKyAqIFJldHVybnMgbmVnYXRpdmUgaWYg cG9zMSBpcyBiZWhpbmQgcG9zMiwgMCBpZiBlcXVhbCwgcG9zaXRpdmUgaWYgcG9zMSBpcworICog YWhlYWQgb2YgcG9zMi4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2luZGV4X3NjYW5fcG9zX2Nt cChCYXRjaFJpbmdJdGVtUG9zICpwb3MxLCBCYXRjaFJpbmdJdGVtUG9zICpwb3MyLAorCQkJCSAg IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludDgJCWJhdGNoZGlmZiA9IChpbnQ4KSAo cG9zMS0+YmF0Y2ggLSBwb3MyLT5iYXRjaCk7CisKKwlpZiAoYmF0Y2hkaWZmICE9IDApCisJCXJl dHVybiBiYXRjaGRpZmY7CisKKwkvKiBTYW1lIGJhdGNoLCBjb21wYXJlIGl0ZW1zICovCisJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJcmV0dXJuIHBvczEtPml0ZW0g LSBwb3MyLT5pdGVtOworCWVsc2UKKwkJcmV0dXJuIHBvczItPml0ZW0gLSBwb3MxLT5pdGVtOwor fQorCiAvKgogICogQWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4dCBpdGVtIGluIHRoZSBiYXRj aC4KICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAppbmRleCBmMmZkNWQzMTUuLjQxOTMwMGE2YiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRp bWl6ZXIvY29zdC5oCkBAIC01Miw2ICs1Miw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4 X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVu YWJsZV9zZXFzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2NhbjsK IGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleG9ubHlzY2FuOworZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDsKIGV4dGVybiBQR0RMTElN UE9SVCBib29sIGVuYWJsZV9iaXRtYXBzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5h YmxlX3RpZHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfc29ydDsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGNkYTNlNzRjYi4uODgzZmIy ZWQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTM3LDYg KzM3LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAib3B0aW1p emVyL2Nvc3QuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1n ci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgpAQCAtNjAsNiArNjEsOSBAQCBzdGF0 aWMgQmxvY2tOdW1iZXIgaGVhcGFtX3NjYW5fZ2V0X2Jsb2Nrc19kb25lKEhlYXBTY2FuRGVzYyBo c2Nhbik7CiBzdGF0aWMgYm9vbCBCaXRtYXBIZWFwU2Nhbk5leHRCbG9jayhUYWJsZVNjYW5EZXNj IHNjYW4sCiAJCQkJCQkJCQlib29sICpyZWNoZWNrLAogCQkJCQkJCQkJdWludDY0ICpsb3NzeV9w YWdlcywgdWludDY0ICpleGFjdF9wYWdlcyk7CitzdGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX2dl dG5leHRfc3RyZWFtKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJCQkgdm9pZCAqY2FsbGJh Y2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJCSB2b2lkICpwZXJfYnVmZmVyX2RhdGEpOwogCiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTAxLDYgKzEwNSwxNyBAQCBoZWFwYW1faW5kZXhfZmV0 Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAkvKiBSZXNjYW5zIHNob3VsZCBh dm9pZCBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMgKi8KIAloc2Nhbi0+eHNfdm1f aXRlbXMgPSAxOwogCisJLyogUmVzZXQgcmVhZCBzdHJlYW0gZGlyZWN0aW9uIHVuY29uZGl0aW9u YWxseSAqLworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBOb01vdmVtZW50U2NhbkRpcmVj dGlvbjsKKworCS8qIFJlc2V0IHJlYWQgc3RyZWFtIGl0c2VsZiwgYW5kIG90aGVyIGFzc29jaWF0 ZWQgc3RhdGUgKi8KKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCXsKKwkJaHNjYW4tPnhz X3ByZWZldGNoX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQloc2Nhbi0+eHNfcGF1c2Vk ID0gZmFsc2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7CisJ fQorCiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkgYXZvaWQgZHJvcHBpbmcgYW55IHBpbnMgbm93IGhl bGQgaW4geHNfY2J1ZiBhbmQgeHNfdm1idWYuCiAJICogVGhpcyBzYXZlcyBjeWNsZXMgZHVyaW5n IGNlcnRhaW4gdGlnaHQgbmVzdGVkIGxvb3Agam9pbnMsIGFuZCBkdXJpbmcKQEAgLTEyMiw2ICsx MzcsOSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4p CiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX3ZtYnVmKSkKIAkJUmVsZWFzZUJ1ZmZlciho c2Nhbi0+eHNfdm1idWYpOwogCisJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwkJcmVhZF9z dHJlYW1fZW5kKGhzY2FuLT54c19yZWFkX3N0cmVhbSk7CisKIAlwZnJlZShoc2Nhbik7CiB9CiAK QEAgLTE5MSw3ICsyMDksMTQgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRl eEZldGNoVGFibGVEYXRhICpzY2FuLAogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1 ZikpCiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAotCQloc2Nhbi0+eHNfY2J1 ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKKwkJLyoK KwkJICogV2hlbiB1c2luZyBhIHJlYWQgc3RyZWFtLCB0aGUgc3RyZWFtIHdpbGwgYWxyZWFkeSBr bm93IHdoaWNoIGJsb2NrCisJCSAqIG51bWJlciBjb21lcyBuZXh0ICh0aG91Z2ggYW4gYXNzZXJ0 aW9uIHdpbGwgdmVyaWZ5IGEgbWF0Y2ggYmVsb3cpCisJCSAqLworCQlpZiAoaHNjYW4tPnhzX3Jl YWRfc3RyZWFtKQorCQkJaHNjYW4tPnhzX2NidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciho c2Nhbi0+eHNfcmVhZF9zdHJlYW0sIE5VTEwpOworCQllbHNlCisJCQloc2Nhbi0+eHNfY2J1ZiA9 IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgog CQkgKiBQcnVuZSBwYWdlIHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQpAQCAt Mjc2LDYgKzMwMSwzMCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0 Y2hUYWJsZURhdGEgKnNjYW4sCiAgKiAoaW1wb3J0YW50IGZvciBpbm5lciBpbmRleCBzY2FucyBv ZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5kIHRoZQogICogbmVlZCB0byBub3QgaG9s ZCBvbnRvIGluZGV4IGxlYWYgcGFnZXMgZm9yIHRvbyBsb25nLgogICoKKyAqIERyb3BwaW5nIGxl YWYgcGFnZSBwaW5zIGVhcmx5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIEluIG5vIGV2ZW50IHdpbGwgdGhlIHNjYW4gYmUgYWxsb3dlZCB0byBob2xkIG9udG8gbW9y ZSB0aGFuIG9uZSBiYXRjaCdzCisgKiBsZWFmIHBhZ2UgcGluIGF0IGEgdGltZS4gIFRoZSBwcmlt YXJ5IHJlYXNvbiBmb3IgdGhpcyByZXN0cmljdGlvbiBpcyB0bworICogYXZvaWQgdW5pbnRlbmRl ZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVhZCBzdHJlYW0sIHdoaWNoIGhhcyBpdHMgb3duCisg KiBzdHJhdGVneSBmb3Iga2VlcGluZyB0aGUgbnVtYmVyIG9mIHBpbnMgaGVsZCBieSB0aGUgYmFj a2VuZCB1bmRlciBjb250cm9sLgorICoKKyAqIE9uY2Ugd2UndmUgcmVzb2x2ZWQgdmlzaWJpbGl0 eSBmb3IgYWxsIGl0ZW1zIGluIGEgYmF0Y2gsIHdlIGNhbiBzYWZlbHkgZHJvcAorICogaXRzIGxl YWYgcGFnZSBwaW4uICBUaGlzIGlzIHNhZmUgd2l0aCByZXNwZWN0IHRvIGNvbmN1cnJlbnQgVkFD VVVNIGJlY2F1c2UKKyAqIGluZGV4IHZhY3V1bWluZyB3aWxsIGJsb2NrIG9uIGFjcXVpcmluZyBh IGNvbmZsaWN0aW5nIGNsZWFudXAgbG9jayBvbiB0aGUKKyAqIGJhdGNoJ3MgaW5kZXggcGFnZSBk dWUgdG8gb3VyIGhvbGRpbmcgYSBwaW4gb24gdGhhdCBzYW1lIHBhZ2UuICBDb3B5aW5nIHRoZQor ICogcmVsZXZhbnQgdmlzaWJpbGl0eSBtYXAgZGF0YSBpbnRvIG91ciBsb2NhbCBjYWNoZSBzdWZm aWNlcyB0byBwcmV2ZW50IHVuc2FmZQorICogY29uY3VycmVudCBUSUQgcmVjeWNsaW5nOiBpZiBh bnkgb2YgdGhlc2UgVElEcyBwb2ludCB0byBkZWFkIGhlYXAgdHVwbGVzLAorICogVkFDVVVNIGNh bm5vdCBwb3NzaWJseSByZXR1cm4gZnJvbSBhbWJ1bGtkZWxldGUgYW5kIG1hcmsgdGhlIHBvaW50 ZWQtdG8KKyAqIGhlYXAgcGFnZXMgYXMgYWxsLXZpc2libGUuICBWQUNVVU0gX2Nhbl8gZG8gc28g b25jZSB3ZSByZWxlYXNlIHRoZSBiYXRjaCdzCisgKiBwaW4sIGJ1dCB0aGF0J3Mgb2theTsgd2Un bGwgYmUgd29ya2luZyBvZmYgb2YgY2FjaGVkIHZpc2liaWxpdHkgaW5mbyB0aGF0CisgKiBpbmRp Y2F0ZXMgdGhhdCB0aGUgZGVhZCBUSURzIGFyZSBOT1QgYWxsLXZpc2libGUuCisgKgorICogTm90 ZTogV2UgY2Fubm90IGRyb3AgdGhlIHBpbiBlYXJseSB3aGVuIHRoZSBzY2FuIHVzZXMgYSBub24t TVZDQyBzbmFwc2hvdDsKKyAqIHdlIG11c3QgZGVsYXkgaXQgdW50aWwgYWxsIGhlYXAgZmV0Y2hl cyBmb3IgdGhlIGxvYWRlZCBiYXRjaCBoYXZlIHRha2VuCisgKiBwbGFjZS4gIFRoaXMgaXMgd2h5 IHdlIGRvbid0IHN1cHBvcnQgcHJlZmV0Y2hpbmcgZHVyaW5nIHN1Y2ggc2NhbnMuICBTZWUKKyAq IGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwuCisgKgogICogTm90ZSBvbiBNZW1vcnkgT3JkZXJp bmcgRWZmZWN0cwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKQEAgLTQ5 MiwxMSArNTQxLDEzIEBAIHN0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IEluZGV4U2NhbkJhdGNoCiBo ZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAogCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JCYXRjaCwgQmF0Y2hSaW5nSXRlbVBv cyAqcG9zKQogeworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBE YXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKIAlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5VTEw7 CiAJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZ ID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKIAogCS8qIFhYWDogd2Ugc2hvdWxkIGFzc2VydCB0aGF0 IGEgc25hcHNob3QgaXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KIAlBc3NlcnQoVHJhbnNhY3Rp b25JZElzVmFsaWQoUmVjZW50WG1pbikpOworCUFzc2VydChkaXJlY3Rpb24gPT0gaHNjYW4tPnhz X3JlYWRfc3RyZWFtX2Rpcik7CiAKIAlpZiAoIXByaW9yQmF0Y2gpCiAJewpAQCAtNTY1LDkgKzYx NiwzOSBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCQkgKi8KIAkJaWYgKHVubGlrZWx5KHNjYW4tPnhzX3JlYWRfZXh0 cmVtYWxfb25seSkgJiYgcHJpb3JCYXRjaCkKIAkJeworCQkJQXNzZXJ0KCFoc2Nhbi0+eHNfcmVh ZF9zdHJlYW0pOwogCQkJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CiAJCQlyZXR1cm4gTlVM TDsKIAkJfQorCisJCS8qCisJCSAqIERlbGF5IGluaXRpYWxpemluZyBzdHJlYW0gdW50aWwgcmVh ZGluZyBmcm9tIHNjYW4ncyBzZWNvbmQgYmF0Y2guCisJCSAqIFRoaXMgaGV1cmlzdGljIGF2b2lk cyB3YXN0aW5nIGN5Y2xlcyBvbiBzdGFydGluZyBhIHJlYWQgc3RyZWFtIGZvcgorCQkgKiB2ZXJ5 IHNlbGVjdGl2ZSBpbmRleCBzY2Fucy4gIFdlIGNhbiBsaWtlbHkgaW1wcm92ZSB1cG9uIHRoaXMs IGJ1dAorCQkgKiBpdCB3b3JrcyB3ZWxsIGVub3VnaCBmb3Igbm93LgorCQkgKgorCQkgKiBBbHNv IGF2b2lkIHByZWZldGNoaW5nIGR1cmluZyBzY2FucyB3aGVyZSB3ZSdyZSB1bmFibGUgdG8gZHJv cCBlYWNoCisJCSAqIGJhdGNoJ3MgYnVmZmVyIHBpbiByaWdodCBhd2F5IChub24tTVZDQyBzbmFw c2hvdCBzY2FucykuICBXZSBhcmUKKwkJICogbm90IHByZXBhcmVkIHRvIHNlbnNpYmx5IGxpbWl0 IHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVyIHBpbnMgaGVsZAorCQkgKiAocmVhZCBzdHJlYW0g aGFuZGxlcyBhbGwgcGluIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIHVzLCBhbmQga25vd3MKKwkJ ICogbm90aGluZyBhYm91dCBwaW5zIGhlbGQgb24gaW5kZXggcGFnZXMvd2l0aGluIGJhdGNoZXMp LgorCQkgKgorCQkgKiBBbHNvIGRlbGF5IGNyZWF0aW5nIGEgcmVhZCBzdHJlYW0gZHVyaW5nIGlu ZGV4LW9ubHkgc2NhbnMgdGhhdAorCQkgKiBoYXZlbid0IGRvbmUgYW55IGhlYXAgZmV0Y2hlcyB5 ZXQuICBXZSBkb24ndCB3YW50IHRvIHdhc3RlIGFueQorCQkgKiBjeWNsZXMgb24gYWxsb2NhdGlu ZyBhIHJlYWQgc3RyZWFtIHVudGlsIHdlIGhhdmUgYSBkZW1vbnN0cmF0ZWQKKwkJICogbmVlZCBm b3IgcGVyZm9ybSBoZWFwIGZldGNoZXMuCisJCSAqLworCQlpZiAoIWhzY2FuLT54c19yZWFkX3N0 cmVhbSAmJiBwcmlvckJhdGNoICYmIHNjYW4tPk1WQ0NTY2FuICYmCisJCQloc2Nhbi0+eHNfYmxr ICE9IEludmFsaWRCbG9ja051bWJlciAmJgkvKiBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCQkJ ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCkKKwkJeworCQkJQXNzZXJ0KCFiYXRjaHJpbmdidWYt PnByZWZldGNoUG9zLnZhbGlkKTsKKworCQkJaHNjYW4tPnhzX3JlYWRfc3RyZWFtID0KKwkJCQly ZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVBTV9ERUZBVUxULCBOVUxMLAorCQkJ CQkJCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLAorCQkJCQkJCQkJCSAg IGhlYXBhbV9nZXRuZXh0X3N0cmVhbSwgc2NhbiwgMCk7CisJCX0KIAl9CiAJZWxzZQogCXsKQEAg LTU5Miw2ICs2NzMsMzIgQEAgaGVhcGFtX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAlyZXR1cm4gYmF0Y2g7CiB9CiAKKy8qCisgKiBI YW5kbGUgYSBjaGFuZ2UgaW4gaW5kZXggc2NhbiBkaXJlY3Rpb24gKGF0IHRoZSB0dXBsZSBncmFu dWxhcml0eSkuCisgKgorICogUmVzZXRzIHRoZSByZWFkIHN0cmVhbSwgc2luY2Ugd2UgY2FuJ3Qg cmVseSBvbiBzY2FuUG9zIGNvbnRpbnVpbmcgdG8gYWdyZWUKKyAqIHdpdGggdGhlIGJsb2NrcyB0 aGF0IHJlYWQgc3RyZWFtIGFscmVhZHkgY29uc3VtZWQgdXNpbmcgcHJlZmV0Y2hQb3MuCisgKgor ICogTm90ZTogaWZmIHRoZSBzY2FuIF9jb250aW51ZXNfIGluIHRoaXMgbmV3IGRpcmVjdGlvbiwg YW5kIGFjdHVhbGx5IHN0ZXBzCisgKiBvZmYgc2NhbkJhdGNoIHRvIGFuIGVhcmxpZXIgaW5kZXgg cGFnZSwgaGVhcGFtX2JhdGNoX2dldG5leHQgd2lsbCBkZWFsIHdpdGgKKyAqIGl0LiAgQnV0IHRo YXQgbWlnaHQgbmV2ZXIgaGFwcGVuOyB0aGUgc2NhbiBtaWdodCB5ZXQgY2hhbmdlIGRpcmVjdGlv biBhZ2FpbgorICogKG9yIGp1c3QgZW5kIGJlZm9yZSByZXR1cm5pbmcgbW9yZSBpdGVtcykuCisg Ki8KK3N0YXRpYyBwZ19ub2lubGluZSB2b2lkCitoZWFwYW1fZGlyY2hhbmdlX3JlYWRzdHJlYW1f cmVzZXQoSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJICBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKKwkJCQkJCQkJICBCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZikKK3sK KwkvKiBSZXNldCByZWFkIHN0cmVhbSBzdGF0ZSAqLworCWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQ b3MudmFsaWQgPSBmYWxzZTsKKwloc2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7CisJaHNjYW4tPnhz X3JlYWRfc3RyZWFtX2RpciA9IGRpcmVjdGlvbjsKKworCS8qIFJlc2V0IHJlYWQgc3RyZWFtIGl0 c2VsZiAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCXJlYWRfc3RyZWFtX3Jlc2V0 KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlo ZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQgLSBnZXQgbmV4dCBUSUQgZnJvbSBiYXRjaCByaW5nIGJ1 ZmZlcgogICoKQEAgLTYxMCw2ICs3MTcsMTIgQEAgaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAlBc3NlcnQoIXNj YW5Qb3MtPnZhbGlkIHx8IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNo KTsKIAlBc3NlcnQoc2NhblBvcy0+dmFsaWQgfHwgaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2Fu KSA9PSAwKTsKIAorCS8qIEhhbmRsZSByZXNldHRpbmcgdGhlIHJlYWQgc3RyZWFtIHdoZW4gc2Nh biBkaXJlY3Rpb24gY2hhbmdlcyAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID09 IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKQorCQloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0g ZGlyZWN0aW9uOwkvKiBmaXJzdCBjYWxsICovCisJZWxzZSBpZiAodW5saWtlbHkoaHNjYW4tPnhz X3JlYWRfc3RyZWFtX2RpciAhPSBkaXJlY3Rpb24pKQorCQloZWFwYW1fZGlyY2hhbmdlX3JlYWRz dHJlYW1fcmVzZXQoaHNjYW4sIGRpcmVjdGlvbiwgYmF0Y2hyaW5nYnVmKTsKKwogCS8qCiAJICog Q2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyBsb2FkZWQgc2NhbkJhdGNoIGZvciB1cyB0byBy ZXR1cm4gdGhlIG5leHQKIAkgKiBtYXRjaGluZyBpdGVtJ3MgVElEL2luZGV4IHR1cGxlIGZyb20K QEAgLTYxOCw3ICs3MzEsNyBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogCXsKIAkJLyoKIAkJICogc2NhblBv cyBpcyB2YWxpZCwgc28gc2NhbkJhdGNoIG11c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0Y2gg cmluZwotCQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZS4KKwkJICogYnVmZmVyLiAg V2UgcmVseSBvbiB0aGF0IGhlcmUgKGNhbid0IGRvIHRoaXMgd2l0aCBwcmVmZXRjaEJhdGNoKS4K IAkJICovCiAJCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRj aCk7CiAKQEAgLTY2MywyMSArNzc2LDI3NCBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogCXsKIAkJSW5kZXhT Y2FuQmF0Y2ggaGVhZEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLAogCQkJCQkJCQkJCQkJ CWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwkJQmF0Y2hSaW5nSXRlbVBvcyAqcHJlZmV0Y2hQ b3MgPSAmYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvczsKIAogCQkvKiBmcmVlIG9ic29sZXNjZW50 IGhlYWQgYmF0Y2ggKHVubGVzcyBpdCBpcyBzY2FuJ3MgbWFya0JhdGNoKSAqLwogCQl0YWJsZWFt X3V0aWxfZnJlZV9iYXRjaChzY2FuLCBoZWFkQmF0Y2gpOwogCisJCS8qCisJCSAqIElmIHdlJ3Jl IGFib3V0IHRvIHJlbGVhc2UgdGhlIGJhdGNoIHRoYXQgcHJlZmV0Y2hQb3MgY3VycmVudGx5CisJ CSAqIHBvaW50cyB0bywganVzdCBpbnZhbGlkYXRlIHByZWZldGNoUG9zLiAgV2UnbGwgcmVpbml0 aWFsaXplIGl0CisJCSAqIHVzaW5nIHNjYW5Qb3MgaWYgYW5kIHdoZW4gaGVhcGFtX2dldG5leHRf c3RyZWFtIGlzIG5leHQgY2FsbGVkLiAoV2UKKwkJICogbXVzdCBhdm9pZCBjb25mdXNpbmcgYSBw cmVmZXRjaFBvcy0+YmF0Y2ggdGhhdCdzIGFjdHVhbGx5IGJlZm9yZQorCQkgKiBoZWFkQmF0Y2gg d2l0aCBvbmUgdGhhdCdzIGFmdGVyIG5leHRCYXRjaCBkdWUgdG8gdWludDggb3ZlcmZsb3c7CisJ CSAqIHNpbXBsZXN0IHdheSBpcyB0byBpbnZhbGlkYXRlIHByZWZldGNoUG9zIGxpa2UgdGhpcy4p CisJCSAqLworCQlpZiAocHJlZmV0Y2hQb3MtPnZhbGlkICYmCisJCQlwcmVmZXRjaFBvcy0+YmF0 Y2ggPT0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpCisJCQlwcmVmZXRjaFBvcy0+dmFsaWQgPSBm YWxzZTsKKwogCQkvKiBSZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhlIHJpbmcgYnVmZmVyICovCiAJ CWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKys7CisKKwkJaWYgKGhzY2FuLT54c19wYXVzZWQpCisJ CXsKKwkJCS8qCisJCQkgKiBUaGUgc2NhbidzIHJlYWQgc3RyZWFtIHdhcyBwYXVzZWQgYnkgaGVh cGFtX2dldG5leHRfc3RyZWFtIGR1ZQorCQkJICogdG8gZXhoYXVzdGluZyBhbGwgYXZhaWxhYmxl IGZyZWUgYmF0Y2ggc2xvdHMuICBXZSBqdXN0IGZyZWVkIHVwCisJCQkgKiBvbmUgc3VjaCBzbG90 IG5vdywgdGhvdWdoLiAgUmVzdW1lIHRoZSByZWFkIHN0cmVhbSB0byByZS1lbmFibGUKKwkJCSAq IHByZWZldGNoaW5nLgorCQkJICovCisJCQlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVsbChz Y2FuKSk7CisJCQlyZWFkX3N0cmVhbV9yZXN1bWUoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwkJ CWhzY2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwkJfQogCX0KIAogCS8qIEluIHByYWN0aWNlIHNj YW5CYXRjaCB3aWxsIGFsd2F5cyBiZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KIAlB c3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCUFzc2Vy dCghaHNjYW4tPnhzX3BhdXNlZCk7CiAKIAlyZXR1cm4gaGVhcGFtX2JhdGNoX3JldHVybl90aWQo c2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBzY2FuUG9zLAogCQkJCQkJCQkgICBh bGxfdmlzaWJsZSk7CiB9CiAKKy8qCisgKiBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0KKyAqCQlyZXR1 cm4gdGhlIG5leHQgYmxvY2sgdG8gcGFzcyB0byB0aGUgcmVhZCBzdHJlYW0KKyAqCisgKiBUaGUg aW5pdGlhbCBiYXRjaCBpcyBhbHdheXMgbG9hZGVkIGJ5IGhlYXBhbV9iYXRjaF9nZXRuZXh0X3Rp ZC4gIFdlIGRvbid0CisgKiBnZXQgY2FsbGVkIHVudGlsIHRoZSBmaXJzdCByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcigpIGNhbGwsIHdoZW4gYSBoZWFwCisgKiBibG9jayBpcyByZXF1ZXN0ZWQgZnJv bSB0aGUgc2NhbidzIHN0cmVhbSBmb3IgdGhlIGZpcnN0IHRpbWUuCisgKgorICogVGhlIHBvc2l0 aW9uIG9mIHRoZSByZWFkX3N0cmVhbSBpcyBzdG9yZWQgaW4gcHJlZmV0Y2hQb3MuICBJdCBpcyB0 eXBpY2FsIGZvcgorICogcHJlZmV0Y2hQb3MgdG8gY29uc2lzdGVudGx5IHN0YXkgYWhlYWQgb2Yg dGhlIHNjYW5Qb3MgcG9zaXRpb24gdGhhdCdzIHVzZWQgdG8KKyAqIHRyYWNrIHRoZSBuZXh0IFRJ RCB0byBiZSByZXR1cm5lZCB0byB0aGUgc2NhbiBieSBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQK KyAqIGFmdGVyIHRoZSBmaXJzdCB0aW1lIHdlIGdldCBjYWxsZWQuICBIb3dldmVyLCB0aGF0IGlz bid0IGEgcHJlY29uZGl0aW9uLgorICogVGhlcmUgaXMgYSBzdHJpY3QgcG9zdGNvbmRpdGlvbiwg dGhvdWdoOiB3aGVuIHdlIHJldHVybiB3ZSdsbCBhbHdheXMgbGVhdmUKKyAqIHNjYW5Qb3MgPD0g cHJlZmV0Y2hQb3MgKGV4Y2VwdCBpbiBjYXNlcyB3aGVyZSB3ZSByZXR1cm4gSW52YWxpZEJsb2Nr TnVtYmVyKS4KKyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1fZ2V0bmV4dF9zdHJlYW0o UmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCSAg dm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2NhbiA9IChJbmRleFNj YW5EZXNjKSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2Nh biA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCUJhdGNoUmlu Z0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJ dGVtUG9zICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvczsKKwlCYXRjaFJpbmdJdGVt UG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOworCVNjYW5EaXJl Y3Rpb24geHNfcmVhZF9zdHJlYW1fZGlyID0gaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpcjsKKwlJ bmRleFNjYW5CYXRjaCBwcmVmZXRjaEJhdGNoOworCWJvb2wJCWZyb21TY2FuUG9zID0gZmFsc2U7 CisKKwkvKgorCSAqIHNjYW5Qb3MgbXVzdCBhbHdheXMgYmUgdmFsaWQgd2hlbiBwcmVmZXRjaGlu ZyB0YWtlcyBwbGFjZS4gIFRoZXJlIGhhcworCSAqIHRvIGJlIGF0IGxlYXN0IG9uZSBiYXRjaCwg bG9hZGVkIGFzIG91ciBzY2FuQmF0Y2guICBUaGUgc2NhbiBkaXJlY3Rpb24KKwkgKiBtdXN0IGJl IGVzdGFibGlzaGVkLCB0b28uCisJICovCisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfY291bnQo c2NhbikgPiAwKTsKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCUFzc2VydChzY2FuUG9zLT52 YWxpZCk7CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcGF1c2VkKTsKKwlBc3NlcnQoeHNfcmVhZF9zdHJl YW1fZGlyICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKworCS8qCisJICogcHJlZmV0Y2hQ b3MgbWlnaHQgbm90IHlldCBiZSB2YWxpZC4gIEl0IG1pZ2h0IGhhdmUgYWxzbyBmYWxsZW4gYmVo aW5kCisJICogc2NhblBvcy4gIERlYWwgd2l0aCBib3RoLgorCSAqCisJICogSWYgcHJlZmV0Y2hQ b3MgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldCwgdGhhdCB0eXBpY2FsbHkgaW5kaWNhdGVz CisJICogdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRpcmUgc2Nh bi4gIFdlIGluaXRpYWxpemUKKwkgKiBwcmVmZXRjaFBvcyB1c2luZyB0aGUgY3VycmVudCBzY2Fu UG9zLCBzaW5jZSB0aGUgY3VycmVudCBzY2FuQmF0Y2gKKwkgKiBpdGVtJ3MgVElEIHNob3VsZCBo YXZlIGl0cyBibG9jayBudW1iZXIgcmV0dXJuZWQgYnkgdGhlIHJlYWQgc3RyZWFtCisJICogZmly c3QuICBJdCdzIGxpa2VseSB0aGF0IHByZWZldGNoUG9zIHdpbGwgZ2V0IGFoZWFkIG9mIHNjYW5Q b3MgYmVmb3JlCisJICogbG9uZywgYnV0IHRoYXQgaGFzbid0IGhhcHBlbmVkIHlldC4KKwkgKgor CSAqIEl0J3MgYWxzbyBwb3NzaWJsZSBmb3IgcHJlZmV0Y2hQb3MgdG8gImZhbGwgYmVoaW5kIiBz Y2FuUG9zLCBhdCBsZWFzdAorCSAqIGluIGEgdHJpdmlhbCBzZW5zZTogaWYgbWFueSBhZGphY2Vu dCBpdGVtcyBhcmUgcmV0dXJuZWQgdGhhdCBjb250YWluCisJICogVElEcyB0aGF0IHBvaW50IHRv IHRoZSBzYW1lIGhlYXAgYmxvY2ssIHNjYW5Qb3MgY2FuIGFjdHVhbGx5IG92ZXJ0YWtlCisJICog cHJlZmV0Y2hQb3MgKHByZWZldGNoUG9zIGNhbid0IGFkdmFuY2UgdW50aWwgdGhlIHNjYW4gYWN0 dWFsbHkgY2FsbHMKKwkgKiByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcikuICBSZWluaXRpYWxpemlu ZyBmcm9tIHNjYW5Qb3MgaXMgZW5vdWdoIHRvCisJICogZW5zdXJlIHRoYXQgcHJlZmV0Y2hQb3Mg c3RpbGwgZmV0Y2hlcyB0aGUgbmV4dCBoZWFwIGJsb2NrIHRoYXQgc2NhblBvcworCSAqIHdpbGwg cmVxdWlyZSAocHJlZmV0Y2hQb3MgY2FuIG5ldmVyIGZhbGwgYmVoaW5kICJieSBtb3JlIHRoYW4g b25lIGdyb3VwCisJICogb2YgaXRlbXMgdGhhdCBhbGwgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcCBi bG9jayIsIHNvIHRoaXMgaXMgc2FmZSkuCisJICoKKwkgKiBOb3RlOiB3aGVuIGhlYXBhbV9iYXRj aF9nZXRuZXh0X3RpZCBmcmVlcyBhIGJhdGNoIHRoYXQgcHJlZmV0Y2hQb3MKKwkgKiBwb2ludHMg dG8sIGl0J2xsIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MgZm9yIHVzLiAgVGhpcyByZW1vdmVzIGFu eQorCSAqIGRhbmdlciBvZiBwcmVmZXRjaFBvcy5iYXRjaCBmYWxsaW5nIHNvIGZhciBiZWhpbmQg c2NhblBvcy5iYXRjaCB0aGF0IGl0CisJICogd3JhcHMgYXJvdW5kIChhbmQgYXBwZWFycyB0byBi ZSBhaGVhZCBvZiBzY2FuUG9zIGluc3RlYWQgb2YgYmVoaW5kIGl0KS4KKwkgKi8KKwlpZiAoIXBy ZWZldGNoUG9zLT52YWxpZCB8fAorCQlpbmRleF9zY2FuX3Bvc19jbXAocHJlZmV0Y2hQb3MsIHNj YW5Qb3MsIHhzX3JlYWRfc3RyZWFtX2RpcikgPCAwKQorCXsKKwkJaHNjYW4tPnhzX3ByZWZldGNo X2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQkqcHJlZmV0Y2hQb3MgPSAqc2NhblBvczsK KwkJZnJvbVNjYW5Qb3MgPSB0cnVlOworCisJCS8qCisJCSAqIFdlIG11c3QgYXZvaWQgaG9sZGlu ZyBvbiB0byBhbnkgYmF0Y2gncyBidWZmZXIgcGluIGZvciBtb3JlIHRoYW4gYW4KKwkJICogaW5z dGFudCwgdG8gYXZvaWQgdW5kZXNpcmFibGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHNjYW4ncyBy ZWFkCisJCSAqIHN0cmVhbS4gIGJhdGNoSW1tZWRpYXRlUmVsZWFzZSBzY2FucyBhbHdheXMgZ2V0 IHRoaXMgYmVoYXZpb3IKKwkJICogYXV0b21hdGljYWxseS4gIE90aGVyIHR5cGVzIG9mIHNjYW5z ICh0aGVzZSBhcmUgYWxsIGluZGV4LW9ubHkKKwkJICogc2NhbnMgaW4gcHJhY3RpY2UpIGFyZSBt YWRlIHRvIGRyb3AgdGhlaXIgYnVmZmVyIHBpbiBlYWdlcmx5CisJCSAqIHRocm91Z2ggYSBwb2xp Y3kgb2YgYWx3YXlzIGVhZ2VybHkgc2V0dGluZyBhbGwgdGhlIGJhdGNoIGl0ZW0ncworCQkgKiB2 aXNpYmlsaXR5IGluZm8gaW4gb25lIGdvLgorCQkgKi8KKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1 cCkKKwkJeworCQkJSGVhcEJhdGNoRGF0YSAqaGJhdGNoOworCisJCQkvKiBNYWtlIGhlYXBhbV9i YXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkgcmVsZWFzZSByZXNvdXJjZXMgZWFnZXJseSAqLworCQkJ aHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nhbi0+bWF4aXRlbXNiYXRjaDsKKworCQkJLyogTWFrZSBz dXJlIHRoYXQgdGhpcyBuZXcgcHJlZmV0Y2hCYXRjaCBoYXMgbm8gcmVzb3VyY2VzIGhlbGQgKi8K KwkJCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHByZWZldGNoUG9zLT5i YXRjaCk7CisJCQloYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEocHJlZmV0Y2hCYXRjaCwgc2Nhbik7 CisKKwkJCS8qIFNldCB2aXNpYmlsaXR5IGluZm8gbm90IHNldCB0aHJvdWdoIHNjYW5CYXRjaCAq LworCQkJaGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eShzY2FuLCB4c19yZWFkX3N0cmVh bV9kaXIsCisJCQkJCQkJCQkJCXByZWZldGNoQmF0Y2gsIGhiYXRjaCwKKwkJCQkJCQkJCQkJcHJl ZmV0Y2hQb3MpOworCQl9CisJCWVsc2UKKwkJCUFzc2VydChzY2FuLT5iYXRjaEltbWVkaWF0ZVJl bGVhc2UpOworCX0KKworCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHBy ZWZldGNoUG9zLT5iYXRjaCk7CisJZm9yICg7OykKKwl7CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpp dGVtOworCQlCbG9ja051bWJlciBwcmVmZXRjaF9ibG9jazsKKworCQkvKgorCQkgKiBXZSBuZXZl ciBjYWxsIGFtZ2V0YmF0Y2ggd2l0aG91dCBpbW1lZGlhdGVseSByZWxlYXNpbmcgdGhlIGJhdGNo J3MKKwkJICogaW5kZXggQU0gcmVzb3VyY2VzICh3aGljaCByZXF1aXJlcyBzcGVjaWFsIGNhcmUg ZHVyaW5nIGluZGV4LW9ubHkKKwkJICogc2NhbnMpLiAgVGhlIHJlYWQgc3RyZWFtIGlzIHNlbnNp dGl2ZSB0byBidWZmZXIgc2hvcnRhZ2VzLCBzbyB3ZQorCQkgKiBkZWZlbnNpdmVseSBhdm9pZCBh bnl0aGluZyB0aGF0IHZpc2libHkgYWZmZWN0cyB0aGUgcGVyLWJhY2tlbmQKKwkJICogYnVmZmVy IGxpbWl0LgorCQkgKi8KKworCQlpZiAoZnJvbVNjYW5Qb3MpCisJCXsKKwkJCS8qCisJCQkgKiBE b24ndCBpbmNyZW1lbnQgaXRlbSB3aGVuIHByZWZldGNoUG9zIHdhcyBqdXN0IGluaXRpYWxpemVk CisJCQkgKiB1c2luZyBzY2FuUG9zLiAgV2UnbGwgcmV0dXJuIHRoZSBzY2FuUG9zIGl0ZW0ncyBo ZWFwIGJsb2NrCisJCQkgKiBkaXJlY3RseSBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlLiAgSW4gb3Ro ZXIgd29yZHMsIHdlJ2xsIHJldHVybgorCQkJICogdGhlIGhlYXAgYmxvY2sgZm9yIHRoZSBUSUQg cGFzc2VkIHRvIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZQorCQkJICogYXQgdGhlIHBvaW50IHdo ZXJlIGl0IGNhbGxlZCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciBmb3IgdGhlCisJCQkgKiBmaXJz dCB0aW1lIGR1cmluZyB0aGUgc2Nhbi4KKwkJCSAqLworCQkJZnJvbVNjYW5Qb3MgPSBmYWxzZTsK KwkJfQorCQllbHNlIGlmICghaW5kZXhfc2Nhbl9wb3NfYWR2YW5jZSh4c19yZWFkX3N0cmVhbV9k aXIsCisJCQkJCQkJCQkJIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKSkKKwkJeworCQkJLyoK KwkJCSAqIFJhbiBvdXQgb2YgaXRlbXMgZnJvbSBwcmVmZXRjaEJhdGNoLiAgVHJ5IHRvIGFkdmFu Y2UgdG8gdGhlCisJCQkgKiBzY2FuJ3MgbmV4dCBiYXRjaC4KKwkJCSAqLworCQkJaWYgKHVubGlr ZWx5KGluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBD YW4ndCBhZHZhbmNlIHByZWZldGNoQmF0Y2ggYmVjYXVzZSBhbGwgYXZhaWxhYmxlCisJCQkJICog YmF0Y2hyaW5nYnVmIGJhdGNoIHNsb3RzIGFyZSBjdXJyZW50bHkgaW4gdXNlLgorCQkJCSAqCisJ CQkJICogRGVhbCB3aXRoIHRoaXMgYnkgbW9tZW50YXJpbHkgcGF1c2luZyB0aGUgcmVhZCBzdHJl YW0uCisJCQkJICogaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkIHdpbGwgcmVzdW1lIHRoZSByZWFk IHN0cmVhbSBsYXRlciwKKwkJCQkgKiB0aG91Z2ggb25seSBhZnRlciBzY2FuUG9zIGhhcyBjb25z dW1lZCBhbGwgcmVtYWluaW5nIGl0ZW1zCisJCQkJICogZnJvbSBzY2FuQmF0Y2ggKGF0IHdoaWNo IHBvaW50IHNjYW5CYXRjaCB3aWxsIGJlIGZyZWVkLAorCQkJCSAqIG1ha2luZyBpdHMgc2xvdCBh dmFpbGFibGUgZm9yIHJldXNlIGJ5IGEgbGF0ZXIgYmF0Y2gpLgorCQkJCSAqCisJCQkJICogSW4g cHJhY3RpY2Ugd2UgaGFyZGx5IGV2ZXIgbmVlZCB0byBkbyB0aGlzLiAgSXQgd291bGQgYmUKKwkJ CQkgKiBwb3NzaWJsZSB0byBhdm9pZCB0aGUgbmVlZCB0byBwYXVzZSB0aGUgcmVhZCBzdHJlYW0g YnkKKwkJCQkgKiBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHNsb3RzLCBidXQgdGhhdCB3b3VsZCBh ZGQgY29tcGxleGl0eQorCQkJCSAqIGZvciBubyByZWFsIGJlbmVmaXQuCisJCQkJICovCisJCQkJ aHNjYW4tPnhzX3BhdXNlZCA9IHRydWU7CisJCQkJcmV0dXJuIHJlYWRfc3RyZWFtX3BhdXNlKHN0 cmVhbSk7CisJCQl9CisKKwkJCXByZWZldGNoQmF0Y2ggPSBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChz Y2FuLCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQkgcHJlZmV0Y2hCYXRjaCwgcHJl ZmV0Y2hQb3MpOworCQkJaWYgKCFwcmVmZXRjaEJhdGNoKQorCQkJeworCQkJCS8qCisJCQkJICog RmFpbGVkIHRvIGxvYWQgbmV4dCBiYXRjaCwgc28gYWxsIHRoZSBiYXRjaGVzIHRoYXQgdGhlIHNj YW4KKwkJCQkgKiB3aWxsIGV2ZXIgcmVxdWlyZSAoYmFycmluZyBhIGNoYW5nZSBpbiBzY2FuIGRp cmVjdGlvbikgYXJlCisJCQkJICogbm93IGxvYWRlZAorCQkJCSAqLworCQkJCXJldHVybiBJbnZh bGlkQmxvY2tOdW1iZXI7CisJCQl9CisKKwkJCS8qIFBvc2l0aW9uIHByZWZldGNoUG9zIHRvIHRo ZSBzdGFydCBvZiBuZXcgcHJlZmV0Y2hCYXRjaCAqLworCQkJaW5kZXhfc2Nhbl9wb3NfbmV4dGJh dGNoKHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCSBwcmVmZXRjaEJhdGNoLCBwcmVmZXRj aFBvcyk7CisKKwkJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCQl7CisJCQkJSGVhcEJhdGNo RGF0YSAqaGJhdGNoID0gaGVhcF9iYXRjaF9kYXRhKHByZWZldGNoQmF0Y2gsIHNjYW4pOworCisJ CQkJLyogbWFrZSBzdXJlIHdlIGhhdmUgdmlzaWJpbGl0eSBpbmZvIGZvciB0aGUgZW50aXJlIGJh dGNoICovCisJCQkJaGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eShzY2FuLCB4c19yZWFk X3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQlwcmVmZXRjaEJhdGNoLCBoYmF0Y2gsCisJCQkJCQkJ CQkJCQlwcmVmZXRjaFBvcyk7CisJCQl9CisJCQllbHNlCisJCQkJQXNzZXJ0KHNjYW4tPmJhdGNo SW1tZWRpYXRlUmVsZWFzZSk7CisJCX0KKworCQkvKgorCQkgKiBwcmVmZXRjaFBvcyBub3cgcG9p bnRzIHRvIHRoZSBuZXh0IGl0ZW0gd2hvc2UgVElEJ3MgaGVhcCBibG9jaworCQkgKiBudW1iZXIg bWlnaHQgbmVlZCB0byBiZSBwcmVmZXRjaGVkCisJCSAqLworCQlBc3NlcnQoaW5kZXhfc2Nhbl9i YXRjaChzY2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gpID09IHByZWZldGNoQmF0Y2gpOworCQlBc3Nl cnQocHJlZmV0Y2hQb3MtPml0ZW0gPj0gcHJlZmV0Y2hCYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkg ICBwcmVmZXRjaFBvcy0+aXRlbSA8PSBwcmVmZXRjaEJhdGNoLT5sYXN0SXRlbSk7CisJCS8qIHNj YW5Qb3MgaXMgYWx3YXlzIDw9IHByZWZldGNoUG9zIHdoZW4gd2UgcmV0dXJuICovCisJCUFzc2Vy dChpbmRleF9zY2FuX3Bvc19jbXAoc2NhblBvcywgcHJlZmV0Y2hQb3MsIHhzX3JlYWRfc3RyZWFt X2RpcikgPD0gMCk7CisKKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJSGVhcEJh dGNoRGF0YSAqaGJhdGNoID0gaGVhcF9iYXRjaF9kYXRhKHByZWZldGNoQmF0Y2gsIHNjYW4pOwor CisJCQlBc3NlcnQoaGJhdGNoLT52aXNJbmZvW3ByZWZldGNoUG9zLT5pdGVtXSAmIEJBVENIX1ZJ U19DSEVDS0VEKTsKKwkJCWlmIChoYmF0Y2gtPnZpc0luZm9bcHJlZmV0Y2hQb3MtPml0ZW1dICYg QkFUQ0hfVklTX0FMTF9WSVNJQkxFKQorCQkJeworCQkJCS8qIGl0ZW0gaXMga25vd24gdG8gYmUg YWxsLXZpc2libGUgLS0gZG9uJ3QgcHJlZmV0Y2ggKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJ fQorCisJCWl0ZW0gPSAmcHJlZmV0Y2hCYXRjaC0+aXRlbXNbcHJlZmV0Y2hQb3MtPml0ZW1dOwor CQlwcmVmZXRjaF9ibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJml0ZW0tPnRhYmxl VGlkKTsKKworCQlpZiAocHJlZmV0Y2hfYmxvY2sgPT0gaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2Nr KQorCQl7CisJCQkvKgorCQkJICogcHJlZmV0Y2hfYmxvY2sgbWF0Y2hlcyB0aGUgbGFzdCBwcmVm ZXRjaFBvcyBpdGVtJ3MgVElEJ3MgaGVhcAorCQkJICogYmxvY2sgbnVtYmVyOyB3ZSBtdXN0IG5v dCByZXR1cm4gdGhlIHNhbWUgcHJlZmV0Y2hfYmxvY2sgdHdpY2UKKwkJCSAqICh0d2ljZSBpbiBz dWNjZXNzaW9uKQorCQkJICovCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFdlIGhhdmUgYSBu ZXcgaGVhcCBibG9jayBudW1iZXIgdG8gcmV0dXJuIHRvIHJlYWQgc3RyZWFtICovCisJCWhzY2Fu LT54c19wcmVmZXRjaF9ibG9jayA9IHByZWZldGNoX2Jsb2NrOworCQlyZXR1cm4gcHJlZmV0Y2hf YmxvY2s7CisJfQorCisJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKK30KKwogLyogLS0tLS0t LS0tLS0tLS0tLQogICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhl YXAgdHVwbGUKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhi YXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwppbmRleCBhOWE3 MjgxMGYuLmUyNzJkYWI5ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2lu ZGV4YmF0Y2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCkBA IC0xMCw3ICsxMCwxMCBAQAogICogYXBwcm9hY2ggZW5hYmxlcyBlZmZpY2llbnQgcHJlZmV0Y2hp bmcgb2YgdGFibGUgQU0gYmxvY2tzIGR1cmluZyBvcmRlcmVkCiAgKiBpbmRleCBzY2Fucy4KICAq Ci0gKiBUaGUgcmluZyBidWZmZXIgbG9hZHMgYmF0Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2Ugb3Jk ZXIuCisgKiBUaGUgcmluZyBidWZmZXIgbG9hZHMgYmF0Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2Ug b3JkZXIuICBUaGlzIGFsbG93cyB0aGUKKyAqIHRhYmxlIEFNIHRvIG1haW50YWluIGFuIGFkZXF1 YXRlIHByZWZldGNoIGRpc3RhbmNlOiBpdHMgcmVhZCBzdHJlYW0KKyAqIGNhbGxiYWNrIGlzIHRo ZXJlYnkgYWJsZSB0byByZXF1ZXN0IHRhYmxlIGJsb2NrcyByZWZlcmVuY2VkIGJ5IGluZGV4IHBh Z2VzCisgKiB0aGF0IGFyZSB3ZWxsIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24n cyBpbmRleCBwYWdlLgogICoKICAqIFRoZXJlJ3MgdGhyZWUgdHlwZXMgb2YgZnVuY3Rpb25zIGlu IHRoaXMgbW9kdWxlOgogICoKQEAgLTI4LDYgKzMxLDI4IEBACiAgKiAgICBBTXMgdGhhdCBpbXBs ZW1lbnQgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgVGhlc2UgbWFuYWdlIGJhdGNoCiAgKiAg ICBhbGxvY2F0aW9uLCBpbmRleCBwYWdlIGJ1ZmZlciBsb2NrIHJlbGVhc2UsIGFuZCBiYXRjaCBt ZW1vcnkgcmVjeWNsaW5nLgogICoKKyAqIFRoZXNlIHRocmVlIGxheWVycyBjb29yZGluYXRlIHdp dGhvdXQgZXhwbGljaXQgY291cGxpbmc6IHRoZSBjb3JlIGxpZmVjeWNsZQorICogZnVuY3Rpb25z IGFzc3VtZSB0aGF0IHRhYmxlIEFNcyB1c2Ugc2NhblBvcy9zY2FuQmF0Y2ggYW5kIHByZWZldGNo UG9zLworICogcHJlZmV0Y2hCYXRjaCBpbiBhIHN0YW5kYXJkaXplZCB3YXkgKHNlZSBoZWFwYW1f aGFuZGxlci5jIGZvciB0aGUgcmVmZXJlbmNlCisgKiBpbXBsZW1lbnRhdGlvbiksIHdoaWxlIHRh YmxlIEFNcyBhc3N1bWUgdGhhdCBpbmRleCBBTXMgZnJlZSBhbmQgdW5sb2NrCisgKiBiYXRjaGVz IGFjY29yZGluZyB0byB0aGUgY29udmVudGlvbnMgZXN0YWJsaXNoZWQgaGVyZS4gIFNlZSBpbmRl eGFtLnNnbWwKKyAqIGZvciB0aGUgZnVsbCBzcGVjaWZpY2F0aW9uIG9mIHRoZSBhbWdldGJhdGNo L2Fta2lsbGl0ZW1zYmF0Y2ggY29udHJhY3QuCisgKgorICogVGhlIHRhYmxlIEFNIGZ1bGx5IGNv bnRyb2xzIHRoZSByZWFkIHN0cmVhbSBhcyBpdHMgb3duIHByaXZhdGUgc3RhdGUuCisgKiBXaGVu IHRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzLCB0aGUgdGFibGUgQU0gbXVzdCBpbW1lZGlhdGVs eSByZXNldCBpdHMKKyAqIHJlYWQgc3RyZWFtIGFuZCBpbnZhbGlkYXRlIHByZWZldGNoUG9zIC0t IGJsb2NrcyBhbHJlYWR5IHJlcXVlc3RlZCB2aWEKKyAqIHByZWZldGNoUG9zIHdpbGwgbm8gbG9u Z2VyIG1hdGNoIHdoYXQgc2NhblBvcyBuZWVkcyB0byByZXR1cm4uCisgKgorICogQ3Jvc3Npbmcg YSBiYXRjaCBib3VuZGFyeSBpbiBhIG5ldyBzY2FuIGRpcmVjdGlvbiBpcyBhIHNlcGFyYXRlIHBy b2Nlc3MsCisgKiBoYW5kbGVkIGhlcmU6IHRhYmxlIEFNcyBhcmUgcmVxdWlyZWQgdG8gY2FsbCB0 YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlCisgKiB0byBsZWF2ZSB0aGUgc2NhbidzIGJhdGNo IHJpbmcgYnVmZmVyIGluIGEgY29uc2lzdGVudCBzdGF0ZS4gIFRoZSBjdXJyZW50CisgKiBpbXBs ZW1lbnRhdGlvbiBoYW5kbGVzIHRoaXMgYnkgc2ltcGx5IGRpc2NhcmRpbmcgbW9zdCBiYXRjaGVz LiAgVGhlIGtleQorICogaW52YXJpYW50IGlzIHRoYXQgYWxsIGxvYWRlZCBiYXRjaGVzIG11c3Qg YmUgaW4gYSBjb25zaXN0ZW50IHNjYW4gZGlyZWN0aW9uCisgKiBvcmRlci4gIChEdXJpbmcgY3Jv c3MtYmF0Y2ggZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSBjdXJyZW50IHNjYW5CYXRjaCB3aWxsCisg KiBoYXZlIGl0cyBJbmRleFNjYW5CYXRjaERhdGEuZGlyIGZsaXBwZWQsIGJ1dCB3ZSBoYXZlIG5v IHByb3Zpc2lvbiBmb3IKKyAqIGtlZXBpbmcgYWxsIG90aGVyIGxvYWRlZCBiYXRjaGVzLiAgSXQn cyBub3QgY2xlYXIgdGhhdCBpdCdkIGJlIHVzZWZ1bCB0bworICogaG9sZCBvbnRvIHRoZW07IHRo ZSBzY2FuIGRpcmVjdGlvbiBpcyB1bmxpa2VseSB0byBjaGFuZ2UgYmFjay4pCisgKgogICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhl IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQogICoKQEAgLTYwLDYgKzg1LDcgQEAgaW5kZXhfYmF0 Y2hzY2FuX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLnNj YW5Qb3MudmFsaWQgPSBmYWxzZTsKIAlzY2FuLT5iYXRjaHJpbmdidWYubWFya1Bvcy52YWxpZCA9 IGZhbHNlOworCXNjYW4tPmJhdGNocmluZ2J1Zi5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOwog CiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCA9IE5VTEw7CiAJc2Nhbi0+YmF0Y2hyaW5n YnVmLmhlYWRCYXRjaCA9IDA7CS8qIGluaXRpYWwgaGVhZCBiYXRjaCAqLwpAQCAtODQsNiArMTEw LDcgQEAgaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCWJhdGNo cmluZ2J1Zi0+c2NhblBvcy52YWxpZCA9IGZhbHNlOwogCWJhdGNocmluZ2J1Zi0+bWFya1Bvcy52 YWxpZCA9IGZhbHNlOworCWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsK IAogCS8qCiAJICogRW5zdXJlIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIHdvbid0IHNraXAgdGhl IG9sZCBtYXJrQmF0Y2ggaW4gdGhlIGxvb3AKQEAgLTIyMCw3ICsyNDcsMTMgQEAgaW5kZXhfYmF0 Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqIHRoZSBjdXJyZW50IHNjYW5C YXRjaCB3aGVuIG5lZWRlZC4KICAqCiAgKiBXZSBqdXN0IGRpc2NhcmQgYWxsIGJhdGNoZXMgKG90 aGVyIHRoYW4gbWFya0JhdGNoL3Jlc3RvcmVkIHNjYW5CYXRjaCksCi0gKiBleGNlcHQgd2hlbiBt YXJrQmF0Y2ggaXMgYWxyZWFkeSB0aGUgc2NhbidzIGN1cnJlbnQgc2NhbkJhdGNoLgorICogZXhj ZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRj aC4gIFdlIGFsd2F5cworICogaW52YWxpZGF0ZSBwcmVmZXRjaFBvcy4gIFRoZSByZWFkIHN0cmVh bSBhbmQgcmVsYXRlZCBwcmVmZXRjaGluZyBzdGF0ZSBhcmUKKyAqIHJlc2V0IGJ5IHRhYmxlX2lu ZGV4X2ZldGNoX3Jlc2V0KCksIGNhbGxlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbi4gIFRoaXMKKyAq IGFwcHJvYWNoIGtlZXBzIHRoaW5ncyBzaW1wbGUgZm9yIHRhYmxlIEFNczogbW9zdCBjb2RlIHRo YXQgZGVhbHMgd2l0aAorICogYmF0Y2hlcyBpcyB0aGVyZWJ5IGFibGUgdG8gYXNzdW1lIHRoYXQg dGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNjYW4gZGlyZWN0aW9uCisgKiBuZXZlciBjaGFuZ2VzIGlz IHRoZSBvbmx5IGNhc2UgKHRhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UgdGFrZXMgYQorICog c2ltaWxhciBhcHByb2FjaCB0byBoYW5kbGluZyBhIGNyb3NzLWJhdGNoIGNoYW5nZSBpbiBzY2Fu IGRpcmVjdGlvbikuCiAgKi8KIHZvaWQKIGluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRl eFNjYW5EZXNjIHNjYW4pCkBAIC0yMzUsNiArMjY4LDE0IEBAIGluZGV4X2JhdGNoc2Nhbl9yZXN0 b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0KCFiYXRjaHJpbmdidWYtPmRvbmUp OwogCUFzc2VydChtYXJrUG9zLT52YWxpZCk7CiAKKwkvKgorCSAqIFJlc3RvcmluZyBhIG1hcmsg YWx3YXlzIHJlcXVpcmVzIHN0b3BwaW5nIHByZWZldGNoaW5nLiAgVGhpcyBpcyBzaW1pbGFyCisJ ICogdG8gdGhlIGhhbmRsaW5nIHRhYmxlIEFNcyBpbXBsZW1lbnQgdG8gZGVhbCB3aXRoIGEgdHVw bGUtbGV2ZWwgY2hhbmdlCisJICogaW4gdGhlIHNjYW4ncyBkaXJlY3Rpb24uICBUaGUgcmVhZCBz dHJlYW0gbXVzdCBoYXZlIGFscmVhZHkgYmVlbiByZXNldAorCSAqIGJ5IHRoZSBjYWxsZXIgKHZp YSB0YWJsZV9pbmRleF9mZXRjaF9yZXNldCkuCisJICovCisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRj aFBvcy52YWxpZCA9IGZhbHNlOworCiAJaWYgKHNjYW5CYXRjaCA9PSBtYXJrQmF0Y2gpCiAJewog CQkvKiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSBzY2FuQmF0Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNo cmluZ2J1ZiAqLwpAQCAtMzA0LDYgKzM0NSwxMyBAQCBpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9w b3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogICogcG9pbnQgb24gYmF0Y2hyaW5nYnVmIHdpbGwgbG9v ayBhcyBpZiBvdXIgbmV3IHNjYW4gZGlyZWN0aW9uIGhhZCBiZWVuIHVzZWQKICAqIGZyb20gdGhl IHN0YXJ0LiAgVGhpcyBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBidXQg aXQgd29ya3MKICAqIHdlbGwgZW5vdWdoIGZvciB3aGF0IG91Z2h0IHRvIGJlIGEgcmVsYXRpdmVs eSByYXJlIG9jY3VycmVuY2UuCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSByZXNldCB0aGUgc2Nh bidzIHJlYWQgc3RyZWFtIGJlZm9yZSBjYWxsaW5nIGhlcmUuICBUaGF0CisgKiBuZWVkcyB0byBo YXBwZW4gYXMgc29vbiBhcyB0aGUgc2NhbiByZXF1ZXN0cyBhIHR1cGxlIGluIHdoYXRldmVyIHNj YW4KKyAqIGRpcmVjdGlvbiBpcyBvcHBvc2l0ZS10by1jdXJyZW50LiAgV2Ugb25seSBkZWFsIHdp dGggdGhlIGNhc2Ugd2hlcmUgdGhlCisgKiBzY2FuIGJhY2tzIHVwIGJ5IGVub3VnaCBpdGVtcyB0 byBjcm9zcyBhIGJhdGNoIGJvdW5kYXJ5ICh3aGVuIHRoZSBzY2FuCisgKiByZXN1bWVzIHNjYW5u aW5nIGluIGl0cyBvcmlnaW5hbCBkaXJlY3Rpb24vZW5kcyBiZWZvcmUgY3Jvc3NpbmcgYSBib3Vu ZGFyeSwKKyAqIHRoZXJlIGlzbid0IGFueSBuZWVkIHRvIGNhbGwgaGVyZSkuCiAgKi8KIHZvaWQK IHRhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL1JFQURNRQppbmRleCBlNzU1NzdhN2UuLjM5MzkzOTFhZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9SRUFETUUKQEAgLTE4Niw3ICsxODYsNyBAQCBpbnRlcmZhY2UuICAoU2VlIGFsc28s IGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwpLgogQmxvY2tpbmcgVkFDVVVNIGxpa2UgdGhpcyBj YW4gYmUgZGlzcnVwdGl2ZSwgc28gdGFibGUgQU1zIGF2b2lkIGl0IHdoZW5ldmVyCiBwb3NzaWJs ZS4gIFRoZSBoZWFwIHRhYmxlIEFNIHVzdWFsbHkgZHJvcHMgbGVhZiBwYWdlIHBpbnMgcmlnaHQg YXdheSwgdGhvdWdoCiBub3QgZHVyaW5nIHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNo b3QuICBJbmRleC1vbmx5IHNjYW5zIG1heSBhbHNvCi1yZXRhaW4gcGlucyBpbiBzb21lIGNhc2Vz LgorcmV0YWluIHBpbnMgaW4gc29tZSBjYXNlcywgdGhvdWdoIHByZWZldGNoaW5nIHJlcXVpcmVz IGRyb3BwaW5nIHRoZW0uCiAKIE9wcG9ydHVuaXN0aWMgaW5kZXggdHVwbGUgZGVsZXRpb24gcGVy Zm9ybXMgdGhlIHNhbWUgcGFnZS1sZXZlbAogbW9kaWZpY2F0aW9ucyBhcyBWQUNVVU0sIHdoaWxl IG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDg5Y2E0ZTA4Yi4uNzhkODdjZDhiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE0NSw2ICsxNDUsNyBAQCBpbnQJCQltYXhf cGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKIGJvb2wJCWVuYWJsZV9zZXFzY2FuID0g dHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4 b25seXNjYW4gPSB0cnVlOworYm9vbAkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9IHRydWU7 CiBib29sCQllbmFibGVfYml0bWFwc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfdGlkc2NhbiA9 IHRydWU7CiBib29sCQllbmFibGVfc29ydCA9IHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IGE1YTBlZGYyNS4uNzhjM2M2NDdmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtODkxLDYgKzg5MSwxMyBAQAog ICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5f cHJlZmV0Y2gnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91 cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJl ZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5LXNjYW5zLicsCisgIGZsYWdz ID0+ICdHVUNfRVhQTEFJTicsCisgIHZhcmlhYmxlID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZl dGNoJywKKyAgYm9vdF92YWwgPT4gJ3RydWUnLAorfSwKKwogeyBuYW1lID0+ICdlbmFibGVfbWF0 ZXJpYWwnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9 PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBs YW5uZXJcJ3MgdXNlIG9mIG1hdGVyaWFsaXphdGlvbi4nLAogICBmbGFncyA9PiAnR1VDX0VYUExB SU4nLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmlu ZGV4IGU2ODZkODhhZi4uYWFkMjU2ZWE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC00MTcsNiArNDE3LDcgQEAKICNlbmFibGVfaW5jcmVt ZW50YWxfc29ydCA9IG9uCiAjZW5hYmxlX2luZGV4c2NhbiA9IG9uCiAjZW5hYmxlX2luZGV4b25s eXNjYW4gPSBvbgorI2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggPSBvbgogI2VuYWJsZV9tYXRl cmlhbCA9IG9uCiAjZW5hYmxlX21lbW9pemUgPSBvbgogI2VuYWJsZV9tZXJnZWpvaW4gPSBvbgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZp Zy5zZ21sCmluZGV4IDhjZGQ4MjZmYi4uNGE0YTA5YWQ3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC01NzEyLDYg KzU3MTIsMjIgQEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwv cmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUt aW5kZXhzY2FuLXByZWZldGNoIiB4cmVmbGFiZWw9ImVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gi PgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFt ZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJp bWFyeT48dmFybmFtZT5lbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoPC92YXJuYW1lPiBjb25maWd1 cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90 ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9y IGRpc2FibGVzIHByZWZldGNoaW5nIGZvciBpbmRleC1zY2FuIGFuZCBpbmRleC1vbmx5LXNjYW4K KyAgICAgICAgcGxhbiB0eXBlcy4gIFByZWZldGNoaW5nIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNl IGJ5IHJlYWRpbmcgdGFibGUgQU0KKyAgICAgICAgcGFnZXMgYWhlYWQgb2Ygd2hlbiB0aGV5IGFy ZSBuZWVkZWQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgaXMgPGxp dGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUt bWF0ZXJpYWwiIHhyZWZsYWJlbD0iZW5hYmxlX21hdGVyaWFsIj4KICAgICAgIDx0ZXJtPjx2YXJu YW1lPmVuYWJsZV9tYXRlcmlhbDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAg ICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9k b2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IDJmY2ZmYjkyYS4uNjI5NmNmMTdiIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRl eGFtLnNnbWwKQEAgLTgwNyw5ICs4MDcsMTIgQEAgYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBz Y2FuLAogICA8cGFyYT4KICAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlu dGVyZmFjZSBpcyBhbiBhbHRlcm5hdGl2ZSB0bwogICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiB0aGF0IHJldHVybnMgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBpbiBiYXRjaGVzCi0g ICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBp bmRleCBlbnRyaWVzIGZyb20gYQotICAgc2luZ2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsIHRoZSB0 YWJsZSBBTSBnYWlucyB2aXNpYmlsaXR5IGludG8gd2hpY2ggdGFibGUKLSAgIGJsb2NrcyB3aWxs IGJlIG5lZWRlZCBpbiB0aGUgbmVhciBmdXR1cmUuCisgICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0 aW1lLiBUaGlzIGVuYWJsZXMgdGhlIHRhYmxlIGFjY2VzcyBtZXRob2QgdG8KKyAgIG9wdGltaXpl IHRhYmxlIGJsb2NrIGFjY2VzcyBwYXR0ZXJucyBhbmQgcGVyZm9ybSBJL08gcHJlZmV0Y2hpbmcu CisgICBCeSByZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhIHNpbmds ZSBpbmRleCBwYWdlIHRvZ2V0aGVyLAorICAgdGhlIHRhYmxlIEFNIGNhbiByZWFkYWhlYWQgdGhy b3VnaCB0aGUgaW5kZXggYW5kIGlkZW50aWZ5IHdoaWNoIHRhYmxlCisgICBibG9ja3Mgd2lsbCBi ZSBuZWVkZWQsIGFsbG93aW5nIHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIHBhZ2VzIGR1cmluZwor ICAgb3JkZXJlZCBpbmRleCBzY2Fucy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtMTM2NSw2 ICsxMzY4LDYzIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lk IG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIG9yIHZpY2UgdmVyc2EsIGlmIGl0cyBpbnRl cm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBvdGhlci4K ICAgPC9wYXJhPgogCisgIDxzZWN0MiBpZD0iaW5kZXgtc2Nhbm5pbmctYmF0Y2hlcyI+CisgICA8 dGl0bGU+VGFibGUgQU0gQ29uc2lkZXJhdGlvbnMgZm9yIEJhdGNoIFNjYW5uaW5nPC90aXRsZT4K KworICAgPHBhcmE+CisgICAgVGhpcyBzZWN0aW9uIGlzIHByaW1hcmlseSByZWxldmFudCB0bwor ICAgIDxsaW5rIGxpbmtlbmQ9InRhYmxlYW0iPnRhYmxlIGFjY2VzcyBtZXRob2Q8L2xpbms+IGF1 dGhvcnMuCisgICAgV2hlbiBhbiBpbmRleCBzY2FuIHVzZXMgdGhlIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLAorICAgIHRoZSB0YWJsZSBBTSBpcyByZXNwb25zaWJs ZSBmb3IgbWFuYWdpbmcgcG9zaXRpb24gc3RhdGUgd2l0aGluIHRoZQorICAgIDxzdHJ1Y3RuYW1l PkluZGV4U2NhbkRlc2M8L3N0cnVjdG5hbWU+J3MKKyAgICA8c3RydWN0ZmllbGQ+YmF0Y2hyaW5n YnVmPC9zdHJ1Y3RmaWVsZD4gYW5kIGZvciBjb250cm9sbGluZyB3aGVuCisgICAgYnVmZmVyIHBp bnMgb24gaW5kZXggcGFnZXMgYXJlIHJlbGVhc2VkLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4K KyAgICBUaGUgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCB3aXRoaW4K KyAgICA8c3RydWN0ZmllbGQ+YmF0Y2hyaW5nYnVmPC9zdHJ1Y3RmaWVsZD4gdHJhY2tzIHdoaWNo IGJhdGNoIGFuZCBpdGVtIHdpdGhpbgorICAgIHRoYXQgYmF0Y2ggd2lsbCBiZSByZXR1cm5lZCBu ZXh0IHRvIHRoZSBleGVjdXRvci4gIFRoZSB0YWJsZSBBTSBtdXN0IGFkdmFuY2UKKyAgICA8c3Ry dWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGFzIHR1cGxlcyBhcmUgcmV0dXJuZWQgYnkK KyAgICA8ZnVuY3Rpb24+dGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90PC9mdW5jdGlvbj4uICBUaGUg Y29yZSBjb2RlIG1heSBhbHNvCisgICAgbW9kaWZ5IHRoaXMgZmllbGQgZHVyaW5nIG9wZXJhdGlv bnMgc3VjaCBhcyBtYXJrL3Jlc3RvcmUuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRo ZSA8c3RydWN0ZmllbGQ+cHJlZmV0Y2hQb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCB0cmFja3MgdGhl IHBvc2l0aW9uIHVzZWQKKyAgICBmb3IgSS9PIHByZWZldGNoaW5nLiAgSXQgaXMgZ2VuZXJhbGx5 IGFkdmFuY2VkIGJ5IGluaXRpYWxpemluZyBpdCBmcm9tCisgICAgPHN0cnVjdGZpZWxkPnNjYW5Q b3M8L3N0cnVjdGZpZWxkPiB3aXRoaW4gYSByZWFkIHN0cmVhbSBjYWxsYmFjaywgYWxsb3dpbmcK KyAgICB0aGUgdGFibGUgQU0gdG8gcHJlZmV0Y2ggdGFibGUgYmxvY2tzIHBvaW50ZWQgdG8gYnkg aXRlbXMgdGhhdCBhcmUgd2VsbAorICAgIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRp b24uICBJbml0aWFsbHkKKyAgICA8c3RydWN0ZmllbGQ+cHJlZmV0Y2hQb3M8L3N0cnVjdGZpZWxk PiBzdGFydHMgYXQKKyAgICA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+LCBidXQg YXMgdGhlIHJlYWQgc3RyZWFtIHJhbXBzIHVwIGl0IGNhbgorICAgIGdldCBmYXIgYWhlYWQgJm1k YXNoOyBzcGFubmluZyBtdWx0aXBsZSBpbmRleCBwYWdlcyBpZiBuZWNlc3NhcnkgdG8KKyAgICBt YWludGFpbiBhbiBvcHRpbWFsIEkvTyBwcmVmZXRjaCBkaXN0YW5jZSBmb3IgdGFibGUgYmxvY2sg cmVhZHMuICBBIG1ham9yCisgICAgZ29hbCBvZiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBpbnRlcmZhY2UgaXMgdG8gYWxsb3cgdGhlCisgICAgdGFibGUgQU0gdG8gcHJlZmV0 Y2ggd2l0aG91dCBiZWluZyBsaW1pdGVkIHRvIGl0ZW1zIGZyb20gdGhlIGN1cnJlbnQKKyAgICA8 c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGJhdGNoJ3MgaW5kZXggbGVhZiBwYWdl LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBCb3RoIDxzdHJ1Y3RmaWVsZD5zY2FuUG9z PC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgPHN0cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3Rm aWVsZD4gYXJlIGNvbnRyb2xsZWQgYnkgdGhlIHRhYmxlIEFNIGFuZAorICAgIGNvcmUgY29kZTsg aW5kZXggYWNjZXNzIG1ldGhvZHMgc2hvdWxkIG5vdCBhY2Nlc3Mgb3IgbWFuaXB1bGF0ZSB0aGVz ZQorICAgIGZpZWxkcy4gIFNlZSB0aGUgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw LzwvZmlsZW5hbWU+CisgICAgaW1wbGVtZW50YXRpb24gZm9yIGEgcmVmZXJlbmNlIGV4YW1wbGUu CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSBidWZmZXIgcGluIGhlbGQgYnkgZWFj aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGJhdGNoIG9uIGl0cworICAgIGluZGV4 IGxlYWYgcGFnZSBpcyBvd25lZCBieSB0aGUgaW5kZXggQU0gKHN0b3JlZCBpbiB0aGUgcGVyLWJh dGNoIG9wYXF1ZQorICAgIGFyZWEpIGJ1dCByZWxlYXNlZCB1bmRlciB0aGUgdGFibGUgQU0ncyBj b250cm9sIHZpYSB0aGUKKyAgICA8ZnVuY3Rpb24+YW1yZWxlYXNlYmF0Y2g8L2Z1bmN0aW9uPiBj YWxsYmFjay4gIFNlZSB0aGUKKyAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCA8 ZnVuY3Rpb24+YW1yZWxlYXNlYmF0Y2g8L2Z1bmN0aW9uPiwgYW5kCisgICAgPGZ1bmN0aW9uPmFt a2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBkZXNjcmlwdGlvbnMgaW4KKyAgICA8eHJlZiBsaW5r ZW5kPSJpbmRleC1mdW5jdGlvbnMiLz4gZm9yIGRldGFpbHMuCisgICA8L3BhcmE+CisKKyAgPC9z ZWN0Mj4KKwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImluZGV4LWxvY2tpbmciPgpAQCAtMTQ2 MCwyOSArMTUyMCw2MyBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUs IE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICBUaGlzIHNvbHV0aW9uIHJlcXVpcmVz IHRoYXQgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbmRleCBzY2FucyBiZQogICAg PHF1b3RlPnN5bmNocm9ub3VzPC9xdW90ZT46IHRoZSB0YWJsZSBBTSBtdXN0IGZldGNoIGVhY2gg aGVhcCB0dXBsZQogICAgaW1tZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNvcnJlc3BvbmRp bmcgaW5kZXggZW50cnkuICBUaGlzIGlzCi0gICBleHBlbnNpdmUgZm9yIGEgbnVtYmVyIG9mIHJl YXNvbnMuICBBbgotICAgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+IHNjYW4gaW4gd2hpY2gg d2UgY29sbGVjdCBtYW55IFRJRHMgZnJvbSB0aGUKLSAgIGluZGV4LCBhbmQgb25seSB2aXNpdCB0 aGUgaGVhcCB0dXBsZXMgc29tZXRpbWUgbGF0ZXIsIHJlcXVpcmVzIG11Y2ggbGVzcwotICAgaW5k ZXggbG9ja2luZyBvdmVyaGVhZCBhbmQgY2FuIGFsbG93IGEgbW9yZSBlZmZpY2llbnQgaGVhcCBh Y2Nlc3MgcGF0dGVybi4KKyAgIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIFRo ZQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UsIGJ5IGNvbnRy YXN0LCB3YXMgZGVzaWduZWQgdG8KKyAgIGFsbG93IHNjYW5zIHRvIGJlIDxxdW90ZT5hc3luY2hy b25vdXM8L3F1b3RlPjogYnkgY29sbGVjdGluZyBiYXRjaGVzIG9mCisgICBUSURzIGZyb20gbXVs dGlwbGUgaW5kZXggcGFnZXMsIHRoZSB0YWJsZSBBTSBjYW4gcHJlZmV0Y2ggdGhlIGNvcnJlc3Bv bmRpbmcKKyAgIHRhYmxlIGJsb2NrcyB3ZWxsIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9z aXRpb24gKHVzaW5nIGFzeW5jaHJvbm91cworICAgSS9PIHdoZW4gYXZhaWxhYmxlKSwgcmVxdWly aW5nIG11Y2ggbGVzcyBpbmRleCBsb2NraW5nIG92ZXJoZWFkIGFuZCBhbGxvd2luZworICAgYSBt b3JlIGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLiAgTm90IGFsbCBzY2FucyBlbmQgdXAg YmVpbmcKKyAgIGFzeW5jaHJvbm91cyBpbiBwcmFjdGljZSwgYnV0IHRoZSBpbnRlcmZhY2UgaXMg ZGVzaWduZWQgdG8gYWxsb3cgaXQuCiAgICBQZXIgdGhlIGFib3ZlIGFuYWx5c2lzLCB3ZSBtdXN0 IHVzZSB0aGUgc3luY2hyb25vdXMgYXBwcm9hY2ggZm9yCiAgICBub24tTVZDQy1jb21wbGlhbnQg c25hcHNob3RzLCBidXQgYW4gYXN5bmNocm9ub3VzIHNjYW4gaXMgd29ya2FibGUKICAgIGZvciBh IHF1ZXJ5IHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAg IFRoZSBidWZmZXIgcGluIGhlbGQgYnkgZWFjaCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGJhdGNoIG9uIGl0cwotICAgaW5kZXggbGVhZiBwYWdlIGlzIG93bmVkIGJ5IHRoZSBpbmRl eCBBTSAoc3RvcmVkIGluIHRoZSBwZXItYmF0Y2ggb3BhcXVlCi0gICBhcmVhKSBidXQgcmVsZWFz ZWQgdW5kZXIgdGhlIHRhYmxlIEFNJ3MgY29udHJvbCB2aWEgdGhlCi0gICA8ZnVuY3Rpb24+YW1y ZWxlYXNlYmF0Y2g8L2Z1bmN0aW9uPiBjYWxsYmFjay4gIFNlZSB0aGUKLSAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5hbXJlbGVhc2ViYXRjaDwvZnVuY3Rpb24+ LCBhbmQKLSAgIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4gZGVzY3JpcHRp b25zIGluCi0gICA8eHJlZiBsaW5rZW5kPSJpbmRleC1mdW5jdGlvbnMiLz4gZm9yIGRldGFpbHMu CisgICBCZWNhdXNlIHRoZSB0YWJsZSBBTSByZWFkcyBtdWx0aXBsZSBpbmRleCBsZWFmIHBhZ2Vz IGFoZWFkIHZpYQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiB0byBmYWNpbGl0 YXRlIHRoaXMgcHJlZmV0Y2hpbmcsIGl0IGNhbm5vdAorICAgcHJhY3RpY2FsbHkgaG9sZCBwaW5z IG9uIGFsbCB0aG9zZSBwYWdlcyBzaW11bHRhbmVvdXNseS4gIFRoZXJlZm9yZSwKKyAgIEkvTyBw cmVmZXRjaGluZyB3aXRoCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIG9u bHkgcG9zc2libGUgd2hlbiBhbiBNVkNDLWNvbXBsaWFudAorICAgc25hcHNob3QgaXMgaW4gdXNl LgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBJbiBhbiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8 L2Z1bmN0aW9uPiBpbmRleCBzY2FuLCB0aGUgYWNjZXNzIG1ldGhvZCBkb2VzCi0gICBub3Qga2Vl cCBhbiBpbmRleCBwaW4gb24gYW55IG9mIHRoZSByZXR1cm5lZCB0dXBsZXMuICBUaGVyZWZvcmUK LSAgIGl0IGlzIG9ubHkgc2FmZSB0byB1c2Ugc3VjaCBzY2FucyB3aXRoIE1WQ0MtY29tcGxpYW50 IHNuYXBzaG90cy4KKyAgIFdoZXRoZXIgYSBiYXRjaCdzIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiBp cyByZWxlYXNlZCBpbW1lZGlhdGVseSBvcgorICAgZGVmZXJyZWQgaXMgY29udHJvbGxlZCBieSBh IGdlbmVyaWMsIHNjYW4tbGV2ZWwgcG9saWN5IHRoYXQgaXMgZGV0ZXJtaW5lZAorICAgd2hlbiB0 aGUgc2NhbiBpcyBvcGVuZWQgJm1kYXNoOyBpdCBpcyBub3QgdW5kZXIgdGhlIGNvbnRyb2wgb2Yg ZWl0aGVyIHRoZQorICAgaW5kZXggQU0gb3IgdGhlIHRhYmxlIEFNLiAgVGhlIHNjYW4ncworICAg PHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlUmVsZWFzZTwvc3RydWN0ZmllbGQ+IGZsYWcgZW5j b2RlcyB0aGlzIHBvbGljeS4KKyAgIEl0IGlzIHNldCBiYXNlZCBvbiB0d28gY3JpdGVyaWEgdGhh dCBhcmUga25vd24gdG8gdGhlIGNvcmUgc2NhbiBtYWNoaW5lcnk6CisgICB3aGV0aGVyIHRoZSBz Y2FuIHVzZXMgYW4gTVZDQy1jb21wbGlhbnQgc25hcHNob3QsIGFuZCB3aGV0aGVyIGl0IGlzIGFu CisgICBpbmRleC1vbmx5IHNjYW4uICBTcGVjaWZpY2FsbHksCisgICA8c3RydWN0ZmllbGQ+YmF0 Y2hJbW1lZGlhdGVSZWxlYXNlPC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1ZSB3aGVuIHRoZSBzY2FuIHVz ZXMKKyAgIGFuIE1WQ0Mgc25hcHNob3QgYW5kIGlzIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBh biBpbmRleC1vbmx5IHNjYW4uICBXaGVuCisgICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVS ZWxlYXNlPC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1ZSwgdGhlIHBpbiBpcworICAgcmVsZWFzZWQgaW5z aWRlIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrPC9mdW5jdGlvbj4gKGJlZm9y ZSB0aGUKKyAgIGJhdGNoIGlzIGV2ZW4gcmV0dXJuZWQgdG8gdGhlIHRhYmxlIEFNKSwgYmVjYXVz ZSBhIHBsYWluIGluZGV4IHNjYW4gd2l0aCBhbgorICAgTVZDQyBzbmFwc2hvdCB3aWxsIGFsd2F5 cyB2aXNpdCB0aGUgaGVhcCBwYWdlLCB3aGVyZSB0aGUgTVZDQyB2aXNpYmlsaXR5CisgICBjaGVj ayBpcyBhdXRob3JpdGF0aXZlICZtZGFzaDsgZXZlbiBpZiA8Y29tbWFuZD5WQUNVVU08L2NvbW1h bmQ+IHJlY3ljbGVzIGEKKyAgIFRJRCwgdGhlIG5ldyBvY2N1cGFudCBjYW5ub3QgcGFzcyB0aGUg c25hcHNob3QgdGVzdC4gIFdoZW4gaXQgaXMgZmFsc2UsIHRoZQorICAgcGluIGlzIHJldGFpbmVk IHVudGlsIHRoZSB0YWJsZSBBTSBleHBsaWNpdGx5IGNhbGxzCisgICA8ZnVuY3Rpb24+YW1yZWxl YXNlYmF0Y2g8L2Z1bmN0aW9uPiwgYmVjYXVzZSB0aGUgc2NhbiBjYW5ub3QgcmVseSBvbiB0aGF0 CisgICBoZWFwIHBhZ2UgTVZDQyBiYWNrc3RvcC4gIEZvciBub24tTVZDQyBzY2FucywgdGhlcmUg aXMgbm8gTVZDQyBzbmFwc2hvdCB0bworICAgcmVqZWN0IGEgcmVjeWNsZWQgVElEJ3MgbmV3IG9j Y3VwYW50IGF0IGFsbC4gIEZvciBpbmRleC1vbmx5IHNjYW5zLCBldmVuCisgICB3aXRoIGFuIE1W Q0Mgc25hcHNob3QsIHRoZSBzY2FuIHR5cGljYWxseSBhdm9pZHMgdmlzaXRpbmcgdGhlIGhlYXAg cGFnZQorICAgYWx0b2dldGhlciAodXNpbmcgdGhlIHZpc2liaWxpdHkgbWFwIGluc3RlYWQpLCBz byB0aGUgTVZDQyBjaGVjayB0aGF0IHdvdWxkCisgICBjYXRjaCBhIHJlY3ljbGVkIFRJRCB1c3Vh bGx5IG5ldmVyIHJ1bnMuICBJbiBib3RoIGNhc2VzIHRoZSBwaW4gb24gdGhlCisgICBpbmRleCBw YWdlIGlzIHdoYXQgcHJldmVudHMgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBmcm9tIHJlY3lj bGluZyBUSURzCisgICB3aGlsZSB0aGUgc2NhbiBpcyBzdGlsbCBpbiBmbGlnaHQuICBJbiBhbGwg Y2FzZXMsIHRoZSB0YWJsZSBBTSBkZWNpZGVzCisgICA8ZW1waGFzaXM+d2hlbjwvZW1waGFzaXM+ IHRvIGNhbGwgPGZ1bmN0aW9uPmFtcmVsZWFzZWJhdGNoPC9mdW5jdGlvbj47IHRoZQorICAgaW5k ZXggQU0gZGVjaWRlcyA8ZW1waGFzaXM+d2hhdDwvZW1waGFzaXM+IHRvIHJlbGVhc2UuCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFNpbWlsYXJseSwgYW4gPGZ1bmN0aW9uPmFtZ2V0Yml0bWFw PC9mdW5jdGlvbj4gaW5kZXggc2NhbiBpcyBpbmhlcmVudGx5CisgICBhc3luY2hyb25vdXM6IGFs bCBtYXRjaGluZyBUSURzIGFyZSBjb2xsZWN0ZWQgaW50byBhIGJpdG1hcCBiZWZvcmUgYW55IGhl YXAKKyAgIGFjY2VzcyBiZWdpbnMuICBTdWNoIHNjYW5zIHRoZXJlZm9yZSByZXF1aXJlIGFuIE1W Q0MtY29tcGxpYW50IHNuYXBzaG90LAorICAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoZSBh Y2Nlc3MgbWV0aG9kIHRvIGhvbGQgaW5kZXggcGFnZSBwaW5zLgogICA8L3BhcmE+CiAKICAgPHBh cmE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sIGIvZG9jL3NyYy9zZ21s L3RhYmxlYW0uc2dtbAppbmRleCA5Y2NmNWI3MzkuLjhlNzBhNjE5NiAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL3RhYmxlYW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sCkBA IC0xMjksNiArMTI5LDE0IEBAIG15X3RhYmxlYW1faGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQog ICBvcHRpb25hbCksIHRoZSBibG9jayBudW1iZXIgbmVlZHMgdG8gcHJvdmlkZSBsb2NhbGl0eS4K ICA8L3BhcmE+CiAKKyA8cGFyYT4KKyAgVGFibGUgYWNjZXNzIG1ldGhvZHMgY2FuIHN1cHBvcnQg b3JkZXJlZCBpbmRleCBzY2FucyB1c2luZyB0aGUKKyAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBpbnRlcmZhY2UuIFNlZSBhbHNvCisgIDx4cmVmIGxpbmtlbmQ9ImluZGV4LXNjYW5u aW5nLWJhdGNoZXMiLz4gZm9yIGRldGFpbHMgb24gaW50ZXJmYWNpbmcgd2l0aAorICA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGluZGV4IGFjY2VzcyBtZXRob2RzLCBhbmQgbWFuYWdp bmcgdGhlCisgIHNjYW4ncyBwb3NpdGlvbi4KKyA8L3BhcmE+CisKICA8cGFyYT4KICAgRm9yIGNy YXNoIHNhZmV0eSwgYW4gQU0gY2FuIHVzZSBwb3N0Z3JlcycgPGxpbmsKICAgbGlua2VuZD0id2Fs Ij48YWNyb255bT5XQUw8L2Fjcm9ueW0+PC9saW5rPiwgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRp b24uCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDEzMmI1NmE1OC4u MzJiYzNkZDNlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdz Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTY2 LDYgKzE2Niw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUg bmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfaW5jcmVtZW50YWxfc29ydCAgICAgICAgfCBv bgogIGVuYWJsZV9pbmRleG9ubHlzY2FuICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4c2Nh biAgICAgICAgICAgICAgIHwgb24KKyBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoICAgICAgfCBv bgogIGVuYWJsZV9tYXRlcmlhbCAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX21lbW9pemUg ICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbWVyZ2Vqb2luICAgICAgICAgICAgICAgfCBv bgpAQCAtMTgwLDcgKzE4MSw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGlu Z3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAg ICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxl X3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyNSByb3dzKQorKDI2IHJvd3MpCiAKIC0t IFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlw ZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJlIHByZXNlbnQgb3IgYWJzZW50LCBkZXBlbmRp bmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3RtYXN0ZXIgc3RhcnQuCi0tIAoyLjUzLjAKCg== --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0003-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v14-0003-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj4c14 RnJvbSBkYjFlNTUxM2I4ODI5ODdjOTgzZjg1NGRhNzY2YmNjYzgwMWU5MzBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDAzLzE2XSBB ZGQgaW50ZXJmYWNlcyB0aGF0IGVuYWJsZSBpbmRleCBwcmVmZXRjaGluZy4KCkFkZCBhIG5ldyBh bWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSB0aGF0IGFsbG93cyBpbmRleCBhY2Nlc3MgbWV0 aG9kcwp0byBpbXBsZW1lbnQgcGxhaW4vb3JkZXJlZCBpbmRleCBzY2FucyB0aGF0IHJldHVybiBp bmRleCBlbnRyaWVzIGluCmJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0Y2hpbmcgaXRlbXMgZnJv bSBhbiBpbmRleCBwYWdlLCByYXRoZXIgdGhhbgpvbmUgbWF0Y2ggYXQgYSB0aW1lLgoKVGhpcyBj b21taXQgYWxzbyBhZGRzIGEgbmV3IHRhYmxlIEFNIGludGVyZmFjZSBjYWxsYmFjaywgY2FsbGVk IGJ5IHRoZQpjb3JlIGV4ZWN1dG9yIHRocm91Z2ggdGhlIG5ldyB0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3Qgc2hpbSBmdW5jdGlvbi4KVGhpcyBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIGRpcmVjdGx5 IG1hbmFnZSB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXggc2NhbnMKcmF0aGVyIHRoYW4gaGF2aW5nIGlu ZGl2aWR1YWwgVElEcyBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlciBvbmUgYnkgb25lLgpUaGUgYW1n ZXRiYXRjaCBpbnRlcmZhY2UgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2Fj aCB0bwppbmRleCBzY2FucyBhZGRlZCB0byB0aGUgdGFibGUgQU0uICBUaGUgdGFibGUgQU0gY2Fu IGFwcGx5IGtub3dsZWRnZSBvZgp3aGljaCBUSURzIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHNj YW4gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBlcmZvcm0KSS9PIHByZWZldGNoaW5nLiAgUHJlZmV0 Y2hpbmcgd2lsbCBiZSBhZGRlZCBieSBhbiB1cGNvbWluZyBjb21taXQuCgpJbmRleCBhY2Nlc3Mg bWV0aG9kcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXggc2NhbnMgbXVzdCBub3cgaW1wbGVtZW50 CmVpdGhlciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UgT1IgdGhlIGFtZ2V0dHVwbGUgaW50ZXJm YWNlLiAgVGhlCmFtZ2V0dHVwbGUgaW50ZXJmYWNlIHdpbGwgc3RpbGwgYmUgdXNlZCBieSBpbmRl eCBBTXMgdGhhdCByZXF1aXJlIGRpcmVjdApjb250cm9sIG92ZXIgdGhlIHByb2dyZXNzIG9mIGlu ZGV4IHNjYW5zIChlLmcuLCBHaVNUIHdpdGggS05OIG9yZGVyZWQKc2NhbnMpLiAgQWxtb3N0IGFs bCBleGlzdGluZyBjYWxsZXJzIHRoYXQgcGVyZm9ybSBpbmRleCBzY2FucyBub3cgdXNlCnRoZSBu ZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB3aGV0 aGVyIHRoZQp1bmRlcmx5aW5nIGluZGV4IEFNIHVzZXMgYW1nZXRiYXRjaCBvciBhbWdldHR1cGxl LgoKVGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIHJldHVybnMgYmF0Y2hlcyB0aGF0IGhvbGQgYSBi dWZmZXIgcGluIG9uIGFuCmluZGV4IHBhZ2UgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgdGFibGUg QU0gYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QKY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZB Q1VVTS4gIE5vdyBoZWFwYW0gb25seSBuZWVkcyB0byBob2xkIG9uIHRvCnN1Y2ggYSBwaW4gZm9y IGFuIGluc3RhbnQgLS0gZXhjZXB0IGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDCnNu YXBzaG90LiAgTm9uLU1WQ0Mgc2NhbnMgY29udGludWUgdG8gbmVlZCB0byBob2xkIHRoZSBwaW4g dW50aWwgYWxsIG9mCnRoZSBiYXRjaCdzIFRJRHMgaGF2ZSBiZWVuIGZldGNoZWQgZnJvbSB0aGUg aGVhcC4KClRoaXMgZXh0ZW5kcyB0aGUgZHJvcFBpbiBtZWNoYW5pc20gYWRkZWQgdG8gbmJ0cmVl IGJ5IGNvbW1pdCAyZWQ1Yjg3ZiwKYW5kIGdlbmVyYWxpemVzIGl0IHRvIHdvcmsgd2l0aCBhbGwg aW5kZXggQU1zIHRoYXQgc3VwcG9ydCB0aGUgbmV3CmFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgV2Ug Y2FuIGFsd2F5cyBzYWZlbHkgZHJvcCBpbmRleCBwYWdlIHBpbnMKZWFnZXJseSwgcHJvdmlkZWQg dGhlIHNjYW4gdXNlcyBhbiBNVkNDIHNuYXBzaG90ICh1bmxpa2UgdGhlIG5idHJlZQpkcm9wUGlu IG9wdGltaXphdGlvbiwgd2hpY2ggaGFkIGEgY291cGxlIG9mIGFkZGl0aW9uYWwgcmVzdHJpY3Rp b25zKS4KCkFuIHVwY29taW5nIGNvbW1pdCB0aGF0IHdpbGwgYWRkIGluZGV4IHByZWZldGNoaW5n IHdpbGwgdXNlIGEgcmVhZApzdHJlYW0gdG8gcmVhZCBoZWFwIHBhZ2VzIGR1cmluZyBpbmRleCBz Y2Fucy4gIFJlYWQgc3RyZWFtIGlzIGNhcmVmdWwgdG8KbGltaXQgaG93IG1hbnkgdGhpbmdzIGl0 IHBpbnMsIGxlc3Qgd2UgcnVuIGludG8gcHJvYmxlbXMgZHVlIHRvIGhhdmluZwp0b28gbWFueSBi dWZmZXJzIHBpbm5lZC4gIFNpbXBseSBuZXZlciBob2xkaW5nIG9uIHRvIGluZGV4IHBhZ2UgYnVm ZmVyCnBpbnMgZ3JlYXRseSBzaW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGluZGV4 IHByZWZldGNoaW5nOwp0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMg YmV0d2VlbiB0aGUgcmVhZCBzdHJlYW0gYW5kCmluZGV4IEFNLiAgVGhlIG9ubHkgZG93bnNpZGUg aXMgdGhhdCB3ZSBjYW5ub3Qgc3VwcG9ydCBwcmVmZXRjaGluZwpkdXJpbmcgc2NhbnMgdGhhdCB1 c2UgYSBub24tTVZDQyBzbmFwc2hvdCwgd2hpY2ggc2VlbXMgcXVpdGUgYWNjZXB0YWJsZS4KCklu IHByYWN0aWNlLCBoZWFwYW0gZG9lc24ndCBkcm9wIGVhY2ggYmF0Y2gncyBpbmRleCBwYWdlIGJ1 ZmZlciBwaW4gYXQKdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IGR1cmluZyBpbmRleC1vbmx5IHNj YW5zLiAgVGhpcyB3YXMgZGVlbWVkCm5lY2Vzc2FyeSB0byBhdm9pZCByZWdyZXNzaW5nIGluZGV4 LW9ubHkgc2NhbnMgd2l0aCBhIExJTUlULCBpbgpwYXJ0aWN1bGFyIHdpdGggbmVzdGxvb3AgYW50 aS1qb2lucyBhbmQgbmVzdGxvb3Agc2VtaS1qb2luczsgZWFnZXJseQpsb2FkaW5nIGFsbCB0aGUg dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB1cCBmcm9udCByZWdyZXNzZWQgc3VjaCBxdWVyaWVzLgpU aGUgbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGdpdmVzIHRhYmxlIEFNcyB0aGUgYXV0aG9yaXR5 IHRvIGRlY2lkZQp3aGVuIGFuZCB3aGVyZSB0byBkcm9wIGluZGV4IHBhZ2UgcGlucywgc28gdGhp cyBjYW4gYmUgY29uc2lkZXJlZCBhCmhlYXBhbSBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgKGluZGV4 IEFNcyBkb24ndCBuZWVkIHRvIGtub3cgYWJvdXQgaXQpLgpUaGlzIHNjaGVtZSBzdGlsbCBhbGxv d3MgaW5kZXggcHJlZmV0Y2hpbmcgdG8gY29uc2lzdGVudGx5IGhvbGQgbm8gbW9yZQp0aGFuIG9u ZSBiYXRjaCBpbmRleCBwYWdlIHBpbiBhdCBhIHRpbWUsIGV2ZW4gd2hlbiBhbiBpbmRleC1vbmx5 IHNjYW4KKHRoYXQgbXVzdCBwZXJmb3JtIHNvbWUgaGVhcCBmZXRjaGVzKSBob2xkcyBvcGVuIHNl dmVyYWwgaW5kZXggYmF0Y2hlcwphdCBvbmNlIGluIG9yZGVyIHRvIG1haW50YWluIGFuIGFkZXF1 YXRlIHByZWZldGNoIGRpc3RhbmNlLgoKQXV0aG9yOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRy YS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBB bmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5OiBUaG9tYXMgTXVu cm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRlYmFiQGVudGVycHJpc2VkYi5jb20K RGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9lZmFjMzIzOC02ZjM0LTQxZWEtYTM5My0y NmNjMDQ0MWI1MDYlNDB2b25kcmEubWUKLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAg ICAgICAgICAgICAgICAgICAgfCAgMjcgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAg ICAgICAgICAgICAgICAgICB8ICAzMSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgICAgIHwgIDI3ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAg ICAgICAgICAgICAgICAgfCAxODggKystLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgg ICAgICAgICAgICAgICAgICB8IDMyNSArKysrKysrLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaCAgICAgICAgICAgICAgICAgIHwgIDY1ICsrCiBzcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0 cnVtZW50X25vZGUuaCAgICAgICAgfCAgIDYgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmggICAgICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o ICAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5j ICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5j ICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5j ICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAg ICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAg ICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMgICAgICB8IDY5MSArKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9hbWFwaS5jICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv Z2VuYW0uYyAgICAgICAgICAgICAgfCAgMTggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGFtLmMgICAgICAgICAgICB8IDE2OSArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhiYXRjaC5jICAgICAgICAgfCA3NTIgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9SRUFETUUgICAgICAgICAgICAgIHwgIDY2ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAgICAgICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyAgICAgICB8IDE5MyArKystLQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICAgICAgICAgIHwgNDcwICsrKysrKy0tLS0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jICAgICAgICAgfCA1NDMgKysrKysrLS0t LS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jICAgICAgICAgIHwgMjQ1 IC0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMgICAgICAgICAgIHwg ICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgICAgICAgICAgfCAg IDYgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICAgICB8ICAy MyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAgICAgIHwgICAy ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgICAgICB8ICAgNiAr LQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICAgICAgIHwgICA4ICst CiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyAgICAgIHwgMTA4ICstLQog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAgICAgICAgIHwgIDEzICstCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMgICAgICAgICAgfCAgIDQgKy0KIHNy Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICAgICAgICB8ICAgNiArLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jICAgICAgICAgIHwgICA4ICstCiBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgICAgfCAgIDMgKy0KIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAgICAgICAgICAgIHwgIDYxICstCiBjb250cmli L2FtY2hlY2svdmVyaWZ5X25idHJlZS5jICAgICAgICAgICAgICAgfCAgIDIgKy0KIGNvbnRyaWIv Ymxvb20vYmx1dGlscy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogZG9jL3NyYy9z Z21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgNDQxICsrKysrKysrLS0KIGRv Yy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgICAgICAgICAgICB8ICAxMyArLQogLi4u L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyAgIHwgICA2ICstCiBzcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgMTIgKy0KIDQ5IGZp bGVzIGNoYW5nZWQsIDMxMjYgaW5zZXJ0aW9ucygrKSwgMTQ5NSBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv YW1hcGkuaAppbmRleCBlY2ZiZDAxN2QuLjMyMWQ3Nzk3NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2FtYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKQEAgLTE5 OCw2ICsxOTgsMTkgQEAgdHlwZWRlZiB2b2lkICgqYW1yZXNjYW5fZnVuY3Rpb24pIChJbmRleFNj YW5EZXNjIHNjYW4sCiB0eXBlZGVmIGJvb2wgKCphbWdldHR1cGxlX2Z1bmN0aW9uKSAoSW5kZXhT Y2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAorLyog bmV4dCBiYXRjaCBvZiB2YWxpZCB0dXBsZXMgKi8KK3R5cGVkZWYgSW5kZXhTY2FuQmF0Y2ggKCph bWdldGJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBJ bmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbik7CisKKy8qIG1hcmsgZGVhZCBpdGVtcyBpbiBpbmRleCBwYWdlICovCit0eXBlZGVm IHZvaWQgKCphbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAor CQkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyogcmVsZWFzZSBiYXRjaCBy ZXNvdXJjZXMgaGVsZCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyAqLwordHlw ZWRlZiB2b2lkICgqYW1yZWxlYXNlYmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4s CisJCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKwogLyogZmV0Y2ggYWxsIHZhbGlk IHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhT Y2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0bWFwICp0Ym0pOwpAQCAtMjA1LDExICsy MTgsOSBAQCB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rpb24pIChJbmRleFNjYW5E ZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2NhbiAqLwogdHlwZWRlZiB2b2lkICgqYW1lbmRzY2Fu X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAotLyogbWFyayBjdXJyZW50IHNjYW4g cG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtbWFya3Bvc19mdW5jdGlvbikgKEluZGV4U2Nh bkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUgbWFya2VkIHNjYW4gcG9zaXRpb24gKi8KLXR5cGVk ZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOworLyog aW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4n cyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lkICgqYW1wb3NyZXNldF9mdW5jdGlvbikgKEluZGV4 U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiAKIC8qCiAg KiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVzIC0gZm9yIHBhcmFsbGVsIGluZGV4IHNjYW5z LgpAQCAtMzA5LDEwICszMjAsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlh bWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsKIAlhbXJlc2Nhbl9mdW5jdGlvbiBhbXJl c2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0dHVwbGU7IC8qIGNhbiBiZSBOVUxMICov CisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworCWFt a2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsgLyogY2FuIGJlIE5VTEwg Ki8KKwlhbXJlbGVhc2ViYXRjaF9mdW5jdGlvbiBhbXJlbGVhc2ViYXRjaDsgLyogY2FuIGJlIE5V TEwgKi8KIAlhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsJLyogY2FuIGJlIE5VTEwg Ki8KIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotCWFtbWFya3Bvc19mdW5jdGlvbiBh bW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCi0JYW1yZXN0cnBvc19mdW5jdGlvbiBhbXJlc3Ry cG9zOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsg LyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBw YXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24g YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2FuIGJlIE5VTEwgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5k ZXggNGMwNDI5Y2M2Li44NDkwNzVhYzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9n ZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC05NCw2ICs5NCw3IEBA IHR5cGVkZWYgYm9vbCAoKkluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrKSAoSXRlbVBvaW50ZXIgaXRl bXB0ciwgdm9pZCAqc3RhdGUpOwogCiAvKiBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXBwZWFyIGluIHJl bHNjYW4uaCAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKkluZGV4U2NhbkRl c2M7Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwog dHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhICpTeXNTY2FuRGVzYzsKIAogdHlwZWRlZiBz dHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqUGFyYWxsZWxJbmRleFNjYW5EZXNjOwpA QCAtMTU0LDYgKzE1NSw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0 aW9uIGluZGV4UmVsYXRpb24sCiAKIGV4dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nh bihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkJCQkgUmVsYXRpb24gaW5kZXhSZWxhdGlv biwKKwkJCQkJCQkJCSBib29sIHhzX3dhbnRfaXR1cCwKIAkJCQkJCQkJCSBTbmFwc2hvdCBzbmFw c2hvdCwKIAkJCQkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJ CQkJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKQEAgLTE4MCwxNCArMTgyLDEyIEBA IGV4dGVybiB2b2lkIGluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKFJlbGF0aW9uIGhlYXBS ZWxhdGlvbiwKIGV4dGVybiB2b2lkIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mg c2Nhbik7CiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVs YXRpb24gaGVhcHJlbCwKIAkJCQkJCQkJCQkJICBSZWxhdGlvbiBpbmRleHJlbCwKKwkJCQkJCQkJ CQkJICBib29sIHhzX3dhbnRfaXR1cCwKIAkJCQkJCQkJCQkJICBJbmRleFNjYW5JbnN0cnVtZW50 YXRpb24gKmluc3RydW1lbnQsCiAJCQkJCQkJCQkJCSAgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz LAogCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2Nhbik7CiBleHRlcm4gSXRl bVBvaW50ZXIgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJ IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKLWV4dGVybiBib29sIGluZGV4X2ZldGNoX2hlYXAo SW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7Ci1leHRlcm4gYm9vbCBp bmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKLQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gaW50NjQgaW5k ZXhfZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICpiaXRtYXApOwogCiBl eHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICppbmRleF9idWxrX2RlbGV0ZShJbmRleFZhY3V1 bUluZm8gKmluZm8sCkBAIC0yNTEsNCArMjUxLDI5IEBAIGV4dGVybiB2b2lkIHN5c3RhYmxlX2lu cGxhY2VfdXBkYXRlX2JlZ2luKFJlbGF0aW9uIHJlbGF0aW9uLAogZXh0ZXJuIHZvaWQgc3lzdGFi bGVfaW5wbGFjZV91cGRhdGVfZmluaXNoKHZvaWQgKnN0YXRlLCBIZWFwVHVwbGUgdHVwbGUpOwog ZXh0ZXJuIHZvaWQgc3lzdGFibGVfaW5wbGFjZV91cGRhdGVfY2FuY2VsKHZvaWQgKnN0YXRlKTsK IAorLyoKKyAqIGFtZ2V0YmF0Y2ggdXRpbGl0aWVzIGNhbGxlZCBieSBpbmRleGFtLmMgKGluIGlu ZGV4YmF0Y2guYykKKyAqLworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX2luaXQoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9yZXNldChJbmRleFNj YW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX2VuZChJbmRleFNjYW5E ZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9zKEluZGV4U2Nh bkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKKworLyoKKyAqIGFtZ2V0YmF0Y2ggdXRpbGl0aWVzIGNhbGxlZCBi eSB0YWJsZSBBTXMgKGluIGluZGV4YmF0Y2guYykKKyAqLworZXh0ZXJuIHZvaWQgdGFibGVhbV91 dGlsX2JhdGNoX2RpcmNoYW5nZShJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFi bGVhbV91dGlsX2tpbGxfc2NhbnBvc2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2 b2lkIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX3JlbGVhc2VfYmF0Y2goSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qCisgKiBhbWdldGJh dGNoIHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXggQU1zIChpbiBpbmRleGJhdGNoLmMpCisgKi8K K2V4dGVybiB2b2lkIGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCSAgQnVmZmVyIGJ1Zik7CitleHRlcm4g SW5kZXhTY2FuQmF0Y2ggaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKEluZGV4U2NhbkRlc2Mgc2Nh bik7CitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKwogI2VuZGlmCQkJCQkJCS8qIEdFTkFNX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaAppbmRleCBhODU5YzkwZjQuLjEzNjAxOTkyNSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFw YW0uaApAQCAtMTE4LDkgKzExOCwzNCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoSGVhcERh dGEKIAogCUJ1ZmZlcgkJeHNfY2J1ZjsJCS8qIGN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2Nhbiwg aWYgYW55ICovCiAJQmxvY2tOdW1iZXIgeHNfYmxrOwkJCS8qIHhzX2NidWYncyBibG9jayBudW1i ZXIsIGlmIGFueSAqLwotCS8qIE5COiBpZiB4c19jYnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3 ZSBob2xkIGEgcGluIG9uIHRoYXQgYnVmZmVyICovCisKKwkvKiBGb3IgaW5kZXgtb25seSBzY2Fu cyB0aGF0IG11c3QgYWNjZXNzIHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCUJ1ZmZlcgkJeHNfdm1i dWY7CQkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKwlpbnQJCQl4c192bV9pdGVtczsJLyog IyBpdGVtcyB0byByZXNvbHZlIHZpc2liaWxpdHkgaW5mbyBmb3IgKi8KKworCWJvb2wJCXhzX2xh c3RpbmJsb2NrOyAvKiBsYXN0IFRJRCBvbiB0aGlzIGJsb2NrIGluIGN1cnJlbnQgYmF0Y2g/ICov CisKKwkvKiBOQjogaWYgeHNfY2J1ZiBvciB2bWJ1ZiBhcmUgbm90IEludmFsaWRCdWZmZXIsIHdl IGhvbGQgYSBwaW4gKi8KIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCisvKgorICogUGVyLWJhdGNo IGRhdGEgcHJpdmF0ZSB0byB0aGUgaGVhcCB0YWJsZSBBTS4KKyAqCisgKiBTdG9yZWQgYXQgYSBu ZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgSW5kZXhTY2FuQmF0Y2ggcG9pbnRlciwgaW4gdGhlCisg KiB0YWJsZSBBTSBvcGFxdWUgYXJlYSBvZiBlYWNoIGJhdGNoIGFsbG9jYXRpb24uCisgKi8KK3R5 cGVkZWYgc3RydWN0IEhlYXBCYXRjaERhdGEKK3sKKwl1aW50OAkgICAqdmlzSW5mbzsJCS8qIHBl ci1pdGVtIHZpc2liaWxpdHkgZmxhZ3MsIG9yIE5VTEwgKi8KK30gSGVhcEJhdGNoRGF0YTsKKwor LyogQWNjZXNzIHRoZSBoZWFwLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNj YW5CYXRjaCBwb2ludGVyICovCitzdGF0aWMgaW5saW5lIEhlYXBCYXRjaERhdGEgKgoraGVhcF9i YXRjaF9kYXRhKEluZGV4U2NhbkJhdGNoIGJhdGNoLCBJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJ cmV0dXJuIChIZWFwQmF0Y2hEYXRhICopICgoY2hhciAqKSBiYXRjaCAtIHNjYW4tPmJhdGNoX3Rh YmxlX29mZnNldCk7Cit9CisKIC8qIFJlc3VsdCBjb2RlcyBmb3IgSGVhcFR1cGxlU2F0aXNmaWVz VmFjdXVtICovCiB0eXBlZGVmIGVudW0KIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCBkYTc1MDNjNTcu LmZlZGM0YjRlMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtOTI0LDExMSArOTI0LDI3IEBAIHR5cGVk ZWYgc3RydWN0IEJUVmFjdXVtUG9zdGluZ0RhdGEKIAogdHlwZWRlZiBCVFZhY3V1bVBvc3RpbmdE YXRhICpCVFZhY3V1bVBvc3Rpbmc7CiAKKy8qIFBlci1iYXRjaCBkYXRhIHByaXZhdGUgdG8gdGhl IGJ0cmVlIGluZGV4IEFNICovCit0eXBlZGVmIHN0cnVjdCBCVEJhdGNoRGF0YQoreworCUJ1ZmZl cgkJYnVmOwkJCS8qIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiAoVElEIHJldXNlIGludGVybG9jaykg Ki8KKwlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIGluZGV4IHBhZ2Ugd2l0aCBtYXRjaGluZyBp dGVtcyAqLworCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyogY3VyclBhZ2UncyBsZWZ0IHNpYmxp bmcgKi8KKwlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGN1cnJQYWdlJ3MgcmlnaHQgc2libGlu ZyAqLworCWJvb2wJCW1vcmVMZWZ0OwkJLyogbW9yZSBtYXRjaGluZyBwYWdlcyB0byB0aGUgbGVm dD8gKi8KKwlib29sCQltb3JlUmlnaHQ7CQkvKiBtb3JlIG1hdGNoaW5nIHBhZ2VzIHRvIHRoZSBy aWdodD8gKi8KK30gQlRCYXRjaERhdGE7CisKIC8qCi0gKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRo ZSBidHJlZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgotICogVGhpcyBj b25zaXN0cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5 cygpIGZvcgotICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGluZm9ybWF0aW9uIGFi b3V0IHRoZSBjdXJyZW50IGxvY2F0aW9uCi0gKiBvZiB0aGUgc2NhbiwgYW5kIGluZm9ybWF0aW9u IGFib3V0IHRoZSBtYXJrZWQgbG9jYXRpb24sIGlmIGFueS4gIChXZSB1c2UKLSAqIEJUU2NhblBv c0RhdGEgdG8gcmVwcmVzZW50IHRoZSBkYXRhIG5lZWRlZCBmb3IgZWFjaCBvZiBjdXJyZW50IGFu ZCBtYXJrZWQKLSAqIGxvY2F0aW9ucy4pCUluIGFkZGl0aW9uIHdlIGNhbiByZW1lbWJlciBzb21l IGtub3duLWtpbGxlZCBpbmRleCBlbnRyaWVzCi0gKiB0aGF0IG11c3QgYmUgbWFya2VkIGJlZm9y ZSB3ZSBjYW4gbW92ZSBvZmYgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBJbmRleCBzY2FucyB3 b3JrIGEgcGFnZSBhdCBhIHRpbWU6IHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVu dGlmeQotICogYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZSBhbmQgc2F2ZSB0aGVt IGluIEJUU2NhblBvc0RhdGEsIHRoZW4KLSAqIHJlbGVhc2UgdGhlIHJlYWQtbG9jayB3aGlsZSBy ZXR1cm5pbmcgdGhlIGl0ZW1zIHRvIHRoZSBjYWxsZXIgZm9yCi0gKiBwcm9jZXNzaW5nLiAgVGhp cyBhcHByb2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11c3QgYWx3YXlz Ci0gKiBkcm9wIHRoZSBsb2NrIHRvIG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRvIHByb2Nlc3Mg dGhlIHJldHVybmVkIGl0ZW1zLgotICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFsc28gcmVsZWFz ZSB0aGUgcGluIGR1cmluZyB0aGlzIHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBkcm9wIHRoZSBw aW4gKHdoZW4gc28tPmRyb3BQaW4pIHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNzIGJ5IFZBQ1VV TQotICogKHNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1cnJlbnQg VElEIHJlY3ljbGluZyBzYWZlKS4KLSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJvdGggdGhlIGxv Y2sgYW5kIHRoZSBwaW4gb24gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1vdmluZyBvbiB0 byBpdHMgc2libGluZyBwYWdlLgotICoKLSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5 IHNjYW4sIHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCi0gKiBtYXRjaGVk IGl0ZW0sIG90aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhlIEluZGV4 VHVwbGVzIGdvCi0gKiBpbnRvIGEgc2VwYXJhdGUgd29ya3NwYWNlIGFycmF5OyBlYWNoIEJUU2Nh blBvc0l0ZW0gc3RvcmVzIGl0cyB0dXBsZSdzCi0gKiBvZmZzZXQgd2l0aGluIHRoYXQgYXJyYXku ICBQb3N0aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCi0gKiBhbGxv d2luZyB0aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0 aW5nIGxpc3QKLSAqIHR1cGxlLgorICogQWNjZXNzIHRoZSBidHJlZS1wcml2YXRlIHBlci1iYXRj aCBkYXRhIGZyb20gYW4gSW5kZXhTY2FuQmF0Y2ggcG9pbnRlci4KKyAqIFRoaXMgZm9sbG93cyB0 aGUgc3RhbmRhcmQgY29udmVudGlvbiBmb3IgaW5kZXggQU0gb3BhcXVlIHN0YXRlOiBpdCBjYW4g YmUKKyAqIGZvdW5kIGF0IGEgZml4ZWQgbmVnYXRpdmUgb2Zmc2V0IGZyb20gdGhlIEluZGV4U2Nh bkJhdGNoIHBvaW50ZXIuCiAgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkvKiB3 aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8KK3N0YXRpYyBpbmxpbmUgQlRCYXRj aERhdGEgKgorQlRCYXRjaEdldERhdGEoSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7Ci0JSXRlbVBv aW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9m ZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBw YWdlICovCi0JTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNl dCBpbiB3b3Jrc3BhY2UsIGlmIGFueSAqLwotfSBCVFNjYW5Qb3NJdGVtOwotCi10eXBlZGVmIHN0 cnVjdCBCVFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogY3VyclBhZ2UgYnVmIChp bnZhbGlkIG1lYW5zIHVucGlubmVkKSAqLwotCi0JLyogcGFnZSBkZXRhaWxzIGFzIG9mIHRoZSBz YXZlZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JQmxvY2tOdW1iZXIgY3Vy clBhZ2U7CQkvKiBwYWdlIHJlZmVyZW5jZWQgYnkgaXRlbXMgYXJyYXkgKi8KLQlCbG9ja051bWJl ciBwcmV2UGFnZTsJCS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCi0JQmxvY2tOdW1iZXIgbmV4 dFBhZ2U7CQkvKiBjdXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KLQlYTG9nUmVjUHRyCWxzbjsJCQkv KiBjdXJyUGFnZSdzIExTTiAod2hlbiBzby0+ZHJvcFBpbikgKi8KLQotCS8qIHNjYW4gZGlyZWN0 aW9uIGZvciB0aGUgc2F2ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCVNj YW5EaXJlY3Rpb24gZGlyOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25s eSBzY2FuLCBuZXh0VHVwbGVPZmZzZXQgaXMgdGhlIGZpcnN0IGZyZWUKLQkgKiBsb2NhdGlvbiBp biB0aGUgYXNzb2NpYXRlZCB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZS4KLQkgKi8KLQlpbnQJCQlu ZXh0VHVwbGVPZmZzZXQ7Ci0KLQkvKgotCSAqIG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgdHJhY2sg d2hldGhlciB3ZSB0aGluayB0aGVyZSBtYXkgYmUgbWF0Y2hpbmcKLQkgKiBpbmRleCBlbnRyaWVz IHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgY3VycmVudCBwYWdlLCByZXNwZWN0aXZlbHku Ci0JICovCi0JYm9vbAkJbW9yZUxlZnQ7Ci0JYm9vbAkJbW9yZVJpZ2h0OwotCi0JLyoKLQkgKiBU aGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNy ZWFzaW5nCi0JICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMg Y29udmVuaWVudCB0byBmaWxsIHRoZQotCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0 YXJ0IGF0IHRoZSBsYXN0IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNlIHdlIG5l ZWQgYm90aCBhIGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRl ci4KLQkgKiBpdGVtSW5kZXggaXMgYSBjdXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3YXMgbGFz dCByZXR1cm5lZCB0byBjYWxsZXIuCi0JICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3Qg dmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxp ZCBpbmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRl eCBpbiBpdGVtc1tdICovCi0KLQlCVFNjYW5Qb3NJdGVtIGl0ZW1zW01heFRJRHNQZXJCVHJlZVBh Z2VdOwkvKiBNVVNUIEJFIExBU1QgKi8KLX0gQlRTY2FuUG9zRGF0YTsKLQotdHlwZWRlZiBCVFNj YW5Qb3NEYXRhICpCVFNjYW5Qb3M7Ci0KLSNkZWZpbmUgQlRTY2FuUG9zSXNQaW5uZWQoc2NhbnBv cykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJy UGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZl cklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBpbihzY2Fu cG9zKSBcCi0JZG8geyBcCi0JCVJlbGVhc2VCdWZmZXIoKHNjYW5wb3MpLmJ1Zik7IFwKLQkJKHNj YW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBCVFNj YW5Qb3NVbnBpbklmUGlubmVkKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJaWYgKEJUU2NhblBvc0lz UGlubmVkKHNjYW5wb3MpKSBcCi0JCQlCVFNjYW5Qb3NVbnBpbihzY2FucG9zKTsgXAotCX0gd2hp bGUgKDApCi0KLSNkZWZpbmUgQlRTY2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3Nl cnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJ IUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChz Y2FucG9zKS5jdXJyUGFnZSkgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5w b3MpIFwKLQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNj YW5wb3MpLmN1cnJQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JfSB3aGlsZSAoMCkKKwly ZXR1cm4gKEJUQmF0Y2hEYXRhICopICgoY2hhciAqKSBiYXRjaCAtIE1BWEFMSUdOKHNpemVvZihC VEJhdGNoRGF0YSkpKTsKK30KIAogLyogV2UgbmVlZCBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggZXF1 YWxpdHktdHlwZSBTS19TRUFSQ0hBUlJBWSBzY2FuIGtleSAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRB cnJheUtleUluZm8KQEAgLTEwNTAsNiArOTY2LDI4IEBAIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlL ZXlJbmZvCiAJU2NhbktleQkJaGlnaF9jb21wYXJlOwkvKiBhcnJheSdzIDwgb3IgPD0gdXBwZXIg Ym91bmQgKi8KIH0gQlRBcnJheUtleUluZm87CiAKKy8qCisgKiBCVFNjYW5PcGFxdWVEYXRhIGlz IHRoZSBidHJlZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgorICogVGhp cyBjb25zaXN0cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nf a2V5cygpIGZvcgorICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGFuZCBpbmZvcm1h dGlvbiBhYm91dCB0aGUgY3VycmVudCBhcnJheQorICoga2V5cy4gIFRoZXJlIGFyZSBhc3N1bXB0 aW9ucyBhYm91dCBob3cgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyB0cmFjayB0aGUKKyAqIHByb2dy ZXNzIG9mIHRoZSBpbmRleCBzY2FuIHRocm91Z2ggdGhlIGluZGV4J3Mga2V5IHNwYWNlIChzZWUg X2J0X3JlYWRwYWdlCisgKiBhbmQgX2J0X2FkdmFuY2VfYXJyYXlfa2V5cyksIGJ1dCB3ZSBkb24n dCBhY3R1YWxseSB0cmFjayBhbnl0aGluZyBhYm91dCB0aGUKKyAqIGN1cnJlbnQgc2NhbiBwb3Np dGlvbiBpbiB0aGlzIG9wYXF1ZSBzdHJ1Y3QuCisgKgorICogSW5kZXggc2NhbnMgd29yayBhIHBh Z2UgYXQgYSB0aW1lLCBhcyByZXF1aXJlZCBieSB0aGUgYW1nZXRiYXRjaCBjb250cmFjdDoKKyAq IHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5n IGl0ZW1zIG9uIHRoZSBwYWdlCisgKiBhbmQgcmV0dXJuIHRoZW0gaW4gYSBuZXdseSBhbGxvY2F0 ZWQgYmF0Y2guICBXZSB0aGVuIHJlbGVhc2UgdGhlIHJlYWQtbG9jaworICogdXNpbmcgYW1nZXRi YXRjaCB1dGlsaXR5IHJvdXRpbmVzLiAgVGhpcyBhcHByb2FjaCBtaW5pbWl6ZXMgbG9jay91bmxv Y2sKKyAqIHRyYWZmaWMuIF9idF9uZXh0IGlzIHBhc3NlZCBwcmlvcmJhdGNoLCB3aGljaCBjb250 YWlucyBkZXRhaWxzIG9mIHdoaWNoCisgKiBwYWdlIGlzIG5leHQgaW4gbGluZSB0byBiZSByZWFk IChwcmlvcmJhdGNoIGlzIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IHRvCisgKiBidGdldGJhdGNo IGJ5IGNvcmUgY29kZSkuCisgKgorICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nh biwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKKyAqIG1hdGNoZWQgaXRl bSwgb3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGlzIGlzIGFsc28g cGVyIHRoZQorICogYW1nZXRiYXRjaCBjb250cmFjdC4gIFBvc3RpbmcgbGlzdCB0dXBsZXMgc3Rv cmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKKyAqIGFsbG93aW5nIHRoZSBzYW1lIGtleSB0byBiZSBy ZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3RpbmcgbGlzdC4KKyAqLwogdHlwZWRlZiBz dHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogewogCS8qIHRoZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IF9i dF9wcmVwcm9jZXNzX2tleXMoKTogKi8KQEAgLTEwNjYsMzIgKzEwMDQsNiBAQCB0eXBlZGVmIHN0 cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiAJQlRBcnJheUtleUluZm8gKmFycmF5S2V5czsJLyogaW5m byBhYm91dCBlYWNoIGVxdWFsaXR5LXR5cGUgYXJyYXkga2V5ICovCiAJRm1nckluZm8gICAqb3Jk ZXJQcm9jczsJCS8qIE9SREVSIHByb2NzIGZvciByZXF1aXJlZCBlcXVhbGl0eSBrZXlzICovCiAJ TWVtb3J5Q29udGV4dCBhcnJheUNvbnRleHQ7IC8qIHNjYW4tbGlmZXNwYW4gY29udGV4dCBmb3Ig YXJyYXkgZGF0YSAqLwotCi0JLyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxs ZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0JaW50CQkgICAqa2lsbGVkSXRlbXM7 CS8qIGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1L aWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCWJvb2wJCWRy b3BQaW47CQkvKiBkcm9wIGxlYWYgcGluIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnM/ICovCi0K LQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0 aGUgdHVwbGUgc3RvcmFnZQotCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBjdXJyUG9zIGFuZCBtYXJr UG9zIHJlc3BlY3RpdmVseS4gIEVhY2ggaXMgb2Ygc2l6ZQotCSAqIEJMQ0tTWiwgc28gaXQgY2Fu IGhvbGQgYXMgbXVjaCBhcyBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9mIHR1cGxlcy4KLQkgKi8KLQlj aGFyCSAgICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgY3VyclBvcyAqLwotCWNo YXIJICAgKm1hcmtUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBtYXJrUG9zICovCi0KLQkv KgotCSAqIElmIHRoZSBtYXJrZWQgcG9zaXRpb24gaXMgb24gdGhlIHNhbWUgcGFnZSBhcyBjdXJy ZW50IHBvc2l0aW9uLCB3ZQotCSAqIGRvbid0IHVzZSBtYXJrUG9zLCBidXQganVzdCBrZWVwIHRo ZSBtYXJrZWQgaXRlbUluZGV4IGluIG1hcmtJdGVtSW5kZXgKLQkgKiAoYWxsIHRoZSByZXN0IG9m IGN1cnJQb3MgaXMgdmFsaWQgZm9yIHRoZSBtYXJrIHBvc2l0aW9uKS4gSGVuY2UsIHRvCi0JICog ZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbWFyaywgZmlyc3QgbG9vayBhdCBtYXJrSXRlbUluZGV4 LCB0aGVuIGF0Ci0JICogbWFya1Bvcy4KLQkgKi8KLQlpbnQJCQltYXJrSXRlbUluZGV4OwkvKiBp dGVtSW5kZXgsIG9yIC0xIGlmIG5vdCB2YWxpZCAqLwotCi0JLyoga2VlcCB0aGVzZSBsYXN0IGlu IHN0cnVjdCBmb3IgZWZmaWNpZW5jeSAqLwotCUJUU2NhblBvc0RhdGEgY3VyclBvczsJCS8qIGN1 cnJlbnQgcG9zaXRpb24gZGF0YSAqLwotCUJUU2NhblBvc0RhdGEgbWFya1BvczsJCS8qIG1hcmtl ZCBwb3NpdGlvbiwgaWYgYW55ICovCiB9IEJUU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgQlRT Y2FuT3BhcXVlRGF0YSAqQlRTY2FuT3BhcXVlOwpAQCAtMTE2MCwxNCArMTA3MiwxNyBAQCBleHRl cm4gYm9vbCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVs bCwKIGV4dGVybiBJbmRleFNjYW5EZXNjIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4o UmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgYnRp bml0cGFyYWxsZWxzY2FuKHZvaWQgKnRhcmdldCk7Ci1leHRlcm4gYm9vbCBidGdldHR1cGxlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJh dGNoIGJ0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0 Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2 NCBidGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVy biB2b2lkIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQg bnNjYW5rZXlzLAogCQkJCQkgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRl cm4gdm9pZCBidGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpOworZXh0ZXJuIHZvaWQgYnRyZWxlYXNlYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gdm9pZCBidHBhcmFsbGVscmVzY2FuKElu ZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuKTsKLWV4dGVybiB2b2lkIGJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJu IHZvaWQgYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgYnRwb3Ny ZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiBJ bmRleEJ1bGtEZWxldGVSZXN1bHQgKmJ0YnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8s CiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAkJCQkJCQkJCQkg ICBJbmRleEJ1bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywKQEAgLTEyNzEsOCArMTE4Niw5IEBA IGV4dGVybiB2b2lkIF9idF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIC8q CiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0cmVhZHBhZ2UuYwogICovCi1leHRl cm4gYm9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwKLQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSk7CitleHRlcm4g Ym9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBuZXdi YXRjaCwKKwkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJ CQkJCSBib29sIGZpcnN0cGFnZSk7CiBleHRlcm4gdm9pZCBfYnRfc3RhcnRfYXJyYXlfa2V5cyhJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQJX2J0X2Jp bnNyY2hfYXJyYXlfc2tleShGbWdySW5mbyAqb3JkZXJwcm9jLAogCQkJCQkJCQkgICBib29sIGN1 cl9lbGVtX3RyaWcsIFNjYW5EaXJlY3Rpb24gZGlyLApAQCAtMTI4NywxNSArMTIwMywxNSBAQCBl eHRlcm4gQlRTdGFjayBfYnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwg QlRTY2FuSW5zZXJ0IGtleSwKIAkJCQkJCSAgQnVmZmVyICpidWZQLCBpbnQgYWNjZXNzLCBib29s IHJldHVybnN0YWNrKTsKIGV4dGVybiBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2hfaW5zZXJ0KFJl bGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSk7CiBleHRlcm4gaW50MzIgX2J0 X2NvbXBhcmUoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNl dE51bWJlciBvZmZudW0pOwotZXh0ZXJuIGJvb2wgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2J0X25leHQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2J0X2Zp cnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4 U2NhbkJhdGNoIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs CisJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7CiBleHRlcm4gQnVmZmVyIF9i dF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0 KTsKIAogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnR1dGlscy5jCiAgKi8K IGV4dGVybiBCVFNjYW5JbnNlcnQgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVw bGUgaXR1cCk7Ci1leHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CiBleHRlcm4gQlRDeWNsZUlkIF9idF92YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0 ZXJuIEJUQ3ljbGVJZCBfYnRfc3RhcnRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9p ZCBfYnRfZW5kX3ZhY3V1bShSZWxhdGlvbiByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggY2Uz NDBjMDc2Li5kM2FiNWY5MWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2Fu LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTYsNiArMTYsNyBAQAog CiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9pdHVw LmgiCisjaW5jbHVkZSAiYWNjZXNzL3NkaXIuaCIKICNpbmNsdWRlICJub2Rlcy90aWRiaXRtYXAu aCIKICNpbmNsdWRlICJwb3J0L2F0b21pY3MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3JlbGZpbGVs b2NhdG9yLmgiCkBAIC0xMjIsOCArMTIzLDE3NyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJs b2NrVGFibGVTY2FuV29ya2VyRGF0YSAqUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlcjsKIHR5 cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEKIHsKIAlSZWxhdGlvbglyZWw7CisKKwkv KiBUYWJsZSBBTSBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgc2l6ZSAoTUFYQUxJR04nZCksIHNldCBi eSBBTSAqLworCXVpbnQxNgkJYmF0Y2hfb3BhcXVlX3NpemU7CisKKwkvKiBQZXItaXRlbSB0cmFp bGluZyBkYXRhIHNpemUgaW4gZWFjaCBiYXRjaCAqLworCXVpbnQxNgkJYmF0Y2hfcGVyX2l0ZW1f c2l6ZTsKIH0gSW5kZXhGZXRjaFRhYmxlRGF0YTsKIAorLyoKKyAqIExvY2F0aW9uIG9mIGEgQmF0 Y2hNYXRjaGluZ0l0ZW0gdGhhdCBhcHBlYXJzIGluIGEgSW5kZXhTY2FuQmF0Y2ggcmV0dXJuZWQK KyAqIGJ5IChhbmQgc3Vic2VxdWVudGx5IHBhc3NlZCB0bykgYW4gYW1nZXRiYXRjaCByb3V0aW5l CisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0l0ZW1Qb3MKK3sKKwkvKiBQb3NpdGlvbiBy ZWZlcmVuY2VzIGEgdmFsaWQgQmF0Y2hSaW5nQnVmZmVyLmJhdGNoZXNbXSBlbnRyeT8gKi8KKwli b29sCQl2YWxpZDsKKworCS8qIEJhdGNoUmluZ0J1ZmZlci5iYXRjaGVzW10td2lzZSBpbmRleCB0 byByZWxldmFudCBJbmRleFNjYW5CYXRjaCAqLworCXVpbnQ4CQliYXRjaDsKKworCS8qIEluZGV4 U2NhbkJhdGNoLml0ZW1zW10td2lzZSBpbmRleCB0byByZWxldmFudCBCYXRjaE1hdGNoaW5nSXRl bSAqLworCWludAkJCWl0ZW07CisKK30gQmF0Y2hSaW5nSXRlbVBvczsKKworLyoKKyAqIE1hdGNo aW5nIGl0ZW0gcmV0dXJuZWQgYnkgYW1nZXRiYXRjaCAoaW4gcmV0dXJuZWQgSW5kZXhTY2FuQmF0 Y2gpIGR1cmluZyBhbgorICogaW5kZXggc2Nhbi4gIFVzZWQgYnkgdGFibGUgQU0gdG8gbG9jYXRl IHJlbGV2YW50IG1hdGNoaW5nIHRhYmxlIHR1cGxlLgorICovCit0eXBlZGVmIHN0cnVjdCBCYXRj aE1hdGNoaW5nSXRlbQoreworCUl0ZW1Qb2ludGVyRGF0YSB0YWJsZVRpZDsJLyogVElEIG9mIHJl ZmVyZW5jZWQgdGFibGUgaXRlbSAqLworCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5k ZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCisJTG9jYXRpb25JbmRleCB0dXBsZU9m ZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNldCBpbiB3b3Jrc3BhY2UsIGlmIGFueSAqLworfSBC YXRjaE1hdGNoaW5nSXRlbTsKKworLyoKKyAqIFBlci1pdGVtIHZpc2liaWxpdHkgZmxhZ3MgZm9y IGluZGV4LW9ubHkgc2NhbnMuICBTdG9yZWQgaW4gYSBzZXBhcmF0ZQorICogYXJyYXkgKEluZGV4 U2NhbkJhdGNoRGF0YS52aXNJbmZvKSByYXRoZXIgdGhhbiBpbiBCYXRjaE1hdGNoaW5nSXRlbSB0 byBrZWVwCisgKiB0aGUgaG90IGl0ZW1zIGFycmF5IGNvbXBhY3QuCisgKi8KKyNkZWZpbmUgQkFU Q0hfVklTX0NIRUNLRUQJCTB4MDEJLyogY2hlY2tlZCBpdGVtIGluIFZNPyAqLworI2RlZmluZSBC QVRDSF9WSVNfQUxMX1ZJU0lCTEUJMHgwMgkvKiBibG9jayBpcyBrbm93biBhbGwtdmlzaWJsZT8g Ki8KKworLyoKKyAqIERhdGEgYWJvdXQgb25lIGJhdGNoIG9mIGl0ZW1zIHJldHVybmVkIGJ5IChh bmQgcGFzc2VkIHRvKSBhbWdldGJhdGNoIGR1cmluZworICogaW5kZXggc2NhbnMuCisgKgorICog RWFjaCBiYXRjaCBhbGxvY2F0aW9uIGhhcyB0aGUgZm9sbG93aW5nIG1lbW9yeSBsYXlvdXQ6Cisg KgorICogICBbdGFibGUgQU0gb3BhcXVlIGFyZWFdICAgIDwtIGF0IC0oYmF0Y2hfdGFibGVfb2Zm c2V0KSBmcm9tIGJhdGNoIHB0cgorICogICBbaW5kZXggQU0gb3BhcXVlIGFyZWFdICAgIDwtIGF0 IC0oYmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUpIGZyb20gYmF0Y2ggcHRyCisgKiAgIFtJbmRleFNj YW5CYXRjaERhdGFdICAgICAgPC0gdGhlIHJldHVybmVkIHBvaW50ZXIKKyAqICAgW2l0ZW1zW21h eGl0ZW1zYmF0Y2hdXQorICogICBbdGFibGUgQU0gdHJhaWxpbmcgZGF0YV0gIDwtIGUuZy4gcGVy LWl0ZW0gdmlzaWJpbGl0eSBmbGFncworICogICBbY3VyclR1cGxlcyB3b3Jrc3BhY2VdICAgIDwt IHNpemVkIGJ5IGluZGV4IEFNIChiYXRjaF90dXBsZXNfd29ya3NwYWNlKQorICoKKyAqIFRoZSBB TS1zcGVjaWZpYyBvcGFxdWUgYXJlYXMgYXJlIGFjY2Vzc2VkIHZpYSBhY2Nlc3NvciBmdW5jdGlv bnMgZGVmaW5lZCBieQorICogZWFjaCB0YWJsZSBBTSBhbmQgaW5kZXggQU0gdGhhdCBzdXBwb3J0 cyB0aGUgYmF0Y2ggaW50ZXJmYWNlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0 Y2hEYXRhCit7CisJWExvZ1JlY1B0cglsc247CQkJLyogaW5kZXggcGFnZSdzIExTTiAqLworCisJ Lyogc2NhbiBkaXJlY3Rpb24gd2hlbiB0aGUgaW5kZXggcGFnZSB3YXMgcmVhZCAqLworCVNjYW5E aXJlY3Rpb24gZGlyOworCisJLyoKKwkgKiBrbm93bkVuZEJhY2t3YXJkIGFuZCBrbm93bkVuZEZv cndhcmQgYXJlIHNldCBieSB0aGUgdGFibGUgQU0gdG8KKwkgKiBpbmRpY2F0ZSB0aGF0IHRoaXMg YmF0Y2ggaXMgdGhlIGxhc3Qgb25lIHdpdGggbWF0Y2hpbmcgaXRlbXMgaW4gdGhlCisJICogcmVs ZXZhbnQgc2NhbiBkaXJlY3Rpb24uICBXaGVuIGFtZ2V0YmF0Y2ggcmV0dXJucyBOVUxMIGZvciBh IGdpdmVuCisJICogZGlyZWN0aW9uLCB0aGUgdGFibGUgQU0gc2V0cyB0aGUgY29ycmVzcG9uZGlu ZyBmbGFnIG9uIHRoZSBwcmlvcmJhdGNoCisJICogdGhhdCB3YXMgcGFzc2VkIHRvIHRoYXQgY2Fs bC4gIFdlIGNhbm5vdCBrbm93IHRoaXMgd2hlbiBhIGJhdGNoIGlzCisJICogZmlyc3QgcmV0dXJu ZWQgYnkgYW1nZXRiYXRjaDsgaXQgb25seSBiZWNvbWVzIGFwcGFyZW50IHdoZW4gd2UgdHJ5IGFu ZAorCSAqIGZhaWwgdG8gY29udGludWUgdGhlIHNjYW4gcGFzdCBpdC4KKwkgKgorCSAqIFRoaXMg YWxsb3dzIHRhYmxlIEFNcyB0byBhdm9pZCByZWR1bmRhbnQgYW1nZXRiYXRjaCBjYWxscyB3aXRo IHRoZSBzYW1lCisJICogcHJpb3JiYXRjaCAtLSB0aGUgaW5kZXggQU0gbWlnaHQgbmVlZCB0byBy ZWFkIGFkZGl0aW9uYWwgaW5kZXggcGFnZXMgdG8KKwkgKiBkZXRlcm1pbmUgdGhlcmUgYXJlIG5v IG1vcmUgbWF0Y2hpbmcgaXRlbXMgYmV5b25kIGNhbGxlcidzIHByaW9yYmF0Y2guCisJICovCisJ Ym9vbAkJa25vd25FbmRCYWNrd2FyZDsKKwlib29sCQlrbm93bkVuZEZvcndhcmQ7CisKKwkvKgor CSAqIE1hdGNoaW5nIGl0ZW1zIHN0YXRlIGZvciB0aGlzIGJhdGNoLiAgT3V0cHV0IGJ5IGluZGV4 IEFNIGZvciB0YWJsZSBBTS4KKwkgKgorCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3Jk ZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGJ5IGluY3JlYXNpbmcKKwkgKiBpbmRleG9mZnNldCku ICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IGZvciBpbmRleCBBTXMK KwkgKiB0byBmaWxsIHRoZSBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUg bGFzdCBpdGVtIHNsb3QgYW5kCisJICogZmlsbCBkb3dud2FyZHMuICBUaGlzIGlzIHdoeSB3ZSBu ZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYQorCSAqIGxhc3QtdmFsaWQtZW50cnkg Y291bnRlci4KKwkgKgorCSAqIE5vdGU6IHRoZXNlIGFyZSBzaWduZWQgYmVjYXVzZSBpdCdzIHNv bWV0aW1lcyBjb252ZW5pZW50IHRvIHVzZSAtMSB0bworCSAqIHJlcHJlc2VudCBhbiBvdXQtb2Yt Ym91bmRzIHNwYWNlIGp1c3QgYmVmb3JlIGZpcnN0SXRlbSAod2hlbiBpdCdzIDApLgorCSAqLwor CWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKwlp bnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCisJLyog aW5mbyBhYm91dCBkZWFkIGl0ZW1zIGlmIGFueSAoZGVhZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIg dXNlZCkgKi8KKwlpbnQJCQludW1EZWFkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQg aXRlbXMgKi8KKwlpbnQJCSAgICpkZWFkSXRlbXM7CQkvKiBpbmRleGVzIG9mIGRlYWQgaXRlbXMg Ki8KKworCS8qCisJICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgdGhpcyBp cyB0aGUgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UKKwkgKiBmb3IgdGhlIG1hdGNoaW5nIHR1cGxl cyAodHVwbGVzIHJlZmVyZW5jZWQgYnkgaXRlbXNbXSkuICBUaGUgd29ya3NwYWNlCisJICogc2l6 ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBBTSAoYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSku CisJICoKKwkgKiBjdXJyVHVwbGVzIHBvaW50cyBpbnRvIHRoZSB0cmFpbGluZyBwb3J0aW9uIG9m IHRoaXMgYWxsb2NhdGlvbiwgcGFzdAorCSAqIGl0ZW1zW10gYW5kIGFueSB0YWJsZSBBTSB0cmFp bGluZyBkYXRhLiAgSXQgaXMgTlVMTCBmb3IgcGxhaW4gaW5kZXgKKwkgKiBzY2Fucy4KKwkgKi8K KwljaGFyCSAgICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgaXRlbXNbXSAqLwor CUJhdGNoTWF0Y2hpbmdJdGVtIGl0ZW1zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8qIG1hdGNo aW5nIGl0ZW1zICovCit9IEluZGV4U2NhbkJhdGNoRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgSW5k ZXhTY2FuQmF0Y2hEYXRhICpJbmRleFNjYW5CYXRjaDsKKworLyoKKyAqIE1heGltdW0gbnVtYmVy IG9mIGJhdGNoZXMgKGxlYWYgcGFnZXMpIHdlIGNhbiBrZWVwIGluIG1lbW9yeS4gIFdlIG5lZWQg YQorICogbWluaW11bSBvZiB0d28sIHNpbmNlIHdlJ2xsIG9ubHkgY29uc2lkZXIgcmVsZWFzaW5n IG9uZSBiYXRjaCB3aGVuIGFub3RoZXIKKyAqIGlzIHJlYWQuCisgKgorICogVGhlIGN1cnJlbnQg bWF4aW11bSBvZiA2NCBiYXRjaGVzIGlzIHNvbWV3aGF0IG9mIGFuIGFyYml0cmFyeSBsaW1pdC4g IFZlcnkKKyAqIGZldyBzY2FucyBldmVyIGdldCBuZWFyIHRvIHRoaXMgbGltaXQgaW4gcHJhY3Rp Y2UuCisgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUwkJNjQKKyNkZWZpbmUgSU5E RVhfU0NBTl9DQUNIRV9CQVRDSEVTCTIKKworLyoKKyAqIFN0YXRlIHVzZWQgYnkgdGFibGUgQU1z IHRvIG1hbmFnZSBhbiBpbmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaAorICogaW50 ZXJmYWNlLiAgU2NhbnMgdXNlIGEgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyByZXR1cm5lZCBieSBh bWdldGJhdGNoLgorICoKKyAqIEJhdGNoZXMgYXJlIGtlcHQgaW4gdGhlIG9yZGVyIHRoYXQgdGhl eSB3ZXJlIHJldHVybmVkIGluIGJ5IGFtZ2V0YmF0Y2gsCisgKiBzaW5jZSB0aGF0IGlzIHRoZSBz YW1lIG9yZGVyIHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHdpbGwgcmV0dXJuCisgKiBt YXRjaGVzIGluLiAgSG93ZXZlciwgdGFibGUgQU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxlIHR1 cGxlcyBpbiB3aGF0ZXZlcgorICogb3JkZXIgaXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVudCAt LSBwcm92aWRlZCB0aGF0IHN1Y2ggcmVvcmRlcmluZyBjYW5ub3QKKyAqIGFmZmVjdCB0aGUgb3Jk ZXIgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMgaW4u CisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgoreworCS8qIGN1cnJlbnQgcG9z aXRpb25zIGluIGJhdGNoZXNbXSBmb3Igc2NhbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3Mgc2NhblBv czsJLyogc2NhbidzIHJlYWQgcG9zaXRpb24gKi8KKwlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQb3M7 CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNo OworCisJLyoKKwkgKiBoZWFkQmF0Y2ggaXMgYW4gaW5kZXggdG8gdGhlIGVhcmxpZXN0IHN0aWxs LXZhbGlkIGJhdGNoIGluICdiYXRjaGVzJy4KKwkgKiBJbiBwcmFjdGljZSB0aGlzIG11c3QgYmUg dGhlIHNjYW4ncyBjdXJyZW50IHNjYW5Qb3MgYmF0Y2ggKHNjYW5CYXRjaCkuCisJICovCisJdWlu dDgJCWhlYWRCYXRjaDsKKworCS8qCisJICogbmV4dEJhdGNoIGlzIGFuIGluZGV4IHRvIHRoZSBu ZXh0IGVtcHR5IGJhdGNoIHNsb3QgaW4gJ2JhdGNoZXMnLiAgVGhpcworCSAqIGlzIG9ubHkgYWN0 dWFsbHkgdXNhYmxlIHdoZW4gdGhlIHNjYW4gaXMgIWluZGV4X3NjYW5fYmF0Y2hfZnVsbCgpLgor CSAqLworCXVpbnQ4CQluZXh0QmF0Y2g7CisKKwkvKgorCSAqIFNob3VsZCBpbmRleGFtX3V0aWxf YmF0Y2hfcmVsZWFzZSBzYXZlIGNhbGxlcidzIGJhdGNoIGluIGNhY2hlW10/CisJICovCisJYm9v bAkJZG9uZTsKKworCS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIGNhY2hlZCByZWN5Y2xhYmxlIGJh dGNoZXMgKi8KKwlJbmRleFNjYW5CYXRjaCBjYWNoZVtJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVNd OworCisJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gcmluZyBidWZmZXIgYmF0Y2hlcyAqLworCUlu ZGV4U2NhbkJhdGNoIGJhdGNoZXNbSU5ERVhfU0NBTl9NQVhfQkFUQ0hFU107CisKK30gQmF0Y2hS aW5nQnVmZmVyOworCiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAvKgpAQCAt MTQxLDYgKzMxMSwyMCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWludAkJ CW51bWJlck9mT3JkZXJCeXM7CS8qIG51bWJlciBvZiBvcmRlcmluZyBvcGVyYXRvcnMgKi8KIAlz dHJ1Y3QgU2NhbktleURhdGEgKmtleURhdGE7CS8qIGFycmF5IG9mIGluZGV4IHF1YWxpZmllciBk ZXNjcmlwdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqb3JkZXJCeURhdGE7CS8qIGFycmF5 IG9mIG9yZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCisKKwkvKiBpbmRleCBhY2Nlc3MgbWV0aG9k J3MgcHJpdmF0ZSBzdGF0ZSAqLworCXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9k LXNwZWNpZmljIGluZm8gKi8KKworCS8qIHRhYmxlIGFjY2VzcyBtZXRob2QncyBwcml2YXRlIGFt Z2V0YmF0Y2ggc3RhdGUgKi8KKwlCYXRjaFJpbmdCdWZmZXIgYmF0Y2hyaW5nYnVmOwkvKiBhbWdl dGJhdGNoIHJlbGF0ZWQgc3RhdGUgKi8KKworCWJvb2wJCXVzZWJhdGNocmluZzsJLyogc2NhbiB1 c2VzIGFtZ2V0YmF0Y2gvYmF0Y2hyaW5nYnVmPyAqLworCWJvb2wJCWJhdGNoSW1tZWRpYXRlUmVs ZWFzZTsJLyogQU0gcmVsZWFzZXMgYmF0Y2ggcmVzb3VyY2VzIGluCisJCQkJCQkJCQkJICogaW5k ZXhhbV91dGlsX2JhdGNoX3VubG9jaz8gKi8KKworCS8qIENhY2hlZCBiYXRjaCBmb3IgYW1nZXRi aXRtYXAgY2FsbGVycyAoYXZvaWRzIHJlcGVhdGVkIGFsbG9jL2ZyZWUpICovCisJSW5kZXhTY2Fu QmF0Y2ggeHNfYml0bWFwX2JhdGNoOworCiAJYm9vbAkJeHNfd2FudF9pdHVwOwkvKiBjYWxsZXIg cmVxdWVzdHMgaW5kZXggdHVwbGVzICovCiAJYm9vbAkJeHNfdGVtcF9zbmFwOwkvKiB1bnJlZ2lz dGVyIHNuYXBzaG90IGF0IHNjYW4gZW5kPyAqLwogCkBAIC0xNDksOSArMzMzLDggQEAgdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlib29sCQlpZ25vcmVfa2lsbGVkX3R1cGxlczsJ LyogZG8gbm90IHJldHVybiBraWxsZWQgZW50cmllcyAqLwogCWJvb2wJCXhhY3RTdGFydGVkSW5S ZWNvdmVyeTsJLyogcHJldmVudHMga2lsbGluZy9zZWVpbmcga2lsbGVkCiAJCQkJCQkJCQkJICog dHVwbGVzICovCi0KLQkvKiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAqLwot CXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGluZm8gKi8KKwkv KiB4c19zbmFwc2hvdCB1c2VzIGFuIE1WQ0Mgc25hcHNob3Q/ICovCisJYm9vbAkJTVZDQ1NjYW47 CiAKIAkvKgogCSAqIEluc3RydW1lbnRhdGlvbiBjb3VudGVycyBtYWludGFpbmVkIGJ5IGFsbCBp bmRleCBBTXMgZHVyaW5nIGJvdGgKQEAgLTE2MCwxMCArMzQzLDEwIEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4U2NhbkRlc2NEYXRhCiAJc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5z dHJ1bWVudDsKIAogCS8qCi0JICogSW4gYW4gaW5kZXgtb25seSBzY2FuLCBhIHN1Y2Nlc3NmdWwg YW1nZXR0dXBsZSBjYWxsIG11c3QgZmlsbCBlaXRoZXIKLQkgKiB4c19pdHVwIChhbmQgeHNfaXR1 cGRlc2MpIG9yIHhzX2hpdHVwIChhbmQgeHNfaGl0dXBkZXNjKSB0byBwcm92aWRlIHRoZQotCSAq IGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNjYW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGljaCBj YXNlIHRoZSBoZWFwCi0JICogZm9ybWF0IHdpbGwgYmUgdXNlZC4KKwkgKiBJbiBhbiBpbmRleC1v bmx5IHNjYW4sIGEgc3VjY2Vzc2Z1bCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgY2FsbCBtdXN0 CisJICogZmlsbCBlaXRoZXIgeHNfaXR1cCAoYW5kIHhzX2l0dXBkZXNjKSBvciB4c19oaXR1cCAo YW5kIHhzX2hpdHVwZGVzYykgdG8KKwkgKiBwcm92aWRlIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRo ZSBzY2FuLiAgSXQgY2FuIGZpbGwgYm90aCwgaW4gd2hpY2ggY2FzZQorCSAqIHRoZSBoZWFwIGZv cm1hdCB3aWxsIGJlIHVzZWQuCiAJICovCiAJSW5kZXhUdXBsZQl4c19pdHVwOwkJLyogaW5kZXgg dHVwbGUgcmV0dXJuZWQgYnkgQU0gKi8KIAlzdHJ1Y3QgVHVwbGVEZXNjRGF0YSAqeHNfaXR1cGRl c2M7CS8qIHJvd3R5cGUgZGVzY3JpcHRvciBvZiB4c19pdHVwICovCkBAIC0xNzYsNiArMzU5LDE0 IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJSW5kZXhGZXRjaFRhYmxlRGF0 YSAqeHNfaGVhcGZldGNoOwogCiAJYm9vbAkJeHNfcmVjaGVjazsJCS8qIFQgbWVhbnMgc2NhbiBr ZXlzIG11c3QgYmUgcmVjaGVja2VkICovCisJdWludDE2CQltYXhpdGVtc2JhdGNoOwkvKiBzZXQg YnkgYW1iZWdpbnNjYW4gd2hlbiBhbWdldGJhdGNoIHVzZWQgKi8KKworCS8qIFBlci1iYXRjaCBv cGFxdWUgYXJlYSBzaXplcywgc2V0IGJ5IGluZGV4IEFNIGluIGFtYmVnaW5zY2FuICovCisJdWlu dDE2CQliYXRjaF9pbmRleF9vcGFxdWVfc2l6ZTsJLyogTUFYQUxJR04nZCBpbmRleCBBTSBvcGFx dWUgc2l6ZSAqLworCXVpbnQxNgkJYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTsgLyogY3VyclR1cGxl cyB3b3Jrc3BhY2Ugc2l6ZSAqLworCisJLyogQ29tcHV0ZWQgb2Zmc2V0IGZyb20gYmF0Y2ggcG9p bnRlciB0byB0YWJsZSBBTSBvcGFxdWUgKGluY2x1ZGVzIGJvdGgpICovCisJdWludDE2CQliYXRj aF90YWJsZV9vZmZzZXQ7CiAKIAkvKgogCSAqIFdoZW4gZmV0Y2hpbmcgd2l0aCBhbiBvcmRlcmlu ZyBvcGVyYXRvciwgdGhlIHZhbHVlcyBvZiB0aGUgT1JERVIgQlkKQEAgLTIxNSw0ICs0MDYsMTI0 IEBAIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YQogCXN0cnVjdCBUdXBsZVRhYmxlU2xv dCAqc2xvdDsKIH0gU3lzU2NhbkRlc2NEYXRhOwogCisvKgorICogUmV0dXJuIHRoZSB0cnVlIGFs bG9jYXRpb24gYmFzZSBvZiBhIGJhdGNoIChhY2NvdW50aW5nIGZvciBBTSBvcGFxdWUgYXJlYXMK KyAqIHN0b3JlZCBiZWZvcmUgdGhlIEluZGV4U2NhbkJhdGNoRGF0YSBwb2ludGVyKS4KKyAqLwor c3RhdGljIGlubGluZSB2b2lkICoKK2JhdGNoX2FsbG9jX2Jhc2UoSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gsIEluZGV4U2NhbkRlc2NEYXRhICpzY2FuKQoreworCXJldHVybiAoY2hhciAqKSBiYXRjaCAt IHNjYW4tPmJhdGNoX3RhYmxlX29mZnNldDsKK30KKworLyoKKyAqIENvdW50IGhvdyBtYW55IGJh dGNoZXMgYXJlIGN1cnJlbnRseSBsb2FkZWQgaW4gdGhlIHJpbmcgYnVmZmVyLgorICovCitzdGF0 aWMgaW5saW5lIHVpbnQ4CitpbmRleF9zY2FuX2JhdGNoX2NvdW50KEluZGV4U2NhbkRlc2NEYXRh ICpzY2FuKQoreworCXJldHVybiAodWludDgpIChzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNo IC0KKwkJCQkJc2Nhbi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCk7Cit9CisKKy8qCisgKiBEaWQg d2UgYWxyZWFkeSBsb2FkIGJhdGNoIHdpdGggdGhlIHJlcXVlc3RlZCBpbmRleD8KKyAqLworc3Rh dGljIGlubGluZSBib29sCitpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChJbmRleFNjYW5EZXNjRGF0 YSAqc2NhbiwgdWludDggaWR4KQoreworCXJldHVybiAoaW50OCkgKGlkeCAtIHNjYW4tPmJhdGNo cmluZ2J1Zi5oZWFkQmF0Y2gpID49IDAgJiYKKwkJKGludDgpIChpZHggLSBzY2FuLT5iYXRjaHJp bmdidWYubmV4dEJhdGNoKSA8IDA7Cit9CisKKy8qCisgKiBIYXZlIHdlIGxvYWRlZCB0aGUgbWF4 aW11bSBudW1iZXIgb2YgYmF0Y2hlcz8KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9z Y2FuX2JhdGNoX2Z1bGwoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuIGluZGV4 X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUzsKK30KKwor LyoKKyAqIFJldHVybiBiYXRjaCBmb3IgdGhlIHByb3ZpZGVkIGluZGV4LgorICovCitzdGF0aWMg aW5saW5lIEluZGV4U2NhbkJhdGNoCitpbmRleF9zY2FuX2JhdGNoKEluZGV4U2NhbkRlc2NEYXRh ICpzY2FuLCB1aW50OCBpZHgpCit7CisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNj YW4sIGlkeCkpOworCisJcmV0dXJuIHNjYW4tPmJhdGNocmluZ2J1Zi5iYXRjaGVzW2lkeCAmIChJ TkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSldOworfQorCisvKgorICogQXBwZW5kIGdpdmVuIGJh dGNoIHRvIHNjYW4ncyBiYXRjaCByaW5nIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lk CitpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpCit7CisJQmF0Y2hSaW5nQnVmZmVyICpyaW5nYnVmID0gJnNjYW4tPmJh dGNocmluZ2J1ZjsKKwl1aW50OAkJbmV4dEJhdGNoID0gcmluZ2J1Zi0+bmV4dEJhdGNoOworCisJ cmluZ2J1Zi0+YmF0Y2hlc1tuZXh0QmF0Y2ggJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEp XSA9IGJhdGNoOworCXJpbmdidWYtPm5leHRCYXRjaCsrOworfQorCisvKgorICogQWR2YW5jZSBw b3NpdGlvbiB0byBpdHMgbmV4dCBpdGVtIGluIHRoZSBiYXRjaC4KKyAqCisgKiBBZHZhbmNlIHRv IHRoZSBuZXh0IGl0ZW0gd2l0aGluIHRoZSBwcm92aWRlZCBiYXRjaCAob3IgdG8gdGhlIHByZXZp b3VzIGl0ZW0sCisgKiB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykuCisgKgorICogUmV0dXJucyB0 cnVlIGlmIHRoZSBwb3NpdGlvbiBjb3VsZCBiZSBhZHZhbmNlZC4gIFJldHVybnMgZmFsc2Ugd2hl biB0aGVyZQorICogYXJlIG5vIG1vcmUgaXRlbXMgaW4gdGhlIGJhdGNoIGluIHRoZSBnaXZlbiBk aXJlY3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9wb3NfYWR2YW5j ZShTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gs IEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlBc3NlcnQocG9zLT52YWxpZCk7CisKKwlpZiAo U2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCXsKKwkJaWYgKCsrcG9zLT5pdGVt ID4gYmF0Y2gtPmxhc3RJdGVtKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCQkJCQkJLyog U2NhbkRpcmVjdGlvbklzQmFja3dhcmQgKi8KKwl7CisJCWlmICgtLXBvcy0+aXRlbSA8IGJhdGNo LT5maXJzdEl0ZW0pCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogQWR2YW5jZWQgd2l0aGlu IGJhdGNoICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBBZHZhbmNlIGJhdGNoIHBvc2l0 aW9uIHRvIHRoZSBzdGFydCBvZiBpdHMgbmV3IGJhdGNoLgorICoKKyAqIFNldHMgdGhlIGdpdmVu IHBvc2l0aW9uIHRvIHRoZSBmaXN0IGl0ZW0gaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uIChv ciB0bworICogdGhlIGxhc3QgaXRlbSwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLiAgIEFsc28g YWR2YW5jZXMvaW5jcmVtZW50cyBiYXRjaAorICogb2Zmc2V0IGZyb20gcG9zaXRpb24gc3VjaCB0 aGF0IGl0IHBvaW50cyB0byBuZXdCYXRjaEZvclBvcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lk CitpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkgSW5kZXhTY2FuQmF0Y2ggbmV3QmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlB c3NlcnQobmV3QmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCisJLyogSW5jcmVtZW50IGJhdGNo IChvZnRlbiB3cmFwcyB1aW50OCBiYXRjaCBmaWVsZCkgKi8KKwlpZiAocG9zLT52YWxpZCkKKwkJ cG9zLT5iYXRjaCsrOworCWVsc2UKKwkJcG9zLT5iYXRjaCA9IDA7CisKKwlwb3MtPnZhbGlkID0g dHJ1ZTsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXBvcy0+ aXRlbSA9IG5ld0JhdGNoLT5maXJzdEl0ZW07CisJZWxzZQorCQlwb3MtPml0ZW0gPSBuZXdCYXRj aC0+bGFzdEl0ZW07Cit9CisKICNlbmRpZgkJCQkJCQkvKiBSRUxTQ0FOX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCmluZGV4IDA2MDg0NzUyMi4uMzAxMWY0ZWRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAg LTQzMywxMSArNDMzLDQyIEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJ dm9pZAkJKCppbmRleF9mZXRjaF9lbmQpIChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqZGF0 YSk7CiAKKwkvKgorCSAqIEluaXRpYWxpemUgdGFibGUgQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGFy ZWEgd2l0aGluIGEgYmF0Y2ggYWxsb2NhdGlvbi4KKwkgKgorCSAqIENhbGxlZCBieSBpbmRleGFt X3V0aWxfYmF0Y2hfYWxsb2MgZm9yIGVhY2ggbmV3IG9yIHJlY3ljbGVkIGJhdGNoLgorCSAqIFRh YmxlIEFNcyBzaG91bGQgc2V0IHVwIGl0cyBvcGFxdWUgYXJlYSAoYXQgYSBuZWdhdGl2ZSBvZmZz ZXQgZnJvbSB0aGUKKwkgKiBiYXRjaCBwb2ludGVyKSBhbmQgYW55IHRyYWlsaW5nIHBlci1pdGVt IGRhdGEgKGUuZy4gdmlzaWJpbGl0eSBmbGFncykuCisJICoKKwkgKiAnbmV3X2FsbG9jJyBpcyB0 cnVlIGZvciBmcmVzaGx5IHBhbGxvYydkIGJhdGNoZXMsIGZhbHNlIGZvciBiYXRjaGVzCisJICog cmVjeWNsZWQgZnJvbSB0aGUgY2FjaGUuCisJICovCisJdm9pZAkJKCppbmRleF9iYXRjaF9pbml0 KSAoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCSBi b29sIG5ld19hbGxvYyk7CisKKwkvKgorCSAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4g aW5kZXggc2NhbiBpbnRvIHNsb3QsIHNjYW5uaW5nIGluIHRoZQorCSAqIHNwZWNpZmllZCBkaXJl Y3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3VuZCwgZmFsc2UKKwkgKiBv dGhlcndpc2UuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGFsbG93cyB0aGUgdGFibGUgQU0gdG8g ZGlyZWN0bHkgbWFuYWdlIHRoZSBzY2FuIHByb2Nlc3MsCisJICogaW5jbHVkaW5nIGludGVyZmFj aW5nIHdpdGggdGhlIGluZGV4IEFNLiBUaGUgY2FsbGVyIHNpbXBseSBzcGVjaWZpZXMKKwkgKiB0 aGUgZGlyZWN0aW9uIG9mIHRoZSBzY2FuOyB0aGUgdGFibGUgQU0gdGFrZXMgY2FyZSBvZiByZXRy aWV2aW5nIFRJRHMKKwkgKiBmcm9tIHRoZSBpbmRleCwgcGVyZm9ybWluZyB2aXNpYmlsaXR5IGNo ZWNrcywgYW5kIHJldHVybmluZyB0dXBsZXMgaW4KKwkgKiB0aGUgc2xvdC4KKwkgKi8KKwlib29s CQkoKmluZGV4X2dldG5leHRfc2xvdCkgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSAg IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNs b3QpOworCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIg ZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKIAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYg YSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlzaWJpbGl0eQogCSAqIHRlc3QsIHJl dHVybiB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCiAJICoKKwkgKiBUaGlzIGlzIGEgbG93ZXItbGV2 ZWwgY2FsbGJhY2sgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuCisJICogQ2FsbGVy cyBzaG91bGQgZmF2b3IgdGhlIGluZGV4X2dldG5leHRfc2xvdCBjYWxsYmFjayB3aGVuZXZlciBw b3NzaWJsZS4KKwkgKgogCSAqIE5vdGUgdGhhdCBBTXMgdGhhdCBkbyBub3QgbmVjZXNzYXJpbHkg dXBkYXRlIGluZGV4ZXMgd2hlbiBpbmRleGVkCiAJICogY29sdW1ucyBkbyBub3QgY2hhbmdlLCBu ZWVkIHRvIHJldHVybiB0aGUgY3VycmVudC9jb3JyZWN0IHZlcnNpb24gb2YKIAkgKiB0aGUgdHVw bGUgdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSBzbmFwc2hvdCwgZXZlbiBpZiB0aGUgdGlkIHBvaW50 cyB0byBhbgpAQCAtMTIwNyw2ICsxMjM4LDM3IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1 Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAlzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmlu ZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgdGFibGUgQU0ncyBw ZXItYmF0Y2ggb3BhcXVlIGFyZWEgd2l0aGluIGEgYmF0Y2ggYWxsb2NhdGlvbi4KKyAqCisgKiBD YWxsZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIGZvciBlYWNoIG5ldyBvciByZWN5Y2xl ZCBiYXRjaC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9pbmRleF9iYXRjaF9pbml0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIGJvb2wgbmV3X2FsbG9j KQoreworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfYmF0Y2hfaW5pdChz Y2FuLCBiYXRjaCwgbmV3X2FsbG9jKTsKK30KKworLyoKKyAqIEZldGNoIHRoZSBuZXh0IHR1cGxl IGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwgc2Nhbm5pbmcgaW4gdGhlCisgKiBzcGVj aWZpZWQgZGlyZWN0aW9uLiBSZXR1cm5zIHRydWUgaWYgYSB0dXBsZSB3YXMgZm91bmQsIGZhbHNl IG90aGVyd2lzZS4KKyAqCisgKiBUaGUgaW5kZXggc2NhbiBzaG91bGQgaGF2ZSBiZWVuIHN0YXJ0 ZWQgdmlhIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKCkuCisgKiBDYWxsZXJzIG11c3QgY2hlY2sg c2Nhbi0+eHNfcmVjaGVjayBhbmQgcmVjaGVjayBzY2FuIGtleXMgaWYgcmVxdWlyZWQuCisgKgor ICogSW5kZXgtb25seSBzY2FuIGNhbGxlcnMgKHRoYXQgcGFzcyB4c193YW50X2l0dXA9dHJ1ZSB0 byBpbmRleF9iZWdpbnNjYW4pCisgKiBjYW4gY29uc3VtZSBpbmRleCB0dXBsZSByZXN1bHRzIGJ5 IGV4YW1pbmluZyBJbmRleFNjYW5EZXNjRGF0YSBmaWVsZHMgc3VjaAorICogYXMgeHNfaXR1cCBh bmQgeHNfaGl0dXAuICBUaGUgdGFibGUgQU0gd29uJ3QgdXN1YWxseSBmZXRjaCBhIGhlYXAgdHVw bGUKKyAqIGludG8gdGhlIHByb3ZpZGVkIHNsb3QgaW4gdGhlIGNhc2Ugb2YgeHNfd2FudF9pdHVw PXRydWUgY2FsbGVycy4KKyAqLworc3RhdGljIGlubGluZSBib29sCit0YWJsZV9pbmRleF9nZXRu ZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBpc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJ CQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJcmV0dXJuIGlzY2FuLT5oZWFwUmVsYXRp b24tPnJkX3RhYmxlYW0tPmluZGV4X2dldG5leHRfc2xvdChpc2NhbiwKKwkJCQkJCQkJCQkJCQkJ CSAgIGRpcmVjdGlvbiwgc2xvdCk7Cit9CisKIC8qCiAgKiBGZXRjaGVzLCBhcyBwYXJ0IG9mIGFu IGluZGV4IHNjYW4sIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZwogICog YSB2aXNpYmlsaXR5IHRlc3QgYWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2Fz IGZvdW5kIGFuZCBwYXNzZWQKQEAgLTEyMzAsNiArMTI5Miw5IEBAIHRhYmxlX2luZGV4X2ZldGNo X2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKICAqIGVudHJ5IChsaWtlIGhl YXAncyBIT1QpLiBXaGVyZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgb25seQog ICogZXZhbHVhdGVzIHRoZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRzaWRlIG9mIGluZGV4 IGVudHJ5IC0+dGFibGUgdHVwbGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192 ZXJzaW9uKCkgaXMgd2hhdCdzIHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRoaXMgaXMgYSBsb3dl ci1sZXZlbCBpbnRlcmZhY2UgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuICBDYWxs ZXJzCisgKiBzaG91bGQgZmF2b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZh Y2Ugd2hlbmV2ZXIgcG9zc2libGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfaW5k ZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCmluZGV4IDg4NDdkN2Y5NC4uYjViOGY1MDlhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaAorKysgYi9z cmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaApAQCAtNDgsNiArNDgsMTIgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uCiB7CiAJLyogSW5kZXggc2Vh cmNoIGNvdW50IChpbmNyZW1lbnRlZCB3aXRoIHBnc3RhdF9jb3VudF9pbmRleF9zY2FuIGNhbGwp ICovCiAJdWludDY0CQluc2VhcmNoZXM7CisKKwkvKgorCSAqIGhlYXAgYmxvY2tzIGZldGNoZWQg Y291bnRzIChpbmNyZW1lbnRlZCBieSBpbmRleF9nZXRuZXh0X3Nsb3QgY2FsbHMKKwkgKiB3aXRo aW4gdGFibGUgQU1zLCB0aG91Z2ggb25seSBkdXJpbmcgaW5kZXgtb25seSBzY2FucykKKwkgKi8K Kwl1aW50NjQJCW5oZWFwZmV0Y2hlczsKIH0gSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA1MTc4MmQxZmMuLjdjMWI0MjdmYiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKQEAgLTE3NTQsNyArMTc1NCw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nh blN0YXRlCiAgKgkJSW5zdHJ1bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBpbnN0cnVtZW50YXRp b24KICAqCQlTaGFyZWRJbmZvCQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1bWVudGF0aW9uIChu byBsZWFkZXIgZW50cnkpCiAgKgkJVGFibGVTbG90CQkgICBzbG90IGZvciBob2xkaW5nIHR1cGxl cyBmZXRjaGVkIGZyb20gdGhlIHRhYmxlCi0gKgkJVk1CdWZmZXIJCSAgIGJ1ZmZlciBpbiB1c2Ug Zm9yIHZpc2liaWxpdHkgbWFwIHRlc3RpbmcsIGlmIGFueQogICoJCVBzY2FuTGVuCQkgICBzaXpl IG9mIHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJTmFtZUNTdHJpbmdB dHROdW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0byBOQU1FREFUQUxF TgogICoJCU5hbWVDU3RyaW5nQ291bnQgICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIE5hbWVD U3RyaW5nQXR0TnVtcyBhcnJheQpAQCAtMTc3Nyw3ICsxNzc2LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhPbmx5U2NhblN0YXRlCiAJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX0luc3Ry dW1lbnQ7CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX1NoYXJlZEluZm87 CiAJVHVwbGVUYWJsZVNsb3QgKmlvc3NfVGFibGVTbG90OwotCUJ1ZmZlcgkJaW9zc19WTUJ1ZmZl cjsKIAlTaXplCQlpb3NzX1BzY2FuTGVuOwogCUF0dHJOdW1iZXIgKmlvc3NfTmFtZUNTdHJpbmdB dHROdW1zOwogCWludAkJCWlvc3NfTmFtZUNTdHJpbmdDb3VudDsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK aW5kZXggMjc3NThlYzE2Li4wNjYxZmMwM2QgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xNDI1 LDEyICsxNDI1LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T3B0SW5mbwogCWJvb2wJCWFtb3B0 aW9uYWxrZXk7CiAJYm9vbAkJYW1zZWFyY2hhcnJheTsKIAlib29sCQlhbXNlYXJjaG51bGxzOwot CS8qIGRvZXMgQU0gaGF2ZSBhbWdldHR1cGxlIGludGVyZmFjZT8gKi8KLQlib29sCQlhbWhhc2dl dHR1cGxlOworCS8qIGRvZXMgQU0gaGF2ZSBhbWdldGJhdGNoIChvciBnZXR0dXBsZSkgaW50ZXJm YWNlPyAqLworCWJvb2wJCWFtaGFzZ2V0YmF0Y2g7CiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0 bWFwIGludGVyZmFjZT8gKi8KIAlib29sCQlhbWhhc2dldGJpdG1hcDsKIAlib29sCQlhbWNhbnBh cmFsbGVsOwotCS8qIGRvZXMgQU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNlPyAqLworCS8qIGlz IEFNIHByZXBhcmVkIGZvciB1cyB0byByZXN0b3JlIGEgbWFyaz8gKi8KIAlib29sCQlhbWNhbm1h cmtwb3M7CiAJLyogQU0ncyBjb3N0IGVzdGltYXRvciAqLwogCS8qIFJhdGhlciB0aGFuIGluY2x1 ZGUgYW1hcGkuaCBoZXJlLCB3ZSBkZWNsYXJlIGFtY29zdGVzdGltYXRlIGxpa2UgdGhpcyAqLwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IDE5MDljMzI1NC4uN2FkODQ0M2ViIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2JyaW4vYnJpbi5jCkBAIC0yOTYsMTAgKzI5NiwxMiBAQCBicmluaGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBicmluYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBi cmlucmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwK KwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1yZWxlYXNlYmF0Y2ggPSBOVUxMLAog CQkuYW1nZXRiaXRtYXAgPSBicmluZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gYnJpbmVuZHNj YW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBv c3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1p bml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naW4vZ2luZ2V0LmMKaW5kZXggNmIxNDhlNjlhLi44ZjcwMzNkNjIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpbi9naW5nZXQuYwpAQCAtMTk1Myw5ICsxOTUzLDkgQEAgZ2luZ2V0Yml0bWFwKEluZGV4U2Nh bkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJICogaW50byB0aGUgbWFpbiBpbmRleCwgYW5k IHNvIHdlIG1pZ2h0IHZpc2l0IGl0IGEgc2Vjb25kIHRpbWUgZHVyaW5nIHRoZQogCSAqIG1haW4g c2Nhbi4gIFRoaXMgaXMgb2theSBiZWNhdXNlIHdlJ2xsIGp1c3QgcmUtc2V0IHRoZSBzYW1lIGJp dCBpbiB0aGUKIAkgKiBiaXRtYXAuICAoVGhlIHBvc3NpYmlsaXR5IG9mIGR1cGxpY2F0ZSB2aXNp dHMgaXMgYSBtYWpvciByZWFzb24gd2h5IEdJTgotCSAqIGNhbid0IHN1cHBvcnQgdGhlIGFtZ2V0 dHVwbGUgQVBJLCBob3dldmVyLikgTm90ZSB0aGF0IGl0IHdvdWxkIG5vdCBkbwotCSAqIHRvIHNj YW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNpbmNlIGNvbmN1cnJl bnQKLQkgKiBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJpZXMgZW50aXJlbHku CisJICogY2FuJ3Qgc3VwcG9ydCBlaXRoZXIgdGhlIGFtZ2V0dHVwbGUgb3IgYW1nZXRiYXRjaCBB UEkuKSBOb3RlIHRoYXQgaXQKKwkgKiB3b3VsZCBub3QgZG8gdG8gc2NhbiB0aGUgbWFpbiBpbmRl eCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2UKKwkgKiBjb25jdXJyZW50IGNsZWFudXAg Y291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBlbnRpcmVseS4KIAkgKi8KIAlzY2FuUGVu ZGluZ0luc2VydChzY2FuLCB0Ym0sICZudGlkcyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMK aW5kZXggZmY5MjcyNzljLi4wYzBlODk1ZTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCkBA IC04MiwxMCArODIsMTIgQEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdp bnNjYW4gPSBnaW5iZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdpbnJlc2NhbiwKIAkJLmFtZ2V0 dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNo ID0gTlVMTCwKKwkJLmFtcmVsZWFzZWJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gZ2lu Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2luZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5V TEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1l c3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxM LAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXgg ODU2NWUyMjViLi5hODhkZTM5ZDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTEwMywxMCAr MTAzLDEyIEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9 IGdpc3RiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdpc3RyZXNjYW4sCiAJCS5hbWdldHR1cGxl ID0gZ2lzdGdldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2Jh dGNoID0gTlVMTCwKKwkJLmFtcmVsZWFzZWJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0g Z2lzdGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdpc3RlbmRzY2FuLAotCQkuYW1tYXJrcG9z ID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJ CS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9 IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwpp bmRleCBlODhkZGIzMmEuLjIxN2M3ZjVlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwpAQCAtMTAy LDEwICsxMDIsMTIgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5z Y2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gaGFzaHJlc2NhbiwKIAkJLmFtZ2V0 dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0 ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1yZWxlYXNlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRt YXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFzaGVuZHNjYW4sCi0JCS5hbW1h cmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVM TCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxz Y2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggZTE1YTRlZjI0Li4yNDc2MTllYTYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMTksNiArMTksNyBAQAog ICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgog I2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNp bmNsdWRlICJhY2Nlc3MvaGVhcHRvYXN0LmgiCkBAIC04NCw4ICs4NSwxMCBAQCBoZWFwYW1faW5k ZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4g PSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOwogCiAJaHNjYW4tPnhzX2Jhc2Uu cmVsID0gcmVsOwotCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+eHNf YmFzZS5iYXRjaF9vcGFxdWVfc2l6ZSA9IE1BWEFMSUdOKHNpemVvZihIZWFwQmF0Y2hEYXRhKSk7 CisJaHNjYW4tPnhzX2Jhc2UuYmF0Y2hfcGVyX2l0ZW1fc2l6ZSA9IHNpemVvZih1aW50OCk7IC8q IHZpc0luZm8gZWxlbWVudCBzaXplICovCiAJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051 bWJlcjsKKwloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFz ZTsKIH0KQEAgLTk1LDEyICs5OCwxNSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbikKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKElu ZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOwogCi0JaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhz X2NidWYpKQotCXsKLQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7Ci0JCWhzY2FuLT54 c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQl9Ci0JaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9j a051bWJlcjsKKwkvKiBSZXNjYW5zIHNob3VsZCBhdm9pZCBhbiBleGNlc3NpdmUgbnVtYmVyIG9m IFZNIGxvb2t1cHMgKi8KKwloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOworCisJLyoKKwkgKiBEZWxp YmVyYXRlbHkgYXZvaWQgZHJvcHBpbmcgYW55IHBpbnMgbm93IGhlbGQgaW4geHNfY2J1ZiBhbmQg eHNfdm1idWYuCisJICogVGhpcyBzYXZlcyBjeWNsZXMgZHVyaW5nIGNlcnRhaW4gdGlnaHQgbmVz dGVkIGxvb3Agam9pbnMsIGFuZCBkdXJpbmcKKwkgKiBtZXJnZSBqb2lucyB0aGF0IGZyZXF1ZW50 bHkgcmVzdG9yZSBhIHNhdmVkIG1hcmsuICBJdCBjYW4gYWxzbyBhdm9pZAorCSAqIHJlcGVhdGVk IHBpbm5pbmcgYW5kIHVucGlubmluZyBvZiB0aGUgc2FtZSBidWZmZXIgYWNyb3NzIHJlc2NhbnMu CisJICovCiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMDgsMTEgKzExNCw1MyBAQCBoZWFwYW1faW5k ZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhl YXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKIAotCWhlYXBhbV9p bmRleF9mZXRjaF9yZXNldChzY2FuKTsKKwkvKiBkcm9wIHBpbiBpZiB0aGVyZSdzIGEgcGlubmVk IGhlYXAgcGFnZSAqLworCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKKwkJUmVs ZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CisKKwkvKiBkcm9wIHBpbiBpZiB0aGVyZSdzIGEg cGlubmVkIHZpc2liaWxpdHkgbWFwIHBhZ2UgKi8KKwlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+ eHNfdm1idWYpKQorCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1Zik7CiAKIAlwZnJlZSho c2Nhbik7CiB9CiAKKy8qCisgKiBJbml0aWFsaXplIHRoZSBoZWFwIHRhYmxlIEFNJ3MgcGVyLWJh dGNoIG9wYXF1ZSBhcmVhIChIZWFwQmF0Y2hEYXRhKS4KKyAqCisgKiBDYWxsZWQgYnkgaW5kZXhh bV91dGlsX2JhdGNoX2FsbG9jIGZvciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaC4KKyAqIFNl dHMgdXAgdGhlIHZpc0luZm8gcG9pbnRlciBmb3IgaW5kZXgtb25seSBzY2Fucywgb3IgTlVMTCBv dGhlcndpc2UuCisgKi8KK3N0YXRpYyB2b2lkCitoZWFwYW1faW5kZXhfYmF0Y2hfaW5pdChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJYm9vbCBuZXdfYWxs b2MpCit7CisJSGVhcEJhdGNoRGF0YSAqaGJhdGNoID0gaGVhcF9iYXRjaF9kYXRhKGJhdGNoLCBz Y2FuKTsKKworCWlmIChzY2FuLT54c193YW50X2l0dXApCisJeworCQlpZiAobmV3X2FsbG9jKQor CQl7CisJCQkvKgorCQkJICogUG9pbnQgdmlzSW5mbyBpbnRvIHRoZSB0cmFpbGluZyBwZXItaXRl bSBhcmVhIHRoYXQgZm9sbG93cworCQkJICogaXRlbXNbXSBpbiB0aGUgYmF0Y2ggYWxsb2NhdGlv bi4KKwkJCSAqLworCQkJU2l6ZQkJaXRlbXNFbmQ7CisKKwkJCWl0ZW1zRW5kID0gTUFYQUxJR04o b2Zmc2V0b2YoSW5kZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKworCQkJCQkJCQlzaXplb2YoQmF0 Y2hNYXRjaGluZ0l0ZW0pICogc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJCQloYmF0Y2gtPnZpc0lu Zm8gPSAodWludDggKikgKChjaGFyICopIGJhdGNoICsgaXRlbXNFbmQpOworCQl9CisKKwkJLyog Q2xlYXIgdmlzaWJpbGl0eSBmbGFncyAobmVlZGVkIGZvciBib3RoIG5ldyBhbmQgcmVjeWNsZWQg YmF0Y2hlcykgKi8KKwkJbWVtc2V0KGhiYXRjaC0+dmlzSW5mbywgMCwgc2Nhbi0+bWF4aXRlbXNi YXRjaCk7CisJfQorCWVsc2UKKwl7CisJCWhiYXRjaC0+dmlzSW5mbyA9IE5VTEw7CisJfQorfQor CiBzdGF0aWMgYm9vbAogaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICpzY2FuLAogCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKQEAgLTEzNCw2ICsxODIs MTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuLAogCQkvKiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51bWJlciBmb3IgbmV4 dCB0aW1lICovCiAJCWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRp ZCk7CiAKKwkJLyoKKwkJICogRHJvcCB0aGUgeHNfYmxrIHBpbiBpbmRlcGVuZGVudGx5IGhlbGQg b24gYnkgc2xvdCAoaWYgYW55KSBub3cuIFNlZQorCQkgKiBjb21tZW50cyBhcm91bmQgRXhlY1N0 b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlIGNhbGwgYmVsb3cuCisJCSAqLworCQlFeGVjQ2xlYXJU dXBsZShzbG90KTsKKwogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlS ZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIApAQCAtMTcwLDcgKzIyNCwzMyBAQCBoZWFw YW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJ CSpjYWxsX2FnYWluID0gIUlzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CiAKIAkJc2xvdC0+ dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChzY2FuLT5yZWwpOwotCQlFeGVjU3RvcmVC dWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsIGhzY2FuLT54c19jYnVm KTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IFRJRCBvbiB0aGUgY3VycmVudCBo ZWFwIGJsb2NrIHdpdGhpbiB0aGUgYmF0Y2gsCisJCSAqIHRyYW5zZmVyIG91ciBidWZmZXIgcGlu IHRvIHRoZSBzbG90IHJhdGhlciB0aGFuIGhhdmluZyB0aGUgc2xvdAorCQkgKiBpbmNyZW1lbnQg dGhlIHBpbiBjb3VudC4gIFRoaXMgc2F2ZXMgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudAor CQkgKiBhbmQgUmVsZWFzZUJ1ZmZlciBjYWxscywgc2luY2UgdGhlIGNhbGxlciB3b3VsZCBqdXN0 IHJlbGVhc2UgaXRzCisJCSAqIHBpbiBvbiB4c19jYnVmIHdoZW4gc3dpdGNoaW5nIHRvIHRoZSBu ZXh0IGJsb2NrIGFueXdheS4KKwkJICoKKwkJICogV2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIGNh bGxfYWdhaW4gaXMgZmFsc2UsIHNpbmNlIG90aGVyd2lzZSB0aGUKKwkJICogY2FsbGVyIHdpbGwg bmVlZCB4c19jYnVmIHRvIHJlbWFpbiB2YWxpZCBmb3IgdGhlIG5leHQgY2FsbC4KKwkJICovCisJ CWlmIChoc2Nhbi0+eHNfbGFzdGluYmxvY2sgJiYgISpjYWxsX2FnYWluKQorCQl7CisJCQlFeGVj U3RvcmVQaW5uZWRCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsCisJ CQkJCQkJCQkJICAgaHNjYW4tPnhzX2NidWYpOworCQkJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlk QnVmZmVyOworCQkJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKKworCQkJLyoK KwkJCSAqIE5vdGU6IHRoZSBwaW4gbm93IG93bmVkIGJ5IHRoZSBzbG90IGlzIGV4cGVjdGVkIHRv IGJlIHJlbGVhc2VkCisJCQkgKiBvbiB0aGUgbmV4dCBjYWxsIGhlcmUsIHZpYSBhbiBleHBsaWNp dCBFeGVjQ2xlYXJUdXBsZS4gIFRoaXMKKwkJCSAqIGF2b2lkcyBjaHVybiBpbiB0aGUgYmFja2Vu ZCdzIHByaXZhdGUgcmVmY291bnQgY2FjaGUuCisJCQkgKi8KKwkJfQorCQllbHNlCisJCQlFeGVj U3RvcmVCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsCisJCQkJCQkJ CQkgaHNjYW4tPnhzX2NidWYpOwogCX0KIAllbHNlCiAJewpAQCAtMTgxLDYgKzI2MSw1OTEgQEAg aGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2Fu LAogCXJldHVybiBnb3RfaGVhcF90dXBsZTsKIH0KIAorLyoKKyAqIGhlYXBhbV9iYXRjaF9yZXNv bHZlX3Zpc2liaWxpdHkKKyAqCQlPYnRhaW4gdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgYSBU SUQgZnJvbSBjYWxsZXIncyBiYXRjaC4KKyAqCisgKiBDYWxsZWQgZHVyaW5nIGluZGV4LW9ubHkg c2NhbnMuICBXZSBhbHdheXMgY2hlY2sgdGhlIHZpc2liaWxpdHkgb2YgY2FsbGVyJ3MKKyAqIGl0 ZW0gKGFuIG9mZnNldCBpbnRvIGNhbGxlcidzIGJhdGNoLT5pdGVtc1tdIGFycmF5KS4gIFdlIG1p Z2h0IGFsc28gc2V0CisgKiB2aXNpYmlsaXR5IGluZm8gZm9yIG90aGVyIGl0ZW1zIGZyb20gY2Fs bGVyJ3MgYmF0Y2ggbW9yZSBwcm9hY3RpdmVseSB3aGVuCisgKiB0aGF0IG1ha2VzIHNlbnNlLgor ICoKKyAqIFdlIGtlZXAgdHdvIGNvbXBldGluZyBjb25zaWRlcmF0aW9ucyBpbiBiYWxhbmNlIHdo ZW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0bworICogY2hlY2sgYWRkaXRpb25hbCBpdGVtczogdGhl IG5lZWQgdG8ga2VlcCB0aGUgY29zdCBvZiB2aXNpYmlsaXR5IG1hcCBhY2Nlc3MKKyAqIHVuZGVy IGNvbnRyb2wgd2hlbiBtb3N0IGl0ZW1zIHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQgYnkgdGhlIHNj YW4gYW55d2F5CisgKiAoaW1wb3J0YW50IGZvciBpbm5lciBpbmRleCBzY2FucyBvZiBhbnRpLWpv aW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5kIHRoZQorICogbmVlZCB0byBub3QgaG9sZCBvbnRvIGlu ZGV4IGxlYWYgcGFnZXMgZm9yIHRvbyBsb25nLgorICoKKyAqIE5vdGUgb24gTWVtb3J5IE9yZGVy aW5nIEVmZmVjdHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB2 aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QgbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAg YnVmZmVyLCBhbmQKKyAqIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQgaGVyZSBjb3VsZCBi ZSBzbGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0CisgKiBjYW4ndCBiZSBzdGFsZSBlbm91Z2gg dG8gbWF0dGVyLgorICoKKyAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0IGR1 ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdheSwgYmVjYXVzZQorICogdGhlIHR1cGxlIGlzIHByZXNl bnQgaW4gdGhlIGluZGV4IHBhZ2UgYnV0IG5vdCB2aXNpYmxlLiAgVGhlIHJlYWRpbmcgb2YgdGhl CisgKiBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRleCBi dWZmZXIpIGlzIHNlcmlhbGl6ZWQKKyAqIHdpdGggdGhlIGluc2VydCBvZiB0aGUgVElEIGludG8g dGhlIGluZGV4ICh1c2luZyBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUKKyAqIGluZGV4IGJ1ZmZl cikuICBCZWNhdXNlIHRoZSBWTSBiaXQgaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhlIGlu ZGV4LAorICogYW5kIGxvY2tpbmcvdW5sb2NraW5nIG9mIHRoZSBpbmRleCBwYWdlIGFjdHMgYXMg YSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3ZQorICogYXJlIHN1cmUgdG8gc2VlIHRoZSBjbGVhcmVk IGJpdCBpZiB3ZSBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCisgKgorICogRGVsZXRlcyBk byBub3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyIG91dCB0 aGUgVElEKSwKKyAqIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlz IG5vdCBzZXJpYWxpemVkIHdpdGggdGhpcyB0ZXN0CisgKiBiZWxvdywgYW5kIHdlIG1heSBzZWUg YSB2YWx1ZSB0aGF0IGlzIHNpZ25pZmljYW50bHkgc3RhbGUuICBIb3dldmVyLCB3ZQorICogZG9u J3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlIHJpZ2h0IGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlz IHN0aWxsIHZpc2libGUKKyAqIHVudGlsIHRoZSBkZWxldGluZyB0cmFuc2FjdGlvbiBjb21taXRz IG9yIHRoZSBzdGF0ZW1lbnQgZW5kcyAoaWYgaXQncyBvdXIKKyAqIHRyYW5zYWN0aW9uKS4gIElu IGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwgaGF2ZSBiZWVuCisg KiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcgdGhl IGJpdC4gIEFuZCBmb3IgdXMgdG8KKyAqIGhhdmUgYSBzbmFwc2hvdCB0aGF0IGluY2x1ZGVzIHRo ZSBkZWxldGluZyB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZQorICogaW52aXNpYmxlKSwg d2UgbXVzdCBoYXZlIGFjcXVpcmVkIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3Rp bmcgYXMKKyAqIGEgcmVhZCBiYXJyaWVyLgorICoKKyAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3Vn aCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrIHRoZSBWTQorICogYnVm ZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgorICovCitzdGF0 aWMgdm9pZAoraGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQlJbmRleFNjYW5CYXRjaCBiYXRj aCwgSGVhcEJhdGNoRGF0YSAqaGJhdGNoLAorCQkJCQkJCQlCYXRjaFJpbmdJdGVtUG9zICpwb3Mp Cit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikg c2Nhbi0+eHNfaGVhcGZldGNoOworCWludAkJCXBvc0l0ZW0gPSBwb3MtPml0ZW07CisJaW50CQkJ bm9TZXRJdGVtLAorCQkJCXN0ZXA7CisJYm9vbAkJYWxsYmF0Y2hpdGVtdmlzaWJsZTsKKwlCbG9j a051bWJlciBjdXJ2bWhlYXBibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKKwl1aW50OAkJY3Vy dm1oZWFwYmxrZmxhZ3MgPSAwOworCisJQXNzZXJ0KGhiYXRjaCA9PSBoZWFwX2JhdGNoX2RhdGEo YmF0Y2gsIHNjYW4pKTsKKworCS8qCisJICogV2UgYmV0dGVyIHN0aWxsIGhhdmUgaW5kZXggQU0g VElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKGdlbmVyYWxseSBhIHBpbgorCSAqIG9uIGl0cyBpbmRl eCBwYWdlKSBoZWxkIGZvciB0aGlzIGJhdGNoCisJICovCisJQXNzZXJ0KCFzY2FuLT5iYXRjaElt bWVkaWF0ZVJlbGVhc2UpOworCisJLyogRGV0ZXJtaW5lIHRoZSByYW5nZSBvZiBpdGVtcyB0byBz ZXQgdmlzaWJpbGl0eSBmb3IgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rp b24pKQorCXsKKwkJbm9TZXRJdGVtID0gTWluKGJhdGNoLT5sYXN0SXRlbSArIDEsIHBvc0l0ZW0g KyBoc2Nhbi0+eHNfdm1faXRlbXMpOworCQlhbGxiYXRjaGl0ZW12aXNpYmxlID0gbm9TZXRJdGVt ID4gYmF0Y2gtPmxhc3RJdGVtICYmCisJCQkocG9zSXRlbSA9PSBiYXRjaC0+Zmlyc3RJdGVtIHx8 CisJCQkgKGhiYXRjaC0+dmlzSW5mb1tiYXRjaC0+Zmlyc3RJdGVtXSAmIEJBVENIX1ZJU19DSEVD S0VEKSk7CisJCXN0ZXAgPSAxOworCX0KKwllbHNlCisJeworCQlub1NldEl0ZW0gPSBNYXgoYmF0 Y2gtPmZpcnN0SXRlbSAtIDEsIHBvc0l0ZW0gLSBoc2Nhbi0+eHNfdm1faXRlbXMpOworCQlhbGxi YXRjaGl0ZW12aXNpYmxlID0gbm9TZXRJdGVtIDwgYmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJKHBv c0l0ZW0gPT0gYmF0Y2gtPmxhc3RJdGVtIHx8CisJCQkgKGhiYXRjaC0+dmlzSW5mb1tiYXRjaC0+ bGFzdEl0ZW1dICYgQkFUQ0hfVklTX0NIRUNLRUQpKTsKKwkJc3RlcCA9IC0xOworCX0KKworCS8q CisJICogU2V0IHZpc2liaWxpdHkgaW5mbyBmb3IgYSByYW5nZSBvZiBpdGVtcywgaW4gc2NhbiBv cmRlci4KKwkgKgorCSAqIG5vU2V0SXRlbSBpcyB0aGUgZmlyc3QgaXRlbSAoaW4gdGhlIGdpdmVu IHNjYW4gZGlyZWN0aW9uKSB0aGF0IHdvbid0IGJlCisJICogc2V0IGR1cmluZyB0aGlzIGNhbGwu ICBub1NldEl0ZW0gb2Z0ZW4gcG9pbnRzIHRvIGp1c3QgcGFzdCB0aGUgZW5kIG9mCisJICogKG9y IGp1c3QgYmVmb3JlIHRoZSBzdGFydCBvZikgdGhlIGJhdGNoJ3MgJ2l0ZW1zJyBhcnJheS4KKwkg KgorCSAqIFdlIGl0ZXJhdGUgdGhpcyB3YXkgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIDIgZGlyZWN0 aW9uLXNwZWNpZmljIGxvb3BzLAorCSAqIHNpbmNlIHRoaXMgaXMgYSBob3QgY29kZSBwYXRoIHRo YXQncyBzZW5zaXRpdmUgdG8gY29kZSBzaXplIGluY3JlYXNlcy4KKwkgKi8KKwlmb3IgKGludCBz ZXRJdGVtID0gcG9zSXRlbTsgc2V0SXRlbSAhPSBub1NldEl0ZW07IHNldEl0ZW0gKz0gc3RlcCkK Kwl7CisJCUl0ZW1Qb2ludGVyIHRpZCA9ICZiYXRjaC0+aXRlbXNbc2V0SXRlbV0udGFibGVUaWQ7 CisJCUJsb2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlk KTsKKwkJdWludDgJCWZsYWdzOworCisJCWlmIChoZWFwYmxrbm8gPT0gY3Vydm1oZWFwYmxrbm8p CisJCXsKKwkJCS8qIGNvbnRpZ3VvdXMgaGVhcCBibG9jayAtLSBqdXN0IHJldXNlIGxhc3QgaXRl bSdzIGZsYWdzICovCisJCQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBibGtm bGFnczsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZmxhZ3MgPSBCQVRDSF9WSVNfQ0hFQ0tFRDsK KwkJaWYgKFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwgaGVhcGJsa25vLCAmaHNj YW4tPnhzX3ZtYnVmKSkKKwkJCWZsYWdzIHw9IEJBVENIX1ZJU19BTExfVklTSUJMRTsKKworCQlo YmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBibGtmbGFncyA9IGZsYWdzOworCQlj dXJ2bWhlYXBibGtubyA9IGhlYXBibGtubzsKKwl9CisKKwkvKgorCSAqIEl0J3Mgc2FmZSB0byBk cm9wIHRoZSBiYXRjaCdzIGluZGV4IEFNIHJlc291cmNlcyBhcyBzb29uIGFzIHdlJ3ZlCisJICog cmVzb2x2ZWQgdGhlIHZpc2liaWxpdHkgc3RhdHVzIG9mIGFsbCBvZiBpdHMgaXRlbXMKKwkgKi8K KwlpZiAoYWxsYmF0Y2hpdGVtdmlzaWJsZSAmJiBzY2FuLT5NVkNDU2NhbikKKwl7CisJCUFzc2Vy dChoYmF0Y2gtPnZpc0luZm9bYmF0Y2gtPmZpcnN0SXRlbV0gJiBCQVRDSF9WSVNfQ0hFQ0tFRCk7 CisJCUFzc2VydChoYmF0Y2gtPnZpc0luZm9bYmF0Y2gtPmxhc3RJdGVtXSAmIEJBVENIX1ZJU19D SEVDS0VEKTsKKworCQl0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChzY2FuLCBiYXRjaCk7CisJ fQorCisJLyoKKwkgKiBFbHNlIGNoZWNrIHZpc2liaWxpdHkgZm9yIHR3aWNlIGFzIG1hbnkgaXRl bXMgbmV4dCB0aW1lLCBvciBhbGwgaXRlbXMuCisJICogV2UgY2hlY2sgYWxsIGl0ZW1zIGluIG9u ZSBnbyBvbmNlIHdlJ3JlIHBhc3NlZCB0aGUgc2NhbidzIGZpcnN0IGJhdGNoLgorCSAqLworCWVs c2UgaWYgKGhzY2FuLT54c192bV9pdGVtcyA8IChiYXRjaC0+bGFzdEl0ZW0gLSBiYXRjaC0+Zmly c3RJdGVtKSkKKwkJaHNjYW4tPnhzX3ZtX2l0ZW1zICo9IDI7CisJZWxzZQorCQloc2Nhbi0+eHNf dm1faXRlbXMgPSBzY2FuLT5tYXhpdGVtc2JhdGNoOworfQorCitzdGF0aWMgaW5saW5lIEl0ZW1Q b2ludGVyCitoZWFwYW1fYmF0Y2hfcmV0dXJuX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5k ZXhTY2FuQmF0Y2ggc2NhbkJhdGNoLAorCQkJCQkJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcywg Ym9vbCAqYWxsX3Zpc2libGUpCit7CisJSGVhcEJhdGNoRGF0YSAqaGJhdGNoOworCisJcGdzdGF0 X2NvdW50X2luZGV4X3R1cGxlcyhzY2FuLT5pbmRleFJlbGF0aW9uLCAxKTsKKworCS8qIFNldCB4 c19oZWFwdGlkLCB3aGljaCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90IHdpbGwgbmVlZCAqLwor CXNjYW4tPnhzX2hlYXB0aWQgPSBzY2FuQmF0Y2gtPml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnRhYmxl VGlkOworCisJaWYgKCFzY2FuLT54c193YW50X2l0dXApCisJeworCQlpbnQJCQluZXh0SXRlbTsK KwkJYm9vbAkJaGFzTmV4dDsKKworCQkvKgorCQkgKiBQbGFpbiBpbmRleCBzY2FuLgorCQkgKgor CQkgKiBEZXRlcm1pbmUgaWYgdGhlIG5leHQgaXRlbSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVj dGlvbiBpcyBvbiBhCisJCSAqIGRpZmZlcmVudCBoZWFwIGJsb2NrLiAgV2hlbiBpdCBpcywgaGVh cGFtX2luZGV4X2ZldGNoX3R1cGxlIGNhbgorCQkgKiB0cmFuc2ZlciBpdHMgYnVmZmVyIHBpbiB0 byB0aGUgc2xvdCBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUgcGluCisJCSAqIGNvdW50LCBz YXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNlQnVmZmVyIGNhbGxzLgor CQkgKgorCQkgKiBOb3RlOiBXZSBjYW5ub3QgZG8gdGhpcyBmb3IgaW5kZXgtb25seSBzY2FucyBi ZWNhdXNlIGFsbC12aXNpYmxlCisJCSAqIGl0ZW1zIGFyZSBza2lwcGVkIGJ5IGJvdGggdGhlIHNj YW4gYW5kIHRoZSByZWFkIHN0cmVhbSBjYWxsYmFjay4KKwkJICogU2tpcHBlZCBpdGVtcyBjYW4g YnJlYWsgdGhlIGJsb2NrIGRlZHVwbGljYXRpb24gc3ltbWV0cnkgYmV0d2VlbgorCQkgKiB0aGUg c3RyZWFtIGFuZCB0aGUgc2NhbjogdGhlIHN0cmVhbSBkZWR1cGxpY2F0ZXMgY29uc2VjdXRpdmUK KwkJICogbm9uLWFsbC12aXNpYmxlIGl0ZW1zIGJ5IGJsb2NrLCBidXQgYWZ0ZXIgaW52YWxpZGF0 aW5nIHhzX2JsayB0aGUKKwkJICogc2NhbiB3b3VsZCB0cnkgdG8gcmUtZmV0Y2ggYSBibG9jayB0 aGF0IHRoZSBzdHJlYW0gYWxyZWFkeSByZXR1cm5lZAorCQkgKiBhbmQgZGVkdXBsaWNhdGVkIGF3 YXkuCisJCSAqLworCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQl7 CisJCQluZXh0SXRlbSA9IHNjYW5Qb3MtPml0ZW0gKyAxOworCQkJaGFzTmV4dCA9IChuZXh0SXRl bSA8PSBzY2FuQmF0Y2gtPmxhc3RJdGVtKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW5leHRJdGVt ID0gc2NhblBvcy0+aXRlbSAtIDE7CisJCQloYXNOZXh0ID0gKG5leHRJdGVtID49IHNjYW5CYXRj aC0+Zmlyc3RJdGVtKTsKKwkJfQorCisJCWhzY2FuLT54c19sYXN0aW5ibG9jayA9IGhhc05leHQg JiYKKwkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJnNjYW5CYXRjaC0+aXRlbXNbbmV4dEl0 ZW1dLnRhYmxlVGlkKSAhPQorCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmc2Nhbi0+eHNf aGVhcHRpZCk7CisKKwkJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworCX0KKworCS8qCisJICog SW5kZXgtb25seSBzY2FuLgorCSAqCisJICogQWxzbyBzZXQgeHNfaXR1cCwgd2hpY2ggaGVhcGFt X2luZGV4X2dldG5leHRfc2xvdCBuZWVkcyB0b28uCisJICovCisJc2Nhbi0+eHNfaXR1cCA9IChJ bmRleFR1cGxlKSAoc2NhbkJhdGNoLT5jdXJyVHVwbGVzICsKKwkJCQkJCQkJICBzY2FuQmF0Y2gt Pml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsKKworCS8qCisJICogU2V0IHZpc2li aWxpdHkgaW5mbyBmb3IgdGhlIGN1cnJlbnQgc2NhblBvcyBpdGVtIChwbHVzIHBvc3NpYmx5IHNv bWUKKwkgKiBhZGRpdGlvbmFsIGl0ZW1zIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSBh cyBuZWVkZWQKKwkgKi8KKwloYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEoc2NhbkJhdGNoLCBzY2Fu KTsKKwlpZiAoIShoYmF0Y2gtPnZpc0luZm9bc2NhblBvcy0+aXRlbV0gJiBCQVRDSF9WSVNfQ0hF Q0tFRCkpCisJCWhlYXBhbV9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkoc2NhbiwgZGlyZWN0aW9u LCBzY2FuQmF0Y2gsIGhiYXRjaCwKKwkJCQkJCQkJCQlzY2FuUG9zKTsKKworCS8qIEZpbmFsbHks IHNldCBhbGxfdmlzaWJsZSBmb3IgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCAqLworCSphbGxf dmlzaWJsZSA9CisJCShoYmF0Y2gtPnZpc0luZm9bc2NhblBvcy0+aXRlbV0gJiBCQVRDSF9WSVNf QUxMX1ZJU0lCTEUpICE9IDA7CisKKwlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7Cit9CisKKy8q IC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFwYW1fYmF0Y2hfZ2V0bmV4dCAtIGdldCB0aGUgbmV4 dCBiYXRjaCBvZiBUSURzIGZyb20gYSBzY2FuCisgKgorICogQ2FsbGVkIHdoZW4gd2UgbmVlZCB0 byBsb2FkIHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IGVudHJpZXMgdG8gcHJvY2VzcyBpbgorICog dGhlIGdpdmVuIGRpcmVjdGlvbi4gIENhbGxlciBwYXNzZXMgdXMgYSBiYXRjaCBhbmQgYSBiYXRj aCBwb3NpdGlvbiwgd2hpY2gKKyAqIGhhcyBqdXN0IGJlZW4gdXNlZCB0byByZWFkIGFsbCBpdGVt cyBmcm9tIHRoZSBiYXRjaCBpbiB0aGUgZGlyZWN0aW9uIHBhc3NlZAorICogYnkgY2FsbGVyLgor ICoKKyAqIFJldHVybnMgdGhlIG5leHQgYmF0Y2ggdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSBpbmRl eCBzY2FuLCBvciBOVUxMIHdoZW4KKyAqIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoZXMgaW4gdGhl IGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgRG9lcyBub3QgYWR2YW5jZQorICogY2FsbGVyJ3MgYmF0 Y2ggcG9zaXRpb247IHRoYXQgaXMgbGVmdCB1cCB0byBjYWxsZXIuCisgKgorICogVGhpcyBpcyBh bHNvIHdoZXJlIGJhdGNoZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIu ICBXZQorICogZG9uJ3QgZnJlZSBhbnkgYmF0Y2hlcyBoZXJlLCB0aG91Z2g7IHRoYXQgaXMgYWxz byBsZWZ0IHVwIHRvIGNhbGxlci4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHBn X2F0dHJpYnV0ZV9ob3QgSW5kZXhTY2FuQmF0Y2gKK2hlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCSBJbmRleFNjYW5C YXRjaCBwcmlvckJhdGNoLCBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJSW5kZXhTY2FuQmF0 Y2ggYmF0Y2ggPSBOVUxMOworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmIFBHX1VTRURf Rk9SX0FTU0VSVFNfT05MWSA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisKKwkvKiBYWFg6IHdlIHNo b3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCisJ QXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKKworCWlmICghcHJpb3JC YXRjaCkKKwl7CisJCS8qIEZpcnN0IGNhbGwgZm9yIHRoZSBzY2FuICovCisJCUFzc2VydChwb3Mg PT0gJmJhdGNocmluZ2J1Zi0+c2NhblBvcyk7CisJfQorCWVsc2UgaWYgKHVubGlrZWx5KHByaW9y QmF0Y2gtPmRpciAhPSBkaXJlY3Rpb24pKQorCXsKKwkJLyoKKwkJICogV2UgZGV0ZWN0ZWQgYSBj aGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24gYWNyb3NzIGJhdGNoZXMuICBQcmVwYXJlCisJCSAqIHNj YW4ncyBiYXRjaHJpbmdidWYgc3RhdGUgZm9yIHVzIHRvIGdldCB0aGUgbmV4dCBiYXRjaCBmb3Ig dGhlCisJCSAqIG9wcG9zaXRlIHNjYW4gZGlyZWN0aW9uIHRvIHRoZSBvbmUgdXNlZCB3aGVuIHBy aW9yQmF0Y2ggd2FzCisJCSAqIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2guCisJCSAqLworCQl0YWJs ZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlKHNjYW4pOworCisJCS8qIHByaW9yQmF0Y2ggaXMgbm93 IGJhdGNocmluZ2J1ZidzIG9ubHkgYmF0Y2ggKi8KKwkJQXNzZXJ0KHBvcy0+YmF0Y2ggPT0gYmF0 Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChz Y2FuKSA9PSAxKTsKKwl9CisJZWxzZSBpZiAoaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2Nhbiwg cG9zLT5iYXRjaCArIDEpKQorCXsKKwkJLyogTmV4dCBiYXRjaCBhbHJlYWR5IGxvYWRlZCBmb3Ig dXMgKi8KKwkJYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKTsK KworCQlBc3NlcnQocHJpb3JCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCUFzc2VydChiYXRj aC0+ZGlyID09IGRpcmVjdGlvbik7CisJCXJldHVybiBiYXRjaDsKKwl9CisKKwkvKgorCSAqIEFz c2VydCBwcmVjb25kaXRpb25zIGZvciBjYWxsaW5nIGFtZ2V0YmF0Y2guCisJICoKKwkgKiBwcmlv ckJhdGNoIGhhZCBiZXR0ZXIgYmUgZm9yIHRoZSBsYXN0IHZhbGlkIGJhdGNoIGN1cnJlbnRseSBp biB0aGUgcmluZworCSAqIGJ1ZmZlciAoYmF0Y2hlcyBtdXN0IHN0YXkgaW4gc2NhbiBvcmRlciku ICBJZiBpdCBpc24ndCB0aGVuIHdlIHNob3VsZAorCSAqIGhhdmUgYWxyZWFkeSByZXR1cm5lZCBz b21lIGV4aXN0aW5nIGxvYWRlZCBiYXRjaCBlYXJsaWVyLgorCSAqLworCUFzc2VydCghaW5kZXhf c2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKKwlBc3NlcnQoIXByaW9yQmF0Y2ggfHwKKwkJICAgKGlu ZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPiAwICYmIHByaW9yQmF0Y2gtPmRpciA9PSBkaXJl Y3Rpb24gJiYKKwkJCWluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5uZXh0QmF0 Y2ggLSAxKSA9PSBwcmlvckJhdGNoKSk7CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBjYWxsIGFtZ2V0 YmF0Y2ggYWdhaW4sIGNoZWNrIGlmIHByaW9yQmF0Y2ggaXMgYWxyZWFkeSBrbm93bgorCSAqIHRv IGJlIHRoZSBsYXN0IGJhdGNoIHdpdGggbWF0Y2hpbmcgaXRlbXMgaW4gdGhpcyBzY2FuIGRpcmVj dGlvbgorCSAqLworCWlmIChwcmlvckJhdGNoICYmCisJCSgoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXJlY3Rpb24pICYmIHByaW9yQmF0Y2gtPmtub3duRW5kRm9yd2FyZCkgfHwKKwkJIChTY2Fu RGlyZWN0aW9uSXNCYWNrd2FyZChkaXJlY3Rpb24pICYmIHByaW9yQmF0Y2gtPmtub3duRW5kQmFj a3dhcmQpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwliYXRjaCA9IHNjYW4tPmluZGV4UmVsYXRpb24t PnJkX2luZGFtLT5hbWdldGJhdGNoKHNjYW4sIHByaW9yQmF0Y2gsCisJCQkJCQkJCQkJCQkJICBk aXJlY3Rpb24pOworCWlmIChiYXRjaCkKKwl7CisJCS8qIFdlIGdvdCB0aGUgYmF0Y2ggZnJvbSB0 aGUgQU0gKi8KKwkJQXNzZXJ0KGJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKworCQkvKiBBcHBl bmQgYmF0Y2ggdG8gdGhlIGVuZCBvZiByaW5nIGJ1ZmZlci93cml0ZSBpdCB0byBidWZmZXIgaW5k ZXggKi8KKwkJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2NhbiwgYmF0Y2gpOworCX0KKwllbHNl CisJeworCQkvKiBhbWdldGJhdGNoIHJldHVybmVkIE5VTEwgKi8KKwkJaWYgKHByaW9yQmF0Y2gp CisJCXsKKwkJCS8qCisJCQkgKiBUaGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzIHRvIGJlIGZv dW5kIGluIHRoZSBjdXJyZW50IHNjYW4KKwkJCSAqIGRpcmVjdGlvbiwgZm9sbG93aW5nIHByaW9y QmF0Y2guICBSZW1lbWJlciB0aGF0IHByaW9yQmF0Y2ggaXMKKwkJCSAqIHRoZSBsYXN0IGJhdGNo IHdpdGggbWF0Y2hpbmcgaXRlbXMuCisJCQkgKi8KKwkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGRpcmVjdGlvbikpCisJCQkJcHJpb3JCYXRjaC0+a25vd25FbmRGb3J3YXJkID0gdHJ1ZTsK KwkJCWVsc2UKKwkJCQlwcmlvckJhdGNoLT5rbm93bkVuZEJhY2t3YXJkID0gdHJ1ZTsKKwkJfQor CX0KKworCS8qIHhzX2hpdHVwIGlzbid0IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgYW1nZXRiYXRj aCBzY2FucyAqLworCUFzc2VydCghc2Nhbi0+eHNfaGl0dXApOworCisJcmV0dXJuIGJhdGNoOwor fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkIC0g Z2V0IG5leHQgVElEIGZyb20gYmF0Y2ggcmluZyBidWZmZXIKKyAqCisgKiBHZXQgdGhlIG5leHQg VElEIGZyb20gdGhlIHNjYW4ncyBiYXRjaCByaW5nIGJ1ZmZlciwgd2hlbiBtb3ZpbmcgaW4gdGhl CisgKiBnaXZlbiBzY2FuIGRpcmVjdGlvbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3Rh dGljIHBnX2F0dHJpYnV0ZV9ob3QgSXRlbVBvaW50ZXIKK2hlYXBhbV9iYXRjaF9nZXRuZXh0X3Rp ZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgKmFsbF92aXNpYmxlKQoreworCUJhdGNoUmlu Z0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJ dGVtUG9zICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvczsKKwlJbmRleFNjYW5CYXRj aCBzY2FuQmF0Y2ggPSBOVUxMOworCisJQXNzZXJ0KCFzY2FuUG9zLT52YWxpZCB8fCBiYXRjaHJp bmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisJQXNzZXJ0KHNjYW5Qb3MtPnZh bGlkIHx8IGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMCk7CisKKwkvKgorCSAqIENo ZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgbG9hZGVkIHNjYW5CYXRjaCBmb3IgdXMgdG8gcmV0 dXJuIHRoZSBuZXh0CisJICogbWF0Y2hpbmcgaXRlbSdzIFRJRC9pbmRleCB0dXBsZSBmcm9tCisJ ICovCisJaWYgKHNjYW5Qb3MtPnZhbGlkKQorCXsKKwkJLyoKKwkJICogc2NhblBvcyBpcyB2YWxp ZCwgc28gc2NhbkJhdGNoIG11c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZworCQkg KiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZS4KKwkJICovCisJCUFzc2VydChiYXRjaHJp bmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisKKwkJc2NhbkJhdGNoID0gaW5k ZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwkJaWYgKGluZGV4X3NjYW5f cG9zX2FkdmFuY2UoZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Qb3MpKQorCQkJcmV0dXJuIGhl YXBhbV9iYXRjaF9yZXR1cm5fdGlkKHNjYW4sIGhzY2FuLCBkaXJlY3Rpb24sCisJCQkJCQkJCQkJ ICAgc2NhbkJhdGNoLCBzY2FuUG9zLAorCQkJCQkJCQkJCSAgIGFsbF92aXNpYmxlKTsKKwl9CisK KwkvKgorCSAqIEVpdGhlciByYW4gb3V0IG9mIGl0ZW1zIGZyb20gb3VyIGV4aXN0aW5nIHNjYW5C YXRjaCwgb3IgaXQgaGFzbid0IGJlZW4KKwkgKiBsb2FkZWQgeWV0IChiZWNhdXNlIHRoaXMgaXMg dGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2FuKS4KKwkgKiBUcnkgdG8gYWR2 YW5jZSBzY2FuQmF0Y2ggdG8gdGhlIG5leHQgYmF0Y2ggKG9yIGdldCB0aGUgZmlyc3QgYmF0Y2gp LgorCSAqLworCXNjYW5CYXRjaCA9IGhlYXBhbV9iYXRjaF9nZXRuZXh0KHNjYW4sIGRpcmVjdGlv biwgc2NhbkJhdGNoLCBzY2FuUG9zKTsKKworCWlmICghc2NhbkJhdGNoKQorCXsKKwkJLyoKKwkJ ICogV2UncmUgZG9uZTsgbm8gbW9yZSBiYXRjaGVzIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0 aW9uLgorCQkgKgorCQkgKiBOb3RlOiBzY2FuUG9zIGlzIGdlbmVyYWxseSBzdGlsbCB2YWxpZCBh dCB0aGlzIHBvaW50LiAgVGhlIHNjYW4KKwkJICogbWlnaHQgc3RpbGwgYmFjayB1cCBpbiB0aGUg b3RoZXIgZGlyZWN0aW9uLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBB ZHZhbmNlZCBzY2FuQmF0Y2guICBOb3cgcG9zaXRpb24gc2NhblBvcyB0byB0aGUgc3RhcnQgb2Yg bmV3CisJICogc2NhbkJhdGNoLgorCSAqLworCWluZGV4X3NjYW5fcG9zX25leHRiYXRjaChkaXJl Y3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcyk7CisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2Nh biwgc2NhblBvcy0+YmF0Y2gpID09IHNjYW5CYXRjaCk7CisKKwkvKgorCSAqIFJlbW92ZSB0aGUg aGVhZCBiYXRjaCBmcm9tIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciAoZXhjZXB0IHdoZW4gdGhpcyBu ZXcKKwkgKiBzY2FuQmF0Y2ggaXMgb3VyIG9ubHkgb25lKQorCSAqLworCWlmIChiYXRjaHJpbmdi dWYtPmhlYWRCYXRjaCAhPSBzY2FuUG9zLT5iYXRjaCkKKwl7CisJCUluZGV4U2NhbkJhdGNoIGhl YWRCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwKKwkJCQkJCQkJCQkJCQliYXRjaHJpbmdi dWYtPmhlYWRCYXRjaCk7CisKKwkJLyogZnJlZSBvYnNvbGVzY2VudCBoZWFkIGJhdGNoICh1bmxl c3MgaXQgaXMgc2NhbidzIG1hcmtCYXRjaCkgKi8KKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2go c2NhbiwgaGVhZEJhdGNoKTsKKworCQkvKiBSZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhlIHJpbmcg YnVmZmVyICovCisJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKys7CisJfQorCisJLyogSW4gcHJh Y3RpY2Ugc2NhbkJhdGNoIHdpbGwgYWx3YXlzIGJlIHRoZSByaW5nIGJ1ZmZlcidzIGhlYWRCYXRj aCAqLworCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7 CisKKwlyZXR1cm4gaGVhcGFtX2JhdGNoX3JldHVybl90aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlv biwgc2NhbkJhdGNoLCBzY2FuUG9zLAorCQkJCQkJCQkgICBhbGxfdmlzaWJsZSk7Cit9CisKKy8q IC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9mZXRjaF9oZWFwIC0gZ2V0IHRoZSBzY2FuJ3Mg bmV4dCBoZWFwIHR1cGxlCisgKgorICogVGhlIHJlc3VsdCBpcyBhIHZpc2libGUgaGVhcCB0dXBs ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0CisgKiByZWNlbnRseSBmZXRjaGVk IGJ5IG91ciBjYWxsZXIgaW4gc2Nhbi0+eHNfaGVhcHRpZCwgb3IgTlVMTCBpZiBubyBtb3JlCisg KiBtYXRjaGluZyB0dXBsZXMgZXhpc3QuICAoVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgbWF0 Y2hpbmcgdHVwbGUgYmVjYXVzZQorICogb2YgSE9UIGNoYWlucywgYWx0aG91Z2ggd2hlbiB1c2lu ZyBhbiBNVkNDIHNuYXBzaG90IGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlCisgKiBmb3IgbW9yZSB0 aGFuIG9uZSBzdWNoIHR1cGxlIHRvIGV4aXN0LikKKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgYnVm ZmVyIGNvbnRhaW5pbmcgdGhlIGhlYXAgdHVwIGlzIHBpbm5lZC4gIFRoZSBwaW4gbXVzdCBiZQor ICogZHJvcHBlZCBlbHNld2hlcmUuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBw Z19hdHRyaWJ1dGVfaG90IGJvb2wKK2luZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2Fu LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlib29sCQlhbGxfZGVhZCA9IGZhbHNlOworCWJv b2wJCWZvdW5kOworCisJZm91bmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc2Nhbi0+eHNf aGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVhcHRpZCwKKwkJCQkJCQkJCSBzY2FuLT54c19zbmFwc2hv dCwgc2xvdCwKKwkJCQkJCQkJCSAmc2Nhbi0+eHNfaGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsK KworCWlmIChmb3VuZCkKKwkJcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxh dGlvbik7CisKKwkvKgorCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZv dW5kIG9ubHkgZGVhZCB0dXBsZXMsIHJlbWVtYmVyIGl0CisJICogZm9yIGxhdGVyLiAgV2UgZG8g bm90IGRvIHRoaXMgd2hlbiBpbiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlCisJICog TVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBpbiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgor CSAqLworCWlmICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQorCXsKKwkJaWYgKHNjYW4t PnVzZWJhdGNocmluZykKKwkJeworCQkJaWYgKGFsbF9kZWFkKQorCQkJCXRhYmxlYW1fdXRpbF9r aWxsX3NjYW5wb3NpdGVtKHNjYW4pOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRl bGwgYW1nZXR0dXBsZS1iYXNlZCBpbmRleCBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBU SUQKKwkJCSAqICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQgY2FsbCwgaW4gaW5k ZXhfZ2V0bmV4dF90aWQpCisJCQkgKi8KKwkJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxf ZGVhZDsKKwkJfQorCX0KKworCXJldHVybiBmb3VuZDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LQorICoJCWhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJv bSBhIHNjYW4KKyAqCisgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5n IHRoZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKKyAqIGZvdW5kLCBmYWxzZSBvdGhl cndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KKyAqCisg KiBPbiBzdWNjZXNzLCByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8g YmUgaGVsZCwgYW5kIHdpbGwgYmUKKyAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgY2FsbCBoZXJlIChv ciBieSBhIGxhdGVyIGNhbGwgdG8gaW5kZXhfZW5kc2NhbikuCisgKgorICogTm90ZTogY2FsbGVy IG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0 aGUKKyAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVj YXVzZSB3ZSBkb24ndCBoYXZlCisgKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNp ZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3Rh dGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJICBUdXBsZVRh YmxlU2xvdCAqc2xvdCkKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0 Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CisJSXRlbVBvaW50ZXIgdGlkID0gTlVM TDsKKwlib29sCQlhbGxfdmlzaWJsZSA9IGZhbHNlOworCisJZm9yICg7OykKKwl7CisJCWlmICgh c2Nhbi0+eHNfaGVhcF9jb250aW51ZSkKKwkJeworCQkJLyoKKwkJCSAqIFNjYW5zIHRoYXQgdXNl IGFuIGFtZ2V0YmF0Y2ggaW5kZXggQU0gYXJlIG1hbmFnZWQgYnkgaGVhcGFtJ3MKKwkJCSAqIGlu ZGV4IHNjYW4gbWFuYWdlci4gIFRoaXMgZ2l2ZXMgaGVhcGFtIHRoZSBhYmlsaXR5IHRvIHJlYWQg aGVhcAorCQkJICogdHVwbGVzIGluIGEgZmxleGlibGUgb3JkZXIgdGhhdCBpcyBhdHR1bmVkIHRv IGJvdGggY29zdHMgYW5kCisJCQkgKiBiZW5lZml0cyBvbiB0aGUgaGVhcGFtIGFuZCB0YWJsZSBB TSBzaWRlLgorCQkJICoKKwkJCSAqIFNjYW5zIHRoYXQgdXNlIGFuIGFtZ2V0dHVwbGUgaW5kZXgg QU0gc2ltcGx5IGNhbGwgdGhyb3VnaCB0bworCQkJICogaW5kZXhfZ2V0bmV4dF90aWQgdG8gZ2V0 IHRoZSBuZXh0IFRJRCByZXR1cm5lZCBieSBpbmRleCBBTS4gVGhlCisJCQkgKiBwcm9ncmVzcyBv ZiB0aGUgc2NhbiB3aWxsIGJlIHVuZGVyIHRoZSBjb250cm9sIG9mIGluZGV4IEFNICh3ZQorCQkJ ICoganVzdCBwYXNzIGl0IHRocm91Z2ggYSBkaXJlY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IHR1cGxl IGluKSwgc28KKwkJCSAqIHdlIGNhbm5vdCByZW9yZGVyIGFueSB3b3JrLgorCQkJICovCisJCQlp ZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQkJCXRpZCA9IGhlYXBhbV9iYXRjaF9nZXRuZXh0X3Rp ZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgICAmYWxsX3Zpc2libGUpOwor CQkJZWxzZQorCQkJeworCQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlv bik7CisKKwkJCQlpZiAodGlkICE9IE5VTEwgJiYgc2Nhbi0+eHNfd2FudF9pdHVwKQorCQkJCQlh bGxfdmlzaWJsZSA9IFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJ CQkJCSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCQkJCQkgJmhzY2Fu LT54c192bWJ1Zik7CisJCQl9CisKKwkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVz LCB3ZSdyZSBkb25lICovCisJCQlpZiAodGlkID09IE5VTEwpCisJCQkJYnJlYWs7CisJCX0KKwor CQkvKgorCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25seSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZv ciB0aGlzIGluZGV4IGVudHJ5LgorCQkgKiBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29w IGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJvbQorCQkgKiB0aGUgaW5kZXguCisJCSAq LworCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7CisJCWlm ICghc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQkvKiBQbGFpbiBpbmRleCBzY2FuICovCisJ CQlpZiAoaW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJ fQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBJbmRleC1vbmx5IHNjYW4uCisJCQkgKgorCQkJ ICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVh cCBwYWdlIG9uCisJCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2 ZXJ5Ym9keS4gIEluIGFueSBjYXNlLAorCQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBu b3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEKKwkJCSAqIHNvdXJjZS4KKwkJCSAqLworCQkJ aWYgKCFhbGxfdmlzaWJsZSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8g dmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KKwkJCQkgKi8KKwkJCQlpZiAoc2Nh bi0+aW5zdHJ1bWVudCkKKwkJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzKys7CisK KwkJCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCisJCQkJCWNvbnRpbnVlOwkv KiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLworCisJCQkJRXhlY0Ns ZWFyVHVwbGUoc2xvdCk7CisKKwkJCQkvKgorCQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJl IHN1cHBvcnRlZCB3aXRoIHN0YW5kYXJkIGluZGV4LW9ubHkKKwkJCQkgKiBzY2Fucywgc28gdGhl cmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVAorCQkJCSAqIGNo YWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgT3RoZXIgY2FsbGVycwor CQkJCSAqIChjdXJyZW50bHkgb25seSBzZWxmdW5jcy5jKSB1c2UgU25hcHNob3ROb25WYWN1dW1h YmxlLCBhbmQKKwkJCQkgKiB3YW50IHVzIHRvIGFzc3VtZSB0aGF0IGp1c3QgaGF2aW5nIG9uZSB2 aXNpYmxlIHR1cGxlIGluIHRoZQorCQkJCSAqIGhvdCBjaGFpbiBpcyBhbHdheXMgZ29vZCBlbm91 Z2guCisJCQkJICovCisJCQkJQXNzZXJ0KCEoc2Nhbi0+eHNfaGVhcF9jb250aW51ZSAmJgorCQkJ CQkJIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCQkJfQorCQkJZWxzZQor CQkJeworCQkJCS8qCisJCQkJICogV2UgZGlkbid0IGFjY2VzcyB0aGUgaGVhcCwgc28gd2UnbGwg bmVlZCB0byB0YWtlIGEKKwkJCQkgKiBwcmVkaWNhdGUgbG9jayBleHBsaWNpdGx5LCBhcyBpZiB3 ZSBoYWQuICBGb3Igbm93IHdlIGRvCisJCQkJICogdGhhdCBhdCBwYWdlIGxldmVsLgorCQkJCSAq LworCQkJCVByZWRpY2F0ZUxvY2tQYWdlKGhzY2FuLT54c19iYXNlLnJlbCwKKwkJCQkJCQkJICBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCSAgc2Nhbi0+eHNfc25hcHNo b3QpOworCQkJfQorCisJCQkvKgorCQkJICogUmV0dXJuIG1hdGNoaW5nIGluZGV4IHR1cGxlIG5v dyBzZXQgaW4gc2Nhbi0+eHNfaXR1cCAob3IgcmV0dXJuCisJCQkgKiBtYXRjaGluZyBoZWFwIHR1 cGxlIG5vdyBzZXQgaW4gc2Nhbi0+eHNfaGl0dXApLgorCQkJICoKKwkJCSAqIE5vdGU6IHdlIHdv bid0IHVzdWFsbHkgaGF2ZSBmZXRjaGVkIGEgaGVhcCB0dXBsZSBpbnRvIGNhbGxlcidzCisJCQkg KiB0YWJsZSBzbG90LiAgVGhpcyBpcyBwZXIgdGhlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBj b250cmFjdAorCQkJICogZm9yIHNjYW4tPnhzX3dhbnRfaXR1cCBjYWxsZXJzLgorCQkJICovCisJ CQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KIAogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAgKiBDYWxsYmFja3MgZm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBp bmRpdmlkdWFsIHR1cGxlcyBmb3IgaGVhcCBBTQpAQCAtNzYxLDcgKzE0MjYsOCBAQCBoZWFwYW1f cmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdI ZWFwLAogCiAJCXRhYmxlU2NhbiA9IE5VTEw7CiAJCWhlYXBTY2FuID0gTlVMTDsKLQkJaW5kZXhT Y2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBTbmFwc2hvdEFueSwgTlVM TCwgMCwgMCk7CisJCWluZGV4U2NhbiA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRl eCwgZmFsc2UsIFNuYXBzaG90QW55LAorCQkJCQkJCQkJTlVMTCwgMCwgMCk7CiAJCWluZGV4X3Jl c2NhbihpbmRleFNjYW4sIE5VTEwsIDAsIE5VTEwsIDApOwogCX0KIAllbHNlCkBAIC03OTgsNyAr MTQ2NCw4IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhl YXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJaWYgKGluZGV4U2NhbiAhPSBOVUxMKQogCQl7Ci0J CQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChpbmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LCBzbG90KSkKKwkJCWlmICghaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChpbmRleFNjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgIHNsb3QpKQogCQkJCWJyZWFrOwogCiAJ CQkvKiBTaW5jZSB3ZSB1c2VkIG5vIHNjYW4ga2V5cywgc2hvdWxkIG5ldmVyIG5lZWQgdG8gcmVj aGVjayAqLwpAQCAtMjY1Nyw2ICszMzI0LDggQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5l IGhlYXBhbV9tZXRob2RzID0gewogCS5pbmRleF9mZXRjaF9iZWdpbiA9IGhlYXBhbV9pbmRleF9m ZXRjaF9iZWdpbiwKIAkuaW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVz ZXQsCiAJLmluZGV4X2ZldGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCisJLmluZGV4 X2JhdGNoX2luaXQgPSBoZWFwYW1faW5kZXhfYmF0Y2hfaW5pdCwKKwkuaW5kZXhfZ2V0bmV4dF9z bG90ID0gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCwKIAkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBo ZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxl X2luc2VydCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZSBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQppbmRleCA2ZjJlMzA2MWEuLmU2ZDY4 MWI0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBPQkpT ID0gXAogCWFtYXBpLm8gXAogCWFtdmFsaWRhdGUubyBcCiAJZ2VuYW0ubyBcCi0JaW5kZXhhbS5v CisJaW5kZXhhbS5vIFwKKwlpbmRleGJhdGNoLm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3Ny Yy9iYWNrZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2FtYXBpLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYwppbmRleCBlZmEwMDcw MzAuLjFkZTJhODhhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBp LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKQEAgLTU1LDYgKzU1LDEx IEBAIEdldEluZGV4QW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRpbmUtPmFt cmVzY2FuICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT5hbWVuZHNjYW4gIT0gTlVMTCk7CiAK KwkvKiBBc3NlcnQgdGhhdCBBTSBkb2Vzbid0IGhhdmUgYW4gaW52YWxpZCBjb21iaW5hdGlvbiBv ZiBjYWxsYmFja3MgKi8KKwlBc3NlcnQocm91dGluZS0+YW1raWxsaXRlbXNiYXRjaCA9PSBOVUxM IHx8IHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisJQXNzZXJ0KChyb3V0aW5lLT5hbWdl dGJhdGNoICE9IE5VTEwpID09IChyb3V0aW5lLT5hbXJlbGVhc2ViYXRjaCAhPSBOVUxMKSk7CisJ QXNzZXJ0KHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCB8fCByb3V0aW5lLT5hbXBvc3Jlc2V0 ID09IE5VTEwpOworCiAJcmV0dXJuIHJvdXRpbmU7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFt LmMKaW5kZXggNWU4OWI4NmE2Li42ZTg3MTY5YzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5j CkBAIC04OSw2ICs4OSw5IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVs YXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19zbmFwc2hvdCA9IElu dmFsaWRTbmFwc2hvdDsJLyogY2FsbGVyIG11c3QgaW5pdGlhbGl6ZSB0aGlzICovCiAJc2Nhbi0+ bnVtYmVyT2ZLZXlzID0gbmtleXM7CiAJc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA9IG5vcmRlcmJ5 czsKKwlzY2FuLT51c2ViYXRjaHJpbmcgPSBmYWxzZTsgLyogc2V0IGxhdGVyIGZvciBhbWdldGJh dGNoIGNhbGxlcnMgKi8KKwlzY2FuLT54c19iaXRtYXBfYmF0Y2ggPSBOVUxMOworCXNjYW4tPnhz X3dhbnRfaXR1cCA9IGZhbHNlOyAvKiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAog CS8qCiAJICogV2UgYWxsb2NhdGUga2V5IHdvcmtzcGFjZSBoZXJlLCBidXQgaXQgd29uJ3QgZ2V0 IGZpbGxlZCB1bnRpbCBhbXJlc2Nhbi4KQEAgLTEwMiw4ICsxMDUsNiBAQCBSZWxhdGlvbkdldElu ZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp CiAJZWxzZQogCQlzY2FuLT5vcmRlckJ5RGF0YSA9IE5VTEw7CiAKLQlzY2FuLT54c193YW50X2l0 dXAgPSBmYWxzZTsgLyogbWF5IGJlIHNldCBsYXRlciAqLwotCiAJLyoKIAkgKiBEdXJpbmcgcmVj b3Zlcnkgd2UgaWdub3JlIGtpbGxlZCB0dXBsZXMgYW5kIGRvbid0IGJvdGhlciB0byBraWxsIHRo ZW0KIAkgKiBlaXRoZXIuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgeG1pbiBvbiB0aGUgcHJpbWFy eSBub2RlIGNvdWxkIGVhc2lseSBiZQpAQCAtMTI2LDYgKzEyNywxMCBAQCBSZWxhdGlvbkdldElu ZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp CiAJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwZGVzYyA9IE5VTEw7CiAK KwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9IDA7CisJc2Nhbi0+YmF0Y2hfdHVwbGVz X3dvcmtzcGFjZSA9IDA7CisJc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0ID0gMDsKKwogCXJldHVy biBzY2FuOwogfQogCkBAIC00NTQsNyArNDU5LDcgQEAgc3lzdGFibGVfYmVnaW5zY2FuKFJlbGF0 aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQllbG9nKEVSUk9SLCAiY29sdW1uIGlzIG5vdCBpbiBpbmRl eCIpOwogCQl9CiAKLQkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0 aW9uLCBpcmVsLAorCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRp b24sIGlyZWwsIGZhbHNlLAogCQkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtleXMsIDApOwog CQlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwog CQlzeXNzY2FuLT5zY2FuID0gTlVMTDsKQEAgLTUxNyw3ICs1MjIsOCBAQCBzeXN0YWJsZV9nZXRu ZXh0KFN5c1NjYW5EZXNjIHN5c3NjYW4pCiAKIAlpZiAoc3lzc2Nhbi0+aXJlbCkKIAl7Ci0JCWlm IChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LCBzeXNzY2FuLT5zbG90KSkKKwkJaWYgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzeXNzY2Fu LT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkgc3lzc2Nhbi0+c2xvdCkp CiAJCXsKIAkJCWJvb2wJCXNob3VsZEZyZWU7CiAKQEAgLTcxNSw3ICs3MjEsNyBAQCBzeXN0YWJs ZV9iZWdpbnNjYW5fb3JkZXJlZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJaWYgKFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKENoZWNrWGlkQWxpdmUpKQogCQlic3lzc2NhbiA9IHRydWU7CiAKLQlzeXNz Y2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24s CisJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJl bGF0aW9uLCBmYWxzZSwKIAkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtleXMsIDApOwogCWlu ZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVMTCwgMCk7CiAJc3lz c2Nhbi0+c2NhbiA9IE5VTEw7CkBAIC03MzQsNyArNzQwLDcgQEAgc3lzdGFibGVfZ2V0bmV4dF9v cmRlcmVkKFN5c1NjYW5EZXNjIHN5c3NjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCUhl YXBUdXBsZQlodHVwID0gTlVMTDsKIAogCUFzc2VydChzeXNzY2FuLT5pcmVsKTsKLQlpZiAoaW5k ZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3Qp KQorCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlv biwgc3lzc2Nhbi0+c2xvdCkpCiAJCWh0dXAgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHN5c3Nj YW4tPnNsb3QsIGZhbHNlLCBOVUxMKTsKIAogCS8qIFNlZSBub3RlcyBpbiBzeXN0YWJsZV9nZXRu ZXh0ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCA1ZWI3ZTk5YWQuLmQxOGY2 OTk0NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC0yNCw5ICsyNCw3IEBACiAg KgkJaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUgLSBpbml0aWFsaXplIHBhcmFsbGVsIHNj YW4KICAqCQlpbmRleF9wYXJhbGxlbHJlc2NhbiAgLSAocmUpc3RhcnQgYSBwYXJhbGxlbCBzY2Fu IG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsIC0gam9pbiBwYXJhbGxl bCBpbmRleCBzY2FuCi0gKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBnZXQgdGhlIG5leHQgVElEIGZy b20gYSBzY2FuCi0gKgkJaW5kZXhfZmV0Y2hfaGVhcAkJLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhl YXAgdHVwbGUKLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QJLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJv bSBhIHNjYW4KKyAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGFtZ2V0dHVwbGUgdGFibGUgQU0gaGVs cGVyIHJvdXRpbmUKICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBmcm9tIGEg c2NhbgogICoJCWluZGV4X2J1bGtfZGVsZXRlCS0gYnVsayBkZWxldGlvbiBvZiBpbmRleCB0dXBs ZXMKICAqCQlpbmRleF92YWN1dW1fY2xlYW51cAktIHBvc3QtZGVsZXRpb24gY2xlYW51cCBvZiBh biBpbmRleApAQCAtMjU1LDYgKzI1Myw3IEBAIGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9u IGluZGV4UmVsYXRpb24sCiBJbmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24g aGVhcFJlbGF0aW9uLAogCQkJCVJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJCQkJYm9vbCB4c193 YW50X2l0dXAsCiAJCQkJU25hcHNob3Qgc25hcHNob3QsCiAJCQkJSW5kZXhTY2FuSW5zdHJ1bWVu dGF0aW9uICppbnN0cnVtZW50LAogCQkJCWludCBua2V5cywgaW50IG5vcmRlcmJ5cykKQEAgLTI4 MSw3ICsyODAsMTQgQEAgaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkg Ki8KIAlzY2FuLT5oZWFwUmVsYXRpb24gPSBoZWFwUmVsYXRpb247CiAJc2Nhbi0+eHNfc25hcHNo b3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElzTVZDQ0xpa2VTbmFwc2hvdChzbmFw c2hvdCk7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CisJc2Nhbi0+eHNfd2FudF9p dHVwID0geHNfd2FudF9pdHVwOworCXNjYW4tPnVzZWJhdGNocmluZyA9IGZhbHNlOworCXNjYW4t PmJhdGNoSW1tZWRpYXRlUmVsZWFzZSA9IChzY2FuLT5NVkNDU2NhbiAmJiAheHNfd2FudF9pdHVw KTsKKworCWlmIChpbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQor CQlpbmRleF9iYXRjaHNjYW5faW5pdChzY2FuKTsKIAogCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5k ZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5k ZXhfZmV0Y2hfYmVnaW4oaGVhcFJlbGF0aW9uKTsKQEAgLTMxMiw2ICszMTgsNyBAQCBpbmRleF9i ZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJICogdXAgYnkgUmVsYXRp b25HZXRJbmRleFNjYW4uCiAJICovCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlz Y2FuLT5NVkNDU2NhbiA9IElzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CiAJc2Nhbi0+aW5z dHJ1bWVudCA9IGluc3RydW1lbnQ7CiAKIAlyZXR1cm4gc2NhbjsKQEAgLTM3MywxMyArMzgwLDE5 IEBAIGluZGV4X3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sCiAJQXNzZXJ0KG5rZXlzID09IHNj YW4tPm51bWJlck9mS2V5cyk7CiAJQXNzZXJ0KG5vcmRlcmJ5cyA9PSBzY2FuLT5udW1iZXJPZk9y ZGVyQnlzKTsKIAotCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9t IHRhYmxlIGFjY2Vzc2VzICovCisJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgZm9yIHJlc2NhbiAq LwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNj YW4tPnhzX2hlYXBmZXRjaCk7CiAKIAlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7IC8q IGZvciBzYWZldHkgKi8KIAlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CiAKKwlpZiAo c2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJQXNzZXJ0KCFzY2FuLT5iYXRjaHJpbmdidWYuZG9u ZSk7CisJCWluZGV4X2JhdGNoc2Nhbl9yZXNldChzY2FuKTsKKwl9CisKIAlzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1yZXNjYW4oc2Nhbiwga2V5cywgbmtleXMsCiAJCQkJCQkJCQkJ CW9yZGVyYnlzLCBub3JkZXJieXMpOwogfQpAQCAtMzk0LDYgKzQwNywxNyBAQCBpbmRleF9lbmRz Y2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlTQ0FOX0NIRUNLUzsKIAlDSEVDS19TQ0FOX1BST0NF RFVSRShhbWVuZHNjYW4pOwogCisJLyogQ2xlYW51cCBiYXRjaGluZywgc28gdGhhdCB0aGUgQU0g Y2FuIHJlbGVhc2UgcGlucyBhbmQgc28gb24uICovCisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykK KwkJaW5kZXhfYmF0Y2hzY2FuX2VuZChzY2FuKTsKKworCS8qIEZyZWUgY2FjaGVkIGJpdG1hcCBi YXRjaCBpZiBhbnkgKi8KKwlpZiAoc2Nhbi0+eHNfYml0bWFwX2JhdGNoICE9IE5VTEwpCisJewor CQlwZnJlZShiYXRjaF9hbGxvY19iYXNlKHNjYW4tPnhzX2JpdG1hcF9iYXRjaCwgc2NhbikpOwor CQlzY2FuLT54c19iaXRtYXBfYmF0Y2ggPSBOVUxMOworCX0KKwogCS8qIFJlbGVhc2UgcmVzb3Vy Y2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYgKHNjYW4t PnhzX2hlYXBmZXRjaCkKIAl7CkBAIC00MjIsMjQgKzQ0NiwyNSBAQCB2b2lkCiBpbmRleF9tYXJr cG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlTQ0FOX0NIRUNLUzsKLQlDSEVDS19TQ0FOX1BS T0NFRFVSRShhbW1hcmtwb3MpOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0YmF0Y2gpOwog Ci0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtbWFya3BvcyhzY2FuKTsKKwkvKiBP bmx5IGFtZ2V0YmF0Y2ggaW5kZXggQU1zIHN1cHBvcnQgbWFyayBhbmQgcmVzdG9yZSAqLworCWlu ZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhzY2FuKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQog ICoJCWluZGV4X3Jlc3RycG9zCS0gcmVzdG9yZSBhIHNjYW4gcG9zaXRpb24KICAqCi0gKiBOT1RF OiB0aGlzIG9ubHkgcmVzdG9yZXMgdGhlIGludGVybmFsIHNjYW4gc3RhdGUgb2YgdGhlIGluZGV4 IEFNLiAgU2VlCi0gKiBjb21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCkuCisgKiBOT1RFOiB0aGlz IG9ubHkgcmVzdG9yZXMgdGhlIGJhdGNoIHBvc2l0aW9uYWwgc3RhdGUgc2hhcmVkIGJ5IHRoZSB0 YWJsZSBhbmQKKyAqIGluZGV4IEFNcy4gIFNlZSBjb21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCku CiAgKgogICogTk9URTogRm9yIGhlYXAsIGluIHRoZSBwcmVzZW5jZSBvZiBIT1QgY2hhaW5zLCBt YXJrL3Jlc3RvcmUgb25seSB3b3JrcwogICogY29ycmVjdGx5IGlmIHRoZSBzY2FuJ3Mgc25hcHNo b3QgaXMgTVZDQy1zYWZlOyB0aGF0IGVuc3VyZXMgdGhhdCB0aGVyZSdzIGF0CiAgKiBtb3N0IG9u ZSByZXR1cm5hYmxlIHR1cGxlIGluIGVhY2ggSE9UIGNoYWluLCBhbmQgc28gcmVzdG9yaW5nIHRo ZSBwcmlvcgotICogc3RhdGUgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBpbmRleCBBTSBpcyBz dWZmaWNpZW50LiAgU2luY2UgdGhlIG9ubHkKLSAqIGN1cnJlbnQgdXNlciBvZiBtYXJrL3Jlc3Rv cmUgZnVuY3Rpb25hbGl0eSBpcyBub2RlTWVyZ2Vqb2luLmMsIHRoaXMKLSAqIGVmZmVjdGl2ZWx5 IG1lYW5zIHRoYXQgbWVyZ2Utam9pbiBwbGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3Rz LiAgVGhpcwotICogY291bGQgYmUgZml4ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBz ZWVtcyB1bmltcG9ydGFudC4KKyAqIHN0YXRlIGF0IHRoZSBzY2FuIGl0ZW0gZ3JhbnVsYXJpdHkg aXMgc3VmZmljaWVudC4gIFNpbmNlIHRoZSBvbmx5IGN1cnJlbnQKKyAqIHVzZXIgb2YgbWFyay9y ZXN0b3JlIGZ1bmN0aW9uYWxpdHkgaXMgbm9kZU1lcmdlam9pbi5jLCB0aGlzIGVmZmVjdGl2ZWx5 CisgKiBtZWFucyB0aGF0IG1lcmdlLWpvaW4gcGxhbnMgb25seSB3b3JrIGZvciBNVkNDIHNuYXBz aG90cy4gIFRoaXMgY291bGQgYmUKKyAqIGZpeGVkIGlmIG5lY2Vzc2FyeSwgYnV0IGZvciBub3cg aXQgc2VlbXMgdW5pbXBvcnRhbnQuCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQKQEAg LTQ0OCwxNiArNDczLDE2IEBAIGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlB c3NlcnQoSXNNVkNDTGlrZVNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSk7CiAKIAlTQ0FOX0NI RUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbXJlc3RycG9zKTsKKwlDSEVDS19TQ0FOX1BS T0NFRFVSRShhbWdldGJhdGNoKTsKIAotCS8qIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZl ciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUg Zm9yIHJlc2NhbiAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4X2Zl dGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKLQlzY2FuLT5raWxsX3ByaW9yX3R1cGxl ID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KLQlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFs c2U7CisJLyogYWxzbyBub3RpZnkgdGFibGUgQU0gYW5kIGluZGV4IEFNICovCisJaW5kZXhfYmF0 Y2hzY2FuX3Jlc3RvcmVfcG9zKHNjYW4pOwogCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtcmVzdHJwb3Moc2Nhbik7CisJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOyAv KiBmb3Igc2FmZXR5ICovCiB9CiAKIC8qCkBAIC01NzksNiArNjA0LDEyIEBAIGluZGV4X3BhcmFs bGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQog CQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCisJaWYgKHNj YW4tPnVzZWJhdGNocmluZykKKwl7CisJCUFzc2VydCghc2Nhbi0+YmF0Y2hyaW5nYnVmLmRvbmUp OworCQlpbmRleF9iYXRjaHNjYW5fcmVzZXQoc2Nhbik7CisJfQorCiAJLyogYW1wYXJhbGxlbHJl c2NhbiBpcyBvcHRpb25hbDsgYXNzdW1lIG5vLW9wIGlmIG5vdCBwcm92aWRlZCBieSBBTSAqLwog CWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2NhbiAhPSBO VUxMKQogCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2Nhbihz Y2FuKTsKQEAgLTU5MSw2ICs2MjIsNyBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4pCiAgKi8KIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChS ZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKKwkJCQkJCSBib29sIHhzX3dhbnRf aXR1cCwKIAkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJ CQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVz YyBwc2NhbikKQEAgLTYxMiw3ICs2NDQsMTMgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJl bGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogCSAqLwogCXNjYW4tPmhlYXBSZWxh dGlvbiA9IGhlYXByZWw7CiAJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5N VkNDU2NhbiA9IElzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CiAJc2Nhbi0+aW5zdHJ1bWVu dCA9IGluc3RydW1lbnQ7CisJc2Nhbi0+eHNfd2FudF9pdHVwID0geHNfd2FudF9pdHVwOworCXNj YW4tPmJhdGNoSW1tZWRpYXRlUmVsZWFzZSA9IChzY2FuLT5NVkNDU2NhbiAmJiAheHNfd2FudF9p dHVwKTsKKworCWlmIChpbmRleHJlbC0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwkJ aW5kZXhfYmF0Y2hzY2FuX2luaXQoc2Nhbik7CiAKIAkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4 IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwogCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4 X2ZldGNoX2JlZ2luKGhlYXByZWwpOwpAQCAtNjIxLDEwICs2NTksMTQgQEAgaW5kZXhfYmVnaW5z Y2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogfQogCiAv KiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBpbmRleF9nZXRuZXh0X3RpZCAtIGdldCB0aGUgbmV4dCBU SUQgZnJvbSBhIHNjYW4KKyAqIGluZGV4X2dldG5leHRfdGlkIC0gYW1nZXR0dXBsZSBpbnRlcmZh Y2UKICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRoZSBuZXh0IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2Fu IGtleXMsCiAgKiBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgorICoK KyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRhYmxlIEFNJ3MgaW5kZXhfZ2V0bmV4 dF9zbG90IGltcGxlbWVudGF0aW9uLAorICogYW5kIG9ubHkgZ2l2ZW4gYW4gaW5kZXggQU0gdGhh dCBzdXBwb3J0cyB0aGUgc2luZ2xlLXR1cGxlIGFtZ2V0dHVwbGUKKyAqIGludGVyZmFjZS4KICAq IC0tLS0tLS0tLS0tLS0tLS0KICAqLwogSXRlbVBvaW50ZXIKQEAgLTY2Nyw5NyArNzA5LDYgQEAg aW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbikKIAlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0t LS0KLSAqCQlpbmRleF9mZXRjaF9oZWFwIC0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxl Ci0gKgotICogVGhlIHJlc3VsdCBpcyBhIHZpc2libGUgaGVhcCB0dXBsZSBhc3NvY2lhdGVkIHdp dGggdGhlIGluZGV4IFRJRCBtb3N0Ci0gKiByZWNlbnRseSBmZXRjaGVkIGJ5IGluZGV4X2dldG5l eHRfdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzCi0gKiBleGlzdC4gIChU aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0dXBsZSBiZWNhdXNlIG9mIEhPVCBj aGFpbnMsCi0gKiBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QgaXQgc2hvdWxk IGJlIGltcG9zc2libGUgZm9yIG1vcmUgdGhhbgotICogb25lIHN1Y2ggdHVwbGUgdG8gZXhpc3Qu KQotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgaGVhcCB0dXAg aXMgcGlubmVkICh0aGUgcGluIHdpbGwgYmUKLSAqIGRyb3BwZWQgaW4gYSBmdXR1cmUgaW5kZXhf Z2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhfZW5kc2NhbgotICogY2FsbCku Ci0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBl cmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRv IG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCi0gKiBlbm91Z2ggaW5mb3Jt YXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0t LS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNj YW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7Ci0J Ym9vbAkJZm91bmQ7Ci0KLQlmb3VuZCA9IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4tPnhz X2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCi0JCQkJCQkJCQlzY2FuLT54c19zbmFwc2hv dCwgc2xvdCwKLQkJCQkJCQkJCSZzY2FuLT54c19oZWFwX2NvbnRpbnVlLCAmYWxsX2RlYWQpOwot Ci0JaWYgKGZvdW5kKQotCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRjaChzY2FuLT5pbmRleFJlbGF0 aW9uKTsKLQotCS8qCi0JICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91 bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAotCSAqIEFNIHRvIGtpbGwgaXRzIGVudHJ5 IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGluIHRoZSBuZXh0Ci0JICogYW1n ZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkuICBXZSBkbyBub3QgZG8gdGhpcyB3 aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZSBNVkNDIHRvIGRvIHNv LiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KLQkgKi8KLQlp ZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKLQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBs ZSA9IGFsbF9kZWFkOwotCi0JcmV0dXJuIGZvdW5kOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0t Ci0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90IC0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2Fu Ci0gKgotICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2Nh biBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCi0gKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAg VGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNsb3QuCi0gKgotICogT24gc3Vj Y2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQs IGFuZCB3aWxsIGJlCi0gKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGluZGV4X2dldG5leHRfdGlkLCBp bmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNhbGwpLgotICoKLSAqIE5vdGU6 IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tp bmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBo ZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0 IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAtLS0tLS0tLS0tLS0tLS0tCi0g Ki8KLWJvb2wKLWluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKLXsKLQlmb3IgKDs7KQotCXsK LQkJaWYgKCFzY2FuLT54c19oZWFwX2NvbnRpbnVlKQotCQl7Ci0JCQlJdGVtUG9pbnRlciB0aWQ7 Ci0KLQkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5leHQgVElEIGZyb20gdGhlIGluZGV4ICovCi0J CQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOwotCi0JCQkvKiBJZiB3 ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLwotCQkJaWYgKHRpZCA9PSBO VUxMKQotCQkJCWJyZWFrOwotCi0JCQlBc3NlcnQoSXRlbVBvaW50ZXJFcXVhbHModGlkLCAmc2Nh bi0+eHNfaGVhcHRpZCkpOwotCQl9Ci0KLQkJLyoKLQkJICogRmV0Y2ggdGhlIG5leHQgKG9yIG9u bHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleCBlbnRyeS4KLQkJICogSWYgd2Ug ZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIgdGhlIG5leHQgVElEIGZy b20KLQkJICogdGhlIGluZGV4LgotCQkgKi8KLQkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgm c2Nhbi0+eHNfaGVhcHRpZCkpOwotCQlpZiAoaW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkK LQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQogLyogLS0tLS0tLS0t LS0tLS0tLQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGF0IG9uY2UgZnJv bSBhbiBpbmRleCBzY2FuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5hOWE3MjgxMGYKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCkBAIC0wLDAgKzEs NzUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBpbmRleGJhdGNoLmMKKyAqCSAgQmF0 Y2gtYmFzZWQgaW5kZXggc2NhbiBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIGFtZ2V0YmF0Y2ggaW50 ZXJmYWNlLgorICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBjb3JlIGluZnJhc3RydWN0 dXJlIGZvciBiYXRjaC1iYXNlZCBpbmRleCBzY2FucywKKyAqIHdoaWNoIGFsbG93IGluZGV4IEFN cyB0byByZXR1cm4gbXVsdGlwbGUgbWF0Y2hpbmcgVElEcyBwZXIgcGFnZSBpbiBhIHNpbmdsZQor ICogY2FsbC4gIFRoZSBiYXRjaCByaW5nIGJ1ZmZlciBpcyBtYW5hZ2VkIGJ5IHRoZSB0YWJsZSBB TSwgd2l0aCBoZWxwIGZyb20gdXMsCisgKiBhbmQgd2l0aCBoZWxwIGZyb20gdGhlIHJpbmcgYnVm ZmVyIGlubGluZSBmdW5jdGlvbnMgaW4gcmVsc2Nhbi5oLiAgVGhpcworICogYXBwcm9hY2ggZW5h YmxlcyBlZmZpY2llbnQgcHJlZmV0Y2hpbmcgb2YgdGFibGUgQU0gYmxvY2tzIGR1cmluZyBvcmRl cmVkCisgKiBpbmRleCBzY2Fucy4KKyAqCisgKiBUaGUgcmluZyBidWZmZXIgbG9hZHMgYmF0Y2hl cyBpbiBpbmRleCBrZXkgc3BhY2Ugb3JkZXIuCisgKgorICogVGhlcmUncyB0aHJlZSB0eXBlcyBv ZiBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGU6CisgKgorICogMS4gQ29yZSBiYXRjaCBzY2FuIGxp ZmVjeWNsZSAoaW5kZXhfYmF0Y2hzY2FuXyopOiBGdW5jdGlvbnMgdGhhdCBtYW5hZ2UKKyAqICAg IGJhdGNoIHNjYW4gc3RhdGUgaW5jbHVkaW5nIGluaXRpYWxpemF0aW9uLCByZXNldCwgY2xlYW51 cCwgYW5kIHRoZQorICogICAgbWFyay9yZXN0b3JlIG9wZXJhdGlvbnMgbmVlZGVkIGZvciBtZXJn ZSBqb2lucy4gIENhbGxlZCBieSBpbmRleGFtLmMKKyAqICAgIHJvdXRpbmVzIHRoYXQgbWFuYWdl IGluZGV4IHNjYW5zIG9uIGJlaGFsZiBvZiB0aGUgY29yZSBleGVjdXRvci4KKyAqCisgKiAyLiBU YWJsZSBBTSB1dGlsaXRpZXMgKHRhYmxlYW1fdXRpbF8qKTogSGVscGVyIGZ1bmN0aW9ucyBjYWxs ZWQgYnkgdGFibGUKKyAqICAgIEFNcyBkdXJpbmcgYW1nZXRiYXRjaCBpbmRleCBzY2Fucy4gIFRo ZXNlIGhhbmRsZSBjcm9zcy1iYXRjaCBkaXJlY3Rpb24KKyAqICAgIGNoYW5nZXMsIHJlY29yZGlu ZyBkZWFkIGl0ZW1zIGZvciBhIGxhdGVyIGNhbGwgdG8gYW1raWxsaXRlbXNiYXRjaCwgYW5kCisg KiAgICBmcmVlaW5nIGJhdGNoZXMgd2hlbiB0aGUgdGFibGUgQU0gaXMgZG9uZSB3aXRoIHRoZW0u CisgKgorICogMy4gSW5kZXggQU0gdXRpbGl0aWVzIChpbmRleGFtX3V0aWxfKik6IEhlbHBlciBm dW5jdGlvbnMgY2FsbGVkIGJ5IGluZGV4CisgKiAgICBBTXMgdGhhdCBpbXBsZW1lbnQgdGhlIGFt Z2V0YmF0Y2ggaW50ZXJmYWNlLiAgVGhlc2UgbWFuYWdlIGJhdGNoCisgKiAgICBhbGxvY2F0aW9u LCBpbmRleCBwYWdlIGJ1ZmZlciBsb2NrIHJlbGVhc2UsIGFuZCBiYXRjaCBtZW1vcnkgcmVjeWNs aW5nLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwor ICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNp bmNsdWRlICJjb21tb24vaW50LmgiCisjaW5jbHVkZSAibGliL3F1bmlxdWUuaCIKKworc3RhdGlj IGludAliYXRjaF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpOwor CisvKgorICogU2V0cyB1cCB0aGUgYmF0Y2ggcmluZyBidWZmZXIgc3RydWN0dXJlIGZvciB1c2Ug YnkgYW4gaW5kZXggc2Nhbi4KKyAqCisgKiBPbmx5IGNhbGwgaGVyZSB3aGVuIGFsbCBvZiB0aGUg aW5kZXggcmVsYXRlZCBmaWVsZHMgaW4gJ3NjYW4nIHdlcmUgYWxyZWFkeQorICogaW5pdGlhbGl6 ZWQuCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbikK K3sKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0g TlVMTCk7CisKKwlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvcy52YWxpZCA9IGZhbHNlOworCXNj YW4tPmJhdGNocmluZ2J1Zi5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CisKKwlzY2FuLT5iYXRjaHJp bmdidWYubWFya0JhdGNoID0gTlVMTDsKKwlzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoID0g MDsJLyogaW5pdGlhbCBoZWFkIGJhdGNoICovCisJc2Nhbi0+YmF0Y2hyaW5nYnVmLm5leHRCYXRj aCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggc3RhcnRzIGVtcHR5ICovCisJc2Nhbi0+YmF0Y2hyaW5n YnVmLmRvbmUgPSBmYWxzZTsKKwltZW1zZXQoJnNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZSwgMCwg c2l6ZW9mKHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZSkpOworCisJc2Nhbi0+dXNlYmF0Y2hyaW5n ID0gdHJ1ZTsKK30KKworLyoKKyAqIFJlc2V0IHN0YXRlIHVzZWQgZm9yIGEgYmF0Y2ggaW5kZXgg c2NhbgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2Fu KQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1 ZjsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsK Kwlib29sCQltYXJrQmF0Y2hGcmVlZCA9IGZhbHNlOworCisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBm ZXRjaCk7CisKKwliYXRjaHJpbmdidWYtPnNjYW5Qb3MudmFsaWQgPSBmYWxzZTsKKwliYXRjaHJp bmdidWYtPm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKworCS8qCisJICogRW5zdXJlIHRhYmxlYW1f dXRpbF9mcmVlX2JhdGNoIHdvbid0IHNraXAgdGhlIG9sZCBtYXJrQmF0Y2ggaW4gdGhlIGxvb3AK KwkgKiBiZWxvdworCSAqLworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gTlVMTDsKKworCWZv ciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+ bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IGluZGV4X3NjYW5f YmF0Y2goc2NhbiwgaSk7CisKKwkJaWYgKGJhdGNoID09IG1hcmtCYXRjaCkKKwkJCW1hcmtCYXRj aEZyZWVkID0gdHJ1ZTsKKworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBiYXRjaCk7 CisJfQorCisJaWYgKCFtYXJrQmF0Y2hGcmVlZCAmJiB1bmxpa2VseShtYXJrQmF0Y2gpKQorCQl0 YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBtYXJrQmF0Y2gpOworCisJYmF0Y2hyaW5nYnVm LT5oZWFkQmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gMDsKK30KKworLyoK KyAqIEZyZWUgcmVzb3VyY2VzIGF0IGVuZCBvZiBiYXRjaCBpbmRleCBzY2FuCisgKgorICogQ2Fs bGVkIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBiZWluZyBlbmRlZCwgcmlnaHQgYmVmb3JlIHRoZSBv d25pbmcgc2NhbgorICogZGVzY3JpcHRvciBnb2VzIGF3YXkuICBDbGVhbnMgdXAgYWxsIGJhdGNo IHJlbGF0ZWQgcmVzb3VyY2VzLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fZW5kKEluZGV4 U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBGcmVlIGFsbCByZW1haW5pbmcgbG9hZGVkIGJhdGNoZXMg KGV2ZW4gbWFya0JhdGNoKSAqLworCXNjYW4tPmJhdGNocmluZ2J1Zi5kb25lID0gdHJ1ZTsKKwlp bmRleF9iYXRjaHNjYW5fcmVzZXQoc2Nhbik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVY X1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggY2FjaGVkID0g c2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ldOworCisJCWlmIChjYWNoZWQgPT0gTlVMTCkKKwkJ CWNvbnRpbnVlOworCisJCWlmIChjYWNoZWQtPmRlYWRJdGVtcykKKwkJCXBmcmVlKGNhY2hlZC0+ ZGVhZEl0ZW1zKTsKKwkJcGZyZWUoYmF0Y2hfYWxsb2NfYmFzZShjYWNoZWQsIHNjYW4pKTsKKwl9 Cit9CisKKy8qCisgKiBTZXQgYSBtYXJrIGZyb20gc2NhblBvcyBwb3NpdGlvbgorICoKKyAqIFNh dmVzIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24gYW5kIGFzc29jaWF0ZWQgYmF0Y2ggc28gdGhh dCB0aGUgc2NhbiBjYW4KKyAqIGJlIHJlc3RvcmVkIHRvIHRoaXMgcG9pbnQgbGF0ZXIsIHZpYSBh IGNhbGwgdG8gaW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zLgorICogVGhlIG1hcmtlZCBiYXRj aCBpcyByZXRhaW5lZCBhbmQgbm90IGZyZWVkIHVudGlsIGEgbmV3IG1hcmsgaXMgc2V0IG9yIHRo ZQorICogc2NhbiBlbmRzIChvciB1bnRpbCB0aGUgbWFyayBpcyByZXN0b3JlZCkuCisgKi8KK3Zv aWQKK2luZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0 Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNo UmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7CisJQmF0 Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHJpbmdidWYtPm1hcmtQb3M7CisJSW5kZXhT Y2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRj aCk7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7 CisJYm9vbAkJZnJlZU1hcmtCYXRjaDsKKworCUFzc2VydChzY2FuLT5NVkNDU2Nhbik7CisKKwkv KgorCSAqIEZyZWUgdGhlIHByZXZpb3VzIG1hcmsgYmF0Y2ggKGlmIGFueSkgLS0gYnV0IG9ubHkg aWYgaXQgaXNuJ3Qgb3VyCisJICogc2NhbkJhdGNoIChkZWZlbnNpdmVseSBtYWtlIHN1cmUgdGhh dCBtYXJrQmF0Y2ggaXNuJ3Qgc29tZSBsYXRlcgorCSAqIHN0aWxsLW5lZWRlZCBiYXRjaCwgdG9v KQorCSAqLworCWlmICghbWFya0JhdGNoIHx8IG1hcmtCYXRjaCA9PSBzY2FuQmF0Y2gpCisJewor CQkvKiBEZWZpbml0ZWx5IG5vIG1hcmtCYXRjaCB0aGF0IHdlIHNob3VsZCBmcmVlIG5vdyAqLwor CQlmcmVlTWFya0JhdGNoID0gZmFsc2U7CisJfQorCWVsc2UgaWYgKGxpa2VseSghaW5kZXhfc2Nh bl9iYXRjaF9sb2FkZWQoc2NhbiwgbWFya1Bvcy0+YmF0Y2gpKSkKKwl7CisJCS8qIERlZmluaXRl bHkgaGF2ZSBhIG5vLWxvbmdlci1sb2FkZWQgbWFya0JhdGNoIHRvIGZyZWUgKi8KKwkJZnJlZU1h cmtCYXRjaCA9IHRydWU7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEl0IGxvb2tzIGxpa2Ug bWFya0JhdGNoIGlzIGxvYWRlZC9zdGlsbCBuZWVkZWQgd2l0aGluIGJhdGNocmluZ2J1Zi4KKwkJ ICoKKwkJICogaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQgaW5kaWNhdGVzIHRoYXQgbWFya3Bvcy0+ YmF0Y2ggaXMgbG9hZGVkCisJCSAqIGFscmVhZHksIGJ1dCB3ZSBjYW5ub3QgZnVsbHkgdHJ1c3Qg aXQgaGVyZS4gIEl0J3MganVzdCBhYm91dAorCQkgKiBwb3NzaWJsZSB0aGF0IG1hcmtwb3MtPmJh dGNoIGZhbGxzIHdpdGhpbiBhIHNpbmNlLXJlY3ljbGVkIHJhbmdlIG9mCisJCSAqIGJhdGNoIG9m ZnNldCBudW1iZXJzIChmb2xsb3dpbmcgdWludDggb3ZlcmZsb3cpLgorCQkgKgorCQkgKiBNYWtl IHN1cmUgdGhhdCBtYXJrQmF0Y2ggcmVhbGx5IGlzIGxvYWRlZCBieSBkaXJlY3RseSBjb21wYXJp bmcgaXQKKwkJICogYWdhaW5zdCBhbGwgbG9hZGVkIGJhdGNoZXMuICBXZSBtdXN0IG5vdCBmYWls IHRvIHJlbGVhc2UgbWFya0JhdGNoCisJCSAqIHdoZW4gbm9ib2R5IGVsc2Ugd2lsbCBsYXRlciBv bi4KKwkJICoKKwkJICogTm90ZTogaW4gcHJhY3RpY2Ugd2UncmUgdmVyeSB1bmxpa2VseSB0byBl bmQgdXAgaGVyZS4gIEl0IGlzIHZlcnkKKwkJICogYXR5cGljYWwgZm9yIGFuIGluZGV4IHNjYW4g b24gdGhlIGlubmVyIHNpZGUgb2YgYSBtZXJnZSBqb2luIHRvCisJCSAqIGhvbGQgb24gdG8gYSBt YXJrIHRoYXQgdHJhaWxzIHRoZSBjdXJyZW50IHNjYW5CYXRjaCB0aGlzIG11Y2guCisJCSAqLwor CQlmcmVlTWFya0JhdGNoID0gdHJ1ZTsJLyogaS5lLiBpbmRleF9zY2FuX2JhdGNoX2xvYWRlZCBs aWVkIHRvIHVzICovCisKKwkJZm9yICh1aW50OCBpID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7 IGkgIT0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7IGkrKykKKwkJeworCQkJaWYgKGluZGV4X3Nj YW5fYmF0Y2goc2NhbiwgaSkgPT0gbWFya0JhdGNoKQorCQkJeworCQkJCS8qIGluZGV4X3NjYW5f YmF0Y2hfbG9hZGVkIHdhcyByaWdodC9ubyBvdmVyZmxvdyBoYXBwZW5lZCAqLworCQkJCWZyZWVN YXJrQmF0Y2ggPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmcmVl TWFya0JhdGNoKQorCXsKKwkJLyogRnJlZSBtYXJrQmF0Y2gsIHNpbmNlIGl0IGlzbid0IGxvYWRl ZC9uZWVkZWQgZm9yIGJhdGNocmluZ2J1ZiAqLworCQliYXRjaHJpbmdidWYtPm1hcmtCYXRjaCA9 IE5VTEw7IC8qIGVsc2UgY2FsbCB3b24ndCBmcmVlIG1hcmtCYXRjaCAqLworCQl0YWJsZWFtX3V0 aWxfZnJlZV9iYXRjaChzY2FuLCBtYXJrQmF0Y2gpOworCX0KKworCS8qIGNvcHkgdGhlIHNjYW4n cyBwb3NpdGlvbiAqLworCWJhdGNocmluZ2J1Zi0+bWFya1BvcyA9ICpzY2FuUG9zOworCWJhdGNo cmluZ2J1Zi0+bWFya0JhdGNoID0gc2NhbkJhdGNoOworfQorCisvKgorICogUmVzdG9yZSBtYXJr IHRvIHNjYW5Qb3MgcG9zaXRpb24KKyAqCisgKiBSZXN0b3JlcyB0aGUgc2NhbiB0byBhIHBvc2l0 aW9uIHNhdmVkIGJ5IGluZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyBlYXJsaWVyLgorICogVGhlIHNj YW4ncyBtYXJrUG9zIGJlY29tZXMgaXRzIHNjYW5Qb3MuICBUaGUgbWFya2VkIGJhdGNoIGlzIHJl c3RvcmVkIGFzCisgKiB0aGUgY3VycmVudCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCisgKgorICog V2UganVzdCBkaXNjYXJkIGFsbCBiYXRjaGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3Jl ZCBzY2FuQmF0Y2gpLAorICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNj YW4ncyBjdXJyZW50IHNjYW5CYXRjaC4KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hzY2FuX3Jlc3Rv cmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmlu Z2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9 ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlCYXRjaFJpbmdJdGVtUG9zICptYXJrUG9z ID0gJmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBi YXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRl eF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCUFzc2VydChzY2FuLT5NVkND U2Nhbik7CisJQXNzZXJ0KCFiYXRjaHJpbmdidWYtPmRvbmUpOworCUFzc2VydChtYXJrUG9zLT52 YWxpZCk7CisKKwlpZiAoc2NhbkJhdGNoID09IG1hcmtCYXRjaCkKKwl7CisJCS8qIG1hcmtCYXRj aCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsgbmVlZG4ndCBjaGFuZ2UgYmF0Y2hyaW5nYnVmICovCisJ CUFzc2VydChzY2FuUG9zLT5iYXRjaCA9PSBtYXJrUG9zLT5iYXRjaCk7CisKKwkJc2NhblBvcy0+ aXRlbSA9IG1hcmtQb3MtPml0ZW07CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIG1hcmtCYXRj aCBpcyBiZWhpbmQgc2NhbkJhdGNoLCBhbmQgc28gbXVzdCBub3QgYmUgc2F2ZWQgaW4gcmluZyBi dWZmZXIKKwkgKiBhbnltb3JlLiAgV2UgaGF2ZSB0byBkZWFsIHdpdGggcmVzdG9yaW5nIHRoZSBt YXJrIHRoZSBoYXJkIHdheTogYnkKKwkgKiBpbnZhbGlkYXRpbmcgYWxsIG90aGVyIGxvYWRlZCBi YXRjaGVzLiAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBjYXNlCisJICogd2hlcmUgdGhlIHNjYW4g ZGlyZWN0aW9uIGNoYW5nZXMgYW5kIHRoZSBzY2FuIGFjdHVhbGx5IGNyb3NzZXMKKwkgKiBiYXRj aC9pbmRleCBwYWdlIGJvdW5kYXJpZXMgKHNlZSB0YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdl KS4KKwkgKgorCSAqIEZpcnN0LCBmcmVlIGFsbCBiYXRjaGVzIHRoYXQgYXJlIHN0aWxsIGluIHRo ZSByaW5nIGJ1ZmZlci4KKwkgKi8KKwlmb3IgKHVpbnQ4IGkgPSBiYXRjaHJpbmdidWYtPmhlYWRC YXRjaDsgaSAhPSBiYXRjaHJpbmdidWYtPm5leHRCYXRjaDsgaSsrKQorCXsKKwkJSW5kZXhTY2Fu QmF0Y2ggYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGkpOworCisJCUFzc2VydChiYXRj aCAhPSBtYXJrQmF0Y2gpOworCisJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIGJhdGNo KTsKKwl9CisKKwkvKgorCSAqIE5leHQgImFwcGVuZCIgc3RhbmRhbG9uZSBtYXJrQmF0Y2gsIG1h a2luZyB0aGUgcmluZyBidWZmZXIgYXBwZWFyIGFzIGlmCisJICogaXQgd2FzIHRoZSBmaXJzdCBi YXRjaCBldmVyIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2ggZm9yIHRoZSBzY2FuCisJICovCisJbWFy a1Bvcy0+YmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+c2NhblBvcyA9ICptYXJrUG9zOworCWJh dGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSBtYXJrUG9z LT5iYXRjaDsKKwlpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChzY2FuLCBtYXJrQmF0Y2gpOworCUFz c2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1Zi0+c2NhblBvcy5iYXRjaCkg PT0gbWFya0JhdGNoKTsKKworCS8qCisJICogRmluYWxseSwgY2FsbCBhbXBvc3Jlc2V0IHRvIGxl dCBpbmRleCBBTSBrbm93IHRvIGludmFsaWRhdGUgYW55IHByaXZhdGUKKwkgKiBzdGF0ZSB0aGF0 IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3MKKwkgKi8KKwlpZiAoc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQpCisJCXNjYW4tPmluZGV4UmVs YXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KHNjYW4sIG1hcmtCYXRjaCk7CisKKwkvKgorCSAq IE5vdGU6IG1hcmtCYXRjaC5kZWFkSXRlbXNbXSBtaWdodCBhbHJlYWR5IGNvbnRhaW4gZGVhZCBp dGVtcywgYW5kIG1pZ2h0CisJICogeWV0IGhhdmUgbW9yZSBkZWFkIGl0ZW1zIHNhdmVkLiAgdGFi bGVhbV91dGlsX2ZyZWVfYmF0Y2ggaXMgcHJlcGFyZWQKKwkgKiBmb3IgdGhhdC4KKwkgKi8KK30K KworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoJCQl1dGlsaXR5IGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGFibGUgQU1z CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEhhbmRsZSBjcm9zcy1iYXRjaCBjaGFuZ2UgaW4g c2NhbiBkaXJlY3Rpb24KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0gd2hlbiBpdHMgc2NhbiBj aGFuZ2VzIGRpcmVjdGlvbiBpbiBhIHdheSB0aGF0CisgKiBuZWNlc3NpdGF0ZXMgYmFja2luZyB0 aGUgc2NhbiB1cCB0byBhbiBpbmRleCBwYWdlIG9yaWdpbmFsbHkgYXNzb2NpYXRlZAorICogd2l0 aCBhIG5vdy1mcmVlZCBiYXRjaC4KKyAqCisgKiBXaGVuIHdlIHJldHVybiwgYmF0Y2hyaW5nYnVm IHdpbGwgb25seSBjb250YWluIG9uZSBiYXRjaCAodGhlIGN1cnJlbnQKKyAqIGhlYWRCYXRjaC9z Y2FuQmF0Y2gpLiAgQ2FsbGVyIGNhbiB0aGVuIHNhZmVseSBwYXNzIHRoaXMgYmF0Y2ggdG8gYW1n ZXRiYXRjaAorICogdG8gZGV0ZXJtaW5lIHdoaWNoIGJhdGNoIGNvbWVzIG5leHQgaW4gdGhlIG5l dyBzY2FuIGRpcmVjdGlvbi4gIEZyb20gdGhhdAorICogcG9pbnQgb24gYmF0Y2hyaW5nYnVmIHdp bGwgbG9vayBhcyBpZiBvdXIgbmV3IHNjYW4gZGlyZWN0aW9uIGhhZCBiZWVuIHVzZWQKKyAqIGZy b20gdGhlIHN0YXJ0LiAgVGhpcyBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50 LCBidXQgaXQgd29ya3MKKyAqIHdlbGwgZW5vdWdoIGZvciB3aGF0IG91Z2h0IHRvIGJlIGEgcmVs YXRpdmVseSByYXJlIG9jY3VycmVuY2UuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9iYXRjaF9k aXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hy aW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBoZWFkOworCisJ LyoKKwkgKiBSZWxlYXNlIGJhdGNoZXMgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCAidGFpbCIg YmF0Y2gsIHdvcmtpbmcKKwkgKiBiYWNrd2FyZHMgdW50aWwgdGhlIGN1cnJlbnQgaGVhZCBiYXRj aCAod2hpY2ggbXVzdCBhbHNvIGJlIHRoZSBjdXJyZW50CisJICogc2NhbkJhdGNoKSBpcyB0aGUg b25seSBiYXRjaCBoYXNuJ3QgYmVlbiBmcmVlZAorCSAqLworCXdoaWxlIChpbmRleF9zY2FuX2Jh dGNoX2NvdW50KHNjYW4pID4gMSkKKwl7CisJCUluZGV4U2NhbkJhdGNoIHRhaWwgPSBpbmRleF9z Y2FuX2JhdGNoKHNjYW4sCisJCQkJCQkJCQkJCSAgIGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0g MSk7CisKKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgdGFpbCk7CisJCWJhdGNocmlu Z2J1Zi0+bmV4dEJhdGNoLS07CisJfQorCisJLyogc2NhbkJhdGNoIGlzIG5vdyB0aGUgb25seSBi YXRjaCBzdGlsbCBsb2FkZWQgKi8KKwlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0g YmF0Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNoKTsKKworCS8qCisJICogRGVhbCB3aXRoIGluZGV4 IEFNIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhlIHByb2dyZXNzIG9mIHRoZQor CSAqIHNjYW4uICBEbyB0aGlzIGJ5IGZsaXBwaW5nIHRoZSBiYXRjaC1sZXZlbCBzY2FuIGRpcmVj dGlvbiwgYW5kIHRoZW4KKwkgKiBjYWxsaW5nIHRoZSBpbmRleCBBTSdzIGFtcG9zcmVzZXQuCisJ ICovCisJaGVhZCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2gpOworCWhlYWQtPmRpciA9IC1oZWFkLT5kaXI7CisJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24t PnJkX2luZGFtLT5hbXBvc3Jlc2V0KQorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+ YW1wb3NyZXNldChzY2FuLCBoZWFkKTsKK30KKworLyoKKyAqIFJlY29yZCB0aGF0IHNjYW5Qb3Mg aXRlbSBpcyBkZWFkCisgKgorICogUmVjb3JkcyBhbiBvZmZzZXQgdG8gdGhlIGN1cnJlbnQgc2Nh bkJhdGNoL3NjYW5Qb3MgaXRlbSwgc2F2aW5nIGl0IGluCisgKiBzY2FuQmF0Y2gncyBkZWFkSXRl bXMgYXJyYXkuICBUaGUgaXRlbXMnIGluZGV4IHR1cGxlcyB3aWxsIGxhdGVyIGJlCisgKiBtYXJr ZWQgTFBfREVBRCB3aGVuIGN1cnJlbnQgc2NhbkJhdGNoIGlzIGZyZWVkLgorICovCit2b2lkCit0 YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0 Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlJ bmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3Mt PmJhdGNoKTsKKworCWlmIChzY2FuQmF0Y2gtPmRlYWRJdGVtcyA9PSBOVUxMKQorCQlzY2FuQmF0 Y2gtPmRlYWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOwor CWlmIChzY2FuQmF0Y2gtPm51bURlYWQgPCBzY2FuLT5tYXhpdGVtc2JhdGNoKQorCQlzY2FuQmF0 Y2gtPmRlYWRJdGVtc1tzY2FuQmF0Y2gtPm51bURlYWQrK10gPSBzY2FuUG9zLT5pdGVtOworfQor CisvKgorICogUmVsZWFzZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgYmF0Y2gKKyAqCisg KiBDYWxsZWQgYnkgdGFibGUgQU0ncyBvcmRlcmVkIGluZGV4IHNjYW4gaW1wbGVtZW50YXRpb24g d2hlbiBpdCBpcyBmaW5pc2hlZAorICogd2l0aCBhIGJhdGNoIGFuZCB3aXNoZXMgdG8gcmVsZWFz ZSBpdHMgcmVzb3VyY2VzLgorICoKKyAqIFdlIGNhbGwgYW1yZWxlYXNlYmF0Y2ggdG8gcmVsZWFz ZSBhbnkgaW5kZXggQU0gcmVzb3VyY2VzIChlLmcuIGJ1ZmZlciBwaW5zKQorICogdGhhdCBoYXZl bid0IGJlZW4gcmVsZWFzZWQgeWV0LiAgRm9yIHBsYWluIE1WQ0Mgc2NhbnMsIHRoZSBwaW4gd2Fz IGFscmVhZHkKKyAqIHJlbGVhc2VkIGVhZ2VybHksIHNvIGFtcmVsZWFzZWJhdGNoIGlzIGEgbm8t b3AuICBJbmRleC1vbmx5IHNjYW5zIG11c3QKKyAqIGRlbGF5IGRyb3BwaW5nIHRoZSBwaW4gdW50 aWwgdmlzaWJpbGl0eSBpcyByZXNvbHZlZCBmb3IgYWxsIGl0ZW1zIGluIHRoZQorICogYmF0Y2gs IHNvIGFtcmVsZWFzZWJhdGNoIG1heSBzdGlsbCBuZWVkIHRvIHJlbGVhc2UgaGVyZS4gIEZvciBu b24tTVZDQworICogc25hcHNob3Qgc2NhbnMsIHRoZSBwaW4gaXMgYWx3YXlzIGhlbGQgdW50aWwg YW1yZWxlYXNlYmF0Y2ggcmVsZWFzZXMgaXQuCisgKgorICogV2hlbiB0aGUgYmF0Y2ggaGFzIGRl YWQgaXRlbXMgKG51bURlYWQgPiAwKSBhbmQgdGhlIGluZGV4IEFNIHByb3ZpZGVzIGFuCisgKiBh bWtpbGxpdGVtc2JhdGNoIGNhbGxiYWNrLCB3ZSBjYWxsIGl0IHRvIHNldCBMUF9ERUFEIGJpdHMg aW4gdGhlIGluZGV4CisgKiBwYWdlLiAgV2UgYWx3YXlzIHJlY3ljbGUgdGhlIGJhdGNoIG1lbW9y eSB2aWEgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuCisgKgorICogTm90ZTogQ2FsbGluZyBo ZXJlIHdoZW4gJ2JhdGNoJyBpcyBhbHNvIGJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggaXMgYSBuby1v cC4KKyAqIENhbGxlcnMgdGhhdCBkb24ndCB3YW50IHRoaXMgc2hvdWxkIHNldCBiYXRjaHJpbmdi dWYubWFya0JhdGNoIHRvIE5VTEwKKyAqIGJlZm9yZSBjYWxsaW5nIHVzLiAgTm90ZSB0aGF0IG1h cmtCYXRjaCBoYXMgdG8gYmUgZXhwbGljaXRseSBmcmVlZC4KKyAqLwordm9pZAordGFibGVhbV91 dGlsX2ZyZWVfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkK K3sKKwkvKiBkb24ndCBmcmVlIGNhbGxlcidzIGJhdGNoIGlmIGl0IGlzIHNjYW4ncyBjdXJyZW50 IG1hcmtCYXRjaCAqLworCWlmIChiYXRjaCA9PSBzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNo KQorCQlyZXR1cm47CisKKwkvKiBSZWxlYXNlIGludGVybG9jayAoZS5nLiwgYnVmZmVyIHBpbikg d2hlbiBzdGlsbCBoZWxkIGJ5IGluZGV4IEFNICovCisJaWYgKCFzY2FuLT5iYXRjaEltbWVkaWF0 ZVJlbGVhc2UpCisJCXRhYmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwor CS8qCisJICogTGV0IHRoZSBpbmRleCBBTSBzZXQgTFBfREVBRCBiaXRzIGluIHRoZSBpbmRleCBw YWdlLCBpZiBhcHBsaWNhYmxlLgorCSAqCisJICogYmF0Y2guZGVhZEl0ZW1zW10gaXMgbm93IGlu IHdoYXRldmVyIG9yZGVyIHRoZSBzY2FuIHJldHVybmVkIGl0ZW1zIGluLgorCSAqIFdlIG1pZ2h0 IGhhdmUgZXZlbiBzYXZlZCB0aGUgc2FtZSBpdGVtL1RJRCB0d2ljZS4KKwkgKgorCSAqIFNvcnQg YW5kIHVuaXF1ZS1pZnkgZGVhZEl0ZW1zW10uICBUaGF0IHdheSB0aGUgaW5kZXggQU0gY2FuIHNh ZmVseQorCSAqIGFzc3VtZSB0aGF0IGl0ZW1zIHdpbGwgYWx3YXlzIGJlIGluIHRoZWlyIG9yaWdp bmFsIGluZGV4IHBhZ2Ugb3JkZXIuCisJICovCisJaWYgKGJhdGNoLT5udW1EZWFkID4gMCAmJgor CQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRjaCAhPSBOVUxM KQorCXsKKwkJaWYgKGJhdGNoLT5udW1EZWFkID4gMSkKKwkJeworCQkJcXNvcnQoYmF0Y2gtPmRl YWRJdGVtcywgYmF0Y2gtPm51bURlYWQsIHNpemVvZihpbnQpLAorCQkJCSAgYmF0Y2hfY29tcGFy ZV9pbnQpOworCQkJYmF0Y2gtPm51bURlYWQgPSBxdW5pcXVlKGJhdGNoLT5kZWFkSXRlbXMsIGJh dGNoLT5udW1EZWFkLAorCQkJCQkJCQkJIHNpemVvZihpbnQpLCBiYXRjaF9jb21wYXJlX2ludCk7 CisJCX0KKworCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRj aChzY2FuLCBiYXRjaCk7CisJfQorCisJLyoKKwkgKiBVc2UgY2FjaGUsIGp1c3QgbGlrZSBpbmRl eGFtX3V0aWxfYmF0Y2hfcmVsZWFzZSBkb2VzIGl0LgorCSAqLworCWZvciAoaW50IGkgPSAwOyBp IDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJeworCQlpZiAoc2Nhbi0+YmF0Y2hy aW5nYnVmLmNhY2hlW2ldID09IE5VTEwpCisJCXsKKwkJCS8qIGZvdW5kIGVtcHR5IHNsb3QsIHdl J3JlIGRvbmUgKi8KKwkJCXNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXSA9IGJhdGNoOworCQkJ cmV0dXJuOworCQl9CisJfQorCisJaWYgKGJhdGNoLT5kZWFkSXRlbXMpCisJCXBmcmVlKGJhdGNo LT5kZWFkSXRlbXMpOworCXBmcmVlKGJhdGNoX2FsbG9jX2Jhc2UoYmF0Y2gsIHNjYW4pKTsKK30K KworLyoKKyAqIFJlbGVhc2UgYmF0Y2ggcmVzb3VyY2VzIGhlbGQgYnkgdGhlIGluZGV4IEFNCisg KgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2FmZSB0byByZWxlYXNlIHdo YXRldmVyIHJlc291cmNlcyB0aGUKKyAqIGluZGV4IEFNIGhvbGRzIHRvIHByZXZlbnQgdW5zYWZl IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0KKyAqICh0eXBpY2FsbHkgYSBidWZm ZXIgcGluIG9uIHRoZSBiYXRjaCdzIGluZGV4IHBhZ2UgaW4gYmF0Y2gncyBvcGFxdWUgYXJlYSku CisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJLyogT25seSBzdXBwb3NlZCB0byBiZSBjYWxs ZWQgZHVyaW5nICFiYXRjaEltbWVkaWF0ZVJlbGVhc2Ugc2NhbnMgKi8KKwlBc3NlcnQoIXNjYW4t PmJhdGNoSW1tZWRpYXRlUmVsZWFzZSk7CisKKwlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRh bS0+YW1yZWxlYXNlYmF0Y2goc2NhbiwgYmF0Y2gpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJCXV0 aWxpdHkgZnVuY3Rpb25zIGNhbGxlZCBieSBhbWdldGJhdGNoIGluZGV4IEFNcworICoKKyAqIFRo ZXNlIGZ1bmN0aW9ucyBtYW5hZ2UgYmF0Y2ggYWxsb2NhdGlvbiwgdW5sb2NrL3BpbiBtYW5hZ2Vt ZW50LCBhbmQgYmF0Y2gKKyAqIHJlc291cmNlIHJlY3ljbGluZy4gIEluZGV4IEFNcyBpbXBsZW1l bnRpbmcgYW1nZXRiYXRjaCBzaG91bGQgdXNlIHRoZXNlCisgKiByYXRoZXIgdGhhbiBtYW5hZ2lu ZyBidWZmZXJzIGRpcmVjdGx5LgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBVbmxvY2sgYmF0 Y2gncyBpbmRleCBwYWdlIGJ1ZmZlciBsb2NrCisgKgorICogVW5sb2NrcyB0aGUgZ2l2ZW4gYnVm ZmVyIGluIHByZXBhcmF0aW9uIGZvciBhbWdldGJhdGNoIHJldHVybmluZyBpdGVtcworICogc2F2 ZWQgaW4gdGhhdCBiYXRjaC4gIFBlcmZvcm1zIGV4dHJhIHN0ZXBzIHJlcXVpcmVkIGJ5IGFtZ2V0 YmF0Y2ggY2FsbGVycworICogaW4gcGFzc2luZy4KKyAqCisgKiBPbmx5IGNhbGwgaGVyZSB3aGVu IGEgYmF0Y2ggaGFzIG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0ZW1zIHRvIHJldHVybiB1c2luZwor ICogYW1nZXRiYXRjaCAob3IgZm9yIGFtZ2V0Yml0bWFwIHRvIGxvYWQgaW50byBpdHMgYml0bWFw IG9mIG1hdGNoaW5nIFRJRHMpLgorICogV2hlbiBhbiBpbmRleCBwYWdlIGhhcyBubyBtYXRjaGVz LCBpdCdzIGFsd2F5cyBzYWZlIGZvciBpbmRleCBBTXMgdG8gZHJvcAorICogYm90aCB0aGUgbG9j ayBhbmQgdGhlIHBpbiBmb3IgdGhlbXNlbHZlcy4KKyAqCisgKiBOb3RlOiBJdCBpcyBjb252ZW5p ZW50IGZvciBpbmRleCBBTXMgdGhhdCBpbXBsZW1lbnQgYm90aCBhbWdldGJhdGNoIGFuZAorICog YW1nZXRiaXRtYXAgdG8gY29uc2lzdGVudGx5IHVzZSB0aGUgc2FtZSBiYXRjaCBtYW5hZ2VtZW50 IGFwcHJvYWNoLCBzaW5jZQorICogdGhhdCBhdm9pZHMgaW50cm9kdWNpbmcgc3BlY2lhbCBjYXNl cyB0byBsb3dlci1sZXZlbCBjb2RlLiAgV2UgZHJvcCBib3RoCisgKiB0aGUgbG9jayBhbmQgdGhl IHBpbiBvbiBiYXRjaCdzIHBhZ2Ugb24gYmVoYWxmIG9mIGFtZ2V0Yml0bWFwIGNhbGxlcnMuCisg KgorICogRm9yIGFtZ2V0YmF0Y2ggY2FsbGVycywgd2hlbiBiYXRjaEltbWVkaWF0ZVJlbGVhc2Ug aXMgc2V0IChwbGFpbiBNVkNDCisgKiBzY2FucyksIHdlIGFsc28gcmVsZWFzZSB0aGUgcGluIGhl cmUuICBPdGhlcndpc2UgdGhlIHRhYmxlIEFNIHdpbGwgY2FsbAorICogYW1yZWxlYXNlYmF0Y2gg bGF0ZXIgd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUgcGluLgorICovCit2b2lkCitpbmRleGFt X3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gsIEJ1ZmZlciBidWYpCit7CisJLyogYmF0Y2ggbXVzdCBoYXZlIG9uZSBvciBtb3JlIG1hdGNo aW5nIGl0ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNzZXJ0KGJhdGNoLT5maXJzdEl0 ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisKKwlpZiAo c2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJLyogYW1nZXRiYXRjaCAobm90IGFtZ2V0Yml0bWFw KSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKKworCQkv KgorCQkgKiBIYXZlIHRvIHNldCBiYXRjaC0+bHNuIHNvIHRoYXQgYW1raWxsaXRlbXNiYXRjaCBo YXMgYSB3YXkgdG8gZGV0ZWN0CisJCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xp bmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4KKwkJICogcGxhY2UuICBJdCdsbCBvbmx5IGJl IHNhZmUgdG8gc2V0IGFueSBpbmRleCB0dXBsZSBMUF9ERUFEIGJpdHMgd2hlbgorCQkgKiB0aGUg cGFnZSBMU04gaGFzbid0IGFkdmFuY2VkLgorCQkgKi8KKwkJYmF0Y2gtPmxzbiA9IEJ1ZmZlckdl dExTTkF0b21pYyhidWYpOworCisJCS8qIERyb3AgdGhlIGxvY2sgKi8KKwkJTG9ja0J1ZmZlcihi dWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwkJaWYgKHNjYW4tPmJhdGNoSW1tZWRpYXRlUmVs ZWFzZSkKKwkJeworCQkJLyoKKwkJCSAqIFBsYWluIE1WQ0Mgc2NhbjogcmVsZWFzZSB0aGUgcGlu IG5vdy4gIE5vIGFtcmVsZWFzZWJhdGNoCisJCQkgKiBjYWxsYmFjayB3aWxsIGJlIG5lZWRlZCBs YXRlci4gIFRoZSBpbmRleCBBTSBjYWxsZXIgbXVzdCBjbGVhcgorCQkJICogaXRzIG93biBvcGFx dWUgYnVmIGZpZWxkIGFmdGVyIHdlIHJldHVybi4KKwkJCSAqLworCQkJUmVsZWFzZUJ1ZmZlcihi dWYpOworCQl9CisKKwkJLyogZWxzZTogdGFibGUgQU0gd2lsbCBjYWxsIGFtcmVsZWFzZWJhdGNo IHdoZW4gcmVhZHkgKi8KKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiaXRtYXAgKG5vdCBhbWdl dGJhdGNoKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsK KworCQkvKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KKwkJTG9ja0J1ZmZlcihi dWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCVJlbGVhc2VCdWZmZXIoYnVmKTsKKwl9Cit9CisK Ky8qCisgKiBBbGxvY2F0ZSBhIG5ldyBiYXRjaAorICoKKyAqIFVzZWQgYnkgaW5kZXggQU1zIHRo YXQgc3VwcG9ydCBhbWdldGJhdGNoIGludGVyZmFjZSAoYm90aCBkdXJpbmcgYW1nZXRiYXRjaAor ICogYW5kIGFtZ2V0Yml0bWFwIHNjYW5zKS4KKyAqCisgKiBSZXR1cm5zIEluZGV4U2NhbkJhdGNo IHdpdGggc3BhY2UgdG8gZml0IHNjYW4tPm1heGl0ZW1zYmF0Y2gtbWFueQorICogQmF0Y2hNYXRj aGluZ0l0ZW0gZW50cmllcy4gIFRoaXMgd2lsbCBlaXRoZXIgYmUgYSBuZXdseSBhbGxvY2F0ZWQg YmF0Y2gsIG9yCisgKiBhIGJhdGNoIHJlY3ljbGVkIGZyb20gdGhlIGNhY2hlIG1hbmFnZWQgYnkg aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuICBTZWUKKyAqIGNvbW1lbnRzIGFib3ZlIGluZGV4 YW1fdXRpbF9iYXRjaF9yZWxlYXNlLgorICoKKyAqIEhvdXNla2VlcGluZyBmaWVsZHMgKGJ1Ziwg a25vd25FbmRCYWNrd2FyZC9Gb3J3YXJkLCBmaXJzdEl0ZW0sIGxhc3RJdGVtLAorICogbnVtRGVh ZCwgZGVhZEl0ZW1zLCBjdXJyVHVwbGVzKSBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4gIFRoZSB0YWJs ZSBBTSdzCisgKiBiYXRjaF9pbml0IGNhbGxiYWNrIGlzIGludm9rZWQgaGVyZSB0byBpbml0aWFs aXplIHRoZSB0YWJsZSBBTSBvcGFxdWUgYXJlYS4KKyAqIFRoZSBpbmRleCBBTSBjYWxsZXIgaXMg cmVzcG9uc2libGUgZm9yIGZpbGxpbmcgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUKKyAqIGZpZWxk cyBhbmQgdGhlIG1hdGNoaW5nIGl0ZW1zW10gYXJyYXkuCisgKgorICogT25jZSBwb3B1bGF0ZWQs IGNhbGxlciBlaXRoZXIgcGFzc2VzIHRoZSBiYXRjaCB0byBpbmRleGFtX3V0aWxfYmF0Y2hfdW5s b2NrCisgKiAoYWhlYWQgb2YgYW1nZXRiYXRjaCByZXR1cm5pbmcgaXQpLCBvciB0byBpbmRleGFt X3V0aWxfYmF0Y2hfcmVsZWFzZSAod2hlbgorICogdGhlIHBhZ2UgaGFkIG5vIG1hdGNoZXMpLgor ICovCitJbmRleFNjYW5CYXRjaAoraW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKEluZGV4U2NhbkRl c2Mgc2NhbikKK3sKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5VTEw7CisJYm9vbAkJbmV3X2Fs bG9jID0gZmFsc2U7CisKKwkvKgorCSAqIExhemlseSBjb21wdXRlIGJhdGNoX3RhYmxlX29mZnNl dCBvbiBmaXJzdCBhbGxvY2F0aW9uLiAgVGhpcyBjb21iaW5lcworCSAqIHRoZSB0YWJsZSBBTSBh bmQgaW5kZXggQU0gb3BhcXVlIHNpemVzIGludG8gYSBzaW5nbGUgb2Zmc2V0IHRoYXQgY2FuIGJl CisJICogdXNlZCB0byBmaW5kIHRoZSB0YWJsZSBBTSBvcGFxdWUgYXJlYSAoYW5kIHRoZSB0cnVl IGFsbG9jYXRpb24gYmFzZSkKKwkgKiBmcm9tIHRoZSBiYXRjaCBwb2ludGVyLgorCSAqLworCWlm IChzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQgPT0gMCAmJgorCQkoc2Nhbi0+YmF0Y2hfaW5kZXhf b3BhcXVlX3NpemUgPiAwIHx8CisJCSAoc2Nhbi0+eHNfaGVhcGZldGNoICYmIHNjYW4tPnhzX2hl YXBmZXRjaC0+YmF0Y2hfb3BhcXVlX3NpemUgPiAwKSkpCisJeworCQl1aW50MTYJCXRhYmxlX29w YXF1ZSA9IHNjYW4tPnhzX2hlYXBmZXRjaCA/CisJCQlzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNo X29wYXF1ZV9zaXplIDogMDsKKworCQlzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQgPSB0YWJsZV9v cGFxdWUgKworCQkJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemU7CisJfQorCisJLyogRmly c3QgbG9vayBmb3IgYW4gZXhpc3RpbmcgYmF0Y2ggZnJvbSB0aGUgY2FjaGUgKi8KKwlpZiAoc2Nh bi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NB Q0hFX0JBVENIRVM7IGkrKykKKwkJeworCQkJaWYgKHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtp XSAhPSBOVUxMKQorCQkJeworCQkJCS8qIFJldHVybiBjYWNoZWQgdW5yZWZlcmVuY2VkIGJhdGNo ICovCisJCQkJYmF0Y2ggPSBzY2FuLT5iYXRjaHJpbmdidWYuY2FjaGVbaV07CisJCQkJc2Nhbi0+ YmF0Y2hyaW5nYnVmLmNhY2hlW2ldID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0K KwllbHNlIGlmIChzY2FuLT54c19iaXRtYXBfYmF0Y2ggIT0gTlVMTCkKKwl7CisJCS8qCisJCSAq IFJldXNlIGNhY2hlZCBiYXRjaCBmcm9tIHByaW9yIGFtZ2V0Yml0bWFwIGl0ZXJhdGlvbi4gIFRo aXMgcGF0aCBpcworCQkgKiBoaXQgb24gZXZlcnkgYW1nZXRiaXRtYXAgY2FsbCBoZXJlIGFmdGVy IHRoZSBzY2FuJ3MgZmlyc3QuCisJCSAqLworCQliYXRjaCA9IHNjYW4tPnhzX2JpdG1hcF9iYXRj aDsKKwkJc2Nhbi0+eHNfYml0bWFwX2JhdGNoID0gTlVMTDsKKwl9CisKKwlpZiAoIWJhdGNoKQor CXsKKwkJU2l6ZQkJcHJlZml4X3N6OworCQlTaXplCQliYXNlX3N6OworCQlTaXplCQl0cmFpbGlu Z19zejsKKwkJU2l6ZQkJYWxsb2NzejsKKwkJY2hhcgkgICAqcmF3OworCisJCS8qIEFNIG9wYXF1 ZSBhcmVhcyBiZWZvcmUgdGhlIGJhdGNoIHBvaW50ZXIgKi8KKwkJcHJlZml4X3N6ID0gc2Nhbi0+ YmF0Y2hfdGFibGVfb2Zmc2V0OworCisJCS8qIEluZGV4U2NhbkJhdGNoRGF0YSBoZWFkZXIgKyBp dGVtc1tdICovCisJCWJhc2Vfc3ogPSBvZmZzZXRvZihJbmRleFNjYW5CYXRjaERhdGEsIGl0ZW1z KSArCisJCQlzaXplb2YoQmF0Y2hNYXRjaGluZ0l0ZW0pICogc2Nhbi0+bWF4aXRlbXNiYXRjaDsK KworCQkvKgorCQkgKiBUcmFpbGluZyBkYXRhIGFmdGVyIGl0ZW1zW106IHRhYmxlIEFNIHBlci1p dGVtIGRhdGEgKGUuZy4gdmlzSW5mbykKKwkJICogYW5kIGN1cnJUdXBsZXMgaW5kZXggQU0gdHVw bGUgd29ya3NwYWNlLgorCQkgKi8KKwkJdHJhaWxpbmdfc3ogPSAwOworCQlpZiAoc2Nhbi0+eHNf d2FudF9pdHVwKQorCQl7CisJCQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoICYmCisJCQkJc2Nhbi0+ eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9zaXplID4gMCkKKwkJCQl0cmFpbGluZ19zeiAr PSBNQVhBTElHTihzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgKgorCQkJ CQkJCQkJCXNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJdHJhaWxpbmdfc3ogKz0gc2Nhbi0+YmF0 Y2hfdHVwbGVzX3dvcmtzcGFjZTsKKwkJfQorCisJCWFsbG9jc3ogPSBwcmVmaXhfc3ogKyBNQVhB TElHTihiYXNlX3N6KSArIHRyYWlsaW5nX3N6OworCQlyYXcgPSBwYWxsb2MoYWxsb2Nzeik7CisJ CWJhdGNoID0gKEluZGV4U2NhbkJhdGNoKSAocmF3ICsgcHJlZml4X3N6KTsKKworCQkvKiBTZXQg dXAgY3VyclR1cGxlcyBwb2ludGVyIGZvciBpbmRleC1vbmx5IHNjYW5zICovCisJCWlmIChzY2Fu LT54c193YW50X2l0dXAgJiYgc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA+IDApCisJCXsK KwkJCVNpemUJCWl0ZW1zRW5kID0gTUFYQUxJR04oYmFzZV9zeik7CisJCQlTaXplCQl0YWJsZVRy YWlsaW5nID0gMDsKKworCQkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCAmJgorCQkJCXNjYW4tPnhz X2hlYXBmZXRjaC0+YmF0Y2hfcGVyX2l0ZW1fc2l6ZSA+IDApCisJCQkJdGFibGVUcmFpbGluZyA9 IE1BWEFMSUdOKHNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hfcGVyX2l0ZW1fc2l6ZSAqCisJCQkJ CQkJCQkJIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJYmF0Y2gtPmN1cnJUdXBsZXMgPSAoY2hh ciAqKSBiYXRjaCArIGl0ZW1zRW5kICsgdGFibGVUcmFpbGluZzsKKwkJfQorCQllbHNlCisJCQli YXRjaC0+Y3VyclR1cGxlcyA9IE5VTEw7CisKKwkJLyoKKwkJICogQmF0Y2hlcyBhbGxvY2F0ZSBk ZWFkSXRlbXMgbGF6aWx5ICh0aG91Z2ggbm90ZSB0aGF0IGNhY2hlZCBiYXRjaGVzCisJCSAqIGtl ZXAgdGhlaXIgZGVhZEl0ZW1zIGFsbG9jYXRpb24gd2hlbiByZWN5Y2xlZCkKKwkJICovCisJCWJh dGNoLT5kZWFkSXRlbXMgPSBOVUxMOworCQluZXdfYWxsb2MgPSB0cnVlOworCX0KKworCS8qIHhz X3dhbnRfaXR1cCBzY2FucyBtdXN0IGdldCBhIGN1cnJUdXBsZXMgc3BhY2UgKi8KKwlBc3NlcnQo IShzY2FuLT54c193YW50X2l0dXAgJiYgc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA+IDAg JiYKKwkJCSBiYXRjaC0+Y3VyclR1cGxlcyA9PSBOVUxMKSk7CisKKwkvKiBMZXQgdGhlIHRhYmxl IEFNIGluaXRpYWxpemUgaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSAqLworCWlmIChzY2FuLT54 c19oZWFwZmV0Y2gpCisJCXRhYmxlX2luZGV4X2JhdGNoX2luaXQoc2NhbiwgYmF0Y2gsIG5ld19h bGxvYyk7CisKKwkvKiBzaGFyZWQgaW5pdGlhbGl6YXRpb24gKi8KKwliYXRjaC0+a25vd25FbmRC YWNrd2FyZCA9IGZhbHNlOworCWJhdGNoLT5rbm93bkVuZEZvcndhcmQgPSBmYWxzZTsKKwliYXRj aC0+Zmlyc3RJdGVtID0gLTE7CisJYmF0Y2gtPmxhc3RJdGVtID0gLTE7CisJYmF0Y2gtPm51bURl YWQgPSAwOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogUmVsZWFzZSBhbGxvY2F0ZWQg YmF0Y2gKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpbmRleCBBTXMgdG8gcmVs ZWFzZSBhIGJhdGNoIGFsbG9jYXRlZCBieQorICogaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jLiAg QmF0Y2hlcyBhcmUgY2FjaGVkIGhlcmUgZm9yIHJldXNlICh3aGVuIHNjYW4KKyAqIGhhc24ndCBh bHJlYWR5IGZpbmlzaGVkKSB0byByZWR1Y2UgcGFsbG9jL3BmcmVlIG92ZXJoZWFkLgorICoKKyAq IEl0J3Mgc2FmZSB0byByZWxlYXNlIGEgYmF0Y2ggaW1tZWRpYXRlbHkgd2hlbiBpdCB3YXMgdXNl ZCB0byByZWFkIGEgcGFnZQorICogdGhhdCByZXR1cm5lZCBubyBtYXRjaGVzIHRvIHRoZSBzY2Fu LiAgQmF0Y2hlcyBhY3R1YWxseSByZXR1cm5lZCBieSBpbmRleAorICogQU0ncyBhbWdldGJhdGNo IHJvdXRpbmUgKGkuZS4gYmF0Y2hlcyBmb3IgcGFnZXMgd2l0aCBvbmUgb3IgbW9yZSBtYXRjaGVz KQorICogbXVzdCBiZSByZWxlYXNlZCBieSB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaCwgd2hpY2gg Y2FsbHMgaGVyZSBhZnRlciB0aGUKKyAqIGluZGV4IEFNJ3MgYW1raWxsaXRlbXNiYXRjaCByb3V0 aW5lIChpZiBhbnkpLiAgSW5kZXggQU1zIHRoYXQgdXNlIGJhdGNoZXMKKyAqIHNob3VsZCBjYWxs IGhlcmUgdG8gcmVsZWFzZSBhIGJhdGNoIGZyb20gdGhlaXIgYW1nZXRiYXRjaCBvciBhbWdldGJp dG1hcAorICogcm91dGluZXMuCisgKgorICogVGhlIHJ1bGVzIGZvciBiYXRjaCBvd25lcnNoaXAg ZGlmZmVyIHNsaWdodGx5IGZvciBhbWdldGJpdG1hcCBzY2Fuczsgc2VlCisgKiB0aGUgYW1nZXRi aXRtYXAgZG9jdW1lbnRhdGlvbiBpbiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGZvciBkZXRh aWxzLgorICovCit2b2lkCitpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcp CisJeworCQkvKiBhbWdldGJhdGNoIHNjYW4gY2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFw UmVsYXRpb24gIT0gTlVMTCk7CisKKwkJaWYgKHNjYW4tPmJhdGNocmluZ2J1Zi5kb25lKQorCQl7 CisJCQkvKiBEb24ndCBib3RoZXIgdXNpbmcgY2FjaGUgd2hlbiBzY2FuIGlzIGVuZGluZyAqLwor CQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFVzZSBjYWNoZS4gIFRoaXMgaXMgZ2VuZXJh bGx5IG9ubHkgYmVuZWZpY2lhbCB3aGVuIHRoZXJlIGFyZQorCQkJICogbWFueSBzbWFsbCByZXNj YW5zIG9mIGFuIGluZGV4LgorCQkJICovCisJCQlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1ND QU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCQkJeworCQkJCWlmIChzY2FuLT5iYXRjaHJpbmdidWYu Y2FjaGVbaV0gPT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qIGZvdW5kIGVtcHR5IHNsb3QsIHdlJ3Jl IGRvbmUgKi8KKwkJCQkJc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ldID0gYmF0Y2g7CisJCQkJ CXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBGYWlsZWQgdG8gZmluZCBh IGZyZWUgc2xvdCBmb3IgdGhpcyBiYXRjaC4gIFdlJ2xsIGp1c3QgZnJlZSBpdAorCQkgKiBvdXJz ZWx2ZXMuICBUaGlzIGlzbid0IHJlYWxseSBleHBlY3RlZDsgaXQncyBqdXN0IGRlZmVuc2l2ZS4K KwkJICovCisJCWlmIChiYXRjaC0+ZGVhZEl0ZW1zKQorCQkJcGZyZWUoYmF0Y2gtPmRlYWRJdGVt cyk7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIGFtZ2V0Yml0bWFwIHNjYW4gY2FsbGVyLgor CQkgKgorCQkgKiBhbWdldGJpdG1hcCByb3V0aW5lcyBhcmUgcmVxdWlyZWQgdG8gYWxsb2NhdGUg bm8gbW9yZSB0aGFuIG9uZQorCQkgKiBiYXRjaCBhdCBhIHRpbWUsIHNvIHdlJ2xsIGFsd2F5cyBo YXZlIGEgZnJlZSBzbG90LgorCQkgKi8KKwkJQXNzZXJ0KHNjYW4tPnhzX2JpdG1hcF9iYXRjaCA9 PSBOVUxMKTsKKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsKKwkJQXNzZXJ0 KGJhdGNoLT5kZWFkSXRlbXMgPT0gTlVMTCk7CisJCUFzc2VydChiYXRjaC0+Y3VyclR1cGxlcyA9 PSBOVUxMKTsKKworCQlzY2FuLT54c19iaXRtYXBfYmF0Y2ggPSBiYXRjaDsKKwkJcmV0dXJuOwor CX0KKworCS8qIG5vIGZyZWUgc2xvdCB0byBzYXZlIHRoaXMgYmF0Y2ggKGV4cGVjdGVkIHdpdGgg YW1nZXRiaXRtYXAgY2FsbGVycykgKi8KKwlwZnJlZShiYXRjaF9hbGxvY19iYXNlKGJhdGNoLCBz Y2FuKSk7Cit9CisKKy8qCisgKiBxc29ydCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBpbnQgYXJy YXlzCisgKi8KK3N0YXRpYyBpbnQKK2JhdGNoX2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBj b25zdCB2b2lkICp2YikKK3sKKwlpbnQJCQlhID0gKigoY29uc3QgaW50ICopIHZhKTsKKwlpbnQJ CQliID0gKigoY29uc3QgaW50ICopIHZiKTsKKworCXJldHVybiBwZ19jbXBfczMyKGEsIGIpOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCmluZGV4IGRhNjRjYjU5NS4uODNkZmEz ZjJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCkBAIC01LDQgKzUsNSBAQCBi YWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdhbXZhbGlkYXRlLmMnLAogICAnZ2VuYW0uYycs CiAgICdpbmRleGFtLmMnLAorICAnaW5kZXhiYXRjaC5jJywKICkKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9S RUFETUUKaW5kZXggY2I5MjFjYTJlLi5lNzU1NzdhN2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVB RE1FCkBAIC0xNzksMTggKzE3OSwyMSBAQCBob2xkIG9uIHRvIHRoZSBwaW4gKHVzZWQgd2hlbiBy ZWFkaW5nIGZyb20gdGhlIGxlYWYgcGFnZSkgdW50aWwgX2FmdGVyXwogdGhleSdyZSBkb25lIHZp c2l0aW5nIHRoZSBoZWFwIChmb3IgVElEcyBmcm9tIHBpbm5lZCBsZWFmIHBhZ2UpIHByZXZlbnRz CiBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuICBWQUNVVU0gY2Fubm90IGdldCBhIGNvbmZsaWN0 aW5nIGNsZWFudXAgbG9jawogdW50aWwgdGhlIGluZGV4IHNjYW4gaXMgdG90YWxseSBmaW5pc2hl ZCBwcm9jZXNzaW5nIGl0cyBsZWFmIHBhZ2UuCitOb3RlIHRoYXQgdGhlIHRhYmxlIEFNIGRldGVy bWluZXMgd2hlbiBhbmQgd2hlcmUgaW5kZXggcGFnZSBwaW5zIGFyZQorZHJvcHBlZC4gIFRoaXMg aXMgcmVxdWlyZWQgYnkgYW55IGluZGV4IEFNIHRoYXQgaW1wbGVtZW50cyB0aGUgYW1nZXRiYXRj aAoraW50ZXJmYWNlLiAgKFNlZSBhbHNvLCBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sKS4KIAot VGhpcyBhcHByb2FjaCBpcyBmYWlybHkgY29hcnNlLCBzbyB3ZSBhdm9pZCBpdCB3aGVuZXZlciBw b3NzaWJsZS4gIEluCi1wcmFjdGljZSBtb3N0IGluZGV4IHNjYW5zIHdvbid0IGhvbGQgb250byB0 aGVpciBwaW4sIGFuZCBzbyB3b24ndCBibG9jawotVkFDVVVNLiAgVGhlc2UgaW5kZXggc2NhbnMg bXVzdCBkZWFsIHdpdGggVElEIHJlY3ljbGluZyBkaXJlY3RseSwgd2hpY2ggaXMKLW1vcmUgY29t cGxpY2F0ZWQgYW5kIG5vdCBhbHdheXMgcG9zc2libGUuICBTZWUgbGF0ZXIgc2VjdGlvbiBvbiBt YWtpbmcKLWNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgorQmxvY2tpbmcgVkFDVVVNIGxp a2UgdGhpcyBjYW4gYmUgZGlzcnVwdGl2ZSwgc28gdGFibGUgQU1zIGF2b2lkIGl0IHdoZW5ldmVy Citwb3NzaWJsZS4gIFRoZSBoZWFwIHRhYmxlIEFNIHVzdWFsbHkgZHJvcHMgbGVhZiBwYWdlIHBp bnMgcmlnaHQgYXdheSwgdGhvdWdoCitub3QgZHVyaW5nIHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1W Q0Mgc25hcHNob3QuICBJbmRleC1vbmx5IHNjYW5zIG1heSBhbHNvCityZXRhaW4gcGlucyBpbiBz b21lIGNhc2VzLgogCi1PcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0aW9uIHBlcmZvcm1z IGFsbW9zdCB0aGUgc2FtZSBwYWdlLWxldmVsCi1tb2RpZmljYXRpb25zIHdoaWxlIG9ubHkgaG9s ZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMgc2FmZSBiZWNhdXNlCi10aGVyZSBpcyBu byBxdWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRha2luZyBwbGFjZSBsYXRlciBvbiAtLSBvbmx5 IFZBQ1VVTQotY2FuIG1ha2UgVElEcyByZWN5Y2xhYmxlLiAgU2VlIGFsc28gc2ltcGxlIGRlbGV0 aW9uIGFuZCBib3R0b20tdXAKLWRlbGV0aW9uLCBiZWxvdy4KK09wcG9ydHVuaXN0aWMgaW5kZXgg dHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgdGhlIHNhbWUgcGFnZS1sZXZlbAorbW9kaWZpY2F0aW9u cyBhcyBWQUNVVU0sIHdoaWxlIG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMg aXMKK3NhZmUgYmVjYXVzZSB0aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRh a2luZyBwbGFjZSAtLSBvbmx5CitWQUNVVU0gY2FuIG1ha2UgVElEcyByZWN5Y2xhYmxlLiAgSW4g b3RoZXIgd29yZHMsIFZBQ1VVTSdzIGNsZWFudXAgbG9jaworc2VydmVzIHRvIHByb3RlY3Qgbm9u LU1WQ0Mgc25hcHNob3Qgc2NhbnMgZnJvbSBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcKK2hhemFy ZHM7IGl0IGRvZXNuJ3QgcHJvdGVjdCB0aGUgQi1UcmVlIHN0cnVjdHVyZSBpdHNlbGYuCiAKIEJl Y2F1c2UgYSBwaW4gaXMgbm90IGFsd2F5cyBoZWxkLCBhbmQgYSBwYWdlIGNhbiBiZSBzcGxpdCBl dmVuIHdoaWxlCiBzb21lb25lIGRvZXMgaG9sZCBhIHBpbiBvbiBpdCwgaXQgaXMgcG9zc2libGUg dGhhdCBhbiBpbmRleHNjYW4gd2lsbApAQCAtNDQ0LDQ0ICs0NDcsMjUgQEAgTWFraW5nIGNvbmN1 cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIAogQXMgZXhwbGFpbmVkIGluIHRoZSBlYXJsaWVyIHNlY3Rpb24gYWJvdXQgZGVsZXRp bmcgaW5kZXggdHVwbGVzIGR1cmluZwotVkFDVVVNLCB3ZSBpbXBsZW1lbnQgYSBsb2NraW5nIHBy b3RvY29sIHRoYXQgYWxsb3dzIGluZGl2aWR1YWwgaW5kZXggc2NhbnMKLXRvIGF2b2lkIGNvbmN1 cnJlbnQgVElEIHJlY3ljbGluZy4gIEluZGV4IHNjYW5zIG9wdC1vdXQgKGFuZCBzbyBkcm9wIHRo ZWlyCi1sZWFmIHBhZ2UgcGluIHdoZW4gdmlzaXRpbmcgdGhlIGhlYXApIHdoZW5ldmVyIGl0J3Mg c2FmZSB0byBkbyBzbywgdGhvdWdoLgotRHJvcHBpbmcgdGhlIHBpbiBlYXJseSBpcyB1c2VmdWwg YmVjYXVzZSBpdCBhdm9pZHMgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkKLVZBQ1VVTS4gIFRoaXMgaXMg cGFydGljdWxhcmx5IGltcG9ydGFudCB3aXRoIGluZGV4IHNjYW5zIHVzZWQgYnkgY3Vyc29ycywK LXNpbmNlIGlkbGUgY3Vyc29ycyBzb21ldGltZXMgc3RvcCBmb3IgcmVsYXRpdmVseSBsb25nIHBl cmlvZHMgb2YgdGltZS4gIEluCi1leHRyZW1lIGNhc2VzLCBhIGNsaWVudCBhcHBsaWNhdGlvbiBt YXkgaG9sZCBvbiB0byBhbiBpZGxlIGN1cnNvcnMgZm9yCi1ob3VycyBvciBldmVuIGRheXMuICBC bG9ja2luZyBWQUNVVU0gZm9yIHRoYXQgbG9uZyBjb3VsZCBiZSBkaXNhc3Ryb3VzLgorVkFDVVVN LCB3ZSBpbXBsZW1lbnQgYSBsb2NraW5nIHByb3RvY29sIHRoYXQgaGVscHMgdGFibGUgQU1zIGRl YWwgd2l0aCBUSUQKK3JlY3ljbGluZyBoYXphcmRzIGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5v bi1NVkNDIHNuYXBzaG90LgogCiBJbmRleCBzY2FucyB0aGF0IGRvbid0IGhvbGQgb24gdG8gYSBi dWZmZXIgcGluIGFyZSBwcm90ZWN0ZWQgYnkgaG9sZGluZyBhbgogTVZDQyBzbmFwc2hvdCBpbnN0 ZWFkLiAgVGhpcyBtb3JlIGxpbWl0ZWQgaW50ZXJsb2NrIHByZXZlbnRzIHdyb25nIGFuc3dlcnMK IHRvIHF1ZXJpZXMsIGJ1dCBpdCBkb2VzIG5vdCBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3lj bGluZyBpdHNlbGYgKG9ubHkKIGhvbGRpbmcgb250byB0aGUgbGVhZiBwYWdlIHBpbiB3aGlsZSBh Y2Nlc3NpbmcgdGhlIGhlYXAgZW5zdXJlcyB0aGF0KS4KK0ZvciB0aGUgbW9zdCBwYXJ0LCBpdCBp cyB1cCB0byB0aGUgdGFibGUgQU0gdG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElECityZWN5Y2xp bmcgaGF6YXJkcy4gIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGRpcmVjdGx5IGNvbnNpZGVyIHN1Y2gg aGF6YXJkcyB3aGVuCittYXJraW5nIGEga25vd24tZGVhZCBpbmRleCB0dXBsZSBMUF9ERUFELgog Ci1JbmRleC1vbmx5IHNjYW5zIGNhbiBuZXZlciBkcm9wIHRoZWlyIGJ1ZmZlciBwaW4sIHNpbmNl IHRoZXkgYXJlIHVuYWJsZSB0bwotdG9sZXJhdGUgaGF2aW5nIGEgcmVmZXJlbmNlZCBUSUQgYmVj b21lIHJlY3ljbGFibGUuICBJbmRleC1vbmx5IHNjYW5zCi10eXBpY2FsbHkganVzdCB2aXNpdCB0 aGUgdmlzaWJpbGl0eSBtYXAgKG5vdCB0aGUgaGVhcCBwcm9wZXIpLCBhbmQgc28gd2lsbAotbm90 IHJlbGlhYmx5IG5vdGljZSB0aGF0IGFueSBzdGFsZSBUSUQgcmVmZXJlbmNlIChmb3IgYSBUSUQg dGhhdCBwb2ludGVkCi10byBhIGRlYWQtdG8tYWxsIGhlYXAgaXRlbSBhdCBmaXJzdCkgd2FzIGNv bmN1cnJlbnRseSBtYXJrZWQgTFBfVU5VU0VEIGluCi10aGUgaGVhcCBieSBWQUNVVU0uICBUaGlz IGNvdWxkIGVhc2lseSBhbGxvdyBWQUNVVU0gdG8gc2V0IHRoZSB3aG9sZSBoZWFwCi1wYWdlIHRv IGFsbC12aXNpYmxlIGluIHRoZSB2aXNpYmlsaXR5IG1hcCBpbW1lZGlhdGVseSBhZnRlcndhcmRz LiAgQW4gTVZDQwotc25hcHNob3QgaXMgb25seSBzdWZmaWNpZW50IHRvIGF2b2lkIHByb2JsZW1z IGR1cmluZyBwbGFpbiBpbmRleCBzY2FucwotYmVjYXVzZSB0aGV5IG11c3QgYWNjZXNzIGdyYW51 bGFyIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gZnJvbSB0aGUgaGVhcAotcHJvcGVyLiAgQSBwbGFp biBpbmRleCBzY2FuIHdpbGwgZXZlbiByZWNvZ25pemUgTFBfVU5VU0VEIGl0ZW1zIGluIHRoZQot aGVhcCAoaXRlbXMgdGhhdCBjb3VsZCBiZSByZWN5Y2xlZCBidXQgaGF2ZW4ndCBiZWVuIGp1c3Qg eWV0KSBhcyAibm90Ci12aXNpYmxlIiAtLSBldmVuIHdoZW4gdGhlIGhlYXAgcGFnZSBpcyBnZW5l cmFsbHkgY29uc2lkZXJlZCBhbGwtdmlzaWJsZS4KLQotTFBfREVBRCBzZXR0aW5nIG9mIGluZGV4 IHR1cGxlcyBieSB0aGUga2lsbF9wcmlvcl90dXBsZSBvcHRpbWl6YXRpb24KLShkZXNjcmliZWQg aW4gZnVsbCBpbiBzaW1wbGUgZGVsZXRpb24sIGJlbG93KSBpcyBhbHNvIG1vcmUgY29tcGxpY2F0 ZWQgZm9yCi1pbmRleCBzY2FucyB0aGF0IGRyb3AgdGhlaXIgbGVhZiBwYWdlIHBpbnMuICBXZSBt dXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQKLUxQX0RFQUQtbWFya2luZyBhbnkgbmV3IGluZGV4IHR1 cGxlIHRoYXQgbG9va3MgbGlrZSBhIGtub3duLWRlYWQgaW5kZXgKLXR1cGxlIGJlY2F1c2UgaXQg aGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBUSUQsIGZvbGxvd2luZyBjb25jdXJyZW50IFRJRAot cmVjeWNsaW5nLiAgSXQncyBqdXN0IGFib3V0IHBvc3NpYmxlIHRoYXQgc29tZSBvdGhlciBzZXNz aW9uIGluc2VydGVkIGEKLW5ldywgdW5yZWxhdGVkIGluZGV4IHR1cGxlLCBvbiB0aGUgc2FtZSBs ZWFmIHBhZ2UsIHdoaWNoIGhhcyB0aGUgc2FtZQotb3JpZ2luYWwgVElELiAgSXQgd291bGQgYmUg dG90YWxseSB3cm9uZyB0byBMUF9ERUFELXNldCB0aGlzIG5ldywKK1dlIG11c3QgYXZvaWQgTFBf REVBRC1tYXJraW5nIGFueSBuZXcgaW5kZXggdHVwbGUgdGhhdCBsb29rcyBsaWtlIGEKK2tub3du LWRlYWQgaW5kZXggdHVwbGUgYmVjYXVzZSBpdCBoYXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIFRJ RCwgZm9sbG93aW5nCitjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuICBJdCdzIGp1c3QgYWJvdXQg cG9zc2libGUgdGhhdCBzb21lIG90aGVyIHNlc3Npb24KK2luc2VydGVkIGEgbmV3LCB1bnJlbGF0 ZWQgaW5kZXggdHVwbGUsIG9uIHRoZSBzYW1lIGxlYWYgcGFnZSwgd2hpY2ggaGFzIHRoZQorc2Ft ZSBvcmlnaW5hbCBUSUQuICBJdCB3b3VsZCBiZSB0b3RhbGx5IHdyb25nIHRvIExQX0RFQUQtc2V0 IHRoaXMgbmV3LAogdW5yZWxhdGVkIGluZGV4IHR1cGxlLgogCi1XZSBoYW5kbGUgdGhpcyBraWxs X3ByaW9yX3R1cGxlIHJhY2UgY29uZGl0aW9uIGJ5IGhhdmluZyBhZmZlY3RlZCBpbmRleAorV2Ug aGFuZGxlIHRoaXMgTFBfREVBRCBzZXR0aW5nIHJhY2UgY29uZGl0aW9uIGJ5IGhhdmluZyBhbGwg aW5kZXgKIHNjYW5zIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBjaGFuZ2UgdG8gdGhl IGxlYWYgcGFnZSBhdCBhbGwKIGltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hlZCBieSBidGJ1bGtk ZWxldGUgaW4gdGhlIGludGVyaW0gcGVyaW9kIHdoZW4gbm8KIGJ1ZmZlciBwaW4gd2FzIGhlbGQu ICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9ERUFEIGJpdHMKQEAg LTczNCw3ICs3MTgsNyBAQCBvZiByZWFkZXJzIGNvdWxkIHN0aWxsIG1vdmUgcmlnaHQgdG8gcmVj b3ZlciBpZiB3ZSBkaWRuJ3QgY291cGxlCiBzYW1lLWxldmVsIGxvY2tzKSwgYnV0IHdlIHByZWZl ciB0byBiZSBjb25zZXJ2YXRpdmUgaGVyZS4KIAogRHVyaW5nIHJlY292ZXJ5IGFsbCBpbmRleCBz Y2FucyBzdGFydCB3aXRoIGlnbm9yZV9raWxsZWRfdHVwbGVzID0gZmFsc2UKLWFuZCB3ZSBuZXZl ciBzZXQga2lsbF9wcmlvcl90dXBsZS4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1p bgorYW5kIHdlIG5ldmVyIExQX0RFQUQtbWFyayB0dXBsZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSB0 aGUgb2xkZXN0IHhtaW4KIG9uIHRoZSBzdGFuZGJ5IHNlcnZlciBjYW4gYmUgb2xkZXIgdGhhbiB0 aGUgb2xkZXN0IHhtaW4gb24gdGhlIHByaW1hcnkKIHNlcnZlciwgd2hpY2ggbWVhbnMgdHVwbGVz IGNhbiBiZSBtYXJrZWQgTFBfREVBRCBldmVuIHdoZW4gdGhleSBhcmUKIHN0aWxsIHZpc2libGUg b24gdGhlIHN0YW5kYnkuIFdlIGRvbid0IFdBTCBsb2cgdHVwbGUgTFBfREVBRCBiaXRzLCBidXQK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggY2M5YzQ1ZGM0Li5jNGZmNmRlMmIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0xMDM3LDYgKzEwMzcsOSBAQCBf YnRfcmVsYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKICAqIExvY2sgaXMgYWNxdWlyZWQg d2l0aG91dCBhY3F1aXJpbmcgYW5vdGhlciBwaW4uICBUaGlzIGlzIGxpa2UgYSByYXcKICAqIExv Y2tCdWZmZXIoKSBjYWxsLCBidXQgcGVyZm9ybXMgZXh0cmEgc3RlcHMgbmVlZGVkIGJ5IFZhbGdy aW5kLgogICoKKyAqIE5vdGU6IF9idF9iYXRjaF91bmxvY2sgaW4gbmJ0c2VhcmNoLmMgKGluZGV4 YW1fdXRpbF9iYXRjaF91bmxvY2sgd3JhcHBlcgorICogZnVuY3Rpb24pIGhhcyBtYXRjaGluZyBW YWxncmluZCBidWZmZXIgbG9jayBpbnN0cnVtZW50YXRpb24uCisgKgogICogTm90ZTogQ2FsbGVy IG1heSBuZWVkIHRvIGNhbGwgX2J0X2NoZWNrcGFnZSgpIHdpdGggYnVmIHdoZW4gcGluIG9uIGJ1 ZgogICogd2Fzbid0IG9yaWdpbmFsbHkgYWNxdWlyZWQgaW4gX2J0X2dldGJ1ZigpIG9yIF9idF9y ZWxhbmRnZXRidWYoKS4KICAqLwpAQCAtMTA3OCwxMyArMTA4MSwxOSBAQCBfYnRfdW5sb2NrYnVm KFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIAkgKiBCdWZmZXIgaXMgcGlubmVkIGFuZCBsb2Nr ZWQsIHdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgZXhwZWN0ZWQgdG8gYmUKIAkgKiBkZWZpbmVkIGFu ZCBhZGRyZXNzYWJsZS4gIENoZWNrIHRoYXQgcHJvYWN0aXZlbHkuCiAJICovCi0JVkFMR1JJTkRf Q0hFQ0tfTUVNX0lTX0RFRklORUQoQnVmZmVyR2V0UGFnZShidWYpLCBCTENLU1opOworI2lmIGRl ZmluZWQoVVNFX1ZBTEdSSU5EKQorCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CisK KwlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChwYWdlLCBCTENLU1opOworI2VuZGlmCiAK IAkvKiBMb2NrQnVmZmVyKCkgYXNzZXJ0cyB0aGF0IHBpbiBpcyBoZWxkIGJ5IHRoaXMgYmFja2Vu ZCAqLwogCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwogCisjaWYgZGVmaW5l ZChVU0VfVkFMR1JJTkQpCiAJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMocmVsKSkKLQkJ VkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShidWYpLCBCTENLU1opOwor CQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhwYWdlLCBCTENLU1opOworI2VuZGlmCiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKaW5kZXggMmJhMWNhNjYw Li40M2ZjNjc2MjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVh ZHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKQEAg LTMyLDYgKzMyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRSZWFkUGFnZVN0YXRlCiB7CiAJLyogSW5w dXQgcGFyYW1ldGVycywgc2V0IGJ5IF9idF9yZWFkcGFnZSBmb3IgX2J0X2NoZWNra2V5cyAqLwog CVNjYW5EaXJlY3Rpb24gZGlyOwkJCS8qIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gKi8KKwlCbG9j a051bWJlciBjdXJycGFnZTsJCS8qIGN1cnJlbnQgcGFnZSBiZWluZyByZWFkICovCiAJT2Zmc2V0 TnVtYmVyIG1pbm9mZjsJCS8qIExvd2VzdCBub24tcGl2b3QgdHVwbGUncyBvZmZzZXQgKi8KIAlP ZmZzZXROdW1iZXIgbWF4b2ZmOwkJLyogSGlnaGVzdCBub24tcGl2b3QgdHVwbGUncyBvZmZzZXQg Ki8KIAlJbmRleFR1cGxlCWZpbmFsdHVwOwkJLyogTmVlZGVkIGJ5IHNjYW5zIHdpdGggYXJyYXkg a2V5cyAqLwpAQCAtNjMsMTQgKzY0LDEzIEBAIHN0YXRpYyBib29sIF9idF9zY2FuYmVoaW5kX2No ZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJCQkJCQkJ IEluZGV4VHVwbGUgZmluYWx0dXApOwogc3RhdGljIGJvb2wgX2J0X29wcG9kaXJfY2hlY2trZXlz KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCSAgSW5kZXhU dXBsZSBmaW5hbHR1cCk7Ci1zdGF0aWMgdm9pZCBfYnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVlIHNv LCBpbnQgaXRlbUluZGV4LAotCQkJCQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUg aXR1cCk7Ci1zdGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUgc28s IGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRl bVBvaW50ZXJEYXRhICpoZWFwVGlkLAotCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0 aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBp dGVtSW5kZXgsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCQkJICAg SXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KTsKK3N0YXRpYyB2b2lkIF9idF9z YXZlaXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVt YmVyIG9mZm51bSwKKwkJCQkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOwor c3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gs IGludCBpdGVtSW5kZXgsCisJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRl bVBvaW50ZXJEYXRhICp0YWJsZVRpZCwKKwkJCQkJCQkJICBJbmRleFR1cGxlIGl0dXAsIGludCAq dHVwbGVPZmZzZXQpOworc3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGluZ2l0ZW0oSW5k ZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0s CisJCQkJCQkJCQkgICBJdGVtUG9pbnRlciB0YWJsZVRpZCwgaW50IGJhc2VPZmZzZXQpOwogc3Rh dGljIGJvb2wgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0 ZSAqcHN0YXRlLCBib29sIGFycmF5S2V5cywKIAkJCQkJCSAgSW5kZXhUdXBsZSB0dXBsZSwgaW50 IHR1cG5hdHRzKTsKIHN0YXRpYyBib29sIF9idF9jaGVja19jb21wYXJlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCkBAIC0xMTEsMTUgKzExMSwxNSBAQCBzdGF0aWMgYm9v bCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAog CiAvKgotICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBw YWdlIGludG8gc28tPmN1cnJQb3MKKyAqCV9idF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9t IGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIG5ld2JhdGNoLgogICoKLSAqIENhbGxlciBtdXN0IGhh dmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBzby0+Y3VyclBvcy5idWY7IHRoZSBidWZmZXIncyBz dGF0ZQotICogaXMgbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIGN1cnJQb3MubW9yZUxlZnQgYW5k IG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOwotICogdGhleSBhcmUgdXBkYXRlZCBhcyBhcHByb3By aWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2Ygc28tPmN1cnJQb3MgYXJlCisgKiBDYWxsZXIgbXVz dCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQgbmV3YmF0Y2guYnVmOyB0aGUgYnVmZmVyJ3Mg c3RhdGUgaXMKKyAqIG5vdCBjaGFuZ2VkIGhlcmUuICBBbHNvLCBuZXdiYXRjaCdzIG1vcmVMZWZ0 IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsKKyAqIHRoZXkgYXJlIHVwZGF0ZWQgYXMgYXBw cm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9mIG5ld2JhdGNoIGFyZQogICogaW5pdGlhbGl6 ZWQgZnJvbSBzY3JhdGNoIGhlcmUuCiAgKgogICogV2Ugc2NhbiB0aGUgY3VycmVudCBwYWdlIHN0 YXJ0aW5nIGF0IG9mZm51bSBhbmQgbW92aW5nIGluIHRoZSBpbmRpY2F0ZWQKLSAqIGRpcmVjdGlv bi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFyZSBsb2FkZWQgaW50byBjdXJy UG9zLml0ZW1zLgorICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtl eXMgYXJlIHNhdmVkIGluIG5ld2JhdGNoLml0ZW1zLgogICogbW9yZUxlZnQgb3IgbW9yZVJpZ2h0 IChhcyBhcHByb3ByaWF0ZSkgaXMgY2xlYXJlZCBpZiBfYnRfY2hlY2trZXlzIHJlcG9ydHMKICAq IHRoYXQgdGhlcmUgY2FuIGJlIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50 IHNjYW4gZGlyZWN0aW9uCiAgKiAoY291bGQganVzdCBiZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0 aXZlIGluZGV4IHNjYW4gd2hlbiBzY2FuIGhhcyBhcnJheXMpLgpAQCAtMTMxLDExICsxMzEsMTIg QEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlrZXlzKEluZGV4U2NhbkRl c2Mgc2Nhbik7CiAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGZvdW5kIG9u IHRoZSBwYWdlLCBmYWxzZSBpZiBub25lLgogICovCiBib29sCi1fYnRfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJ CSBib29sIGZpcnN0cGFnZSkKK19idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIG5ld2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCSBPZmZzZXROdW1iZXIg b2ZmbnVtLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJl bGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK KwlCVEJhdGNoRGF0YSAqYnRuZXdiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKG5ld2JhdGNoKTsKIAlQ YWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsK QEAgLTE0NCwyMyArMTQ1LDIwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCWJvb2wJCWFycmF5S2V5cywK IAkJCQlpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzOwog CWludAkJCWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9mZnNldCA9IDAsCiAJCQkJaW5kbmF0dHM7CiAK IAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIsIGFsb25nIHdpdGggaXRzIHNp YmxpbmcgbGlua3MgKi8KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOwor CXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0bmV3YmF0Y2gtPmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdl R2V0T3BhcXVlKHBhZ2UpOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tO dW1iZXIoc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IG9wYXF1ZS0+ YnRwb19wcmV2OwotCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7Ci0J LyogZGVsYXkgc2V0dGluZyBzby0+Y3VyclBvcy5sc24gdW50aWwgX2J0X2Ryb3BfbG9ja19hbmRf bWF5YmVfcGluICovCi0JcHN0YXRlLmRpciA9IHNvLT5jdXJyUG9zLmRpciA9IGRpcjsKLQlzby0+ Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgPSAwOworCXBzdGF0ZS5jdXJycGFnZSA9IGJ0bmV3YmF0 Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnRuZXdiYXRjaC0+YnVmKTsKKwli dG5ld2JhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2OworCWJ0bmV3YmF0Y2gtPm5l eHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7CisJcHN0YXRlLmRpciA9IG5ld2JhdGNoLT5kaXIg PSBkaXI7CiAKIAkvKiBlaXRoZXIgbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0IHNob3VsZCBiZSBzZXQg bm93IChtYXkgYmUgdW5zZXQgbGF0ZXIpICovCi0JQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSA/IHNvLT5jdXJyUG9zLm1vcmVSaWdodCA6Ci0JCSAgIHNvLT5jdXJyUG9zLm1vcmVM ZWZ0KTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8gYnRuZXdiYXRjaC0+ bW9yZVJpZ2h0IDogYnRuZXdiYXRjaC0+bW9yZUxlZnQpOwogCUFzc2VydCghUF9JR05PUkUob3Bh cXVlKSk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7CiAJQXNzZXJ0 KCFzby0+bmVlZFByaW1TY2FuKTsKIAogCS8qIGluaXRpYWxpemUgbG9jYWwgdmFyaWFibGVzICov CkBAIC0xODgsMTQgKzE4NiwxNCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAl7CiAJCS8qIGFsbG93IG5l eHQvcHJldiBwYWdlIHRvIGJlIHJlYWQgYnkgb3RoZXIgd29ya2VyIHdpdGhvdXQgZGVsYXkgKi8K IAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJCV9idF9wYXJhbGxlbF9yZWxl YXNlKHNjYW4sIHNvLT5jdXJyUG9zLm5leHRQYWdlLAotCQkJCQkJCQkgc28tPmN1cnJQb3MuY3Vy clBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2NhbiwgYnRuZXdiYXRjaC0+bmV4dFBh Z2UsCisJCQkJCQkJCSBidG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJCWVsc2UKLQkJCV9idF9wYXJh bGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLnByZXZQYWdlLAotCQkJCQkJCQkgc28tPmN1 cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2NhbiwgYnRuZXdiYXRj aC0+cHJldlBhZ2UsCisJCQkJCQkJCSBidG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJfQogCi0JUHJl ZGljYXRlTG9ja1BhZ2UocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgc2Nhbi0+eHNfc25hcHNo b3QpOworCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgcHN0YXRlLmN1cnJwYWdlLCBzY2FuLT54c19z bmFwc2hvdCk7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsKQEAgLTIx MiwxMSArMjEwLDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0X3NjYW5iZWhpbmRfY2hl Y2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFNjaGVk dWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxsICovCi0JCQkJCXNvLT5j dXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJCQlidG5ld2JhdGNoLT5tb3JlUmlnaHQgPSBm YWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJCWlmIChzY2FuLT5wYXJh bGxlbF9zY2FuKQogCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sCi0J CQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJCQkJCQkJCQkJCSAgIGJ0 bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0KQEAg LTI4MCwyNiArMjc4LDI2IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCWlmICghQlRyZWVUdXBsZUlz UG9zdGluZyhpdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICovCi0JCQkJCV9idF9z YXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCQlfYnRfc2F2ZWl0ZW0o bmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQlp dGVtSW5kZXgrKzsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJaW50CQkJdHVwbGVPZmZz ZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJLyogU2V0IHVwIHBvc3RpbmcgbGlz dCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGZpcnN0IFRJRCkgKi8KLQkJCQkJdHVwbGVPZmZzZXQgPQot CQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJ YmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMobmV3YmF0Y2gsIGl0ZW1J bmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCAw KSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJICBpdHVwLCAmdHVwbGVPZmZzZXQp OwogCQkJCQlpdGVtSW5kZXgrKzsKIAogCQkJCQkvKiBSZW1lbWJlciBhbGwgbGF0ZXIgVElEcyAo bXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgQlRyZWVU dXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCiAJCQkJCXsKLQkJCQkJCV9idF9zYXZlcG9zdGlu Z2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShu ZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0 aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOworCQkJCQkJCQkJCQliYXNl T2Zmc2V0KTsKIAkJCQkJCWl0ZW1JbmRleCsrOwogCQkJCQl9CiAJCQkJfQpAQCAtMzM5LDEyICsz MzcsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCX0KIAogCQlpZiAoIXBzdGF0ZS5jb250aW51ZXNj YW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJCWJ0bmV3YmF0Y2gtPm1v cmVSaWdodCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPD0gTWF4VElEc1BlckJUcmVl UGFnZSk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJ dGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJbmV3 YmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAt IDE7CiAJfQogCWVsc2UKIAl7CkBAIC0zNjEsMTEgKzM1OCwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwK IAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1 cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2Fu IGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJCQli dG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwogCQkJCQlzby0+bmVlZFByaW1TY2FuID0gdHJ1 ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCiAJCQkJCQlfYnRfcGFyYWxsZWxfcHJp bXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkgICBzby0+Y3VyclBvcy5jdXJyUGFn ZSk7CisJCQkJCQkJCQkJCQkJICAgYnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4g ZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtNDY2LDI3ICs0NjMsMjcgQEAgX2J0X3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0s CiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwogCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJ X2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZl aXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJ CQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCXVpbnQxNgkJbml0ZW1zID0gQlRyZWVUdXBsZUdl dE5Qb3N0aW5nKGl0dXApOwotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJYmFz ZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRlIChhbmQgcmVtZW1i ZXIgbGFzdCBUSUQpICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQl0dXBsZU9mZnNldCA9Ci0J CQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQli YXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUlu ZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIG5p dGVtcyAtIDEpLAotCQkJCQkJCQkJCQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBs ZU9mZnNldCk7CiAKIAkJCQkJLyogUmVtZW1iZXIgYWxsIHByaW9yIFRJRHMgKG11c3QgYmUgYXQg bGVhc3Qgb25lKSAqLwogCQkJCQlmb3IgKGludCBpID0gbml0ZW1zIC0gMjsgaSA+PSAwOyBpLS0p CiAJCQkJCXsKIAkJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShz bywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNo LCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0 dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQp OwogCQkJCQl9CiAJCQkJfQogCQkJfQpAQCAtNTAyLDEyICs0OTksMTEgQEAgX2J0X3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZu dW0sCiAJCSAqIGJlIGZvdW5kIHRoZXJlCiAJCSAqLwogCQlpZiAoIXBzdGF0ZS5jb250aW51ZXNj YW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJYnRuZXdiYXRjaC0+bW9y ZUxlZnQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49IDApOwotCQlzby0+Y3VyclBv cy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4VElE c1BlckJUcmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IE1heFRJRHNQZXJC VHJlZVBhZ2UgLSAxOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4OworCQluZXdi YXRjaC0+bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKIAl9CiAKIAkvKgpAQCAt NTI0LDcgKzUyMCw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCSAqLwogCUFzc2VydCghcHN0YXRlLmZv cmNlbm9ucmVxdWlyZWQpOwogCi0JcmV0dXJuIChzby0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28t PmN1cnJQb3MubGFzdEl0ZW0pOworCXJldHVybiAobmV3YmF0Y2gtPmZpcnN0SXRlbSA8PSBuZXdi YXRjaC0+bGFzdEl0ZW0pOwogfQogCiAvKgpAQCAtMTAyNyw5MCArMTAyMyw5MSBAQCBfYnRfb3Bw b2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAly ZXR1cm4gdHJ1ZTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3Mu aXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2gu aXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9idF9zYXZlaXRlbShCVFNjYW5PcGFx dWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBs ZSBpdHVwKQorX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUlu ZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBs ZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVt c1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSAmJiAhQlRy ZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAtPnRf dGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBs ZXMpCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQgPSBpdHVwLT50X3RpZDsK KwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlm IChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJCVNpemUJCWl0dXBzeiA9IEluZGV4VHVwbGVT aXplKGl0dXApOwogCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5leHRU dXBsZU9mZnNldDsKLQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1 cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQg Kz0gTUFYQUxJR04oaXR1cHN6KTsKKwkJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udHVwbGVP ZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJCW1lbWNweShuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0 dXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6KTsKKwkJKnR1cGxlT2Zmc2V0ICs9IE1BWEFMSUdOKGl0 dXBzeik7CiAJfQogfQogCiAvKgogICogU2V0dXAgc3RhdGUgdG8gc2F2ZSBUSURzL2l0ZW1zIGZy b20gYSBzaW5nbGUgcG9zdGluZyBsaXN0IHR1cGxlLgogICoKLSAqIFNhdmVzIGFuIGluZGV4IGl0 ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBUSUQgdGhhdCBpcwotICog cmV0dXJuZWQgdG8gc2NhbiBmaXJzdC4gIFNlY29uZCBvciBzdWJzZXF1ZW50IFRJRHMgZm9yIHBv c3RpbmcgbGlzdCBzaG91bGQKLSAqIGJlIHNhdmVkIGJ5IGNhbGxpbmcgX2J0X3NhdmVwb3N0aW5n aXRlbSgpLgorICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1J bmRleF0gZm9yIFRJRCB0aGF0IGlzIHJldHVybmVkCisgKiB0byBzY2FuIGZpcnN0LiAgU2Vjb25k IG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZCBiZSBzYXZlZAorICog YnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCiAgKgotICogUmV0dXJucyBhbiBvZmZz ZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcyBzdG9yZWQgYXQg aWYKLSAqIG5lZWRlZC4KKyAqIFJldHVybnMgYmFzZU9mZnNldCwgYW4gb2Zmc2V0IGludG8gdHVw bGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1haW4gdHVwbGUgaXMKKyAqIHN0b3JlZCBhdCBpZiBuZWVk ZWQuCiAgKi8KIHN0YXRpYyBpbnQKLV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUg c28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCSAgY29uc3QgSXRl bVBvaW50ZXJEYXRhICpoZWFwVGlkLCBJbmRleFR1cGxlIGl0dXApCitfYnRfc2V0dXBwb3N0aW5n aXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsCisJCQkJCSAgT2Zm c2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0YWJsZVRpZCwKKwkJCQkJ ICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpCiB7Ci0JQlRTY2FuUG9zSXRlbSAq Y3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5n SXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAogCUFzc2VydChCVHJl ZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7 Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwotCWlmIChzby0+Y3VyclR1cGxlcykK KwlpdGVtLT50YWJsZVRpZCA9ICp0YWJsZVRpZDsKKwlpdGVtLT5pbmRleE9mZnNldCA9IG9mZm51 bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJCS8qIFNhdmUgYmFzZSBJbmRl eFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3QpICovCiAJCUluZGV4VHVwbGUJYmFzZTsKIAkJ U2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoaXR1cCk7CiAKIAkJaXR1 cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1 cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQliYXNlID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1 cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7CisJCWl0ZW0tPnR1cGxlT2Zmc2V0 ID0gKnR1cGxlT2Zmc2V0OworCQliYXNlID0gKEluZGV4VHVwbGUpIChuZXdiYXRjaC0+Y3VyclR1 cGxlcyArICp0dXBsZU9mZnNldCk7CiAJCW1lbWNweShiYXNlLCBpdHVwLCBpdHVwc3opOwogCQkv KiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVhIGluZGV4IHR1cGxlIGhlYWRlciBzaXplICov CiAJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0laRV9NQVNLOwogCQliYXNlLT50X2luZm8gfD0g aXR1cHN6OwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgKz0gaXR1cHN6OworCQkqdHVw bGVPZmZzZXQgKz0gaXR1cHN6OwogCi0JCXJldHVybiBjdXJySXRlbS0+dHVwbGVPZmZzZXQ7CisJ CXJldHVybiBpdGVtLT50dXBsZU9mZnNldDsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAq IFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9y IGN1cnJlbnQgcG9zdGluZworICogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRl bXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5nCiAgKiB0dXBsZS4KICAqCiAgKiBBc3N1 bWVzIHRoYXQgX2J0X3NldHVwcG9zdGluZ2l0ZW1zKCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQg Zm9yIGN1cnJlbnQKLSAqIHBvc3RpbmcgbGlzdCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJl dHVybiB2YWx1ZSBhcyB0dXBsZU9mZnNldC4KKyAqIHBvc3RpbmcgbGlzdCB0dXBsZS4gIENhbGxl ciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyBiYXNlT2Zmc2V0LgogICovCiBzdGF0aWMgaW5s aW5lIHZvaWQKLV9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUlu ZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQlJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQg dHVwbGVPZmZzZXQpCitfYnRfc2F2ZXBvc3RpbmdpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNo LCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQlJdGVtUG9pbnRlciB0 YWJsZVRpZCwgaW50IGJhc2VPZmZzZXQpCiB7Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAm c28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbSA9 ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0gKmhl YXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWl0ZW0tPnRhYmxlVGlk ID0gKnRhYmxlVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwogCiAJLyoKIAkgKiBI YXZlIGluZGV4LW9ubHkgc2NhbnMgcmV0dXJuIHRoZSBzYW1lIGJhc2UgSW5kZXhUdXBsZSBmb3Ig ZXZlcnkgVElECiAJICogdGhhdCBvcmlnaW5hdGVzIGZyb20gdGhlIHNhbWUgcG9zdGluZyBsaXN0 CiAJICovCi0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSB0 dXBsZU9mZnNldDsKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMpCisJCWl0ZW0tPnR1cGxlT2Zm c2V0ID0gYmFzZU9mZnNldDsKIH0KIAogI2RlZmluZSBMT09LX0FIRUFEX1JFUVVJUkVEX1JFQ0hF Q0tTIAkzCkBAIC0yODIyLDEzICsyODE5LDEzIEBAIG5ld19wcmltX3NjYW46CiAJICogTm90ZTog V2UgbWFrZSBhIHNvZnQgYXNzdW1wdGlvbiB0aGF0IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9u IHdpbGwKIAkgKiBhbHNvIGJlIHVzZWQgd2l0aGluIF9idF9uZXh0LCB3aGVuIGl0IGlzIGFza2Vk IHRvIHN0ZXAgb2ZmIHRoaXMgcGFnZS4KIAkgKiBJdCBpcyB1cCB0byBfYnRfbmV4dCB0byBjYW5j ZWwgdGhpcyBzY2hlZHVsZWQgcHJpbWl0aXZlIGluZGV4IHNjYW4KLQkgKiB3aGVuZXZlciBpdCBz dGVwcyB0byBhIHBhZ2UgaW4gdGhlIGRpcmVjdGlvbiBvcHBvc2l0ZSBjdXJyUG9zLmRpci4KKwkg KiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhlIGRpcmVjdGlvbiBvcHBvc2l0ZSBw c3RhdGUtPmRpci4KIAkgKi8KIAlwc3RhdGUtPmNvbnRpbnVlc2NhbiA9IGZhbHNlOwkvKiBUZWxs IF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICovCiAJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7 CS8qIC4uLmJ1dCBjYWxsIF9idF9maXJzdCBhZ2FpbiAqLwogCiAJaWYgKHNjYW4tPnBhcmFsbGVs X3NjYW4pCi0JCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBzby0+Y3VyclBv cy5jdXJyUGFnZSk7CisJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBwc3Rh dGUtPmN1cnJwYWdlKTsKIAogCS8qIENhbGxlcidzIHR1cGxlIGRvZXNuJ3QgbWF0Y2ggdGhlIG5l dyBxdWFsICovCiAJcmV0dXJuIGZhbHNlOwpAQCAtMjkxMywxNCArMjkxMCw2IEBAIF9idF9hZHZh bmNlX2FycmF5X2tleXNfaW5jcmVtZW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIsCiAJICogUmVzdG9yZSB0aGUgYXJyYXkga2V5cyB0byB0aGUgc3RhdGUgdGhleSB3ZXJl IGluIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZQogCSAqIHdlcmUgY2FsbGVkLiAgVGhpcyBlbnN1cmVz IHRoYXQgdGhlIGFycmF5cyBvbmx5IGV2ZXIgcmF0Y2hldCBpbiB0aGUKIAkgKiBjdXJyZW50IHNj YW4gZGlyZWN0aW9uLgotCSAqCi0JICogV2l0aG91dCB0aGlzLCBzY2FucyBjb3VsZCBvdmVybG9v ayBtYXRjaGluZyB0dXBsZXMgd2hlbiB0aGUgc2NhbgotCSAqIGRpcmVjdGlvbiBnZXRzIHJldmVy c2VkIGp1c3QgYmVmb3JlIGJ0Z2V0dHVwbGUgcnVucyBvdXQgb2YgaXRlbXMgdG8KLQkgKiByZXR1 cm4sIGJ1dCBqdXN0IGFmdGVyIF9idF9yZWFkcGFnZSBwcmVwYXJlcyBhbGwgdGhlIGl0ZW1zIGZy b20gdGhlCi0JICogc2NhbidzIGZpbmFsIHBhZ2UgaW4gc28tPmN1cnJQb3MuICBXaGVuIHdlJ3Jl IG9uIHRoZSBmaW5hbCBwYWdlIGl0IGlzCi0JICogdHlwaWNhbCBmb3Igc28tPmN1cnJQb3MgdG8g Z2V0IGludmFsaWRhdGVkIG9uY2UgYnRnZXR0dXBsZSBmaW5hbGx5Ci0JICogcmV0dXJucyBmYWxz ZSwgd2hpY2gnbGwgZWZmZWN0aXZlbHkgaW52YWxpZGF0ZSB0aGUgc2NhbidzIGFycmF5IGtleXMu Ci0JICogVGhhdCBoYXNuJ3QgaGFwcGVuZWQgeWV0LCB0aG91Z2ggLS0gYW5kIGluIGdlbmVyYWwg aXQgbWF5IG5ldmVyIGhhcHBlbi4KIAkgKi8KIAlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCAt ZGlyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXggYWVkNzQ1OTBjLi4zNGFl YzU5Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtMTYwLDExICsxNjAsMTMg QEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWFkanVzdG1lbWJlcnMgPSBidGFk anVzdG1lbWJlcnMsCiAJCS5hbWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4g PSBidHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBidGdldHR1cGxlLAorCQkuYW1nZXR0dXBsZSA9 IE5VTEwsCisJCS5hbWdldGJhdGNoID0gYnRnZXRiYXRjaCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2gg PSBidGtpbGxpdGVtc2JhdGNoLAorCQkuYW1yZWxlYXNlYmF0Y2ggPSBidHJlbGVhc2ViYXRjaCwK IAkJLmFtZ2V0Yml0bWFwID0gYnRnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBidGVuZHNjYW4s Ci0JCS5hbW1hcmtwb3MgPSBidG1hcmtwb3MsCi0JCS5hbXJlc3RycG9zID0gYnRyZXN0cnBvcywK KwkJLmFtcG9zcmVzZXQgPSBidHBvc3Jlc2V0LAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9 IGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4sCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBidGluaXRw YXJhbGxlbHNjYW4sCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gYnRwYXJhbGxlbHJlc2NhbiwKQEAg LTIyMywxMyArMjI1LDEzIEBAIGJ0aW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywg Ym9vbCAqaXNudWxsLAogfQogCiAvKgotICoJYnRnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0 dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWJ0Z2V0YmF0Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5l eHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJvb2wKLWJ0Z2V0dHVwbGUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitidGdl dGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwgU2Nh bkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IHByaW9yYmF0 Y2g7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOwogCkBAIC0yNDIsNDUg KzI0NCwyMCBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJCS8qCiAJCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3 ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluCiAJCSAqIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24u ICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsCi0JCSAqIF9idF9maXJzdCgpIHRv IGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KKwkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0 IHRoZSBmaXJzdCBiYXRjaCBpbiB0aGUgc2Nhbi4KIAkJICovCi0JCWlmICghQlRTY2FuUG9zSXNW YWxpZChzby0+Y3VyclBvcykpCi0JCQlyZXMgPSBfYnRfZmlyc3Qoc2NhbiwgZGlyKTsKKwkJaWYg KGJhdGNoID09IE5VTEwpCisJCQliYXRjaCA9IF9idF9maXJzdChzY2FuLCBkaXIpOwogCQllbHNl Ci0JCXsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHBy ZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJCSAqLwotCQkJaWYgKHNjYW4tPmtpbGxfcHJpb3Jf dHVwbGUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBZZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRlci4g KFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaAotCQkJCSAqIHR1cGxlcyBhdCBvbmNlIHJpZ2h0IGJl Zm9yZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikgIFRoZQotCQkJCSAqIHRlc3QgZm9yIG51bUtp bGxlZCBvdmVycnVuIGlzIG5vdCBqdXN0IHBhcmFub2lhOiBpZiB0aGUKLQkJCQkgKiBjYWxsZXIg cmV2ZXJzZXMgZGlyZWN0aW9uIGluIHRoZSBpbmRleHNjYW4gdGhlbiB0aGUgc2FtZQotCQkJCSAq IGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuIEl0J3Mgbm90IHdvcnRoCi0J CQkJICogdHJ5aW5nIHRvIG9wdGltaXplIHRoYXQsIHNvIHdlIGRvbid0IGRldGVjdCBpdCwgYnV0 IGluc3RlYWQKLQkJCQkgKiBqdXN0IGZvcmdldCBhbnkgZXhjZXNzIGVudHJpZXMuCi0JCQkJICov Ci0JCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCQlzby0+a2lsbGVkSXRlbXMg PSBwYWxsb2NfYXJyYXkoaW50LCBNYXhUSURzUGVyQlRyZWVQYWdlKTsKLQkJCQlpZiAoc28tPm51 bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2UpCi0JCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+ bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQkJfQorCQkJYmF0Y2ggPSBf YnRfbmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAotCQkJLyoKLQkJCSAqIE5vdyBjb250aW51ZSB0 aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0X25leHQoc2NhbiwgZGlyKTsKLQkJfQotCi0J CS8qIElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJuIGl0IC4uLiAqLwotCQlpZiAocmVzKQorCQkv KiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBpdCAuLi4gKi8KKwkJaWYgKGJhdGNoKQogCQkJ YnJlYWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2VlIGlmIHdlIG5lZWQgYW5vdGhlciBwcmltaXRp dmUgaW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNvLT5udW1BcnJheUtleXMgJiYgX2J0X3N0YXJ0 X3ByaW1fc2NhbihzY2FuKSk7CiAKLQlyZXR1cm4gcmVzOworCXJldHVybiBiYXRjaDsKIH0KIAog LyoKQEAgLTI5MCwzOCArMjY3LDQzIEBAIGludDY0CiBidGdldGJpdG1hcChJbmRleFNjYW5EZXNj IHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAlpbnQ2NAkJbnRpZHMg PSAwOwotCUl0ZW1Qb2ludGVyIGhlYXBUaWQ7CisJSXRlbVBvaW50ZXIgdGFibGVUaWQ7CiAKIAlB c3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOwogCiAJLyogRWFjaCBsb29wIGl0ZXJh dGlvbiBwZXJmb3JtcyBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJZG8KIAl7Ci0J CS8qIEZldGNoIHRoZSBmaXJzdCBwYWdlICYgdHVwbGUgKi8KLQkJaWYgKF9idF9maXJzdChzY2Fu LCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCS8qIEZldGNoIHRoZSBmaXJzdCBiYXRjaCAqLwor CQlpZiAoKGJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkpCiAJ CXsKLQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJaGVh cFRpZCA9ICZzY2FuLT54c19oZWFwdGlkOwotCQkJdGJtX2FkZF90dXBsZXModGJtLCBoZWFwVGlk LCAxLCBmYWxzZSk7CisJCQlpbnQJCQlpdGVtSW5kZXggPSAwOworCisJCQkvKiBTYXZlIGZpcnN0 IHR1cGxlJ3MgVElEICovCisJCQl0YWJsZVRpZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50 YWJsZVRpZDsKKwkJCXRibV9hZGRfdHVwbGVzKHRibSwgdGFibGVUaWQsIDEsIGZhbHNlKTsKIAkJ CW50aWRzKys7CiAKIAkJCWZvciAoOzspCiAJCQl7Ci0JCQkJLyoKLQkJCQkgKiBBZHZhbmNlIHRv IG5leHQgdHVwbGUgd2l0aGluIHBhZ2UuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZQotCQkJCSAq IGVhc3kgY2FzZSBpbiBfYnRfbmV4dCgpLgotCQkJCSAqLwotCQkJCWlmICgrK3NvLT5jdXJyUG9z Lml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQorCQkJCS8qIEFkdmFuY2UgdG8gbmV4 dCBUSUQgd2l0aGluIHBhZ2Utc2l6ZWQgYmF0Y2ggKi8KKwkJCQlpZiAoKytpdGVtSW5kZXggPiBi YXRjaC0+bGFzdEl0ZW0pCiAJCQkJewotCQkJCQkvKiBsZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5 IGxpZnRpbmcgKi8KLQkJCQkJaWYgKCFfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlv bikpCisJCQkJCS8qCisJCQkJCSAqIF9idF9uZXh0IHJlbGVhc2VzIHRoZSBwcmlvciBiYXRjaCBm b3IgYml0bWFwIGNhbGxlcnMKKwkJCQkJICogYmVmb3JlIGFsbG9jYXRpbmcgdGhlIG5leHQgb25l LCBzbyBvbmx5IG9uZSBiYXRjaCBpcworCQkJCQkgKiBldmVyIHVzZWQgYXQgYSB0aW1lCisJCQkJ CSAqLworCQkJCQlpdGVtSW5kZXggPSAwOworCQkJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7CisJCQkJCWlmICghYmF0Y2gpCiAJCQkJCQlicmVh azsKIAkJCQl9CiAKLQkJCQkvKiBTYXZlIHR1cGxlIElELCBhbmQgY29udGludWUgc2Nhbm5pbmcg Ki8KLQkJCQloZWFwVGlkID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRl eF0uaGVhcFRpZDsKLQkJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsK KwkJCQl0YWJsZVRpZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJsZVRpZDsKKwkJCQl0 Ym1fYWRkX3R1cGxlcyh0Ym0sIHRhYmxlVGlkLCAxLCBmYWxzZSk7CiAJCQkJbnRpZHMrKzsKIAkJ CX0KIAkJfQpAQCAtMzQ4LDggKzMzMCw2IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50 IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCiAJLyogYWxsb2NhdGUgcHJpdmF0ZSB3b3Jrc3BhY2Ug Ki8KIAlzbyA9IHBhbGxvY19vYmplY3QoQlRTY2FuT3BhcXVlRGF0YSk7Ci0JQlRTY2FuUG9zSW52 YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7 CiAJaWYgKHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCXNvLT5rZXlEYXRhID0gKFNjYW5LZXkp IHBhbGxvYyhzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKIAllbHNl CkBAIC0zNjMsMTkgKzM0MywxMSBAQCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5 cywgaW50IG5vcmRlcmJ5cykKIAlzby0+b3JkZXJQcm9jcyA9IE5VTEw7CiAJc28tPmFycmF5Q29u dGV4dCA9IE5VTEw7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwkJLyogdW50aWwgbmVlZGVk ICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgotCSAqIFdlIGRvbid0IGtub3cgeWV0IHdo ZXRoZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRleC1vbmx5LCBzbyB3ZSBkbyBub3QKLQkgKiBhbGxv Y2F0ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cyB1bnRpbCBidHJlc2Nhbi4gIEhvd2V2ZXIs IHdlIHNldCB1cAotCSAqIHNjYW4tPnhzX2l0dXBkZXNjIHdoZXRoZXIgd2UnbGwgbmVlZCBpdCBv ciBub3QsIHNpbmNlIHRoYXQncyBzbyBjaGVhcC4KLQkgKi8KLQlzby0+Y3VyclR1cGxlcyA9IHNv LT5tYXJrVHVwbGVzID0gTlVMTDsKLQotCXNjYW4tPnhzX2l0dXBkZXNjID0gUmVsYXRpb25HZXRE ZXNjcihyZWwpOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CisJc2Nhbi0+eHNfaXR1cGRlc2MgPSBS ZWxhdGlvbkdldERlc2NyKHJlbCk7CisJc2Nhbi0+bWF4aXRlbXNiYXRjaCA9IE1heFRJRHNQZXJC VHJlZVBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSBNQVhBTElHTihzaXpl b2YoQlRCYXRjaERhdGEpKTsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gQkxDS1Na OwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC0zODksNjQgKzM2MSwxODYgQEAgYnRyZXNjYW4oSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiB7CiAJQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyogd2UgYXJl bid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9wIHRoZSBwaW5zICovCi0J aWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZp bmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28t Pm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQlCVFNjYW5Qb3NVbnBp bklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBv cyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBkcm9wIGxlYWYgcGFnZSBw aW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0JICogVGhpcyBhdm9pZHMgbWFraW5nIFZB Q1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHBhZ2UuCi0JICoKLQkg KiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVyaW5nIGluZGV4LW9ubHkg c2NhbnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFDVVVNIHNldHRp bmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgotCSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9y IHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuCi0JICoKLQkg KiBBbHNvIG9wdCBvdXQgb2YgZHJvcHBpbmcgbGVhZiBwYWdlIHBpbnMgZWFnZXJseSBkdXJpbmcg Yml0bWFwIHNjYW5zLgotCSAqIFBpbnMgY2Fubm90IGJlIGhlbGQgZm9yIG1vcmUgdGhhbiBhbiBp bnN0YW50IGR1cmluZyBiaXRtYXAgc2NhbnMgZWl0aGVyCi0JICogd2F5LCBzbyB3ZSBtaWdodCBh cyB3ZWxsIGF2b2lkIHdhc3RpbmcgY3ljbGVzIG9uIGFjcXVpcmluZyBwYWdlIExTTnMuCi0JICoK LQkgKiBTZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIG9uIG1ha2luZyBjb25jdXJyZW50IFRJRCBy ZWN5Y2xpbmcgc2FmZS4KLQkgKgotCSAqIE5vdGU6IHNvLT5kcm9wUGluIHNob3VsZCBuZXZlciBj aGFuZ2UgYWNyb3NzIHJlc2NhbnMuCi0JICovCi0Jc28tPmRyb3BQaW4gPSAoIXNjYW4tPnhzX3dh bnRfaXR1cCAmJgotCQkJCSAgIElzTVZDQ0xpa2VTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkg JiYKLQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7Ci0KLQlzby0+bWFya0l0ZW1J bmRleCA9IC0xOwotCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKLQlzby0+c2NhbkJlaGluZCA9 IGZhbHNlOwotCXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFsc2U7Ci0JQlRTY2FuUG9zVW5waW5J ZlBpbm5lZChzby0+bWFya1Bvcyk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7 Ci0KLQkvKgotCSAqIEFsbG9jYXRlIHR1cGxlIHdvcmtzcGFjZSBhcnJheXMsIGlmIG5lZWRlZCBm b3IgYW4gaW5kZXgtb25seSBzY2FuIGFuZAotCSAqIG5vdCBhbHJlYWR5IGRvbmUgaW4gYSBwcmV2 aW91cyByZXNjYW4gY2FsbC4gIFRvIHNhdmUgb24gcGFsbG9jCi0JICogb3ZlcmhlYWQsIGJvdGgg d29ya3NwYWNlcyBhcmUgYWxsb2NhdGVkIGFzIG9uZSBwYWxsb2MgYmxvY2s7IG9ubHkgdGhpcwot CSAqIGZ1bmN0aW9uIGFuZCBidGVuZHNjYW4ga25vdyB0aGF0LgotCSAqLwotCWlmIChzY2FuLT54 c193YW50X2l0dXAgJiYgc28tPmN1cnJUdXBsZXMgPT0gTlVMTCkKLQl7Ci0JCXNvLT5jdXJyVHVw bGVzID0gKGNoYXIgKikgcGFsbG9jKEJMQ0tTWiAqIDIpOwotCQlzby0+bWFya1R1cGxlcyA9IHNv LT5jdXJyVHVwbGVzICsgQkxDS1NaOwotCX0KLQogCS8qCiAJICogUmVzZXQgdGhlIHNjYW4ga2V5 cwogCSAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCW1lbWNw eShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2Nh bktleURhdGEpKTsKKwlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CisJc28tPnNjYW5CZWhpbmQg PSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNlOwogCXNvLT5udW1iZXJPZktl eXMgPSAwOwkJLyogdW50aWwgX2J0X3ByZXByb2Nlc3Nfa2V5cyBzZXRzIGl0ICovCiAJc28tPm51 bUFycmF5S2V5cyA9IDA7CQkvKiBkaXR0byAqLwogfQogCisvKgorICoJYnRraWxsaXRlbXNiYXRj aCgpIC0tIE1hcmsgZGVhZCBpdGVtcycgaW5kZXggdHVwbGVzIExQX0RFQUQKKyAqLwordm9pZAor YnRraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNo KQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJQlRCYXRjaERhdGEg KmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShiYXRjaCk7CisJUGFnZQkJcGFnZTsKKwlCVFBhZ2VP cGFxdWUgb3BhcXVlOworCU9mZnNldE51bWJlciBtaW5vZmY7CisJT2Zmc2V0TnVtYmVyIG1heG9m ZjsKKwlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKKwlCdWZmZXIJCWJ1ZjsKKwlYTG9n UmVjUHRyCWxhdGVzdGxzbjsKKworCS8qIFRhYmxlIEFNIHNob3VsZCBoYXZlIGFscmVhZHkgcmVs ZWFzZWQgYmF0Y2ggcGFnZSdzIHBpbiBieSBub3cgKi8KKwlBc3NlcnQoYmF0Y2gtPm51bURlYWQg PiAwKTsKKworCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBidGJhdGNoLT5jdXJyUGFnZSwgQlRfUkVB RCk7CisKKwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKKwlBc3NlcnQoYmF0 Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlmIChiYXRjaC0+bHNuICE9IGxhdGVzdGxzbikKKwl7 CisJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KKwkJX2J0X3JlbGJ1ZihyZWws IGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCW9w YXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKKwltaW5vZmYgPSBQX0ZJUlNUREFUQUtFWShv cGFxdWUpOworCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CisKKwkvKiBJ dGVyYXRlIHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLwor CWZvciAoaW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0 ZW1JbmRleCA9IGJhdGNoLT5kZWFkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpraXRl bSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGtp dGVtLT5pbmRleE9mZnNldDsKKworCQlBc3NlcnQoaXRlbUluZGV4ID49IGJhdGNoLT5maXJzdEl0 ZW0gJiYgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJCUFzc2VydChpID09IDAgfHwK KwkJCSAgIG9mZm51bSA+PSBiYXRjaC0+aXRlbXNbYmF0Y2gtPmRlYWRJdGVtc1tpIC0gMV1dLmlu ZGV4T2Zmc2V0KTsKKworCQlpZiAob2ZmbnVtIDwgbWlub2ZmKQorCQkJY29udGludWU7CQkJLyog cHVyZSBwYXJhbm9pYSAqLworCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKKwkJeworCQkJSXRl bUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJCQlJbmRleFR1cGxlCWl0 dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCQkJYm9vbAkJa2ls bHR1cGxlID0gZmFsc2U7CisKKwkJCWlmIChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXBsZSkpCisJ CQl7CisJCQkJaW50CQkJcGkgPSBpICsgMTsKKwkJCQlpbnQJCQlucG9zdGluZyA9IEJUcmVlVHVw bGVHZXROUG9zdGluZyhpdHVwbGUpOworCQkJCWludAkJCWo7CisKKwkJCQlmb3IgKGogPSAwOyBq IDwgbnBvc3Rpbmc7IGorKykKKwkJCQl7CisJCQkJCUl0ZW1Qb2ludGVyIGl0ZW0gPSBCVHJlZVR1 cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKKworCQkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxz KGl0ZW0sICZraXRlbS0+dGFibGVUaWQpKQorCQkJCQkJYnJlYWs7CS8qIG91dCBvZiBwb3N0aW5n IGxpc3QgbG9vcCAqLworCisJCQkJCUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVt KTsKKworCQkJCQkvKgorCQkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJlLgor CQkJCQkgKgorCQkJCQkgKiBXZSByZWx5IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgbm90IGFkdmFu Y2luZyBraXRlbSBoZXJlCisJCQkJCSAqIHdpbGwgcHJldmVudCB1cyBmcm9tIGNvbnNpZGVyaW5n IHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUKKwkJCQkJICogZnVsbHkgZGVhZCBieSBub3QgbWF0Y2hp bmcgaXRzIG5leHQgaGVhcCBUSUQgaW4gbmV4dAorCQkJCQkgKiBsb29wIGl0ZXJhdGlvbi4KKwkJ CQkJICoKKwkJCQkJICogSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIGlzIHRoZSBmaW5hbCBo ZWFwIFRJRCBpbgorCQkJCQkgKiB0aGUgcG9zdGluZyBsaXN0IHR1cGxlLCB0aGVuIHR1cGxlIGdl dHMga2lsbGVkCisJCQkJCSAqIHJlZ2FyZGxlc3MgKGkuZS4gd2UgaGFuZGxlIHRoZSBjYXNlIHdo ZXJlIHRoZSBsYXN0CisJCQkJCSAqIGtpdGVtIGlzIGFsc28gdGhlIGxhc3QgaGVhcCBUSUQgaW4g dGhlIGxhc3QgaW5kZXggdHVwbGUKKwkJCQkJICogY29ycmVjdGx5IC0tIHBvc3RpbmcgdHVwbGUg c3RpbGwgZ2V0cyBraWxsZWQpLgorCQkJCQkgKi8KKwkJCQkJaWYgKHBpIDwgYmF0Y2gtPm51bURl YWQpCisJCQkJCQlraXRlbSA9ICZiYXRjaC0+aXRlbXNbYmF0Y2gtPmRlYWRJdGVtc1twaSsrXV07 CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBEb24ndCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRl cm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0bworCQkJCSAqIGF2b2lkIHByb2Nlc3NpbmcgZGVh ZCBpdGVtcyB0aGF0IHJlbGF0ZSB0byB0aGUgc2FtZQorCQkJCSAqIG9mZm51bS9wb3N0aW5nIGxp c3QgdHVwbGUuICBUaGlzIG1pY3JvLW9wdGltaXphdGlvbiBoYXJkbHkKKwkJCQkgKiBzZWVtcyB3 b3J0aCBpdC4gIChGdXJ0aGVyIGl0ZXJhdGlvbnMgb2YgdGhlIG91dGVybW9zdCBsb29wCisJCQkJ ICogd2lsbCBmYWlsIHRvIG1hdGNoIG9uIHRoaXMgc2FtZSBwb3N0aW5nIGxpc3QncyBmaXJzdCBo ZWFwCisJCQkJICogVElEIGluc3RlYWQsIHNvIHdlJ2xsIGFkdmFuY2UgdG8gdGhlIG5leHQgb2Zm bnVtL2luZGV4CisJCQkJICogdHVwbGUgcHJldHR5IHF1aWNrbHkuKQorCQkJCSAqLworCQkJCWlm IChqID09IG5wb3N0aW5nKQorCQkJCQlraWxsdHVwbGUgPSB0cnVlOworCQkJfQorCQkJZWxzZSBp ZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZraXRlbS0+dGFibGVUaWQpKQor CQkJCWtpbGx0dXBsZSA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBNYXJrIGluZGV4IGl0ZW0gYXMg ZGVhZCwgaWYgaXQgaXNuJ3QgYWxyZWFkeS4gIFNpbmNlIHRoaXMKKwkJCSAqIGhhcHBlbnMgd2hp bGUgaG9sZGluZyBhIHNoYXJlZCBidWZmZXIgbG9jaywgaXQncyBwb3NzaWJsZSB0aGF0CisJCQkg KiBtdWx0aXBsZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzIHNpbXVsdGFuZW91c2x5LCBs ZWFkaW5nCisJCQkgKiB0byBtdWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQgdG8g V0FMIChpZgorCQkJICogd2FsX2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxl ZCksIHdoaWNoIGlzCisJCQkgKiB1bmRlc2lyYWJsZS4KKwkJCSAqLworCQkJaWYgKGtpbGx0dXBs ZSAmJiAhSXRlbUlkSXNEZWFkKGlpZCkpCisJCQl7CisJCQkJaWYgKCFraWxsZWRzb21ldGhpbmcp CisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJl IHRvIGNoZWNrIGlmIHdlIGNhbgorCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBo b2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKKwkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVy ZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJCQkJCSAqLworCQkJCQlpZiAoIUJ1ZmZlckJlZ2lu U2V0SGludEJpdHMoYnVmKSkKKwkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7CisJCQkJfQorCisJCQkJ LyogZm91bmQgdGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLworCQkJCUl0ZW1JZE1h cmtEZWFkKGlpZCk7CisJCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKKwkJCQlicmVhazsJCQkv KiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KKwkJCX0KKwkJCW9mZm51bSA9IE9mZnNldE51 bWJlck5leHQob2ZmbnVtKTsKKwkJfQorCX0KKworCS8qCisJICogU2luY2UgdGhpcyBjYW4gYmUg cmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LgorCSAqCisJICogV2hl bmV2ZXIgd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCisJ ICogQlRQX0hBU19HQVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAg KE5vdGUgdGhhdCB3ZQorCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFo ZWFwa2V5c3BhY2UgaW5kZXhlcy4pCisJICovCisJaWYgKGtpbGxlZHNvbWV0aGluZykKKwl7CisJ CW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7CisJCUJ1ZmZlckZpbmlzaFNl dEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7CisJfQorCit1bmxvY2tfcGFnZToKKwlfYnRfcmVs YnVmKHJlbCwgYnVmKTsKK30KKworLyoKKyAqCWJ0cmVsZWFzZWJhdGNoKCkgLS0gUmVsZWFzZSBi YXRjaCdzIGluZGV4IHBhZ2UgYnVmZmVyIHBpbgorICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUg QU0gKHZpYSBhbXJlbGVhc2ViYXRjaCkgd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUKKyAqIGJ1 ZmZlciBwaW4gaGVsZCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNV VU0uCisgKiBNdXN0IGJlIGlkZW1wb3RlbnQgLS0gc2FmZSB0byBjYWxsIHdoZW4gdGhlIHBpbiBo YXMgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLgorICovCit2b2lkCitidHJlbGVhc2ViYXRjaChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUJUQmF0Y2hEYXRhICpi dGJhdGNoID0gQlRCYXRjaEdldERhdGEoYmF0Y2gpOworCisJaWYgKEJ1ZmZlcklzVmFsaWQoYnRi YXRjaC0+YnVmKSkKKwl7CisJCVJlbGVhc2VCdWZmZXIoYnRiYXRjaC0+YnVmKTsKKwkJYnRiYXRj aC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwl9Cit9CisKIC8qCiAgKglidGVuZHNjYW4oKSAtLSBj bG9zZSBkb3duIGEgc2NhbgogICovCkBAIC00NTUsMTE2ICs1NDksNjMgQEAgYnRlbmRzY2FuKElu ZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0 IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBv cykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkg a2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRl bXMoc2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCX0KLQot CXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFy a1Bvcyk7Ci0KLQkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgcG9zaXRpb25zLCB0aGUgUkFNIGlz IGFib3V0IHRvIGJlIGZyZWVkLiAqLwotCiAJLyogUmVsZWFzZSBzdG9yYWdlICovCiAJaWYgKHNv LT5rZXlEYXRhICE9IE5VTEwpCiAJCXBmcmVlKHNvLT5rZXlEYXRhKTsKIAkvKiBzby0+YXJyYXlL ZXlzIGFuZCBzby0+b3JkZXJQcm9jcyBhcmUgaW4gYXJyYXlDb250ZXh0ICovCiAJaWYgKHNvLT5h cnJheUNvbnRleHQgIT0gTlVMTCkKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShzby0+YXJyYXlDb250 ZXh0KTsKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJ dGVtcyk7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5jdXJyVHVw bGVzKTsKLQkvKiBzby0+bWFya1R1cGxlcyBzaG91bGQgbm90IGJlIHBmcmVlJ2QsIHNlZSBidHJl c2NhbiAqLwogCXBmcmVlKHNvKTsKIH0KIAogLyoKLSAqCWJ0bWFya3BvcygpIC0tIHNhdmUgY3Vy cmVudCBzY2FuIHBvc2l0aW9uCisgKglidHBvc3Jlc2V0KCkgLS0gcmVzZXQgYXJyYXkga2V5IHN0 YXRlIGZvciBzY2FuIHBvc2l0aW9uIGNoYW5nZQorICoKKyAqIENhbGxlZCBieSB0aGUgY29yZSBz eXN0ZW0gd2hlbiB0aGUgc2NhbidzIGxvZ2ljYWwgcG9zaXRpb24gaXMgYWJvdXQgdG8KKyAqIGNo YW5nZSBpbiBhIHdheSB0aGF0IGludmFsaWRhdGVzIG91ciBhcnJheSBrZXkgc3RhdGUuICBUaGlz IGhhcHBlbnMgd2hlbgorICogcmVzdG9yaW5nIGEgbWFya2VkIHBvc2l0aW9uLCBvciB3aGVuIHRo ZSBzY2FuIGNyb3NzZXMgYSBiYXRjaCBib3VuZGFyeQorICogd2hpbGUgbW92aW5nIGluIHRoZSBv cHBvc2l0ZSBkaXJlY3Rpb24gdG8gdGhlIG9uZSBvcmlnaW5hbGx5IHVzZWQuCisgKgorICogRm9y IGRpcmVjdGlvbiBjaGFuZ2VzLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgZmxp cHBlZCB0aGUKKyAqIGJhdGNoJ3MgZGlyIGZpZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmU7IHdlIHVz ZSB0aGlzIHVwZGF0ZWQgZGlyZWN0aW9uIHdoZW4KKyAqIHJlc2V0dGluZyBvdXIgYXJyYXkga2V5 cy4gIEZvciBtYXJrIHJlc3RvcmF0aW9uLCB0aGUgYmF0Y2gncyBkaXIgd2lsbAorICogcmV0YWlu IGl0cyBvcmlnaW5hbCB2YWx1ZSAoZnJvbSB3aGVuIGJ0Z2V0YmF0Y2ggcmV0dXJuZWQgaXQpLgog ICovCiB2b2lkCi1idG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQorYnRwb3NyZXNldChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUJUU2Nhbk9wYXF1ZSBz byA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRiYXRjaCA9 IEJUQmF0Y2hHZXREYXRhKGJhdGNoKTsKIAotCS8qIFRoZXJlIG1heSBiZSBhbiBvbGQgbWFyayB3 aXRoIGEgcGluIChidXQgbm8gbG9jaykuICovCi0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+ bWFya1Bvcyk7CisJaWYgKCFzby0+bnVtQXJyYXlLZXlzKQorCQlyZXR1cm47CiAKIAkvKgotCSAq IEp1c3QgcmVjb3JkIHRoZSBjdXJyZW50IGl0ZW1JbmRleC4gIElmIHdlIGxhdGVyIHN0ZXAgdG8g bmV4dCBwYWdlCi0JICogYmVmb3JlIHJlbGVhc2luZyB0aGUgbWFya2VkIHBvc2l0aW9uLCBfYnRf c3RlcHBhZ2UgbWFrZXMgYSBmdWxsIGNvcHkgb2YKLQkgKiB0aGUgY3VyclBvcyBzdHJ1Y3QgaW4g bWFya1Bvcy4gIElmIChhcyBvZnRlbiBoYXBwZW5zKSB0aGUgbWFyayBpcyBtb3ZlZAotCSAqIGJl Zm9yZSB3ZSBsZWF2ZSB0aGUgcGFnZSwgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGF0IHdvcmsuCisJ ICogUmVzZXQgYXJyYXkga2V5cyB0byBpbml0aWFsIHN0YXRlIGZvciB0aGUgYmF0Y2gncyBzY2Fu IGRpcmVjdGlvbi4gIEFsc28KKwkgKiBjbGVhciBuZWVkUHJpbVNjYW4gYW5kIHJlbGF0ZWQgZmxh Z3MuICBUaGVzZSB3ZXJlIHNldCBiYXNlZCBvbiB0aGUgc29mdAorCSAqIGFzc3VtcHRpb24gdGhh dCB0aGUgc2NhbiB3b3VsZCBhbHdheXMgcHJvY2VlZCBpbiB0aGUgc2FtZSBkaXJlY3Rpb24uCisJ ICoKKwkgKiBUaGVzZSBzdGVwcyB3b3JrIGFyb3VuZCB0aGUgc29mdCBhc3N1bXB0aW9uIGJlaW5n IHZpb2xhdGVkOiB0aGV5IGZvcmNlCisJICogdGhlIHNjYW4gdG8gc3RlcCB0byB0aGUgbmV4dC9w cmV2aW91cyBwYWdlLCBtYWtpbmcgdGhlIGFycmF5cyByZWNvdmVyLgorCSAqIFdoZW4gd2UgZ28g dG8gcmVhZCB0aGF0IHBhZ2UsIF9idF9yZWFkcGFnZSB3aWxsIHJlbGlhYmx5IGRldGVybWluZSBp ZiBhCisJICogcHJpbWl0aXZlIHNjYW4gcmVhbGx5IGlzIG5lZWRlZCBiYXNlZCBvbiB0aGUgcGFn ZSdzIHR1cGxlcy4gIElmIHRoZXJlJ3MKKwkgKiBhIHByaW1pdGl2ZSBzY2FuLCBpdCB3aWxsIHJl cG9zaXRpb24gdGhlIHNjYW4gdXNpbmcgbmV3IGFycmF5IHZhbHVlcworCSAqIChiYXNlZCBvbiB0 aGUgdHVwbGVzIGZyb20gdGhlIG5laWdoYm9yaW5nIHBhZ2Ugd2UnbGwgc3RlcCBvbiB0bykuCisJ ICoKKwkgKiBXZSBuZWVkIHRvIHJlc2V0IHRoZSBhcnJheSBrZXkgc3RhdGUgaW4gdGhlIGNvcnJl Y3QgZGlyZWN0aW9uIHNvIHRoYXQKKwkgKiB3ZSB3b24ndCBnZXQgY29uZnVzZWQuICBXaGVuIHRo ZSBhcnJheSBrZXlzIGFyZSBiZWhpbmQgdGhlIGtleSBzcGFjZQorCSAqIGZvciB0aGUgcGFnZSB3 ZSdyZSBzdGVwcGluZyBvbiB0byAoYmVoaW5kIGluIHRlcm1zIG9mIHRoZSBzY2FuIGRpciksCisJ ICogdGhleSB3aWxsIGNhdGNoIHVwIGF1dG9tYXRpY2FsbHkuICBCdXQgd2hlbiB0aGV5J3JlIGFo ZWFkIG9mIHRoYXQKKwkgKiBwYWdlJ3Mga2V5IHNwYWNlLCB0aGUgc2NhbiBjb3VsZCBtaXNzIG1h dGNoaW5nIHR1cGxlcy4KIAkgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OworCV9idF9zdGFy dF9hcnJheV9rZXlzKHNjYW4sIGJhdGNoLT5kaXIpOworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGJhdGNoLT5kaXIpKQorCQlidGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCWVsc2UKLQl7 Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwotCQlzby0+bWFya0l0ZW1JbmRl eCA9IC0xOwotCX0KLX0KLQotLyoKLSAqCWJ0cmVzdHJwb3MoKSAtLSByZXN0b3JlIHNjYW4gdG8g bGFzdCBzYXZlZCBwb3NpdGlvbgotICovCi12b2lkCi1idHJlc3RycG9zKEluZGV4U2NhbkRlc2Mg c2NhbikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 Ci0KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2Fu IGhhcyBuZXZlciBtb3ZlZCB0byBhIG5ldyBwYWdlIHNpbmNlIHRoZSBsYXN0IG1hcmsuICBKdXN0 Ci0JCSAqIHJlc3RvcmUgdGhlIGl0ZW1JbmRleC4KLQkJICoKLQkJICogTkI6IEluIHRoaXMgY2Fz ZSB3ZSBjYW4ndCBjb3VudCBvbiBhbnl0aGluZyBpbiBzby0+bWFya1BvcyB0byBiZQotCQkgKiBh Y2N1cmF0ZS4KLQkJICovCi0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUlu ZGV4OwotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBtb3ZlZCB0byBhIG5ldyBw YWdlIGFmdGVyIGxhc3QgbWFyayBvciByZXN0b3JlLCBhbmQgd2UgYXJlCi0JCSAqIG5vdyByZXN0 b3JpbmcgdG8gdGhlIG1hcmtlZCBwYWdlLiAgV2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQKLQkJ ICogbG9ja3MsIGJ1dCBpZiB3ZSdyZSBzdGlsbCBob2xkaW5nIHRoZSBwaW4gZm9yIHRoZSBjdXJy ZW50IHBvc2l0aW9uLAotCQkgKiB3ZSBtdXN0IGRyb3AgaXQuCi0JCSAqLwotCQlpZiAoQlRTY2Fu UG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXsKLQkJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJl bnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJCWlmIChzby0+bnVtS2ls bGVkID4gMCkKLQkJCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQkJQlRTY2FuUG9zVW5waW5JZlBp bm5lZChzby0+Y3VyclBvcyk7Ci0JCX0KLQotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+bWFy a1BvcykpCi0JCXsKLQkJCS8qIGJ1bXAgcGluIG9uIG1hcmsgYnVmZmVyIGZvciBhc3NpZ25tZW50 IHRvIGN1cnJlbnQgYnVmZmVyICovCi0JCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPm1hcmtQ b3MpKQotCQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+bWFya1Bvcy5idWYpOwotCQkJbWVtY3B5 KCZzby0+Y3VyclBvcywgJnNvLT5tYXJrUG9zLAotCQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0Rh dGEsIGl0ZW1zWzFdKSArCi0JCQkJICAgc28tPm1hcmtQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRT Y2FuUG9zSXRlbSkpOwotCQkJaWYgKHNvLT5jdXJyVHVwbGVzKQotCQkJCW1lbWNweShzby0+Y3Vy clR1cGxlcywgc28tPm1hcmtUdXBsZXMsCi0JCQkJCSAgIHNvLT5tYXJrUG9zLm5leHRUdXBsZU9m ZnNldCk7Ci0JCQkvKiBSZXNldCB0aGUgc2NhbidzIGFycmF5IGtleXMgKHNlZSBfYnRfc3RlcHBh Z2UgZm9yIHdoeSkgKi8KLQkJCWlmIChzby0+bnVtQXJyYXlLZXlzKQotCQkJewotCQkJCV9idF9z dGFydF9hcnJheV9rZXlzKHNjYW4sIHNvLT5jdXJyUG9zLmRpcik7Ci0JCQkJc28tPm5lZWRQcmlt U2NhbiA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUo c28tPmN1cnJQb3MpOwotCX0KKwkJYnRiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCXNvLT5uZWVk UHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0 ZURpckNoZWNrID0gZmFsc2U7CiB9CiAKIC8qCkBAIC04ODAsMTUgKzkyMSw2IEBAIF9idF9wYXJh bGxlbF9zZWl6ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyICpuZXh0X3NjYW5fcGFn ZSwKIAkqbmV4dF9zY2FuX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJKmxhc3RfY3Vycl9w YWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCi0JLyoKLQkgKiBSZXNldCBzby0+Y3VyclBvcywg YW5kIGluaXRpYWxpemUgbW9yZUxlZnQvbW9yZVJpZ2h0IHN1Y2ggdGhhdCB0aGUgbmV4dAotCSAq IGNhbGwgdG8gX2J0X3JlYWRuZXh0cGFnZSB0cmVhdHMgdGhpcyBiYWNrZW5kIHNpbWlsYXJseSB0 byBhIHNlcmlhbAotCSAqIGJhY2tlbmQgdGhhdCBzdGVwcyBmcm9tICpsYXN0X2N1cnJfcGFnZSB0 byAqbmV4dF9zY2FuX3BhZ2UgKHVubGVzcyB0aGlzCi0JICogYmFja2VuZCdzIHNvLT5jdXJyUG9z IGlzIGluaXRpYWxpemVkIGJ5IF9idF9yZWFkZmlyc3RwYWdlIGJlZm9yZSB0aGVuKS4KLQkgKi8K LQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlzby0+Y3VyclBvcy5tb3JlTGVm dCA9IHNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7Ci0KIAlpZiAoZmlyc3QpCiAJewogCQkv KgpAQCAtMTAzOCw4ICsxMDcwLDYgQEAgX2J0X3BhcmFsbGVsX2RvbmUoSW5kZXhTY2FuRGVzYyBz Y2FuKQogCUJUUGFyYWxsZWxTY2FuRGVzYyBidHNjYW47CiAJYm9vbAkJc3RhdHVzX2NoYW5nZWQg PSBmYWxzZTsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCiAJ LyogRG8gbm90aGluZywgZm9yIG5vbi1wYXJhbGxlbCBzY2FucyAqLwogCWlmIChwYXJhbGxlbF9z Y2FuID09IE5VTEwpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0c2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5j CmluZGV4IGFhZTZhY2I3Zi4uNGQxYjExMWRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 c2VhcmNoLmMKQEAgLTIzLDUzICsyMyw0OSBAQAogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisj aW5jbHVkZSAidXRpbHMvbWVtZGVidWcuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogCi1z dGF0aWMgaW5saW5lIHZvaWQgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJl bCwgQlRTY2FuT3BhcXVlIHNvKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfYnRfYmF0Y2hfdW5sb2Nr KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQlCdWZm ZXIgYnVmKTsKIHN0YXRpYyBCdWZmZXIgX2J0X21vdmVyaWdodChSZWxhdGlvbiByZWwsIFJlbGF0 aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkJQnVmZmVyIGJ1ZiwgYm9vbCBm b3J1cGRhdGUsIEJUU3RhY2sgc3RhY2ssCiAJCQkJCQkJaW50IGFjY2Vzcyk7CiBzdGF0aWMgT2Zm c2V0TnVtYmVyIF9idF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVm ZmVyIGJ1Zik7CiBzdGF0aWMgaW50CV9idF9iaW5zcmNoX3Bvc3RpbmcoQlRTY2FuSW5zZXJ0IGtl eSwgUGFnZSBwYWdlLAogCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLXN0YXRpYyBpbmxp bmUgdm9pZCBfYnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBz byk7Ci1zdGF0aWMgYm9vbCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcik7 Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tO dW1iZXIgYmxrbm8sCi0JCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJl Y3Rpb24gZGlyLAotCQkJCQkJCSBib29sIHNlaXplZCk7CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gg X2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJz dGJhdGNoLAorCQkJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGly KTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJCQkJCQkgICBCbG9ja051bWJlciBsYXN0Y3Vy cmJsa25vLAorCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKTsK IHN0YXRpYyBCdWZmZXIgX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQoUmVsYXRpb24gcmVsLCBC bG9ja051bWJlciAqYmxrbm8sCiAJCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8p Owotc3RhdGljIGJvb2wgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9lbmRwb2ludChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBm aXJzdGJhdGNoKTsKIAogCiAvKgotICoJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKCkKKyAq IF9idF9iYXRjaF91bmxvY2soKSAtLSBuYnRyZWUgd3JhcHBlciBmb3IgaW5kZXhhbV91dGlsX2Jh dGNoX3VubG9jay4KICAqCi0gKiBVbmxvY2sgc28tPmN1cnJQb3MuYnVmLiAgSWYgc2NhbiBpcyBz by0+ZHJvcFBpbiwgZHJvcCB0aGUgcGluLCB0b28uCi0gKiBEcm9wcGluZyB0aGUgcGluIHByZXZl bnRzIFZBQ1VVTSBmcm9tIGJsb2NraW5nIG9uIGFjcXVpcmluZyBhIGNsZWFudXAgbG9jay4KKyAq IFBlcmZvcm1zIHRoZSBzYW1lIFZhbGdyaW5kIGluc3RydW1lbnRhdGlvbiBhcyBfYnRfdW5sb2Nr YnVmLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3Bp bihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKK19idF9iYXRjaF91bmxvY2soSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVmZmVyIGJ1ZikKIHsKLQlpZiAo IXNvLT5kcm9wUGluKQotCXsKLQkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3QgdGhlIHBpbikg Ki8KLQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXJldHVybjsKLQl9 CisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCisJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uo YnVmKTsKIAotCS8qCi0JICogRHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgotCSAqCi0J ICogSGF2ZSB0byBzZXQgc28tPmN1cnJQb3MubHNuIHNvIHRoYXQgX2J0X2tpbGxpdGVtcyBoYXMg YSB3YXkgdG8gZGV0ZWN0Ci0JICogd2hlbiBjb25jdXJyZW50IGhlYXAgVElEIHJlY3ljbGluZyBi eSBWQUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KLQkgKi8KLQlzby0+Y3VyclBvcy5sc24g PSBCdWZmZXJHZXRMU05BdG9taWMoc28tPmN1cnJQb3MuYnVmKTsKLQlfYnRfcmVsYnVmKHJlbCwg c28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVyOworCVZB TEdSSU5EX0NIRUNLX01FTV9JU19ERUZJTkVEKHBhZ2UsIEJMQ0tTWik7CisjZW5kaWYKKworCWlu ZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgYmF0Y2gsIGJ1Zik7CisKKyNpZiBkZWZpbmVk KFVTRV9WQUxHUklORCkKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhzY2FuLT5pbmRl eFJlbGF0aW9uKSkKKwkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MocGFnZSwgQkxDS1NaKTsK KyNlbmRpZgogfQogCiAvKgpAQCAtODYwLDI2ICs4NTYsMjMgQEAgX2J0X2NvbXBhcmUoUmVsYXRp b24gcmVsLAogfQogCiAvKgotICoJX2J0X2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgaXRlbSBp biBhIHNjYW4uCisgKglfYnRfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBiYXRjaCBpbiBhIHNj YW4uCiAgKgogICoJCVdlIG5lZWQgdG8gYmUgY2xldmVyIGFib3V0IHRoZSBkaXJlY3Rpb24gb2Yg c2NhbiwgdGhlIHNlYXJjaAotICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmluZy4g IFdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLAotICoJCWlmIGJhY2t3YXJkcyBzY2FuLCB0aGUg bGFzdCBpdGVtKSBpbiB0aGUgdHJlZSB0aGF0IHNhdGlzZmllcyB0aGUKLSAqCQlxdWFsaWZpY2F0 aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbiBzdWNjZXNzIGV4aXQsIGRhdGEgYWJvdXQgdGhlCi0g KgkJbWF0Y2hpbmcgdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGludG8gc28t PmN1cnJQb3MuICBXZSdsbAotICoJCWRyb3AgYWxsIGxvY2tzIGFuZCBob2xkIG9udG8gYSBwaW4g b24gcGFnZSdzIGJ1ZmZlciwgZXhjZXB0IGR1cmluZwotICoJCXNvLT5kcm9wUGluIHNjYW5zLCB3 aGVuIHdlIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLSAqCQlfYnRfcmV0dXJuaXRl bSBzZXRzIHRoZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHNjYW4gb24gc3VjY2VzcyBleGl0Lgor ICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmluZy4gIFdlIGZpbmQgdGhlIGZpcnN0 IGxlYWYgcGFnZSAob3IKKyAqCQl0aGUgbGFzdCBsZWFmIHBhZ2UsIHdoZW4gc2Nhbm5pbmcgYmFj a3dhcmRzKSBpbiB0aGUgdHJlZSB3aXRoIGF0IGxlYXN0CisgKgkJb25lIHR1cGxlIHRoYXQgc2F0 aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbgorICoJCXN1Y2Nl c3MgZXhpdCwgd2UgcmV0dXJuIGEgbmV3IGJhdGNoIHdpdGggdGhhdCBwYWdlJ3MgbWF0Y2hpbmcg aXRlbXMuCiAgKgotICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRl eCwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIG5vCi0gKiBwaW5zIG9yIGxvY2tzIGhlbGQuICBzby0+ Y3VyclBvcyB3aWxsIHJlbWFpbiBpbnZhbGlkLgorICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5n IGl0ZW1zIGluIHRoZSBpbmRleCAoaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uKSwKKyAqIHdl IGp1c3QgcmV0dXJuIE5VTEwuCiAgKgogICogTm90ZSB0aGF0IHNjYW4tPmtleURhdGFbXSwgYW5k IHRoZSBzby0+a2V5RGF0YVtdIHNjYW5rZXkgYnVpbHQgZnJvbSBpdCwKICAqIGFyZSBib3RoIHNl YXJjaC10eXBlIHNjYW5rZXlzIChzZWUgbmJ0cmVlL1JFQURNRSBmb3IgbW9yZSBhYm91dCB0aGlz KS4KICAqIFdpdGhpbiB0aGlzIHJvdXRpbmUsIHdlIGJ1aWxkIGEgdGVtcG9yYXJ5IGluc2VydGlv bi10eXBlIHNjYW5rZXkgdG8gdXNlCiAgKiBpbiBsb2NhdGluZyB0aGUgc2NhbiBzdGFydCBwb3Np dGlvbi4KICAqLwotYm9vbAorSW5kZXhTY2FuQmF0Y2gKIF9idF9maXJzdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247CkBAIC04OTIsOCArODg1LDEyIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCVN0cmF0ZWd5TnVtYmVyIHN0cmF0X3RvdGFsID0gSW52 YWxpZFN0cmF0ZWd5OwogCUJsb2NrTnVtYmVyIGJsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyLAog CQkJCWxhc3RjdXJyYmxrbm87CisJSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaDsKKwlCVEJhdGNo RGF0YSAqYnRmaXJzdGJhdGNoOwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJy UG9zKSk7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNoICovCisJZmlyc3RiYXRj aCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKKwlidGZpcnN0YmF0Y2ggPSBCVEJh dGNoR2V0RGF0YShmaXJzdGJhdGNoKTsKIAogCS8qCiAJICogRXhhbWluZSB0aGUgc2NhbiBrZXlz IGFuZCBlbGltaW5hdGUgYW55IHJlZHVuZGFudCBrZXlzOyBhbHNvIG1hcmsgdGhlCkBAIC05MDks NiArOTA2LDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJewogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlfYnRfcGFyYWxsZWxfZG9u ZShzY2FuKTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7 CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTkxOCw3ICs5MTYsMTAgQEAgX2J0X2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICovCiAJaWYgKHNjYW4tPnBh cmFsbGVsX3NjYW4gIT0gTlVMTCAmJgogCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtu bywgJmxhc3RjdXJyYmxrbm8sIHRydWUpKQotCQlyZXR1cm4gZmFsc2U7CisJeworCQlpbmRleGFt X3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKwkJcmV0dXJuIGZhbHNlOwkJ CS8qIGRlZmluaXRlbHkgZG9uZSAoc28tPm5lZWRQcmltU2NhbiBpcyB1bnNldCkgKi8KKwl9CiAK IAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNjYW4ncyBhcnJheXMgKGlmIGFueSkgZm9yIHRoZSBj dXJyZW50IHNjYW4gZGlyZWN0aW9uCkBAIC05MzgsMTEgKzkzOSw5IEBAIF9idF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlBc3NlcnQoIXNvLT5uZWVkUHJp bVNjYW4pOwogCQlBc3NlcnQoYmxrbm8gIT0gUF9OT05FKTsKIAotCQlpZiAoIV9idF9yZWFkbmV4 dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSkpCi0JCQlyZXR1cm4g ZmFsc2U7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwog Ci0JCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBf YnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRydWUpOwog CX0KIAogCS8qCkBAIC0xMjQyLDcgKzEyNDEsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBOb3RlOiBjYWxscyBfYnRfcmVhZGZpcnN0cGFn ZSBmb3IgdXMsIHdoaWNoIHJlbGVhc2VzIHRoZSBwYXJhbGxlbCBzY2FuLgogCSAqLwogCWlmIChr ZXlzeiA9PSAwKQotCQlyZXR1cm4gX2J0X2VuZHBvaW50KHNjYW4sIGRpcik7CisJCXJldHVybiBf YnRfZW5kcG9pbnQoc2NhbiwgZGlyLCBmaXJzdGJhdGNoKTsKIAogCS8qCiAJICogV2Ugd2FudCB0 byBzdGFydCB0aGUgc2NhbiBzb21ld2hlcmUgd2l0aGluIHRoZSBpbmRleC4gIFNldCB1cCBhbgpA QCAtMTUxMCw5ICsxNTA5LDkgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCiAJICogcG9zaXRpb24gb3Vyc2VsdmVzIG9uIHRoZSB0YXJnZXQgbGVhZiBw YWdlLgogCSAqLwogCUFzc2VydChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpID09IGluc2tl eS5iYWNrd2FyZCk7Ci0JX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBv cy5idWYsIEJUX1JFQUQsIGZhbHNlKTsKKwlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwg JmJ0Zmlyc3RiYXRjaC0+YnVmLCBCVF9SRUFELCBmYWxzZSk7CiAKLQlpZiAoIUJ1ZmZlcklzVmFs aWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAodW5saWtlbHkoIUJ1ZmZlcklzVmFsaWQoYnRmaXJz dGJhdGNoLT5idWYpKSkKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAKQEAgLTE1 MjgsMjIgKzE1MjcsMjMgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCiAJCWlmIChJc29sYXRpb25Jc1NlcmlhbGl6YWJsZSgpKQogCQl7CiAJCQlQcmVk aWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFwc2hvdCk7Ci0JCQlfYnRfc2VhcmNo KHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOwor CQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZidGZpcnN0YmF0Y2gtPmJ1ZiwgQlRf UkVBRCwgZmFsc2UpOwogCQl9CiAKLQkJaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1 ZikpCisJCWlmICghQnVmZmVySXNWYWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpCiAJCXsKIAkJCV9i dF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2Nh biwgZmlyc3RiYXRjaCk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CiAKIAkvKiBwb3NpdGlv biB0byB0aGUgcHJlY2lzZSBpdGVtIG9uIHRoZSBwYWdlICovCi0Jb2ZmbnVtID0gX2J0X2JpbnNy Y2gocmVsLCAmaW5za2V5LCBzby0+Y3VyclBvcy5idWYpOworCW9mZm51bSA9IF9idF9iaW5zcmNo KHJlbCwgJmluc2tleSwgYnRmaXJzdGJhdGNoLT5idWYpOwogCiAJLyoKIAkgKiBOb3cgbG9hZCBk YXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4gKHVzdWFsbHkgdGhlIHBhZ2UKLQkg KiBjdXJyZW50bHkgaW4gc28tPmN1cnJQb3MuYnVmKS4KKwkgKiBjdXJyZW50bHkgaW4gZmlyc3Ri YXRjaC5idWYpLgogCSAqCiAJICogSWYgaW5za2V5Lm5leHRrZXkgPSBmYWxzZSBhbmQgaW5za2V5 LmJhY2t3YXJkID0gZmFsc2UsIG9mZm51bSBpcwogCSAqIHBvc2l0aW9uZWQgYXQgdGhlIGZpcnN0 IG5vbi1waXZvdCB0dXBsZSA+PSBpbnNrZXkuc2NhbmtleXMuCkBAIC0xNTYxLDE2NSArMTU2MSw3 MyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkg KiBmb3IgdGhlIHBhZ2UuICBGb3IgZXhhbXBsZSwgd2hlbiBpbnNrZXkgaXMgYm90aCA8IHRoZSBs ZWFmIHBhZ2UncyBoaWdoCiAJICoga2V5IGFuZCA+IGFsbCBvZiBpdHMgbm9uLXBpdm90IHR1cGxl cywgb2ZmbnVtIHdpbGwgYmUgIm1heG9mZiArIDEiLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJz dHBhZ2Uoc2Nhbiwgb2ZmbnVtLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJu aXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdl KHNjYW4sIGZpcnN0YmF0Y2gsIG9mZm51bSwgZGlyKTsKIH0KIAogLyoKLSAqCV9idF9uZXh0KCkg LS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2J0X25leHQoKSAtLSBHZXQgdGhl IG5leHQgYmF0Y2ggaW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVz Y3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heSBiZSBwaW5uZWQKLSAqCQlidXQgaXMg bm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzIHdoaWNoIGl0 ZW0gd2FzCi0gKgkJcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRj aCBkZXNjcmliZXMgdGhlIGJhdGNoIHRoYXQgd2FzIGxhc3QgcmV0dXJuZWQgYnkKKyAqCQlidGdl dGJhdGNoLiAgV2UnbGwgdXNlIHRoZSBwcmlvciBiYXRjaCdzIHBvc2l0aW9uaW5nIGluZm9ybWF0 aW9uIHRvCisgKgkJZGVjaWRlIHdoaWNoIGxlYWYgcGFnZSB0byByZWFkIG5leHQuCiAgKgotICoJ CU9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQsIGFuZCBf YnRfcmV0dXJuaXRlbQotICoJCXNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gdGhlIHNj YW4uICBzby0+Y3VyclBvcyByZW1haW5zIHZhbGlkLgotICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQg KG5vIG1vcmUgdHVwbGVzKSwgd2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0J2xsCi0gKgkJ c3RpbGwgYmUgcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdp bmcgZGlyZWN0aW9uLAotICoJCXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFu ZXcgaW4gdGhhdCBvdGhlciBkaXJlY3Rpb24uCisgKgkJT24gc3VjY2VzcyBleGl0LCByZXR1cm5z IHRoZSBuZXh0IGJhdGNoLiAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAqCQltYXRjaGlu ZyB0dXBsZSBvbiBhbnkgcmV0dXJuZWQgYmF0Y2ggKGVsc2Ugd2UnZCBqdXN0IHJldHVybiBOVUxM KS4KICAqLwotYm9vbAotX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyoKLQkgKiBB ZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBwYWdlOyBvciBpZiB0aGVyZSdzIG5vIG1v cmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEuCi0JICovCi0J aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlmICgrK3NvLT5jdXJyUG9z Lml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0JCQlpZiAoIV9idF9zdGVw cGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQllbHNlCi0Jewot CQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBvcy5maXJzdEl0ZW0pCi0J CXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOwot CQl9Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVlOwotfQot Ci0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZyb20gc28tPmN1cnJQb3MuaXRlbXNbc28t PmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGluZGV4IHNjYW4gYnkgc2V0dGluZyB0aGUg cmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4IHNjYW4gZGVzY3JpcHRvcgotICovCi1z dGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRT Y2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9z Lml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0KLQkvKiBNb3N0IHJlY2VudCBfYnRfcmVh ZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA+PSBzby0+Y3VyclBv cy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPD0gc28tPmN1cnJQ b3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQgaXRlbSwgcGVyIGFtZ2V0dHVwbGUgY29u dHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0JaWYgKHNv LT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1 cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19Ci0KLS8qCi0gKglfYnRfc3RlcHBhZ2Uo KSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlkIGRhdGEgZm9yIHNjYW4KLSAq Ci0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJmb3JtcyBmaW5hbCBzdGVw cyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVz dCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRob3VnaAotICogbmV2ZXIg bG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUgd29uJ3QgZXZlbiBiZSBh IHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdlIG11c3Qgc3RpbGwgYmUg c2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAqLwotc3RhdGljIGJvb2wKLV9idF9zdGVw cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0 Y2gKK19idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4 U2NhbkJhdGNoIHByaW9yYmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidHByaW9yYmF0Y2ggPSBCVEJhdGNoR2V0 RGF0YShwcmlvcmJhdGNoKTsKIAlCbG9ja051bWJlciBibGtubywKIAkJCQlsYXN0Y3VycmJsa25v OwotCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qIEJlZm9y ZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQlp ZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0KLQkvKgotCSAq IEJlZm9yZSB3ZSBtb2RpZnkgY3VyclBvcywgbWFrZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBp ZiB0aGVyZSB3YXMgYQotCSAqIG1hcmsgcG9zaXRpb24gdGhhdCBuZWVkcyBpdC4KLQkgKi8KLQlp ZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qIGJ1bXAgcGluIG9uIGN1cnJlbnQg YnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1hcmsgYnVmZmVyICovCi0JCWlmIChCVFNjYW5Qb3NJ c1Bpbm5lZChzby0+Y3VyclBvcykpCi0JCQlJbmNyQnVmZmVyUmVmQ291bnQoc28tPmN1cnJQb3Mu YnVmKTsKLQkJbWVtY3B5KCZzby0+bWFya1BvcywgJnNvLT5jdXJyUG9zLAotCQkJICAgb2Zmc2V0 b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCSAgIHNvLT5jdXJyUG9zLmxhc3RJdGVt ICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKLQkJaWYgKHNvLT5tYXJrVHVwbGVzKQotCQkJbWVt Y3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3VyclR1cGxlcywKLQkJCQkgICBzby0+Y3VyclBvcy5u ZXh0VHVwbGVPZmZzZXQpOwotCQlzby0+bWFya1Bvcy5pdGVtSW5kZXggPSBzby0+bWFya0l0ZW1J bmRleDsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQotCQkvKgotCQkgKiBJZiB3ZSdyZSBq dXN0IGFib3V0IHRvIHN0YXJ0IHRoZSBuZXh0IHByaW1pdGl2ZSBpbmRleCBzY2FuCi0JCSAqIChw b3NzaWJsZSB3aXRoIGEgc2NhbiB0aGF0IGhhcyBhcnJheXMga2V5cywgYW5kIG5lZWRzIHRvIHNr aXAgdG8KLQkJICogY29udGludWUgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24pLCBtb3Jl TGVmdC9tb3JlUmlnaHQgb25seQotCQkgKiBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSBjdXJyZW50 IHByaW1pdGl2ZSBpbmRleCBzY2FuLiAgVGhleSBtdXN0Ci0JCSAqIG5ldmVyIGJlIHRha2VuIHRv IGluZGljYXRlIHRoYXQgdGhlIHRvcC1sZXZlbCBpbmRleCBzY2FuIGhhcyBlbmRlZAotCQkgKiAo dGhhdCB3b3VsZCBiZSB3cm9uZykuCi0JCSAqCi0JCSAqIFdlIGNvdWxkIGhhbmRsZSB0aGlzIGNh c2UgYnkgdHJlYXRpbmcgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyBhcwotCQkgKiBtYXJrUG9zIHN0 YXRlLiAgQnV0IGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBhcnJheSBzdGF0ZSBsaWtlIHRoaXMK LQkJICogd291bGQgYWRkIGNvbXBsZXhpdHkuICBJbnN0ZWFkLCB3ZSBqdXN0IHVuc2V0IG1hcmtQ b3MncyBjb3B5IG9mCi0JCSAqIG1vcmVSaWdodCBvciBtb3JlTGVmdCAod2hpY2hldmVyIG1pZ2h0 IGJlIGFmZmVjdGVkKSwgd2hpbGUgbWFraW5nCi0JCSAqIGJ0cmVzdHJwb3MgcmVzZXQgdGhlIHNj YW4ncyBhcnJheXMgdG8gdGhlaXIgaW5pdGlhbCBzY2FuIHBvc2l0aW9ucy4KLQkJICogSW4gZWZm ZWN0LCBidHJlc3RycG9zIGxlYXZlcyBhZHZhbmNpbmcgdGhlIGFycmF5cyB1cCB0byB0aGUgZmly c3QKLQkJICogX2J0X3JlYWRwYWdlIGNhbGwgKHRoYXQgdGFrZXMgcGxhY2UgYWZ0ZXIgaXQgaGFz IHJlc3RvcmVkIG1hcmtQb3MpLgotCQkgKi8KLQkJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCi0JCXsK LQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHNvLT5jdXJyUG9zLmRpcikpCi0JCQkJc28t Pm1hcmtQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQkJCWVsc2UKLQkJCQlzby0+bWFya1Bvcy5tb3Jl TGVmdCA9IHRydWU7Ci0JCX0KLQotCQkvKiBtYXJrL3Jlc3RvcmUgbm90IHN1cHBvcnRlZCBieSBw YXJhbGxlbCBzY2FucyAqLwotCQlBc3NlcnQoIXNjYW4tPnBhcmFsbGVsX3NjYW4pOwotCX0KLQot CUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOworCWJvb2wJCW1vcmVJbkRpcjsK IAogCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KIAlpZiAoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpKQotCQlibGtubyA9IHNvLT5jdXJyUG9zLm5leHRQYWdlOworCQli bGtubyA9IGJ0cHJpb3JiYXRjaC0+bmV4dFBhZ2U7CiAJZWxzZQotCQlibGtubyA9IHNvLT5jdXJy UG9zLnByZXZQYWdlOwotCWxhc3RjdXJyYmxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKKwkJ Ymxrbm8gPSBidHByaW9yYmF0Y2gtPnByZXZQYWdlOworCWxhc3RjdXJyYmxrbm8gPSBidHByaW9y YmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRpciA9IFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly KSA/CisJCWJ0cHJpb3JiYXRjaC0+bW9yZVJpZ2h0IDogYnRwcmlvcmJhdGNoLT5tb3JlTGVmdDsK IAogCS8qCi0JICogQ2FuY2VsIHByaW1pdGl2ZSBpbmRleCBzY2FucyB0aGF0IHdlcmUgc2NoZWR1 bGVkIHdoZW4gdGhlIGNhbGwgdG8KLQkgKiBfYnRfcmVhZHBhZ2UgZm9yIGN1cnJQb3MgaGFwcGVu ZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8gdGhlCi0JICogb25lIHRoYXQgd2Un cmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5 Ci0JICoga2V5cyBhcy1pcywgc2luY2UgdGhlIG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5j ZSB0aGVtLikKKwkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5zIHRoYXQgd2VyZSBzY2hl ZHVsZWQgd2hlbiBwcmlvcmJhdGNoJ3MgY2FsbAorCSAqIHRvIF9idF9yZWFkcGFnZSBoYXBwZW5l ZCB0byB1c2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lIHRoYXQKKwkgKiB3ZSdy ZSBzdGVwcGluZyBpbiBub3cuICAoSXQncyBva2F5IHRvIGxlYXZlIHRoZSBzY2FuJ3MgYXJyYXkg a2V5cworCSAqIGFzLWlzLCBzaW5jZSB0aGUgbmV4dCBfYnRfcmVhZHBhZ2Ugd2lsbCBhZHZhbmNl IHRoZW0uKQogCSAqLwotCWlmIChzby0+Y3VyclBvcy5kaXIgIT0gZGlyKQorCWlmIChwcmlvcmJh dGNoLT5kaXIgIT0gZGlyKQogCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CiAKKwkvKgorCSAq IEZvciBiaXRtYXAgc2NhbiBjYWxsZXJzLCByZWxlYXNlIHRoZSBwcmlvciBiYXRjaCBub3cgc28g dGhhdAorCSAqIF9idF9yZWFkbmV4dHBhZ2UgY2FuIHJldXNlIGl0cyBtZW1vcnkuICBUaGlzIHdh eSBiaXRtYXAgc2NhbnMgbmV2ZXIKKwkgKiBuZWVkIG1vcmUgdGhhbiBvbmUgYmF0Y2ggYWxsb2Nh dGlvbi4KKwkgKi8KKwlpZiAoIXNjYW4tPnVzZWJhdGNocmluZykKKwkJaW5kZXhhbV91dGlsX2Jh dGNoX3JlbGVhc2Uoc2NhbiwgcHJpb3JiYXRjaCk7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8 ICFtb3JlSW5EaXIpCisJeworCQkvKgorCQkgKiBwcmlvcmJhdGNoJ3MgcGFnZSBpcyBrbm93biB0 byBiZSB0aGUgZmluYWwgbGVhZiBwYWdlIHdpdGggbWF0Y2hlcworCQkgKiBpbiB0aGlzIHNjYW4g ZGlyZWN0aW9uIChpdHMgX2J0X3JlYWRwYWdlIGNhbGwgZmlndXJlZCB0aGF0IG91dCkuCisJCSAq CisJCSAqIE5vdGU6IGlmIHNvLT5uZWVkUHJpbVNjYW4gaXMgc2V0LCB0aGVuIHByaW9yYmF0Y2gn cyBsZWFmIHBhZ2UgaXMKKwkJICogYWN0dWFsbHkganVzdCB0aGUgZmluYWwgcGFnZSBmb3IgdGhl IGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4KKwkJICogaW4gdGhpcyBzY2FuIGRpcmVjdGlv biAodGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpLgorCQkgKi8KKwkJX2J0X3Bh cmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNj YW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5w YXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxr bm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZm IHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCiAJcmV0dXJuIF9idF9yZWFkbmV4dHBh Z2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCkBAIC0xNzMy LDczICsxNjQwLDkxIEBAIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogICogdG8gc3RvcCB0aGUgc2NhbiBvbiB0aGlzIHBhZ2UgYnkgY2FsbGluZyBf YnRfY2hlY2trZXlzIGFnYWluc3QgdGhlIGhpZ2gKICAqIGtleS4gIFNlZSBfYnRfcmVhZHBhZ2Ug Zm9yIGZ1bGwgZGV0YWlscy4KICAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSBw aW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KKyAqIE9uIGVudHJ5LCBm aXJzdGJhdGNoIG11c3QgYmUgcGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxp ZCkuCiAgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBi ZWZvcmUgY2FsbGluZyBoZXJlLgogICoKLSAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBz by0+Y3VyclBvcyBhbmQgcmV0YWluZWQgbG9ja3MgYW5kIHBpbnMKLSAqIGFjY29yZGluZyB0byB0 aGUgc2FtZSBydWxlcyBhcyB0aG9zZSBsYWlkIG91dCBmb3IgX2J0X3JlYWRuZXh0cGFnZSBleGl0 LgotICogTGlrZSBfYnRfcmVhZG5leHRwYWdlLCBvdXIgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBp ZiB0aGVyZSBhcmUgYW55IG1hdGNoaW5nCi0gKiByZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rp b24uCisgKiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2ggY29udGFpbmlu ZyBkYXRhIGZyb20gdGhlIG5leHQgcGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qgb25lIG1hdGNo aW5nIGl0ZW0uICBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlCisgKiBnaXZl biBzY2FuIGRpcmVjdGlvbiwgd2UganVzdCByZXR1cm4gTlVMTC4KICAqCiAgKiBXZSBhbHdheXMg cmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwgcmVnYXJkbGVzcyBv ZgogICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJhbGxlbF9yZWxlYXNl IGFzIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCi1fYnRfcmVhZGZpcnN0cGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24g ZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJICBPZmZzZXROdW1iZXIg b2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0Zmlyc3RiYXRjaCA9IEJUQmF0 Y2hHZXREYXRhKGZpcnN0YmF0Y2gpOworCUJsb2NrTnVtYmVyIGJsa25vLAorCQkJCWxhc3RjdXJy Ymxrbm87CiAKLQlzby0+bnVtS2lsbGVkID0gMDsJCQkvKiBqdXN0IHBhcmFub2lhICovCi0Jc28t Pm1hcmtJdGVtSW5kZXggPSAtMTsJCS8qIGRpdHRvICovCi0KLQkvKiBJbml0aWFsaXplIHNvLT5j dXJyUG9zIGZvciB0aGUgZmlyc3QgcGFnZSAocGFnZSBpbiBzby0+Y3VyclBvcy5idWYpICovCisJ LyogSW5pdGlhbGl6ZSBmaXJzdGJhdGNoJ3MgcG9zaXRpb24gZm9yIHRoZSBmaXJzdCBwYWdlICov CiAJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCiAJewogCQlBc3NlcnQoc28tPm51bUFycmF5S2V5cyk7 CiAKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3JlUmln aHQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJh dGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CiAJfQog CWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCXNvLT5jdXJyUG9z Lm1vcmVMZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWJ0 Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQg PSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0J CXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0 ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAl9CiAKIAkvKgog CSAqIEF0dGVtcHQgdG8gbG9hZCBtYXRjaGluZyB0dXBsZXMgZnJvbSB0aGUgZmlyc3QgcGFnZS4K IAkgKgotCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5n IHRoZSBzby0+Y3VyclBvcyBmaWVsZHMuCisJICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxs IGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIGZpcnN0YmF0Y2ggZmllbGRzLgogCSAqIF9idF9yZWFk cGFnZSBhbHNvIHJlbGVhc2VzIHBhcmFsbGVsIHNjYW4gKGV2ZW4gd2hlbiBpdCByZXR1cm5zIGZh bHNlKS4KIAkgKi8KLQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgb2ZmbnVtLCB0cnVlKSkK KwlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIGRpciwgb2ZmbnVtLCB0cnVlKSkK IAl7Ci0JCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0KLQkJLyoKLQkJICog X2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUgcGlu KSBvbgotCQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUg cmV0dXJuaW5nIHR1cGxlcy4KLQkJICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+ Y3VyclBvcykpOwotCQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4ocmVsLCBzbyk7Ci0JCXJl dHVybiB0cnVlOworCQkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBp biBmaXJzdGJhdGNoLml0ZW1zW10gKi8KKwkJX2J0X2JhdGNoX3VubG9jayhzY2FuLCBmaXJzdGJh dGNoLCBidGZpcnN0YmF0Y2gtPmJ1Zik7CisJCXJldHVybiBmaXJzdGJhdGNoOwogCX0KIAotCS8q IFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBzby0+Y3Vy clBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5jdXJy UG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRoZSBw YWdlICovCisJX2J0X3JlbGJ1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBidGZpcnN0YmF0Y2gtPmJ1 Zik7CiAKLQkvKiBDYWxsIF9idF9yZWFkbmV4dHBhZ2UgdXNpbmcgaXRzIF9idF9zdGVwcGFnZSB3 cmFwcGVyIGZ1bmN0aW9uICovCi0JaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJcmV0 dXJuIGZhbHNlOworCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KKwlpZiAo U2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlibGtubyA9IGJ0Zmlyc3RiYXRjaC0+bmV4 dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IGJ0Zmlyc3RiYXRjaC0+cHJldlBhZ2U7CisJbGFzdGN1 cnJibGtubyA9IGJ0Zmlyc3RiYXRjaC0+Y3VyclBhZ2U7CiAKLQkvKiBfYnRfcmVhZHBhZ2UgZm9y IGEgbGF0ZXIgcGFnZSAobm93IGluIHNvLT5jdXJyUG9zKSBzdWNjZWVkZWQgKi8KLQlyZXR1cm4g dHJ1ZTsKKwlBc3NlcnQoZmlyc3RiYXRjaC0+ZGlyID09IGRpcik7CisKKwlpZiAoYmxrbm8gPT0g UF9OT05FIHx8CisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkgIWJ0Zmlyc3Ri YXRjaC0+bW9yZVJpZ2h0IDogIWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQpKQorCXsKKwkJLyoKKwkJ ICogZmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0 aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdp bGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJaW5kZXhhbV91dGlsX2JhdGNoX3Jl bGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQly ZXR1cm4gTlVMTDsKKwl9CisKKwlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJz dGJhdGNoKTsKKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQg bmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJIV9i dF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJ CXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAq LworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8s IGRpciwgZmFsc2UpOwogfQogCiAvKgpAQCAtMTgwOCwxMDIgKzE3MzQsNjcgQEAgX2J0X3JlYWRm aXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGly ZWN0aW9uIGRpcikKICAqIHByZXZpb3VzbHktc2F2ZWQgcmlnaHQgbGluayBvciBsZWZ0IGxpbmsu ICBsYXN0Y3VycmJsa25vIGlzIHRoZSBwYWdlIHRoYXQKICAqIHdhcyBjdXJyZW50IGF0IHRoZSBw b2ludCB3aGVyZSB0aGUgYmxrbm8gbGluayB3YXMgc2F2ZWQsIHdoaWNoIHdlIHVzZSB0bwogICog cmVhc29uIGFib3V0IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxldGlvbnMgZHVyaW5n IGJhY2t3YXJkcyBzY2Fucy4KLSAqIEluIHRoZSBjb21tb24gY2FzZSB3aGVyZSBzZWl6ZWQ9ZmFs c2UsIGJsa25vIGlzIGVpdGhlciBzby0+Y3VyclBvcy5uZXh0UGFnZQotICogb3Igc28tPmN1cnJQ b3MucHJldlBhZ2UsIGFuZCBsYXN0Y3VycmJsa25vIGlzIHNvLT5jdXJyUG9zLmN1cnJQYWdlLgor ICogYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgbmV4dFBhZ2Ugb3IgcHJldlBhZ2UgKGRlcGVu ZGluZyBvbiB0aGUgY3VycmVudAorICogc2NhbiBkaXJlY3Rpb24pLCBhbmQgbGFzdGN1cnJibGtu byBpcyB0aGUgcHJpb3IgYmF0Y2gncyBjdXJyUGFnZS4KICAqCi0gKiBPbiBlbnRyeSwgc28tPmN1 cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBzby0+Y3VyclBvcy5idWYgbXVz dAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVkZWQgYnkgY2FsbGVyIChub3Rl IHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBiZSByZWFkIGFnYWluIGluIGFs bW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJzCi0gKiB0aGF0IHNlaXplZCB0 aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNzIHNlaXplZD10cnVlOyBzdWNo IGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25vIGFyZ3VtZW50cyBjb21lIGZy b20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNhbGxlcnMganVzdCBwYXNzIHVz IHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhlaXIKLSAqIHNvLT5jdXJyUG9z LCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYpIGNhbiBiZSB1c2VkIHRvIGVu ZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBjYW4gbmV2ZXIg YmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0IGJlIHJlYWQgbmV4dCBkdXJp bmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZpZ3VyZSB0aGF0Ci0gKiBwYXJ0 IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4gKHRoZSBjb3JyZWN0IHBhZ2Ug dG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhlIHNlaXplZD1mYWxzZSBjYWxs ZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICogdW5sZXNzIGJsa25vL3NvLT5j dXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlzIGFscmVhZHkgUF9OT05FLAot ICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+Y3VyclBvcy5tb3JlTGVmdCBp cyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdlIHNob3VsZCBiZSBsb2NrZWQg YnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3MgaXMgdXBkYXRl ZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50ZXJlc3RpbmcgcGFnZSwgYW5k IHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUgYnVmZmVyIG9uCi0gKiBzdWNj ZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5kZXggc2NhbnMsIHdoZW4gd2Ug ZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2NraW5nIFZBQ1VVTSkuCisgKiBP biBzdWNjZXNzIGV4aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2ggY29udGFpbmluZyBkYXRhIGZy b20gdGhlIG5leHQgcGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0ZW0u ICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcworICogaW4gdGhlIGdpdmVuIHNj YW4gZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLgogICoKLSAqIElmIHRoZXJlIGFyZSBu byBtb3JlIG1hdGNoaW5nIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgd2UgaW52YWxp ZGF0ZQotICogc28tPmN1cnJQb3MgKHdoaWxlIGVuc3VyaW5nIGl0IHJldGFpbnMgbm8gbG9ja3Mg b3IgcGlucyksIGFuZCByZXR1cm4gZmFsc2UuCi0gKgotICogV2UgYWx3YXlzIHJlbGVhc2UgdGhl IHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YKLSAqIHN1Y2Nl c3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29uIGFz IHBvc3NpYmxlLgorICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3Qgc2VpemUgdGhlIHNjYW4g YmVmb3JlIGNhbGxpbmcgaGVyZS4gIGJsa25vIGFuZAorICogbGFzdGN1cnJibGtubyBzaG91bGQg Y29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4gIFdlJ2xsIHJlbGVhc2UgdGhlIHNjYW4gYXMKKyAq IHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCitzdGF0aWMgSW5kZXhTY2FuQmF0 Y2gKIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtu bywKLQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJv b2wgc2VpemVkKQorCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9u IGRpciwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxh dGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJ SW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2g7CisJQlRCYXRjaERhdGEgKmJ0bmV3YmF0Y2g7CiAKLQlB c3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyB8fCBzZWl6ZWQpOwot CUFzc2VydCghKGJsa25vID09IFBfTk9ORSAmJiBzZWl6ZWQpKTsKLQlBc3NlcnQoIUJUU2NhblBv c0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQgYmF0 Y2ggKi8KKwluZXdiYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKKwlidG5l d2JhdGNoID0gQlRCYXRjaEdldERhdGEobmV3YmF0Y2gpOwogCiAJLyoKLQkgKiBSZW1lbWJlciB0 aGF0IHRoZSBzY2FuIGFscmVhZHkgcmVhZCBsYXN0Y3VycmJsa25vLCBhIHBhZ2UgdG8gdGhlIGxl ZnQKLQkgKiBvZiBibGtubyAob3IgcmVtZW1iZXIgcmVhZGluZyBhIHBhZ2UgdG8gdGhlIHJpZ2h0 LCBmb3IgYmFja3dhcmRzIHNjYW5zKQorCSAqIG5ld2JhdGNoIHdpbGwgYmUgdGhlIGJhdGNoIGZv ciBsYXN0Y3VycmJsa25vLCBhIHBhZ2UgdG8gdGhlIGxlZnQgb2YKKwkgKiBibGtubyAob3IgdG8g dGhlIHJpZ2h0LCB3aGVuIHRoZSBzY2FuIGlzIG1vdmluZyBiYWNrd2FyZHMpCiAJICovCi0JaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0 cnVlOwotCWVsc2UKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwlidG5ld2JhdGNo LT5tb3JlTGVmdCA9IHRydWU7CisJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAogCWZv ciAoOzspCiAJewogCQlQYWdlCQlwYWdlOwogCQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCi0JCWlm IChibGtubyA9PSBQX05PTkUgfHwKLQkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwot CQkJICFzby0+Y3VyclBvcy5tb3JlUmlnaHQgOiAhc28tPmN1cnJQb3MubW9yZUxlZnQpKQotCQl7 Ci0JCQkvKiBtb3N0IHJlY2VudCBfYnRfcmVhZHBhZ2UgY2FsbCAoZm9yIGxhc3RjdXJyYmxrbm8p IGVuZGVkIHNjYW4gKi8KLQkJCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3Vy cmJsa25vICYmICFzZWl6ZWQpOwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7 Ci0JCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsJLyogaWZmICFzby0+bmVlZFByaW1TY2FuICov Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwot Ci0JCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBuZXZlciBhY3R1YWxseSB2aXNpdCBzby0+Y3VyclBv cyBibGtubyAqLwotCQlpZiAoIXNlaXplZCAmJiBzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwg JiYKLQkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywg ZmFsc2UpKQotCQl7Ci0JCQkvKiB3aG9sZSBzY2FuIGlzIG5vdyBkb25lIChvciBhbm90aGVyIHBy aW1pdGl2ZSBzY2FuIHJlcXVpcmVkKSAqLwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3Vy clBvcyk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KKwkJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkg c2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1TY2FuKTsKKwkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSAm JiBsYXN0Y3VycmJsa25vICE9IFBfTk9ORSk7CiAKIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKIAkJewogCQkJLyogcmVhZCBibGtubywgYnV0IGNoZWNrIGZvciBpbnRlcnJ1cHRz IGZpcnN0ICovCiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQkJc28tPmN1cnJQb3MuYnVm ID0gX2J0X2dldGJ1ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsKKwkJCWJ0bmV3YmF0Y2gtPmJ1ZiA9 IF9idF9nZXRidWYocmVsLCBibGtubywgQlRfUkVBRCk7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQkv KiByZWFkIGJsa25vLCBhdm9pZGluZyByYWNlIChhbHNvIGNoZWNrcyBmb3IgaW50ZXJydXB0cykg Ki8KLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwg JmJsa25vLAorCQkJYnRuZXdiYXRjaC0+YnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQo cmVsLCAmYmxrbm8sCiAJCQkJCQkJCQkJCQkJCSBsYXN0Y3VycmJsa25vKTsKLQkJCWlmIChzby0+ Y3VyclBvcy5idWYgPT0gSW52YWxpZEJ1ZmZlcikKKwkJCWlmIChidG5ld2JhdGNoLT5idWYgPT0g SW52YWxpZEJ1ZmZlcikKIAkJCXsKIAkJCQkvKiBtdXN0IGhhdmUgYmVlbiBhIGNvbmN1cnJlbnQg ZGVsZXRpb24gb2YgbGVmdG1vc3QgcGFnZSAqLwotCQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28t PmN1cnJQb3MpOwogCQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQkJCXJldHVybiBmYWxz ZTsKKwkJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQkJ cmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0KIAotCQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3Vy clBvcy5idWYpOworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidG5ld2JhdGNoLT5idWYpOwogCQlv cGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJCWxhc3RjdXJyYmxrbm8gPSBibGtubzsK IAkJaWYgKGxpa2VseSghUF9JR05PUkUob3BhcXVlKSkpCkBAIC0xOTExLDE3ICsxODAyLDE3IEBA IF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywK IAkJCS8qIHNlZSBpZiB0aGVyZSBhcmUgYW55IG1hdGNoZXMgb24gdGhpcyBwYWdlICovCiAJCQlp ZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0 aGlzIHdpbGwgY2xlYXIgbW9yZVJpZ2h0IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9y ZWFkcGFnZShzY2FuLCBkaXIsIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIHNlaXplZCkpCisJCQkJ aWYgKF9idF9yZWFkcGFnZShzY2FuLCBuZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkgUF9GSVJTVERB VEFLRVkob3BhcXVlKSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+ Y3VyclBvcy5uZXh0UGFnZTsKKwkJCQlibGtubyA9IGJ0bmV3YmF0Y2gtPm5leHRQYWdlOwogCQkJ fQogCQkJZWxzZQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZUxl ZnQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUGFn ZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdl KHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNvLT5jdXJyUG9zLnBy ZXZQYWdlOworCQkJCWJsa25vID0gYnRuZXdiYXRjaC0+cHJldlBhZ2U7CiAJCQl9CiAJCX0KIAkJ ZWxzZQpAQCAtMTkzNiwxOSArMTgyNywzOCBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCX0KIAogCQkvKiBubyBtYXRjaGluZyB0dXBs ZXMgb24gdGhpcyBwYWdlICovCi0JCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwot CQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiByZWxlYXNlZCBieSBfYnRfcmVhZHBhZ2UgKG9yIGJ5IHVz KSAqLworCQlfYnRfcmVsYnVmKHJlbCwgYnRuZXdiYXRjaC0+YnVmKTsKKworCQkvKiBDb250aW51 ZSB0aGUgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbj8gKi8KKwkJaWYgKGJsa25vID09IFBfTk9ORSB8 fAorCQkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCQkgIWJ0bmV3YmF0Y2gtPm1v cmVSaWdodCA6ICFidG5ld2JhdGNoLT5tb3JlTGVmdCkpCisJCXsKKwkJCS8qCisJCQkgKiBibGtu byBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2gg aWYKKwkJCSAqIHNvLT5uZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVl IGluIF9idF9maXJzdCkKKwkJCSAqLworCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQlp bmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVM TDsKKwkJfQorCisJCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQg bmV4dCBibGtubyAqLworCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCQkh X2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkK KwkJeworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJ cmV0dXJuIE5VTEw7CQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8K KwkJfQorCisJCWZpcnN0cGFnZSA9IGZhbHNlOwkJLyogbmV4dCBwYWdlIGNhbm5vdCBiZSBmaXJz dCAqLwogCX0KIAotCS8qCi0JICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxv Y2sgKGFuZCBtYXliZSB0aGUgcGluKSBvbgotCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJh dGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCSAqLwotCUFzc2VydChzby0+ Y3VyclBvcy5jdXJyUGFnZSA9PSBibGtubyk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNv LT5jdXJyUG9zKSk7Ci0JX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJlbCwgc28pOworCS8q IF9idF9yZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIG5ld2JhdGNoLml0ZW1z W10gKi8KKwlBc3NlcnQoYnRuZXdiYXRjaC0+Y3VyclBhZ2UgPT0gYmxrbm8pOworCV9idF9iYXRj aF91bmxvY2soc2NhbiwgbmV3YmF0Y2gsIGJ0bmV3YmF0Y2gtPmJ1Zik7CiAKLQlyZXR1cm4gdHJ1 ZTsKKwlyZXR1cm4gbmV3YmF0Y2g7CiB9CiAKIC8qCkBAIC0yMTc0LDI1ICsyMDg0LDI0IEBAIF9i dF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0 KQogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVm b3JlIGNhbGxpbmcgaGVyZS4KICAqIEV4aXQgY29uZGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9y IF9idF9maXJzdCgpLgogICovCi1zdGF0aWMgYm9vbAotX2J0X2VuZHBvaW50KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKK19idF9l bmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5C YXRjaCBmaXJzdGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247 Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0 Y2hEYXRhICpidGZpcnN0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShmaXJzdGJhdGNoKTsKIAlQYWdl CQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIHN0YXJ0OwogCi0J QXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KCFzby0+bmVl ZFByaW1TY2FuKTsKKwlBc3NlcnQoISgoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWUpLT5uZWVk UHJpbVNjYW4pOwogCiAJLyoKIAkgKiBTY2FuIGRvd24gdG8gdGhlIGxlZnRtb3N0IG9yIHJpZ2h0 bW9zdCBsZWFmIHBhZ2UuICBUaGlzIGlzIGEgc2ltcGxpZmllZAogCSAqIHZlcnNpb24gb2YgX2J0 X3NlYXJjaCgpLgogCSAqLwotCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVs LCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKKwlidGZpcnN0YmF0Y2gtPmJ1ZiA9 IF9idF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsK IAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICghQnVmZmVySXNW YWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpCiAJewogCQkvKgogCQkgKiBFbXB0eSBpbmRleC4gTG9j ayB0aGUgd2hvbGUgcmVsYXRpb24sIGFzIG5vdGhpbmcgZmluZXIgdG8gbG9jawpAQCAtMjIwMyw3 ICsyMTEyLDcgQEAgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+ Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0Zmlyc3RiYXRjaC0+YnVmKTsK IAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJQXNzZXJ0KFBfSVNMRUFGKG9wYXF1 ZSkpOwogCkBAIC0yMjI5LDkgKzIxMzgsNSBAQCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkvKgogCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUg Zmlyc3QgcGFnZSBvZiB0aGUgc2Nhbi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmlyc3RwYWdlKHNj YW4sIHN0YXJ0LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2Fu LCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZp cnN0YmF0Y2gsIHN0YXJ0LCBkaXIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5j CmluZGV4IDliMDkxODU4OS4uNzZiMzgzMDFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1 dGlscy5jCkBAIC0xOSwxNyArMTksMTMgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIK ICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9ucy5oIgotI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2Fu LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKLSNpbmNsdWRlICJjb21tb24vaW50 LmgiCi0jaW5jbHVkZSAibGliL3F1bmlxdWUuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2lu Y2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbnQJX2J0X2NvbXBhcmVfaW50KGNvbnN0 IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CiBzdGF0aWMgaW50CV9idF9rZWVwX25hdHRzKFJl bGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwKIAkJCQkJCSAgIEluZGV4VHVwbGUgZmly c3RyaWdodCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5KTsKIApAQCAtMTQ0LDI0NyArMTQwLDYgQEAg X2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCkKIAlyZXR1cm4ga2V5 OwogfQogCi0vKgotICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5cwot ICovCi1zdGF0aWMgaW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZv aWQgKnZiKQotewotCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOwotCWludAkJCWIgPSAq KChjb25zdCBpbnQgKikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Ci19Ci0KLS8q Ci0gKiBfYnRfa2lsbGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGluZGV4 c2NhbiBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkCi0gKgotICogc2Nhbi0+b3Bh cXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24g YWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2Vu ZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+ IDApLgotICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBzby0+Y3Vy clBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28tPmRyb3BQ aW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICogSXQnbGwg Y29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGluZyBo ZXJlLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0 aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0byBzZXQKLSAqIExQX0RFQUQuICBJZiB0aGUgc2NhbiBp cyBvbmUgdGhhdCBob2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdldCBwYWdlCi0gKiBjb250 aW51b3VzbHkgZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMgdW50aWwgYXBwbHlpbmcg dGhpcyBmdW5jdGlvbgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGluIHNjYW4pLCBWQUNVVU0g Y2Fubm90IGhhdmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCi0gKiBwYWdlLCBzbyB0aGUgcGFn ZSdzIFRJRHMgY2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8gcmlz awotICogdGhhdCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVucyB0 byB1c2UgYSByZWN5Y2xlZCBUSUQKLSAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRoIHRo ZSBzYW1lIFRJRCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQotICogcGFnZSkuICBXZSBj YW4ndCByZWx5IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBlYWdl cmx5Ci0gKiAoc28tPmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9u IHNldHRpbmcgTFBfREVBRCBiaXRzIG9uCi0gKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdCBjaGFu Z2VkIHNpbmNlIGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgotICogV2UgdG90 YWxseSBnaXZlIHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNo YW5nZWQuCi0gKgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFzby0+ZHJv cFBpbiBzY2FucywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCi0gKiBXZSBjb3BlIHdpdGggY2FzZXMg d2hlcmUgaXRlbXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElmIGFuCi0g KiBpdGVtIGhhcyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxpdCwgd2Un bGwgZmFpbCB0byBmaW5kIGl0Ci0gKiBhbmQganVzdCBnaXZlIHVwIG9uIGl0LgotICovCi12b2lk Ci1fYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlSZWxhdGlvbglyZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKLQlQYWdlCQlwYWdlOwotCUJUUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0 TnVtYmVyIG1pbm9mZjsKLQlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9 IHNvLT5udW1LaWxsZWQ7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0JQnVmZmVy CQlidWY7Ci0KLQlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFs aWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOyAv KiBjYW4ndCBiZSBhIGJpdG1hcCBpbmRleCBzY2FuICovCi0KLQkvKiBBbHdheXMgaW52YWxpZGF0 ZSBzby0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3VyclBvcyAqLwotCXNvLT5u dW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBzby0+ a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAqIGxvb3AgYmVsb3cgZXhw ZWN0cyB0aGlzICh3aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxlcywgYXQgbGVhc3QpLgot CSAqIHNvLT5raWxsZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiBy ZXR1cm5lZCBpdGVtcyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBzY2FucyBtaWdodCBoYXZl IGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoKLQkgKiBTb3J0IGFuZCB1 bmlxdWUtaWZ5IHNvLT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBhbGwgdGhpcy4KLQkgKi8K LQlpZiAobnVtS2lsbGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxsZWRJdGVtcywgbnVtS2ls bGVkLCBzaXplb2YoaW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVtS2lsbGVkID0gcXVuaXF1 ZShzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksCi0JCQkJCQkJX2J0X2Nv bXBhcmVfaW50KTsKLQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyoKLQkJICogV2Ug aGF2ZSBoZWxkIHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGluZGV4IHR1 cGxlcywKLQkJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBwaW4gd2ls bCBoYXZlIHByZXZlbnRlZAotCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5Y2xpbmcg YW55IG9mIHRoZSBUSURzIG9uIHRoZSBwYWdlLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lz UGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJX2J0X2xv Y2tidWYocmVsLCBidWYsIEJUX1JFQUQpOwotCX0KLQllbHNlCi0JewotCQlYTG9nUmVjUHRyCWxh dGVzdGxzbjsKLQotCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0J CWJ1ZiA9IF9idF9nZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVBRCk7Ci0K LQkJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0JCUFzc2VydChzby0+Y3Vy clBvcy5sc24gPD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9zLmxzbiAhPSBsYXRlc3Rs c24pCi0JCXsKLQkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KLQkJCV9idF9y ZWxidWYocmVsLCBidWYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogVW5tb2RpZmllZCwgaGlu dGluZyBpcyBzYWZlICovCi0JfQotCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKLQlvcGFx dWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3Bh cXVlKTsKLQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwotCi0JLyogSXRl cmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLwotCWZv ciAoaW50IGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlpdGVtSW5kZXgg PSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtpdGVtID0gJnNvLT5jdXJy UG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0JCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRlbS0+aW5k ZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0g JiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0JCUFzc2VydChp ID09IDAgfHwKLQkJCSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRl bXNbaSAtIDFdXS5pbmRleE9mZnNldCk7Ci0KLQkJaWYgKG9mZm51bSA8IG1pbm9mZikKLQkJCWNv bnRpbnVlOwkJCS8qIHB1cmUgcGFyYW5vaWEgKi8KLQkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYp Ci0JCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCQkJ SW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsK LQkJCWJvb2wJCWtpbGx0dXBsZSA9IGZhbHNlOwotCi0JCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGlu ZyhpdHVwbGUpKQotCQkJewotCQkJCWludAkJCXBpID0gaSArIDE7Ci0JCQkJaW50CQkJbnBvc3Rp bmcgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKLQkJCQlpbnQJCQlqOwotCi0JCQkJ LyoKLQkJCQkgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBh bG1vc3QgYW55IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRoZSAhc28t PmRyb3BQaW4gY2FzZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgcG9zdGlu ZyBsaXN0IHR1cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAqIHR1cGxlIHdoZW4gd2Ug Zmlyc3QgZW5jb3VudGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8KLQkJCQlmb3IgKGogPSAw OyBqIDwgbnBvc3Rpbmc7IGorKykKLQkJCQl7Ci0JCQkJCUl0ZW1Qb2ludGVyIGl0ZW0gPSBCVHJl ZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKLQotCQkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1 YWxzKGl0ZW0sICZraXRlbS0+aGVhcFRpZCkpCi0JCQkJCQlicmVhazsJLyogb3V0IG9mIHBvc3Rp bmcgbGlzdCBsb29wICovCi0KLQkJCQkJLyoKLQkJCQkJICoga2l0ZW0gbXVzdCBoYXZlIG1hdGNo aW5nIG9mZm51bSB3aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJCQkJICogdGhvdWdoIG9ubHkgaW4g dGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0Ci0JCQkJCSAqIGhhdmUgYmVlbiBj b25jdXJyZW50bHkgbW9kaWZpZWQKLQkJCQkJICovCi0JCQkJCUFzc2VydChraXRlbS0+aW5kZXhP ZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7Ci0KLQkJCQkJLyoKLQkJCQkJICogUmVh ZC1haGVhZCB0byBsYXRlciBraXRlbXMgaGVyZS4KLQkJCQkJICoKLQkJCQkJICogV2UgcmVseSBv biB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0gaGVyZQotCQkJCQkgKiB3 aWxsIHByZXZlbnQgdXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGluZyBsaXN0IHR1cGxlCi0J CQkJCSAqIGZ1bGx5IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0IGhlYXAgVElEIGluIG5l eHQKLQkJCQkJICogbG9vcCBpdGVyYXRpb24uCi0JCQkJCSAqCi0JCQkJCSAqIElmLCBvbiB0aGUg b3RoZXIgaGFuZCwgdGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4KLQkJCQkJICogdGhlIHBv c3RpbmcgbGlzdCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAotCQkJCQkgKiByZWdhcmRs ZXNzIChpLmUuIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFzdAotCQkJCQkgKiBraXRl bSBpcyBhbHNvIHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxlCi0JCQkJ CSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4KLQkJCQkJ ICovCi0JCQkJCWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5jdXJyUG9z Lml0ZW1zW3NvLT5raWxsZWRJdGVtc1twaSsrXV07Ci0JCQkJfQotCi0JCQkJLyoKLQkJCQkgKiBE b24ndCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0 bwotCQkJCSAqIGF2b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1zIHRoYXQgcmVsYXRlIHRvIHRo ZSBzYW1lCi0JCQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMgbWljcm8tb3B0 aW1pemF0aW9uIGhhcmRseQotCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRoZXIgaXRlcmF0 aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3AKLQkJCQkgKiB3aWxsIGZhaWwgdG8gbWF0Y2ggb24g dGhpcyBzYW1lIHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKLQkJCQkgKiBUSUQgaW5zdGVhZCwg c28gd2UnbGwgYWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKLQkJCQkgKiB0dXBsZSBw cmV0dHkgcXVpY2tseS4pCi0JCQkJICovCi0JCQkJaWYgKGogPT0gbnBvc3RpbmcpCi0JCQkJCWtp bGx0dXBsZSA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1 cGxlLT50X3RpZCwgJmtpdGVtLT5oZWFwVGlkKSkKLQkJCQlraWxsdHVwbGUgPSB0cnVlOwotCi0J CQkvKgotCQkJICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFscmVhZHku ICBTaW5jZSB0aGlzCi0JCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcgYSBidWZmZXIgbG9jayBw b3NzaWJseSBpbiBzaGFyZWQgbW9kZSwKLQkJCSAqIGl0J3MgcG9zc2libGUgdGhhdCBtdWx0aXBs ZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzCi0JCQkgKiBzaW11bHRhbmVvdXNseSwgbGVh ZGluZyB0byBtdWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQKLQkJCSAqIHRvIFdB TCAoaWYgd2FsX2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNo Ci0JCQkgKiBpcyB1bmRlc2lyYWJsZS4KLQkJCSAqLwotCQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRl bUlkSXNEZWFkKGlpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJewot CQkJCQkvKgotCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNr IGlmIHdlIGNhbgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEg c2hhcmUgbG9jay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBv aW50IGNvbnRpbnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJp dHMoYnVmKSkKLQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyogZm91bmQg dGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLwotCQkJCUl0ZW1JZE1hcmtEZWFkKGlp ZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVhazsJCQkvKiBvdXQgb2Yg aW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQo b2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxh dGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LgotCSAqCi0JICogV2hlbmV2ZXIgd2Ug bWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICogQlRQX0hB U19HQVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhh dCB3ZQotCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3Bh Y2UgaW5kZXhlcy4pCi0JICovCi0JaWYgKGtpbGxlZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1ZS0+ YnRwb19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7Ci0JCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRz KGJ1ZiwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlpZiAoIXNvLT5kcm9wUGlu KQotCQlfYnRfdW5sb2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9idF9yZWxidWYocmVsLCBi dWYpOwotfQotCi0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIG1hbmFnZSBhIHNoYXJl ZC1tZW1vcnkgYXJlYSBpbiB3aGljaCB3ZSB0cmFjawogICogYXNzaWdubWVudCBvZiAidmFjdXVt IGN5Y2xlIElEcyIgdG8gY3VycmVudGx5LWFjdGl2ZSBidHJlZSB2YWN1dW1pbmcKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnR4bG9nLmMKaW5kZXggZGZmN2QyODZmLi4zYmM1ZTVjY2QgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCkBAIC0xMDk1LDE1ICsxMDk1LDE1IEBAIGJ0cmVlX21h c2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBidHJl ZSBsZWFmIHBhZ2VzLCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIExQX0ZMQUdTIHdpdGhv dXQKIAkJICogZW1pdHRpbmcgYW55IFdBTCByZWNvcmQuIEhlbmNlLCBtYXNrIHRoZSBsaW5lIHBv aW50ZXIgZmxhZ3MuIFNlZQotCQkgKiBfYnRfa2lsbGl0ZW1zKCksIF9idF9jaGVja191bmlxdWUo KSBmb3IgZGV0YWlscy4KKwkJICogYnRraWxsaXRlbXNiYXRjaCgpLCBfYnRfY2hlY2tfdW5pcXVl KCkgZm9yIGRldGFpbHMuCiAJCSAqLwogCQltYXNrX2xwX2ZsYWdzKHBhZ2UpOwogCX0KIAogCS8q CiAJICogQlRQX0hBU19HQVJCQUdFIGlzIGp1c3QgYW4gdW4tbG9nZ2VkIGhpbnQgYml0LiBTbywg bWFzayBpdC4gU2VlCi0JICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZSgpLCBfYnRfa2ls bGl0ZW1zKCksIGFuZCBfYnRfY2hlY2tfdW5pcXVlKCkKLQkgKiBmb3IgZGV0YWlscy4KKwkgKiBf YnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKCksIGJ0a2lsbGl0ZW1zYmF0Y2goKSwgYW5kCisJ ICogX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCSAqLwogCW1hc2tvcGFxLT5idHBv X2ZsYWdzICY9IH5CVFBfSEFTX0dBUkJBR0U7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRp bHMuYwppbmRleCA5ZjUzNzliODcuLmRjOTlmYzA4NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYwpAQCAtODgsMTAgKzg4LDEyIEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJH UykKIAkJLmFtYmVnaW5zY2FuID0gc3BnYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBzcGdyZXNj YW4sCiAJCS5hbWdldHR1cGxlID0gc3BnZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwK KwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1yZWxlYXNlYmF0Y2ggPSBOVUxMLAog CQkuYW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBzcGdlbmRzY2Fu LAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3Ny ZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5p dHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYwppbmRleCBiZWQ2NTg3YzguLjRlMDViZDc3MCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4 cGxhaW4uYwpAQCAtMTM1LDcgKzEzNSw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcmVjdXJzaXZlX3Vu aW9uX2luZm8oUmVjdXJzaXZlVW5pb25TdGF0ZSAqcnN0YXRlLAogc3RhdGljIHZvaWQgc2hvd19t ZW1vaXplX2luZm8oTWVtb2l6ZVN0YXRlICptc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJ CQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19oYXNoYWdnX2luZm8oQWdn U3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKLXN0YXRpYyB2b2lkIHNob3dfaW5k ZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsK K3N0YXRpYyB2b2lkIHNob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4 cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBfaW5mbyhCaXRtYXBI ZWFwU2NhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMpOwogc3Rh dGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3QgY2hhciAqcWxhYmVsLCBp bnQgd2hpY2gsCkBAIC0xOTcyLDcgKzE5NzIsNyBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBs YW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hvd19p bnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJCQkJ CQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0 YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJl YWs7CiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChJbmRleE9u bHlTY2FuICopIHBsYW4pLT5pbmRleHF1YWwsCkBAIC0xOTg2LDE1ICsxOTg2LDEyIEBAIEV4cGxh aW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxh bi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5 IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlpZiAoZXMtPmFu YWx5emUpCi0JCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkhlYXAgRmV0Y2hlcyIsIE5VTEwsCi0J CQkJCQkJCQkgcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzMiwgMCwgZXMpOwotCQkJc2hv d19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9p bmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBJbmRleFNjYW46 CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhxdWFs b3JpZywKIAkJCQkJCSAgICJJbmRleCBDb25kIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVzKTsK LQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOworCQkJc2hvd19pbmRl eHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfQml0bWFwSGVh cFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEhlYXBTY2FuICopIHBsYW4pLT5iaXRt YXBxdWFsb3JpZywKQEAgLTM4NTgsMTUgKzM4NTUsMTYgQEAgc2hvd19oYXNoYWdnX2luZm8oQWdn U3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogfQogCiAvKgotICogU2hvdyB0aGUg dG90YWwgbnVtYmVyIG9mIGluZGV4IHNlYXJjaGVzIGZvciBhCisgKiBTaG93IGluZGV4IHNjYW4g cmVsYXRlZCBleGVjdXRvciBpbnN0cnVtZW50YXRpb24gZm9yIGEKICAqIEluZGV4U2Nhbi9JbmRl eE9ubHlTY2FuL0JpdG1hcEluZGV4U2NhbiBub2RlCiAgKi8KIHN0YXRpYyB2b2lkCi1zaG93X2lu ZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcykK K3Nob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAq ZXMpCiB7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5zdGF0ZS0+cGxhbjsKIAlTaGFyZWRJbmRleFNj YW5JbnN0cnVtZW50YXRpb24gKlNoYXJlZEluZm8gPSBOVUxMOwotCXVpbnQ2NAkJbnNlYXJjaGVz ID0gMDsKKwl1aW50NjQJCW5zZWFyY2hlcyA9IDAsCisJCQkJbmhlYXBmZXRjaGVzID0gMDsKIAog CWlmICghZXMtPmFuYWx5emUpCiAJCXJldHVybjsKQEAgLTM4ODcsNiArMzg4NSw3IEBAIHNob3df aW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVz KQogCQkJCUluZGV4T25seVNjYW5TdGF0ZSAqaW5kZXhzdGF0ZSA9ICgoSW5kZXhPbmx5U2NhblN0 YXRlICopIHBsYW5zdGF0ZSk7CiAKIAkJCQluc2VhcmNoZXMgPSBpbmRleHN0YXRlLT5pb3NzX0lu c3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCQluaGVhcGZldGNoZXMgPSBpbmRleHN0YXRlLT5pb3Nz X0luc3RydW1lbnQtPm5oZWFwZmV0Y2hlczsKIAkJCQlTaGFyZWRJbmZvID0gaW5kZXhzdGF0ZS0+ aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzkxMCw5ICszOTA5LDEzIEBA IHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3Rh dGUgKmVzKQogCQkJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICp3aW5zdHJ1bWVudCA9ICZTaGFy ZWRJbmZvLT53aW5zdHJ1bWVudFtpXTsKIAogCQkJbnNlYXJjaGVzICs9IHdpbnN0cnVtZW50LT5u c2VhcmNoZXM7CisJCQluaGVhcGZldGNoZXMgKz0gd2luc3RydW1lbnQtPm5oZWFwZmV0Y2hlczsK IAkJfQogCX0KIAorCWlmIChub2RlVGFnKHBsYW4pID09IFRfSW5kZXhPbmx5U2NhbikKKwkJRXhw bGFpblByb3BlcnR5VUludGVnZXIoIkhlYXAgRmV0Y2hlcyIsIE5VTEwsIG5oZWFwZmV0Y2hlcywg ZXMpOworCiAJRXhwbGFpblByb3BlcnR5VUludGVnZXIoIkluZGV4IFNlYXJjaGVzIiwgTlVMTCwg bnNlYXJjaGVzLCBlcyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2lu ZGV4Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggNjM1Njc5 Y2MxLi41NGMyNDAzZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21k cy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC04ODQsNyArODg0 LDcgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCShlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJhY2Nlc3MgbWV0aG9kIFwi JXNcIiBkb2VzIG5vdCBzdXBwb3J0IG11bHRpY29sdW1uIGluZGV4ZXMiLAogCQkJCQkJYWNjZXNz TWV0aG9kTmFtZSkpKTsKLQlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0dXBsZSA9 PSBOVUxMKQorCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwg JiYgYW1Sb3V0aW5lLT5hbWdldGJhdGNoID09IE5VTEwpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFj Y2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRz IiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwppbmRleCA5MGE2OGMwZDEuLjBkZmIwMTMzNyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNBbWkuYwpAQCAtNDI4LDcgKzQyOCw3IEBAIEV4ZWNTdXBwb3J0c01hcmtSZXN0 b3JlKFBhdGggKnBhdGhub2RlKQogCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKIAogCQkJLyoKLQkJ CSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuCisJCQkgKiBOb3Qg YWxsIGluZGV4IHR5cGVzIHN1cHBvcnQgcmVzdG9yaW5nIGEgbWFyawogCQkJICovCiAJCQlyZXR1 cm4gY2FzdE5vZGUoSW5kZXhQYXRoLCBwYXRobm9kZSktPmluZGV4aW5mby0+YW1jYW5tYXJrcG9z OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDlkMDcxZTQ5NS4uM2YwYzg0 NTNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYworKysg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwpAQCAtODE1LDEwICs4MTUsMTIg QEAgY2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50KFJlbGF0aW9uIGhlYXAsIFJl bGF0aW9uIGluZGV4LAogcmV0cnk6CiAJY29uZmxpY3QgPSBmYWxzZTsKIAlmb3VuZF9zZWxmID0g ZmFsc2U7Ci0JaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRleCwgJkRpcnR5 U25hcHNob3QsIE5VTEwsIGluZG5rZXlhdHRzLCAwKTsKKwlpbmRleF9zY2FuID0gaW5kZXhfYmVn aW5zY2FuKGhlYXAsIGluZGV4LCBmYWxzZSwgJkRpcnR5U25hcHNob3QsIE5VTEwsCisJCQkJCQkJ CSBpbmRua2V5YXR0cywgMCk7CiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCBp bmRua2V5YXR0cywgTlVMTCwgMCk7CiAKLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4 X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkKKwl3aGlsZSAodGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAor CQkJCQkJCQkJZXhpc3Rpbmdfc2xvdCkpCiAJewogCQlUcmFuc2FjdGlvbklkIHh3YWl0OwogCQlY TFRXX09wZXIJcmVhc29uX3dhaXQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUmVwbGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5j CmluZGV4IDI0OTdlZTdlZC4uMmY2MzZiYTNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjUmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYwpAQCAtMjA1LDcgKzIwNSw3IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5k ZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCXNrZXlfYXR0b2ZmID0gYnVpbGRfcmVwbGlu ZGV4X3NjYW5fa2V5KHNrZXksIHJlbCwgaWR4cmVsLCBzZWFyY2hzbG90KTsKIAogCS8qIFN0YXJ0 IGFuIGluZGV4IHNjYW4uICovCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwg JnNuYXAsIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJl bCwgaWR4cmVsLCBmYWxzZSwgJnNuYXAsIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKIAogcmV0cnk6 CiAJZm91bmQgPSBmYWxzZTsKQEAgLTIxMyw3ICsyMTMsNyBAQCByZXRyeToKIAlpbmRleF9yZXNj YW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZpbmQg dGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgb3V0c2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9p ZCBleHBlbnNpdmUgZXF1YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9y CkBAIC02NjYsMTIgKzY2NiwxMiBAQCBSZWxhdGlvbkZpbmREZWxldGVkVHVwbGVJbmZvQnlJbmRl eChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJICogbm90IHlldCBjb21taXR0ZWQgb3IgdGhv c2UganVzdCBjb21taXR0ZWQgcHJpb3IgdG8gdGhlIHNjYW4gYXJlCiAJICogZXhjbHVkZWQgaW4g dXBkYXRlX21vc3RfcmVjZW50X2RlbGV0aW9uX2luZm8oKS4KIAkgKi8KLQlzY2FuID0gaW5kZXhf YmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBTbmFwc2hvdEFueSwgTlVMTCwgc2tleV9hdHRvZmYsIDAp OworCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNlLCBTbmFwc2hvdEFu eSwgTlVMTCwgc2tleV9hdHRvZmYsIDApOwogCiAJaW5kZXhfcmVzY2FuKHNjYW4sIHNrZXksIHNr ZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRoZSB0dXBsZSAqLwotCXdo aWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5z bG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2Fu RGlyZWN0aW9uLCBzY2Fuc2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUgZXF1 YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggMmNhODIyY2Y4Li5hODk3N2NjYWMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKQEAgLTIwMiw2 ICsyMDIsNyBAQCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4U2NhblN0YXRlICpu b2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgQml0bWFwSW5kZXhTY2FuU3RhdGUgYW5k IHplcm9lZCBzdGF0cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+ Ymlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5iaXNzX0luc3RydW1l bnQtPm5oZWFwZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggZjg0ZGIwNDc2Li44NGJmZjYwY2UgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzQsMTQgKzM0LDEyIEBACiAjaW5j bHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2lu Y2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVj dXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmgiCiAjaW5jbHVk ZSAiZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIK ICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCkBA IC02NSw3ICs2Myw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQog CVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CiAJVHVw bGVUYWJsZVNsb3QgKnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCiAJLyoKIAkgKiBleHRyYWN0 IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtOTAsMTggKzg3 LDE0IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKiBwYXJh bGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1 cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJ CQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgICBlc3RhdGUt PmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJ CSAgIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3Jk ZXJCeUtleXMpOwogCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKLQotCi0JCS8q IFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0JCW5vZGUtPmlvc3NfU2NhbkRlc2Mt PnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVm ZmVyOworCQlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCQkv KgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFk eSwgZ28gYWhlYWQgYW5kCkBAIC0xMTgsNzggKzExMSwxMCBAQCBJbmRleE9ubHlOZXh0KEluZGV4 T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQg d2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRl eF9nZXRuZXh0X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAodGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIG5vZGUtPmlvc3NfVGFi bGVTbG90KSkKIAl7Ci0JCWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZhbHNlOwotCiAJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJLyoKLQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0 Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCi0JCSAqIHdoaWNoIGFsbCB0 dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCi0JCSAq IHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRh IHNvdXJjZS4KLQkJICoKLQkJICogTm90ZSBvbiBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0czogdmlz aWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90Ci0JCSAqIGxvY2sgdGhlIHZpc2liaWxpdHkg bWFwIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQKLQkJICogaGVyZSBj b3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0IGNhbid0IGJlIHN0YWxlIGVub3Vn aCB0bwotCQkgKiBtYXR0ZXIuCi0JCSAqCi0JCSAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5n IGEgVk0gYml0IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdheSwKLQkJICogYmVjYXVzZSB0aGUg dHVwbGUgaXMgcHJlc2VudCBpbiB0aGUgaW5kZXggcGFnZSBidXQgbm90IHZpc2libGUuIFRoZQot CQkgKiByZWFkaW5nIG9mIHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2Nr IG9uIHRoZSBpbmRleAotCQkgKiBidWZmZXIpIGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0 IG9mIHRoZSBUSUQgaW50byB0aGUgaW5kZXgKLQkJICogKHVzaW5nIGFuIGV4Y2x1c2l2ZSBsb2Nr IG9uIHRoZSBpbmRleCBidWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQKLQkJICogaXMgY2xlYXJl ZCBiZWZvcmUgdXBkYXRpbmcgdGhlIGluZGV4LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhl Ci0JCSAqIGluZGV4IHBhZ2UgYWN0cyBhcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBz dXJlIHRvIHNlZSB0aGUKLQkJICogY2xlYXJlZCBiaXQgaWYgd2Ugc2VlIGEgcmVjZW50bHktaW5z ZXJ0ZWQgVElELgotCQkgKgotCQkgKiBEZWxldGVzIGRvIG5vdCB1cGRhdGUgdGhlIGluZGV4IHBh Z2UgKG9ubHkgVkFDVVVNIHdpbGwgY2xlYXIgb3V0Ci0JCSAqIHRoZSBUSUQpLCBzbyB0aGUgY2xl YXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3QKLQkJICogc2VyaWFsaXplZCB3 aXRoIHRoaXMgdGVzdCBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzCi0JCSAq IHNpZ25pZmljYW50bHkgc3RhbGUuIEhvd2V2ZXIsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRl bGV0ZSByaWdodAotCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxl IHVudGlsIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0 ZW1lbnQgZW5kcyAoaWYgaXQncyBvdXIKLQkJICogdHJhbnNhY3Rpb24pLiBJbiBlaXRoZXIgY2Fz ZSwgdGhlIGxvY2sgb24gdGhlIFZNIGJ1ZmZlciB3aWxsIGhhdmUKLQkJICogYmVlbiByZWxlYXNl ZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcgdGhlIGJpdC4KLQkJ ICogQW5kIGZvciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRp bmcKLQkJICogdHJhbnNhY3Rpb24gKG1ha2luZyB0aGUgdHVwbGUgaW52aXNpYmxlKSwgd2UgbXVz dCBoYXZlIGFjcXVpcmVkCi0JCSAqIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3Rp bmcgYXMgYSByZWFkIGJhcnJpZXIuCi0JCSAqCi0JCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3Vn aCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrCi0JCSAqIHRoZSBWTSBi dWZmZXIsIHdoaWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCi0JCSAqLwot CQlpZiAoIVZNX0FMTF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAotCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVy KSkKLQkJewotCQkJLyoKLQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8g Y2hlY2sgdmlzaWJpbGl0eS4KLQkJCSAqLwotCQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgMSk7 Ci0JCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVTbG90 KSkKLQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVu dHJ5ICovCi0KLQkJCUV4ZWNDbGVhclR1cGxlKG5vZGUtPmlvc3NfVGFibGVTbG90KTsKLQotCQkJ LyoKLQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVy ZSBzaG91bGQgYmUgbm8KLQkJCSAqIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFp biBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMKLQkJCSAqIGJlZW4gZm91bmQuICBJZiB3ZSBkaWQg d2FudCB0byBhbGxvdyB0aGF0LCB3ZSdkIG5lZWQgdG8ga2VlcAotCQkJICogbW9yZSBzdGF0ZSB0 byByZW1lbWJlciBub3QgdG8gY2FsbCBpbmRleF9nZXRuZXh0X3RpZCBuZXh0IHRpbWUuCi0JCQkg Ki8KLQkJCWlmIChzY2FuZGVzYy0+eHNfaGVhcF9jb250aW51ZSkKLQkJCQllbG9nKEVSUk9SLCAi bm9uLU1WQ0Mgc25hcHNob3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMi KTsKLQotCQkJLyoKLQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBw aW4gb24gdGhlIGhlYXAgcGFnZSwgYXMKLQkJCSAqIHJlY29yZGVkIGluIHNjYW5kZXNjLT54c19j YnVmLiAgV2UgY291bGQgcmVsZWFzZSB0aGF0IHBpbiBub3csCi0JCQkgKiBidXQgaXQncyBub3Qg Y2xlYXIgd2hldGhlciBpdCdzIGEgd2luIHRvIGRvIHNvLiAgVGhlIG5leHQgaW5kZXgKLQkJCSAq IGVudHJ5IG1pZ2h0IHJlcXVpcmUgYSB2aXNpdCB0byB0aGUgc2FtZSBoZWFwIHBhZ2UuCi0JCQkg Ki8KLQotCQkJdHVwbGVfZnJvbV9oZWFwID0gdHJ1ZTsKLQkJfQotCiAJCS8qCiAJCSAqIEZpbGwg dGhlIHNjYW4gdHVwbGUgc2xvdCB3aXRoIGRhdGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0 IGJlCiAJCSAqIHByb3ZpZGVkIGluIGVpdGhlciBIZWFwVHVwbGUgb3IgSW5kZXhUdXBsZSBmb3Jt YXQuICBDb25jZWl2YWJseSBhbgpAQCAtMjM4LDE2ICsxNjMsNiBAQCBJbmRleE9ubHlOZXh0KElu ZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJIGVycm1zZygibG9zc3kgZGlz dGFuY2UgZnVuY3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKSkp OwotCi0JCS8qCi0JCSAqIElmIHdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHRoZW4gd2UnbGwg bmVlZCB0byB0YWtlIGEgcHJlZGljYXRlCi0JCSAqIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2Ug aGFkLiAgRm9yIG5vdyB3ZSBkbyB0aGF0IGF0IHBhZ2UgbGV2ZWwuCi0JCSAqLwotCQlpZiAoIXR1 cGxlX2Zyb21faGVhcCkKLQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW5kZXNjLT5oZWFwUmVsYXRp b24sCi0JCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJICBl c3RhdGUtPmVzX3NuYXBzaG90KTsKLQogCQlyZXR1cm4gc2xvdDsKIAl9CiAKQEAgLTQwNywxMyAr MzIyLDYgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQog CWluZGV4UmVsYXRpb25EZXNjID0gbm9kZS0+aW9zc19SZWxhdGlvbkRlc2M7CiAJaW5kZXhTY2Fu RGVzYyA9IG5vZGUtPmlvc3NfU2NhbkRlc2M7CiAKLQkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBwaW4s IGlmIGFueS4gKi8KLQlpZiAobm9kZS0+aW9zc19WTUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQot CXsKLQkJUmVsZWFzZUJ1ZmZlcihub2RlLT5pb3NzX1ZNQnVmZmVyKTsKLQkJbm9kZS0+aW9zc19W TUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JfQotCiAJLyoKIAkgKiBXaGVuIGVuZGluZyBhIHBh cmFsbGVsIHdvcmtlciwgY29weSB0aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBieSB0aGUKIAkgKiB3 b3JrZXIgYmFjayBpbnRvIHNoYXJlZCBtZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2VkIHVw IGJ5IHRoZSBtYWluCkBAIC00MzMsNiArMzQxLDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5k ZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhP bmx5U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNl YXJjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQl3aW5zdHJ1bWVu dC0+bmhlYXBmZXRjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzOwog CX0KIAogCS8qCkBAIC03ODgsMTMgKzY5NywxMiBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxp emVEU00oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9 CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24s Ci0JCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlvc3Nf UmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJ CQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3Jk ZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4pOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dh bnRfaXR1cCA9IHRydWU7Ci0Jbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJ QXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElm IG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVh ZCBhbmQgcGFzcwpAQCAtODU0LDEyICs3NjIsMTIgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFs aXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlvc3NfU2NhbkRl c2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0 aW9uLAotCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5p b3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfSW5zdHJ1bWVudCwK IAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051 bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKLQlub2RlLT5pb3NzX1NjYW5EZXNjLT54 c193YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50 X2l0dXApOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0 aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRl eHNjYW4uYwppbmRleCAzNjMyMGQ3ZDIuLjY3ODIyOTQ3YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleHNjYW4uYwpAQCAtMTA3LDcgKzEwNyw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0 ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMg cGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5z Y2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aXNzX1Jl bGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJ CQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0 cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0xMjgsNyArMTI4 LDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCS8qCiAJICogb2ssIG5vdyB0 aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkgKi8KLQl3 aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QpKQorCXdo aWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkp CiAJewogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCkBAIC0yMDMsNyArMjAzLDcgQEAgSW5k ZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHNlcmlhbGx5IGV4 ZWN1dGluZyBhbiBpbmRleCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCiAJ CSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCi0JCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5v ZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBz aG90LAogCQkJCQkJCQkgICBub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+ aXNzX051bVNjYW5LZXlzLApAQCAtMjYwLDcgKzI2MCw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVy KEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBGZXRjaCBuZXh0IHR1cGxlIGZyb20gdGhlIGlu ZGV4LgogCQkgKi8KIG5leHRfaW5kZXh0dXBsZToKLQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3Qo c2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJaWYgKCF0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKIAkJ ewogCQkJLyoKIAkJCSAqIE5vIG1vcmUgdHVwbGVzIGZyb20gdGhlIGluZGV4LiAgQnV0IHdlIHN0 aWxsIG5lZWQgdG8gZHJhaW4gYW55CkBAIC04MTIsNiArODEyLDcgQEAgRXhlY0VuZEluZGV4U2Nh bihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4 T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5z ZWFyY2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQlBc3NlcnQobm9k ZS0+aXNzX0luc3RydW1lbnQtPm5oZWFwZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpAQCAtMTcy Myw3ICsxNzI0LDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUg Km5vZGUsCiAKIAlub2RlLT5pc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxs ZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0 aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJ CQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2NhbktleXMs CiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCkBAIC0xNzg3LDcgKzE3ODgsNyBA QCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAog CW5vZGUtPmlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5z cy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAor CQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSBub2RlLT5p c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJ IG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVNZXJnZWpvaW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4u YwppbmRleCBjYmNhZTRjNzAuLjliNDNlZDhiNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1lcmdlam9pbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJn ZWpvaW4uYwpAQCAtNTQsOCArNTQsOCBAQAogICoJCXRoZSBpbm5lciAiNSdzIi4gVGhpcyByZXF1 aXJlcyByZXBvc2l0aW9uaW5nIHRoZSBpbm5lciAiY3Vyc29yIgogICoJCXRvIHBvaW50IGF0IHRo ZSBmaXJzdCBpbm5lciAiNSIuIFRoaXMgaXMgZG9uZSBieSAibWFya2luZyIgdGhlCiAgKgkJZmly c3QgaW5uZXIgNSBzbyB3ZSBjYW4gcmVzdG9yZSB0aGUgImN1cnNvciIgdG8gaXQgYmVmb3JlIGpv aW5pbmcKLSAqCQl3aXRoIHRoZSBzZWNvbmQgb3V0ZXIgNS4gVGhlIGFjY2VzcyBtZXRob2QgaW50 ZXJmYWNlIHByb3ZpZGVzCi0gKgkJcm91dGluZXMgdG8gbWFyayBhbmQgcmVzdG9yZSB0byBhIHR1 cGxlLgorICoJCXdpdGggdGhlIHNlY29uZCBvdXRlciA1LiBUaGUgaW5kZXhiYXRjaC5jIGludGVy ZmFjZSBwcm92aWRlcworICoJCXJvdXRpbmVzIHRvIG1hcmsgYW5kIHJlc3RvcmUgdG8gYSB0dXBs ZSBkdXJpbmcgaW5kZXggc2NhbnMuCiAgKgogICoKICAqCQlFc3NlbnRpYWwgb3BlcmF0aW9uIG9m IHRoZSBtZXJnZSBqb2luIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2luZHhwYXRoLmMKaW5kZXggNjdkOWRjMzVmLi5kNjFjMGI2ZjMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAtNDMsNyArNDMsNyBAQAogLyogV2hldGhlciB3 ZSBhcmUgbG9va2luZyBmb3IgcGxhaW4gaW5kZXhzY2FuLCBiaXRtYXAgc2Nhbiwgb3IgZWl0aGVy ICovCiB0eXBlZGVmIGVudW0KIHsKLQlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBh bWdldHR1cGxlICovCisJU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBs ZSBvciBhbWdldGJhdGNoICovCiAJU1RfQklUTUFQU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFt Z2V0Yml0bWFwICovCiAJU1RfQU5ZU0NBTiwJCQkJCS8qIGVpdGhlciBpcyBva2F5ICovCiB9IFNj YW5UeXBlQ29udHJvbDsKQEAgLTc0Nyw3ICs3NDcsNyBAQCBnZXRfaW5kZXhfcGF0aHMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAl7CiAJCUluZGV4UGF0aCAgKmlwYXRoID0g KEluZGV4UGF0aCAqKSBsZmlyc3QobGMpOwogCi0JCWlmIChpbmRleC0+YW1oYXNnZXR0dXBsZSkK KwkJaWYgKGluZGV4LT5hbWhhc2dldGJhdGNoKQogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBp cGF0aCk7CiAKIAkJaWYgKGluZGV4LT5hbWhhc2dldGJpdG1hcCAmJgpAQCAtODM1LDcgKzgzNSw3 IEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJc3dpdGNoIChzY2FudHlwZSkKIAl7CiAJCWNhc2UgU1RfSU5ERVhTQ0FOOgotCQkJaWYgKCFp bmRleC0+YW1oYXNnZXR0dXBsZSkKKwkJCWlmICghaW5kZXgtPmFtaGFzZ2V0YmF0Y2gpCiAJCQkJ cmV0dXJuIE5JTDsKIAkJCWJyZWFrOwogCQljYXNlIFNUX0JJVE1BUFNDQU46CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggYjJmYmQ2YTA4Li42NjVkZGNhNTMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTMxMCwxMSArMzEwLDExIEBAIGdldF9yZWxh dGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBp bmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9IGFtcm91dGluZS0+YW1zZWFyY2hh cnJheTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gYW1yb3V0aW5lLT5hbXNlYXJjaG51bGxz OwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwgPSBhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWw7Ci0J CQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7 CisJCQkJaW5mby0+YW1oYXNnZXRiYXRjaCA9IChhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVM TCB8fAorCQkJCQkJCQkJICAgYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwpOwogCQkJCWlu Zm8tPmFtaGFzZ2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMICYmCiAJ CQkJCXJlbGF0aW9uLT5yZF90YWJsZWFtLT5zY2FuX2JpdG1hcF9uZXh0X3R1cGxlICE9IE5VTEw7 Ci0JCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gKGFtcm91dGluZS0+YW1tYXJrcG9zICE9IE5VTEwg JiYKLQkJCQkJCQkJCSAgYW1yb3V0aW5lLT5hbXJlc3RycG9zICE9IE5VTEwpOworCQkJCWluZm8t PmFtY2FubWFya3BvcyA9IGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMOwogCQkJCWluZm8t PmFtY29zdGVzdGltYXRlID0gYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZTsKIAkJCQlBc3NlcnQo aW5mby0+YW1jb3N0ZXN0aW1hdGUgIT0gTlVMTCk7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBnZXRf cmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJv b2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBmYWxzZTsKIAkJCQlpbmZv LT5hbXNlYXJjaG51bGxzID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGZhbHNl OwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSBmYWxzZTsKKwkJCQlpbmZvLT5hbWhhc2dldGJh dGNoID0gZmFsc2U7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBmYWxzZTsKIAkJCQlpbmZv LT5hbWNhbm1hcmtwb3MgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNvc3Rlc3RpbWF0ZSA9IE5VTEw7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKaW5kZXggMGIxZDgw YjViLi43NmIwZDAzNWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0 aW9uLmMKQEAgLTg5MCw3ICs4OTAsOCBAQCBJc0luZGV4VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5 RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJtYXApCiAJICogVGhlIGdpdmVuIGlu ZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBpbXBsZW1lbnQgImFtZ2V0dHVwbGUiLCB3aGljaCB3aWxs CiAJICogYmUgdXNlZCBsYXRlciB0byBmZXRjaCB0aGUgdHVwbGVzLiAgU2VlIFJlbGF0aW9uRmlu ZFJlcGxUdXBsZUJ5SW5kZXgoKS4KIAkgKi8KLQlpZiAoR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQo aWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwlpZiAo R2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFt Z2V0dHVwbGUgPT0gTlVMTCAmJgorCQlHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJk X3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQlyZXR1cm4gZmFsc2U7 CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0 aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCmluZGV4IGM4MWZiNjFhMC4u ZGRmZDFiNTVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKQEAgLTM2MywxMCArMzYzLDExIEBA IGluZGV4YW1fcHJvcGVydHkoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJUEdfUkVUVVJO X0JPT0wocm91dGluZS0+YW1jbHVzdGVyYWJsZSk7CiAKIAkJCWNhc2UgQU1QUk9QX0lOREVYX1ND QU46Ci0JCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxz ZSk7CisJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMIHx8CisJ CQkJCQkJICAgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1Bf QklUTUFQX1NDQU46Ci0JCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXRiaXRtYXAgPyB0 cnVlIDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0Yml0bWFwICE9 IE5VTEwpOwogCiAJCQljYXNlIEFNUFJPUF9CQUNLV0FSRF9TQ0FOOgogCQkJCVBHX1JFVFVSTl9C T09MKHJvdXRpbmUtPmFtY2FuYmFja3dhcmQpOwpAQCAtMzkyLDcgKzM5Myw4IEBAIGluZGV4YW1f cHJvcGVydHkoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQlQR19SRVRVUk5fQk9PTChyb3V0 aW5lLT5hbWNhbm11bHRpY29sKTsKIAogCQljYXNlIEFNUFJPUF9DQU5fRVhDTFVERToKLQkJCVBH X1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFsc2UpOworCQkJUEdf UkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkgICByb3V0 aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOwogCiAJCWNhc2UgQU1QUk9QX0NBTl9JTkNMVURFOgog CQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5pbmNsdWRlKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Nl bGZ1bmNzLmMKaW5kZXggZDRkYTBlOGRlLi42ZDgwYWUwMDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxm dW5jcy5jCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNsdWRlICJhY2Nlc3MvZ2luLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKLSNpbmNs dWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0 aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfc3RhdGlzdGljLmgiCkBAIC03MTA0LDEwICs3MTAzLDYgQEAgZ2V0X2FjdHVhbF92YXJp YWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCWJvb2wJCWhhdmVfZGF0YSA9IGZhbHNl OwogCVNuYXBzaG90RGF0YSBTbmFwc2hvdE5vblZhY3V1bWFibGU7CiAJSW5kZXhTY2FuRGVzYyBp bmRleF9zY2FuOwotCUJ1ZmZlcgkJdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCUJsb2NrTnVt YmVyIGxhc3RfaGVhcF9ibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKLQlpbnQJCQluX3Zpc2l0 ZWRfaGVhcF9wYWdlcyA9IDA7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCURhdHVtCQl2YWx1ZXNbSU5E RVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZU107CiAJTWVtb3J5Q29u dGV4dCBvbGRjb250ZXh0OwpAQCAtNzE1NSw2MCArNzE1MCwyNiBAQCBnZXRfYWN0dWFsX3Zhcmlh YmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJICogYSBodWdlIGFtb3VudCBvZiB0aW1l IGhlcmUsIHNvIHdlIGdpdmUgdXAgb25jZSB3ZSd2ZSByZWFkIHRvbyBtYW55IGhlYXAKIAkgKiBw YWdlcy4gIFdoZW4gd2UgZmFpbCBmb3IgdGhhdCByZWFzb24sIHRoZSBjYWxsZXIgd2lsbCBlbmQg dXAgdXNpbmcKIAkgKiB3aGF0ZXZlciBleHRyZW1hbCB2YWx1ZSBpcyByZWNvcmRlZCBpbiBwZ19z dGF0aXN0aWMuCisJICoKKwkgKiBYWFggVGhpcyBjYW4ndCB3b3JrIHdpdGggdGhlIG5ldyB0YWJs ZV9pbmRleF9nZXRuZXh0X3Nsb3QgaW50ZXJmYWNlLAorCSAqIHdoaWNoIHNpbXBseSB3b24ndCBy ZXR1cm4gYSB0dXBsZSB0aGF0IGlzbid0IHZpc2libGUgdG8gb3VyIHNuYXBzaG90LgorCSAqIHRh YmxlX2luZGV4X2dldG5leHRfc2xvdCB3aWxsIG5lZWQgc29tZSBraW5kIG9mIGNhbGxiYWNrIHRo YXQgcHJvdmlkZXMKKwkgKiBhIHdheSBmb3IgdGhlIHNjYW4gdG8gZ2l2ZSB1cCB3aGVuIHRoZSBj b3N0cyBzdGFydCB0byBnZXQgb3V0IG9mIGhhbmQuCiAJICovCiAJSW5pdE5vblZhY3V1bWFibGVT bmFwc2hvdChTbmFwc2hvdE5vblZhY3V1bWFibGUsCiAJCQkJCQkJICBHbG9iYWxWaXNUZXN0Rm9y KGhlYXBSZWwpKTsKIAotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5k ZXhSZWwsCisJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsLCBpbmRleFJlbCwg dHJ1ZSwKIAkJCQkJCQkJICZTbmFwc2hvdE5vblZhY3V1bWFibGUsIE5VTEwsCiAJCQkJCQkJCSAx LCAwKTsKLQkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkgc2NhbiAqLwotCWluZGV4X3NjYW4t PnhzX3dhbnRfaXR1cCA9IHRydWU7CisJQXNzZXJ0KGluZGV4X3NjYW4tPnhzX3dhbnRfaXR1cCk7 CiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCAxLCBOVUxMLCAwKTsKIAogCS8q IEZldGNoIGZpcnN0L25leHQgdHVwbGUgaW4gc3BlY2lmaWVkIGRpcmVjdGlvbiAqLwotCXdoaWxl ICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoaW5kZXhfc2NhbiwgaW5kZXhzY2FuZGlyKSkgIT0g TlVMTCkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIGluZGV4 c2NhbmRpciwgdGFibGVzbG90KSkKIAl7Ci0JCUJsb2NrTnVtYmVyIGJsb2NrID0gSXRlbVBvaW50 ZXJHZXRCbG9ja051bWJlcih0aWQpOwotCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoaGVhcFJlbCwK LQkJCQkJCQlibG9jaywKLQkJCQkJCQkmdm1idWZmZXIpKQotCQl7Ci0JCQkvKiBSYXRzLCB3ZSBo YXZlIHRvIHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkgKi8KLQkJCWlmICghaW5k ZXhfZmV0Y2hfaGVhcChpbmRleF9zY2FuLCB0YWJsZXNsb3QpKQotCQkJewotCQkJCS8qCi0JCQkJ ICogTm8gdmlzaWJsZSB0dXBsZSBmb3IgdGhpcyBpbmRleCBlbnRyeSwgc28gd2UgbmVlZCB0bwot CQkJCSAqIGFkdmFuY2UgdG8gdGhlIG5leHQgZW50cnkuICBCZWZvcmUgZG9pbmcgc28sIGNvdW50 IGhlYXAKLQkJCQkgKiBwYWdlIGZldGNoZXMgYW5kIGdpdmUgdXAgaWYgd2UndmUgZG9uZSB0b28g bWFueS4KLQkJCQkgKgotCQkJCSAqIFdlIGRvbid0IGNoYXJnZSBhIHBhZ2UgZmV0Y2ggaWYgdGhp cyBpcyB0aGUgc2FtZSBoZWFwIHBhZ2UKLQkJCQkgKiBhcyB0aGUgcHJldmlvdXMgdHVwbGUuICBU aGlzIGlzIG9uIHRoZSBjb25zZXJ2YXRpdmUgc2lkZSwKLQkJCQkgKiBzaW5jZSBvdGhlciByZWNl bnRseS1hY2Nlc3NlZCBwYWdlcyBhcmUgcHJvYmFibHkgc3RpbGwgaW4KLQkJCQkgKiBidWZmZXJz IHRvbzsgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIHRoaXMgaGV1cmlzdGljLgotCQkJCSAqLwot I2RlZmluZSBWSVNJVEVEX1BBR0VTX0xJTUlUIDEwMAotCi0JCQkJaWYgKGJsb2NrICE9IGxhc3Rf aGVhcF9ibG9jaykKLQkJCQl7Ci0JCQkJCWxhc3RfaGVhcF9ibG9jayA9IGJsb2NrOwotCQkJCQlu X3Zpc2l0ZWRfaGVhcF9wYWdlcysrOwotCQkJCQlpZiAobl92aXNpdGVkX2hlYXBfcGFnZXMgPiBW SVNJVEVEX1BBR0VTX0xJTUlUKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJY29udGludWU7 CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLwotCQkJfQotCi0J CQkvKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFwIHR1cGxlIGZvciBhbnl0aGluZyAq LwotCQkJRXhlY0NsZWFyVHVwbGUodGFibGVzbG90KTsKLQotCQkJLyoKLQkJCSAqIFdlIGRvbid0 IGNhcmUgd2hldGhlciB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgdmlzaWJsZSB0dXBsZSBpbgotCQkJ ICogdGhlIEhPVCBjaGFpbjsgaWYgYW55IGFyZSB2aXNpYmxlLCB0aGF0J3MgZ29vZCBlbm91Z2gu Ci0JCQkgKi8KLQkJfQorCQkvKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFwIHR1cGxl IGZvciBhbnl0aGluZyAqLworCQlFeGVjQ2xlYXJUdXBsZSh0YWJsZXNsb3QpOwogCiAJCS8qCiAJ CSAqIFdlIGV4cGVjdCB0aGF0IHRoZSBpbmRleCB3aWxsIHJldHVybiBkYXRhIGluIEluZGV4VHVw bGUgbm90CkBAIC03MjQxLDggKzcyMDIsNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50 KFJlbGF0aW9uIGhlYXBSZWwsCiAJCWJyZWFrOwogCX0KIAotCWlmICh2bWJ1ZmZlciAhPSBJbnZh bGlkQnVmZmVyKQotCQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKIAlpbmRleF9lbmRzY2FuKGlu ZGV4X3NjYW4pOwogCiAJcmV0dXJuIGhhdmVfZGF0YTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1j aGVjay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCmlu ZGV4IGI3NGFiNWY3YS4uMDY1NTM2MDliIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svdmVy aWZ5X25idHJlZS5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKQEAgLTM5 Myw3ICszOTMsNyBAQCBidF9jaGVja19ldmVyeV9sZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9u IGhlYXByZWwsIGJvb2wgaGVhcGtleXNwYWNlLAogCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCkpOwogCiAJLyoKLQkgKiBUaGlzIGFzc2VydGlvbiBtYXRjaGVzIHRoZSBvbmUgaW4gaW5k ZXhfZ2V0bmV4dF90aWQoKS4gIFNlZSBwYWdlCisJICogVGhpcyBhc3NlcnRpb24gbWF0Y2hlcyB0 aGUgb25lIGluIGhlYXBhbV9iYXRjaF9nZXRuZXh0KCkuICBTZWUgcGFnZQogCSAqIHJlY3ljbGlu Zy8idmlzaWJsZSB0byBldmVyeW9uZSIgbm90ZXMgaW4gbmJ0cmVlIFJFQURNRS4KIAkgKi8KIAlB c3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOwpkaWZmIC0tZ2l0IGEvY29u dHJpYi9ibG9vbS9ibHV0aWxzLmMgYi9jb250cmliL2Jsb29tL2JsdXRpbHMuYwppbmRleCA1MTEx Y2RjNmQuLjQ1N2M0NWRlNyAxMDA2NDQKLS0tIGEvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKKysr IGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKQEAgLTE0NiwxMCArMTQ2LDEyIEBAIGJsaGFuZGxl cihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBibGJlZ2luc2NhbiwKIAkJLmFt cmVzY2FuID0gYmxyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2gg PSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXJlbGVhc2ViYXRjaCA9 IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGJsZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gYmxl bmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQku YW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJ LmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5k ZXhhbS5zZ21sCmluZGV4IGY0OGRhMzE4NS4uMmZjZmZiOTJhIDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTE2 NywxMCArMTY3LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAgICAgYW1iZWdp bnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAgICAgYW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNj YW47CiAgICAgYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAgICAgLyogY2FuIGJlIE5V TEwgKi8KKyAgICBhbWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBOVUxM ICovCisgICAgYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbiBhbWtpbGxpdGVtc2JhdGNoOwkvKiBj YW4gYmUgTlVMTCAqLworICAgIGFtcmVsZWFzZWJhdGNoX2Z1bmN0aW9uIGFtcmVsZWFzZWJhdGNo OyAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFw OyAgIC8qIGNhbiBiZSBOVUxMICovCiAgICAgYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsK LSAgICBhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJrcG9zOyAgICAgICAvKiBjYW4gYmUgTlVMTCAq LwotICAgIGFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0cnBvczsgICAgIC8qIGNhbiBiZSBOVUxM ICovCisgICAgYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAq LwogCiAgICAgLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4 IHNjYW5zICovCiAgICAgYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRl cGFyYWxsZWxzY2FuOyAgICAvKiBjYW4gYmUgTlVMTCAqLwpAQCAtNjc2LDggKzY3OCwzOCBAQCBh bWJlZ2luc2NhbiAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKICAgIDxlbXBoYXNpcz5tdXN0PC9l bXBoYXNpcz4gY3JlYXRlIHRoaXMgc3RydWN0IGJ5IGNhbGxpbmcKICAgIDxmdW5jdGlvbj5SZWxh dGlvbkdldEluZGV4U2NhbigpPC9mdW5jdGlvbj4uICBJbiBtb3N0IGNhc2VzCiAgICA8ZnVuY3Rp b24+YW1iZWdpbnNjYW48L2Z1bmN0aW9uPiBkb2VzIGxpdHRsZSBiZXlvbmQgbWFraW5nIHRoYXQg Y2FsbCBhbmQgcGVyaGFwcwotICAgYWNxdWlyaW5nIGxvY2tzOworICAgYWNxdWlyaW5nIGxvY2tz IGFuZCBpbml0aWFsaXppbmcgc3RhbmRhcmQgPHN0cnVjdG5hbWU+SW5kZXhTY2FuRGVzYzwvc3Ry dWN0bmFtZT4gZmllbGRzOwogICAgdGhlIGludGVyZXN0aW5nIHBhcnRzIG9mIGluZGV4LXNjYW4g c3RhcnR1cCBhcmUgaW4gPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4uCisgICBJbmRleCBh Y2Nlc3MgbWV0aG9kcyB0aGF0IHVzZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBpbnRlcmZhY2UKKyAgIG11c3QgYWxzbyBzZXQgdGhlIGZvbGxvd2luZyBmaWVsZHMgaW4gdGhl IHNjYW4gZGVzY3JpcHRvcjoKKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAg ICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0O21heGl0ZW1zYmF0Y2g8L2xpdGVyYWw+ OiB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMKKyAgICAgIHRoYXQgY2FuIGFwcGVhciBpbiBh IHNpbmdsZSBiYXRjaCAodHlwaWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUgaW5kZXggcGFnZQorICAg ICAgc2l6ZSwgZS5nLiwgPGxpdGVyYWw+TWF4SW5kZXhUdXBsZXNQZXJQYWdlPC9saXRlcmFsPiku CisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBh cmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDtiYXRjaF9pbmRleF9vcGFxdWVfc2l6ZTwvbGl0 ZXJhbD46IHRoZQorICAgICAgPGZ1bmN0aW9uPk1BWEFMSUdOPC9mdW5jdGlvbj4nZCBzaXplIG9m IHRoZSBpbmRleCBBTSdzIHBlci1iYXRjaCBvcGFxdWUKKyAgICAgIGFyZWEuICBFYWNoIGJhdGNo IGFsbG9jYXRpb24gcmVzZXJ2ZXMgdGhpcyBtdWNoIHNwYWNlIGltbWVkaWF0ZWx5IGJlZm9yZQor ICAgICAgdGhlIDxzdHJ1Y3RuYW1lPkluZGV4U2NhbkJhdGNoRGF0YTwvc3RydWN0bmFtZT4gcG9p bnRlciwgZm9yIHVzZSBieSB0aGUKKyAgICAgIGluZGV4IEFNIHRvIHN0b3JlIHBlci1wYWdlIG5h dmlnYXRpb24gc3RhdGUgKGUuZy4sIGJhdGNoIGluZGV4IHBhZ2UncworICAgICAgYnVmZmVyIHBp biBhbmQgc2libGluZyBwYWdlIGxpbmtzKS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0O2Jh dGNoX3R1cGxlc193b3Jrc3BhY2U8L2xpdGVyYWw+OiB0aGUgc2l6ZSBpbiBieXRlcworICAgICAg b2YgdGhlIHBlci1iYXRjaCB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZSB1c2VkIGZvciBpbmRleC1v bmx5IHNjYW5zCisgICAgICAodHlwaWNhbGx5IDxsaXRlcmFsPkJMQ0tTWjwvbGl0ZXJhbD4pLCBv ciAwIGlmIHRoZSBpbmRleCBBTSBkb2VzIG5vdAorICAgICAgc3VwcG9ydCBpbmRleC1vbmx5IHNj YW5zLiAgVGhlIHdvcmtzcGFjZSBpcyBhY2Nlc3NpYmxlIHZpYQorICAgICAgPHN0cnVjdGZpZWxk PmJhdGNoLSZndDtjdXJyVHVwbGVzPC9zdHJ1Y3RmaWVsZD4uCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAg LTc0OSw2ICs3ODEsMjE4IEBAIGFtZ2V0dHVwbGUgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxz dHJ1Y3RmaWVsZD5hbWdldHR1cGxlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3Ru YW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgogICAgc3RydWN0IG11c3QgYmUgc2V0IHRv IE5VTEwuCiAgIDwvcGFyYT4KKyAgPG5vdGU+CisgICA8cGFyYT4KKyAgICBBcyBvZiA8cHJvZHVj dG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHZlcnNpb24gMTksIHBvc2l0aW9uIG1hcmtp bmcKKyAgICBhbmQgcmVzdG9yYXRpb24gb2Ygc2NhbnMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBm b3IgdGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbnRlcmZhY2U7IG9u bHkgdGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3Vw cG9ydHMgdGhpcyBmZWF0dXJlLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+Cis8 cHJvZ3JhbWxpc3Rpbmc+CitJbmRleFNjYW5CYXRjaAorYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVz YyBzY2FuLAorICAgICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKyAgICAgICAg ICAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBSZXR1 cm4gdGhlIG5leHQgYmF0Y2ggb2YgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbiBzY2FuLCBtb3Zp bmcgaW4gdGhlCisgICBnaXZlbiBkaXJlY3Rpb24gKGZvcndhcmQgb3IgYmFja3dhcmQgaW4gdGhl IGluZGV4KS4gIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YKKyAgIDx0eXBlPkluZGV4U2NhbkJhdGNo PC90eXBlPiB3aXRoIGluZGV4IHR1cGxlcyBsb2FkZWQsIG9yCisgICA8bGl0ZXJhbD5OVUxMPC9s aXRlcmFsPiBpZiB0aGVyZSBhcmUgbm8gbW9yZSBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVuCisg ICBzY2FuIGRpcmVjdGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlIHRvCisg ICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRoYXQgcmV0dXJucyBtYXRjaGluZyBp bmRleCBlbnRyaWVzIGluIGJhdGNoZXMKKyAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuICBC eSByZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhCisgICBzaW5nbGUg aW5kZXggcGFnZSB0b2dldGhlciwgdGhlIHRhYmxlIEFNIGdhaW5zIHZpc2liaWxpdHkgaW50byB3 aGljaCB0YWJsZQorICAgYmxvY2tzIHdpbGwgYmUgbmVlZGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4K KyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIHRhYmxlIEFNIHBhc3NlcyB0aGUgYmF0Y2gg bW9zdCByZWNlbnRseSByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBmb3IgdGhlIGdpdmVuIHNjYW4gYXMKKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVy YWw+IChvciA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBvbiB0aGUgZmlyc3QgY2FsbAorICAgZm9y IHRoZSBzY2FuKS4gIFRoZSBpbmRleCBBTSB1c2VzIGluZm9ybWF0aW9uIGZyb20gPGxpdGVyYWw+ cHJpb3JiYXRjaDwvbGl0ZXJhbD4KKyAgIHRvIGRldGVybWluZSB3aGljaCBpbmRleCBwYWdlIHRv IHJlYWQgbmV4dC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQSBiYXRjaCByZXR1cm5lZCBi eSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIGFzc29jaWF0ZWQgd2l0aCBhCisg ICBwaW5uZWQgaW5kZXggcGFnZSBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVt L3R1cGxlLiAgVGhlIGJ1ZmZlcgorICAgcGluIGNhbiBiZSBoZWxkIG9udG8gYnkgdGhlIHRhYmxl IEFNIGFzIGFuIGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElECisgICByZWN5Y2xpbmcg YnkgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1s b2NraW5nIi8+CisgICBmb3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5n IGluZGV4IHNjYW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIDx0eXBlPkluZGV4U2Nh bkJhdGNoPC90eXBlPiB0aGF0IGlzIHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IGlzIG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nlc3MgbWV0aG9kLgor ICAgSXQgaXMgdXAgdG8gdGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBpdCBzaG91 bGQgYmUgZnJlZWQgKHZpYQorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoPC9m dW5jdGlvbj4pLiAgTm90ZSBhbHNvIHRoYXQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZpZWxkPnBy aW9yYmF0Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuICBUaGUgY29yZQorICAgPGZpbGVuYW1l PnNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gYW5kCisgICA8ZmlsZW5hbWU+ c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb25zIHByb3Zp ZGUKKyAgIHJlZmVyZW5jZSBleGFtcGxlcyBvZiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBpbnRlcmZhY2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBzYW1lIGNh dmVhdHMgZGVzY3JpYmVkIGZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFwcGx5 IGhlcmUKKyAgIHRvbzogYW4gZW50cnkgaW4gdGhlIHJldHVybmVkIGJhdGNoIG1lYW5zIG9ubHkg dGhhdCB0aGUgaW5kZXggY29udGFpbnMKKyAgIGFuIGVudHJ5IHRoYXQgbWF0Y2hlcyB0aGUgc2Nh biBrZXlzLCBub3QgdGhhdCB0aGUgdHVwbGUgbmVjZXNzYXJpbHkgc3RpbGwKKyAgIGV4aXN0cyBp biB0aGUgaGVhcCBvciB3aWxsIHBhc3MgdGhlIGNhbGxlcidzIHNuYXBzaG90IHRlc3QuCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHVzaW5nIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCBzZXQKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hz X3JlY2hlY2s8L2xpdGVyYWw+IHRvIGluZGljYXRlIHdoZXRoZXIgcmVjaGVja2luZyBvZgorICAg c2NhbiBrZXlzIGlzIHJlcXVpcmVkLCBpbiB0aGUgc2FtZSB3YXkgYXMgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPgorICAgZG9lcy4gSG93ZXZlciwgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNf cmVjaGVjazwvbGl0ZXJhbD4gbXVzdCBiZSBzZXQgY29uc2lzdGVudGx5CisgICBmb3IgYW4gZW50 aXJlIHNjYW4gcmF0aGVyIHRoYW4gdmFyeWluZyBvbiBhIHBlci10dXBsZSBiYXNpcy4gVGhpcyBp cyBhIGtleQorICAgZGlmZmVyZW5jZSBmcm9tIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlv bj4sIHdoaWNoIGNhbiBzZXQKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVy YWw+IGluZGVwZW5kZW50bHkgZm9yIGVhY2ggdHVwbGUgaXQgcmV0dXJucy4KKyAgIEluZGV4IGFj Y2VzcyBtZXRob2RzIHRoYXQgcmVxdWlyZSBncmFudWxhciBjb250cm9sIG92ZXIKKyAgIDxsaXRl cmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+IG11c3QgdXNlIHRoZSA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICBpbnRlcmZhY2UgaW5zdGVhZCBvZiA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBTaW1pbGFy bHksIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBkb2VzIG5v dCBjdXJyZW50bHkKKyAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2FucyB0aGF0IHJldHVybiBkYXRh IGluIHRoZSBmb3JtIG9mIGEKKyAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0bmFtZT4g cG9pbnRlci4gIEluZGV4LW9ubHkgc2NhbnMgd29yayBieQorICAgY29weWluZyA8c3RydWN0bmFt ZT5JbmRleFR1cGxlPC9zdHJ1Y3RuYW1lPiByZWNvcmRzIGZyb20gaW5kZXggcGFnZXMgaW50byBh CisgICBsb2NhbCBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggYmF0Y2guICA8bGl0ZXJhbD54 c19pdHVwZGVzYzwvbGl0ZXJhbD4KKyAgIHdvcmtzIGluIHRoZSBzYW1lIHdheSBhcyBhbHJlYWR5 IGRlc2NyaWJlZCBmb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPi4KKyAgIFRoZSBh Y2Nlc3MgbWV0aG9kIG11c3Qgbm90IHNldCB0aGUgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaXR1cDwv bGl0ZXJhbD4gb3IKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwPC9saXRlcmFsPiBmaWVs ZHMgaXRzZWxmLgorICAgV2l0aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB0aGUg aW5kZXggQU0gc2V0cworICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaGl0dXA8L2xpdGVyYWw+IHRv IHBvaW50IHRvIGEgcmVjb25zdHJ1Y3RlZAorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1 Y3RuYW1lPiB3aG9zZSBsaWZldGltZSBleHRlbmRzIHVudGlsIHRoZSBuZXh0CisgICA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbGwgJm1kYXNoOyBvbmx5IG9uZSB0dXBsZSBpcyB2 YWxpZCBhdCBhCisgICB0aW1lLiAgV2l0aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ LCBtdWx0aXBsZSBiYXRjaGVzIGFyZSBoZWxkIG9wZW4KKyAgIHNpbXVsdGFuZW91c2x5IGFuZCBp dGVtcyBhcmUgY29uc3VtZWQgYXN5bmNocm9ub3VzbHkgYnkgdGhlIHRhYmxlIEFNLCBzbworICAg dGhlcmUgaXMgbm8gZXF1aXZhbGVudCBzaW5nbGUtdHVwbGUgbGlmZXRpbWUgZm9yIHBlci1pdGVt CisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBvaW50ZXJzLiAgVGhlIGJh dGNoIGluZnJhc3RydWN0dXJlCisgICBwcm92aWRlcyBwZXItYmF0Y2ggc3RvcmFnZSBmb3IgPHN0 cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4gY29waWVzLAorICAgYnV0IGhhcyBubyBh bmFsb2dvdXMgbWVjaGFuaXNtIGZvciA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+ IGRhdGEKKyAgICh1c2VkIGJ5IGluZGV4IEFNcyBzdWNoIGFzIDxhY3JvbnltPkdpU1Q8L2Fjcm9u eW0+IGFuZAorICAgPGFjcm9ueW0+U1AtR2lTVDwvYWNyb255bT4gZm9yIHJlY29uc3RydWN0ZWQg dHVwbGVzIHRoYXQgbWlnaHQgbm90IGZpdCBpbgorICAgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwv c3RydWN0bmFtZT4gZm9ybWF0KS4gIFRoaXMgbGltaXRhdGlvbiBjb3VsZCBiZQorICAgYWRkcmVz c2VkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1 Y3RuYW1lPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIGluZGV4IGFjY2VzcyBtZXRo b2QgbXVzdCBwcm92aWRlIGVpdGhlciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+Cisg ICBvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBidXQgbm90IGJvdGguCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qg c3VwcG9ydHMgPHF1b3RlPnBsYWluPC9xdW90ZT4gaW5kZXggc2NhbnMuICBJZiBpdCBkb2Vzbid0 LAorICAgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZmllbGQgaW4gaXRzCisg ICA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4gc3RydWN0IG11c3QgYmUg c2V0IHRvIE5VTEwuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK3Zv aWQKK2Fta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICAg ICAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBDYWxsZWQg YnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYSBiYXRjaCB0 aGF0CisgICBjb250YWlucyBkZWFkIGl0ZW1zLCB0byBzZXQgPGxpdGVyYWw+TFBfREVBRDwvbGl0 ZXJhbD4gYml0cyBpbiB0aGUKKyAgIGJhdGNoJ3MgaW5kZXggcGFnZS4gIFRoZSBiYXRjaCdzIGlu ZGV4IHBhZ2Ugd2lsbCBuZXZlciBiZSBsb2NrZWQgb3IgcGlubmVkCisgICB3aGVuIHRoaXMgZnVu Y3Rpb24gaXMgY2FsbGVkLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGlsZSBpbXBsZW1l bnRpbmcgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBpcyBvcHRpb25hbCwK KyAgIGRvaW5nIHNvIGlzIHJlY29tbWVuZGVkIGZvciBwZXJmb3JtYW5jZSwgYXMgaXQgYWxsb3dz IGZ1dHVyZSBzY2FucyB0byBza2lwCisgICBrbm93bi1kZWFkIGluZGV4IGVudHJpZXMuICBCb3Ro IGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBjdXJyZW50bHkKKyAgIHN1cHBvcnQgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlIGFuZCBoYXNoKSBpbXBsZW1lbnQK KyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcsIHRob3VnaCB0aGlyZC1wYXJ0 eSBpbmRleCBhY2Nlc3MgbWV0aG9kcworICAgYXJlIGZyZWUgdG8gY2hvb3NlIHdoZXRoZXIgdG8g aW1wbGVtZW50IHRoaXMgZmVhdHVyZS4KKyAgIFRoZSB0YWJsZSBBTSBtYXkgY2FsbAorICAgPGZ1 bmN0aW9uPnRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtPC9mdW5jdGlvbj4gdG8gbWFyayBk ZWFkIGl0ZW1zIGFzCisgICB0aGUgc2NhbiBwcm9ncmVzc2VzLiAgSWYgdGhlIGJhdGNoIGNvbnRh aW5zIGFueSBzdWNoIGRlYWQgaXRlbXMsIHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGVh ZEl0ZW1zPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgd2lsbCBoYXZlIGJlZW4gc29ydGVkIGFuZAorICAg ZGVkdXBsaWNhdGVkIGJlZm9yZSA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+ IGlzIGNhbGxlZCwgd2l0aAorICAgaXRlbSBvZmZzZXRzIGFwcGVhcmluZyBpbiBhc2NlbmRpbmcg b3JkZXIgKHRoYXQgaXMsIGluIGluZGV4IHBhZ2Ugb3JkZXIsCisgICB3aGljaCBpcyBhbHNvIGJh dGNoIG9yZGVyKSBhbmQgbm8gb2Zmc2V0IGFwcGVhcmluZyBtb3JlIHRoYW4gb25jZS4gIEluZGV4 CisgICBhY2Nlc3MgbWV0aG9kcyBjYW4gcmVseSBvbiB0aGlzIG9yZGVyaW5nIHdoZW4gcHJvY2Vz c2luZyBkZWFkIGl0ZW1zOiB0aGUKKyAgIDxzdHJ1Y3RmaWVsZD5kZWFkSXRlbXM8L3N0cnVjdGZp ZWxkPiBhcnJheSBjYW4gYmUgd2Fsa2VkIGluIGxvY2tzdGVwIHdpdGgKKyAgIHRoZSBpbmRleCBw YWdlJ3MgaXRlbSBwb2ludGVycywgc2luY2UgYm90aCBhcmUgaW4gYXNjZW5kaW5nIG9mZnNldCBv cmRlci4KKyAgIFRoaXMgYWxzbyBtZWFucyB0aGUgdGFibGUgQU0gbmVlZCBub3QgY2FsbAorICAg PGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtPC9mdW5jdGlvbj4gaW4gYW55 IHBhcnRpY3VsYXIgb3JkZXIuCisgICAoSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiByZWx5IG9uIHRoZQorICAgPHN0cnVjdGZpZWxkPmtp bGxfcHJpb3JfdHVwbGU8L3N0cnVjdGZpZWxkPiBtZWNoYW5pc20gaW5zdGVhZCB0byBtYXJrIGRl YWQKKyAgIHR1cGxlczsgdGhlIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC88L2Zp bGVuYW1lPiBpbXBsZW1lbnRhdGlvbgorICAgcHJvdmlkZXMgYSByZWZlcmVuY2UgZXhhbXBsZS4p CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gaW1wbGVtZW50aW5nIDxmdW5jdGlvbj5h bWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4sIHRoZSBpbmRleCBBTQorICAgc2hvdWxkIHZlcmlm eSB0aGF0IHRoZSBpbmRleCBwYWdlIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgYmF0 Y2ggd2FzCisgICBvcmlnaW5hbGx5IHJlYWQuICBUaGUgYmF0Y2gncyA8c3RydWN0ZmllbGQ+bHNu PC9zdHJ1Y3RmaWVsZD4gZmllbGQgcmVjb3JkcworICAgdGhlIHBhZ2UgTFNOIGF0IHRoZSB0aW1l IHRoZSBpbmRleCBwYWdlIGxvY2sgd2FzIHJlbGVhc2VkIChzZXQKKyAgIGF1dG9tYXRpY2FsbHkg YnkgdGhlIGNvcmUgY29kZSkuICBUaGUgaW5kZXggQU0gc2hvdWxkIHJlLXJlYWQgdGhlIHBhZ2Us CisgICBjb21wYXJlIHRoZSBjdXJyZW50IHBhZ2UgTFNOIGFnYWluc3QgPHN0cnVjdGZpZWxkPmJh dGNoLSZndDtsc248L3N0cnVjdGZpZWxkPiwKKyAgIGFuZCBnaXZlIHVwIG9uIHNldHRpbmcgPGxp dGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyBpZiB0aGUgTFNOIGhhcworICAgYWR2YW5jZWQu ICBBbiBhZHZhbmNlZCBMU04gaW5kaWNhdGVzIHRoYXQgdGhlIHBhZ2Ugd2FzIG1vZGlmaWVkICZt ZGFzaDsKKyAgIHBvc3NpYmx5IGJ5IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gcmVjeWNsaW5n IGhlYXAgVElEcyAmbWRhc2g7IHNvIGl0CisgICB3b3VsZCBiZSB1bnNhZmUgdG8gYXNzdW1lIHRo YXQgaW5kZXggZW50cmllcyBzdGlsbCBwb2ludCB0byB0aGUgc2FtZSBoZWFwCisgICB0dXBsZXMu ICBTaW5jZSA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nIGlzIG9ubHkgYW4gb3B0 aW1pemF0aW9uCisgICBoaW50LCBpdCBpcyBhbHdheXMgc2FmZSB0byBza2lwIGl0LiAgU2VlIHRo ZSBCLXRyZWUgYW5kIGhhc2ggaW5kZXgKKyAgIGltcGxlbWVudGF0aW9ucyBmb3IgcmVmZXJlbmNl IGV4YW1wbGVzIG9mIHRoaXMgdGVjaG5pcXVlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBU aGUgaW5kZXggQU0gbWF5IGNob29zZSB0byByZXRhaW4gaXRzIG93biBidWZmZXIgcGlucyB3aGVu IHRoaXMgc2VydmVzIGFuCisgICBpbnRlcm5hbCBwdXJwb3NlIChmb3IgZXhhbXBsZSwgbWFpbnRh aW5pbmcgYSBkZXNjZW50IHN0YWNrIG9mIHBpbm5lZCBpbmRleAorICAgcGFnZXMgZm9yIHJldXNl IGFjcm9zcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGxzKS4gIEhvd2V2ZXIs CisgICBhbnkgc2NoZW1lIHRoYXQgcmV0YWlucyBidWZmZXIgcGlucyBtYW5hZ2VkIGJ5IHRoZSBp bmRleCBBTSBtdXN0IGJlIHN1cmUgdG8KKyAgIGZyZWUgdGhlIHBpbnMgYXQgYW4gb3Bwb3J0dW5l IHBvaW50IChmb3IgZXhhbXBsZSB3aGVuIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+Cisg ICBhbmQvb3IgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+IGFyZSBjYWxsZWQpLiAgSXQg bXVzdCBhbHNvIGtlZXAgdGhlCisgICBudW1iZXIgb2YgcmV0YWluZWQgcGlucyBmaXhlZCBhbmQg c21hbGwsIHRvIGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJhY2tlbmQncworICAgYnVmZmVyIHBpbiBs aW1pdC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWtpbGxpdGVt c2JhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgb3B0aW9uYWwuICBJbmRleAorICAgYWNjZXNz IG1ldGhvZHMgdGhhdCB3YW50IHRvIG1hcmsgZGVhZCBpbmRleCB0dXBsZXMgd2l0aAorICAgPGxp dGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyBzaG91bGQgcHJvdmlkZSBpdDsgdGhvc2UgdGhh dCBkb24ndCBjYW4KKyAgIGxlYXZlIGl0IHNldCB0byA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBl dmVuIHdoZW4gdGhleSBwcm92aWRlCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ LgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkCithbXJlbGVh c2ViYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgICAgIEluZGV4U2NhbkJh dGNoIGJhdGNoKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBDYWxsZWQgYnkgdGhlIHRhYmxlIEFN ICh2aWEKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaDwvZnVuY3Rpb24+ KSB3aGVuIGl0IGlzIHNhZmUgdG8gcmVsZWFzZQorICAgdGhlIGJ1ZmZlciBwaW4gdGhhdCB0aGUg aW5kZXggQU0gaG9sZHMgb24gdGhlIGJhdGNoJ3MgaW5kZXggbGVhZiBwYWdlLAorICAgd2hpY2gg cHJldmVudHMgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IDxjb21tYW5kPlZBQ1VVTTwvY29t bWFuZD4uCisgICAoRm9ybWFsbHksIGFuIGluZGV4IEFNIG1heSBob2xkIGEgZGlmZmVyZW50IGtp bmQgb2YgaW50ZXJsb2NrLCBvciBtdWx0aXBsZQorICAgaW50ZXJsb2NrcywgaW4gaXRzIHBlci1i YXRjaCBvcGFxdWUgYXJlYSwgYnV0IGluIHByYWN0aWNlIGJvdGggYnVpbHQtaW4KKyAgIGluZGV4 IEFNcyB0aGF0IHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7 IEItdHJlZSBhbmQKKyAgIGhhc2ggJm1kYXNoOyBob2xkIGEgc2luZ2xlIGJ1ZmZlciBwaW4uKSBU aGlzIGZ1bmN0aW9uIG11c3QgYmUgaWRlbXBvdGVudDoKKyAgIGl0IG1heSBiZSBjYWxsZWQgbW9y ZSB0aGFuIG9uY2UgZm9yIHRoZSBzYW1lIGJhdGNoLCBhbmQgbXVzdCBkbyBub3RoaW5nIGlmCisg ICB0aGUgcGluIGhhcyBhbHJlYWR5IGJlZW4gcmVsZWFzZWQuICBJbXBsZW1lbnRhdGlvbnMgc2hv dWxkIGNoZWNrIHdoZXRoZXIKKyAgIHRoZSBidWZmZXIgaXMgc3RpbGwgdmFsaWQgYmVmb3JlIHJl bGVhc2luZyBpdCwgYW5kIHNldCBpdCB0bworICAgPGxpdGVyYWw+SW52YWxpZEJ1ZmZlcjwvbGl0 ZXJhbD4gYWZ0ZXJ3YXJkLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9u PmFtcmVsZWFzZWJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGFueSBp bmRleAorICAgYWNjZXNzIG1ldGhvZCB0aGF0IHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KIAogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KQEAg LTc2OCw4ICsxMDEyLDggQEAgYW1nZXRiaXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGl0 c2VsZiwgYW5kIHRoZXJlZm9yZSBjYWxsZXJzIHJlY2hlY2sgYm90aCB0aGUgc2NhbiBjb25kaXRp b25zIGFuZCB0aGUKICAgIHBhcnRpYWwgaW5kZXggcHJlZGljYXRlIChpZiBhbnkpIGZvciByZWNo ZWNrYWJsZSB0dXBsZXMuICBUaGF0IG1pZ2h0IG5vdAogICAgYWx3YXlzIGJlIHRydWUsIGhvd2V2 ZXIuCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQKLSAgIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2Fubm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgaW5kZXgg c2NhbjsgdGhlcmUKKyAgIE9ubHkgb25lIG9mIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rp b24+LCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LAorICAgb3IgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gaW5kZXggc2Nhbjsg dGhlcmUKICAgIGFyZSBvdGhlciByZXN0cmljdGlvbnMgdG9vIHdoZW4gdXNpbmcgPGZ1bmN0aW9u PmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIGFzIGV4cGxhaW5lZAogICAgaW4gPHhyZWYgbGlua2Vu ZD0iaW5kZXgtc2Nhbm5pbmciLz4uCiAgIDwvcGFyYT4KQEAgLTc4MSw2ICsxMDI1LDI5IEBAIGFt Z2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8g TlVMTC4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhh dCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlCisgICB3 aWxsIGdlbmVyYWxseSBhbHNvIHdhbnQgdG8gdXNlIHRoZSBiYXRjaCBhbGxvY2F0aW9uIGluZnJh c3RydWN0dXJlCisgICAoPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rp b24+IGFuZAorICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlPC9mdW5jdGlv bj4pIHdpdGhpbiB0aGVpcgorICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW1w bGVtZW50YXRpb24uICBUaGUgY29udmVudGlvbiBpcyB0aGF0IG9ubHkKKyAgIG9uZSBiYXRjaCBp cyBhbGxvY2F0ZWQgYXQgYSB0aW1lIGR1cmluZyA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0 aW9uPiwKKyAgIHVubGlrZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHdoZXJlIHNl dmVyYWwgYmF0Y2hlcyBtYXkgYmUKKyAgIG91dHN0YW5kaW5nIGluIHRoZSBiYXRjaCByaW5nIGJ1 ZmZlciBjb25jdXJyZW50bHkuICBUbyBtYWludGFpbiB0aGlzCisgICBvbmUtYmF0Y2gtYXQtYS10 aW1lIGludmFyaWFudCwgdGhlIGluZGV4IEFNIGl0c2VsZiByZWxlYXNlcyBpdHMgcHJpb3IgYmF0 Y2gKKyAgIHZpYSA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2U8L2Z1bmN0aW9u PiBqdXN0IGFzIHRoZSBzY2FuIGxlYXZlcworICAgdGhhdCBiYXRjaCdzIGluZGV4IHBhZ2UgYW5k IGlzIGFib3V0IHRvIGdlbmVyYXRlIHRoZSBuZXh0IGJhdGNoICZtZGFzaDsgdGhlCisgICBzYW1l IHBvaW50IHdoZXJlIGl0IGV4dHJhY3RzIG5hdmlnYXRpb24gc3RhdGUgKHN1Y2ggYXMgc2libGlu Zy1wYWdlIGxpbmtzKQorICAgZnJvbSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi4gIFRo aXMgZWFybHkgcmVsZWFzZSBpcyBzcGVjaWZpYyB0bworICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFw PC9mdW5jdGlvbj4gc2NhbnM7IGR1cmluZyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ CisgICBzY2FucyB0aGUgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gaXMgc3RyaWN0bHkg b3duZWQgYnkgdGhlIHRhYmxlIEFNCisgICBhbmQgY29yZSBjb2RlLCBhbmQgdGhlIGluZGV4IEFN IG11c3QgbmV2ZXIgcmVsZWFzZSBpdC4gIFNlZQorICAgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5j dGlvbj4gYW5kIDxmdW5jdGlvbj5faGFzaF9uZXh0PC9mdW5jdGlvbj4gZm9yCisgICByZWZlcmVu Y2UgZXhhbXBsZXMuICBUaGUgcmVsZWFzZWQgYmF0Y2ggaXMgY2FjaGVkIGludGVybmFsbHkgYW5k IHJldXNlZCBieQorICAgdGhlIG5leHQgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9hbGxv YzwvZnVuY3Rpb24+IGNhbGwsIGF2b2lkaW5nCisgICByZXBlYXRlZCBtZW1vcnkgYWxsb2NhdGlv biBkdXJpbmcgdGhlIGJpdG1hcCBzY2FuLgorICA8L3BhcmE+CisKICAgPHBhcmE+CiA8cHJvZ3Jh bWxpc3Rpbmc+CiB2b2lkCkBAIC03OTUsMzIgKzEwNjIsNDEgQEAgYW1lbmRzY2FuIChJbmRleFNj YW5EZXNjIHNjYW4pOwogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KIHZvaWQKLWFtbWFya3Bv cyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2FtcG9zcmVzZXQgKEluZGV4U2NhbkRlc2Mgc2NhbiwK KyAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0g ICBNYXJrIGN1cnJlbnQgc2NhbiBwb3NpdGlvbi4gIFRoZSBhY2Nlc3MgbWV0aG9kIG5lZWQgb25s eSBzdXBwb3J0IG9uZQotICAgcmVtZW1iZXJlZCBzY2FuIHBvc2l0aW9uIHBlciBzY2FuLgorICAg Tm90aWZ5IHRoZSBpbmRleCBBTSB0aGF0IHRoZSB0YWJsZSBBTSBpcyBhYm91dCB0byBjaGFuZ2Ug dGhlIHNjYW4ncworICAgbG9naWNhbCBwb3NpdGlvbiBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRo ZSBpbmRleCBBTSB0byByZXNldCBhbnkgc3RhdGUKKyAgIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFj a3MgdGhlIHNjYW4ncyBwcm9ncmVzcy4gIEZvciBleGFtcGxlLCBuYnRyZWUgbXVzdAorICAgcmVz ZXQgdGhlIGFycmF5IGtleXMgdXNlZCBieSA8bGl0ZXJhbD5TY2FsYXJBcnJheU9wRXhwcjwvbGl0 ZXJhbD4gcXVhbAorICAgZXZhbHVhdGlvbiB3aGVuIHRoZSBzY2FuIHBvc2l0aW9uIGNoYW5nZXMu ICBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlbgorICAgdGhlIHRhYmxlIEFNIGlzIGFib3V0 IHRvIHByb2Nlc3MgYSBiYXRjaCBpbiBhIGRpZmZlcmVudCBkaXJlY3Rpb24gdGhhbgorICAgd2Fz IHVzZWQgd2hlbiB0aGUgYmF0Y2ggd2FzIG9yaWdpbmFsbHkgcmV0dXJuZWQgYnkKKyAgIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGFuZCBhbHNvIHdoZW4gYSBtYXJrZWQgc2NhbiBw b3NpdGlvbiBpcworICAgYWJvdXQgdG8gYmUgcmVzdG9yZWQuCiAgIDwvcGFyYT4KIAogICA8cGFy YT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBv bmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVk IHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1tYXJrcG9zPC9z dHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1 Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIFdoZW4gPGZ1bmN0aW9u PmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgZHVlIHRvIGEgY3Jvc3MtYmF0Y2gKKyAg IGRpcmVjdGlvbiBjaGFuZ2UsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGhhdmUgYWxyZWFkeSBmbGlw cGVkIHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gZmllbGQg dG8gcmVmbGVjdCB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uCisgICBiZWZvcmUgbWFraW5nIHRoZSBj YWxsLiAgVGhlIGluZGV4IEFNIHNob3VsZCB1c2UgdGhpcyB1cGRhdGVkIGRpcmVjdGlvbgorICAg d2hlbiByZXNldHRpbmcgYW55IHN0YXRlIHRoYXQgZGVwZW5kcyBvbiBrbm93aW5nIHdoaWNoIHdh eSB0aGUgc2NhbiBpcworICAgcHJvY2VlZGluZy4gIFdoZW4gY2FsbGVkIHRvIHJlc3RvcmUgYSBt YXJrZWQgcG9zaXRpb24sIHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1Y3Rm aWVsZD4gaXMgbm90IG1vZGlmaWVkOyBpdCByZXRhaW5zIHRoZSBkaXJlY3Rpb24KKyAgIGZyb20g d2hlbiB0aGUgYmF0Y2ggd2FzIG9yaWdpbmFsbHkgcmV0dXJuZWQuICBJbiBib3RoIGNhc2VzLCB0 aGUgYmF0Y2gKKyAgIHBhc3NlZCB0byA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGlz IHRoZSBiYXRjaCB0aGF0IHdpbGwgYmUgdXNlZAorICAgdG8gY29udGludWUgdGhlIHNjYW4uCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KLTxwcm9ncmFtbGlzdGluZz4KLXZvaWQKLWFtcmVzdHJwb3Mg KEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci08L3Byb2dyYW1saXN0aW5nPgotICAgUmVzdG9yZSB0aGUg c2NhbiB0byB0aGUgbW9zdCByZWNlbnRseSBtYXJrZWQgcG9zaXRpb24uCi0gIDwvcGFyYT4KLQot ICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVuY3Rpb24+IGZ1bmN0aW9u IG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMg b3JkZXJlZCBzY2Fucy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtcmVz dHJwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRp bmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBOVUxMLgorICAgSW5kZXgg YWNjZXNzIG1ldGhvZHMgdGhhdCBoYXZlIHByaXZhdGUgc3RhdGUgd2hpY2ggbXVzdCBiZSByZXNl dCB3aGVuIHRoZQorICAgc2NhbiBwb3NpdGlvbiBjaGFuZ2VzIG11c3QgcHJvdmlkZSBhbiA8ZnVu Y3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBpbXBsZW1lbnRhdGlvbi4gIEluZGV4IEFN cyB3aXRoIG5vIHN1Y2ggc3RhdGUgbWF5IHNldAorICAgPHN0cnVjdGZpZWxkPmFtcG9zcmVzZXQ8 L3N0cnVjdGZpZWxkPiB0byBOVUxMLgorICAgVGhlIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5j dGlvbj4gZnVuY3Rpb24gY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2hlbiB0aGUKKyAgIGFjY2VzcyBt ZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2FucyB0aHJvdWdoIHRoZSA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+CisgICBpbnRlcmZhY2UuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAg LTk3NSw2ICsxMjUxLDggQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBl LCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgICAgIEFjY2VzcyBtZXRob2RzIHRo YXQgYWx3YXlzIHJldHVybiBlbnRyaWVzIGluIHRoZSBuYXR1cmFsIG9yZGVyaW5nCiAgICAgICAg b2YgdGhlaXIgZGF0YSAoc3VjaCBhcyBidHJlZSkgc2hvdWxkIHNldAogICAgICAgIDxzdHJ1Y3Rm aWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4gdG8gdHJ1ZS4KKyAgICAgICBCb3RoIDxmdW5j dGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4KKyAgICAgICBzY2FucyBzdXBwb3J0IHRoaXMgY2FwYWJpbGl0eS4KICAgICAgICBDdXJy ZW50bHksIHN1Y2ggYWNjZXNzIG1ldGhvZHMgbXVzdCB1c2UgYnRyZWUtY29tcGF0aWJsZSBzdHJh dGVneQogICAgICAgIG51bWJlcnMgZm9yIHRoZWlyIGVxdWFsaXR5IGFuZCBvcmRlcmluZyBvcGVy YXRvcnMuCiAgICAgICA8L3BhcmE+CkBAIC05ODcsNDEgKzEyNjUsNTYgQEAgYW10cmFuc2xhdGVj bXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUp OwogICAgICAgIGFuIG9yZGVyIHNhdGlzZnlpbmcgPGxpdGVyYWw+T1JERVIgQlk8L2xpdGVyYWw+ IDxyZXBsYWNlYWJsZT5pbmRleF9rZXk8L3JlcGxhY2VhYmxlPgogICAgICAgIDxyZXBsYWNlYWJs ZT5vcGVyYXRvcjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5jb25zdGFudDwvcmVwbGFjZWFi bGU+LiAgU2NhbiBtb2RpZmllcnMKICAgICAgICBvZiB0aGF0IGZvcm0gY2FuIGJlIHBhc3NlZCB0 byA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBhcyBkZXNjcmliZWQKLSAgICAgICBwcmV2 aW91c2x5LgorICAgICAgIHByZXZpb3VzbHkuICBOb3RlIHRoYXQgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiBzY2FucyBkbyBub3QKKyAgICAgICBjdXJyZW50bHkgc3VwcG9ydCBvcmRl cmluZyBvcGVyYXRvcnMuICBUaGUgY29yZSBleGVjdXRvciBleHBlY3RzCisgICAgICAgPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0byBzZXQKKyAgICAgICA8c3RydWN0ZmllbGQ+eHNf b3JkZXJieXZhbHM8L3N0cnVjdGZpZWxkPiBmb3IgZWFjaCByZXR1cm5lZCB0dXBsZSwgYnV0Cisg ICAgICAgdGhlcmUgaXMgY3VycmVudGx5IG5vIG1lY2hhbmlzbSB0byBhc3NvY2lhdGUgcGVyLWl0 ZW0gb3JkZXJpbmcgdmFsdWVzCisgICAgICAgd2l0aCBpbmRpdmlkdWFsIGl0ZW1zIHdpdGhpbiBh IGJhdGNoLiAgVGhpcyB3b3VsZCByZXF1aXJlIGFuIGFkZGl0aW9uYWwKKyAgICAgICBsYXllciBv ZiBpbmRpcmVjdGlvbiB0aGF0IGRvZXMgbm90IHlldCBleGlzdCwgYnV0IGNvdWxkIGJlIGFkZGVk IGluIGEKKyAgICAgICBmdXR1cmUgdmVyc2lvbiBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwv cHJvZHVjdG5hbWU+LgogICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvaXRl bWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVy YWw+IGFyZ3VtZW50LAorICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYW5k IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgIGZ1bmN0aW9ucyBoYXZlIGEgPGxp dGVyYWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKICAgIHdoaWNoIGNhbiBiZSBlaXRo ZXIgPGxpdGVyYWw+Rm9yd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+ICh0aGUgbm9ybWFsIGNh c2UpCiAgICBvciAgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPi4gIElm IHRoZSBmaXJzdCBjYWxsIGFmdGVyCiAgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBz cGVjaWZpZXMgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPiwgdGhlbiB0 aGUKICAgIHNldCBvZiBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGlzIHRvIGJlIHNjYW5uZWQgYmFj ay10by1mcm9udCByYXRoZXIgdGhhbiBpbgotICAgdGhlIG5vcm1hbCBmcm9udC10by1iYWNrIGRp cmVjdGlvbiwgc28gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJldHVybgot ICAgdGhlIGxhc3QgbWF0Y2hpbmcgdHVwbGUgaW4gdGhlIGluZGV4LCByYXRoZXIgdGhhbiB0aGUg Zmlyc3Qgb25lIGFzIGl0Ci0gICBub3JtYWxseSB3b3VsZC4gIChUaGlzIHdpbGwgb25seSBvY2N1 ciBmb3IgYWNjZXNzCi0gICBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVy PC9zdHJ1Y3RmaWVsZD4gdG8gdHJ1ZS4pICBBZnRlciB0aGUKLSAgIGZpcnN0IGNhbGwsIDxmdW5j dGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRo ZSBzY2FuIGluCisgICB0aGUgbm9ybWFsIGZyb250LXRvLWJhY2sgZGlyZWN0aW9uLiAgSW4gdGhp cyBjYXNlLAorICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0 aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUKKyAgIGluZGV4LCByYXRoZXIgdGhhbiB0aGUg Zmlyc3Qgb25lIGFzIGl0IG5vcm1hbGx5IHdvdWxkLiAgU2ltaWxhcmx5LAorICAgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFzdCBtYXRjaGluZyBiYXRj aCBvZiBpdGVtcworICAgd2hlbiBlaXRoZXIgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIgPGZ1bmN0aW9u PmFtcmVzY2FuPC9mdW5jdGlvbj4gc3BlY2lmaWVzCisgICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5E aXJlY3Rpb248L2xpdGVyYWw+LCBvciBhIHN1YnNlcXVlbnQgY2FsbCBoYXMKKyAgIDxsaXRlcmFs Pk5VTEw8L2xpdGVyYWw+IGFzIGl0cyA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0Zmll bGQ+IGFyZ3VtZW50CisgICAoaW5kaWNhdGluZyBhIGJhY2t3YXJkIHNjYW4gcmVzdGFydCkuICAo VGhpcyBiYWNrd2FyZC1zY2FuIGJlaGF2aW9yIHdpbGwKKyAgIG9ubHkgb2NjdXIgZm9yIGFjY2Vz cyBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4K KyAgIHRvIHRydWUuKSAgQWZ0ZXIgdGhlIGZpcnN0IGNhbGwsIGJvdGggPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g bXVzdCBiZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCiAgICBlaXRoZXIgZGlyZWN0 aW9uIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgcmV0dXJuZWQgZW50cnkuICAoQnV0IGlmCiAgICA8 c3RydWN0ZmllbGQ+YW1jYW5iYWNrd2FyZDwvc3RydWN0ZmllbGQ+IGlzIGZhbHNlLCBhbGwgc3Vi c2VxdWVudAogICAgY2FsbHMgd2lsbCBoYXZlIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyB0aGUgZmly c3Qgb25lLikKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBz dXBwb3J0IG9yZGVyZWQgc2NhbnMgbXVzdCBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4g YQotICAgcG9zaXRpb24gaW4gYSBzY2FuIGFuZCBsYXRlciByZXR1cm5pbmcgdG8gdGhlIG1hcmtl ZCBwb3NpdGlvbi4gIFRoZSBzYW1lCi0gICBwb3NpdGlvbiBtaWdodCBiZSByZXN0b3JlZCBtdWx0 aXBsZSB0aW1lcy4gIEhvd2V2ZXIsIG9ubHkgb25lIHBvc2l0aW9uIG5lZWQKLSAgIGJlIHJlbWVt YmVyZWQgcGVyIHNjYW47IGEgbmV3IDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBjYWxs IG92ZXJyaWRlcyB0aGUKLSAgIHByZXZpb3VzbHkgbWFya2VkIHBvc2l0aW9uLiAgQW4gYWNjZXNz IG1ldGhvZCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgb3JkZXJlZAotICAgc2NhbnMgbmVlZCBub3Qg cHJvdmlkZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbXJl c3RycG9zPC9mdW5jdGlvbj4KLSAgIGZ1bmN0aW9ucyBpbiA8c3RydWN0bmFtZT5JbmRleEFtUm91 dGluZTwvc3RydWN0bmFtZT47IHNldCB0aG9zZSBwb2ludGVycyB0byBOVUxMCi0gICBpbnN0ZWFk LgorICAgQWNjZXNzIG1ldGhvZHMgdXNpbmcgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaW50ZXJmYWNlCisgICBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4gYSBwb3Np dGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJldHVybmluZyB0bworICAgdGhlIG1hcmtlZCBwb3Np dGlvbi4gIFdoZW4gYSBiYXRjaCBpcyBwcm9jZXNzZWQgaW4gYSBkaWZmZXJlbnQgZGlyZWN0aW9u CisgICB0aGFuIGl0IHdhcyBvcmlnaW5hbGx5IGZldGNoZWQsIG9yIHdoZW4gYSBtYXJrZWQgcG9z aXRpb24gaXMgcmVzdG9yZWQsIHRoZQorICAgaW5kZXggQU0gaXMgbm90aWZpZWQgdmlhIHRoZSA8 ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGNhbGxiYWNrIChpZgorICAgcHJvdmlkZWQp IHNvIGl0IGNhbiByZXNldCBhbnkgcHJpdmF0ZSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJh Y2tzIHRoZQorICAgc2NhbidzIHByb2dyZXNzIChzdWNoIGFzIGFycmF5IGtleSBzdGF0ZSkuICBT ZWUgdGhlIGRlc2NyaXB0aW9uIG9mCisgICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+ IGluIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWZ1bmN0aW9ucyIvPiBmb3IKKyAgIGRldGFpbHMuCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEJvdGggdGhlIHNjYW4gcG9zaXRpb24gYW5kIHRoZSBt YXJrIHBvc2l0aW9uIChpZiBhbnkpIG11c3QgYmUgbWFpbnRhaW5lZAorICAgVGhlIHNjYW4gcG9z aXRpb24gKGlmIGFueSkgbXVzdCBiZSBtYWludGFpbmVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQgaW5k ZXggQU0KICAgIGNvbnNpc3RlbnRseSBpbiB0aGUgZmFjZSBvZiBjb25jdXJyZW50IGluc2VydGlv bnMgb3IgZGVsZXRpb25zIGluIHRoZQogICAgaW5kZXguICBJdCBpcyBPSyBpZiBhIGZyZXNobHkt aW5zZXJ0ZWQgZW50cnkgaXMgbm90IHJldHVybmVkIGJ5IGEgc2NhbiB0aGF0CiAgICB3b3VsZCBo YXZlIGZvdW5kIHRoZSBlbnRyeSBpZiBpdCBoYWQgZXhpc3RlZCB3aGVuIHRoZSBzY2FuIHN0YXJ0 ZWQsIG9yIGZvcgpAQCAtMTA0NCwxMiArMTMzNywxNCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENv bXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgIDwvcGFy YT4KIAogICA8cGFyYT4KLSAgIEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCi0gICA8ZnVuY3Rpb24+ YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBjYWxsLiAg VGhpcyBjYW4gYmUKLSAgIG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGJlY2F1c2UgaXQgYWxsb3dzCi0gICBhdm9pZGluZyBsb2Nr L3VubG9jayBjeWNsZXMgd2l0aGluIHRoZSBhY2Nlc3MgbWV0aG9kLiAgSW4gcHJpbmNpcGxlCi0g ICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBl ZmZlY3RzIGFzIHJlcGVhdGVkCi0gICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNh bGxzLCBidXQgd2UgaW1wb3NlIHNldmVyYWwgcmVzdHJpY3Rpb25zIHRvCisgICBJbnN0ZWFkIG9m IHVzaW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0aAorICAg PGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxlcyBpbiBv bmUgY2FsbC4gIFRoaXMgY2FuCisgICBiZSBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50IHRoYW4g d2l0aCBhbiA8cXVvdGU+b3JkZXJlZDwvcXVvdGU+IHNjYW4KKyAgIGJlY2F1c2UgaXQgYWxsb3dz IGVmZmljaWVudCBzZXF1ZW50aWFsIGFjY2VzcyB0byB0YWJsZSBBTSBwYWdlcyBjb250YWluaW5n CisgICBtYXRjaGVzLiAgSW4gcHJpbmNpcGxlIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rp b24+IHNob3VsZCBoYXZlIHRoZQorICAgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gY2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8KICAgIHNp bXBsaWZ5IG1hdHRlcnMuICBGaXJzdCBvZiBhbGwsIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVu Y3Rpb24+IHJldHVybnMgYWxsCiAgICB0dXBsZXMgYXQgb25jZSBhbmQgbWFya2luZyBvciByZXN0 b3Jpbmcgc2NhbiBwb3NpdGlvbnMgaXNuJ3QKICAgIHN1cHBvcnRlZC4gU2Vjb25kbHksIHRoZSB0 dXBsZXMgYXJlIHJldHVybmVkIGluIGEgYml0bWFwIHdoaWNoIGRvZXNuJ3QKQEAgLTEwNjYsOCAr MTM2MSw4IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9w ZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKIAogICA8cGFyYT4KICAgIE5vdGUgdGhhdCBpdCBpcyBw ZXJtaXR0ZWQgZm9yIGFuIGFjY2VzcyBtZXRob2QgdG8gaW1wbGVtZW50IG9ubHkKLSAgIDxmdW5j dGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZCBub3QgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiwgb3IgdmljZSB2ZXJzYSwKLSAgIGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRh dGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBvdGhlci4KKyAgIDxmdW5jdGlvbj5h bWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZCBub3QgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPi88ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LAorICAgb3IgdmljZSB2ZXJzYSwg aWYgaXRzIGludGVybmFsIGltcGxlbWVudGF0aW9uIGlzIHVuc3VpdGVkIHRvIG9uZSBBUEkgb3Ig dGhlIG90aGVyLgogICA8L3BhcmE+CiAKICA8L3NlY3QxPgpAQCAtMTEyMywxMSArMTQxOCwxNyBA QCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwg T2lkIG9wY2ludHlwZSk7CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDxsaXN0aXRlbT4KICAgICAg IDxwYXJhPgotICAgICAgIEFuIGluZGV4IHNjYW4gbXVzdCBtYWludGFpbiBhIHBpbgotICAgICAg IG9uIHRoZSBpbmRleCBwYWdlIGhvbGRpbmcgdGhlIGl0ZW0gbGFzdCByZXR1cm5lZCBieQotICAg ICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIGFuZCA8ZnVuY3Rpb24+YW1idWxr ZGVsZXRlPC9mdW5jdGlvbj4gY2Fubm90IGRlbGV0ZQotICAgICAgIGVudHJpZXMgZnJvbSBwYWdl cyB0aGF0IGFyZSBwaW5uZWQgYnkgb3RoZXIgYmFja2VuZHMuICBUaGUgbmVlZAotICAgICAgIGZv ciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93LgorICAgICAgIEEgcGluIG11c3QgYmUgaGVs ZCBvbiBhbnkgaW5kZXggcGFnZSB3aG9zZSBpdGVtcyBtaWdodCBzdGlsbCBuZWVkIHRvCisgICAg ICAgYmUgZm9sbG93ZWQsIGFuZCA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gbXVz dCBhY3F1aXJlIGEKKyAgICAgICBjbGVhbnVwIGxvY2sgb24gZWFjaCBpbmRleCBwYWdlLCB3aGlj aCB3aWxsIGJsb2NrIGlmIGFueSBvdGhlcgorICAgICAgIGJhY2tlbmQgaG9sZHMgYSBwaW4gb24g dGhhdCBwYWdlLgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHNj YW5zLCB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZAorICAgICAgIG1hbmFnZXMgdGhpcyBwaW4gZGly ZWN0bHkuCisgICAgICAgRm9yIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMs IHRoZSBpbmRleCBBTSBob2xkcyBhIGJ1ZmZlcgorICAgICAgIHBpbiBvbiBlYWNoIGJhdGNoJ3Mg aW5kZXggbGVhZiBwYWdlIChpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhKSwKKyAgICAgICB3 aGlsZSB0aGUgdGFibGUgQU0gY29udHJvbHMgd2hlbiB0aGUgcGluIGlzIHJlbGVhc2VkIHZpYQor ICAgICAgIDxmdW5jdGlvbj5hbXJlbGVhc2ViYXRjaDwvZnVuY3Rpb24+LgorICAgICAgIFRoZSBu ZWVkIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93LgogICAgICAgPC9wYXJhPgogICAg ICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAtMTE1NiwyMyArMTQ1Nyw0MSBA QCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwg T2lkIG9wY2ludHlwZSk7CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoaXMgc29sdXRpb24g cmVxdWlyZXMgdGhhdCBpbmRleCBzY2FucyBiZSA8cXVvdGU+c3luY2hyb25vdXM8L3F1b3RlPjog d2UgaGF2ZQotICAgdG8gZmV0Y2ggZWFjaCBoZWFwIHR1cGxlIGltbWVkaWF0ZWx5IGFmdGVyIHNj YW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4Ci0gICBlbnRyeS4gIFRoaXMgaXMgZXhwZW5z aXZlIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgQW4KLSAgIDxxdW90ZT5hc3luY2hyb25vdXM8 L3F1b3RlPiBzY2FuIGluIHdoaWNoIHdlIGNvbGxlY3QgbWFueSBUSURzIGZyb20gdGhlIGluZGV4 LAotICAgYW5kIG9ubHkgdmlzaXQgdGhlIGhlYXAgdHVwbGVzIHNvbWV0aW1lIGxhdGVyLCByZXF1 aXJlcyBtdWNoIGxlc3MgaW5kZXgKLSAgIGxvY2tpbmcgb3ZlcmhlYWQgYW5kIGNhbiBhbGxvdyBh IG1vcmUgZWZmaWNpZW50IGhlYXAgYWNjZXNzIHBhdHRlcm4uCisgICBUaGlzIHNvbHV0aW9uIHJl cXVpcmVzIHRoYXQgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbmRleCBzY2FucyBi ZQorICAgPHF1b3RlPnN5bmNocm9ub3VzPC9xdW90ZT46IHRoZSB0YWJsZSBBTSBtdXN0IGZldGNo IGVhY2ggaGVhcCB0dXBsZQorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNvcnJl c3BvbmRpbmcgaW5kZXggZW50cnkuICBUaGlzIGlzCisgICBleHBlbnNpdmUgZm9yIGEgbnVtYmVy IG9mIHJlYXNvbnMuICBBbgorICAgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+IHNjYW4gaW4g d2hpY2ggd2UgY29sbGVjdCBtYW55IFRJRHMgZnJvbSB0aGUKKyAgIGluZGV4LCBhbmQgb25seSB2 aXNpdCB0aGUgaGVhcCB0dXBsZXMgc29tZXRpbWUgbGF0ZXIsIHJlcXVpcmVzIG11Y2ggbGVzcwor ICAgaW5kZXggbG9ja2luZyBvdmVyaGVhZCBhbmQgY2FuIGFsbG93IGEgbW9yZSBlZmZpY2llbnQg aGVhcCBhY2Nlc3MgcGF0dGVybi4KICAgIFBlciB0aGUgYWJvdmUgYW5hbHlzaXMsIHdlIG11c3Qg dXNlIHRoZSBzeW5jaHJvbm91cyBhcHByb2FjaCBmb3IKICAgIG5vbi1NVkNDLWNvbXBsaWFudCBz bmFwc2hvdHMsIGJ1dCBhbiBhc3luY2hyb25vdXMgc2NhbiBpcyB3b3JrYWJsZQogICAgZm9yIGEg cXVlcnkgdXNpbmcgYW4gTVZDQyBzbmFwc2hvdC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAg SW4gYW4gPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5kZXggc2NhbiwgdGhlIGFj Y2VzcyBtZXRob2QgZG9lcyBub3QKLSAgIGtlZXAgYW4gaW5kZXggcGluIG9uIGFueSBvZiB0aGUg cmV0dXJuZWQgdHVwbGVzLiAgVGhlcmVmb3JlCisgICBUaGUgYnVmZmVyIHBpbiBoZWxkIGJ5IGVh Y2ggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBiYXRjaCBvbiBpdHMKKyAgIGluZGV4 IGxlYWYgcGFnZSBpcyBvd25lZCBieSB0aGUgaW5kZXggQU0gKHN0b3JlZCBpbiB0aGUgcGVyLWJh dGNoIG9wYXF1ZQorICAgYXJlYSkgYnV0IHJlbGVhc2VkIHVuZGVyIHRoZSB0YWJsZSBBTSdzIGNv bnRyb2wgdmlhIHRoZQorICAgPGZ1bmN0aW9uPmFtcmVsZWFzZWJhdGNoPC9mdW5jdGlvbj4gY2Fs bGJhY2suICBTZWUgdGhlCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCA8ZnVu Y3Rpb24+YW1yZWxlYXNlYmF0Y2g8L2Z1bmN0aW9uPiwgYW5kCisgICA8ZnVuY3Rpb24+YW1raWxs aXRlbXNiYXRjaDwvZnVuY3Rpb24+IGRlc2NyaXB0aW9ucyBpbgorICAgPHhyZWYgbGlua2VuZD0i aW5kZXgtZnVuY3Rpb25zIi8+IGZvciBkZXRhaWxzLgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cisg ICBJbiBhbiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBpbmRleCBzY2FuLCB0aGUg YWNjZXNzIG1ldGhvZCBkb2VzCisgICBub3Qga2VlcCBhbiBpbmRleCBwaW4gb24gYW55IG9mIHRo ZSByZXR1cm5lZCB0dXBsZXMuICBUaGVyZWZvcmUKICAgIGl0IGlzIG9ubHkgc2FmZSB0byB1c2Ug c3VjaCBzY2FucyB3aXRoIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90cy4KICAgPC9wYXJhPgogCisg IDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IG1hbmFnZQorICAgcGluIGxpZmV0aW1lIHRoZW1zZWx2ZXMs IHNpbmNlIHRoZXJlIGlzIG5vIHRhYmxlIEFNIGludGVybWVkaWFyeSAodW5saWtlCisgICB3aXRo IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4pLiAgVGhlIGluZGV4IEFNIG11c3QgaG9s ZCBhIHBpbiBvbiB0aGUKKyAgIGN1cnJlbnQgaW5kZXggcGFnZSB1bnRpbCB0aGUgc2NhbiBtb3Zl cyB0byBhIGRpZmZlcmVudCBwYWdlIG9yIGVuZHMuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAg IFdoZW4gdGhlIDxzdHJ1Y3RmaWVsZD5hbXByZWRsb2Nrczwvc3RydWN0ZmllbGQ+IGZsYWcgaXMg bm90IHNldCwgYW55IHNjYW4gdXNpbmcgdGhhdAogICAgaW5kZXggYWNjZXNzIG1ldGhvZCB3aXRo aW4gYSBzZXJpYWxpemFibGUgdHJhbnNhY3Rpb24gd2lsbCBhY3F1aXJlIGEKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2Ny ZWF0ZV90YWJsZS5zZ21sCmluZGV4IDk4MjUzMmZlNy4uZjU4YzI4ODE1IDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYv Y3JlYXRlX3RhYmxlLnNnbWwKQEAgLTExNTMsMTIgKzExNTMsMTMgQEAgV0lUSCAoIE1PRFVMVVMg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFi bGU+LCBSRU0KICAgICAgPC9wYXJhPgogCiAgICAgIDxwYXJhPgotICAgICAgVGhlIGFjY2VzcyBt ZXRob2QgbXVzdCBzdXBwb3J0IDxsaXRlcmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+IChzZWUgPHhy ZWYKLSAgICAgIGxpbmtlbmQ9ImluZGV4YW0iLz4pOyBhdCBwcmVzZW50IHRoaXMgbWVhbnMgPGFj cm9ueW0+R0lOPC9hY3JvbnltPgotICAgICAgY2Fubm90IGJlIHVzZWQuICBBbHRob3VnaCBpdCdz IGFsbG93ZWQsIHRoZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZwotICAgICAgQi10cmVlIG9y IGhhc2ggaW5kZXhlcyB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMK LSAgICAgIGRvZXMgbm90aGluZyB0aGF0IGFuIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRv ZXNuJ3QgZG8gYmV0dGVyLgotICAgICAgU28gaW4gcHJhY3RpY2UgdGhlIGFjY2VzcyBtZXRob2Qg d2lsbCBhbHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKKyAgICAgIFRoZSBhY2Nl c3MgbWV0aG9kIG11c3Qgc3VwcG9ydCBlaXRoZXIgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJh bD4KKyAgICAgIG9yIDxsaXRlcmFsPmFtZ2V0YmF0Y2g8L2xpdGVyYWw+IChzZWUgPHhyZWYgbGlu a2VuZD0iaW5kZXhhbSIvPik7IGF0CisgICAgICBwcmVzZW50IHRoaXMgbWVhbnMgPGFjcm9ueW0+ R0lOPC9hY3JvbnltPiBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoCisgICAgICBpdCdzIGFsbG93 ZWQsIHRoZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZyBCLXRyZWUgb3IgaGFzaCBpbmRleGVz CisgICAgICB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMgZG9lcyBu b3RoaW5nIHRoYXQgYW4KKyAgICAgIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRvZXNuJ3Qg ZG8gYmV0dGVyLiAgU28gaW4gcHJhY3RpY2UgdGhlCisgICAgICBhY2Nlc3MgbWV0aG9kIHdpbGwg YWx3YXlzIGJlIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCiAgICAgICA8YWNyb255bT5TUC1H aVNUPC9hY3JvbnltPi4KICAgICAgPC9wYXJhPgogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2R1 bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKaW5kZXggMzFmOGQyYjgxLi4zODkyODFiNTEg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhf YW0uYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2Ft LmMKQEAgLTMzNCwxMCArMzM0LDEyIEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQku YW1iZWdpbnNjYW4gPSBkaWJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZGlyZXNjYW4sCiAJCS5h bWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNi YXRjaCA9IE5VTEwsCisJCS5hbXJlbGVhc2ViYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9 IE5VTEwsCiAJCS5hbWVuZHNjYW4gPSBkaWVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAot CQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1h dGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJ LmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA0 OWFkODRhNjIuLjJiYmVkZmY2ZSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTIwMCw2 ICsyMDAsNyBAQCBCT09MCiBCT09MRUFOCiBCT1gKIEJUQXJyYXlLZXlJbmZvCitCVEJhdGNoRGF0 YQogQlRCdWlsZFN0YXRlCiBCVENhbGxiYWNrU3RhdGUKIEJUQ3ljbGVJZApAQCAtMjI3LDggKzIy OCw2IEBAIEJUU2Nhbkluc2VydERhdGEKIEJUU2NhbktleVByZXByb2MKIEJUU2Nhbk9wYXF1ZQog QlRTY2FuT3BhcXVlRGF0YQotQlRTY2FuUG9zRGF0YQotQlRTY2FuUG9zSXRlbQogQlRTaGFyZWQK IEJUU29ydEFycmF5Q29udGV4dAogQlRTcG9vbApAQCAtMjU3LDYgKzI1Niw5IEBAIEJhc2VCYWNr dXBDbWQKIEJhc2VCYWNrdXBUYXJnZXRIYW5kbGUKIEJhc2VCYWNrdXBUYXJnZXRUeXBlCiBCYXRj aE1WQ0NTdGF0ZQorQmF0Y2hNYXRjaGluZ0l0ZW0KK0JhdGNoUmluZ0J1ZmZlcgorQmF0Y2hSaW5n SXRlbVBvcwogQmVnaW5EaXJlY3RNb2RpZnlfZnVuY3Rpb24KIEJlZ2luRm9yZWlnbkluc2VydF9m dW5jdGlvbgogQmVnaW5Gb3JlaWduTW9kaWZ5X2Z1bmN0aW9uCkBAIC0xMjEzLDYgKzEyMTUsNyBA QCBIYmFMaW5lCiBIZWFkbGluZUpzb25TdGF0ZQogSGVhZGxpbmVQYXJzZWRUZXh0CiBIZWFkbGlu ZVdvcmRFbnRyeQorSGVhcEJhdGNoRGF0YQogSGVhcENoZWNrQ29udGV4dAogSGVhcENoZWNrUmVh ZFN0cmVhbURhdGEKIEhlYXBQYWdlRnJlZXplCkBAIC0xMjkwLDYgKzEyOTMsOCBAQCBJbmRleE9y ZGVyQnlEaXN0YW5jZQogSW5kZXhQYXRoCiBJbmRleFJ1bnRpbWVLZXlJbmZvCiBJbmRleFNjYW4K K0luZGV4U2NhbkJhdGNoCitJbmRleFNjYW5CYXRjaERhdGEKIEluZGV4U2NhbkRlc2MKIEluZGV4 U2NhbkRlc2NEYXRhCiBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24KQEAgLTM0ODcsMTggKzM0OTIs MTcgQEAgYW1jYW5yZXR1cm5fZnVuY3Rpb24KIGFtY29zdGVzdGltYXRlX2Z1bmN0aW9uCiBhbWVu ZHNjYW5fZnVuY3Rpb24KIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24KK2FtZ2V0YmF0 Y2hfZnVuY3Rpb24KIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uCiBhbWdldHRyZWVoZWlnaHRfZnVuY3Rp b24KIGFtZ2V0dHVwbGVfZnVuY3Rpb24KIGFtaW5pdHBhcmFsbGVsc2Nhbl9mdW5jdGlvbgogYW1p bnNlcnRfZnVuY3Rpb24KIGFtaW5zZXJ0Y2xlYW51cF9mdW5jdGlvbgotYW1tYXJrcG9zX2Z1bmN0 aW9uCiBhbW9wdGlvbnNfZnVuY3Rpb24KIGFtcGFyYWxsZWxyZXNjYW5fZnVuY3Rpb24KIGFtcHJv cGVydHlfZnVuY3Rpb24KIGFtcmVzY2FuX2Z1bmN0aW9uCi1hbXJlc3RycG9zX2Z1bmN0aW9uCiBh bXRyYW5zbGF0ZV9jbXB0eXBlX2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9zdHJhdGVneV9mdW5jdGlv bgogYW12YWN1dW1jbGVhbnVwX2Z1bmN0aW9uCi0tIAoyLjUzLjAKCg== --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0004-Limit-get_actual_variable_range-to-scan-three-in.patch" Content-Disposition: attachment; filename="v14-0004-Limit-get_actual_variable_range-to-scan-three-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj4a13 RnJvbSA3ZTJjNzk2MzFlMzNiOWY0YTJkNWExODlmMTNhNzJmOGVjMWVmNzNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMiBGZWIgMjAyNiAyMzozNDozNiAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE0IDA0LzE2XSBM aW1pdCBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW4gdGhyZWUgaW5kZXgKIHBhZ2Vz LgoKZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBzY2FucyBhbiBpbmRleCB0byBmaW5kIGFjdHVh bCBtaW4vbWF4IHZhbHVlcwpmb3IgcGxhbm5lciBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uLiAgU2lu Y2UgdGhpcyBoYXBwZW5zIGR1cmluZyBwbGFubmluZywKd2UgY2FuJ3QgYWZmb3JkIHRvIHNwZW5k IHRvbyBtdWNoIHRpbWUgb24gaXQuICBDb21taXQgOWM2YWQ1ZWFhOSBhZGRlZApWSVNJVEVEX1BB R0VTX0xJTUlUIChhIGxpbWl0IG9mIDEwMCBoZWFwIHBhZ2UgdmlzaXRzKSB0byBib3VuZCB0aGUK YW1vdW50IG9mIHdvcmsgcGVyZm9ybWVkLCBnaXZpbmcgdXAgYW5kIGZhbGxpbmcgYmFjayB0byB0 aGUgcGdfc3RhdGlzdGljCmV4dHJlbWFsIHZhbHVlIHdoZW4gdGhlIGxpbWl0IGlzIGV4Y2VlZGVk LiAgQnV0IHRoYXQgaXNuJ3QgZWZmZWN0aXZlIGluCmNhc2VzIHdpdGggbW9yZSBleHRyZW1lIGNv bmNlbnRyYXRpb25zIG9mIGRlYWQgaW5kZXggdHVwbGVzLgoKUmVjZW50IGJlbmNobWFyayByZXN1 bHRzIGZyb20gTWFyayBDYWxsYWdoYW4gc2hvdyB0aGF0ClZJU0lURURfUEFHRVNfTElNSVQgaXNu J3QgZWZmZWN0aXZlIG9uY2UgdGhlIGRlYWQgaW5kZXggdHVwbGUgcHJvYmxlbQpnZXRzIG91dCBv ZiBoYW5kICh3aGljaCBpcyBleHBlY3RlZCB3aXRoIHF1ZXVlLWxpa2UgdGFibGVzIHRoYXQKY29u dGludWFsbHkgZGVsZXRlIG9sZGVyIHJlY29yZHMgYW5kIGluc2VydCBuZXdlciBvbmVzKS4gIFRo ZSByb290IGNhdXNlCmlzIHRoYXQgVklTSVRFRF9QQUdFU19MSU1JVCBjb3VudHMgaGVhcCBwYWdl IHZpc2l0cywgYnV0IHdoZW4gbWFueSBpbmRleAp0dXBsZXMgYXJlIG1hcmtlZCBMUF9ERUFELCBf YnRfcmVhZHBhZ2UgdHJhdmVyc2VzIGFyYml0cmFyaWx5IG1hbnkgaW5kZXgKcGFnZXMgd2l0aG91 dCByZXR1cm5pbmcgYW55IHR1cGxlcyAtLSB0aGUgaGVhcCBwYWdlIGNvdW50ZXIgaW4Kc2VsZnVu Y3MuYyBuZXZlciBnZXRzIGEgY2hhbmNlIHRvIGluY3JlbWVudCwgc28gVklTSVRFRF9QQUdFU19M SU1JVApuZXZlciB0cmlnZ2Vycy4gIEZ1cnRoZXJtb3JlLCB0aGUgZGVzaWduIG9mIHNldHRpbmcg TFBfREVBRCBiaXRzIHRvIGhlbHAKZnV0dXJlIGNhbGxzIGlzIHVsdGltYXRlbHkgY291bnRlcnBy b2R1Y3RpdmU6IGVhY2ggTFBfREVBRCB0dXBsZSBpcyBvbmUKZmV3ZXIgdGhhdCBjb3VudHMgYWdh aW5zdCBWSVNJVEVEX1BBR0VTX0xJTUlULCBzbyB0aGUgbW9yZSBMUF9ERUFEIGJpdHMKd2Ugc2V0 LCB0aGUgbGVzcyBlZmZlY3RpdmUgdGhlIGxpbWl0IGJlY29tZXMgYXQgYmFpbGluZyBvdXQgZWFy bHkuCgpSZXBsYWNlIFZJU0lURURfUEFHRVNfTElNSVQgd2l0aCBhIG1lY2hhbmlzbSB0aGF0IGxp bWl0cwpnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW5uaW5nIG9ubHkgdGhlIGV4dHJl bWFsIGluZGV4IGxlYWYgcGFnZSwKYW5kIHR3byBhZGRpdGlvbmFsIGluZGV4IHBhZ2VzLCByYXRo ZXIgdGhhbiBjb3VudGluZyBoZWFwIHBhZ2UgdmlzaXRzLgpUaGlzIHByb3ZpZGVzIGEgaGFyZCBn dWFyYW50ZWUgb24gdGhlIG1heGltdW0gd29yayBwZXIgY2FsbC4gIFVubGlrZQpWSVNJVEVEX1BB R0VTX0xJTUlULCB0aGlzIGxpbWl0IGNhbm5vdCBiZSBlcm9kZWQgYnkgTFBfREVBRCBiaXRzLgoK VGhpcyBhcHByb2FjaCBhbHNvIGhhcyB0aGUgbWVyaXQgb2YgYmVpbmcgY29tcGF0aWJsZSB3aXRo IHRoZSBpbmRleApwcmVmZXRjaGluZyBjb21taXQncyBuZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9z bG90KCkgaW50ZXJmYWNlLiAgVGhhdAphcHByb2FjaCBoaWRlcyBoZWFwIGFjY2VzcyBkZXRhaWxz IGZyb20gY2FsbGVycyBsaWtlIHNlbGZ1bmNzLmMsIG1ha2luZwpWSVNJVEVEX1BBR0VTX0xJTUlU IGltcHJhY3RpY2FsIHRvIGltcGxlbWVudCB3aXRob3V0IHB1c2hpbmcgYWQtaG9jCmxvZ2ljIGlu dG8gdGhlIHRhYmxlIEFNIGxheWVyLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3Qu aWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xemt0MVdrS3A0VlJKdTNx SGZtS1hjOFcrWFl2MVJYZzVkMmQzZlN2QWVPPXJnQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICB8ICA4ICsrKysrKwogc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICB8ICAzIC0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8IDExICsrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRzZWFyY2guYyAgICB8IDMyICsrKysrKysrKysrKysrKysrKysrKy0tLQogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAgICAgICB8IDMxICsrKysrKysrKysrKysrLS0tLS0t LS0tCiA2IGZpbGVzIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvcmVsc2Nhbi5oCmluZGV4IGQzYWI1ZjkxYy4uYjEyNWQ0ZjdjIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmgKQEAgLTM4MSw2ICszODEsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0Rh dGEKIAogCS8qIHBhcmFsbGVsIGluZGV4IHNjYW4gaW5mb3JtYXRpb24sIGluIHNoYXJlZCBtZW1v cnkgKi8KIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqcGFyYWxsZWxfc2NhbjsK KworCS8qCisJICogQ291bnRlciB0byByZXF1ZXN0IGVhcmx5IGFib3J0IGR1cmluZyBnZXRfYWN0 dWFsX3ZhcmlhYmxlX3JhbmdlIHNjYW5zLgorCSAqIFdoZW4gbm9uemVybywgdGhlIHNjYW4gd2ls bCByZWFkIGF0IG1vc3QgdGhpcyBtYW55IGxlYWYgcGFnZXMgYmVmb3JlCisJICogZ2l2aW5nIHVw IChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhvc2UgcGFnZXMgaGFkIG1hdGNoaW5nIGl0ZW1zKS4g WmVybworCSAqIG1lYW5zIGRpc2FibGVkIChub3JtYWwgc2NhbiBiZWhhdmlvcikuCisJICovCisJ aW50CQkJeHNfcmVhZF9leHRyZW1hbF9vbmx5OwogfSBJbmRleFNjYW5EZXNjRGF0YTsKIAogLyog R2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIHBhcmFsbGVsIHNjYW5zICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCmluZGV4IDhmMWMxMWE5My4uM2NiNTM2ZDZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW0uYwpAQCAtMTg4NCw5ICsxODg0LDYgQEAgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9p bnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkgKiBJZiB3ZSBj YW4ndCBzZWUgaXQsIG1heWJlIG5vIG9uZSBlbHNlIGNhbiBlaXRoZXIuICBBdCBjYWxsZXIKIAkJ ICogcmVxdWVzdCwgY2hlY2sgd2hldGhlciBhbGwgY2hhaW4gbWVtYmVycyBhcmUgZGVhZCB0byBh bGwKIAkJICogdHJhbnNhY3Rpb25zLgotCQkgKgotCQkgKiBOb3RlOiBpZiB5b3UgY2hhbmdlIHRo ZSBjcml0ZXJpb24gaGVyZSBmb3Igd2hhdCBpcyAiZGVhZCIsIGZpeCB0aGUKLQkJICogcGxhbm5l cidzIGdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2UoKSBmdW5jdGlvbiB0byBtYXRjaC4KIAkJICov CiAJCWlmIChhbGxfZGVhZCAmJiAqYWxsX2RlYWQpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDI0NzYxOWVhNi4uY2RhM2U3NGNiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTU1Nyw2ICs1NTcsMTcgQEAgaGVh cGFtX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKIAogCQkvKiBBcHBlbmQgYmF0Y2ggdG8gdGhlIGVuZCBvZiByaW5nIGJ1ZmZlci93cml0 ZSBpdCB0byBidWZmZXIgaW5kZXggKi8KIAkJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2Nhbiwg YmF0Y2gpOworCisJCS8qCisJCSAqIHhzX3JlYWRfZXh0cmVtYWxfb25seSBzY2FucyBhcmUgdXNl ZCBieSBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlCisJCSAqIHRvIGZpbmQgbWluL21heCB2YWx1 ZXMuICBUaGV5IG9ubHkgbmVlZCBhIHZhbHVlIGZyb20gb25lIG9mIHRoZQorCQkgKiBleHRyZW1h bCBsZWFmIHBhZ2VzLCBzbyBvbmNlIHdlIGhhdmUgb25lIGJhdGNoLCB3ZSBnaXZlIHVwLgorCQkg Ki8KKwkJaWYgKHVubGlrZWx5KHNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSkgJiYgcHJpb3JC YXRjaCkKKwkJeworCQkJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJCQlyZXR1cm4gTlVM TDsKKwkJfQogCX0KIAllbHNlCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCA2ZTg3 MTY5YzIuLmQ1MGUzZmE3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dl bmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsx MjYsNyBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQg bmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfaXR1cGRlc2MgPSBOVUxMOwogCXNjYW4t PnhzX2hpdHVwID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOworCXNjYW4tPnhz X3JlYWRfZXh0cmVtYWxfb25seSA9IDA7CiAKIAlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6 ZSA9IDA7CiAJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzZWFyY2guYwppbmRleCA0ZDFiMTExZGEuLmQwMTAyZWQzNyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0xNjU2LDYgKzE2NTYsNyBAQCBfYnRfcmVh ZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gs CiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUJU QmF0Y2hEYXRhICpidGZpcnN0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShmaXJzdGJhdGNoKTsKKwli b29sCQlleHRzY2FuZG9uZSA9IGZhbHNlOwogCUJsb2NrTnVtYmVyIGJsa25vLAogCQkJCWxhc3Rj dXJyYmxrbm87CiAKQEAgLTE3MDQsMTQgKzE3MDUsMjggQEAgX2J0X3JlYWRmaXJzdHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoLAogCiAJQXNzZXJ0KGZp cnN0YmF0Y2gtPmRpciA9PSBkaXIpOwogCi0JaWYgKGJsa25vID09IFBfTk9ORSB8fAorCS8qCisJ ICogTWFpbnRhaW4geHNfcmVhZF9leHRyZW1hbF9vbmx5LCBhIGxpbWl0IG9uIHRoZSBudW1iZXIg b2YgbGVhZiBwYWdlcworCSAqIHdlJ2xsIHJlYWQgYmVmb3JlIGdpdmluZyB1cCBhbmQgZW5kaW5n IHRoZSBzY2FuCisJICovCisJaWYgKHVubGlrZWx5KHNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25s eSkpCisJeworCQlpZiAoLS1zY2FuLT54c19yZWFkX2V4dHJlbWFsX29ubHkgPT0gMCkKKwkJCWV4 dHNjYW5kb25lID0gdHJ1ZTsKKwl9CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8IGV4dHNjYW5k b25lIHx8CiAJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwogCQkgIWJ0Zmlyc3RiYXRj aC0+bW9yZVJpZ2h0IDogIWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQpKQogCXsKIAkJLyoKIAkJICog Zmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9u ICh0aG91Z2gKLQkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwg Y29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKiBpZiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQg dGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpLgorCQkgKgorCQkgKiBBbHNvIGN1 dCBvdXIgbG9zc2VzIGR1cmluZyB4c19yZWFkX2V4dHJlbWFsX29ubHkgc2NhbnMsIHdoaWNoIGFy ZQorCQkgKiBsaW1pdGVkIHRvIHNjYW5uaW5nIG9ubHkgYSBmZXcgbGVhZiBwYWdlcyBpbiB0aGUg aW5kZXguCiAJCSAqLworCQlBc3NlcnQoIXNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSB8fCAh c28tPm5lZWRQcmltU2Nhbik7CiAJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZp cnN0YmF0Y2gpOwogCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKIAkJcmV0dXJuIE5VTEw7CkBA IC0xNzUyLDYgKzE3NjcsNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5E aXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5p bmRleFJlbGF0aW9uOworCWJvb2wJCWV4dHNjYW5kb25lID0gZmFsc2U7CiAJSW5kZXhTY2FuQmF0 Y2ggbmV3YmF0Y2g7CiAJQlRCYXRjaERhdGEgKmJ0bmV3YmF0Y2g7CiAKQEAgLTE4MjksOCArMTg0 NSwxOCBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIg Ymxrbm8sCiAJCS8qIG5vIG1hdGNoaW5nIHR1cGxlcyBvbiB0aGlzIHBhZ2UgKi8KIAkJX2J0X3Jl bGJ1ZihyZWwsIGJ0bmV3YmF0Y2gtPmJ1Zik7CiAKKwkJLyoKKwkJICogTWFpbnRhaW4geHNfcmVh ZF9leHRyZW1hbF9vbmx5LCBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgbGVhZiBwYWdlcworCQkg KiB3ZSdsbCByZWFkIGJlZm9yZSBnaXZpbmcgdXAgYW5kIGVuZGluZyB0aGUgc2NhbgorCQkgKi8K KwkJaWYgKHVubGlrZWx5KHNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSkpCisJCXsKKwkJCWlm ICgtLXNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSA9PSAwKQorCQkJCWV4dHNjYW5kb25lID0g dHJ1ZTsKKwkJfQorCiAJCS8qIENvbnRpbnVlIHRoZSBzY2FuIGluIHRoaXMgZGlyZWN0aW9uPyAq LwotCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCWlmIChibGtubyA9PSBQX05PTkUgfHwgZXh0 c2NhbmRvbmUgfHwKIAkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwogCQkJICFidG5l d2JhdGNoLT5tb3JlUmlnaHQgOiAhYnRuZXdiYXRjaC0+bW9yZUxlZnQpKQogCQl7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9zZWxmdW5jcy5jCmluZGV4IDZkODBhZTAwMy4uMDlmMmI5NjUyIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYwpAQCAtNzA4MSwxMyArNzA4MSwxMiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxl X3JhbmdlKFBsYW5uZXJJbmZvICpyb290LCBWYXJpYWJsZVN0YXREYXRhICp2YXJkYXRhLAogICoK ICAqIHNjYW5rZXlzIGlzIGEgMS1lbGVtZW50IHNjYW5rZXkgYXJyYXkgc2V0IHVwIHRvIHJlamVj dCBudWxscy4KICAqIHR5cExlbi90eXBCeVZhbCBkZXNjcmliZSB0aGUgZGF0YXR5cGUgb2YgdGhl IGluZGV4J3MgZmlyc3QgY29sdW1uLgotICogdGFibGVzbG90IGlzIGEgc2xvdCBzdWl0YWJsZSB0 byBob2xkIHRhYmxlIHR1cGxlcywgaW4gY2FzZSB3ZSBuZWVkCi0gKiB0byBwcm9iZSB0aGUgaGVh cC4KKyAqIHRhYmxlc2xvdCBpcyBhIHNsb3Qgc3VpdGFibGUgdG8gaG9sZCB0YWJsZSB0dXBsZXMu CiAgKiAoV2UgY291bGQgY29tcHV0ZSB0aGVzZSB2YWx1ZXMgbG9jYWxseSwgYnV0IHRoYXQgd291 bGQgbWVhbiBjb21wdXRpbmcgdGhlbQogICogdHdpY2Ugd2hlbiBnZXRfYWN0dWFsX3ZhcmlhYmxl X3JhbmdlIG5lZWRzIGJvdGggdGhlIG1pbiBhbmQgdGhlIG1heC4pCiAgKgotICogRmFpbHVyZSBv Y2N1cnMgZWl0aGVyIHdoZW4gdGhlIGluZGV4IGlzIGVtcHR5LCBvciB3ZSBkZWNpZGUgdGhhdCBp dCdzCi0gKiB0YWtpbmcgdG9vIGxvbmcgdG8gZmluZCBhIHN1aXRhYmxlIHR1cGxlLgorICogRmFp bHVyZSBvY2N1cnMgZWl0aGVyIHdoZW4gdGhlIGluZGV4IGlzIGVtcHR5LCBvciB3aGVuIGl0IHRh a2VzIHRvbyBsb25nIHRvCisgKiBmaW5kIGEgc3VpdGFibGUgdHVwbGUuCiAgKi8KIHN0YXRpYyBi b29sCiBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCkBAIC03 MTQ3LDIyICs3MTQ2LDMwIEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24g aGVhcFJlbCwKIAkgKgogCSAqIERlc3BpdGUgYWxsIHRoaXMgY2FyZSwgdGhlcmUgYXJlIHNpdHVh dGlvbnMgd2hlcmUgd2UgbWlnaHQgZmluZCBtYW55CiAJICogbm9uLXZpc2libGUgdHVwbGVzIG5l YXIgdGhlIGVuZCBvZiB0aGUgaW5kZXguICBXZSBkb24ndCB3YW50IHRvIGV4cGVuZAotCSAqIGEg aHVnZSBhbW91bnQgb2YgdGltZSBoZXJlLCBzbyB3ZSBnaXZlIHVwIG9uY2Ugd2UndmUgcmVhZCB0 b28gbWFueSBoZWFwCi0JICogcGFnZXMuICBXaGVuIHdlIGZhaWwgZm9yIHRoYXQgcmVhc29uLCB0 aGUgY2FsbGVyIHdpbGwgZW5kIHVwIHVzaW5nCi0JICogd2hhdGV2ZXIgZXh0cmVtYWwgdmFsdWUg aXMgcmVjb3JkZWQgaW4gcGdfc3RhdGlzdGljLgotCSAqCi0JICogWFhYIFRoaXMgY2FuJ3Qgd29y ayB3aXRoIHRoZSBuZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwKLQkgKiB3 aGljaCBzaW1wbHkgd29uJ3QgcmV0dXJuIGEgdHVwbGUgdGhhdCBpc24ndCB2aXNpYmxlIHRvIG91 ciBzbmFwc2hvdC4KLQkgKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgd2lsbCBuZWVkIHNvbWUg a2luZCBvZiBjYWxsYmFjayB0aGF0IHByb3ZpZGVzCi0JICogYSB3YXkgZm9yIHRoZSBzY2FuIHRv IGdpdmUgdXAgd2hlbiB0aGUgY29zdHMgc3RhcnQgdG8gZ2V0IG91dCBvZiBoYW5kLgorCSAqIGEg aHVnZSBhbW91bnQgb2YgdGltZSBoZXJlLCBzbyB3ZSBnaXZlIHVwIGFmdGVyIHJlYWRpbmcgYSBm ZXcgZXh0cmVtYWwKKwkgKiBpbmRleCBsZWFmIHBhZ2VzIHdpdGhvdXQgZmluZGluZyBtYXRjaGlu ZyBpdGVtcyAoZ2VuZXJhbGx5IG9ubHkgc2VlbgorCSAqIHdoZW4gcGFnZXMgaGF2ZSBtYW55IGlu ZGV4IHR1cGxlcyB3aXRoIHNldCBMUF9ERUFEIGJpdHMpLiAgV2hlbiB3ZSBnaXZlCisJICogdXAg dGhlIGNhbGxlciB3aWxsIGVuZCB1cCB1c2luZyB3aGF0ZXZlciBleHRyZW1hbCB2YWx1ZSBpcyBy ZWNvcmRlZCBpbgorCSAqIHBnX3N0YXRpc3RpYy4KIAkgKi8KIAlJbml0Tm9uVmFjdXVtYWJsZVNu YXBzaG90KFNuYXBzaG90Tm9uVmFjdXVtYWJsZSwKIAkJCQkJCQkgIEdsb2JhbFZpc1Rlc3RGb3Io aGVhcFJlbCkpOwogCisJLyogU2V0IHVwIGFuIGluZGV4LW9ubHkgc2NhbiAqLwogCWluZGV4X3Nj YW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsIHRydWUsCiAJCQkJCQkJCSAm U25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAogCQkJCQkJCQkgMSwgMCk7CiAJQXNzZXJ0KGlu ZGV4X3NjYW4tPnhzX3dhbnRfaXR1cCk7CisKKwkvKgorCSAqIE1ha2Ugb3VyIHNjYW4gcmVhZCBh dCBtb3N0IDMgaW5kZXggbGVhZiBwYWdlcyBiZWZvcmUgaXQganVzdCBnaXZlcyB1cC4KKwkgKiBU aGlzIGlzIG9uIHRoZSBjb25zZXJ2YXRpdmUgc2lkZTsgZ2l2aW5nIHVwIGFmdGVyIHRoZSBmaXJz dCBsZWFmIHBhZ2UKKwkgKiB3b3VsZCB3b3JrIGp1c3QgYXMgd2VsbCBpbiBtb3N0IGNhc2VzLiAg QnV0IGl0J3MgcG9zc2libGUgdGhhdCB0aGUKKwkgKiBpbmRleCdzIGxlZnRtb3N0L3JpZ2h0bW9z dCBsZWFmIHBhZ2UgaXMgb25lIHdpdGggdmVyeSBmZXcgaW5kZXggdHVwbGVzCisJICogKHdpdGgg b3Igd2l0aG91dCB0aGVpciBMUF9ERUFEIGJpdHMgc2V0KS4KKwkgKi8KKwlpbmRleF9zY2FuLT54 c19yZWFkX2V4dHJlbWFsX29ubHkgPSAzOworCiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNj YW5rZXlzLCAxLCBOVUxMLCAwKTsKIAogCS8qIEZldGNoIGZpcnN0L25leHQgdHVwbGUgaW4gc3Bl Y2lmaWVkIGRpcmVjdGlvbiAqLwotLSAKMi41My4wCgo= --00000000000037c445064cf162d7 Content-Type: application/octet-stream; name="v14-0002-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Disposition: attachment; filename="v14-0002-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmplzj4e15 RnJvbSAxYjY2ODFiZTM3YzZmMTBmZGUwYTk2MTgzN2VhN2YyOWU2Y2QwNjdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6NDA6MzUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNCAwMi8xNl0g aGVhcGFtOiBUcmFjayBoZWFwIGJsb2NrIGluIEluZGV4RmV0Y2hIZWFwRGF0YQogdXNpbmcgeHNf YmxrCgpBZGQgYW4gZXhwbGljaXQgQmxvY2tOdW1iZXIgZmllbGQgKHhzX2JsaykgdG8gSW5kZXhG ZXRjaEhlYXBEYXRhIHRoYXQKdHJhY2tzIHdoaWNoIGhlYXAgYmxvY2sgaXMgY3VycmVudGx5IHBp bm5lZCBpbiB4c19jYnVmLgoKaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIG5vdyB1c2VzIHhzX2Js ayB0byBkZXRlcm1pbmUgd2hlbiBidWZmZXIKc3dpdGNoaW5nIGlzIG5lZWRlZCwgcmVwbGFjaW5n IHRoZSBwcmV2aW91cyBhcHByb2FjaCB0aGF0IGNvbXBhcmVkCmJ1ZmZlciBpZGVudGl0aWVzIHZp YSBSZWxlYXNlQW5kUmVhZEJ1ZmZlciBvbiBldmVyeSBub24tSE9ULWNoYWluIGNhbGwuClRoZSBu ZXcgYXBwcm9hY2ggc2tpcHMgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgcGF0aCBlbnRpcmVseSB3aGVu IHRoZSBuZXh0ClRJRCBpcyBvbiB0aGUgc2FtZSBoZWFwIHBhZ2UsIHdoaWNoIGFsc28gbWVhbnMg dGhhdCBoZWFwX3BhZ2VfcHJ1bmVfb3B0CmlzIGNhbGxlZCBleGFjdGx5IG9uY2UgcGVyIGJsb2Nr ICh3aGVuIHRoZSBibG9jayBpcyBmaXJzdCBwaW5uZWQpLgoKVGhpcyBpcyBwcmVwYXJhdG9yeSB3 b3JrIGZvciBhbiB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIG5lZWQgeHNfYmxrCnRvIG1hbmFn ZSBidWZmZXIgcGluIHRyYW5zZmVycyBiZXR3ZWVuIHRoZSBzY2FuIGFuZCB0aGUgZXhlY3V0b3Ig c2xvdC4KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8IDI4ICsrKysrKysr KysrKysrKy0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxMCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggYWQ5OTNjMDczLi5hODU5YzkwZjQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvaGVhcGFtLmgKQEAgLTExNyw2ICsxMTcsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZl dGNoSGVhcERhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhIHhzX2Jhc2U7CS8qIEFNIGluZGVwZW5k ZW50IHBhcnQgb2YgdGhlIGRlc2NyaXB0b3IgKi8KIAogCUJ1ZmZlcgkJeHNfY2J1ZjsJCS8qIGN1 cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCisJQmxvY2tOdW1iZXIgeHNfYmxr OwkJCS8qIHhzX2NidWYncyBibG9jayBudW1iZXIsIGlmIGFueSAqLwogCS8qIE5COiBpZiB4c19j YnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQgYnVmZmVyICov CiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKaW5kZXggMmQxZWU5YWM5Li5lMTVhNGVmMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtODUsNiArODUsNyBAQCBoZWFwYW1faW5kZXhfZmV0 Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQogCiAJaHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOwogCWhz Y2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJs b2NrTnVtYmVyOwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKIH0KQEAgLTk5LDYgKzEwMCw3 IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQog CQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAkJaHNjYW4tPnhzX2NidWYgPSBJbnZh bGlkQnVmZmVyOwogCX0KKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogfQog CiBzdGF0aWMgdm9pZApAQCAtMTI0LDIzICsxMjYsMjkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1 cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCiAJQXNzZXJ0KFRUU19JU19C VUZGRVJUVVBMRShzbG90KSk7CiAKLQkvKiBXZSBjYW4gc2tpcCB0aGUgYnVmZmVyLXN3aXRjaGlu ZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQtSE9UIGNoYWluLiAqLwotCWlmICghKmNhbGxfYWdhaW4p CisJLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgb24g dGhlIHNhbWUgcGFnZS4gKi8KKwlpZiAoaHNjYW4tPnhzX2JsayAhPSBJdGVtUG9pbnRlckdldEJs b2NrTnVtYmVyKHRpZCkpCiAJewotCQkvKiBTd2l0Y2ggdG8gY29ycmVjdCBidWZmZXIgaWYgd2Ug ZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICovCi0JCUJ1ZmZlcgkJcHJldl9idWYgPSBoc2Nhbi0+eHNf Y2J1ZjsKKwkJQXNzZXJ0KCEqY2FsbF9hZ2Fpbik7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxl YXNlQW5kUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNf YmFzZS5yZWwsCi0JCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsK KwkJLyogUmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBudW1iZXIgZm9yIG5leHQgdGltZSAq LworCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCisJ CWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKKwkJCVJlbGVhc2VCdWZmZXIoaHNj YW4tPnhzX2NidWYpOworCisJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNf YmFzZS5yZWwsIGhzY2FuLT54c19ibGspOwogCiAJCS8qCi0JCSAqIFBydW5lIHBhZ2UsIGJ1dCBv bmx5IGlmIHdlIHdlcmVuJ3QgYWxyZWFkeSBvbiB0aGlzIHBhZ2UKKwkJICogUHJ1bmUgcGFnZSB3 aGVuIGl0IGlzIHBpbm5lZCBmb3IgdGhlIGZpcnN0IHRpbWUKIAkJICovCi0JCWlmIChwcmV2X2J1 ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKLQkJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jh c2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CisJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhz X2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CiAJfQogCisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQo aHNjYW4tPnhzX2NidWYpKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIoaHNjYW4tPnhz X2NidWYpID09IGhzY2FuLT54c19ibGspOworCUFzc2VydChoc2Nhbi0+eHNfYmxrID09IEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0 aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhz Y2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFw X2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKLS0gCjIuNTMuMAoK --00000000000037c445064cf162d7--