From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@displaylink.com header.s=mimecast20151025 header.b=ZzKNBLgA; spf=pass (domain: displaylink.com, ip: 207.82.80.167, mailfrom: andy.hayes@displaylink.com) Received: from eu-smtp-delivery-167.mimecast.com (eu-smtp-delivery-167.mimecast.com [207.82.80.167]) by groups.io with SMTP; Wed, 14 Aug 2019 07:43:50 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=displaylink.com; s=mimecast20151025; t=1565793828; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=GLMcjqxqzJ0Q1MbacFvB9LaN2iN991seU7AlyfynV6g=; b=ZzKNBLgA2xXoiZ/l+kZhMizRXqWCSFNi0l37DFBUep4Rp4miMfzbOdz6DI24JRueJ1pJuk 6kN+0uemL6zPhSjAeNHiJVOUldRnEGIbyeGKx542LzDjeeTRaJVjfaECst3hHoWsoyPIZm y29oN6aUzZiAP5wOf/5hFeMfOpyKK24= Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-am5eur03lp2053.outbound.protection.outlook.com [104.47.8.53]) (Using TLS) by relay.mimecast.com with ESMTP id uk-mta-128-z5QlMJYVPiu6y6m0HkULyg-1; Wed, 14 Aug 2019 15:43:45 +0100 Received: from DB8PR10MB2684.EURPRD10.PROD.OUTLOOK.COM (20.179.10.22) by DB8PR10MB2843.EURPRD10.PROD.OUTLOOK.COM (20.179.8.161) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2157.23; Wed, 14 Aug 2019 14:43:43 +0000 Received: from DB8PR10MB2684.EURPRD10.PROD.OUTLOOK.COM ([fe80::cc5a:259a:df2f:3bff]) by DB8PR10MB2684.EURPRD10.PROD.OUTLOOK.COM ([fe80::cc5a:259a:df2f:3bff%5]) with mapi id 15.20.2157.022; Wed, 14 Aug 2019 14:43:43 +0000 From: andy.hayes@displaylink.com To: "devel@edk2.groups.io" CC: Leif Lindholm , "michael.d.kinney@intel.com" Subject: [PATCH v1 0/1] Added GOP driver for DisplayLink-based Universal USB Docks to edk2-platforms Thread-Topic: [PATCH v1 0/1] Added GOP driver for DisplayLink-based Universal USB Docks to edk2-platforms Thread-Index: AdVSrd2PFMdqDEOiTxq+nuVLobGX2Q== Date: Wed, 14 Aug 2019 14:43:43 +0000 Message-ID: Accept-Language: en-GB, en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [213.146.140.62] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c9b7cb34-b45d-48a2-effc-08d720c5ce3b x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(49563074)(7193020);SRVR:DB8PR10MB2843; x-ms-traffictypediagnostic: DB8PR10MB2843: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3826; x-forefront-prvs: 01294F875B x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(366004)(136003)(396003)(376002)(346002)(39840400004)(189003)(199004)(3846002)(7736002)(2501003)(6116002)(478600001)(81156014)(81166006)(1730700003)(86362001)(476003)(186003)(6506007)(486006)(9686003)(54906003)(53546011)(44832011)(102836004)(66616009)(6436002)(26005)(316002)(790700001)(8676002)(66446008)(64756008)(66556008)(66476007)(6306002)(76116006)(54896002)(99286004)(66946007)(55016002)(99936001)(7696005)(5640700003)(6916009)(2351001)(25786009)(2906002)(33656002)(53936002)(74316002)(4326008)(256004)(14454004)(71200400001)(71190400001)(52536014)(5660300002)(66066001)(8936002);DIR:OUT;SFP:1101;SCL:1;SRVR:DB8PR10MB2843;H:DB8PR10MB2684.EURPRD10.PROD.OUTLOOK.COM;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: gFdmg8DOIa9ONctUfKy9xPdD2fQDixGvyFNr4/AyLCV1HfUaIoCT5fqZfw66lYYLVEhGQ97Dj/40F7awWD1UONjkgH33N/aqmDfn56yuaE/+bMw3+SS7/PUMWbAQWBf2xbrm4EDgNe7dG03/VEaxjjYKO1H4/t5UN/6eflzghimrso3sMMJroWdRt6HXzyv1lpcb4T7KDFg4J/FVU2Xpr9sKn9togiQEn3rpAryZ5968VZCDSpzp/e9nQd15BinLwhXOSb7Rt84eaSfDGuFgYniOG1aMU8YyjC6HE7Z86QZRCTnIroyf9+U5G+PE+ehCZVEoJKurrArkXSd3RMT5KoZLV18S4W2gqndQBBKYeP9qLSDMPKny9XR4grey1JXYksJTgLsY6QI6yZhaz1rF237kXKYZ061TJ5f7lH+wwy0= x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: displaylink.com X-MS-Exchange-CrossTenant-Network-Message-Id: c9b7cb34-b45d-48a2-effc-08d720c5ce3b X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Aug 2019 14:43:43.6505 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a4bda75a-b444-4312-9c90-44a7c4b2c91a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: llfjK54CPV4Fxg+ZWHyaLvbVW4OROs7C6SqM/UGfI1cbA1aGKdVBA10CRKlvuSrtdKeHmUj1KXybD62g5QdGfugJDb7ggRyWv4u1SOoIgSg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR10MB2843 X-MC-Unique: z5QlMJYVPiu6y6m0HkULyg-1 X-Mimecast-Spam-Score: 0 X-Groupsio-MsgNum: 45609 Content-Language: en-US Content-Type: multipart/mixed; boundary="_004_DB8PR10MB2684B8E28270DD983695427F95AD0DB8PR10MB2684EURP_" --_004_DB8PR10MB2684B8E28270DD983695427F95AD0DB8PR10MB2684EURP_ Content-Type: multipart/alternative; boundary="_000_DB8PR10MB2684B8E28270DD983695427F95AD0DB8PR10MB2684EURP_" --_000_DB8PR10MB2684B8E28270DD983695427F95AD0DB8PR10MB2684EURP_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable >>From 4a42eb997aeb3699217b40bf3bc47dec56458847 Mon Sep 17 00:00:00 2001 From: "Andy Hayes" < andy.hayes@displaylink.com > Date: Wed, 14 Aug 2019 15:30:20 +0100 Subject: [PATCH v1 0/1] Added GOP graphics driver for DisplayLink-based Uni= versal USB Docks to edk2-platforms andy.hayes@displaylink.com (1): Added GOP driver for USB Docks which use DisplayLink chips. .../DisplayLinkPkg/DisplayLinkPkg.dsc | 61 + .../DisplayLinkGop/DisplayLinkGopDxe.inf | 63 + .../DisplayLinkPkg/DisplayLinkGop/Edid.h | 129 ++ .../DisplayLinkGop/UsbDescriptors.h | 109 ++ .../DisplayLinkGop/UsbDisplayLink.h | 284 +++++ .../DisplayLinkGop/CapabilityDescriptor.c | 137 ++ .../DisplayLinkGop/ComponentName.c | 235 ++++ .../DisplayLinkPkg/DisplayLinkGop/Edid.c | 598 +++++++++ .../DisplayLinkPkg/DisplayLinkGop/Gop.c | 587 +++++++++ .../DisplayLinkGop/UsbDescriptors.c | 144 +++ .../DisplayLinkGop/UsbDisplayLink.c | 1109 +++++++++++++++++ .../DisplayLinkGop/UsbTransfer.c | 180 +++ .../DisplayLinkGop/VideoModes.c | 254 ++++ Drivers/DisplayLink/DisplayLinkPkg/ReadMe.md | 77 ++ Maintainers.txt | 5 + 15 files changed, 3972 insertions(+) create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkPkg.dsc create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/Displa= yLinkGopDxe.inf create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/Edid.h create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/UsbDes= criptors.h create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/UsbDis= playLink.h create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/Capabi= lityDescriptor.c create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/Compon= entName.c create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/Edid.c create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/Gop.c create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/UsbDes= criptors.c create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/UsbDis= playLink.c create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/UsbTra= nsfer.c create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/DisplayLinkGop/VideoM= odes.c create mode 100644 Drivers/DisplayLink/DisplayLinkPkg/ReadMe.md -- 2.17.1 --_000_DB8PR10MB2684B8E28270DD983695427F95AD0DB8PR10MB2684EURP_ Content-Type: text/html; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable

From 4a42eb997aeb3699217b40bf3bc47dec56458847 Mon Se= p 17 00:00:00 2001

From: "Andy Hayes" < andy.hayes@display= link.com >

Date: Wed, 14 Aug 2019 15:30:20 +0100=

Subject: [PATCH v1 0/1] Added GOP graphics driver fo= r DisplayLink-based Universal USB Docks to edk2-platforms

 

andy.hayes@displaylink.com (1):

  Added GOP driver for USB Docks which use Disp= layLink chips.

 

.../DisplayLinkPkg/DisplayLinkPkg.dsc  &nb= sp;      |   61 +

.../DisplayLinkGop/DisplayLinkGopDxe.inf  =     |   63 +

.../DisplayLinkPkg/DisplayLinkGop/Edid.h  =     |  129 ++

.../DisplayLinkGop/UsbDescriptors.h   = ;        |  109 ++

.../DisplayLinkGop/UsbDisplayLink.h   = ;        |  284 ++++= ;+

.../DisplayLinkGop/CapabilityDescriptor.c  = ;   |  137 ++

.../DisplayLinkGop/ComponentName.c   =          |  235 +++= ;+

.../DisplayLinkPkg/DisplayLinkGop/Edid.c  =     |  598 +++++++++= ;

.../DisplayLinkPkg/DisplayLinkGop/Gop.c  &= nbsp;    |  587 ++++++++= ;+

.../DisplayLinkGop/UsbDescriptors.c   = ;        |  144 +++

.../DisplayLinkGop/UsbDisplayLink.c   = ;        | 1109 +++++= ;++++++++++++

.../DisplayLinkGop/UsbTransfer.c   &n= bsp;          |  180 += ;++

.../DisplayLinkGop/VideoModes.c   &nb= sp;           |  254= ++++

Drivers/DisplayLink/DisplayLinkPkg/ReadMe.md  |=    77 ++

Maintainers.txt      &= nbsp;           &nbs= p;            | = ;   5 +

15 files changed, 3972 insertions(+)<= /p>

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkPkg.dsc

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/DisplayLinkGopDxe.inf

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/Edid.h

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/UsbDescriptors.h

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/UsbDisplayLink.h

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/CapabilityDescriptor.c

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/ComponentName.c

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/Edid.c

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/Gop.c

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/UsbDescriptors.c

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/UsbDisplayLink.c

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/UsbTransfer.c

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/DisplayLinkGop/VideoModes.c

create mode 100644 Drivers/DisplayLink/DisplayLinkPk= g/ReadMe.md

 

--

2.17.1

--_000_DB8PR10MB2684B8E28270DD983695427F95AD0DB8PR10MB2684EURP_-- --_004_DB8PR10MB2684B8E28270DD983695427F95AD0DB8PR10MB2684EURP_ Content-Type: application/octet-stream; name="0001-Added-GOP-driver-for-USB-Docks-using-DisplayLink-chi.patch" Content-Description: 0001-Added-GOP-driver-for-USB-Docks-using-DisplayLink-chi.patch Content-Disposition: attachment; filename="0001-Added-GOP-driver-for-USB-Docks-using-DisplayLink-chi.patch"; size=136837; creation-date="Wed, 14 Aug 2019 14:37:14 GMT"; modification-date="Wed, 14 Aug 2019 14:37:14 GMT" Content-Transfer-Encoding: base64 RnJvbSA0YTQyZWI5OTdhZWIzNjk5MjE3YjQwYmYzYmM0N2RlYzU2NDU4ODQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiYW5keS5oYXllc0BkaXNwbGF5bGluay5jb20iIDxhaGF5ZXNA VUtDQU1MMzE0OC5OZXduaGFtUmVzZWFyY2gubG9jYWw+CkRhdGU6IFdlZCwgMTQgQXVnIDIwMTkg MTU6Mjg6NTEgKzAxMDAKU3ViamVjdDogW1BBVENIIHYxIDEvMV0gQWRkZWQgR09QIGRyaXZlciBm b3IgVVNCIERvY2tzIHVzaW5nIERpc3BsYXlMaW5rCiBjaGlwcy4KCi0tLQogRHJpdmVycy9EaXNw bGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5TGlua1BrZy5kc2MgICAgICAgICAgICAgICAg ICAgIHwgICA2MSArKwogRHJpdmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5 TGlua0dvcC9EaXNwbGF5TGlua0dvcER4ZS5pbmYgIHwgICA2MyArKwogRHJpdmVycy9EaXNwbGF5 TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5TGlua0dvcC9FZGlkLmggICAgICAgICAgICAgICAg IHwgIDEyOSArKysKIERyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxp bmtHb3AvVXNiRGVzY3JpcHRvcnMuaCAgICAgICB8ICAxMDkgKysKIERyaXZlcnMvRGlzcGxheUxp bmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtHb3AvVXNiRGlzcGxheUxpbmsuaCAgICAgICB8 ICAyODQgKysrKysKIERyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxp bmtHb3AvQ2FwYWJpbGl0eURlc2NyaXB0b3IuYyB8ICAxMzcgKysrCiBEcml2ZXJzL0Rpc3BsYXlM aW5rL0Rpc3BsYXlMaW5rUGtnL0Rpc3BsYXlMaW5rR29wL0NvbXBvbmVudE5hbWUuYyAgICAgICAg fCAgMjM1ICsrKysrCiBEcml2ZXJzL0Rpc3BsYXlMaW5rL0Rpc3BsYXlMaW5rUGtnL0Rpc3BsYXlM aW5rR29wL0VkaWQuYyAgICAgICAgICAgICAgICAgfCAgNTk4ICsrKysrKysrKysrCiBEcml2ZXJz L0Rpc3BsYXlMaW5rL0Rpc3BsYXlMaW5rUGtnL0Rpc3BsYXlMaW5rR29wL0dvcC5jICAgICAgICAg ICAgICAgICAgfCAgNTg3ICsrKysrKysrKysrCiBEcml2ZXJzL0Rpc3BsYXlMaW5rL0Rpc3BsYXlM aW5rUGtnL0Rpc3BsYXlMaW5rR29wL1VzYkRlc2NyaXB0b3JzLmMgICAgICAgfCAgMTQ0ICsrKwog RHJpdmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5TGlua0dvcC9Vc2JEaXNw bGF5TGluay5jICAgICAgIHwgMTEwOSArKysrKysrKysrKysrKysrKysrKwogRHJpdmVycy9EaXNw bGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5TGlua0dvcC9Vc2JUcmFuc2Zlci5jICAgICAg ICAgIHwgIDE4MCArKysrCiBEcml2ZXJzL0Rpc3BsYXlMaW5rL0Rpc3BsYXlMaW5rUGtnL0Rpc3Bs YXlMaW5rR29wL1ZpZGVvTW9kZXMuYyAgICAgICAgICAgfCAgMjU0ICsrKysrCiBEcml2ZXJzL0Rp c3BsYXlMaW5rL0Rpc3BsYXlMaW5rUGtnL1JlYWRNZS5tZCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDc3ICsrCiBNYWludGFpbmVycy50eHQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIDE1IGZpbGVzIGNoYW5n ZWQsIDM5NzIgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL0RyaXZlcnMvRGlzcGxheUxpbmsv RGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtQa2cuZHNjIGIvRHJpdmVycy9EaXNwbGF5TGluay9E aXNwbGF5TGlua1BrZy9EaXNwbGF5TGlua1BrZy5kc2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi45NTUzMzFiYTYwNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJz L0Rpc3BsYXlMaW5rL0Rpc3BsYXlMaW5rUGtnL0Rpc3BsYXlMaW5rUGtnLmRzYwpAQCAtMCwwICsx LDYxIEBACisjLyoqIEBmaWxlDQorIw0KKyMgIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBEaXNw bGF5TGluayAoVUspIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisjDQorIyAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyoqLw0KKw0KK1tEZWZp bmVzXQ0KKyAgUExBVEZPUk1fTkFNRSAgICAgICAgICAgICAgICAgID0gRGlzcGxheUxpbmtQa2cN CisgIFBMQVRGT1JNX0dVSUQgICAgICAgICAgICAgICAgICA9IGFkM2IzN2IwLWY3OTgtNGY5Ny05 YjNmLTBjNmY0M2Q3Yzk5Mw0KKyAgUExBVEZPUk1fVkVSU0lPTiAgICAgICAgICAgICAgID0gMC4x DQorICBEU0NfU1BFQ0lGSUNBVElPTiAgICAgICAgICAgICAgPSAweDAwMDEwMDFDDQorICBPVVRQ VVRfRElSRUNUT1JZICAgICAgICAgICAgICAgPSBCdWlsZC9EaXNwbGF5TGluaw0KKyAgU1VQUE9S VEVEX0FSQ0hJVEVDVFVSRVMgICAgICAgID0gWDY0fElBMzJ8QUFSQ0g2NHxBUk0NCisgIEJVSUxE X1RBUkdFVFMgICAgICAgICAgICAgICAgICA9IERFQlVHfFJFTEVBU0V8Tk9PUFQNCisgIFNLVUlE X0lERU5USUZJRVIgICAgICAgICAgICAgICA9IERFRkFVTFQNCisNCitbTGlicmFyeUNsYXNzZXNd DQorICBCYXNlTGlifE1kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvQmFzZUxpYi5pbmYNCisgIEJhc2VN ZW1vcnlMaWJ8TWRlUGtnL0xpYnJhcnkvQmFzZU1lbW9yeUxpYi9CYXNlTWVtb3J5TGliLmluZg0K KyAgRGVidWdMaWJ8TWRlUGtnL0xpYnJhcnkvVWVmaURlYnVnTGliQ29uT3V0L1VlZmlEZWJ1Z0xp YkNvbk91dC5pbmYNCisgIERlYnVnUHJpbnRFcnJvckxldmVsTGlifE1kZVBrZy9MaWJyYXJ5L0Jh c2VEZWJ1Z1ByaW50RXJyb3JMZXZlbExpYi9CYXNlRGVidWdQcmludEVycm9yTGV2ZWxMaWIuaW5m DQorICBEZXZpY2VQYXRoTGlifE1kZVBrZy9MaWJyYXJ5L1VlZmlEZXZpY2VQYXRoTGliL1VlZmlE ZXZpY2VQYXRoTGliLmluZg0KKyAgUGNkTGlifE1kZVBrZy9MaWJyYXJ5L0Jhc2VQY2RMaWJOdWxs L0Jhc2VQY2RMaWJOdWxsLmluZg0KKyAgUHJpbnRMaWJ8TWRlUGtnL0xpYnJhcnkvQmFzZVByaW50 TGliL0Jhc2VQcmludExpYi5pbmYNCisgIFJlcG9ydFN0YXR1c0NvZGVMaWJ8TWRlTW9kdWxlUGtn L0xpYnJhcnkvRHhlUmVwb3J0U3RhdHVzQ29kZUxpYi9EeGVSZXBvcnRTdGF0dXNDb2RlTGliLmlu Zg0KKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGlifE1kZVBrZy9MaWJyYXJ5L1VlZmlCb290U2Vy dmljZXNUYWJsZUxpYi9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaW5mDQorICBVZWZpRHJpdmVy RW50cnlQb2ludHxNZGVQa2cvTGlicmFyeS9VZWZpRHJpdmVyRW50cnlQb2ludC9VZWZpRHJpdmVy RW50cnlQb2ludC5pbmYNCisgIFVlZmlMaWJ8TWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9VZWZpTGli LmluZg0KKyAgVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGlifE1kZVBrZy9MaWJyYXJ5L1VlZmlS dW50aW1lU2VydmljZXNUYWJsZUxpYi9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIuaW5mDQor ICBVZWZpVXNiTGlifE1kZVBrZy9MaWJyYXJ5L1VlZmlVc2JMaWIvVWVmaVVzYkxpYi5pbmYNCisN CitbTGlicmFyeUNsYXNzZXMuY29tbW9uLlVFRklfRFJJVkVSXQ0KKyAgTWVtb3J5QWxsb2NhdGlv bkxpYnxNZGVQa2cvTGlicmFyeS9VZWZpTWVtb3J5QWxsb2NhdGlvbkxpYi9VZWZpTWVtb3J5QWxs b2NhdGlvbkxpYi5pbmYNCisNCitbTGlicmFyeUNsYXNzZXMuQUFSQ0g2NF0NCisgIE5VTEx8QXJt UGtnL0xpYnJhcnkvQ29tcGlsZXJJbnRyaW5zaWNzTGliL0NvbXBpbGVySW50cmluc2ljc0xpYi5p bmYNCisgIE5VTEx8TWRlUGtnL0xpYnJhcnkvQmFzZVN0YWNrQ2hlY2tMaWIvQmFzZVN0YWNrQ2hl Y2tMaWIuaW5mDQorDQorW0xpYnJhcnlDbGFzc2VzLkFSTV0NCisgIE5VTEx8QXJtUGtnL0xpYnJh cnkvQ29tcGlsZXJJbnRyaW5zaWNzTGliL0NvbXBpbGVySW50cmluc2ljc0xpYi5pbmYNCisgIE5V TEx8TWRlUGtnL0xpYnJhcnkvQmFzZVN0YWNrQ2hlY2tMaWIvQmFzZVN0YWNrQ2hlY2tMaWIuaW5m DQorDQorW1BjZHNGaXhlZEF0QnVpbGRdDQorIWlmZGVmICQoREVCVUdfRU5BQkxFX09VVFBVVCkN CisgIGdFZmlNZGVQa2dUb2tlblNwYWNlR3VpZC5QY2REZWJ1Z1Byb3BlcnR5TWFza3wweDNmDQor ICBnRWZpTWRlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRGVidWdQcmludEVycm9yTGV2ZWx8MHg4MDA4 MDA0MyAgIyBGbGFncyB0byBjb250cm9sIGFtb3VudCBvZiBkZWJ1ZyBvdXRwdXQgLSBzZWUgaHR0 cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS90aWFub2NvcmUuZ2l0aHViLmlvL3dpa2kvRURLLUlJ LURlYnVnZ2luZw0KKyAgZ0VmaU1kZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFJlcG9ydFN0YXR1c0Nv ZGVQcm9wZXJ0eU1hc2t8MHgwNw0KKyFlbmRpZg0KKw0KK1tDb21wb25lbnRzXQ0KKyAgRHJpdmVy cy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5TGlua0dvcC9EaXNwbGF5TGlua0dv cER4ZS5pbmYNCisNCitbQnVpbGRPcHRpb25zXQ0KKyAgKl8qXypfQ0NfRkxBR1MgICAgICAgICAg ICAgICA9IC1EIERJU0FCTEVfTkVXX0RFUFJFQ0FURURfSU5URVJGQUNFUyAtRCBJTkZfRFJJVkVS X1ZFUlNJT049JChJTkZfRFJJVkVSX1ZFUlNJT04pDQorICBHQ0M6UkVMRUFTRV8qXypfQ0NfRkxB R1MgICAgID0gLURNREVQS0dfTkRFQlVHDQorICBNU0ZUOlJFTEVBU0VfKl8qX0NDX0ZMQUdTICAg ID0gL0QgTURFUEtHX05ERUJVRw0KKyFpZmRlZiAkKENPUFlfUElYRUxTX0ZST01fUFJJTUFSWV9H T1BfREVWSUNFKQ0KKyAgKl8qXypfQ0NfRkxBR1MgPSAtRCBDT1BZX1BJWEVMU19GUk9NX1BSSU1B UllfR09QX0RFVklDRQ0KKyFlbmRpZg0KZGlmZiAtLWdpdCBhL0RyaXZlcnMvRGlzcGxheUxpbmsv RGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtHb3AvRGlzcGxheUxpbmtHb3BEeGUuaW5mIGIvRHJp dmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5TGlua0dvcC9EaXNwbGF5TGlu a0dvcER4ZS5pbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45ZjFl MWNkN2YzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Ecml2ZXJzL0Rpc3BsYXlMaW5rL0Rpc3BsYXlM aW5rUGtnL0Rpc3BsYXlMaW5rR29wL0Rpc3BsYXlMaW5rR29wRHhlLmluZgpAQCAtMCwwICsxLDYz IEBACisjLyoqIEBmaWxlDQorIyBVU0IgRGlzcGxheUxpbmsgZHJpdmVyIHRoYXQgaW1wbGVtZW50 cyBibHQgYW5kIEVESUQgY29tbWFuZHMNCisjDQorIyBVU0IgRGlzcGxheUxpbmsgZHJpdmVyIGNv bnN1bWVzIEkvTyBQcm90b2NvbCBhbmQgRGV2aWNlIFBhdGggUHJvdG9jb2wsIGFuZCBwcm9kdWNl cw0KKyMgR3JhcGhpY3MgT3V0cHV0IFByb3RvY29sIG9uIERpc3BsYXlMaW5rIGRldmljZXMuDQor IyAxLiBEaXNwbGF5TGluayByZWZlcmVuY2UNCisjIDIuIFVFRkkgU3BlY2lmaWNhdGlvbiwgdjIu MQ0KKyMNCisjICBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgRGlzcGxheUxpbmsgKFVLKSBMdGQu IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorIw0KKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQorIw0KKyMqKi8NCisNCisNCitbRGVmaW5lc10NCisgIElORl9W RVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMUINCisgIEJBU0VfTkFNRSAgICAg ICAgICAgICAgICAgICAgICA9IERpc3BsYXlMaW5rR29wDQorICBGSUxFX0dVSUQgICAgICAgICAg ICAgICAgICAgICAgPSAyRDJFNjJBQS05RUNGLTQzYjctODIxOS05NEU3RkM3MTNERkYNCisgIE1P RFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IFVFRklfRFJJVkVSDQorICBWRVJTSU9OX1NU UklORyAgICAgICAgICAgICAgICAgPSAxLjANCisgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAg ICAgICA9IFVzYkRpc3BsYXlMaW5rRHJpdmVyQmluZGluZ0VudHJ5UG9pbnQNCisgIFVOTE9BRF9J TUFHRSAgICAgICAgICAgICAgICAgICA9IFVzYkRpc3BsYXlMaW5rRHJpdmVyQ29tYmluZWRHb3BV bmxvYWQNCisgIElORl9EUklWRVJfVkVSU0lPTiAgICAgICAgICAgICA9IDB4MDAwMDAwMDENCisN CitbU291cmNlc10NCisgIENhcGFiaWxpdHlEZXNjcmlwdG9yLmMNCisgIENvbXBvbmVudE5hbWUu Yw0KKyAgRWRpZC5jDQorICBHb3AuYw0KKyAgVXNiRGVzY3JpcHRvcnMuYw0KKyAgVXNiRGlzcGxh eUxpbmsuYw0KKyAgVXNiRGlzcGxheUxpbmsuaA0KKyAgVXNiVHJhbnNmZXIuYw0KKyAgVmlkZW9N b2Rlcy5jDQorDQorW1BhY2thZ2VzXQ0KKyAgTWRlUGtnL01kZVBrZy5kZWMNCisNCitbTGlicmFy eUNsYXNzZXNdDQorICBCYXNlTWVtb3J5TGliDQorICBEZWJ1Z0xpYg0KKyAgTWVtb3J5QWxsb2Nh dGlvbkxpYg0KKyAgUmVwb3J0U3RhdHVzQ29kZUxpYg0KKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxl TGliDQorICBVZWZpRHJpdmVyRW50cnlQb2ludA0KKyAgVWVmaUxpYg0KKyAgVWVmaVVzYkxpYg0K Kw0KK1tQcm90b2NvbHNdDQorICBnRWZpVXNiSW9Qcm90b2NvbEd1aWQgICAgICAgICAgICAgICAg ICAgICAgICAgIyMgVE9fU1RBUlQNCisgIGdFZmlFZGlkQWN0aXZlUHJvdG9jb2xHdWlkICAgICAg ICAgICAgICAgICAgICAjIFBST1RPQ09MIEJZX1NUQVJUDQorICBnRWZpRWRpZERpc2NvdmVyZWRQ cm90b2NvbEd1aWQgICAgICAgICAgICAgICAgIyBQUk9UT0NPTCBCWV9TVEFSVA0KKyAgZ0VmaUVk aWRPdmVycmlkZVByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICMgUFJPVE9DT0wgVE9fU1RB UlQNCisgIGdFZmlIaWlEYXRhYmFzZVByb3RvY29sR3VpZA0KKyAgZ0VmaUhpaUZvbnRQcm90b2Nv bEd1aWQNCisNCitbR3VpZHNdDQorICBnRWZpRXZlbnRFeGl0Qm9vdFNlcnZpY2VzR3VpZA0KKyAg Z0VmaUdsb2JhbFZhcmlhYmxlR3VpZA0KKw0KK1tQY2RdDQorICBnRWZpTWRlUGtnVG9rZW5TcGFj ZUd1aWQuUGNkVWVmaUxpYk1heFByaW50QnVmZmVyU2l6ZSAgICAgIyMgQ09OU1VNRVMNCmRpZmYg LS1naXQgYS9Ecml2ZXJzL0Rpc3BsYXlMaW5rL0Rpc3BsYXlMaW5rUGtnL0Rpc3BsYXlMaW5rR29w L0VkaWQuaCBiL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtH b3AvRWRpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODBlNDQz Y2VkNGE4Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlu a1BrZy9EaXNwbGF5TGlua0dvcC9FZGlkLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qKiBAZmlsZSBF ZGlkLmgNCisgKiBAYnJpZWYgSGVscGVyIHJvdXRpbmUgYW5kIGNvcnJlc3BvbmRpbmcgZGF0YSBz dHJ1Y3QgdXNlZCBieSBVU0IgRGlzcGxheUxpbmsgRHJpdmVyLg0KKyAqIFJlYWRzIGFuZCBwYXJz ZXMgdGhlIEVESUQsIGNoZWNrcyBpZiBhIHJlcXVlc3RlZCB2aWRlbyBtb2RlIGlzIGluIHRoZSBz dXBwbGllZCBFRElEDQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgRGlzcGxheUxp bmsgKFVLKSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyAqDQorKiovDQorDQorI2lmbmRlZiBF RElEX0gNCisjZGVmaW5lIEVESURfSA0KKw0KKyNpbmNsdWRlICJVc2JEaXNwbGF5TGluay5oIg0K Kw0KKyNkZWZpbmUgRURJRF9IRUFERVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgKChz aXplX3QpOCkNCisjZGVmaW5lIEVESURfTlVNQkVSX09GX0VTVEFCTElTSEVEX1RJTUlOR1NfQllU RVMgICgoVUlOVE4pMykNCisjZGVmaW5lIEVESURfTlVNQkVSX09GX1NUQU5EQVJEX1RJTUlOR1Mg ICAgICAgICAgICgoVUlOVE4pOCkNCisjZGVmaW5lIEVESURfTlVNQkVSX09GX0RFVEFJTEVEX1RJ TUlOR1MgICAgICAgICAgICgoVUlOVE4pNCkNCisNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBV SU5UMTYgIEhSZXM7DQorICBVSU5UMTYgIFZSZXM7DQorICBVSU5UMTYgIFJlZnJlc2g7DQorfSBF RElEX1RJTUlORzsNCisNCisNCitFRklfU1RBVFVTDQorRGxFZGlkR2V0U3VwcG9ydGVkVmlkZW9N b2RlICgNCisgICAgVUlOVDMyIE1vZGVOdW1iZXIsDQorICAgIENPTlNUIFZPSUQgKkVESUQsDQor ICAgIFVJTlQzMiBFZGlkU2l6ZSwNCisgICAgQ09OU1Qgc3RydWN0IFZpZGVvTW9kZSAqKlZpZGVv TW9kZQ0KKyAgICApOw0KKw0KK0VGSV9TVEFUVVMNCitEbEVkaWRHZXRTdXBwb3J0ZWRWaWRlb01v ZGVXaXRoRmFsbGJhY2sgKA0KKyAgICBVSU5UMzIgTW9kZU51bWJlciwNCisgICAgQ09OU1QgVk9J RCAqRURJRCwNCisgICAgVUlOVDMyIEVkaWRTaXplLA0KKyAgICBDT05TVCBzdHJ1Y3QgVmlkZW9N b2RlICoqVmlkZW9Nb2RlDQorICAgICk7DQorDQorVUlOVDMyDQorRGxFZGlkR2V0TnVtU3VwcG9y dGVkTW9kZXNJbkVkaWQgKA0KKyAgICBDT05TVCBWT0lEICpFRElELA0KKyAgICBVSU5UMzIgRWRp ZFNpemUNCisgICAgKTsNCisNCitFRklfU1RBVFVTDQorRGxSZWFkRWRpZCAoDQorICBVU0JfRElT UExBWUxJTktfREVWKiBVc2JEaXNwbGF5TGlua0Rldg0KKyk7DQorDQorLy8gRURJRCBEZXRhaWxl ZCB0aW1pbmdzIHNlY3Rpb24gLSBGZWF0dXJlcw0KK2VudW0gRWRpZERldGFpbGVkVGltaW5nc0Zl YXR1cmVzIHsNCisgIEVkaWREZXRhaWxlZFRpbWluZ3NGZWF0dXJlc0ludGVybGFjZWQgICAgICAg ICAgICAgID0gMHg4MCwNCisgIEVkaWREZXRhaWxlZFRpbWluZ3NGZWF0dXJlc1N0ZXJlb01vZGVN YXNrICAgICAgICAgID0gMHg2MCwNCisgIEVkaWREZXRhaWxlZFRpbWluZ3NGZWF0dXJlc1N5bmNT Y2hlbWVNYXNrICAgICAgICAgID0gMHgxOCwNCisgIEVkaWREZXRhaWxlZFRpbWluZ3NGZWF0dXJl c0hvcml6b250YWxTeW5jUG9zaXRpdmUgID0gMHgwMiwNCisgIEVkaWREZXRhaWxlZFRpbWluZ3NG ZWF0dXJlc1ZlcnRpY2FsU3luY1Bvc2l0aXZlICAgID0gMHgwNCwNCit9Ow0KKw0KKy8vIE5SLTEx MDQ5Ny1UQy03Wk0gU2VjdGlvbiA0LjMuMyAweDIyIFNldCBWaWRlbyBNb2RlIC0gRmxhZ3MNCitl bnVtIFZpZGVvTW9kZUZsYWdzIHsNCisgIFZpZGVvTW9kZUZsYWdzSW50ZXJsYWNlZCAgICAgICAg ICAgICA9IDB4MDAwMSwNCisgIFZpZGVvTW9kZUZsYWdzSG9yaXpvbnRhbFN5bmNJbnZlcnRlZCA9 IDB4MDEwMCwNCisgIFZpZGVvTW9kZUZsYWdzVmVydGljYWxTeW5jSW52ZXJ0ZWQgICA9IDB4MDIw MCwNCit9Ow0KKw0KK3N0cnVjdCBTdGFuZGFyZFRpbWluZ0lkZW50aWZpY2F0aW9uIHsNCisgIFVJ TlQ4IEhvcml6b250YWxBY3RpdmVQaXhlbHM7ICAgICAgICAgICAvLyBYIHJlc29sdXRpb24sIGZy b20gMjU2LT4yMjg4IGluIGluY3JlbWVudHMgb2YgOCBwaXhlbHMNCisgIFVJTlQ4IEltYWdlQXNw ZWN0UmF0aW9BbmRyZWZyZXNoOyAgIC8vIEJpdHMgNyw2IEFzcGVjdCByYXRpbyAtIDA9MTY6MTAg MT00OjMgMj01OjQgMz0xNjo5DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gQml0cyA1LDAgUmVmcmVzaCByYXRlIFJhbmdlIDYwLT4xMjEzSHoNCit9Ow0KKw0K K3N0cnVjdCBEZXRhaWxlZFRpbWluZ0lkZW50aWZpY2F0aW9uIHsNCisgIFVJTlQxNiBQaXhlbENs b2NrOyAgICAgICAgICAgICAgICAgIC8vIHdQaXhlbENsb2NrIGluIFZpZGVvTW9kZSBzdHJ1Y3QN CisgIFVJTlQ4ICBIQWN0aXZlTG87ICAgICAgICAgICAgICAgICAgIC8vIHdIQWN0aXZlDQorICBV SU5UOCAgSEJsYW5raW5nTG87ICAgICAgICAgICAgICAgICAvLyB3SEJsYW5raW5nDQorICBVSU5U OCAgSEFjdGl2ZUhpQmxhbmtpbmdIaTsNCisgIFVJTlQ4ICBWQWN0aXZlTG87ICAgICAgICAgICAg ICAgICAgIC8vIHdWQWN0aXZlDQorICBVSU5UOCAgVkJsYW5raW5nTG87ICAgICAgICAgICAgICAg ICAvLyB3VkJsYW5raW5nDQorICBVSU5UOCAgVkFjdGl2ZUhpQmxhbmtpbmdIaTsNCisgIFVJTlQ4 ICBIU3luY09mZnNldExvOyAgICAgICAgICAgICAgIC8vIHdIU3luY09mZnNldCwgZnJvbnQgcG9y Y2gNCisgIFVJTlQ4ICBIU3luY1dpZHRoTG87ICAgICAgICAgICAgICAgIC8vIHdIU3luY1dpZHRo DQorICBVSU5UOCAgVlN5bmNPZmZzZXRMb1N5bmNXaWR0aExvOw0KKyAgVUlOVDggIEhTeW5jT2Zm c2V0SGlIU3luY1dpZHRoSGlWU3luY09mZnNldEhpU3luY1dpZHRoSGk7DQorICBVSU5UOCAgSElt YWdlU2l6ZUhpOw0KKyAgVUlOVDggIFZJbWFnZVNpemVIaTsNCisgIFVJTlQ4ICBISW1hZ2VTaXpl TG9WSW1hZ2VTaXplTG87DQorICBVSU5UOCAgSEJvcmRlcjsNCisgIFVJTlQ4ICBWQm9yZGVyOw0K KyAgVUlOVDggIEZlYXR1cmVzOw0KK307DQorDQorc3RydWN0IEVkaWQgew0KKyAgVUlOVDggIEhl YWRlcltFRElEX0hFQURFUl9TSVpFXTsgICAgICAgICAgIC8vRURJRCBoZWFkZXIgIjAwIEZGIEZG IEZGIEZGIEZGIEZGIDAwIg0KKyAgVUlOVDE2IE1hbnVmYWN0dXJlTmFtZTsgICAgICAgICAgICAg ICAgICAvL0VJU0EgMy1jaGFyYWN0ZXIgSUQNCisgIFVJTlQxNiBQcm9kdWN0Q29kZTsgICAgICAg ICAgICAgICAgICAgICAgLy9WZW5kb3IgYXNzaWduZWQgY29kZQ0KKyAgVUlOVDMyIFNlcmlhbE51 bWJlcjsgICAgICAgICAgICAgICAgICAgICAvLzMyLWJpdCBzZXJpYWwgbnVtYmVyDQorICBVSU5U OCAgV2Vla09mTWFudWZhY3R1cmU7ICAgICAgICAgICAgICAgIC8vV2VlayBudW1iZXINCisgIFVJ TlQ4ICBZZWFyT2ZNYW51ZmFjdHVyZTsgICAgICAgICAgICAgICAgLy9ZZWFyDQorICBVSU5UOCAg RWRpZFZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgIC8vRURJRCBTdHJ1Y3R1cmUgVmVyc2lv bg0KKyAgVUlOVDggIEVkaWRSZXZpc2lvbjsgICAgICAgICAgICAgICAgICAgICAvL0VESUQgU3Ry dWN0dXJlIFJldmlzaW9uDQorICBVSU5UOCAgVmlkZW9JbnB1dERlZmluaXRpb247DQorICBVSU5U OCAgTWF4SG9yaXpvbnRhbEltYWdlU2l6ZTsgICAgICAgICAgIC8vY20NCisgIFVJTlQ4ICBNYXhW ZXJ0aWNhbEltYWdlU2l6ZTsgICAgICAgICAgICAgLy9jbQ0KKyAgVUlOVDggIERpc3BsYXlUcmFu c2ZlckNoYXJhY3RlcmlzdGljOw0KKyAgVUlOVDggIEZlYXR1cmVTdXBwb3J0Ow0KKyAgVUlOVDgg IFJlZEdyZWVuTG93Qml0czsgICAgICAgICAgICAgICAgICAvL1J4MSBSeDAgUnkxIFJ5MCBHeDEg R3gwIEd5MUd5MA0KKyAgVUlOVDggIEJsdWVXaGl0ZUxvd0JpdHM7ICAgICAgICAgICAgICAgICAv L0J4MSBCeDAgQnkxIEJ5MCBXeDEgV3gwIFd5MSBXeTANCisgIFVJTlQ4ICBSZWRYOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy9SZWQteCBCaXRzIDkgLSAyDQorICBVSU5UOCAgUmVkWTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVkLXkgQml0cyA5IC0gMg0KKyAgVUlOVDgg IEdyZWVuWDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0dyZWVuLXggQml0cyA5IC0gMg0K KyAgVUlOVDggIEdyZWVuWTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0dyZWVuLXkgQml0 cyA5IC0gMg0KKyAgVUlOVDggIEJsdWVYOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Js dWUteCBCaXRzIDkgLSAyDQorICBVSU5UOCAgQmx1ZVk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vQmx1ZS15IEJpdHMgOSAtIDINCisgIFVJTlQ4ICBXaGl0ZVg7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy9XaGl0ZS14IEJpdHMgOSAtIDINCisgIFVJTlQ4ICBXaGl0ZVk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy9XaGl0ZS14IEJpdHMgOSAtIDINCisgIFVJTlQ4ICBFc3Rh Ymxpc2hlZFRpbWluZ3NbRURJRF9OVU1CRVJfT0ZfRVNUQUJMSVNIRURfVElNSU5HU19CWVRFU107 DQorICBzdHJ1Y3QgU3RhbmRhcmRUaW1pbmdJZGVudGlmaWNhdGlvbiAgc3RhbmRhcmRUaW1pbmdJ ZGVudGlmaWNhdGlvbnNbRURJRF9OVU1CRVJfT0ZfU1RBTkRBUkRfVElNSU5HU107DQorICBzdHJ1 Y3QgRGV0YWlsZWRUaW1pbmdJZGVudGlmaWNhdGlvbiAgZGV0YWlsZWRUaW1pbmdEZXNjcmlwdGlv bnNbRURJRF9OVU1CRVJfT0ZfREVUQUlMRURfVElNSU5HU107DQorICBVSU5UOCAgRXh0ZW5zaW9u RmxhZzsgICAgICAgICAgICAgICAgICAgIC8vTnVtYmVyIG9mIChvcHRpb25hbCkgMTI4LWJ5dGUg RURJRCBleHRlbnNpb24gYmxvY2tzIHRvIGZvbGxvdw0KKyAgVUlOVDggIENoZWNrc3VtOw0KK307 DQorDQorI2VuZGlmIC8vIEVESURfSA0KZGlmZiAtLWdpdCBhL0RyaXZlcnMvRGlzcGxheUxpbmsv RGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtHb3AvVXNiRGVzY3JpcHRvcnMuaCBiL0RyaXZlcnMv RGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtHb3AvVXNiRGVzY3JpcHRvcnMu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmNkYzAxYWFkMTkzYQot LS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlz cGxheUxpbmtHb3AvVXNiRGVzY3JpcHRvcnMuaApAQCAtMCwwICsxLDEwOSBAQAorLyoqDQorICog QGZpbGUgVXNiRGVzY3JpcHRvcnMuaA0KKyAqIEBicmllZiBGdW5jdGlvbnMgdG8gcmVhZCBVU0Ig SW50ZXJmYWNlIGFuZCBDYXBhYmlsaXRpZXMgZGVzY3JpcHRvcnMNCisgKg0KKyAqIENvcHlyaWdo dCAoYykgMjAxOC0yMDE5LCBEaXNwbGF5TGluayAoVUspIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4NCisgKg0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50 DQorICoNCisqKi8NCisNCisjaWZuZGVmIFVTQl9ERVNDUklQVE9SU19IXw0KKyNkZWZpbmUgVVNC X0RFU0NSSVBUT1JTX0hfDQorDQorICAvKioNCisgIFR5cGUgb2YgdGhlIERpcmVjdCBGcmFtZWJ1 ZmZlciBjYXBhYmlsaXR5IGRlc2NyaXB0b3IuDQorICBUaGlzIGlzIGEgdmVuZG9yIHNwZWNpZmlj IFVTQiBkZXNjcmlwdG9yIGZvciBEaXNwbGF5TGluay4NCisgIEBzZWUgTlItMTQwMDgyIFNlY3Rp b24gMy41DQorICAqKi8NCisjZGVmaW5lIERFU0NSSVBUT1JfVFlQRV9ESVJFQ1RGQl9DQVBBQklM SVRZIDB4NWUNCisNCisgIC8qKg0KKyAgSWRlbnRpZmllcnMgZm9yIGNhcGFibGxpdHkga2V5cw0K KyAgQHNlZSBOUi0xNDAwODIgU2VjdGlvbiAzLjINCisgICoqLw0KKw0KKyAgLyoqDQorICBLZXkg Zm9yIENhcGFiaWxpdGllcyAxIC0gU2VlIHNlY3Rpb24gMy4yLjENCisgICoqLw0KKyNkZWZpbmUg Q0FQQUJJTElUSUVTMV9LRVkgMHgwDQorDQorICAvKioNCisgIExlbmd0aHMgZm9yIGNhcGFibGxp dHkgZmllbGRzDQorICAqKi8NCisjZGVmaW5lIENBUEFCSUxJVElFUzFfTEVOR1RIIDB4NA0KKw0K KyAgLyoqDQorICBCaXRzIGZvciB0aGUgY2FwYWJpbGl0eSBiaXRtYXNrIENhcGFiaWxpdGllczEN CisgICoqLw0KKw0KKyAgLyoqDQorICBUaGlzIGlzIHRoZSBmaXJzdCBjYXBhYmlsaXR5IGRlZmlu ZWQgZm9yIHRoZSBwcm90b2NvbC4NCisgIEl0IHJlcHJlc2VudHMgdGhlIG1vZGUgb2Ygb3BlcmF0 aW9uIGFzIG9mIGluaXRpYWwgcmVsZWFzZS4NCisgIElmIGEgZGV2aWNlIGV2ZXIgYnJlYWtzIGNv bXBhdGliaWxpdHkgd2l0aCB0aGlzIGluaXRpYWwgcmVsZWFzZSwNCisgIGl0IHdpbGwgY2Vhc2UN CisgIHRvIHN1cHBvcnQgQ2FwYWJpbGl0eUJhc2VQcm90b2NvbC4NCisgICoqLw0KKyNkZWZpbmUg Q0FQQUJJTElUSUVTMV9CQVNFX1BST1RPQ09MICgxIDw8IDApDQorDQorICAvKioNCisgIElkZWFs aXNlZCBWZW5kb3JEZXNjcmlwdG9yIHdoaWNoIGlzIHRoZSByZXN1bHQNCisgIG9mIHBhcnNpbmcg dmVuZG9yIGRlc2NyaXB0b3IgZnJvbSBkZXZpY2UuDQorICAqKi8NCisgIHR5cGVkZWYgc3RydWN0 IHsNCisgICAgVUlOVDMyIENhcGFiaWxpdGllczE7DQorICB9IFZlbmRvckRlc2NyaXB0b3I7DQor DQorI3ByYWdtYSBwYWNrKHB1c2gsIDEpDQorICB0eXBlZGVmIHN0cnVjdCB7DQorICAgIFVJTlQx NiBLZXk7IC8qKiBSZWFsbHkgb2YgdHlwZSBlbnVtIERlc2NycHRvcktleXMgKi8NCisgICAgVUlO VDggTGVuZ3RoOw0KKyAgICBVSU5UOCBWYWx1ZVtdOw0KKyAgfSBEZXNjcmlwdG9yS0xWOw0KKw0K KyAgdHlwZWRlZiBzdHJ1Y3Qgew0KKyAgICBVSU5UOCBMZW5ndGg7DQorICAgIFVJTlQ4IFR5cGU7 DQorICAgIFVJTlQxNiBDYXBhYmlsaXR5VmVyc2lvbjsNCisgICAgVUlOVDggQ2FwYWJpbGl0eUxl bmd0aDsNCisgICAgVUlOVDggS2x2W107DQorICB9IFZlbmRvckRlc2NyaXB0b3JHZW5lcmljOw0K KyNwcmFnbWEgcGFjayhwb3ApDQorDQorDQorRUZJX1NUQVRVUyBVc2JEaXNwbGF5TGlua0dldElu dGVyZmFjZURlc2NyaXB0b3IgKA0KKyAgICBJTiBFRklfVVNCX0lPX1BST1RPQ09MICpVc2JJbywN CisgICAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiogSW50ZXJmYWNlRGVzY3JpcHRvciwN CisgICAgVUlOVDggaW5kZXgNCisgICAgKTsNCisNCitFRklfU1RBVFVTIFJlYWRDYXBhYmlsaXRp ZXNEZXNjcmlwdG9yIChJTiBFRklfVVNCX0lPX1BST1RPQ09MICpVc2JJbywgVk9JRCogQnVmZmVy LCBVSU5UMTYgTGVuZ3RoKTsNCisNCisvKioNCitQYXJzZSBkYXRhIGluIGJ1ZmZlciB0byBhIFZl bmRvckRlc2NyaXB0b3IsIGlmIHBvc3NpYmxlLg0KKw0KK0BwYXJhbSBEYXRhICAgICAgQnVmZmVy DQorQHBhcmFtIExlbmd0aCAgICBMZW5ndGggb2YgYnVmZmVyDQorDQorQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgIFRoZSBkZXNjcmlwdG9yIHdhcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5DQorQHJldHZh bCBFRklfVU5TVVBQT1JURUQgIFNpbXBsZSBQb2ludGVyIFByb3RvY29sIGlzIG5vdCBpbnN0YWxs ZWQgb24gQ29udHJvbGxlci4NCisqKi8NCitFRklfU1RBVFVTDQorVXNiRGlzcGxheUxpbmtQYXJz ZUNhcGFiaWxpdGllc0Rlc2NyaXB0b3IgKA0KKyAgQ09OU1QgSU4gVk9JRCogRGF0YSwNCisgIElO IFVJTlROIExlbmd0aCwNCisgIE9VVCBWZW5kb3JEZXNjcmlwdG9yKiBEZXNjcmlwdG9yDQorKTsN CisNCisvKioNCitEZWNpZGUgaWYgYmluZGluZyBtYXkgcHJvY2VlZCwgZ2l2ZW4gY2FwYWJpbGl0 aWVzDQorDQorQHJldHZhbCBUUlVFICAgQmluZGluZyBtYXkgcHJvY2VlZA0KK0ByZXR2YWwgRkFM U0UgIEJpbmRpbmcgaXMgbm90IHBvc3NpYmxlDQorKiovDQorQk9PTEVBTg0KK1VzYkRpc3BsYXlM aW5rQ2FwYWJpbGl0aWVzU3VmZmljaWVudFRvQmluZCAoDQorICBDT05TVCBJTiBWZW5kb3JEZXNj cmlwdG9yKiBEZXNjcmlwdG9yDQorKTsNCisNCisjZW5kaWYgLy8gVVNCX0RFU0NSSVBUT1JTX0hf DQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5 TGlua0dvcC9Vc2JEaXNwbGF5TGluay5oIGIvRHJpdmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlu a1BrZy9EaXNwbGF5TGlua0dvcC9Vc2JEaXNwbGF5TGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uN2MyNzIyYzk4NzBhCi0tLSAvZGV2L251bGwKKysrIGIvRHJp dmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5TGlua0dvcC9Vc2JEaXNwbGF5 TGluay5oCkBAIC0wLDAgKzEsMjg0IEBACisvKioNCisgKiBAZmlsZSBVc2JEaXNwbGF5TGluay5o DQorICogQGJyaWVmIEhlbHBlciByb3V0aW5lIGFuZCBjb3JyZXNwb25kaW5nIGRhdGEgc3RydWN0 IHVzZWQgYnkgVVNCIERpc3BsYXlMaW5rIERyaXZlci4NCisgKg0KKyAqIENvcHlyaWdodCAoYykg MjAxOC0yMDE5LCBEaXNwbGF5TGluayAoVUspIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisg Kg0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorICoN CisqKi8NCisNCisjaWZuZGVmIF9FRklfVVNCX0RJU1BMQVlMSU5LX0hfDQorI2RlZmluZSBfRUZJ X1VTQl9ESVNQTEFZTElOS19IXw0KKw0KKyN1bmRlZiBfREVCVUcNCisNCisjdW5kZWYgTlVMTA0K KyN1bmRlZiBfQVNTRVJUDQorDQorI2luY2x1ZGUgPHdjaGFyLmg+DQorDQorI2luY2x1ZGUgPFVl ZmkvVWVmaUJhc2VUeXBlLmg+DQorI2luY2x1ZGUgPFVlZmkvVWVmaVNwZWMuaD4NCisNCisjaW5j bHVkZSA8UHJvdG9jb2wvRWRpZEFjdGl2ZS5oPg0KKyNpbmNsdWRlIDxQcm90b2NvbC9FZGlkRGlz Y292ZXJlZC5oPg0KKyNpbmNsdWRlIDxQcm90b2NvbC9FZGlkT3ZlcnJpZGUuaD4NCisjaW5jbHVk ZSA8UHJvdG9jb2wvR3JhcGhpY3NPdXRwdXQuaD4NCisjaW5jbHVkZSA8UHJvdG9jb2wvVXNiSW8u aD4NCisNCisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQorI2luY2x1ZGUgPExp YnJhcnkvRGVidWdMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGli Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUmVwb3J0U3RhdHVzQ29kZUxpYi5oPg0KKyNpbmNsdWRl IDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5 L1VlZmlMaWIuaD4NCisNCisjZGVmaW5lIFZFTkRPUl9ESVNQTEFZTElOSyAgICAgIDB4MTdlOQ0K KyNkZWZpbmUgQ0xBU1NfVkVORE9SICAgICAgICAgICAgMHhGRg0KKw0KKyNkZWZpbmUgRElTUExB WUxJTktfVVNCX0lOVEVSRkFDRV9OVU1CRVJfTklWTyAoKFVJTlROKTApDQorDQorI2RlZmluZSBJ TlRFUkZBQ0VfUFJPVE9DT0xfRElSRUNUX0ZCICAgIDQNCisNCisjZGVmaW5lIFVTQl9ESVNQTEFZ TElOS19ERVZfU0lHTkFUVVJFIFNJR05BVFVSRV8zMiAoJ2QnLCAnbCcsICdpJywgJ24nKQ0KKw0K KyNkZWZpbmUgVVNCX1RSQU5TRkVSX0xFTkdUSCAgICAgICAgICAgKDY0ICogMTAyNCkNCisjZGVm aW5lIERJU1BMQVlMSU5LX01PREVfREFUQV9MRU5HVEggICgxNDYpDQorI2RlZmluZSBESVNQTEFZ TElOS19VU0JfQ1RSTF9USU1FT1VUICAoMTAwMCkNCisjZGVmaW5lIERJU1BMQVlMSU5LX1VTQl9C VUxLX1RJTUVPVVQgICgxKQ0KKw0KKyNkZWZpbmUgRElTUExBWUxJTktfU0NSRUVOX1VQREFURV9U SU1FUl9QRVJJT0QgICgoVUlOVE4pMTAwMDAwMCkgLy8gMC4xcyBpbiB1cw0KKyNkZWZpbmUgRElT UExBWUxJTktfRlVMTF9TQ1JFRU5fVVBEQVRFX1BFUklPRCAgICgoVUlOVE4pMzAwMDApIC8vIDNz IGluIHRpY2tzDQorDQorI2RlZmluZSBESVNQTEFZTElOS19GSVhFRF9WRVJUSUNBTF9SRUZSRVNI X1JBVEUgKChVSU5UMTYpNjApDQorDQorLy8gUmVxdWVzdHMgdG8gcmVhZCB2YWx1ZXMgZnJvbSB0 aGUgZmlybXdhcmUNCisjZGVmaW5lIEVESURfQkxPQ0tfU0laRSAxMjgNCisjZGVmaW5lIEVESURf REVUQUlMRURfVElNSU5HX0lOVkFMSURfUElYRUxfQ0xPQ0sgKChVSU5UMTYpKDB4NjQpKQ0KKw0K Ky8qKiBTdHJ1Y3R1cmVzIHBvcnRlZCBmcm9tIGZpcm13YXJlIC0gcHJvdG9jb2wuaCAqLw0KK2Vu dW0gSUQgew0KKyAgLy8gVmlkZW9Db21tYW5kcw0KKyAgR0VUX09VVFBVVF9FRElEID0gMCwNCisg IFNFVF9WSURFT19NT0RFID0gMQ0KK307DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbFJlc29sdXRpb247DQorICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICBWZXJ0aWNhbFJlc29sdXRpb247DQorICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICBDb2xvckRlcHRoOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgUmVm cmVzaFJhdGU7DQorICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kc1tESVNQTEFZ TElOS19NT0RFX0RBVEFfTEVOR1RIXTsNCit9IERJU1BMQVlMSU5LX01PREVfREFUQTsNCisNCisj ZGVmaW5lIEdSQVBISUNTX09VVFBVVF9JTlZBTElEX01PREVfTlVNQkVSIDB4ZmZmZg0KKw0KKy8q Kg0KKyAqICBEZXZpY2UgaW5zdGFuY2Ugb2YgVVNCIGRpc3BsYXkuDQorICovDQordHlwZWRlZiBz dHJ1Y3Qgew0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KKyAg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgSGFuZGxlOw0KKyAgRUZJX1VTQl9JT19QUk9U T0NPTCAgICAgICAgICAgKlVzYklvOw0KKyAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAg SW50ZXJmYWNlRGVzY3JpcHRvcjsNCisgIEVGSV9VU0JfRU5EUE9JTlRfREVTQ1JJUFRPUiAgIEJ1 bGtPdXRFbmRwb2ludERlc2NyaXB0b3I7DQorICBFRklfVVNCX0VORFBPSU5UX0RFU0NSSVBUT1Ig ICBCdWxrSW5FbmRwb2ludERlc2NyaXB0b3I7DQorICBFRklfR1JBUEhJQ1NfT1VUUFVUX1BST1RP Q09MICBHcmFwaGljc091dHB1dFByb3RvY29sOw0KKyAgRUZJX0VESURfRElTQ09WRVJFRF9QUk9U T0NPTCAgRWRpZERpc2NvdmVyZWQ7DQorICBFRklfRURJRF9BQ1RJVkVfUFJPVE9DT0wgICAgICBF ZGlkQWN0aXZlOw0KKyAgRUZJX1VOSUNPREVfU1RSSU5HX1RBQkxFICAgICAgKkNvbnRyb2xsZXJO YW1lVGFibGU7DQorICBFRklfR1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCAqU2NyZWVuOw0KKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNlbnQ7ICAgICAgICAgICAgICAgICAg ICAgICAvKiogRGVidWcgLSB1c2VkIHRvIHRyYWNrIHRoZSBiYW5kd2lkdGggKi8NCisgIEVGSV9F VkVOVCAgICAgICAgICAgICAgICAgICAgIFRpbWVyRXZlbnQ7DQorICBFRklfRVZFTlQgICAgICAg ICAgICAgICAgICAgICBEcml2ZXJFeGl0Qm9vdFNlcnZpY2VzRXZlbnQ7DQorICBCT09MRUFOICAg ICAgICAgICAgICAgICAgICAgICBTaG93QmFuZHdpZHRoOyAgICAgICAgICAgICAgICAgLyoqIERl YnVnZ2luZyAtIHNob3cgdGhlIGJhbmR3aWR0aCBvbiB0aGUgc2NyZWVuICovDQorICBCT09MRUFO ICAgICAgICAgICAgICAgICAgICAgICBTaG93VGVzdFBhdHRlcm47ICAgICAgICAgICAgICAgLyoq IFNob3cgYSBjb2xvdXJiYXIgcGF0dGVybiBpbnN0ZWFkIG9mIHRoZSBCTFRkIGNvbnRlbnRzIG9m IHRoZSBmcmFtZWJ1ZmZlciAqLw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgTGFz dFkxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBVc2VkIHRvIHRyYWNrIGlmIHdlIGNhbiBk byBhIHBhcnRpYWwgc2NyZWVuIHVwZGF0ZSAqLw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgTGFzdFkyOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgTGFzdFdpZHRo Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgVGltZVNpbmNlTGFzdFNjcmVlblVw ZGF0ZTsgICAgIC8qKiBEbyBhIGZ1bGwgc2NyZWVuIHVwZGF0ZSBldmVyeSAoeCkgc2Vjb25kcyAq Lw0KK30gVVNCX0RJU1BMQVlMSU5LX0RFVjsNCisNCitzdHJ1Y3QgVmlkZW9Nb2RlIHsNCisgIFVJ TlQ4ICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIFJlc2VydmVkIC0gbXVzdCBiZSAwLiAqLw0KKyAg VUlOVDggIFJlc2VydmVkMjsgICAgICAgICAgLyogUmVzZXJ2ZWQgLSBtdXN0IGJlIDIuICovDQor DQorICAvLyBWYWx1ZXMgbWF0Y2hpbmcgdGhlIEVESUQgRGV0YWlsZWQgVGltaW5nIERlc2NyaXB0 b3Igc3BlYw0KKyAgVUlOVDE2IFBpeGVsQ2xvY2s7DQorICBVSU5UMTYgSEFjdGl2ZTsNCisgIFVJ TlQxNiBIQmxhbmtpbmc7DQorICBVSU5UMTYgSFN5bmNPZmZzZXQ7ICAvLyBIb3Jpem9udGFsIEZy b250IFBvcmNoDQorICBVSU5UMTYgSFN5bmNXaWR0aDsNCisgIFVJTlQxNiBWQWN0aXZlOw0KKyAg VUlOVDE2IFZCbGFua2luZzsNCisgIFVJTlQxNiBWU3luY09mZnNldDsgIC8vIFZlcnRpY2FsIEZy b250IFBvcmNoDQorICBVSU5UMTYgVlN5bmNXaWR0aDsNCisgIC8vIEVuZCBvZiBFZGlkIERldGFp bGVkIFRpbWluZyBEZXNjcmlwdG9yDQorDQorICBVSU5UMTYgRmxhZ3MgICAgICAgICAgICAgICAv Kk1vZGVGbGFncyovOw0KKyAgVUlOVDE2IEFjY3VtdWxhdGU7DQorICBVSU5UMTYgUmVzZXJ2ZWQz OyAgICAgICAgIC8qIFJlc2VydmVkIC0gbXVzdCBiZSAwLiAqLw0KKyAgVUlOVDE2IFJlc2VydmVk NDsgICAgICAgICAvKiBSZXNlcnZlZCAtIG11c3QgYmUgMC4gKi8NCisgIFVJTlQxNiBJbnNldExl ZnQ7DQorICBVSU5UMTYgSW5zZXRUb3A7DQorICBVSU5UMTYgSW5zZXRSaWdodDsNCisgIFVJTlQx NiBJbnNldEJvdHRvbTsNCisgIFVJTlQzMiBGaWxsVmFsdWU7DQorICBVSU5UMzIgUmVzZXJ2ZWQ1 OyAgICAgICAgLyogUmVzZXJ2ZWQgLSBtdXN0IGJlIDAuICovDQorICBVSU5UOCAgVmljOw0KKyAg VUlOVDggIEFjdGl2ZUZvcm1hdDsNCisgIFVJTlQxNiBSZXNlcnZlZDY7DQorfTsNCisNCisjZGVm aW5lIFVTQl9ESVNQTEFZTElOS19ERVZfRlJPTV9HUkFQSElDU19PVVRQVVRfUFJPVE9DT0woYSkg XA0KKyAgQ1IoYSwgVVNCX0RJU1BMQVlMSU5LX0RFViwgR3JhcGhpY3NPdXRwdXRQcm90b2NvbCwg VVNCX0RJU1BMQVlMSU5LX0RFVl9TSUdOQVRVUkUpDQorDQorLy8NCisvLyBHbG9iYWwgVmFyaWFi bGVzDQorLy8NCitleHRlcm4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAgZ1VzYkRpc3Bs YXlMaW5rRHJpdmVyQmluZGluZzsNCitleHRlcm4gRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09M ICAgbVVzYkRpc3BsYXlMaW5rQ29tcG9uZW50TmFtZTsNCitleHRlcm4gRUZJX0NPTVBPTkVOVF9O QU1FMl9QUk9UT0NPTCAgbVVzYkRpc3BsYXlMaW5rQ29tcG9uZW50TmFtZTI7DQorDQorDQorLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKy8qICoqKioq KioqICBHT1AgaW50ZXJmYWNlIGZ1bmN0aW9ucyAgKioqKioqKiogKi8NCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorDQorLyoqDQorICogSW1wbGVt ZW50YXRpb24gb2YgdGhlIEdPUCBwcm90b2NvbCBRdWVyeU1vZGUgQVBJIGZ1bmN0aW9uDQorICog QHBhcmFtIFRoaXMgICAgICAgICBJbnN0YW5jZSBvZiB0aGUgR09QIHByb3RvY29sDQorICogQHBh cmFtIE1vZGVOdW1iZXINCisgKiBAcGFyYW0gU2l6ZU9mSW5mbw0KKyAqIEBwYXJhbSBJbmZvDQor ICogQHJldHVybg0KKyAqLw0KK0VGSV9TVEFUVVMNCisgIEVGSUFQSQ0KKyAgRGlzcGxheUxpbmtR dWVyeU1vZGUgKA0KKyAgICBJTiAgRUZJX0dSQVBISUNTX09VVFBVVF9QUk9UT0NPTCAgICAgICAg ICAqVGhpcywNCisgICAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TW9kZU51bWJlciwNCisgICAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKlNpemVPZkluZm8sDQorICAgIE9VVCBFRklfR1JBUEhJQ1NfT1VUUFVUX01PREVfSU5GT1JN QVRJT04gICoqSW5mbw0KKyAgKTsNCisNCisNCisvKioNCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0 aGUgR09QIHByb3RvY29sIFNldE1vZGUgQVBJIGZ1bmN0aW9uDQorICogQHBhcmFtIFRoaXMNCisg KiBAcGFyYW0gTW9kZU51bWJlcg0KKyAqIEByZXR1cm4NCisgKi8NCitFRklfU1RBVFVTDQorICBF RklBUEkNCisgIERpc3BsYXlMaW5rU2V0TW9kZSAoDQorICAgIElOICBFRklfR1JBUEhJQ1NfT1VU UFVUX1BST1RPQ09MICAqVGhpcywNCisgICAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgIE1vZGVOdW1iZXINCisgICk7DQorDQorLyoqDQorICogSW1wbGVtZW50YXRpb24gb2YgdGhl IEdPUCBwcm90b2NvbCBCbHQgQVBJIGZ1bmN0aW9uDQorICogQHBhcmFtIFRoaXMNCisgKiBAcGFy YW0gQmx0QnVmZmVyDQorICogQHBhcmFtIEJsdE9wZXJhdGlvbg0KKyAqIEBwYXJhbSBTb3VyY2VY DQorICogQHBhcmFtIFNvdXJjZVkNCisgKiBAcGFyYW0gRGVzdGluYXRpb25YDQorICogQHBhcmFt IERlc3RpbmF0aW9uWQ0KKyAqIEBwYXJhbSBXaWR0aA0KKyAqIEBwYXJhbSBIZWlnaHQNCisgKiBA cGFyYW0gRGVsdGENCisgKiBAcmV0dXJuDQorICovDQorRUZJX1NUQVRVUw0KKyAgRUZJQVBJDQor ICBEaXNwbGF5TGlua0JsdCAoDQorICAgIElOICBFRklfR1JBUEhJQ1NfT1VUUFVUX1BST1RPQ09M ICAgICAgICAgICAgKlRoaXMsDQorICAgIElOICBFRklfR1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhF TCAgICAgICAgICAgKkJsdEJ1ZmZlciwgT1BUSU9OQUwNCisgICAgSU4gIEVGSV9HUkFQSElDU19P VVRQVVRfQkxUX09QRVJBVElPTiAgICAgICBCbHRPcGVyYXRpb24sDQorICAgIElOICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlWCwNCisgICAgSU4gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VZLA0KKyAgICBJTiAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uWCwNCisgICAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvblks DQorICAgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkdGgs DQorICAgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVpZ2h0 LA0KKyAgICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbHRh ICAgICAgICAgT1BUSU9OQUwNCisgICk7DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqICovDQorLyogKiogIEdPUCBoZWxwZXIgZnVuY3Rpb25zICoqICovDQorLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqICovDQorDQorVk9JRA0KK0RsR29wUHJpbnRUZXh0VG9TY3JlZW4g KA0KKyAgRUZJX0dSQVBISUNTX09VVFBVVF9QUk9UT0NPTCAqR3JhcGhpY3NPdXRwdXQsDQorICBV SU5UTiBYLA0KKyAgVUlOVE4gWSwNCisgIElOIENPTlNUIENIQVIxNiAqRm9ybWF0LA0KKyAgLi4u DQorKTsNCisNCitFRklfU1RBVFVTDQorRGxHb3BTZW5kVGVzdFBhdHRlcm4gKA0KKyAgVVNCX0RJ U1BMQVlMSU5LX0RFViogVXNiRGlzcGxheUxpbmtEZXYsDQorICBVSU5UTiBQYXR0ZXJuTnVtYmVy DQorKTsNCisNCitFRklfU1RBVFVTDQorRGxHb3BTZW5kU2NyZWVuVXBkYXRlICgNCisgIFVTQl9E SVNQTEFZTElOS19ERVYqIFVzYkRpc3BsYXlMaW5rRGV2DQorKTsNCisNCisNCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLyogKioqKioqKiogIFVT QiBpbnRlcmZhY2UgZnVuY3Rpb25zICAqKioqKioqKiAqLw0KKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisNCitFRklfU1RBVFVTDQorRGxVc2JTZW5k Q29udHJvbFdyaXRlTWVzc2FnZSAoDQorICBJTiBVU0JfRElTUExBWUxJTktfREVWICpEZXZpY2Us DQorICBJTiBVSU5UOCBSZXF1ZXN0LA0KKyAgSU4gVUlOVDE2IFZhbHVlLA0KKyAgSU4gQ09OU1Qg Vk9JRCAqQ29udHJvbE1zZywNCisgIElOIFVJTlQxNiBDb250cm9sTXNnTGVuDQorKTsNCisNCitF RklfU1RBVFVTDQorRGxVc2JTZW5kQ29udHJvbFJlYWRNZXNzYWdlICgNCisgIElOIFVTQl9ESVNQ TEFZTElOS19ERVYgKkRldmljZSwNCisgIElOIFVJTlQ4IFJlcXVlc3QsDQorICBJTiBVSU5UMTYg VmFsdWUsDQorICBPVVQgVk9JRCAqQ29udHJvbE1zZywNCisgIElOIFVJTlQxNiBDb250cm9sTXNn TGVuDQorKTsNCisNCitFRklfU1RBVFVTDQorRGxVc2JCdWxrV3JpdGUgKA0KKyAgVVNCX0RJU1BM QVlMSU5LX0RFViogVXNiRGlzcGxheUxpbmtEZXYsDQorICBDT05TVCBVSU5UOCogQnVmZmVyLA0K KyAgVUlOVE4gRGF0YUxlbiwNCisgIFVJTlQzMiAqVVNCU3RhdHVzDQorKTsNCisNCitVSU5UTg0K K0RsVXNiQnVsa1JlYWQgKA0KKyAgVVNCX0RJU1BMQVlMSU5LX0RFViogVXNiRGlzcGxheUxpbmtE ZXYsDQorICBVSU5UOCogQnVmZmVyLA0KKyAgVUlOVE4gQnVmZmVyTGVuDQorKTsNCisNCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorLyogKioqKioq KiogICBWaWRlbyBNb2RlIGZ1bmN0aW9ucyAgICAqKioqKioqKiAqLw0KKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisNCisvLyBQcmUtY2FsY3VsYXRl ZCB2aWRlbyBtb2Rlcw0KK1VJTlQzMg0KK0RsVmlkZW9Nb2RlR2V0TnVtU3VwcG9ydGVkVmlkZW9N b2RlcyAoKTsNCisNCitDT05TVCBzdHJ1Y3QgVmlkZW9Nb2RlICoNCitEbFZpZGVvTW9kZUdldFN1 cHBvcnRlZFZpZGVvTW9kZSAoDQorICBVSU5UMzIgaW5kZXgNCispOw0KKw0KKyNlbmRpZg0KZGlm ZiAtLWdpdCBhL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtH b3AvQ2FwYWJpbGl0eURlc2NyaXB0b3IuYyBiL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxp bmtQa2cvRGlzcGxheUxpbmtHb3AvQ2FwYWJpbGl0eURlc2NyaXB0b3IuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRiZmFkZDc3MGI4MQotLS0gL2Rldi9udWxsCisr KyBiL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtHb3AvQ2Fw YWJpbGl0eURlc2NyaXB0b3IuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoqIEBmaWxlIENhcGFiaWxp dHlEZXNjcmlwdG9yLmMNCisgKiBAYnJpZWYgRGVmaW5pdGlvbnMgZm9yIHJlYWRpbmcgVVNCIGNh cGFiaWxpdHkgZGVzY3JpcHRvciBEaXNwbGF5TGluayBkb2NrDQorICoNCisgKiBDb3B5cmlnaHQg KGMpIDIwMTgtMjAxOSwgRGlzcGxheUxpbmsgKFVLKSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu DQorICoNCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K KyAqDQorKiovDQorDQorI2luY2x1ZGUgIlVzYkRpc3BsYXlMaW5rLmgiDQorI2luY2x1ZGUgIlVz YkRlc2NyaXB0b3JzLmgiDQorDQorLyoqDQorICogQ2hlY2sgdGhhdCB0aGUgQ2FwYWJpbGl0eSBE ZXNjcmlwdG9yIGlzIHZhbGlkIGFuZCBoYXNuJ3QgYmVlbiB0YW1wZXJlZCB3aXRoLg0KKyAqIEBw YXJhbSBEYXRhIEJpbmFyeSBkYXRhIG9mIHRoZSBDYXBhYmlsaXR5IERlc2NyaXB0b3IgcmVjZWl2 ZWQgZnJvbSB0aGUgRGlzcGxheUxpbmsgZGV2aWNlDQorICogQHBhcmFtIExlbmd0aA0KKyAqIEBw YXJhbSBvdXQNCisgKiBAcmV0dXJuDQorICovDQorU1RBVElDIEVGSV9TVEFUVVMNCitWYWxpZGF0 ZUhlYWRlciAoDQorICAgIENPTlNUIElOIFZPSUQqIERhdGEsDQorICAgIElOIFVJTlROIExlbmd0 aCwNCisgICAgT1VUIENPTlNUIFZlbmRvckRlc2NyaXB0b3JHZW5lcmljKiogT3V0DQorICAgICkN Cit7DQorICBpZiAoTGVuZ3RoIDwgc2l6ZW9mIChWZW5kb3JEZXNjcmlwdG9yR2VuZXJpYykpIHsN CisgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkRhdGEgdG9vIHNob3J0ICglZCBieXRlcykgZm9y IGNhcGFiaWxpdHkgZGVzY3JpcHRvciBoZWFkZXIgc2VjdGlvblxuIiwgTGVuZ3RoKSk7DQorICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorICBDT05TVCBWZW5kb3JEZXNj cmlwdG9yR2VuZXJpYyogRGVzYyA9IChWZW5kb3JEZXNjcmlwdG9yR2VuZXJpYyopRGF0YTsNCisg IGlmIChEZXNjLT5MZW5ndGggPiBMZW5ndGgpIHsNCisgICAgREVCVUcgKChERUJVR19FUlJPUiwg IkNhcGFiaWxpdHkgZGVzY3JpcHRvcjogRGVzY3JpcHRvciAoJWQgYnl0ZXMpIGV4Y2VlZHMgYnVm ZmVyICglZCBieXRlcylcbiIsDQorICAgICAgICAgIExlbmd0aCwgRGVzYy0+TGVuZ3RoKSk7DQor ICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCisgIH0NCisgIGlmIChEZXNjLT5UeXBl ICE9IERFU0NSSVBUT1JfVFlQRV9ESVJFQ1RGQl9DQVBBQklMSVRZKSB7DQorICAgIERFQlVHICgo REVCVUdfRVJST1IsICJDYXBhYmlsaXR5IGRlc2NyaXB0b3I6IGludmFsaWQgdHlwZSAoMHglMDh4 KVxuIiwgRGVzYy0+VHlwZSkpOw0KKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAgfQ0K KyAgaWYgKERlc2MtPkNhcGFiaWxpdHlWZXJzaW9uICE9IDEpIHsNCisgICAgREVCVUcgKChERUJV R19FUlJPUiwgIkNhcGFiaWxpdHkgZGVzY3JpcHRvcjogaW52YWxpZCB2ZXJzaW9uICglZClcbiIs IERlc2MtPkNhcGFiaWxpdHlWZXJzaW9uKSk7DQorICAgIHJldHVybiBFRklfSU5DT01QQVRJQkxF X1ZFUlNJT047DQorICB9DQorICAvLyBDYXBhYmlsaXR5IGxlbmd0aCBtdXN0IGZpdCB3aXRoaW4g cmVtYWluaW5nIHNwYWNlDQorICBpZiAoRGVzYy0+Q2FwYWJpbGl0eUxlbmd0aCA+IChEZXNjLT5M ZW5ndGggLSAoc2l6ZW9mIChEZXNjLT5MZW5ndGgpICsgc2l6ZW9mIChEZXNjLT5UeXBlKSkpKSB7 DQorICAgIERFQlVHICgoREVCVUdfRVJST1IsICJDYXBhYmlsaXR5IGRlc2NyaXB0b3I6IGludmFs aWQgQ2FwYWJpbGl0eUxlbmd0aCAoJWQpXG4iLCBEZXNjLT5DYXBhYmlsaXR5TGVuZ3RoKSk7DQor ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorICAqT3V0ID0gRGVzYzsN CisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorDQorLyoqDQorICogQ2hlY2sgdGhhdCB0 aGUgY29ubmVjdGVkIERpc3BsYXlMaW5rIGRldmljZSBzdXBwb3J0cyB0aGUgZnVuY3Rpb25hbGl0 eSB0aGF0IHRoaXMgZHJpdmVyIHJlcXVpcmVzLCBlLmcuIHZpZGVvIGZvcm1hdHMNCisgKiBAcGFy YW0gRGF0YSBCaW5hcnkgZGF0YSBvZiB0aGUgQ2FwYWJpbGl0eSBEZXNjcmlwdG9yIHJlY2VpdmVk IGZyb20gdGhlIERpc3BsYXlMaW5rIGRldmljZQ0KKyAqIEBwYXJhbSBMZW5ndGgNCisgKiBAcGFy YW0gT3V0cHV0DQorICogQHJldHVybg0KKyAqLw0KK0VGSV9TVEFUVVMNCitVc2JEaXNwbGF5TGlu a1BhcnNlQ2FwYWJpbGl0aWVzRGVzY3JpcHRvciAoDQorICAgIENPTlNUIElOIFZPSUQqIERhdGEs DQorICAgIElOIFVJTlROIExlbmd0aCwNCisgICAgT1VUIFZlbmRvckRlc2NyaXB0b3IqIE91dHB1 dA0KKyAgICApDQorew0KKyAgQ09OU1QgVmVuZG9yRGVzY3JpcHRvckdlbmVyaWMqIERlc2M7DQor ICBFRklfU1RBVFVTIFN0YXR1czsNCisNCisgIERlc2MgPSBOVUxMOw0KKyAgU3RhdHVzID0gVmFs aWRhdGVIZWFkZXIgKERhdGEsIExlbmd0aCwgJkRlc2MpOw0KKw0KKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8gRGVmYXVsdCBj YXBhYmlsaXRpZXMNCisgIE91dHB1dC0+Q2FwYWJpbGl0aWVzMSA9IDA7DQorDQorICBDT05TVCBV SU5UTiBDYXBzSGVhZGVyTGVuZ3RoID0gc2l6ZW9mIChEZXNjLT5DYXBhYmlsaXR5VmVyc2lvbikg KyBzaXplb2YgKERlc2MtPkNhcGFiaWxpdHlMZW5ndGgpOw0KKyAgQVNTRVJUIChDYXBzSGVhZGVy TGVuZ3RoIDwgTUFYX1VJTlQ4KTsNCisNCisgIFVJTlROIERhdGFSZW1haW5pbmc7DQorICBVSU5U TiBPZmZzZXQ7DQorDQorICBEYXRhUmVtYWluaW5nID0gRGVzYy0+Q2FwYWJpbGl0eUxlbmd0aCAt IENhcHNIZWFkZXJMZW5ndGg7DQorICBPZmZzZXQgPSAwOw0KKw0KKyAgd2hpbGUgKERhdGFSZW1h aW5pbmcgPj0gc2l6ZW9mIChEZXNjcmlwdG9yS0xWKSkgew0KKyAgICBDT05TVCBEZXNjcmlwdG9y S0xWKiBLZXlIZWFkZXIgPSAoQ09OU1QgRGVzY3JpcHRvcktMViopKERlc2MtPktsdiArIE9mZnNl dCk7DQorICAgIENPTlNUIFVJTlROIEtleVZhbHVlU2l6ZSA9IHNpemVvZiAoRGVzY3JpcHRvcktM VikgKyBLZXlIZWFkZXItPkxlbmd0aDsNCisgICAgaWYgKEtleVZhbHVlU2l6ZSA+IERhdGFSZW1h aW5pbmcpIHsNCisgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQ2FwYWJpbGl0eSBkZXNjcmlw dG9yOiBpbnZhbGlkIHZhbHVlIExlbmd0aCAoJWQpXG4iLCBEZXNjLT5DYXBhYmlsaXR5TGVuZ3Ro KSk7DQorICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgICAgfQ0KKw0KKyAg ICBzd2l0Y2ggKEtleUhlYWRlci0+S2V5KSB7DQorICAgICAgY2FzZSBDQVBBQklMSVRJRVMxX0tF WTogew0KKyAgICAgICAgaWYgKEtleUhlYWRlci0+TGVuZ3RoICE9IENBUEFCSUxJVElFUzFfTEVO R1RIKSB7DQorICAgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJDYXBhYmlsaXR5IGRlc2Ny aXB0b3I6IGludmFsaWQgbGVuZ3RoICglZCkgZm9yIENhcGFiaWxpdGllcyAxXG4iLCBLZXlIZWFk ZXItPkxlbmd0aCkpOw0KKyAgICAgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K KyAgICAgICAgfQ0KKyAgICAgICAgT3V0cHV0LT5DYXBhYmlsaXRpZXMxID0gKihVSU5UMzIqKUtl eUhlYWRlci0+VmFsdWU7DQorICAgICAgICBicmVhazsNCisgICAgICBkZWZhdWx0Og0KKyAgICAg ICAgLy8gSWdub3JlIHVua25vd24gdHlwZXMNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisg ICAgfQ0KKyAgICBEYXRhUmVtYWluaW5nIC09IEtleVZhbHVlU2l6ZTsNCisgICAgT2Zmc2V0ICs9 IEtleVZhbHVlU2l6ZTsNCisgIH0NCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorDQor LyoqDQorICogQ2hlY2sgdGhhdCB0aGUgRGlzcGxheUxpbmsgZGV2aWNlIHN1cHBvcnRzIHRoZSBi YXNpYyBsZXZlbCBvZiBmdW5jdGlvbmFsaXR5IHRvIGRpc3BsYXkgR09QIHBpeGVscy4NCisgKiBA cGFyYW0gRGVzY3JpcHRvciBUaGUgVVNCIGRlc2NyaXB0b3IgcmVjZWl2ZWQgZnJvbSB0aGUgRGlz cGxheUxpbmsgZGV2aWNlDQorICogQHJldHVybiBUcnVlIHdlIGNhbiBiaW5kLCBGYWxzZSB3ZSBj YW4ndA0KKyAqLw0KK0JPT0xFQU4NCitVc2JEaXNwbGF5TGlua0NhcGFiaWxpdGllc1N1ZmZpY2ll bnRUb0JpbmQgKA0KKyAgICBDT05TVCBJTiBWZW5kb3JEZXNjcmlwdG9yKiBEZXNjcmlwdG9yDQor ICAgICkNCit7DQorICBCT09MRUFOIFN1ZmZpY2llbnQ7DQorICBTdWZmaWNpZW50ID0gKEJPT0xF QU4pKERlc2NyaXB0b3ItPkNhcGFiaWxpdGllczEgJiBDQVBBQklMSVRJRVMxX0JBU0VfUFJPVE9D T0wpOw0KKw0KKyAgaWYgKFN1ZmZpY2llbnQgPT0gRkFMU0UpIHsNCisgICAgREVCVUcgKChERUJV R19FUlJPUiwgIkRpc3BsYXlMaW5rIGRldmljZSBkb2VzIG5vdCByZXBvcnQgc3VwcG9ydCBmb3Ig YmFzZSBjYXBhYmlsaXRlcyAtIHJlcG9ydHMgeCV4LCByZXF1aXJlZCB4JXhcbiIsIERlc2NyaXB0 b3ItPkNhcGFiaWxpdGllczEgJiBDQVBBQklMSVRJRVMxX0JBU0VfUFJPVE9DT0wpKTsNCisgIH0N CisgIHJldHVybiBTdWZmaWNpZW50Ow0KK30NCisNCmRpZmYgLS1naXQgYS9Ecml2ZXJzL0Rpc3Bs YXlMaW5rL0Rpc3BsYXlMaW5rUGtnL0Rpc3BsYXlMaW5rR29wL0NvbXBvbmVudE5hbWUuYyBiL0Ry aXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtHb3AvQ29tcG9uZW50 TmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzQ0OThmMzM5 ZWI3Ci0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1Br Zy9EaXNwbGF5TGlua0dvcC9Db21wb25lbnROYW1lLmMKQEAgLTAsMCArMSwyMzUgQEAKKy8qKg0K KyAqIEBmaWxlIENvbXBvbmVudE5hbWUuYw0KKyAqIEBicmllZiBVRUZJIENvbXBvbmVudCBOYW1l IHByb3RvY29sIGltcGxlbWVudGF0aW9uIGZvciBVU0IgRGlzcGxheUxpbmsgZHJpdmVyLg0KKyAq DQorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIERpc3BsYXlMaW5rIChVSykgTHRkLiBBbGwg cmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0y LUNsYXVzZS1QYXRlbnQNCisgKg0KKyoqLw0KKw0KKyNpbmNsdWRlICJVc2JEaXNwbGF5TGluay5o Ig0KKw0KKw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitVc2JEaXNwbGF5TGlua0NvbXBvbmVudE5h bWVHZXREcml2ZXJOYW1lICgNCisgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpU aGlzLA0KKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KKyAg T1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKipEcml2ZXJOYW1lDQorKTsNCisNCisN CitFRklfU1RBVFVTDQorRUZJQVBJDQorVXNiRGlzcGxheUxpbmtDb21wb25lbnROYW1lR2V0Q29u dHJvbGxlck5hbWUgKA0KKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgICAgICAg ICAgICAgICAgICAgICpUaGlzLA0KKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICBJTiAgRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9Q VElPTkFMLA0KKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpMYW5ndWFnZSwNCisgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQorKTsNCisNCisNCisvLw0KKy8vIEVG SSBDb21wb25lbnQgTmFtZSBQcm90b2NvbA0KKy8vDQorR0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVS RU5DRUQgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICBtVXNiRGlzcGxheUxpbmtDb21wb25l bnROYW1lID0gew0KKyAgVXNiRGlzcGxheUxpbmtDb21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSwN CisgIFVzYkRpc3BsYXlMaW5rQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lLA0KKyAgImVu ZyINCit9Ow0KKw0KKy8vDQorLy8gRUZJIENvbXBvbmVudCBOYW1lIDIgUHJvdG9jb2wNCisvLw0K K0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9D T0wgbVVzYkRpc3BsYXlMaW5rQ29tcG9uZW50TmFtZTIgPSB7DQorICAoRUZJX0NPTVBPTkVOVF9O QU1FMl9HRVRfRFJJVkVSX05BTUUpIFVzYkRpc3BsYXlMaW5rQ29tcG9uZW50TmFtZUdldERyaXZl ck5hbWUsDQorICAoRUZJX0NPTVBPTkVOVF9OQU1FMl9HRVRfQ09OVFJPTExFUl9OQU1FKSBVc2JE aXNwbGF5TGlua0NvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCisgICJlbiINCit9Ow0K Kw0KKw0KK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklOR19U QUJMRSBtVXNiRGlzcGxheUxpbmtEcml2ZXJOYW1lVGFibGVbXSA9IHsNCisgIHsgKENIQVI4Kiki ZW5nO2VuIiwgKENIQVIxNiopTCJEaXNwbGF5TGluayBVU0IgR09QIERyaXZlciIgfSwNCisgIHsg KENIQVI4KilOVUxMICwgKENIQVIxNiopTlVMTCB9DQorfTsNCisNCisvKioNCisgIFJldHJpZXZl cyBhIFVuaWNvZGUgc3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUg ZHJpdmVyLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUg bmFtZSBvZiBhIGRyaXZlciBpbiB0aGUgZm9ybSBvZiBhDQorICBVbmljb2RlIHN0cmluZy4gSWYg dGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4N CisgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsIHRoZW4gYSBwb2ludGVyIHRv IHRoZSBkcml2ZXIgbmFtZSBpcw0KKyAgcmV0dXJuZWQgaW4gRHJpdmVyTmFtZSwgYW5kIEVGSV9T VUNDRVNTIGlzIHJldHVybmVkLiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZA0KKyAgYnkgVGhpcyBk b2VzIG5vdCBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsDQorICB0 aGVuIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4NCisNCisgIEBwYXJhbSAgVGhpcyAgICAg ICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NP TCBvcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0NPTVBPTkVOVF9OQU1F X1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtICBMYW5ndWFnZSAgICAgICAgICAgICAgQSBw b2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZw0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNhdGluZyB0aGUgbGFuZ3VhZ2UuIFRoaXMgaXMg dGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBvZiB0aGUgZHJp dmVyIG5hbWUgdGhhdCB0aGUgY2FsbGVyIGlzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUgb2YgdGhlDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZXMgc3BlY2lmaWVkIGluIFN1cHBvcnRlZExh bmd1YWdlcy4gVGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Yg bGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhIGRyaXZlciBpcyB1cA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3cml0ZXIuIExhbmd1YWdlIGlzIHNwZWNpZmll ZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gUkZDIDQ2NDYgb3IgSVNPIDYz OS0yIGxhbmd1YWdlIGNvZGUgZm9ybWF0Lg0KKyAgQHBhcmFtICBEcml2ZXJOYW1lICAgICAgICAg ICAgQSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIHN0cmluZyB0byByZXR1cm4uDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlzIHRoZSBuYW1lIG9m IHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBi eSBUaGlzIGluIHRoZSBsYW5ndWFnZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVGhlIFVuaWNvZGUgc3RyaW5nIGZvciB0aGUgRHJpdmVyIHNwZWNpZmllZCBieQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbmQgdGhlIGxhbmd1YWdlIHNwZWNpZmll ZCBieSBMYW5ndWFnZSB3YXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bmVkIGluIERyaXZlck5hbWUuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBMYW5n dWFnZSBpcyBOVUxMLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgRHJpdmVyTmFt ZSBpcyBOVUxMLg0KKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRyaXZlciBz cGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdCBzdXBwb3J0DQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KKw0KKyoqLw0K K0VGSV9TVEFUVVMNCitFRklBUEkNCitVc2JEaXNwbGF5TGlua0NvbXBvbmVudE5hbWVHZXREcml2 ZXJOYW1lICgNCisgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KKyAg SU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KKyAgT1VUIENIQVIx NiAgICAgICAgICAgICAgICAgICAgICAgKipEcml2ZXJOYW1lDQorICApDQorew0KKyAgcmV0dXJu IExvb2t1cFVuaWNvZGVTdHJpbmcyICgNCisgICAgICAgICAgIExhbmd1YWdlLA0KKyAgICAgICAg ICAgVGhpcy0+U3VwcG9ydGVkTGFuZ3VhZ2VzLA0KKyAgICAgICAgICAgbVVzYkRpc3BsYXlMaW5r RHJpdmVyTmFtZVRhYmxlLA0KKyAgICAgICAgICAgRHJpdmVyTmFtZSwNCisgICAgICAgICAgIChC T09MRUFOKShUaGlzID09ICZtVXNiRGlzcGxheUxpbmtDb21wb25lbnROYW1lKSk7DQorfQ0KKw0K Ky8qKg0KKyAgUmV0cmlldmVzIGEgVW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNlciByZWFk YWJsZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyDQorICB0aGF0IGlzIGJlaW5nIG1hbmFnZWQgYnkg YSBkcml2ZXIuDQorDQorICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdXNlciByZWFkYWJs ZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBieQ0KKyAgQ29udHJvbGxlckhhbmRs ZSBhbmQgQ2hpbGRIYW5kbGUgaW4gdGhlIGZvcm0gb2YgYSBVbmljb2RlIHN0cmluZy4gSWYgdGhl DQorICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1lIGlu IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkNCisgIExhbmd1YWdlLCB0aGVuIGEgcG9pbnRlciB0 byB0aGUgY29udHJvbGxlciBuYW1lIGlzIHJldHVybmVkIGluIENvbnRyb2xsZXJOYW1lLA0KKyAg YW5kIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkg VGhpcyBpcyBub3QgY3VycmVudGx5DQorICBtYW5hZ2luZyB0aGUgY29udHJvbGxlciBzcGVjaWZp ZWQgYnkgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUsDQorICB0aGVuIEVGSV9VTlNV UFBPUlRFRCBpcyByZXR1cm5lZC4gIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9l cyBub3QNCisgIHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhl biBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuDQorDQorICBAcGFyYW0gIFRoaXMgICAgICAg ICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wg b3INCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRfTkFNRV9Q Uk9UT0NPTCBpbnN0YW5jZS4NCisgIEBwYXJhbSAgQ29udHJvbGxlckhhbmRsZSAgICAgIFRoZSBo YW5kbGUgb2YgYSBjb250cm9sbGVyIHRoYXQgdGhlIGRyaXZlcg0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbWFuYWdpbmcuICBUaGlzIGhhbmRs ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBjb250cm9s bGVyIHdob3NlIG5hbWUgaXMgdG8gYmUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybmVkLg0KKyAgQHBhcmFtICBDaGlsZEhhbmRsZSAgICAgICAgICAgVGhlIGhhbmRsZSBv ZiB0aGUgY2hpbGQgY29udHJvbGxlciB0byByZXRyaWV2ZQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhlIG5hbWUgb2YuICBUaGlzIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0 aGF0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgTlVMTC4gIEl0IHdp bGwgYmUgTlVMTCBmb3IgZGV2aWNlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk cml2ZXJzLiAgSXQgd2lsbCBhbHNvIGJlIE5VTEwgZm9yIGEgYnVzIGRyaXZlcnMNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2lzaCB0byByZXRyaWV2ZSB0aGUgbmFtZSBv ZiB0aGUgYnVzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLiAg SXQgd2lsbCBub3QgYmUgTlVMTCBmb3IgYSBidXMNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRyaXZlciB0aGF0IHdpc2hlcyB0byByZXRyaWV2ZSB0aGUgbmFtZSBvZiBhDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCBjb250cm9sbGVyLg0KKyAgQHBhcmFt ICBMYW5ndWFnZSAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFT Q0lJIHN0cmluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNh dGluZyB0aGUgbGFuZ3VhZ2UuICBUaGlzIGlzIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3Qg bWF0Y2ggb25lIG9mIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3Vh Z2VzIHNwZWNpZmllZCBpbiBTdXBwb3J0ZWRMYW5ndWFnZXMuIFRoZQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2 ZXIgaXMgdXANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkcml2ZXIg d3JpdGVyLiBMYW5ndWFnZSBpcyBzcGVjaWZpZWQgaW4NCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJGQyA0NjQ2IG9yIElTTyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvcm1hdC4NCisg IEBwYXJhbSAgQ29udHJvbGxlck5hbWUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBz dHJpbmcgdG8gcmV0dXJuLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBV bmljb2RlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSBpbiB0aGUgbGFuZ3Vh Z2Ugc3BlY2lmaWVkIGJ5DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYW5ndWFn ZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBkcml2ZXINCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlzLg0KKw0KKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhlIFVuaWNvZGUgc3RyaW5nIGZvciB0aGUgdXNlciByZWFkYWJsZSBu YW1lIGluDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3Bl Y2lmaWVkIGJ5IExhbmd1YWdlIGZvciB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyB3YXMgcmV0dXJuZWQgaW4NCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERyaXZlck5hbWUuDQorICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBDb250cm9sbGVySGFuZGxlIGlzIG5vdCBhIHZhbGlkIEVGSV9IQU5ETEUuDQor ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDaGlsZEhhbmRsZSBpcyBub3QgTlVMTCBh bmQgaXQgaXMgbm90IGEgdmFsaWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVG SV9IQU5ETEUuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBMYW5ndWFnZSBpcyBO VUxMLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJvbGxlck5hbWUgaXMg TlVMTC4NCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lm aWVkIGJ5IFRoaXMgaXMgbm90IGN1cnJlbnRseQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFuYWdpbmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZS4NCisg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRo aXMgZG9lcyBub3Qgc3VwcG9ydA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhl IGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCisNCisqKi8NCitFRklfU1RBVFVTDQor RUZJQVBJDQorVXNiRGlzcGxheUxpbmtDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUgKA0K KyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgICAgICAgICAgICAgICAgICAgICpU aGlzLA0KKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9QVElPTkFMLA0KKyAgSU4g IENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFn ZSwNCisgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKkNvbnRyb2xsZXJOYW1lDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQorICBVU0JfRElTUExBWUxJTktfREVWICAgICAgICAgICpVc2JEaXNwbGF5 TGlua0RldjsNCisgIEVGSV9HUkFQSElDU19PVVRQVVRfUFJPVE9DT0wgKkdyYXBoaWNzT3V0cHV0 UHJvdG9jb2w7DQorICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAgICpVc2JJb1Byb3RvY29s Ow0KKw0KKyAgLy8NCisgIC8vIFRoaXMgaXMgYSBkZXZpY2UgZHJpdmVyLCBzbyBDaGlsZEhhbmRs ZSBtdXN0IGJlIE5VTEwuDQorICAvLw0KKyAgaWYgKENoaWxkSGFuZGxlICE9IE5VTEwpIHsNCisg ICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCisgIH0NCisNCisgIC8vDQorICAvLyBDaGVjayBD b250cm9sbGVyJ3MgaGFuZGxlDQorICAvLw0KKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wg ICgNCisgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAgICAg ICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgKFZPSUQgKiop ICZVc2JJb1Byb3RvY29sLA0KKyAgICAgICAgICAgICAgICAgIGdVc2JEaXNwbGF5TGlua0RyaXZl ckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZF Uik7DQorDQorICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBnQlMtPkNsb3NlUHJv dG9jb2wgICgNCisgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAgICAmZ0Vm aVVzYklvUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgZ1VzYkRpc3BsYXlMaW5rRHJpdmVyQmlu ZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSk7 DQorDQorICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQorICB9DQorDQorICBpZiAoU3RhdHVz ICE9IEVGSV9BTFJFQURZX1NUQVJURUQpIHsNCisgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsN CisgIH0NCisgIC8vDQorICAvLyBHZXQgdGhlIGRldmljZSBjb250ZXh0DQorICAvLw0KKyAgU3Rh dHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlHcmFwaGljc091dHB1dFByb3RvY29sR3Vp ZCwNCisgICAgICAgICAgICAgICAgICAoVk9JRCoqKSZHcmFwaGljc091dHB1dFByb3RvY29sLA0K KyAgICAgICAgICAgICAgICAgIGdVc2JEaXNwbGF5TGlua0RyaXZlckJpbmRpbmcuRHJpdmVyQmlu ZGluZ0hhbmRsZSwNCisgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAg ICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTCk7DQorDQorICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBV c2JEaXNwbGF5TGlua0RldiA9IFVTQl9ESVNQTEFZTElOS19ERVZfRlJPTV9HUkFQSElDU19PVVRQ VVRfUFJPVE9DT0woR3JhcGhpY3NPdXRwdXRQcm90b2NvbCk7DQorDQorICByZXR1cm4gTG9va3Vw VW5pY29kZVN0cmluZzIgKA0KKyAgICAgICAgICAgTGFuZ3VhZ2UsDQorICAgICAgICAgICBUaGlz LT5TdXBwb3J0ZWRMYW5ndWFnZXMsDQorICAgICAgICAgICBVc2JEaXNwbGF5TGlua0Rldi0+Q29u dHJvbGxlck5hbWVUYWJsZSwNCisgICAgICAgICAgIENvbnRyb2xsZXJOYW1lLA0KKyAgICAgICAg ICAgKEJPT0xFQU4pKFRoaXMgPT0gJm1Vc2JEaXNwbGF5TGlua0NvbXBvbmVudE5hbWUpKTsNCit9 DQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5 TGlua0dvcC9FZGlkLmMgYi9Ecml2ZXJzL0Rpc3BsYXlMaW5rL0Rpc3BsYXlMaW5rUGtnL0Rpc3Bs YXlMaW5rR29wL0VkaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjIxZjRiN2Q5YzczNgotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlz cGxheUxpbmtQa2cvRGlzcGxheUxpbmtHb3AvRWRpZC5jCkBAIC0wLDAgKzEsNTk4IEBACisvKiog QGZpbGUgRWRpZC5jDQorICogQGJyaWVmIFJlYWRzIGFuZCBwYXJzZXMgdGhlIEVESUQsIGNoZWNr cyBpZiBhIHJlcXVlc3RlZCB2aWRlbyBtb2RlIGlzIGluIHRoZSBzdXBwbGllZCBFRElEDQorICoN CisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgRGlzcGxheUxpbmsgKFVLKSBMdGQuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KKyAqDQorKiovDQorDQorI2luY2x1ZGUgIlVzYkRpc3BsYXlMaW5rLmgi DQorI2luY2x1ZGUgIkVkaWQuaCINCisNCitDT05TVCBVSU5UOCBFeHBlY3RlZEVkaWRIZWFkZXJb RURJRF9IRUFERVJfU0laRV0gPSB7IDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYs IDB4RkYsIDB4MDAgfTsNCisNCisvLw0KKy8vIFN0YW5kYXJkIHRpbWluZyBkZWZpbmVkIGJ5IFZF U0EgRURJRA0KKy8vDQorQ09OU1QgRURJRF9USU1JTkcgRXN0YWJsaXNoZWRUaW1pbmdzW0VESURf TlVNQkVSX09GX0VTVEFCTElTSEVEX1RJTUlOR1NfQllURVNdWzhdID0gew0KKyAgLy8NCisgIC8v IEVzdGFibGlzaGVkIFRpbWluZyBJDQorICAvLw0KKyAgew0KKyAgICB7IDgwMCwgNjAwLCA2MCB9 LA0KKyAgICB7IDgwMCwgNjAwLCA1NiB9LA0KKyAgICB7IDY0MCwgNDgwLCA3NSB9LA0KKyAgICB7 IDY0MCwgNDgwLCA3MiB9LA0KKyAgICB7IDY0MCwgNDgwLCA2NyB9LA0KKyAgICB7IDY0MCwgNDgw LCA2MCB9LA0KKyAgICB7IDcyMCwgNDAwLCA4OCB9LA0KKyAgICB7IDcyMCwgNDAwLCA3MCB9LA0K KyAgfSwNCisgIHsNCisgICAgLy8NCisgICAgLy8gRXN0YWJsaXNoZWQgVGltaW5nIElJDQorICAg IC8vDQorICAgIHsgMTI4MCwgMTAyNCwgNzUgfSwNCisgICAgeyAxMDI0LCAgNzY4LCA3NSB9LA0K KyAgICB7IDEwMjQsICA3NjgsIDcwIH0sDQorICAgIHsgMTAyNCwgIDc2OCwgNjAgfSwNCisgICAg eyAxMDI0LCAgNzY4LCA4NyB9LA0KKyAgICB7IDgzMiwgICA2MjQsIDc1IH0sDQorICAgIHsgODAw LCAgIDYwMCwgNzUgfSwNCisgICAgeyA4MDAsICAgNjAwLCA3MiB9LA0KKyAgfSwNCisgIC8vDQor ICAvLyBFc3RhYmxpc2hlZCBUaW1pbmcgSUlJDQorICAvLw0KKyAgew0KKyAgICB7IDExNTIsIDg3 MCwgNzUgfSwNCisgICAgeyAwLCAwLCAwIH0sDQorICAgIHsgMCwgMCwgMCB9LA0KKyAgICB7IDAs IDAsIDAgfSwNCisgICAgeyAwLCAwLCAwIH0sDQorICAgIHsgMCwgMCwgMCB9LA0KKyAgICB7IDAs IDAsIDAgfSwNCisgICAgeyAwLCAwLCAwIH0sDQorICB9DQorfTsNCisNCisvKioNCisgKiBSZXF1 ZXN0cyB0aGUgbW9uaXRvciBFRElEIGRhdGEgZnJvbSB0aGUgY29ubmVjdGVkIERpc3BsYXlMaW5r IGRldmljZQ0KKyAqIEBwYXJhbSBVc2JEaXNwbGF5TGlua0Rldg0KKyAqIEBwYXJhbSBFZGlkRGF0 YUJsb2NrDQorICogQHBhcmFtIEVkaWRTaXplDQorICogQHJldHZhbCBFRklfREVWSUNFX0VSUk9S IC0gTm8gRURJRCByZWNlaXZlZCwgb3IgRURJRCBpcyBjb3JydXB0ZWQNCisgKiBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTIC0gQ2Fubm90IGFsbG9jYXRlIG1lbW9yeQ0KKyAqIEByZXR2YWwg RUZJX1NVQ0NFU1MNCisgKg0KKyAqLw0KK1NUQVRJQyBFRklfU1RBVFVTDQorUmVhZEVkaWREYXRh ICgNCisgIElOIFVTQl9ESVNQTEFZTElOS19ERVYgICAgICAqVXNiRGlzcGxheUxpbmtEZXYsDQor ICBPVVQgVUlOVDggICAgICAgICAgICAgICAgICAgICoqRWRpZERhdGFCbG9jaywNCisgIE9VVCBV SU5UTiAgICAgICAgICAgICAgICAgICAgKkVkaWRTaXplDQorKQ0KK3sNCisgIEVGSV9TVEFUVVMg U3RhdHVzOw0KKw0KKyAgVUlOVDggRWRpZERhdGFSZWFkW0VESURfQkxPQ0tfU0laRV07DQorICBV SU5UOCAqRWRpZERhdGEgPSBFZGlkRGF0YVJlYWQ7DQorICBVSU5UOCogVmFsaWRFZGlkOw0KKw0K KyAgU3RhdHVzID0gRGxVc2JTZW5kQ29udHJvbFJlYWRNZXNzYWdlIChVc2JEaXNwbGF5TGlua0Rl diwgR0VUX09VVFBVVF9FRElELCAwLCBFZGlkRGF0YVJlYWQsIHNpemVvZiAoRWRpZERhdGFSZWFk KSk7DQorDQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IChFZGlkRGF0YVswXSAhPSAwKSkg ew0KKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiTm8gbW9uaXRvciBFRElEIHJlY2VpdmVkIGZy b20gRGlzcGxheUxpbmsgZGV2aWNlIC0gU3lzdGVtIGVycm9yICVyLCBFRElEIGVycm9yICVkLiBN b25pdG9yIGNvbm5lY3RlZCBjb3JyZWN0bHk/XG4iLCBTdGF0dXMsIEVkaWREYXRhWzBdKSk7DQor ICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KKyAgfSBlbHNlIHsNCisgICAgLy8NCisgICAg Ly8gU2VhcmNoIGZvciB0aGUgRURJRCBzaWduYXR1cmUNCisgICAgLy8NCisgICAgVmFsaWRFZGlk ID0gJkVkaWREYXRhWzBdOw0KKyAgICBDT05TVCBVSU5UNjQgU2lnbmF0dXJlID0gMHgwMGZmZmZm ZmZmZmZmZjAwdWxsOw0KKyAgICBpZiAoQ29tcGFyZU1lbSAoVmFsaWRFZGlkLCAmU2lnbmF0dXJl LCA4KSAhPSAwKSB7DQorICAgICAgLy8NCisgICAgICAvLyBObyBFRElEIHNpZ25hdHVyZSBmb3Vu ZA0KKyAgICAgIC8vDQorICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIk1vbml0b3IgRURJRCBy ZWNlaXZlZCBmcm9tIERpc3BsYXlMaW5rIGRldmljZSBkaWQgbm90IGhhdmUgYSB2YWxpZCBzaWdu YXR1cmUgLSBjb3JydXB0ZWQ/XG4iKSk7DQorICAgICAgU3RhdHVzID0gRUZJX0RFVklDRV9FUlJP UjsNCisgICAgICByZXR1cm4gU3RhdHVzOw0KKyAgICB9DQorICB9DQorDQorICAqRWRpZERhdGFC bG9jayA9IChVSU5UOCopQWxsb2NhdGVDb3B5UG9vbCAoDQorICAgIEVESURfQkxPQ0tfU0laRSwN CisgICAgVmFsaWRFZGlkKTsNCisNCisgIGlmICgqRWRpZERhdGFCbG9jayA9PSBOVUxMKSB7DQor ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisgIC8vDQorICAvLyBD dXJyZW50bHkgb25seSBzdXBwb3J0IEVESUQgMS54DQorICAvLw0KKyAgKkVkaWRTaXplID0gRURJ RF9CTE9DS19TSVpFOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisNCisvKioN CitDYWxjdWxhdGVzIHRoZSBtb2QyNTYgY2hlY2tzdW0gb2YgdGhlIEVESUQgYW5kIGNvbXBhcmVz IGl0IHdpdGggdGhlIG9uZSBzdXBwbGllZCBhdCB0aGUgZW5kIG9mIHRoZSBFRElEDQorQHBhcmFt ICBFRElEICAgICAgICBQb2ludGVyIHRvIHRoZSAxMjgtYnl0ZSBFRElEDQorQHJldHZhbCBUUlVF ICAgICAgICBUaGUgRURJRCBjaGVja3N1bSBpcyBjb3JyZWN0DQorKiovDQorQk9PTEVBTg0KK0lz RWRpZENoZWNrc3VtQ29ycmVjdCAoDQorICAgIENPTlNUIFZPSUQgKkVESUQNCisgICAgKQ0KK3sN CisgIENPTlNUIFVJTlQ4IEVkaWRDaGVja3N1bSA9ICgoVUlOVDggKilFRElEKVtFRElEX0JMT0NL X1NJWkUgLSAxXTsNCisgIFVJTlQ4IENhbGN1bGF0ZWRDaGVja3N1bTsNCisNCisgIENhbGN1bGF0 ZWRDaGVja3N1bSA9IDA7DQorDQorICBVSU5UTiBpOw0KKyAgZm9yIChpID0gMDsgaSA8IEVESURf QkxPQ0tfU0laRSAtIDE7IGkrKykgew0KKyAgICBDYWxjdWxhdGVkQ2hlY2tzdW0gKz0gKChVSU5U OCAqKUVESUQpW2ldOw0KKyAgfQ0KKyAgQ2FsY3VsYXRlZENoZWNrc3VtID0gMCAtIENhbGN1bGF0 ZWRDaGVja3N1bTsNCisNCisgIHJldHVybiAoQ2FsY3VsYXRlZENoZWNrc3VtID09IEVkaWRDaGVj a3N1bSk7DQorfQ0KKw0KKy8qKg0KK0NoZWNrIGlmIGEgcGFydGljdWxhciB2aWRlbyBtb2RlIGlz IGluIHRoZSBFc3RhYmxpc2hlZCBUaW1pbmdzIHNlY3Rpb24gb2YgdGhlIEVESUQuDQorDQorQHBh cmFtICBFRElEICAgICAgICBQb2ludGVyIHRvIHRoZSAxMjgtYnl0ZSBFRElEDQorQHBhcmFtICBo UmVzICAgICAgICBIb3Jpem9udGFsIHJlc29sdXRpb24NCitAcGFyYW0gIHZSZXMgICAgICAgIFZl cnRpY2FsIHJlc29sdXRpb24NCitAcGFyYW0gIHJlZnJlc2ggICAgIFJlZnJlc2ggcmF0ZQ0KK0By ZXR2YWwgVFJVRSAgICAgICAgVGhlIHJlcXVlc3RlZCBtb2RlIGlzIHByZXNlbnQgaW4gdGhlIEVz dGFibGlzaGVkIFRpbWluZ3Mgc2VjdGlvbg0KKw0KKyoqLw0KK1NUQVRJQyBCT09MRUFODQorSXNN b2RlSW5Fc3RhYmxpc2hlZFRpbWluZ3MgKA0KKyAgICBJTiBDT05TVCBWT0lEICpFRElELA0KKyAg ICBJTiBVSU5UMTYgSFJlcywNCisgICAgSU4gVUlOVDE2IFZSZXMsDQorICAgIElOIFVJTlQxNiBS ZWZyZXNoDQorICAgICkNCit7DQorICBDT05TVCBzdHJ1Y3QgRWRpZCAqcEVESUQgPSAoQ09OU1Qg c3RydWN0IEVkaWQgKilFRElEOw0KKyAgQk9PTEVBTiBNb2RlU3VwcG9ydGVkOw0KKw0KKyAgTW9k ZVN1cHBvcnRlZCA9IEZBTFNFOw0KKw0KKyAgaW50IEVzdEJ5dGVOdW07DQorICBpbnQgQml0TnVt Ow0KKyAgZm9yIChFc3RCeXRlTnVtID0gMDsgRXN0Qnl0ZU51bSA8IEVESURfTlVNQkVSX09GX0VT VEFCTElTSEVEX1RJTUlOR1NfQllURVM7IEVzdEJ5dGVOdW0rKykgew0KKyAgICBmb3IgKEJpdE51 bSA9IDA7IEJpdE51bSA8IDg7IEJpdE51bSsrKSB7DQorICAgICAgaWYgKHBFRElELT5Fc3RhYmxp c2hlZFRpbWluZ3NbRXN0Qnl0ZU51bV0gJiAoMSA8PCBCaXROdW0pKSB7IC8vIFRoZSBiaXQgaXMg c2V0IGluIHRoZSBlc3RhYmxpc2hlZCB0aW1pbmdzIG9mIHRoZSBFRElEDQorDQorICAgICAgICBp ZiAoKEVzdGFibGlzaGVkVGltaW5nc1tFc3RCeXRlTnVtXVtCaXROdW1dLkhSZXMgPT0gSFJlcykg JiYgLy8gVGhlIHBhc3NlZC1pbiByZXNvbHV0aW9uIG1hdGNoZXMgdGhlIHJlc29sdXRpb24gcmVw cmVzZW50ZWQgYnkgdGhlIHNldCBiaXQNCisgICAgICAgICAgKEVzdGFibGlzaGVkVGltaW5nc1tF c3RCeXRlTnVtXVtCaXROdW1dLlZSZXMgPT0gVlJlcykgJiYNCisgICAgICAgICAgKEVzdGFibGlz aGVkVGltaW5nc1tFc3RCeXRlTnVtXVtCaXROdW1dLlJlZnJlc2ggPT0gUmVmcmVzaCkpIHsNCisN CisgICAgICAgICAgTW9kZVN1cHBvcnRlZCA9IFRSVUU7DQorICAgICAgICAgIGJyZWFrOw0KKyAg ICAgICAgfQ0KKyAgICAgIH0NCisgICAgfQ0KKyAgICBpZiAoTW9kZVN1cHBvcnRlZCA9PSBUUlVF KSB7DQorICAgICAgYnJlYWs7DQorICAgIH0NCisgIH0NCisgIHJldHVybiBNb2RlU3VwcG9ydGVk Ow0KK30NCisNCisvKioNCitFeHRyYWN0IHRoZSByZXNvbHV0aW9ucyBhbmQgcmVmcmVzaCByYXRl IGZyb20gb25lIG9mIHRoZSBlbnRyaWVzIGluIHRoZSBTdGFuZGFyZCBUaW1pbmdzIHNlY3Rpb24g b2YgdGhlIEVESUQuDQorDQorQHBhcmFtICBFRElEICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIDEy OC1ieXRlIEVESUQNCitAcGFyYW0gIHRpbWluZ051bWJlciAgVGhlIGVudHJ5IHRoYXQgd2Ugd2Fu dCB0byBleHRyYWN0DQorQHBhcmFtICBoUmVzICAgICAgICAgIE91dHB1dCAtIEhvcml6b250YWwg cmVzb2x1dGlvbg0KK0BwYXJhbSAgdlJlcyAgICAgICAgICBPdXRwdXQgLSBWZXJ0aWNhbCByZXNv bHV0aW9uDQorQHBhcmFtICByZWZyZXNoICAgICAgIE91dHB1dCAtIFJlZnJlc2ggcmF0ZQ0KK0By ZXR2YWwgVFJVRSAgICAgICAgICBUaGUgcmVxdWVzdGVkIFN0YW5kYXJkIFRpbWluZ3MgZW50cnkg Y29udGFpbnMgdmFsaWQgZGF0YQ0KKw0KKyoqLw0KK1NUQVRJQyBCT09MRUFOIFJlYWRTdGFuZGFy ZFRpbWluZyAoDQorICBDT05TVCBWT0lEICpFRElELA0KKyAgSU4gVUlOVDggVGltaW5nTnVtYmVy LA0KKyAgT1VUIFVJTlQxNiAqSFJlcywNCisgIE9VVCBVSU5UMTYgKlZSZXMsDQorICBPVVQgVUlO VDggKlJlZnJlc2gpDQorew0KKyAgQ09OU1Qgc3RydWN0IEVkaWQgKnBFRElEID0gKENPTlNUIHN0 cnVjdCBFZGlkICopRURJRDsNCisNCisgIC8vIFNlZSBzZWN0aW9uIDMuOS4xIG9mIHRoZSBWRVNB IEVESUQgc3BlYw0KKw0KKyAgaWYgKCgocEVESUQtPnN0YW5kYXJkVGltaW5nSWRlbnRpZmljYXRp b25zW1RpbWluZ051bWJlcl0uSG9yaXpvbnRhbEFjdGl2ZVBpeGVscykgPT0gMHgwMSkgJiYNCisg ICAgKHBFRElELT5zdGFuZGFyZFRpbWluZ0lkZW50aWZpY2F0aW9uc1tUaW1pbmdOdW1iZXJdLklt YWdlQXNwZWN0UmF0aW9BbmRyZWZyZXNoKSA9PSAweDAxKSB7DQorICAgICpIUmVzID0gMDsNCisg ICAgKlZSZXMgPSAwOw0KKyAgICAqUmVmcmVzaCA9IDA7DQorICAgIHJldHVybiBGQUxTRTsNCisg IH0NCisgICpIUmVzID0gKHBFRElELT5zdGFuZGFyZFRpbWluZ0lkZW50aWZpY2F0aW9uc1tUaW1p bmdOdW1iZXJdLkhvcml6b250YWxBY3RpdmVQaXhlbHMgKyAzMSkgKiA4Ow0KKw0KKyAgVUlOVDgg QXNwZWN0UmF0aW87DQorICBBc3BlY3RSYXRpbyA9IChwRURJRC0+c3RhbmRhcmRUaW1pbmdJZGVu dGlmaWNhdGlvbnNbVGltaW5nTnVtYmVyXS5JbWFnZUFzcGVjdFJhdGlvQW5kcmVmcmVzaCA+PiA2 KSAmIDB4MzsNCisNCisgIHN3aXRjaCAoQXNwZWN0UmF0aW8pIHsNCisgIGNhc2UgMDogKlZSZXMg PSAoKkhSZXMgKiAxMCkgLyAxNjsNCisgICAgYnJlYWs7DQorICBjYXNlIDE6ICpWUmVzID0gKCpI UmVzICogMykgLyA0Ow0KKyAgICBicmVhazsNCisgIGNhc2UgMjogKlZSZXMgPSAoKkhSZXMgKiA0 KSAvIDU7DQorICAgIGJyZWFrOw0KKyAgY2FzZSAzOiAqVlJlcyA9ICgqSFJlcyAqIDkpIC8gMTY7 DQorICAgIGJyZWFrOw0KKyAgZGVmYXVsdDogYnJlYWs7DQorICB9DQorDQorICAvLyBXT1JLQVJP VU5EIC0gMTM2MHg3NjggaXMgbm90IGEgcGVyZmVjdCBhc3BlY3QgcmF0aW8NCisgIGlmICgoKkhS ZXMgPT0gMTM2MCkgJiYgKCpWUmVzID09IDc2NSkpIHsNCisgICAgKlZSZXMgPSA3Njg7DQorICB9 DQorDQorICAqUmVmcmVzaCA9IChwRURJRC0+c3RhbmRhcmRUaW1pbmdJZGVudGlmaWNhdGlvbnNb VGltaW5nTnVtYmVyXS5JbWFnZUFzcGVjdFJhdGlvQW5kcmVmcmVzaCAmIDB4MUYpICsgNjA7DQor DQorICByZXR1cm4gVFJVRTsNCit9DQorDQorLyoqDQorRXh0cmFjdCB0aGUgcmVzb2x1dGlvbnMg YW5kIHJlZnJlc2ggcmF0ZSBmcm9tIG9uZSBvZiB0aGUgZW50cmllcyBpbiB0aGUgRGV0YWlsZWQg VGltaW5ncyBzZWN0aW9uIG9mIHRoZSBFRElELg0KKw0KK0BwYXJhbSAgRURJRCAgICAgICAgICBQ b2ludGVyIHRvIHRoZSAxMjgtYnl0ZSBFRElEDQorQHBhcmFtICB0aW1pbmdOdW1iZXIgIFRoZSBl bnRyeSB0aGF0IHdlIHdhbnQgdG8gZXh0cmFjdA0KK0BwYXJhbSAgdmlkZW9Nb2RlICAgICBPdXRw dXQgLSBGaWxsZWQgaW4gd2l0aCBkZXRhaWxzIGZyb20gdGhlIGRldGFpbGVkIHRpbWluZw0KK0By ZXR2YWwgVFJVRSAgICAgICAgICBUaGUgcmVxdWVzdGVkIERldGFpbGVkIFRpbWluZ3MgZW50cnkg Y29udGFpbnMgdmFsaWQgZGF0YQ0KKw0KKyoqLw0KK1NUQVRJQyBCT09MRUFODQorUmVhZERldGFp bGVkVGltaW5nICgNCisgIElOIENPTlNUIFZPSUQgKkVESUQsDQorICBJTiBVSU5UOCBUaW1pbmdO dW1iZXIsDQorICBPVVQgc3RydWN0IFZpZGVvTW9kZSAqVmlkZW9Nb2RlDQorICApDQorew0KKyAg aWYgKFRpbWluZ051bWJlciA+PSBFRElEX05VTUJFUl9PRl9ERVRBSUxFRF9USU1JTkdTKSB7DQor ICAgIHJldHVybiBGQUxTRTsNCisgIH0NCisNCisgIFVJTlQxNiBOdW1WYWxpZERldGFpbGVkVGlt aW5nc0ZvdW5kOw0KKyAgTnVtVmFsaWREZXRhaWxlZFRpbWluZ3NGb3VuZCA9IDA7DQorDQorICAv LyBTcGluIHRocm91Z2ggdGhlIGRldGFpbGVkIHRpbWluZ3MgdW50aWwgd2UgZmluZCBhIHZhbGlk IG9uZSAtIHRoZW4gY2hlY2sgaWYgdGhpcyBoYXMgdGhlIGluZGV4IHRoYXQgd2Ugd2FudA0KKyAg aW50IEJsb2NrTnVtYmVyOw0KKyAgZm9yIChCbG9ja051bWJlciA9IDA7IEJsb2NrTnVtYmVyIDwg RURJRF9OVU1CRVJfT0ZfREVUQUlMRURfVElNSU5HUzsgQmxvY2tOdW1iZXIrKykgew0KKyAgICBD T05TVCBzdHJ1Y3QgRWRpZCAqcEVESUQgPSAoQ09OU1Qgc3RydWN0IEVkaWQgKilFRElEOw0KKyAg ICBDT05TVCBzdHJ1Y3QgRGV0YWlsZWRUaW1pbmdJZGVudGlmaWNhdGlvbiAqcFRpbWluZyA9ICZw RURJRC0+ZGV0YWlsZWRUaW1pbmdEZXNjcmlwdGlvbnNbQmxvY2tOdW1iZXJdOw0KKw0KKyAgICBp ZiAoKChCbG9ja051bWJlciA9PSAwKSAmJiAocFRpbWluZy0+UGl4ZWxDbG9jayA9PSBFRElEX0RF VEFJTEVEX1RJTUlOR19JTlZBTElEX1BJWEVMX0NMT0NLKSkgfHwNCisgICAgICAocFRpbWluZy0+ UGl4ZWxDbG9jayA9PSAwKSkgew0KKyAgICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgZGV0YWls ZWQgdGltaW5nIGRlc2NyaXB0b3INCisgICAgICBjb250aW51ZTsNCisgICAgfQ0KKw0KKyAgICBp ZiAoKHBUaW1pbmctPkZlYXR1cmVzICYgRWRpZERldGFpbGVkVGltaW5nc0ZlYXR1cmVzU3luY1Nj aGVtZU1hc2spICE9IEVkaWREZXRhaWxlZFRpbWluZ3NGZWF0dXJlc1N5bmNTY2hlbWVNYXNrKSB7 DQorICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiRURJRCBkZXRhaWxlZCB0aW1pbmcgd2l0aCB1 bnN1cHBvcnRlZCBzeW5jIHNjaGVtZSBmb3VuZCAtIG5vdCBwcm9jZXNzaW5nLlxuIikpOw0KKyAg ICAgIGNvbnRpbnVlOw0KKyAgICB9DQorDQorICAgIGlmICgocFRpbWluZy0+RmVhdHVyZXMgJiBF ZGlkRGV0YWlsZWRUaW1pbmdzRmVhdHVyZXNTdGVyZW9Nb2RlTWFzaykgIT0gMCkgew0KKyAgICAg IERFQlVHICgoREVCVUdfSU5GTywgIkVESUQgZGV0YWlsZWQgdGltaW5nIHdpdGggdW5zdXBwb3J0 ZWQgc3RlcmVvIG1vZGUgZm91bmQgLSBub3QgcHJvY2Vzc2luZy5cbiIpKTsNCisgICAgICBjb250 aW51ZTsNCisgICAgfQ0KKw0KKyAgICAvLyBXZSd2ZSBmb3VuZCBhIHN1cHBvcnRlZCBkZXRhaWxl ZCB0aW1pbmcgLSBub3cgc2VlIGlmIHRoaXMgaXMgdGhlIHJlcXVlc3RlZCBvbmUNCisgICAgaWYg KFRpbWluZ051bWJlciAhPSBOdW1WYWxpZERldGFpbGVkVGltaW5nc0ZvdW5kKSB7DQorICAgICAg TnVtVmFsaWREZXRhaWxlZFRpbWluZ3NGb3VuZCsrOw0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9 DQorDQorICAgIFplcm9NZW0gKChWT0lEICopVmlkZW9Nb2RlLCBzaXplb2YgKHN0cnVjdCBWaWRl b01vZGUpKTsNCisNCisgICAgLy8gQml0IG1hbmlwdWxhdGlvbnMgY29waWVkIGZyb20gaG9zdCBz b2Z0d2FyZSBjbGFzcyBFRElEVGltaW5nRGVzY3JpcHRvcg0KKw0KKyAgICBWaWRlb01vZGUtPlBp eGVsQ2xvY2sgPSAoVUlOVDE2KXBUaW1pbmctPlBpeGVsQ2xvY2s7DQorICAgIFZpZGVvTW9kZS0+ SEFjdGl2ZSA9IHBUaW1pbmctPkhBY3RpdmVMbyArICgocFRpbWluZy0+SEFjdGl2ZUhpQmxhbmtp bmdIaSAmIDB4RjApIDw8IDQpOw0KKyAgICBWaWRlb01vZGUtPlZBY3RpdmUgPSBwVGltaW5nLT5W QWN0aXZlTG8gKyAoKHBUaW1pbmctPlZBY3RpdmVIaUJsYW5raW5nSGkgJiAweEYwKSA8PCA0KTsN CisNCisgICAgVmlkZW9Nb2RlLT5IQmxhbmtpbmcgPSBwVGltaW5nLT5IQmxhbmtpbmdMbyArICgo cFRpbWluZy0+SEFjdGl2ZUhpQmxhbmtpbmdIaSAmIDB4MEYpIDw8IDgpOw0KKyAgICBWaWRlb01v ZGUtPlZCbGFua2luZyA9IHBUaW1pbmctPlZCbGFua2luZ0xvICsgKChwVGltaW5nLT5WQWN0aXZl SGlCbGFua2luZ0hpICYgMHgwRikgPDwgOCk7DQorDQorICAgIFZpZGVvTW9kZS0+SFN5bmNPZmZz ZXQgPSBwVGltaW5nLT5IU3luY09mZnNldExvICsgKChwVGltaW5nLT5IU3luY09mZnNldEhpSFN5 bmNXaWR0aEhpVlN5bmNPZmZzZXRIaVN5bmNXaWR0aEhpICYgMHhDMCkgPDwgMik7ICAvLyBIb3Jp em9udGFsIEZyb250IFBvcmNoDQorICAgIFZpZGVvTW9kZS0+SFN5bmNXaWR0aCA9IHBUaW1pbmct PkhTeW5jV2lkdGhMbyArICgocFRpbWluZy0+SFN5bmNPZmZzZXRIaUhTeW5jV2lkdGhIaVZTeW5j T2Zmc2V0SGlTeW5jV2lkdGhIaSAmIDB4MzApIDw8IDQpOw0KKw0KKyAgICBWaWRlb01vZGUtPlZT eW5jT2Zmc2V0ID0gKChwVGltaW5nLT5WU3luY09mZnNldExvU3luY1dpZHRoTG8gJiAweEYwKSA+ PiA0KSArICgocFRpbWluZy0+SFN5bmNPZmZzZXRIaUhTeW5jV2lkdGhIaVZTeW5jT2Zmc2V0SGlT eW5jV2lkdGhIaSAmIDB4MEMpIDw8IDIpOyAvLyBWZXJ0aWNhbCBGcm9udCBQb3JjaA0KKyAgICBW aWRlb01vZGUtPlZTeW5jV2lkdGggPSAocFRpbWluZy0+VlN5bmNPZmZzZXRMb1N5bmNXaWR0aExv ICYgMHgwRikgKyAoKHBUaW1pbmctPkhTeW5jT2Zmc2V0SGlIU3luY1dpZHRoSGlWU3luY09mZnNl dEhpU3luY1dpZHRoSGkgJiAweDAzKSA8PCA0KTsNCisNCisgICAgVmlkZW9Nb2RlLT5SZXNlcnZl ZDIgPSAyOw0KKyAgICBWaWRlb01vZGUtPkFjY3VtdWxhdGUgPSAxOw0KKw0KKyAgICAvLyBIb3Jp em9udGFsIGFuZCB2ZXJ0aWNhbCBzeW5jIGludmVyc2lvbnMgLSBwb3NpdGl2ZSBpZiBiaXQgc2V0 IGluIGRlc2NyaXB0b3IgKEVESUQgc3BlYykNCisgICAgLy8gSW4gdGhlIFZpZGVvTW9kZSwgdGhl eSBhcmUgbmVnYXRpdmUgaWYgdGhlIGJpdCBpcyBzZXQgKE5SLTExMDQ5Ny1UQyA0LjMuMyAweDIy IFNldCBWaWRlbyBNb2RlKQ0KKw0KKyAgICAvLyBIb3Jpem9udGFsIHN5bmMNCisgICAgaWYgKChw VGltaW5nLT5GZWF0dXJlcyAmIEVkaWREZXRhaWxlZFRpbWluZ3NGZWF0dXJlc0hvcml6b250YWxT eW5jUG9zaXRpdmUpID09IDApIHsNCisgICAgICBWaWRlb01vZGUtPkZsYWdzIHw9IFZpZGVvTW9k ZUZsYWdzSG9yaXpvbnRhbFN5bmNJbnZlcnRlZDsNCisgICAgfQ0KKyAgICAvLyBWZXJ0aWNhbCBz eW5jDQorICAgIGlmICgocFRpbWluZy0+RmVhdHVyZXMgJiBFZGlkRGV0YWlsZWRUaW1pbmdzRmVh dHVyZXNWZXJ0aWNhbFN5bmNQb3NpdGl2ZSkgPT0gMCkgew0KKyAgICAgIFZpZGVvTW9kZS0+Rmxh Z3MgfD0gVmlkZW9Nb2RlRmxhZ3NWZXJ0aWNhbFN5bmNJbnZlcnRlZDsNCisgICAgfQ0KKyAgICAv LyBJbnRlcmxhY2UNCisgICAgaWYgKChwVGltaW5nLT5GZWF0dXJlcyAmIEVkaWREZXRhaWxlZFRp bWluZ3NGZWF0dXJlc0ludGVybGFjZWQpID09IEVkaWREZXRhaWxlZFRpbWluZ3NGZWF0dXJlc0lu dGVybGFjZWQpIHsNCisgICAgICBWaWRlb01vZGUtPkZsYWdzIHw9IFZpZGVvTW9kZUZsYWdzSW50 ZXJsYWNlZDsNCisgICAgfQ0KKw0KKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJSZWFkIG1vZGUg JWR4JWQgZnJvbSBkZXRhaWxlZCB0aW1pbmdzXG4iLCBWaWRlb01vZGUtPkhBY3RpdmUsIFZpZGVv TW9kZS0+VkFjdGl2ZSkpOw0KKyAgICByZXR1cm4gVFJVRTsNCisgIH0NCisgIHJldHVybiBGQUxT RTsNCit9DQorDQorLyoqDQorQ2hlY2sgaWYgYSBwYXJ0aWN1bGFyIHZpZGVvIG1vZGUgaXMgaW4g ZWl0aGVyIHRoZSBFc3RhYmxpc2hlZCBvciBTdGFuZGFyZCBUaW1pbmdzIHNlY3Rpb24gb2YgdGhl IEVESUQuDQorDQorQHBhcmFtICBFRElEICAgICAgICBQb2ludGVyIHRvIHRoZSAxMjgtYnl0ZSBF RElEDQorQHBhcmFtICBoUmVzICAgICAgICBIb3Jpem9udGFsIHJlc29sdXRpb24NCitAcGFyYW0g IHZSZXMgICAgICAgIFZlcnRpY2FsIHJlc29sdXRpb24NCitAcGFyYW0gIHJlZnJlc2ggICAgIFJl ZnJlc2ggcmF0ZQ0KK0ByZXR2YWwgVFJVRSAgICAgICAgVGhlIHJlcXVlc3RlZCBtb2RlIGlzIHBy ZXNlbnQgaW4gdGhlIEVESUQNCisNCisqKi8NCitTVEFUSUMgQk9PTEVBTg0KK0lzTW9kZUluRWRp ZCAoDQorICAgIElOIENPTlNUIFZPSUQgKkVESUQsDQorICAgIElOIFVJTlQxNiBIUmVzLA0KKyAg ICBJTiBVSU5UMTYgVlJlcywNCisgICAgSU4gVUlOVDE2IFJlZnJlc2gNCisgICAgKQ0KK3sNCisg IFVJTlQxNiBFZGlkSFJlczsNCisgIFVJTlQxNiBFZGlkVlJlczsNCisgIFVJTlQ4IEVkaWRSZWZy ZXNoOw0KKyAgQk9PTEVBTiBNb2RlU3VwcG9ydGVkOw0KKw0KKyAgTW9kZVN1cHBvcnRlZCA9IElz TW9kZUluRXN0YWJsaXNoZWRUaW1pbmdzIChFRElELCBIUmVzLCBWUmVzLCBSZWZyZXNoKTsNCisN CisgIGlmIChNb2RlU3VwcG9ydGVkID09IEZBTFNFKSB7DQorICAgIC8vIENoZWNrIGlmIHRoZSBt b2RlIGlzIGluIHRoZSBTdGFuZGFyZCBUaW1pbmdzIHNlY3Rpb24gb2YgdGhlIEVESUQNCisgICAg VUlOVDggaTsNCisgICAgZm9yIChpID0gMDsgaSA8IEVESURfTlVNQkVSX09GX1NUQU5EQVJEX1RJ TUlOR1M7IGkrKykgew0KKyAgICAgIGlmIChUUlVFID09IFJlYWRTdGFuZGFyZFRpbWluZyAoRURJ RCwgaSwgJkVkaWRIUmVzLCAmRWRpZFZSZXMsICZFZGlkUmVmcmVzaCkpIHsNCisgICAgICAgIGlm ICgoSFJlcyA9PSBFZGlkSFJlcykgJiYgKFZSZXMgPT0gRWRpZFZSZXMpICYmIChSZWZyZXNoID09 IEVkaWRSZWZyZXNoKSkgew0KKyAgICAgICAgICBNb2RlU3VwcG9ydGVkID0gVFJVRTsNCisgICAg ICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICB9DQorICB9DQorICByZXR1 cm4gTW9kZVN1cHBvcnRlZDsNCit9DQorDQorLyoqDQorUmV0dXJucyB0aGUgKGluZGV4KSd0aCBl bnRyeSBmcm9tIHRoZSBsaXN0IG9mIHByZS1jYWxjdWxhdGVkIHZpZGVvIHRpbWluZ3MgdGhhdCBp cyBhbHNvIHByZXNlbnQgaW4gdGhlIEVESUQsDQorb3IsIHZpZGVvIG1vZGUgZGF0YSBjb3JyZXNw b25kaW5nIHRvIGFueSBkZXRhaWxlZCB0aW1pbmdzIHByZXNlbnQgaW4gdGhlIEVESUQuDQorDQor TGlrZSBRdWVyeVZpZGVvTW9kZSwgZmluZHMgdGhlIG51bWJlciAoYW5kIGNvbnRlbnRzKSBvZiB2 aWRlbyBtb2RlcyBhdmFpbGFibGUgYnkgcmVwZWF0ZWRseSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24N Cit3aXRoIGFuIGluY3JlYXNpbmcgaW5kZXggdmFsdWUsIHVudGlsIGl0IHJldHVybnMgRkFMU0UN CitAcGFyYW0gIGluZGV4ICAgICAgIFRoZSBjYWxsZXIgd2FudHMgdGhlIF9pbmRleF8ndGggdmlk ZW8gbW9kZQ0KK0BwYXJhbSAgRURJRCAgICAgICAgUG9pbnRlciB0byB0aGUgMTI4LWJ5dGUgRURJ RA0KK0BwYXJhbSAgZWRpZFNpemUgICAgU2l6ZSBpbiBieXRlcyBvZiB0aGUgRURJRA0KK0BwYXJh bSAgdmlkZW9Nb2RlICAgVmlkZW8gdGltaW5ncyBleHRyYWN0ZWQgZnJvbSB0aGUgbW9kZURhdGEg c3RydWN0dXJlDQorQHJldHZhbCBFRklfU1VDQ0VTUyBUaGUgcmVxdWVzdGVkIG1vZGUgaXMgcHJl c2VudCBpbiB0aGUgRURJRA0KK0ByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFRoZSByZXF1 ZXN0ZWQgbW9kZSBpcyBub3QgcHJlc2VudCBpbiB0aGUgRURJRA0KKyoqLw0KK0VGSV9TVEFUVVMN CitEbEVkaWRHZXRTdXBwb3J0ZWRWaWRlb01vZGUgKA0KKyAgICBJTiBVSU5UMzIgSW5kZXgsDQor ICAgIElOIENPTlNUIFZPSUQgKkVESUQsDQorICAgIElOIFVJTlQzMiBFZGlkU2l6ZSwNCisgICAg T1VUIENPTlNUIHN0cnVjdCBWaWRlb01vZGUgKipWaWRlb01vZGUNCisgICAgKQ0KK3sNCisgIFVJ TlROIFN1cHBvcnRlZFZpZGVvTW9kZXNGb3VuZEluRWRpZDsNCisgIEVGSV9TVEFUVVMgU3RhdHVz Ow0KKw0KKyAgU3VwcG9ydGVkVmlkZW9Nb2Rlc0ZvdW5kSW5FZGlkID0gMDsNCisgIFN0YXR1cyA9 IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisNCisgIC8vIElmIHdlIGRpZG4ndCBtYW5hZ2UgdG8g ZmluZCBhbiBFRElEIGVhcmxpZXIsIGp1c3QgdXNlIG9uZSBvZiB0aGUgaGFyZC1jb2RlZCB2aWRl byBtb2Rlcw0KKyAgaWYgKChFRElEID09IE5VTEwpIHx8IChFZGlkU2l6ZSAhPSBFRElEX0JMT0NL X1NJWkUpKSB7DQorICAgIGlmIChJbmRleCA+PSBEbFZpZGVvTW9kZUdldE51bVN1cHBvcnRlZFZp ZGVvTW9kZXMgKCkpIHsNCisgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAg ICB9DQorICAgIGVsc2Ugew0KKyAgICAgICpWaWRlb01vZGUgPSBEbFZpZGVvTW9kZUdldFN1cHBv cnRlZFZpZGVvTW9kZSAoSW5kZXgpOw0KKyAgICAgIERFQlVHICgoREVCVUdfV0FSTiwgIk5vIG1v bml0b3IgRURJRCBsb2FkZWQgLSByZXR1cm5pbmcgbW9kZSBmcm9tIGRlZmF1bHQgbGlzdCAoJWR4 JWQpXG4iLCAoKlZpZGVvTW9kZSktPkhBY3RpdmUsICgqVmlkZW9Nb2RlKS0+VkFjdGl2ZSkpOw0K KyAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgVUlOVDE2IE1v ZGVOdW1iZXI7DQorICBmb3IgKE1vZGVOdW1iZXIgPSAwOyBNb2RlTnVtYmVyIDwgRGxWaWRlb01v ZGVHZXROdW1TdXBwb3J0ZWRWaWRlb01vZGVzICgpOyBNb2RlTnVtYmVyKyspIHsNCisNCisgICAg Q09OU1Qgc3RydWN0IFZpZGVvTW9kZSAqU3VwcG9ydGVkVmlkZW9Nb2RlID0gRGxWaWRlb01vZGVH ZXRTdXBwb3J0ZWRWaWRlb01vZGUgKE1vZGVOdW1iZXIpOw0KKyAgICBBU1NFUlQgKFN1cHBvcnRl ZFZpZGVvTW9kZSk7DQorDQorICAgIGlmIChJc01vZGVJbkVkaWQgKEVESUQsIFN1cHBvcnRlZFZp ZGVvTW9kZS0+SEFjdGl2ZSwgU3VwcG9ydGVkVmlkZW9Nb2RlLT5WQWN0aXZlLCBESVNQTEFZTElO S19GSVhFRF9WRVJUSUNBTF9SRUZSRVNIX1JBVEUpKSB7DQorICAgICAgaWYgKEluZGV4ID09IFN1 cHBvcnRlZFZpZGVvTW9kZXNGb3VuZEluRWRpZCkgew0KKyAgICAgICAgKlZpZGVvTW9kZSA9IFN1 cHBvcnRlZFZpZGVvTW9kZTsNCisgICAgICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KKyAgICAg ICAgYnJlYWs7DQorICAgICAgfQ0KKyAgICAgIFN1cHBvcnRlZFZpZGVvTW9kZXNGb3VuZEluRWRp ZCsrOw0KKyAgICB9DQorICB9DQorDQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAg IC8vIEhhdmUgYSBsb29rIGluIHRoZSBkZXRhaWxlZCB0aW1pbmdzDQorICAgIFVJTlROIERldGFp bGVkVGltaW5nTnVtYmVyOw0KKyAgICBTVEFUSUMgc3RydWN0IFZpZGVvTW9kZSBUbXBWaWRlb01v ZGU7DQorICAgIERldGFpbGVkVGltaW5nTnVtYmVyID0gSW5kZXggLSBTdXBwb3J0ZWRWaWRlb01v ZGVzRm91bmRJbkVkaWQ7DQorDQorICAgIGlmIChEZXRhaWxlZFRpbWluZ051bWJlciA8IEVESURf TlVNQkVSX09GX0RFVEFJTEVEX1RJTUlOR1MpIHsNCisgICAgICBpZiAoUmVhZERldGFpbGVkVGlt aW5nIChFRElELCAoVUlOVDgpRGV0YWlsZWRUaW1pbmdOdW1iZXIsICZUbXBWaWRlb01vZGUpKSB7 DQorICAgICAgICAqVmlkZW9Nb2RlID0gJlRtcFZpZGVvTW9kZTsNCisgICAgICAgIFN0YXR1cyA9 IEVGSV9TVUNDRVNTOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfQ0KKw0KKyAgcmV0dXJuIFN0YXR1 czsNCit9DQorDQorLyoqDQorICogTGlrZSBHZXRTdXBwb3J0ZWRFZGlkVmlkZW9Nb2RlLCBidXQg d2lsbCByZXR1cm4gYSBmYWxsYmFjayBmaXhlZCBtb2RlIG9mIDY0MHg0ODBANjBIeg0KKyAqIGZv ciBpbmRleCAwIGlmIG5vIHN1aXRhYmxlIG1vZGVzIGZvdW5kIGluIEVESUQuDQorICogQHBhcmFt IGluZGV4DQorICogQHBhcmFtIEVESUQNCisgKiBAcGFyYW0gZWRpZFNpemUNCisgKiBAcGFyYW0g dmlkZW9Nb2RlDQorICogQHJldHVybiBFRklfU1VDQ0VTUw0KKyAqLw0KK0VGSV9TVEFUVVMNCitE bEVkaWRHZXRTdXBwb3J0ZWRWaWRlb01vZGVXaXRoRmFsbGJhY2sgKA0KKyAgICBJTiBVSU5UMzIg SW5kZXgsDQorICAgIElOIENPTlNUIFZPSUQgKkVESUQsDQorICAgIElOIFVJTlQzMiBFZGlkU2l6 ZSwNCisgICAgT1VUIENPTlNUIHN0cnVjdCBWaWRlb01vZGUgKipWaWRlb01vZGUNCisgICAgKQ0K K3sNCisgIEVGSV9TVEFUVVMgU3RhdHVzOw0KKyAgU3RhdHVzID0gRGxFZGlkR2V0U3VwcG9ydGVk VmlkZW9Nb2RlIChJbmRleCwgRURJRCwgRWRpZFNpemUsIFZpZGVvTW9kZSk7DQorDQorICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIC8vIFNwZWNpYWwgY2FzZSAtIGlmIHdlIGRpZG4n dCBmaW5kIGFueSBtYXRjaGluZyB2aWRlbyBtb2RlcyBpbiB0aGUgRURJRCwgZmFsbCBiYWNrIHRv IDY0MHg0ODBANjBIeg0KKyAgICBpZiAoSW5kZXggPT0gMCkgew0KKyAgICAgICpWaWRlb01vZGUg PSBEbFZpZGVvTW9kZUdldFN1cHBvcnRlZFZpZGVvTW9kZSAoMCk7DQorICAgICAgREVCVUcgKChE RUJVR19XQVJOLCAiTm8gdmlkZW8gbW9kZXMgc3VwcG9ydGVkIGJ5IGRyaXZlciBmb3VuZCBpbiBt b25pdG9yIEVESUQgcmVjZWl2ZWQgZnJvbSBETCBkZXZpY2UgLSBmYWxsaW5nIGJhY2sgdG8gJWR4 JWRcbiIsICgqVmlkZW9Nb2RlKS0+SEFjdGl2ZSwgKCpWaWRlb01vZGUpLT5WQWN0aXZlKSk7DQor ICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQorICAgIH0NCisgIH0NCisNCisgIHJldHVybiBT dGF0dXM7DQorfQ0KKw0KKy8qKg0KK0NvdW50IHRoZSBudW1iZXIgb2YgdmlkZW8gbW9kZXMgdGhh dCB3ZSBoYXZlIHRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUg RURJRA0KK0BwYXJhbSAgRURJRCAgICAgICAgUG9pbnRlciB0byB0aGUgMTI4LWJ5dGUgRURJRA0K K0BwYXJhbSAgZWRpZFNpemUNCitAcmV0dmFsICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgbW9k ZXMgaW4gdGhlIEVESUQNCisNCisqKi8NCitVSU5UMzINCitEbEVkaWRHZXROdW1TdXBwb3J0ZWRN b2Rlc0luRWRpZCAoDQorICAgIElOIENPTlNUIFZPSUQgKkVESUQsDQorICAgIElOIFVJTlQzMiBF ZGlkU2l6ZQ0KKyAgICApDQorew0KKyAgVUlOVDMyIE1heE1vZGU7DQorDQorICBpZiAoKEVESUQg PT0gTlVMTCkgfHwgKEVkaWRTaXplICE9IEVESURfQkxPQ0tfU0laRSkpIHsNCisgICAgcmV0dXJu IERsVmlkZW9Nb2RlR2V0TnVtU3VwcG9ydGVkVmlkZW9Nb2RlcyAoKTsNCisgIH0NCisNCisgIGZv ciAoTWF4TW9kZSA9IDA7IDsgTWF4TW9kZSsrKSB7DQorICAgIENPTlNUIHN0cnVjdCBWaWRlb01v ZGUgKnZpZGVvTW9kZTsNCisgICAgaWYgKEVGSV9FUlJPUiAoRGxFZGlkR2V0U3VwcG9ydGVkVmlk ZW9Nb2RlIChNYXhNb2RlLCBFRElELCBFZGlkU2l6ZSwgJnZpZGVvTW9kZSkpKSB7DQorICAgICAg YnJlYWs7DQorICAgIH0NCisgIH0NCisgIERFQlVHICgoREVCVUdfSU5GTywgIkZvdW5kICVkIHZp ZGVvIG1vZGVzIHN1cHBvcnRlZCBieSBkcml2ZXIgaW4gbW9uaXRvciBFRElELlxuIiwgTWF4TW9k ZSkpOw0KKyAgcmV0dXJuIE1heE1vZGU7DQorfQ0KKw0KKw0KKw0KKy8qKg0KKyAqIFJlYWQgdGhl IEVESUQgZnJvbSB0aGUgY29ubmVjdGVkIG1vbml0b3IsIHN0b3JlIGl0IGluIHRoZSBsb2NhbCBk YXRhIHN0cnVjdHVyZQ0KKyAqIEBwYXJhbSBVc2JEaXNwbGF5TGlua0Rldg0KKyAqIEByZXR2YWwg RUZJX09VVF9PRl9SRVNPVVJDRVMgLSBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5DQorICogQHJl dHZhbCBFRklfU1VDQ0VTUw0KKyAqLw0KK0VGSV9TVEFUVVMNCitEbFJlYWRFZGlkICgNCisgICAg SU4gVVNCX0RJU1BMQVlMSU5LX0RFViogVXNiRGlzcGxheUxpbmtEZXYNCisgICAgKQ0KK3sNCisg IEVGSV9TVEFUVVMgU3RhdHVzOw0KKyAgQk9PTEVBTiBFZGlkRm91bmQ7DQorICBFRklfRURJRF9P VkVSUklERV9QUk9UT0NPTCogRWRpZE92ZXJyaWRlOw0KKw0KKyAgLy8NCisgIC8vIHNldHVwIEVE SUQgaW5mb3JtYXRpb24NCisgIC8vDQorICBVc2JEaXNwbGF5TGlua0Rldi0+RWRpZERpc2NvdmVy ZWQuRWRpZCA9IChVSU5UOCAqKU5VTEw7DQorICBVc2JEaXNwbGF5TGlua0Rldi0+RWRpZERpc2Nv dmVyZWQuU2l6ZU9mRWRpZCA9IDA7DQorDQorICBFZGlkRm91bmQgPSBGQUxTRTsNCisNCisgIC8v DQorICAvLyBGaW5kIEVESUQgT3ZlcnJpZGUgcHJvdG9jb2wgZmlyc3RseSwgdGhpcyBwcm90b2Nv bCBpcyBpbnN0YWxsZWQgYnkgcGxhdGZvcm0gaWYgbmVlZGVkLg0KKyAgLy8NCisgIFN0YXR1cyA9 IGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZpRWRpZE92ZXJyaWRlUHJvdG9jb2xHdWlkLCBOVUxM LCAoVk9JRCoqKSZFZGlkT3ZlcnJpZGUpOw0KKw0KKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykp IHsNCisgICAgVUlOVDMyIEVkaWRBdHRyaWJ1dGVzID0gMHhmZjsNCisgICAgVUlOVE4gRWRpZERh dGFTaXplID0gMDsNCisgICAgVUlOVDgqIEVkaWREYXRhQmxvY2sgPSAoVUlOVDgqKU5VTEw7DQor DQorICAgIC8vIEFsbG9jYXRlIGRvdWJsZSBzaXplIG9mIFZFU0FfQklPU19FWFRFTlNJT05TX0VE SURfQkxPQ0tfU0laRSB0byBhdm9pZCBvdmVyZmxvdw0KKyAgICBFZGlkRGF0YUJsb2NrID0gKFVJ TlQ4KilBbGxvY2F0ZVBvb2wgKEVESURfQkxPQ0tfU0laRSAqIDIpOw0KKw0KKyAgICBpZiAoTlVM TCA9PSBFZGlkRGF0YUJsb2NrKSB7DQorICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KKyAgICB9DQorDQorICAgIFN0YXR1cyA9IEVkaWRPdmVycmlkZS0+R2V0RWRpZCAoDQorICAg ICAgRWRpZE92ZXJyaWRlLA0KKyAgICAgICZVc2JEaXNwbGF5TGlua0Rldi0+SGFuZGxlLA0KKyAg ICAgICZFZGlkQXR0cmlidXRlcywNCisgICAgICAmRWRpZERhdGFTaXplLA0KKyAgICAgICZFZGlk RGF0YUJsb2NrKTsNCisNCisgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykgJiYgRWRpZEF0dHJp YnV0ZXMgPT0gMCAmJiBFZGlkRGF0YVNpemUgIT0gMCkgew0KKyAgICAgIFVzYkRpc3BsYXlMaW5r RGV2LT5FZGlkRGlzY292ZXJlZC5TaXplT2ZFZGlkID0gKFVJTlQzMilFZGlkRGF0YVNpemU7DQor ICAgICAgVXNiRGlzcGxheUxpbmtEZXYtPkVkaWREaXNjb3ZlcmVkLkVkaWQgPSBFZGlkRGF0YUJs b2NrOw0KKyAgICAgIEVkaWRGb3VuZCA9IFRSVUU7DQorICAgIH0NCisgICAgZWxzZSB7DQorICAg ICAgRnJlZVBvb2wgKEVkaWREYXRhQmxvY2spOw0KKyAgICAgIEVkaWREYXRhQmxvY2sgPSBOVUxM Ow0KKyAgICB9DQorICB9DQorDQorICBpZiAoRWRpZEZvdW5kICE9IFRSVUUpIHsNCisgICAgVUlO VE4gRWRpZERhdGFTaXplID0gMDsNCisgICAgVUlOVDgqIEVkaWREYXRhQmxvY2sgPSAoVUlOVDgq KU5VTEw7DQorDQorICAgIGlmIChSZWFkRWRpZERhdGEgKFVzYkRpc3BsYXlMaW5rRGV2LCAmRWRp ZERhdGFCbG9jaywgJkVkaWREYXRhU2l6ZSkgPT0gRUZJX1NVQ0NFU1MpIHsNCisNCisgICAgICBp ZiAoSXNFZGlkQ2hlY2tzdW1Db3JyZWN0IChFZGlkRGF0YUJsb2NrKSkgew0KKyAgICAgICAgVXNi RGlzcGxheUxpbmtEZXYtPkVkaWREaXNjb3ZlcmVkLlNpemVPZkVkaWQgPSAoVUlOVDMyKUVkaWRE YXRhU2l6ZTsNCisgICAgICAgIFVzYkRpc3BsYXlMaW5rRGV2LT5FZGlkRGlzY292ZXJlZC5FZGlk ID0gRWRpZERhdGFCbG9jazsNCisgICAgICAgIEVkaWRGb3VuZCA9IFRSVUU7DQorICAgICAgfSBl bHNlIHsNCisgICAgICAgIERFQlVHICgoREVCVUdfV0FSTiwgIk1vbml0b3IgRURJRCByZWNlaXZl ZCBmcm9tIERpc3BsYXlMaW5rIGRldmljZSBoYWQgYW4gaW52YWxpZCBjaGVja3N1bS4gQ29ycnVw dGVkP1xuIikpOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfQ0KKw0KKyAgaWYgKEVkaWRGb3VuZCA9 PSBGQUxTRSkgew0KKyAgICBERUJVRyAoKERFQlVHX1dBUk4sICJObyB2YWxpZCBtb25pdG9yIEVE SUQgcmVjZWl2ZWQgZnJvbSBEaXNwbGF5TGluayBkZXZpY2UuIENhbm5vdCBkZXRlY3QgcmVzb2x1 dGlvbnMgc3VwcG9ydGVkIGJ5IG1vbml0b3IuXG4iKSk7DQorICB9DQorDQorICAvLyBTZXQgdGhl IEVESUQgYWN0aXZlLg0KKyAgLy8gSW4gYW4gZXJyb3IgY2FzZSB0aGlzIHdpbGwgYmUgc2V0IDAv TlVMTCwgd2hpY2ggZmxhZ3MgdG8gdGhlIHBhcnNpbmcgY29kZSB0aGF0IHRoZXJlIGlzIG5vIEVE SUQuDQorICBVc2JEaXNwbGF5TGlua0Rldi0+RWRpZEFjdGl2ZS5TaXplT2ZFZGlkID0gVXNiRGlz cGxheUxpbmtEZXYtPkVkaWREaXNjb3ZlcmVkLlNpemVPZkVkaWQ7DQorICBVc2JEaXNwbGF5TGlu a0Rldi0+RWRpZEFjdGl2ZS5FZGlkID0gVXNiRGlzcGxheUxpbmtEZXYtPkVkaWREaXNjb3ZlcmVk LkVkaWQ7DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KZGlmZiAtLWdpdCBhL0RyaXZl cnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtHb3AvR29wLmMgYi9Ecml2 ZXJzL0Rpc3BsYXlMaW5rL0Rpc3BsYXlMaW5rUGtnL0Rpc3BsYXlMaW5rR29wL0dvcC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZGIxYjg5NTJhNDcwCi0tLSAvZGV2 L251bGwKKysrIGIvRHJpdmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5TGlu a0dvcC9Hb3AuYwpAQCAtMCwwICsxLDU4NyBAQAorLyoqDQorICogQGZpbGUgR29wLmMNCisgKiBA YnJpZWYgVUVGSSBHT1AgcHJvdG9jb2wgQVBJIGltcGxlbWVudGF0aW9uIGZvciBVU0IgRGlzcGxh eUxpbmsgZHJpdmVyLg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIERpc3BsYXlM aW5rIChVSykgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisgKg0KKyoqLw0KKw0KKyNpbmNsdWRl ICJVc2JEaXNwbGF5TGluay5oIg0KKyNpbmNsdWRlICJFZGlkLmgiDQorDQorDQorLyoqDQorICoN CisgKiBAcGFyYW0gVGhpcyAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIG9mIHRo ZSBHT1AgcHJvdG9jb2wNCisgKiBAcGFyYW0gQmx0T3BlcmF0aW9uDQorICogQHBhcmFtIFNvdXJj ZVgNCisgKiBAcGFyYW0gU291cmNlWQ0KKyAqIEBwYXJhbSBXaWR0aA0KKyAqIEBwYXJhbSBIZWln aHQNCisgKiBAcGFyYW0gRGVzdGluYXRpb25YDQorICogQHBhcmFtIERlc3RpbmF0aW9uWQ0KKyAq IEByZXR1cm4NCisgKi8NCitTVEFUSUMgRUZJX1NUQVRVUw0KK0NoZWNrQm91bmRzICgNCisgICAg SU4gRUZJX0dSQVBISUNTX09VVFBVVF9QUk9UT0NPTCogVGhpcywNCisgICAgSU4gRUZJX0dSQVBI SUNTX09VVFBVVF9CTFRfT1BFUkFUSU9OIEJsdE9wZXJhdGlvbiwNCisgICAgSU4gVUlOVE4gU291 cmNlWCwNCisgICAgSU4gVUlOVE4gU291cmNlWSwNCisgICAgSU4gVUlOVE4gV2lkdGgsDQorICAg IElOIFVJTlROIEhlaWdodCwNCisgICAgSU4gVUlOVE4gRGVzdGluYXRpb25YLA0KKyAgICBJTiBV SU5UTiBEZXN0aW5hdGlvblkNCisgICAgKQ0KK3sNCisgIFVTQl9ESVNQTEFZTElOS19ERVYgKlVz YkRpc3BsYXlMaW5rRGV2Ow0KKyAgRUZJX0dSQVBISUNTX09VVFBVVF9QUk9UT0NPTCogR29wOw0K Kw0KKyAgVXNiRGlzcGxheUxpbmtEZXYgPSBVU0JfRElTUExBWUxJTktfREVWX0ZST01fR1JBUEhJ Q1NfT1VUUFVUX1BST1RPQ09MKFRoaXMpOw0KKyAgR29wID0gJlVzYkRpc3BsYXlMaW5rRGV2LT5H cmFwaGljc091dHB1dFByb3RvY29sOw0KKw0KKyAgQ09OU1QgRUZJX0dSQVBISUNTX09VVFBVVF9N T0RFX0lORk9STUFUSU9OKiBTY3JlZW5Nb2RlID0gR29wLT5Nb2RlLT5JbmZvOw0KKw0KKyAgaWYg KEJsdE9wZXJhdGlvbiA9PSBFZmlCbHRWaWRlb1RvQmx0QnVmZmVyIHx8IEJsdE9wZXJhdGlvbiA9 PSBFZmlCbHRWaWRlb1RvVmlkZW8pIHsNCisgICAgaWYgKFNvdXJjZVkgKyBIZWlnaHQgPiBTY3Jl ZW5Nb2RlLT5WZXJ0aWNhbFJlc29sdXRpb24pIHsNCisgICAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KKyAgICB9DQorDQorICAgIGlmIChTb3VyY2VYICsgV2lkdGggPiBTY3JlZW5N b2RlLT5Ib3Jpem9udGFsUmVzb2x1dGlvbikgew0KKyAgICAgIHJldHVybiBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQorICAgIH0NCisgIH0NCisNCisgIGlmIChCbHRPcGVyYXRpb24gPT0gRWZpQmx0 QnVmZmVyVG9WaWRlbw0KKyAgICB8fCBCbHRPcGVyYXRpb24gPT0gRWZpQmx0VmlkZW9Ub1ZpZGVv DQorICAgIHx8IEJsdE9wZXJhdGlvbiA9PSBFZmlCbHRWaWRlb0ZpbGwpIHsNCisgICAgaWYgKERl c3RpbmF0aW9uWSArIEhlaWdodCA+IFNjcmVlbk1vZGUtPlZlcnRpY2FsUmVzb2x1dGlvbikgew0K KyAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICAgIH0NCisNCisgICAgaWYg KERlc3RpbmF0aW9uWCArIFdpZHRoID4gU2NyZWVuTW9kZS0+SG9yaXpvbnRhbFJlc29sdXRpb24p IHsNCisgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgICB9DQorICB9DQor I2lmIDANCisgIC8vIENoZWNrIGlmIHRoZSBidWZmZXIgYXJlYXMgb3ZlcmxhcCB3aGVuIGNvcHlp bmcgdG8gYW5kIGZyb20gdGhlIHNhbWUgYnVmZmVyDQorICBpZiAoQmx0T3BlcmF0aW9uID09IEVm aUJsdFZpZGVvVG9WaWRlbykgew0KKyAgICBpZiAoKFNvdXJjZVggPCBEZXN0aW5hdGlvblggKyBX aWR0aCkgJiYNCisgICAgICAoU291cmNlWCArIFdpZHRoID4gRGVzdGluYXRpb25YKSAmJg0KKyAg ICAgIChTb3VyY2VZIDwgRGVzdGluYXRpb25ZICsgSGVpZ2h0KSAmJg0KKyAgICAgIChTb3VyY2VZ ICsgSGVpZ2h0ID4gRGVzdGluYXRpb25ZKSkgew0KKyAgICAgIHJldHVybiBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQorICAgIH0NCisgIH0NCisjZW5kaWYNCisgIHJldHVybiBFRklfU1VDQ0VTUzsN Cit9DQorDQorLyoqDQorICogVXBkYXRlIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBGcmFtZSBCdWZm ZXIuIFRoaXMgbG9jYWwgY29weSBpcyBwZXJpb2RpY2FsbHkgdHJhbnNtaXR0ZWQgdG8gdGhlDQor ICogRGlzcGxheUxpbmsgZGV2aWNlICh2aWEgRGxHb3BTZW5kU2NyZWVuVXBkYXRlKQ0KKyAqIEBw YXJhbSBVc2JEaXNwbGF5TGlua0Rldg0KKyAqIEBwYXJhbSBCbHRCdWZmZXINCisgKiBAcGFyYW0g Qmx0T3BlcmF0aW9uDQorICogQHBhcmFtIFNvdXJjZVgNCisgKiBAcGFyYW0gU291cmNlWQ0KKyAq IEBwYXJhbSBEZXN0aW5hdGlvblgNCisgKiBAcGFyYW0gRGVzdGluYXRpb25ZDQorICogQHBhcmFt IFdpZHRoDQorICogQHBhcmFtIEhlaWdodA0KKyAqIEBwYXJhbSBCbHRCdWZmZXJTdHJpZGUNCisg KiBAcGFyYW0gUGl4ZWxzUGVyU2NhbkxpbmUNCisgKi8NCitTVEFUSUMgVk9JRA0KK0J1aWxkQmFj a0J1ZmZlciAoDQorICBJTiAgVVNCX0RJU1BMQVlMSU5LX0RFViAgICAgICAgICAgICAgICAgICAg ICpVc2JEaXNwbGF5TGlua0RldiwNCisgIElOICBFRklfR1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhF TCAgICAgICAgICAgKkJsdEJ1ZmZlciwgT1BUSU9OQUwNCisgIElOICBFRklfR1JBUEhJQ1NfT1VU UFVUX0JMVF9PUEVSQVRJT04gICAgICAgQmx0T3BlcmF0aW9uLA0KKyAgSU4gIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VYLA0KKyAgSU4gIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VZLA0KKyAgSU4gIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvblgsDQorICBJTiAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uWSwNCisgIElOICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkdGgsDQorICBJTiAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlaWdodCwNCisgIElOICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmx0QnVmZmVyU3RyaWRlLA0KKyAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbHNQZXJTY2Fu TGluZQ0KKykNCit7DQorICBVSU5UTiBIOw0KKyAgVUlOVE4gVzsNCisgIHN3aXRjaCAoQmx0T3Bl cmF0aW9uKSB7DQorICBjYXNlIEVmaUJsdFZpZGVvVG9CbHRCdWZmZXI6DQorICB7DQorICAgIEVG SV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMKiBCbHQ7DQorICAgIEVGSV9HUkFQSElDU19PVVRQ VVRfQkxUX1BJWEVMKiBTcmNCOw0KKyAgICBCbHQgPSAoRUZJX0dSQVBISUNTX09VVFBVVF9CTFRf UElYRUwqKSgoVUlOVDggKilCbHRCdWZmZXIgKyAoRGVzdGluYXRpb25ZICogQmx0QnVmZmVyU3Ry aWRlKSArIERlc3RpbmF0aW9uWCAqIHNpemVvZiAoRUZJX0dSQVBISUNTX09VVFBVVF9CTFRfUElY RUwpKTsNCisgICAgU3JjQiA9IFVzYkRpc3BsYXlMaW5rRGV2LT5TY3JlZW4gKyBTb3VyY2VZICog UGl4ZWxzUGVyU2NhbkxpbmUgKyBTb3VyY2VYOw0KKw0KKyAgICBmb3IgKEggPSAwOyBIIDwgSGVp Z2h0OyBIKyspIHsNCisgICAgICBmb3IgKFcgPSAwOyBXIDwgV2lkdGg7IFcrKykgew0KKyAgICAg ICAgQmx0W1ddID0gKlNyY0IrKzsNCisgICAgICB9DQorICAgICAgQmx0ID0gKEVGSV9HUkFQSElD U19PVVRQVVRfQkxUX1BJWEVMKikoKChVSU5UOCopQmx0KSArIEJsdEJ1ZmZlclN0cmlkZSk7DQor ICAgICAgU3JjQiArPSBQaXhlbHNQZXJTY2FuTGluZSAtIFdpZHRoOw0KKyAgICB9DQorICB9DQor ICBicmVhazsNCisNCisgIGNhc2UgRWZpQmx0QnVmZmVyVG9WaWRlbzoNCisgIHsNCisgICAgLy8g VXBkYXRlIHRoZSBzdG9yZSBvZiB0aGUgYXJlYSBvZiB0aGUgc2NyZWVuIHRoYXQgaXMgImRpcnR5 IiAtIHRoYXQgd2UgbmVlZCB0byBzZW5kIGluIHRoZSBuZXh0IHNjcmVlbiB1cGRhdGUuDQorICAg IGlmIChEZXN0aW5hdGlvblkgPCBVc2JEaXNwbGF5TGlua0Rldi0+TGFzdFkxKSB7DQorICAgICAg VXNiRGlzcGxheUxpbmtEZXYtPkxhc3RZMSA9IERlc3RpbmF0aW9uWTsNCisgICAgfQ0KKyAgICBp ZiAoKERlc3RpbmF0aW9uWSArIEhlaWdodCkgPiBVc2JEaXNwbGF5TGlua0Rldi0+TGFzdFkyKSB7 DQorICAgICAgVXNiRGlzcGxheUxpbmtEZXYtPkxhc3RZMiA9IERlc3RpbmF0aW9uWSArIEhlaWdo dDsNCisgICAgfQ0KKw0KKyAgICBFRklfR1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCogQmx0Ow0K KyAgICBFRklfR1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCogRHN0QjsNCisgICAgQmx0ID0gKEVG SV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMICopKCgoVUlOVDggKilCbHRCdWZmZXIpICsgKFNv dXJjZVkgKiBCbHRCdWZmZXJTdHJpZGUpICsgU291cmNlWCAqIHNpemVvZiAqQmx0KTsNCisgICAg RHN0QiA9IFVzYkRpc3BsYXlMaW5rRGV2LT5TY3JlZW4gKyBEZXN0aW5hdGlvblkgKiBQaXhlbHNQ ZXJTY2FuTGluZSArIERlc3RpbmF0aW9uWDsNCisNCisgICAgZm9yIChIID0gMDsgSCA8IEhlaWdo dDsgSCsrKSB7DQorICAgICAgZm9yIChXID0gMDsgVyA8IFdpZHRoOyBXKyspIHsNCisgICAgICAg ICpEc3RCKysgPSBCbHRbV107DQorICAgICAgfQ0KKyAgICAgIEJsdCA9IChFRklfR1JBUEhJQ1Nf T1VUUFVUX0JMVF9QSVhFTCopKCgoVUlOVDgqKUJsdCkgKyBCbHRCdWZmZXJTdHJpZGUpOw0KKyAg ICAgIERzdEIgKz0gUGl4ZWxzUGVyU2NhbkxpbmUgLSBXaWR0aDsNCisgICAgfQ0KKyAgfQ0KKyAg YnJlYWs7DQorDQorICBjYXNlIEVmaUJsdFZpZGVvVG9WaWRlbzoNCisgIHsNCisgICAgRUZJX0dS QVBISUNTX09VVFBVVF9CTFRfUElYRUwqIFNyY0I7DQorICAgIEVGSV9HUkFQSElDU19PVVRQVVRf QkxUX1BJWEVMKiBEc3RCOw0KKyAgICBTcmNCID0gVXNiRGlzcGxheUxpbmtEZXYtPlNjcmVlbiAr IFNvdXJjZVkgKiBQaXhlbHNQZXJTY2FuTGluZSArIFNvdXJjZVg7DQorICAgIERzdEIgPSBVc2JE aXNwbGF5TGlua0Rldi0+U2NyZWVuICsgRGVzdGluYXRpb25ZICogUGl4ZWxzUGVyU2NhbkxpbmUg KyBEZXN0aW5hdGlvblg7DQorDQorICAgIGZvciAoSCA9IDA7IEggPCBIZWlnaHQ7IEgrKykgew0K KyAgICAgIGZvciAoVyA9IDA7IFcgPCBXaWR0aDsgVysrKSB7DQorICAgICAgICAqRHN0QisrID0g KlNyY0IrKzsNCisgICAgICB9DQorICAgICAgU3JjQiArPSBQaXhlbHNQZXJTY2FuTGluZSAtIFdp ZHRoOw0KKyAgICAgIERzdEIgKz0gUGl4ZWxzUGVyU2NhbkxpbmUgLSBXaWR0aDsNCisgICAgfQ0K KyAgfQ0KKyAgYnJlYWs7DQorDQorICBjYXNlIEVmaUJsdFZpZGVvRmlsbDoNCisgIHsNCisgICAg RUZJX0dSQVBISUNTX09VVFBVVF9CTFRfUElYRUwqIERzdEI7DQorICAgIERzdEIgPSBVc2JEaXNw bGF5TGlua0Rldi0+U2NyZWVuICsgRGVzdGluYXRpb25ZICogUGl4ZWxzUGVyU2NhbkxpbmUgKyBE ZXN0aW5hdGlvblg7DQorICAgIGZvciAoSCA9IDA7IEggPCBIZWlnaHQ7IEgrKykgew0KKyAgICAg IGZvciAoVyA9IDA7IFcgPCBXaWR0aDsgVysrKSB7DQorICAgICAgICAqRHN0QisrID0gKkJsdEJ1 ZmZlcjsNCisgICAgICB9DQorICAgICAgRHN0QiArPSBQaXhlbHNQZXJTY2FuTGluZSAtIFdpZHRo Ow0KKyAgICB9DQorICB9DQorICBicmVhazsNCisgIGRlZmF1bHQ6IGJyZWFrOw0KKyAgfQ0KK30N CisNCisvKioNCisgKiBEaXNwbGF5IGEgY29sb3VyIGJhciBwYXR0ZXJuIG9uIHRoZSBEaXNwbGF5 TGluayBkZXZpY2UuDQorICogQHBhcmFtIFVzYkRpc3BsYXlMaW5rRGV2DQorICogQHBhcmFtIFBh dHRlcm5OdW1iZXINCisgKiBAcmV0dXJuDQorICovDQorRUZJX1NUQVRVUw0KK0RsR29wU2VuZFRl c3RQYXR0ZXJuICgNCisgICAgSU4gVVNCX0RJU1BMQVlMSU5LX0RFViogVXNiRGlzcGxheUxpbmtE ZXYsDQorICAgIElOIFVJTlROIFBhdHRlcm5OdW1iZXIpDQorew0KKyAgRUZJX1NUQVRVUyBTdGF0 dXM7DQorICBVSU5UTiBEYXRhTGVuOw0KKyAgVUlOVDggKkRzdEJ1ZjsNCisgIFVJTlQzMiBVU0JT dGF0dXM7DQorDQorICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCisgIERhdGFMZW4gPSBVc2JEaXNw bGF5TGlua0Rldi0+R3JhcGhpY3NPdXRwdXRQcm90b2NvbC5Nb2RlLT5JbmZvLT5Ib3Jpem9udGFs UmVzb2x1dGlvbiAqIDM7IC8vIFNlbmQgMSBsaW5lIEAgMjQgYml0cyBwZXIgcGl4ZWwNCisgIERz dEJ1ZiA9IEFsbG9jYXRlWmVyb1Bvb2wgKERhdGFMZW4pOw0KKw0KKyAgaWYgKERzdEJ1ZiA9PSBO VUxMKSB7DQorICAgIERFQlVHICgoREVCVUdfRVJST1IsICJTZW5kVGVzdFBhdHRlcm4gRmFpbGVk IHRvIGFsbG9jYXRlIG1lbW9yeVxuIikpOw0KKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQorICB9DQorDQorICAvL0RFQlVHICgoREVCVUdfRVJST1IsICJDYWxsZWQgRGxHb3BTZW5k VGVzdFBhdHRlcm4gJWRcbiIsIFBhdHRlcm5OdW1iZXIpKTsNCisNCisgIENPTlNUIFVJTlQ4IFJl ZFBpeGVsWzNdID0geyAweEZGLCAweDAwLCAweDAwIH07DQorICBDT05TVCBVSU5UOCBHcmVlblBp eGVsWzNdID0geyAweDAwLCAweEZGLCAweDAwIH07DQorICBDT05TVCBVSU5UOCBCbHVlUGl4ZWxb M10gPSB7IDB4MDAsIDB4MDAsIDB4RkYgfTsNCisgIENPTlNUIFVJTlQ4IFllbGxvd1BpeGVsWzNd ID0geyAweEZGLCAweEZGLCAweDAwIH07DQorICBDT05TVCBVSU5UOCBNYWdlbnRhUGl4ZWxbM10g PSB7IDB4RkYsIDB4MDAsIDB4RkYgfTsNCisgIENPTlNUIFVJTlQ4IEN5YW5QaXhlbFszXSA9IHsg MHgwMCwgMHhGRiwgMHhGRiB9Ow0KKw0KKyAgVUlOVE4gUm93Ow0KKyAgVUlOVE4gQ29sdW1uOw0K KyAgZm9yIChSb3cgPSAwOyBSb3cgPCBVc2JEaXNwbGF5TGlua0Rldi0+R3JhcGhpY3NPdXRwdXRQ cm90b2NvbC5Nb2RlLT5JbmZvLT5WZXJ0aWNhbFJlc29sdXRpb247IFJvdysrKSB7DQorICAgIGZv ciAoQ29sdW1uID0gMDsgQ29sdW1uIDwgVXNiRGlzcGxheUxpbmtEZXYtPkdyYXBoaWNzT3V0cHV0 UHJvdG9jb2wuTW9kZS0+SW5mby0+SG9yaXpvbnRhbFJlc29sdXRpb247IENvbHVtbisrKSB7DQor DQorICAgICAgaWYgKDAgPT0gUGF0dGVybk51bWJlcikgew0KKyAgICAgICAgaWYgKFJvdyA8IFVz YkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1dFByb3RvY29sLk1vZGUtPkluZm8tPlZlcnRp Y2FsUmVzb2x1dGlvbiAvIDMpIHsNCisgICAgICAgICAgQ29weU1lbSAoJkRzdEJ1ZltDb2x1bW4g KiAzXSwgUmVkUGl4ZWwsIHNpemVvZiAoUmVkUGl4ZWwpKTsNCisgICAgICAgIH0NCisgICAgICAg IGVsc2UgaWYgKFJvdyA8IChVc2JEaXNwbGF5TGlua0Rldi0+R3JhcGhpY3NPdXRwdXRQcm90b2Nv bC5Nb2RlLT5JbmZvLT5WZXJ0aWNhbFJlc29sdXRpb24gKiAyKSAvIDMpDQorICAgICAgICB7DQor ICAgICAgICAgIENvcHlNZW0gKCZEc3RCdWZbQ29sdW1uICogM10sIEdyZWVuUGl4ZWwsIHNpemVv ZiAoR3JlZW5QaXhlbCkpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSB7DQorICAgICAgICAg IENvcHlNZW0gKCZEc3RCdWZbQ29sdW1uICogM10sIEJsdWVQaXhlbCwgc2l6ZW9mIChCbHVlUGl4 ZWwpKTsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgICAgZWxzZSB7DQorICAgICAgICBpZiAo Q29sdW1uIDwgVXNiRGlzcGxheUxpbmtEZXYtPkdyYXBoaWNzT3V0cHV0UHJvdG9jb2wuTW9kZS0+ SW5mby0+SG9yaXpvbnRhbFJlc29sdXRpb24gLyAzKSB7DQorICAgICAgICAgIENvcHlNZW0gKCZE c3RCdWZbQ29sdW1uICogM10sIFllbGxvd1BpeGVsLCBzaXplb2YgKFJlZFBpeGVsKSk7DQorICAg ICAgICB9DQorICAgICAgICBlbHNlIGlmIChDb2x1bW4gPCAoVXNiRGlzcGxheUxpbmtEZXYtPkdy YXBoaWNzT3V0cHV0UHJvdG9jb2wuTW9kZS0+SW5mby0+SG9yaXpvbnRhbFJlc29sdXRpb24gKiAy KSAvIDMpDQorICAgICAgICB7DQorICAgICAgICAgIENvcHlNZW0gKCZEc3RCdWZbQ29sdW1uICog M10sIE1hZ2VudGFQaXhlbCwgc2l6ZW9mIChHcmVlblBpeGVsKSk7DQorICAgICAgICB9DQorICAg ICAgICBlbHNlIHsNCisgICAgICAgICAgQ29weU1lbSAoJkRzdEJ1ZltDb2x1bW4gKiAzXSwgQ3lh blBpeGVsLCBzaXplb2YgKEJsdWVQaXhlbCkpOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAg fQ0KKyAgICBEbFVzYkJ1bGtXcml0ZSAoVXNiRGlzcGxheUxpbmtEZXYsIERzdEJ1ZiwgRGF0YUxl biwgJlVTQlN0YXR1cyk7DQorICB9DQorICAvLyBQYXlsb2FkIHdpdGggbGVuZ3RoIG9mIDEgdG8g dGVybWluYXRlIHRoZSBmcmFtZQ0KKyAgRGxVc2JCdWxrV3JpdGUgKFVzYkRpc3BsYXlMaW5rRGV2 LCBEc3RCdWYsIDEsICZVU0JTdGF0dXMpOw0KKyAgRnJlZVBvb2wgKERzdEJ1Zik7DQorDQorICBy ZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCisvKioNCisgKiBUcmFuc2ZlciB0aGUgbGF0ZXN0IGNv cHkgb2YgdGhlIEJsdCBidWZmZXIgb3ZlciBVU0IgdG8gdGhlIERpc3BsYXlMaW5rIGRldmljZQ0K KyAqIEBwYXJhbSBVc2JEaXNwbGF5TGlua0Rldg0KKyAqIEByZXR1cm4NCisgKi8NCitFRklfU1RB VFVTDQorRGxHb3BTZW5kU2NyZWVuVXBkYXRlICgNCisgICAgSU4gVVNCX0RJU1BMQVlMSU5LX0RF ViogVXNiRGlzcGxheUxpbmtEZXYNCisgICAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgU3RhdHVzOw0K KyAgVUlOVDMyIFVTQlN0YXR1czsNCisgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KKw0KKyAgLy8g SWYgaXQgaGFzIGJlZW4gYSB3aGlsZSBzaW5jZSB3ZSBzZW50IGFuIHVwZGF0ZSwgc2VuZCBhIGZ1 bGwgc2NyZWVuLg0KKyAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gdXBkYXRlIGEgaG90LXBsdWdnZWQg bW9uaXRvciBxdWlja2x5Lg0KKyAgaWYgKFVzYkRpc3BsYXlMaW5rRGV2LT5UaW1lU2luY2VMYXN0 U2NyZWVuVXBkYXRlID4gRElTUExBWUxJTktfRlVMTF9TQ1JFRU5fVVBEQVRFX1BFUklPRCkgew0K KyAgICBVc2JEaXNwbGF5TGlua0Rldi0+TGFzdFkxID0gMDsNCisgICAgVXNiRGlzcGxheUxpbmtE ZXYtPkxhc3RZMiA9IFVzYkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1dFByb3RvY29sLk1v ZGUtPkluZm8tPkhvcml6b250YWxSZXNvbHV0aW9uIC0gMTsNCisgIH0NCisNCisgIC8vIElmIHRo ZXJlIGhhcyBiZWVuIG5vIEJMVCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUvcG9sbCwgZHJvcCBvdXQg cXVpZXRseS4NCisgIGlmIChVc2JEaXNwbGF5TGlua0Rldi0+TGFzdFkyIDwgVXNiRGlzcGxheUxp bmtEZXYtPkxhc3RZMSkgew0KKyAgICBVc2JEaXNwbGF5TGlua0Rldi0+VGltZVNpbmNlTGFzdFNj cmVlblVwZGF0ZSArPSAoRElTUExBWUxJTktfU0NSRUVOX1VQREFURV9USU1FUl9QRVJJT0QgLyAx MDAwKTsgIC8vIENvbnZlcnQgdXMgdG8gbXMNCisgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyAg fQ0KKw0KKyAgVXNiRGlzcGxheUxpbmtEZXYtPlRpbWVTaW5jZUxhc3RTY3JlZW5VcGRhdGUgPSAw Ow0KKw0KKyAgRUZJX1RQTCBPcmlnaW5hbFRQTCA9IGdCUy0+UmFpc2VUUEwgKFRQTF9OT1RJRlkp Ow0KKw0KKyAgVUlOVE4gRGF0YUxlbjsNCisgIFVJTlROIFdpZHRoOw0KKyAgVUlOVE4gSGVpZ2h0 Ow0KKyAgRUZJX0dSQVBISUNTX09VVFBVVF9CTFRfUElYRUwqIFNyY1B0cjsNCisgIFVJTlQ4KiBE c3RQdHI7DQorICBVSU5UOCBEc3RCdWZmZXJbMTkyMCAqIDNdOyAvLyBUT0RPIC0gR2V0IHJpZCBv ZiB0aGUgbWFnaWMgbnVtYmVycw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQUxT TyBUT0RPIC0gVXNlIGEgYnVmZmVyIGFsbG9jYXRlZCBhdCBydW50aW1lIHRvIHN0b3JlIHRoZSBs aW5lLCBzdG9yZWQgaW4gdGhlIFVTQl9ESVNQTEFZTElOS19ERVYgc3RydWN0dXJlLg0KKyAgVUlO VE4gSDsNCisNCisgIERhdGFMZW4gPSBVc2JEaXNwbGF5TGlua0Rldi0+R3JhcGhpY3NPdXRwdXRQ cm90b2NvbC5Nb2RlLT5JbmZvLT5Ib3Jpem9udGFsUmVzb2x1dGlvbiAqIDM7IC8vIFNlbmQgMSBs aW5lIEAgMjQgYml0cyBwZXIgcGl4ZWwgLSBUT0RPIC0gR2V0IHJpZCBvZiB0aGUgbWFnaWMgbnVt YmVyDQorICBXaWR0aCA9IFVzYkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1dFByb3RvY29s Lk1vZGUtPkluZm8tPkhvcml6b250YWxSZXNvbHV0aW9uOw0KKyAgSGVpZ2h0ID0gVXNiRGlzcGxh eUxpbmtEZXYtPkdyYXBoaWNzT3V0cHV0UHJvdG9jb2wuTW9kZS0+SW5mby0+VmVydGljYWxSZXNv bHV0aW9uOw0KKyAgU3JjUHRyID0gVXNiRGlzcGxheUxpbmtEZXYtPlNjcmVlbjsNCisgIERzdFB0 ciA9IERzdEJ1ZmZlcjsNCisNCisgIGZvciAoSCA9IDA7IEggPCBIZWlnaHQ7IEgrKykgew0KKyAg ICBEc3RQdHIgPSBEc3RCdWZmZXI7DQorDQorICAgIFVJTlROIFc7DQorICAgIGZvciAoVyA9IDA7 IFcgPCBXaWR0aDsgVysrKSB7DQorICAgICAgLy8gTmVlZCB0byBzd2FwIHJvdW5kIHRoZSBSR0Ig dmFsdWVzDQorICAgICAgRHN0UHRyWzBdID0gKChVSU5UOCAqKVNyY1B0cilbMl07DQorICAgICAg RHN0UHRyWzFdID0gKChVSU5UOCAqKVNyY1B0cilbMV07DQorICAgICAgRHN0UHRyWzJdID0gKChV SU5UOCAqKVNyY1B0cilbMF07DQorICAgICAgU3JjUHRyKys7DQorICAgICAgRHN0UHRyICs9IDM7 DQorICAgIH0NCisNCisgICAgU3RhdHVzID0gRGxVc2JCdWxrV3JpdGUgKFVzYkRpc3BsYXlMaW5r RGV2LCBEc3RCdWZmZXIsIERhdGFMZW4sICZVU0JTdGF0dXMpOw0KKw0KKyAgICAvLyBVU0JTdGF0 dXMgdmFsdWVzIGRlZmluZWQgaW4gdXNiaW8uaCwgZS5nLiBFRklfVVNCX0VSUl9USU1FT1VUIDB4 NDANCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIERFQlVHICgoREVCVUdf RVJST1IsICJTY3JlZW4gdXBkYXRlIC0gVVNCIGJ1bGsgdHJhbnNmZXIgb2YgcGl4ZWwgZGF0YSBm YWlsZWQuIExpbmUgJWQgbGVuICVkLCBmYWlsdXJlIGNvZGUgJXIgVVNCIHN0YXR1cyB4JXhcbiIs IEgsIERhdGFMZW4sIFN0YXR1cywgVVNCU3RhdHVzKSk7DQorICAgICAgYnJlYWs7DQorICAgIH0N CisgICAgLy8gTmVlZCBhbiBleHRyYSBEbFVzYkJ1bGtXcml0ZSBpZiB0aGUgZGF0YSBsZW5ndGgg aXMgZGl2aXNpYmxlIGJ5IFVTQiBNYXhQYWNrZXRTaXplLiBUaGlzIHNwYXJlIGRhdGEgd2lsbCBq dXN0IGdldCB3cml0dGVuIGludG8gdGhlIChpbnZpc2libGUpIHN0cmlkZSBhcmVhLg0KKyAgICAv LyBOb3RlIHRoYXQgdGhlIEFQSSBkb2Vzbid0IGxldCB1cyBkbyBhIGJ1bGsgd3JpdGUgb2YgMC4N CisgICAgaWYgKChEYXRhTGVuICYgKFVzYkRpc3BsYXlMaW5rRGV2LT5CdWxrT3V0RW5kcG9pbnRE ZXNjcmlwdG9yLk1heFBhY2tldFNpemUgLSAxKSkgPT0gMCkgew0KKyAgICAgIFN0YXR1cyA9IERs VXNiQnVsa1dyaXRlIChVc2JEaXNwbGF5TGlua0RldiwgRHN0QnVmZmVyLCAyLCAmVVNCU3RhdHVz KTsNCisgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiU2NyZWVuIHVwZGF0ZSAtIFVTQiBidWxrIHRyYW5zZmVyIG9mIHBpeGVsIGRh dGEgZmFpbGVkLiBMaW5lICVkIGxlbiAlZCwgZmFpbHVyZSBjb2RlICVyIFVTQiBzdGF0dXMgeCV4 XG4iLCBILCBEYXRhTGVuLCBTdGF0dXMsIFVTQlN0YXR1cykpOw0KKyAgICAgICAgYnJlYWs7DQor ICAgICAgfQ0KKyAgICB9DQorICB9DQorDQorICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0K KyAgICAvLyBJZiB3ZSd2ZSBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQgdGhlIGZyYW1lLCByZXNl dCB0aGUgdmFsdWVzIHRoYXQgc3RvcmUgd2hpY2ggYXJlYSBvZiB0aGUgc2NyZWVuIGhhcyBiZWVu IEJMVHRlZCB0by4NCisgICAgLy8gSWYgd2UgaGF2ZW4ndCBzdWNjZWVkZWQsIHRoaXMgd2lsbCBt ZWFuIHdlJ2xsIHRyeSB0byByZXNlbmQgaXQgYWZ0ZXIgdGhlIG5leHQgcG9sbCBwZXJpb2QuDQor ICAgIFVzYkRpc3BsYXlMaW5rRGV2LT5MYXN0WTIgPSAwOw0KKyAgICBVc2JEaXNwbGF5TGlua0Rl di0+TGFzdFkxID0gKFVJTlROKS0xOw0KKyAgfQ0KKw0KKyAgLy8gUGF5bG9hZCB3aXRoIGxlbmd0 aCBvZiAxIHRvIHRlcm1pbmF0ZSB0aGUgZnJhbWUNCisgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyBl dmVuIGlmIHdlIGhhZCBhbiBlcnJvciwgdG8gaW5kaWNhdGUgdG8gdGhlIERMIGRldmljZSB0aGF0 IGl0IHNob3VsZCBub3cgZXhwZWN0IGEgbmV3IGZyYW1lLg0KKyAgRGxVc2JCdWxrV3JpdGUgKFVz YkRpc3BsYXlMaW5rRGV2LCBEc3RCdWZmZXIsIDEsICZVU0JTdGF0dXMpOw0KKw0KKyAgZ0JTLT5S ZXN0b3JlVFBMIChPcmlnaW5hbFRQTCk7DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisv KioNCisgKiBDYWxjdWxhdGUgdGhlIHZpZGVvIHJlZnJlc2ggcmF0ZSBmcm9tIHRoZSB2aWRlbyB0 aW1pbmcgcGFyYW1ldGVycyAocGl4ZWwgY2xvY2sgZXRjKQ0KKyAqIEBwYXJhbSB2aWRlb01vZGUN CisgKiBAcmV0dXJuDQorICovDQorU1RBVElDIGlubGluZSBVSU5UMTYNCitDYWxjdWxhdGVSZWZy ZXNoUmF0ZSAoDQorICAgIElOIENPTlNUIHN0cnVjdCBWaWRlb01vZGUgKlZpZGVvTW9kZSkNCit7 DQorICBVSU5UMTYgUmVmcmVzaFJhdGU7DQorICBVSU5UMTYgUm1vZDsNCisgIFVJTlQxNiBSYXRl MTBIejsNCisNCisgIFJlZnJlc2hSYXRlID0gKFZpZGVvTW9kZS0+UGl4ZWxDbG9jayAqIDEwMDAw KSAvICgoVmlkZW9Nb2RlLT5IQWN0aXZlICsgVmlkZW9Nb2RlLT5IQmxhbmtpbmcpICogKFZpZGVv TW9kZS0+VkFjdGl2ZSArIFZpZGVvTW9kZS0+VkJsYW5raW5nKSk7DQorICBSbW9kID0gUmVmcmVz aFJhdGUgJSAxMDsNCisgIFJhdGUxMEh6ID0gUmVmcmVzaFJhdGUgLSBSbW9kOw0KKw0KKyAgaWYg KFJtb2QgPj0gNSkgew0KKyAgICBSYXRlMTBIeiArPSAxMDsNCisgIH0NCisgIHJldHVybiBSYXRl MTBIejsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8NCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLw0KKy8qICoqKioqKioqKioqKioqKioqKiAgICAgICAgU1RBUlQgT0YgRlVOQ1RJT05TIFdI SUNIIElNUExFTUVOVCBHT1AgSU5URVJGQUNFICAgICAgICAgKioqKioqKioqKioqKioqKioqICov DQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKw0KKw0K Ky8qKg0KKyAqDQorICogQHBhcmFtIEdvcCAgICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnN0YW5j ZSBvZiB0aGUgR09QIHByb3RvY29sDQorICogQHBhcmFtIE1vZGVOdW1iZXINCisgKiBAcGFyYW0g U2l6ZU9mSW5mbw0KKyAqIEBwYXJhbSBJbmZvDQorICogQHJldHVybg0KKyAqLw0KK0VGSV9TVEFU VVMNCitFRklBUEkNCitEaXNwbGF5TGlua1F1ZXJ5TW9kZSAoDQorICBJTiAgRUZJX0dSQVBISUNT X09VVFBVVF9QUk9UT0NPTCAgICAgICAgICAqR29wLA0KKyAgSU4gIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTW9kZU51bWJlciwNCisgIE9VVCBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpTaXplT2ZJbmZvLA0KKyAgT1VUIEVGSV9HUkFQSElDU19P VVRQVVRfTU9ERV9JTkZPUk1BVElPTiAgKipJbmZvDQorKQ0KK3sNCisgIFVTQl9ESVNQTEFZTElO S19ERVYgKkRldjsNCisgIENPTlNUIHN0cnVjdCBWaWRlb01vZGUgKlZpZGVvTW9kZTsNCisgIEVG SV9TVEFUVVMgU3RhdHVzOw0KKw0KKyAgRGV2ID0gVVNCX0RJU1BMQVlMSU5LX0RFVl9GUk9NX0dS QVBISUNTX09VVFBVVF9QUk9UT0NPTChHb3ApOw0KKyAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KKw0KKyAgaWYgKChTaXplT2ZJbmZvID09IE5VTEwpIHx8IChJbmZvID09IE5VTEwp KSB7DQorICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICAvLyBH ZXQgYSB2aWRlbyBtb2RlIGZyb20gdGhlIEVESUQNCisgIFN0YXR1cyA9IERsRWRpZEdldFN1cHBv cnRlZFZpZGVvTW9kZVdpdGhGYWxsYmFjayAoTW9kZU51bWJlciwgRGV2LT5FZGlkQWN0aXZlLkVk aWQsIERldi0+RWRpZEFjdGl2ZS5TaXplT2ZFZGlkLCAmVmlkZW9Nb2RlKTsNCisNCisgIGlmICgh RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorDQorICAgICpJbmZvID0gKEVGSV9HUkFQSElDU19PVVRQ VVRfTU9ERV9JTkZPUk1BVElPTiopQWxsb2NhdGVQb29sIChzaXplb2YgKEVGSV9HUkFQSElDU19P VVRQVVRfTU9ERV9JTkZPUk1BVElPTikpOw0KKyAgICBpZiAoKkluZm8gPT0gTlVMTCkgew0KKyAg ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgICAgfQ0KKw0KKyAgICBERUJVRyAo KERFQlVHX0lORk8sICJCSU9TIHF1ZXJ5aW5nIG1vZGUgbnVtYmVyICVkIC0gcmV0dXJuaW5nICVk eCVkIEAgJWRIelxuIiwgTW9kZU51bWJlciwgVmlkZW9Nb2RlLT5IQWN0aXZlLCBWaWRlb01vZGUt PlZBY3RpdmUsIENhbGN1bGF0ZVJlZnJlc2hSYXRlIChWaWRlb01vZGUpKSk7DQorDQorICAgICpT aXplT2ZJbmZvID0gc2l6ZW9mIChFRklfR1JBUEhJQ1NfT1VUUFVUX01PREVfSU5GT1JNQVRJT04p Ow0KKw0KKyAgICAoKkluZm8pLT5WZXJzaW9uID0gMDsNCisgICAgKCpJbmZvKS0+SG9yaXpvbnRh bFJlc29sdXRpb24gPSBWaWRlb01vZGUtPkhBY3RpdmU7DQorICAgICgqSW5mbyktPlZlcnRpY2Fs UmVzb2x1dGlvbiA9IFZpZGVvTW9kZS0+VkFjdGl2ZTsNCisgICAgKCpJbmZvKS0+UGl4ZWxGb3Jt YXQgPSBQaXhlbEJsdE9ubHk7DQorICAgICgqSW5mbyktPlBpeGVsc1BlclNjYW5MaW5lID0gKCpJ bmZvKS0+SG9yaXpvbnRhbFJlc29sdXRpb247DQorICAgICgqSW5mbyktPlBpeGVsSW5mb3JtYXRp b24uUmVkTWFzayA9IDA7DQorICAgICgqSW5mbyktPlBpeGVsSW5mb3JtYXRpb24uR3JlZW5NYXNr ID0gMDsNCisgICAgKCpJbmZvKS0+UGl4ZWxJbmZvcm1hdGlvbi5CbHVlTWFzayA9IDA7DQorICAg ICgqSW5mbyktPlBpeGVsSW5mb3JtYXRpb24uUmVzZXJ2ZWRNYXNrID0gMDsNCisgIH0NCisgIHJl dHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAqDQorICogQHBhcmFtIEdvcCAgICAgICAgIFBv aW50ZXIgdG8gdGhlIGluc3RhbmNlIG9mIHRoZSBHT1AgcHJvdG9jb2wNCisgKiBAcGFyYW0gTW9k ZU51bWJlcg0KKyAqIEByZXR1cm4NCisgKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorRGlzcGxh eUxpbmtTZXRNb2RlICgNCisgIElOICBFRklfR1JBUEhJQ1NfT1VUUFVUX1BST1RPQ09MICAqR29w LA0KKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVOdW1iZXINCispDQor ew0KKyAgVVNCX0RJU1BMQVlMSU5LX0RFViAqVXNiRGlzcGxheUxpbmtEZXY7DQorICBFRklfU1RB VFVTIFN0YXR1czsNCisgIENPTlNUIHN0cnVjdCBWaWRlb01vZGUgKlZpZGVvTW9kZTsNCisNCisg IFVzYkRpc3BsYXlMaW5rRGV2ID0gVVNCX0RJU1BMQVlMSU5LX0RFVl9GUk9NX0dSQVBISUNTX09V VFBVVF9QUk9UT0NPTChHb3ApOw0KKw0KKyAgLy8gUHJldmVudCB0aGUgRGlzcGxheUxpbmtQZXJp b2RpY1RpbWVyIGZyb20gaW50ZXJydXB0aW5nIHVzIChidWcgMjg4NzcpLg0KKyAgLy8gV2hlbiB0 aGUgZHJpdmVyIGlzIG1hbnVhbGx5IGxvYWRlZCwgdGhlIFRQTCBpcyBUUExfTk9USUZZICgxNikg d2hpY2ggcHJldmVudHMgdGhlIGludGVycnVwdCBmcm9tIHRoZSB0aW1lci4NCisgIC8vIFdoZW4g dGhlIEdPUCBkcml2ZXIgaXMgc2lkZWxvYWRlZCwgdGhlIFRQTCBvZiB0aGlzIGNhbGwgaXMgVFBM X0FQUExJQ0FUSU9OICg0KSBhbmQgdGhlIHRpbWVyIGNhbiBpbnRlcnJ1cHQgdXMuDQorICBHb3At Pk1vZGUtPk1vZGUgPSBHUkFQSElDU19PVVRQVVRfSU5WQUxJRF9NT0RFX05VTUJFUjsNCisNCisg IC8vIEdldCBhIHZpZGVvIG1vZGUgZnJvbSB0aGUgRURJRA0KKyAgU3RhdHVzID0gRGxFZGlkR2V0 U3VwcG9ydGVkVmlkZW9Nb2RlV2l0aEZhbGxiYWNrIChNb2RlTnVtYmVyLCBVc2JEaXNwbGF5TGlu a0Rldi0+RWRpZEFjdGl2ZS5FZGlkLCBVc2JEaXNwbGF5TGlua0Rldi0+RWRpZEFjdGl2ZS5TaXpl T2ZFZGlkLCAmVmlkZW9Nb2RlKTsNCisNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisg ICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIEdvcC0+TW9kZS0+SW5mby0+VmVyc2lvbiA9 IDA7DQorICBHb3AtPk1vZGUtPkluZm8tPkhvcml6b250YWxSZXNvbHV0aW9uID0gVmlkZW9Nb2Rl LT5IQWN0aXZlOw0KKyAgR29wLT5Nb2RlLT5JbmZvLT5WZXJ0aWNhbFJlc29sdXRpb24gPSBWaWRl b01vZGUtPlZBY3RpdmU7DQorICBHb3AtPk1vZGUtPkluZm8tPlBpeGVsRm9ybWF0ID0gUGl4ZWxC bHRPbmx5Ow0KKyAgR29wLT5Nb2RlLT5JbmZvLT5QaXhlbHNQZXJTY2FuTGluZSA9IEdvcC0+TW9k ZS0+SW5mby0+SG9yaXpvbnRhbFJlc29sdXRpb247DQorICBHb3AtPk1vZGUtPlNpemVPZkluZm8g PSBzaXplb2YgKEVGSV9HUkFQSElDU19PVVRQVVRfTU9ERV9JTkZPUk1BVElPTik7DQorICBHb3At Pk1vZGUtPkZyYW1lQnVmZmVyQmFzZSA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pTlVM TDsNCisgIEdvcC0+TW9kZS0+RnJhbWVCdWZmZXJTaXplID0gMDsNCisNCisgIC8vDQorICAvLyBB bGxvY2F0ZSB0aGUgYmFjayBidWZmZXINCisgIC8vDQorICBpZiAoVXNiRGlzcGxheUxpbmtEZXYt PlNjcmVlbiAhPSBOVUxMKSB7DQorICAgIEZyZWVQb29sIChVc2JEaXNwbGF5TGlua0Rldi0+U2Ny ZWVuKTsNCisgIH0NCisNCisgIFVzYkRpc3BsYXlMaW5rRGV2LT5TY3JlZW4gPSAoRUZJX0dSQVBI SUNTX09VVFBVVF9CTFRfUElYRUwqKUFsbG9jYXRlWmVyb1Bvb2wgKA0KKyAgICBHb3AtPk1vZGUt PkluZm8tPkhvcml6b250YWxSZXNvbHV0aW9uICoNCisgICAgR29wLT5Nb2RlLT5JbmZvLT5WZXJ0 aWNhbFJlc29sdXRpb24gKg0KKyAgICBzaXplb2YgKEVGSV9HUkFQSElDU19PVVRQVVRfQkxUX1BJ WEVMKSk7DQorDQorICBpZiAoVXNiRGlzcGxheUxpbmtEZXYtPlNjcmVlbiA9PSBOVUxMKSB7DQor ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisgIERFQlVHICgoREVC VUdfSU5GTywgIlZpZGVvIG1vZGUgJWQgc2VsZWN0ZWQgYnkgQklPUyAtICVkIHggJWQuXG4iLCBN b2RlTnVtYmVyLCBWaWRlb01vZGUtPkhBY3RpdmUsIFZpZGVvTW9kZS0+VkFjdGl2ZSkpOw0KKyAg Ly8gV2FpdCB1bnRpbCB3ZSBhcmUgc3VyZSB0aGF0IHdlIGNhbiBzZXQgdGhlIHZpZGVvIG1vZGUg YmVmb3JlIHdlIHRlbGwgdGhlIGZpcm13YXJlDQorICBTdGF0dXMgPSBEbFVzYlNlbmRDb250cm9s V3JpdGVNZXNzYWdlIChVc2JEaXNwbGF5TGlua0RldiwgU0VUX1ZJREVPX01PREUsIDAsIFZpZGVv TW9kZSwgc2l6ZW9mIChzdHJ1Y3QgVmlkZW9Nb2RlKSk7DQorDQorICBpZiAoU3RhdHVzICE9IEVG SV9TVUNDRVNTKSB7DQorICAgIC8vIEZsYWcgdXAgdGhhdCB3ZSBoYXZlbid0IHNldCB0aGUgdmlk ZW8gbW9kZSBjb3JyZWN0bHkgeWV0Lg0KKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRmFpbGVk IHRvIHNlbmQgVVNCIG1lc3NhZ2UgdG8gRGlzcGxheUxpbmsgZGV2aWNlIHRvIHNldCBtb25pdG9y IHZpZGVvIG1vZGUuIE1vbml0b3IgY29ubmVjdGVkIGNvcnJlY3RseT9cbiIpKTsNCisgICAgR29w LT5Nb2RlLT5Nb2RlID0gR1JBUEhJQ1NfT1VUUFVUX0lOVkFMSURfTU9ERV9OVU1CRVI7DQorICAg IEZyZWVQb29sIChVc2JEaXNwbGF5TGlua0Rldi0+U2NyZWVuKTsNCisgICAgVXNiRGlzcGxheUxp bmtEZXYtPlNjcmVlbiA9IE5VTEw7DQorICB9IGVsc2Ugew0KKyAgICBCdWlsZEJhY2tCdWZmZXIg KA0KKyAgICAgIFVzYkRpc3BsYXlMaW5rRGV2LA0KKyAgICAgIFVzYkRpc3BsYXlMaW5rRGV2LT5T Y3JlZW4sDQorICAgICAgRWZpQmx0QnVmZmVyVG9WaWRlbywNCisgICAgICAwLCAwLA0KKyAgICAg IDAsIDAsDQorICAgICAgR29wLT5Nb2RlLT5JbmZvLT5Ib3Jpem9udGFsUmVzb2x1dGlvbiwNCisg ICAgICBHb3AtPk1vZGUtPkluZm8tPlZlcnRpY2FsUmVzb2x1dGlvbiwNCisgICAgICBHb3AtPk1v ZGUtPkluZm8tPkhvcml6b250YWxSZXNvbHV0aW9uICogc2l6ZW9mIChFRklfR1JBUEhJQ1NfT1VU UFVUX0JMVF9QSVhFTCksDQorICAgICAgR29wLT5Nb2RlLT5JbmZvLT5Ib3Jpem9udGFsUmVzb2x1 dGlvbik7DQorICAgIC8vIHVubG9jayB0aGUgRGlzcGxheUxpbmtQZXJpb2RpY1RpbWVyDQorICAg IEdvcC0+TW9kZS0+TW9kZSA9IE1vZGVOdW1iZXI7DQorICB9DQorDQorICByZXR1cm4gU3RhdHVz Ow0KK30NCisNCisvKioNCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgR09QIHByb3RvY29sIEJs dCBBUEkgZnVuY3Rpb24NCisgKiBAcGFyYW0gVGhpcyAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhl IGluc3RhbmNlIG9mIHRoZSBHT1AgcHJvdG9jb2wNCisgKiBAcGFyYW0gQmx0QnVmZmVyDQorICog QHBhcmFtIEJsdE9wZXJhdGlvbg0KKyAqIEBwYXJhbSBTb3VyY2VYDQorICogQHBhcmFtIFNvdXJj ZVkNCisgKiBAcGFyYW0gRGVzdGluYXRpb25YDQorICogQHBhcmFtIERlc3RpbmF0aW9uWQ0KKyAq IEBwYXJhbSBXaWR0aA0KKyAqIEBwYXJhbSBIZWlnaHQNCisgKiBAcGFyYW0gRGVsdGENCisgKiBA cmV0dXJuDQorICovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0Rpc3BsYXlMaW5rQmx0ICgNCisg IElOICBFRklfR1JBUEhJQ1NfT1VUUFVUX1BST1RPQ09MICAgICAgICAgICAgKlRoaXMsDQorICBJ TiAgRUZJX0dSQVBISUNTX09VVFBVVF9CTFRfUElYRUwgICAgICAgICAgICpCbHRCdWZmZXIsIE9Q VElPTkFMDQorICBJTiAgRUZJX0dSQVBISUNTX09VVFBVVF9CTFRfT1BFUkFUSU9OICAgICAgIEJs dE9wZXJhdGlvbiwNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU291cmNlWCwNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU291cmNlWSwNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRGVzdGluYXRpb25YLA0KKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEZXN0aW5hdGlvblksDQorICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFdpZHRoLA0KKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBIZWlnaHQsDQorICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERlbHRhICAgICAgICAgT1BUSU9OQUwNCispDQorew0KKyAgVVNCX0RJU1BMQVlM SU5LX0RFViogVXNiRGlzcGxheUxpbmtEZXY7DQorICBVc2JEaXNwbGF5TGlua0RldiA9IFVTQl9E SVNQTEFZTElOS19ERVZfRlJPTV9HUkFQSElDU19PVVRQVVRfUFJPVE9DT0woVGhpcyk7DQorDQor ICAvLyBEcm9wIG91dCBpZiB3ZSBoYXZlbid0IHNldCB0aGUgdmlkZW8gbW9kZSB1cCB5ZXQNCisg IGlmIChUaGlzLT5Nb2RlLT5Nb2RlID09IEdSQVBISUNTX09VVFBVVF9JTlZBTElEX01PREVfTlVN QkVSKSB7DQorICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCisgIH0NCisNCisgIGlmICgoQmx0T3Bl cmF0aW9uIDwgMCkgfHwgKEJsdE9wZXJhdGlvbiA+PSBFZmlHcmFwaGljc091dHB1dEJsdE9wZXJh dGlvbk1heCkpIHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisN CisgIGlmIChXaWR0aCA9PSAwIHx8IEhlaWdodCA9PSAwKSB7DQorICAgIHJldHVybiBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICAvLyBMb2NrIHNvIHdlIG1ha2UgYW4gYXRvbWlj IHdyaXRlIHRoZSBmcmFtZSBidWZmZXIuDQorICAvLyBXZSB3b3VsZCBub3Qgd2FudCBhIHRpbWVy IGJhc2VkIGV2ZW50IChDdXJzb3IsIC4uLikgdG8gY29tZSBpbiB3aGlsZSB3ZSBhcmUgZG9pbmcg dGhpcyBvcGVyYXRpb24uDQorICBFRklfVFBMIE9yaWdpbmFsVFBMID0gZ0JTLT5SYWlzZVRQTCAo VFBMX05PVElGWSk7DQorDQorICBDT05TVCBVSU5UTiBCbHRCdWZmZXJTdHJpZGUgPSAoRGVsdGEg PT0gMCkgPyBXaWR0aCAqIHNpemVvZiAoRUZJX0dSQVBISUNTX09VVFBVVF9CTFRfUElYRUwpIDog RGVsdGE7DQorICBDT05TVCBFRklfU1RBVFVTIGJvdW5kc0NoZWNrU3RhdHVzID0gQ2hlY2tCb3Vu ZHMgKFRoaXMsIEJsdE9wZXJhdGlvbiwgU291cmNlWCwgU291cmNlWSwgV2lkdGgsIEhlaWdodCwg RGVzdGluYXRpb25YLCBEZXN0aW5hdGlvblkpOw0KKyAgaWYgKEVGSV9FUlJPUiAoYm91bmRzQ2hl Y2tTdGF0dXMpKSB7DQorICAgIGdCUy0+UmVzdG9yZVRQTCAoT3JpZ2luYWxUUEwpOw0KKyAgICBy ZXR1cm4gYm91bmRzQ2hlY2tTdGF0dXM7DQorICB9DQorDQorICBCdWlsZEJhY2tCdWZmZXIgKFVz YkRpc3BsYXlMaW5rRGV2LCBCbHRCdWZmZXIsIEJsdE9wZXJhdGlvbiwgU291cmNlWCwgU291cmNl WSwgRGVzdGluYXRpb25YLCBEZXN0aW5hdGlvblksIFdpZHRoLCBIZWlnaHQsIEJsdEJ1ZmZlclN0 cmlkZSwgVGhpcy0+TW9kZS0+SW5mby0+UGl4ZWxzUGVyU2NhbkxpbmUpOw0KKw0KKyAgZ0JTLT5S ZXN0b3JlVFBMIChPcmlnaW5hbFRQTCk7DQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0K ZGlmZiAtLWdpdCBhL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxp bmtHb3AvVXNiRGVzY3JpcHRvcnMuYyBiL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQ a2cvRGlzcGxheUxpbmtHb3AvVXNiRGVzY3JpcHRvcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjJhNzg4NmVkNjUyMwotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZl cnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtHb3AvVXNiRGVzY3JpcHRv cnMuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoqDQorICogQGZpbGUgVXNiRGVzY3JpcHRvcnMuYw0K KyAqIEBicmllZiBGdW5jdGlvbnMgdG8gcmVhZCBVU0IgSW50ZXJmYWNlIGFuZCBDYXBhYmlsaXRp ZXMgZGVzY3JpcHRvcnMNCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBEaXNwbGF5 TGluayAoVUspIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorICoNCisqKi8NCisNCisjaW5jbHVk ZSAiVXNiRGlzcGxheUxpbmsuaCINCisjaW5jbHVkZSAiVXNiRGVzY3JpcHRvcnMuaCINCisNCisv KioNCisgKg0KKyAqIEBwYXJhbSBVc2JJbw0KKyAqIEBwYXJhbSBkZXNjcmlwdG9yVHlwZQ0KKyAq IEBwYXJhbSBpbmRleA0KKyAqIEBwYXJhbSBCdWZmZXINCisgKiBAcGFyYW0gTGVuZ3RoDQorICog QHBhcmFtIFVzYlN0YXR1cw0KKyAqIEByZXR1cm4NCisgKi8NCitTVEFUSUMgRUZJX1NUQVRVUw0K K1JlYWREZXNjcmlwdG9yICgNCisgICAgSU4gRUZJX1VTQl9JT19QUk9UT0NPTCAqVXNiSW8sDQor ICAgIFVJTlQ4IERlc2NyaXB0b3JUeXBlLA0KKyAgICBVSU5UOCBJbmRleCwNCisgICAgVk9JRCog QnVmZmVyLA0KKyAgICBVSU5UMTYgTGVuZ3RoLA0KKyAgICBVSU5UMzIqIFVzYlN0YXR1cykNCit7 DQorICBFRklfU1RBVFVTIFN0YXR1czsNCisNCisgIFVJTlQ4IEhlYWRlclsyXSA9IHswLCAwfTsN CisNCisgIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgUmVxdWVzdDsNCisgIFplcm9NZW0gKCZSZXF1 ZXN0LCBzaXplb2YgKFJlcXVlc3QpKTsNCisgIFJlcXVlc3QuUmVxdWVzdFR5cGUgPSBVU0JfRU5E UE9JTlRfRElSX0lOIHwgVVNCX1JFUV9UWVBFX1NUQU5EQVJEIHwgVVNCX1RBUkdFVF9ERVZJQ0U7 DQorICBSZXF1ZXN0LlJlcXVlc3QgPSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOw0KKyAgUmVxdWVz dC5JbmRleCA9IDA7DQorICBSZXF1ZXN0LlZhbHVlID0gRGVzY3JpcHRvclR5cGUgPDwgOCB8IElu ZGV4Ow0KKyAgUmVxdWVzdC5MZW5ndGggPSBzaXplb2YgKEhlYWRlcik7DQorDQorICAvLyBSZWFk IHRoZSBkZXNjcmlwdG9yIGhlYWRlciB0byBzZWUgaG93IG1hbnkgYnl0ZXMgaXQgY29udGFpbnMN CisgIFN0YXR1cyA9IFVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KKyAgICAgIFVzYklvLA0K KyAgICAgICZSZXF1ZXN0LA0KKyAgICAgIEVmaVVzYkRhdGFJbiwNCisgICAgICBESVNQTEFZTElO S19VU0JfQ1RSTF9USU1FT1VULA0KKyAgICAgIEhlYWRlciwNCisgICAgICBzaXplb2YgKEhlYWRl ciksDQorICAgICAgVXNiU3RhdHVzKTsNCisNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN CisgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZhaWxlZCB0byByZWFkIGxlbmd0aCBvZiBkZXNj cmlwdG9yIHR5cGUgeCV4LCBpbmRleCAldSAoY29kZSAlciwgVVNCIHN0YXR1cyB4JXgpXG4iLA0K KyAgICAgICAgICBEZXNjcmlwdG9yVHlwZSwgSW5kZXgsIFN0YXR1cywgKlVzYlN0YXR1cykpOw0K KyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKyAgQ09OU1QgVUlOVDE2IFRvdGFsTGVuZ3RoID0g SGVhZGVyWzBdOw0KKw0KKyAgLy8gTm93IHdlIGtub3cgdGhlIHNpemUgb2YgaXQsIHdlIGNhbiBy ZWFkIHRoZSBlbnRpcmUgZGVzY3JpcHRvcg0KKyAgUmVxdWVzdC5MZW5ndGggPSBUb3RhbExlbmd0 aDsNCisNCisgIFN0YXR1cyA9IFVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KKyAgICAgIFVz YklvLA0KKyAgICAgICZSZXF1ZXN0LA0KKyAgICAgIEVmaVVzYkRhdGFJbiwNCisgICAgICBESVNQ TEFZTElOS19VU0JfQ1RSTF9USU1FT1VULA0KKyAgICAgIEJ1ZmZlciwNCisgICAgICBUb3RhbExl bmd0aCwNCisgICAgICBVc2JTdGF0dXMpOw0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQor LyoqDQorICBQZXJmb3JtIGEgVVNCIGNvbnRyb2wgdHJhbnNmZXIgdG8gcmVhZCB0aGUgRGlzcGxh eUxpbmsgdmVuZG9yIGRlc2NyaXB0b3IuDQorDQorICBAcGFyYW0gVXNiSW8gICBQb2ludGVyIHRv IHRoZSBpbnN0YW5jZSBvZiB0aGUgVVNCSU8gcHJvdG9jb2wNCisgIEBwYXJhbSBCdWZmZXIgIFBv aW50ZXIgdG8gdGhlIGJ1ZmZlciB3aGVyZSBkZXNjcmlwdG9yIHNob3VsZCBiZSB3cml0dGVuDQor ICBAcGFyYW0gTGVuZ3RoICBMZW5ndGggb2YgYnVmZmVyIChhbmQgdGhlIG1heGltdW0gYW1vdW50 IG9mIGRlc2NyaXB0b3IgZGF0YSB0aGF0IHNoYWxsIGJlIHJlYWQpDQorDQorICBAcmV0dmFsIEVG SV9TVUNDRVNTICBUaGUgZGVzY3JpcHRvciBoYXMgYmVlbiBjb3BpZWQgaW50byBCdWZmZXINCisg IEByZXR2YWwgT3RoZXIgICAgICAgIFRoZSBkZXNjcmlwdG9yIGNvdWxkIG5vdCBiZSByZWFkDQor KiovDQorRUZJX1NUQVRVUw0KK1JlYWRDYXBhYmlsaXRpZXNEZXNjcmlwdG9yICgNCisgICAgSU4g RUZJX1VTQl9JT19QUk9UT0NPTCAqVXNiSW8sDQorICAgIE9VVCBWT0lEKiBCdWZmZXIsDQorICAg IElOIFVJTlQxNiBMZW5ndGgpDQorew0KKyAgVUlOVDMyIFVzYlN0YXR1czsNCisgIEVGSV9TVEFU VVMgU3RhdHVzOw0KKw0KKyAgU3RhdHVzID0gUmVhZERlc2NyaXB0b3IgKA0KKyAgICAgIFVzYklv LA0KKyAgICAgIERFU0NSSVBUT1JfVFlQRV9ESVJFQ1RGQl9DQVBBQklMSVRZLA0KKyAgICAgIDAs DQorICAgICAgQnVmZmVyLA0KKyAgICAgIExlbmd0aCwNCisgICAgICAmVXNiU3RhdHVzKTsNCisN CisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChERUJVR19FUlJPUiwg IkNvdWxkIG5vdCByZWFkIGNhcGFiaWxpdGllcyBkZXNjcmlwdG9yIGZyb20gREwgZGV2aWNlIChj b2RlICVyLCBVU0Igc3RhdHVzIHgleCkuIFVucmVjb2duaXNlZCBmaXJtd2FyZSB2ZXJzaW9uP1xu IiwgU3RhdHVzLCBVc2JTdGF0dXMpKTsNCisgIH0NCisNCisgIHJldHVybiBTdGF0dXM7DQorfQ0K Kw0KKw0KKy8qKg0KKyBBbiBhbHRlcm5hdGl2ZSB0byB0aGUgVUJTSU8gcHJvdG9jb2wgZnVuY3Rp b24gRUZJX1VTQl9JT19HRVRfSU5URVJGQUNFX0RFU0NSSVBUT1IuDQorIFRoaXMgdmVyc2lvbiBh bGxvd3MgeW91IHRvIHNwZWNpZnkgYW4gaW5kZXguDQorICogQHBhcmFtIFVzYklvICAgICAgICAg ICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUgVVNCSU8gcHJvdG9jb2wNCisg KiBAcGFyYW0gaW50ZXJmYWNlRGVzY3JpcHRvciAgIFdoZXJlIHRoZSBkZXNjcmlwdG9yIHNob3Vs ZCBiZSB3cml0dGVuDQorICogQHBhcmFtIGluZGV4ICAgICAgICAgICAgICAgICBUaGUgaW5kZXgg b2YgdGhlIGRlc2NyaXB0b3IgcmVxdWlyZWQgKHRoZSBzdGFuZGFyZCBVU0JJTyBmdW5jdGlvbiBk b2Vzbid0IGxldCB5b3UgZG8gdGhpcykNCisgKiBAcmV0dXJuDQorICovDQorRUZJX1NUQVRVUw0K K1VzYkRpc3BsYXlMaW5rR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoDQorICAgIElOIEVGSV9VU0Jf SU9fUFJPVE9DT0wgKlVzYklvLA0KKyAgICBPVVQgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRP UiogSW50ZXJmYWNlRGVzY3JpcHRvciwNCisgICAgVUlOVDggSW5kZXgNCisgICAgKQ0KK3sNCisg IFVJTlQzMiBVc2JTdGF0dXM7DQorICBFRklfU1RBVFVTIFN0YXR1czsNCisNCisgIFN0YXR1cyA9 IFJlYWREZXNjcmlwdG9yICgNCisgICAgICBVc2JJbywNCisgICAgICBVU0JfREVTQ19UWVBFX0lO VEVSRkFDRSwNCisgICAgICBJbmRleCwNCisgICAgICBJbnRlcmZhY2VEZXNjcmlwdG9yLA0KKyAg ICAgIHNpemVvZiAoRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiksDQorICAgICAgJlVzYlN0 YXR1cyk7DQorDQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoREVC VUdfRVJST1IsICJVU0IgY29udHJvbCB0cmFuc2ZlciBmYWlsZWQgd2hpbGUgcmVhZGluZyBpbnRl cmZhY2UgZGVzY3JpcHRvciAoY29kZSAlciwgVVNCIHN0YXR1cyB4JXgpXG4iLCBTdGF0dXMsIFVz YlN0YXR1cykpOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQpkaWZmIC0tZ2l0 IGEvRHJpdmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5TGlua0dvcC9Vc2JE aXNwbGF5TGluay5jIGIvRHJpdmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5 TGlua0dvcC9Vc2JEaXNwbGF5TGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uOTliZTY2YTliZDJkCi0tLSAvZGV2L251bGwKKysrIGIvRHJpdmVycy9EaXNwbGF5 TGluay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5TGlua0dvcC9Vc2JEaXNwbGF5TGluay5jCkBAIC0w LDAgKzEsMTEwOSBAQAorLyoqDQorICogQGZpbGUgVXNiRGlzcGxheUxpbmsuYw0KKyAqIEBicmll ZiBVU0IgRGlzcGxheUxpbmsgRHJpdmVyIHRoYXQgbWFuYWdlcyBVU0IgRGlzcGxheUxpbmsgZGV2 aWNlIGFuZCBwcm9kdWNlcyBHcmFwaGljcyBPdXRwdXQgUHJvdG9jb2wNCisgKiBUaGlzIGZpbGUg aW1wbGVtZW50cyB0aGUgZnVuY3Rpb25zIG9mIHRoZSBEcml2ZXIgQmluZGluZyAvIFN0YXJ0IC8g U3RvcCAvIFVubG9hZCBpbnRlcmZhY2UNCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5 LCBEaXNwbGF5TGluayAoVUspIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorICoNCisqKi8NCisN CisjaW5jbHVkZSAiVXNiRGlzcGxheUxpbmsuaCINCisNCisjaW5jbHVkZSA8TGlicmFyeS9VZWZp UnVudGltZVNlcnZpY2VzVGFibGVMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5o Pg0KKyNpbmNsdWRlIDxQcm90b2NvbC9IaWlGb250Lmg+DQorDQorI2luY2x1ZGUgIkVkaWQuaCIN CisjaW5jbHVkZSAiVXNiRGVzY3JpcHRvcnMuaCINCisNCisvLw0KKy8vIEZ1bmN0aW9ucyBvZiBE cml2ZXIgQmluZGluZyBQcm90b2NvbA0KKy8vDQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1Vz YkRpc3BsYXlMaW5rRHJpdmVyQmluZGluZ1N1cHBvcnRlZCAoDQorICBJTiBFRklfRFJJVkVSX0JJ TkRJTkdfUFJPVE9DT0wgICAgKlRoaXMsDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAg ICAgICAgQ29udHJvbGxlciwNCisgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAq UmVtYWluaW5nRGV2aWNlUGF0aA0KKyk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1VzYkRp c3BsYXlMaW5rRHJpdmVyQmluZGluZ1N0YXJ0ICgNCisgIElOIEVGSV9EUklWRVJfQklORElOR19Q Uk9UT0NPTCAgICAqVGhpcywNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICBD b250cm9sbGVyLA0KKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICpSZW1haW5p bmdEZXZpY2VQYXRoDQorKTsNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorVXNiRGlzcGxheUxp bmtEcml2ZXJCaW5kaW5nU3RvcCAoDQorICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09M ICAgKlRoaXMsDQorICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxl ciwNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNoaWxkcmVu LA0KKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZl cg0KKyk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1VzYkRpc3BsYXlMaW5rRHJpdmVyQmlu ZGluZ0VudHJ5UG9pbnQgKA0KKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgSW1hZ2VIYW5kbGUs DQorICBJTiBFRklfU1lTVEVNX1RBQkxFICAgICAqU3lzdGVtVGFibGUNCispOw0KKw0KKw0KK0VG SV9TVEFUVVMNCitFRklBUEkNCitVc2JEaXNwbGF5TGlua0RyaXZlckNvbWJpbmVkR29wQmluZGlu Z0VudHJ5UG9pbnQgKA0KKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgSW1hZ2VIYW5kbGUsDQor ICBJTiBFRklfU1lTVEVNX1RBQkxFICAgICAqU3lzdGVtVGFibGUsDQorICBJTiBFRklfSEFORExF ICAgICAgICAgICBEcml2ZXJCaW5kaW5nSGFuZGxlDQorKTsNCisNCisNCisvLyBHZW5lcmF0ZWQg d2l0aCBodHRwczovL3d3dy5ndWlkZ2VuLmNvbS8gLSAiQjcwRTVBNzktQzZENi00MjY3LUIwMkUt OTEwOEM5ODlFMjg3Ig0KK0VGSV9HVUlEIGdFZmlEbEdvcFZhcmlhYmxlR3VpZCA9IHsgMHhCNzBF NUE3OSwgMHhDNkQ2LCAweDQyNjcseyAweEIwLCAweDJFLCAweDkxLCAweDA4LCAweEM5LCAweDg5 LCAweEUyLCAweDg3IH0gfTsNCisNCisNCitFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgZ1Vz YkRpc3BsYXlMaW5rRHJpdmVyQmluZGluZyA9IHsNCisgIFVzYkRpc3BsYXlMaW5rRHJpdmVyQmlu ZGluZ1N1cHBvcnRlZCwNCisgIFVzYkRpc3BsYXlMaW5rRHJpdmVyQmluZGluZ1N0YXJ0LA0KKyAg VXNiRGlzcGxheUxpbmtEcml2ZXJCaW5kaW5nU3RvcCwNCisgIElORl9EUklWRVJfVkVSU0lPTiwN CisgIE5VTEwsDQorICBOVUxMDQorfTsNCisNCisNCisvKioNCisgKiBSZWFkcyBpbnRlZ2VyIGVu dmlyb25tZW50IHZhcmlhYmxlIHdpdGggZGVmYXVsdCBmYWxsYmFjay4NCisgKiBAcGFyYW0gdmFy aWFibGVOYW1lICAgdmFyaWFibGUgbmFtZSB0byByZWFkDQorICogQHBhcmFtIGRlZmF1bHRWYWx1 ZSAgIGRlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIHJlcXVlc3RlZCBub3QgZm91bmQNCisgKi8N CitTVEFUSUMgVUlOVDMyDQorUmVhZEVudmlyb25tZW50SW50ICgNCisgICAgQ09OU1Qgd2NoYXJf dCogVmFyaWFibGVOYW1lLA0KKyAgICBVSU5UMzIgRGVmYXVsdFZhbHVlDQorICAgICkNCit7DQor ICBVSU5UMzIgUmVzdWx0Ow0KKyAgVUlOVE4gRGF0YVNpemU7DQorICBEYXRhU2l6ZSA9IHNpemVv ZiAoUmVzdWx0KTsNCisgIENPTlNUIEVGSV9TVEFUVVMgU3RhdHVzID0gZ1JULT5HZXRWYXJpYWJs ZSAoKENIQVIxNiopVmFyaWFibGVOYW1lLCAmZ0VmaURsR29wVmFyaWFibGVHdWlkLCAoVUlOVDMy KilOVUxMLCAmRGF0YVNpemUsICZSZXN1bHQpOw0KKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykg JiYgKHNpemVvZiAoUmVzdWx0KSA9PSBEYXRhU2l6ZSkpIHsNCisgICAgcmV0dXJuIFJlc3VsdDsN CisgIH0NCisgIHJldHVybiBEZWZhdWx0VmFsdWU7DQorfQ0KKw0KKy8qKg0KKyogUmVhZHMgYm9v bGVhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIGRlZmF1bHQgZmFsbGJhY2suDQorKiBAcGFy YW0gdmFyaWFibGVOYW1lICAgdmFyaWFibGUgbmFtZSB0byByZWFkDQorKiBAcGFyYW0gZGVmYXVs dFZhbHVlICAgZGVmYXVsdCB2YWx1ZSB0byByZXR1cm4gaWYgcmVxdWVzdGVkIG5vdCBmb3VuZA0K KyovDQorU1RBVElDIEJPT0xFQU4NCitSZWFkRW52aXJvbm1lbnRCb29sICgNCisgICAgQ09OU1Qg d2NoYXJfdCogVmFyaWFibGVOYW1lLA0KKyAgICBCT09MRUFOIERlZmF1bHRWYWx1ZQ0KKyAgICAp DQorew0KKyAgcmV0dXJuIFJlYWRFbnZpcm9ubWVudEludCAoVmFyaWFibGVOYW1lLCBEZWZhdWx0 VmFsdWUgPyAxIDogMCkgPT0gMTsNCit9DQorDQorDQorLyoqDQorKg0KKyogQHBhcmFtIFVzYkRp c3BsYXlMaW5rRGV2DQorKiBAcmV0dXJuDQorKi8NCitTVEFUSUMgRUZJX1NUQVRVUw0KK0luaXRp YWxpemVVc2JEaXNwbGF5TGlua0RldmljZSAoDQorICBJTiBPVVQgVVNCX0RJU1BMQVlMSU5LX0RF ViAqVXNiRGlzcGxheUxpbmtEZXYNCispDQorew0KKyAgRUZJX0dSQVBISUNTX09VVFBVVF9QUk9U T0NPTCogR29wOw0KKyAgR29wID0gJlVzYkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1dFBy b3RvY29sOw0KKyAgR29wLT5RdWVyeU1vZGUgPSBEaXNwbGF5TGlua1F1ZXJ5TW9kZTsNCisgIEdv cC0+U2V0TW9kZSA9IERpc3BsYXlMaW5rU2V0TW9kZTsNCisgIEdvcC0+Qmx0ID0gRGlzcGxheUxp bmtCbHQ7DQorDQorICAvLw0KKyAgLy8gQWxsb2NhdGUgYnVmZmVyIGZvciBHcmFwaGljcyBPdXRw dXQgUHJvdG9jb2wgbW9kZSBpbmZvcm1hdGlvbg0KKyAgLy8NCisgIEdvcC0+TW9kZSA9IChFRklf R1JBUEhJQ1NfT1VUUFVUX1BST1RPQ09MX01PREUqKUFsbG9jYXRlUG9vbCAoc2l6ZW9mIChFRklf R1JBUEhJQ1NfT1VUUFVUX1BST1RPQ09MX01PREUpKTsNCisgIGlmIChHb3AtPk1vZGUgPT0gTlVM TCkgew0KKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICB9DQorICBHb3AtPk1v ZGUtPkluZm8gPSAoRUZJX0dSQVBISUNTX09VVFBVVF9NT0RFX0lORk9STUFUSU9OKilBbGxvY2F0 ZVBvb2wgKHNpemVvZiAoRUZJX0dSQVBISUNTX09VVFBVVF9NT0RFX0lORk9STUFUSU9OKSk7DQor ICBpZiAoR29wLT5Nb2RlLT5JbmZvID09IE5VTEwpIHsNCisgICAgRnJlZVBvb2wgKEdvcC0+TW9k ZSk7DQorICAgIEdvcC0+TW9kZSA9IE5VTEw7DQorICAgIHJldHVybiBFRklfT1VUX09GX1JFU09V UkNFUzsNCisgIH0NCisNCisgIEdvcC0+TW9kZS0+TWF4TW9kZSA9IE1BWCgxLCBEbEVkaWRHZXRO dW1TdXBwb3J0ZWRNb2Rlc0luRWRpZCAoVXNiRGlzcGxheUxpbmtEZXYtPkVkaWRBY3RpdmUuRWRp ZCwgVXNiRGlzcGxheUxpbmtEZXYtPkVkaWRBY3RpdmUuU2l6ZU9mRWRpZCkpOw0KKw0KKyAgR29w LT5Nb2RlLT5Nb2RlID0gR1JBUEhJQ1NfT1VUUFVUX0lOVkFMSURfTU9ERV9OVU1CRVI7DQorICBH b3AtPk1vZGUtPkluZm8tPlZlcnNpb24gPSAwOw0KKyAgLy8gVE9ETyAtIEluaXRpYWxpc2luZyB0 aGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIHByZXZlbnRzIGNlcnRhaW4gQklPU3MgZnJvbSBoYW5n aW5nIG9uIGJvb3QsIGJ1dA0KKyAgLy8gaXQgaXMgbm90IHlldCBjbGVhciB3aHkuIFNlZSBidWcg MjgxOTQuDQorICBHb3AtPk1vZGUtPkluZm8tPkhvcml6b250YWxSZXNvbHV0aW9uID0gRGxWaWRl b01vZGVHZXRTdXBwb3J0ZWRWaWRlb01vZGUgKDApLT5IQWN0aXZlOw0KKyAgR29wLT5Nb2RlLT5J bmZvLT5WZXJ0aWNhbFJlc29sdXRpb24gPSAwOw0KKyAgR29wLT5Nb2RlLT5JbmZvLT5QaXhlbEZv cm1hdCA9IFBpeGVsQmx0T25seTsNCisgIEdvcC0+TW9kZS0+SW5mby0+UGl4ZWxzUGVyU2Nhbkxp bmUgPSAwOw0KKyAgR29wLT5Nb2RlLT5TaXplT2ZJbmZvID0gc2l6ZW9mIChFRklfR1JBUEhJQ1Nf T1VUUFVUX01PREVfSU5GT1JNQVRJT04pOw0KKyAgR29wLT5Nb2RlLT5GcmFtZUJ1ZmZlckJhc2Ug PSAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKU5VTEw7DQorICBHb3AtPk1vZGUtPkZyYW1l QnVmZmVyU2l6ZSA9IDA7DQorDQorICAvLyBQcmV2ZW50IERsR29wU2VuZFNjcmVlblVwZGF0ZSBm cm9tIHJ1bm5pbmcgdW50aWwgd2UgYXJlIHN1cmUgdGhhdCB0aGUgdmlkZW8gbW9kZSBpcyBzZXQN CisgIFVzYkRpc3BsYXlMaW5rRGV2LT5MYXN0WTIgPSAwOw0KKyAgVXNiRGlzcGxheUxpbmtEZXYt Pkxhc3RZMSA9IChVSU5UTiktMTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQor LyoqDQorICBMb29rIGZvciBhbHRlcm5hdGUgc2V0dGluZ3MgZm9yIHRoZSBVc2JJbyBoYW5kbGUn cyBpbnRlcmZhY2UNCisgIHdoaWNoIG9mZmVyIHByb3RvY29sIERMX1BST1RPQ09MX0RJUkVDVF9G Qi4NCisNCisgIEByZXR2YWwgLTEgICAgICAgICAgICAgICAgICAgICBOb3QgZm91bmQNCisgIEBy ZXR2YWwgT3RoZXIgICAgICAgICAgICAgICAgICBUaGUgYWx0ZXJuYXRlIHNldHRpbmcNCisqKi8N CitTVEFUSUMgSU5UTg0KK0dldERpcmVjdEZiQWx0U2V0dGluZyAoDQorICAgIElOIEVGSV9VU0Jf SU9fUFJPVE9DT0wgKlVzYklvLA0KKyAgICBJTiBVSU5UOCBQYXJlbnRJbnRlcmZhY2VOdW1iZXIN CisgICAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgU3RhdHVzOw0KKyAgSU5UTiBBbHRTZXR0aW5nSW5k ZXg7DQorICBVSU5UMTYgSW50ZXJmYWNlSW5kZXg7DQorDQorICBBbHRTZXR0aW5nSW5kZXggPSAt MTsNCisNCisgIGZvciAoSW50ZXJmYWNlSW5kZXggPSAwOyBJbnRlcmZhY2VJbmRleCA8PSAweEZG OyBJbnRlcmZhY2VJbmRleCsrKSB7DQorICAgIEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBUT1Ig aW50ZXJmYWNlRGVzY3JpcHRvcjsNCisgICAgU3RhdHVzID0gVXNiRGlzcGxheUxpbmtHZXRJbnRl cmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJmludGVyZmFjZURlc2NyaXB0b3IsIChVSU5UOClJbnRl cmZhY2VJbmRleCk7DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICBicmVh azsNCisgICAgfQ0KKw0KKyAgICBpZiAoaW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VOdW1i ZXIgPT0gUGFyZW50SW50ZXJmYWNlTnVtYmVyICYmDQorICAgICAgIChpbnRlcmZhY2VEZXNjcmlw dG9yLkludGVyZmFjZUNsYXNzID09IENMQVNTX1ZFTkRPUikgJiYNCisgICAgICAgIGludGVyZmFj ZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gSU5URVJGQUNFX1BST1RPQ09MX0RJUkVD VF9GQikgew0KKyAgICAgIEFsdFNldHRpbmdJbmRleCA9IGludGVyZmFjZURlc2NyaXB0b3IuQWx0 ZXJuYXRlU2V0dGluZzsNCisgICAgICBicmVhazsNCisgICAgfQ0KKyAgfQ0KKyAgcmV0dXJuIEFs dFNldHRpbmdJbmRleDsNCit9DQorDQorLyoqDQorICoNCisgKiBAcGFyYW0gVXNiSW8NCisgKiBA cGFyYW0gYWx0U2V0dGluZ0luZGV4DQorICogQHJldHVybg0KKyAqLw0KK1NUQVRJQyBFRklfU1RB VFVTDQorU2VsZWN0QWx0U2V0dGluZyAoDQorICAgIElOIEVGSV9VU0JfSU9fUFJPVE9DT0wgKlVz YklvLA0KKyAgICBJTiBVSU5UTiBBbHRTZXR0aW5nSW5kZXgpDQorew0KKyAgLy8gU2V0IGFsdGVy bmF0ZSBzZXR0aW5nIDEgb24gdGhlIGludGVyZmFjZQ0KKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQor ICBVSU5UMzIgVXNiU3RhdHVzOw0KKyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCBSZXF1ZXN0Ow0K KyAgWmVyb01lbSAoJlJlcXVlc3QsIHNpemVvZiAoUmVxdWVzdCkpOw0KKyAgUmVxdWVzdC5SZXF1 ZXN0VHlwZSA9IFVTQl9SRVFfVFlQRV9TVEFOREFSRCB8IFVTQl9UQVJHRVRfSU5URVJGQUNFOw0K KyAgUmVxdWVzdC5SZXF1ZXN0ID0gVVNCX1JFUV9TRVRfSU5URVJGQUNFOw0KKyAgUmVxdWVzdC5J bmRleCA9IERJU1BMQVlMSU5LX1VTQl9JTlRFUkZBQ0VfTlVNQkVSX05JVk87DQorICBSZXF1ZXN0 LlZhbHVlID0gKFVJTlQxNilBbHRTZXR0aW5nSW5kZXg7DQorDQorICBTdGF0dXMgPSBVc2JJby0+ VXNiQ29udHJvbFRyYW5zZmVyICgNCisgICAgVXNiSW8sDQorICAgICZSZXF1ZXN0LA0KKyAgICBF ZmlVc2JOb0RhdGEsDQorICAgIERJU1BMQVlMSU5LX1VTQl9DVFJMX1RJTUVPVVQsDQorICAgIE5V TEwsDQorICAgIDAsDQorICAgICZVc2JTdGF0dXMpOw0KKw0KKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KKyAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQorICAgIERFQlVHICgoREVC VUdfRVJST1IsICJVU0IgY29udHJvbCB0cmFuc2ZlciBmYWlsZWQgd2hpbGUgYXR0ZW1wdGluZyB0 byBzZWxlY3QgYWx0IHNldHRpbmcgJWQgb24gaW50ZXJmYWNlIChjb2RlICVyLCBVU0Igc3RhdHVz IHgleCkuIERpc3BsYXlMaW5rIGRldmljZSBoYXMgdW5zdXBwb3J0ZWQgZmlybXdhcmUgdmVyc2lv bj9cbiIsIEFsdFNldHRpbmdJbmRleCwgU3RhdHVzLCBVc2JTdGF0dXMpKTsNCisgIH0NCisgIHJl dHVybiBTdGF0dXM7DQorfQ0KKw0KKw0KKy8qKg0KKyAgUmVwb3J0IHdoZXRoZXIgdGhlIGRyaXZl ciBjYW4gc3VwcG9ydCB0aGUgZGV2aWNlIGF0dGFjaGVkIHZpYSBVc2JJbw0KKyAgYnkgc2VlaW5n IHdoYXQgaWYgYW55IGNhcGFiaWxpdGllcyBpdCByZXBvcnRzLg0KKw0KKyAgQHJldHZhbCBUUlVF ICAgICBEZXZpY2UgaGFzIHN1ZmZpY2llbnQgY2FwYWJpbGl0aWVzIGZvciB0aGlzIGRyaXZlci4N CisgIEByZXR2YWwgRkFMU0UgICAgRGV2aWNlIGxhY2tzIHN1ZmZpY2llbnQgY2FwYWJpbGl0aWVz Lg0KKyoqLw0KK1NUQVRJQyBCT09MRUFODQorQ2FwYWJpbGl0aWVzU3VwcG9ydGVkICgNCisgICAg SU4gRUZJX1VTQl9JT19QUk9UT0NPTCAqVXNiSW8NCisgICAgKQ0KK3sNCisgIFVJTlQ4IEJ1ZmZl clsyNTZdOw0KKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQorDQorICBTdGF0dXMgPSBSZWFkQ2FwYWJp bGl0aWVzRGVzY3JpcHRvciAoVXNiSW8sIEJ1ZmZlciwgc2l6ZW9mIChCdWZmZXIpKTsNCisgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIEZBTFNFOw0KKyAgfQ0KKw0KKyAg VmVuZG9yRGVzY3JpcHRvciBkZXNjcmlwdG9yOw0KKyAgU3RhdHVzID0gVXNiRGlzcGxheUxpbmtQ YXJzZUNhcGFiaWxpdGllc0Rlc2NyaXB0b3IgKEJ1ZmZlciwgc2l6ZW9mIChCdWZmZXIpLCAmZGVz Y3JpcHRvcik7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoREVC VUdfRVJST1IsICJGYWlsZWQgdG8gcGFyc2UgY2FwYWJpbGl0aWVzIGRlc2NyaXB0b3IgKGNvZGUg JXIpXG4iLCBTdGF0dXMpKTsNCisgICAgcmV0dXJuIEZBTFNFOw0KKyAgfQ0KKw0KKyAgcmV0dXJu IFVzYkRpc3BsYXlMaW5rQ2FwYWJpbGl0aWVzU3VmZmljaWVudFRvQmluZCAoJmRlc2NyaXB0b3Ip Ow0KK30NCisNCisNCisvKioNCisgKg0KKyAqIEBwYXJhbSBVc2JJbw0KKyAqIEBwYXJhbSBJbnRl cmZhY2VEZXNjcmlwdG9yDQorICogQHBhcmFtIGFsdFNldHRpbmdJbmRleA0KKyAqIEByZXR1cm4N CisgKi8NCitTVEFUSUMgQk9PTEVBTg0KK0lzRExEaXJlY3RGYkNhcGFibGVJbnRlcmZhY2UgKA0K KyAgICBJTiBFRklfVVNCX0lPX1BST1RPQ09MICpVc2JJbywNCisgICAgSU4gRUZJX1VTQl9JTlRF UkZBQ0VfREVTQ1JJUFRPUiAgKkludGVyZmFjZURlc2NyaXB0b3IsDQorICAgIElOIElOVE4gKkFs dFNldHRpbmdJbmRleCkNCit7DQorICBFRklfU1RBVFVTIFN0YXR1czsNCisgIEVGSV9VU0JfREVW SUNFX0RFU0NSSVBUT1IgRGV2aWNlRGVzY3JpcHRvcjsNCisNCisgIFN0YXR1cyA9IFVzYklvLT5V c2JHZXREZXZpY2VEZXNjcmlwdG9yIChVc2JJbywgJkRldmljZURlc2NyaXB0b3IpOw0KKw0KKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gRkFMU0U7DQorICB9DQorDQor ICBpZiAoRGV2aWNlRGVzY3JpcHRvci5JZFZlbmRvciAhPSBWRU5ET1JfRElTUExBWUxJTkspIHsN CisgICAgcmV0dXJuIEZBTFNFOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdldElu dGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCBJbnRlcmZhY2VEZXNjcmlwdG9yKTsNCisgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIEZBTFNFOw0KKyAgfQ0KKw0KKyAgLy8g V2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBpbnRlcmZhY2UgdGhhdCB3ZSB3YW50IHRvIHRhbGsgdG8g LSB0aGUgTklWTyBpbnRlcmZhY2UgLSBpcyBudW1iZXIgMA0KKyAgaWYgKEludGVyZmFjZURlc2Ny aXB0b3ItPkludGVyZmFjZU51bWJlciAhPSBESVNQTEFZTElOS19VU0JfSU5URVJGQUNFX05VTUJF Ul9OSVZPKSB7DQorICAgIHJldHVybiBGQUxTRTsNCisgIH0NCisNCisgIC8vIENoZWNrIGlmIHdl IGhhdmUgYW4gaW50ZXJmYWNlIChhbHQgc2V0dGluZykgZGVzY3JpcHRvciB3aXRoIHRoZSBjb3Jy ZWN0IGludGVyZmFjZSBwcm90b2NvbA0KKyAgKkFsdFNldHRpbmdJbmRleCA9IEdldERpcmVjdEZi QWx0U2V0dGluZyAoVXNiSW8sIEludGVyZmFjZURlc2NyaXB0b3ItPkludGVyZmFjZU51bWJlcik7 DQorDQorICBpZiAoKkFsdFNldHRpbmdJbmRleCA9PSAtMSkgew0KKyAgICBERUJVRyAoKERFQlVH X0VSUk9SLCAiRGlzcGxheUxpbmsgR09QOiBGYWlsZWQgdG8gZmluZCBzZXR0aW5nIG9uIGRldmlj ZSB3aGljaCBzdXBwb3J0cyBHT1AgZnVuY3Rpb25hbGl0eS4gQ2hlY2sgZmlybXdhcmUgLyBkZXZp Y2UgdmVyc2lvbj9cbiIpKTsNCisgICAgcmV0dXJuIEZBTFNFOw0KKyAgfQ0KKw0KKyAgLy8gTm93 IGNoZWNrIHRoYXQgdGhlIGNhcGFiaWxpdGllcyB0aGF0IHdlIG5lZWQgYXJlIHByb3Blcmx5IHN1 cHBvcnRlZA0KKyAgaWYgKENhcGFiaWxpdGllc1N1cHBvcnRlZCAoVXNiSW8pID09IEZBTFNFKSB7 DQorICAgIERFQlVHICgoREVCVUdfRVJST1IsICJEaXNwbGF5TGluayBHT1A6IERMIGRldmljZSBk ZXRlY3RlZCwgYnV0IGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgR09QIGZlYXR1cmVz LiBDaGVjayBmaXJtd2FyZSAvIGRldmljZSB2ZXJzaW9uP1xuIikpOw0KKyAgICByZXR1cm4gRkFM U0U7DQorICB9DQorDQorICByZXR1cm4gVFJVRTsNCit9DQorDQorDQorLyoqDQorICogUHJpbnRz IGEgYmxvY2sgb2YgdGV4dCBpbiB0aGUgZnJhbWVidWZmZXIgKGhlbHBlciBmdW5jdGlvbikuDQor ICogQHBhcmFtIFggICB4IGNvb3JkaW5hdGUNCisgKiBAcGFyYW0gWSAgIHkgY29vcmRpbmF0ZQ0K KyAqLw0KK1NUQVRJQyBWT0lEDQorRGlzcGxheUxpbmtQcmludFRleHRUb1NjcmVlbkludGVybmFs ICgNCisgIEVGSV9HUkFQSElDU19PVVRQVVRfUFJPVE9DT0wgKkdyYXBoaWNzT3V0cHV0LA0KKyAg VUlOVE4gWCwNCisgIFVJTlROIFksDQorICBJTiBDSEFSMTYgKkJ1ZmZlcg0KKyAgKQ0KK3sNCisg IEVGSV9TVEFUVVMgU3RhdHVzOw0KKyAgRUZJX0hJSV9GT05UX1BST1RPQ09MICpIaWlGb250Ow0K KyAgRUZJX0lNQUdFX09VVFBVVCAqQmx0Ow0KKyAgRUZJX0ZPTlRfRElTUExBWV9JTkZPIEZvbnRJ bmZvOw0KKyAgRUZJX0hJSV9PVVRfRkxBR1MgRmxhZ3M7DQorDQorICBCbHQgPSAoRUZJX0lNQUdF X09VVFBVVCopTlVMTDsNCisNCisgIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZp SGlpRm9udFByb3RvY29sR3VpZCwgTlVMTCwgKFZPSUQgKiopJkhpaUZvbnQpOw0KKyAgaWYgKCFF RklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgQmx0ID0gKEVGSV9JTUFHRV9PVVRQVVQqKUFsbG9j YXRlWmVyb1Bvb2wgKHNpemVvZiAoRUZJX0lNQUdFX09VVFBVVCkpOw0KKyAgICBCbHQtPldpZHRo ID0gKFVJTlQxNilHcmFwaGljc091dHB1dC0+TW9kZS0+SW5mby0+SG9yaXpvbnRhbFJlc29sdXRp b247DQorICAgIEJsdC0+SGVpZ2h0ID0gKFVJTlQxNilHcmFwaGljc091dHB1dC0+TW9kZS0+SW5m by0+VmVydGljYWxSZXNvbHV0aW9uOw0KKyAgICBCbHQtPkltYWdlLlNjcmVlbiA9IEdyYXBoaWNz T3V0cHV0Ow0KKw0KKyAgICBaZXJvTWVtICgmRm9udEluZm8sIHNpemVvZiAoRUZJX0ZPTlRfRElT UExBWV9JTkZPKSk7DQorICAgIEZvbnRJbmZvLkZvcmVncm91bmRDb2xvci5SZWQgPSAwOw0KKyAg ICBGb250SW5mby5Gb3JlZ3JvdW5kQ29sb3IuR3JlZW4gPSAwOw0KKyAgICBGb250SW5mby5Gb3Jl Z3JvdW5kQ29sb3IuQmx1ZSA9IDA7DQorICAgIEZvbnRJbmZvLkJhY2tncm91bmRDb2xvci5SZWQg PSAweGZmOw0KKyAgICBGb250SW5mby5CYWNrZ3JvdW5kQ29sb3IuR3JlZW4gPSAweGZmOw0KKyAg ICBGb250SW5mby5CYWNrZ3JvdW5kQ29sb3IuQmx1ZSA9IDB4ZmY7DQorDQorICAgIEZsYWdzID0g RUZJX0hJSV9JR05PUkVfSUZfTk9fR0xZUEggfCBFRklfSElJX09VVF9GTEFHX0NMSVAgfA0KKyAg ICAgICAgICAgIEVGSV9ISUlfT1VUX0ZMQUdfQ0xJUF9DTEVBTl9YIHwgRUZJX0hJSV9PVVRfRkxB R19DTElQX0NMRUFOX1kgfA0KKyAgICAgICAgICAgIEVGSV9ISUlfSUdOT1JFX0xJTkVfQlJFQUsg fCBFRklfSElJX0RJUkVDVF9UT19TQ1JFRU47DQorDQorICAgIFN0YXR1cyA9IEhpaUZvbnQtPlN0 cmluZ1RvSW1hZ2UgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpaUZvbnQsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgQnVmZmVyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZGb250SW5mbywNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAmQmx0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFgsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgWSwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAoRUZJX0hJSV9ST1dfSU5GTyoqKU5VTEwsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKFVJTlROKilOVUxMLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UTiop TlVMTCk7DQorICB9DQorDQorICBpZiAoQmx0ICE9IE5VTEwpIHsNCisgICAgRnJlZVBvb2wgKEJs dCk7DQorICB9DQorfQ0KKw0KKw0KKy8qKg0KKyogUHJpbnRzIGEgYmxvY2sgb2YgdGV4dCBpbiB0 aGUgZnJhbWVidWZmZXIuDQorKiBAcGFyYW0gWCAgICAgICB4IGNvb3JkaW5hdGUNCisqIEBwYXJh bSBZICAgICAgIHkgY29vcmRpbmF0ZQ0KKyogQHBhcmFtIEZvcm1hdCAgc3RyaW5nIGZvcm1hdCBz aW1pbGFyIHRvIHN0ZGxpYidzIHZzbnByaW50Zg0KKyogQHBhcmFtIC4uLiAgICAgYXJndW1lbnRz DQorKi8NCitWT0lEDQorRGxHb3BQcmludFRleHRUb1NjcmVlbiAoDQorICBFRklfR1JBUEhJQ1Nf T1VUUFVUX1BST1RPQ09MICpHcmFwaGljc091dHB1dCwNCisgIFVJTlROIFgsDQorICBVSU5UTiBZ LA0KKyAgSU4gQ09OU1QgQ0hBUjE2ICpGb3JtYXQsDQorICAuLi4NCisgICkNCit7DQorICBWQV9M SVNUIE1hcmtlcjsNCisgIENIQVIxNiAqQnVmZmVyOw0KKyAgVUlOVE4gQnVmZmVyU2l6ZTsNCisN CisgIEFTU0VSVCAoRm9ybWF0ICE9IE5VTEwpOw0KKyAgQVNTRVJUICgoKFVJTlROKSBGb3JtYXQg JiBCSVQwKSA9PSAwKTsNCisNCisgIFZBX1NUQVJUKE1hcmtlciwgRm9ybWF0KTsNCisNCisgIEJ1 ZmZlclNpemUgPSAoUGNkR2V0MzIgKFBjZFVlZmlMaWJNYXhQcmludEJ1ZmZlclNpemUpICsgMSkg KiBzaXplb2YgKENIQVIxNik7DQorDQorICBCdWZmZXIgPSAoQ0hBUjE2KilBbGxvY2F0ZVBvb2wg KEJ1ZmZlclNpemUpOw0KKyAgQVNTRVJUIChCdWZmZXIgIT0gTlVMTCk7DQorDQorICBVbmljb2Rl VlNQcmludCAoQnVmZmVyLCBCdWZmZXJTaXplLCBGb3JtYXQsIE1hcmtlcik7DQorDQorICBWQV9F TkQoTWFya2VyKTsNCisNCisgIERpc3BsYXlMaW5rUHJpbnRUZXh0VG9TY3JlZW5JbnRlcm5hbCAo R3JhcGhpY3NPdXRwdXQsIFgsIFksIEJ1ZmZlcik7DQorDQorICBGcmVlUG9vbCAoQnVmZmVyKTsN Cit9DQorDQorDQorLyoqDQorICogU29tZXRpbWVzIHBsYXRmb3JtcyBvbmx5IHdyaXRlIHRvIHRo ZSBmaXJzdCBHT1AgZGV2aWNlIHRoYXQgdGhleSBmaW5kLiBFbmFibGluZyB0aGlzIGZ1bmN0aW9u IGFsbG93cyB1cyB0byBjb3B5IHRoZSBwaXhlbHMgZnJvbSB0aGlzIGRldmljZS4NCisgKiBAcGFy YW0gVXNiRGlzcGxheUxpbmtEZXYNCisgKi8NCisjaWZkZWYgQ09QWV9QSVhFTFNfRlJPTV9QUklN QVJZX0dPUF9ERVZJQ0UNCitTVEFUSUMgVk9JRA0KK0Rpc3BsYXlMaW5rQ29weUZyb21QcmltYXJ5 R29wRGV2aWNlICgNCisgIElOIFVTQl9ESVNQTEFZTElOS19ERVYqIFVzYkRpc3BsYXlMaW5rRGV2 DQorICApDQorew0KKyAgVUlOVE4gSGFuZGxlQ291bnQ7DQorICBFRklfSEFORExFICpIYW5kbGVC dWZmZXI7DQorICBVSU5UTiBIYW5kbGVJbmRleDsNCisgIEVGSV9HUkFQSElDU19PVVRQVVRfUFJP VE9DT0wgKkdvcDsNCisNCisgIGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCisgICAgQnlQcm90 b2NvbCwNCisgICAgJmdFZmlHcmFwaGljc091dHB1dFByb3RvY29sR3VpZCwNCisgICAgTlVMTCwN CisgICAgJkhhbmRsZUNvdW50LA0KKyAgICAmSGFuZGxlQnVmZmVyKTsNCisNCisgIGZvciAoSGFu ZGxlSW5kZXggPSAwOyBIYW5kbGVJbmRleCA8IEhhbmRsZUNvdW50OyBIYW5kbGVJbmRleCsrKSB7 DQorICAgIGdCUy0+SGFuZGxlUHJvdG9jb2wgKEhhbmRsZUJ1ZmZlcltIYW5kbGVJbmRleF0sICZn RWZpR3JhcGhpY3NPdXRwdXRQcm90b2NvbEd1aWQsIChWT0lEKiopJkdvcCk7DQorICAgIGlmIChH b3AgIT0gJlVzYkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1dFByb3RvY29sICYmIEdvcC0+ TW9kZS0+RnJhbWVCdWZmZXJCYXNlICE9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pTlVM TCkgew0KKw0KKyNpZiAwDQorICAgICAgaWYgKFVzYkRpc3BsYXlMaW5rRGV2LT5Vc2VGaXhlZE1v ZGUpIHsNCisgICAgICBpZiAoKEdvcC0+TW9kZS0+SW5mby0+SG9yaXpvbnRhbFJlc29sdXRpb24g IT0gVXNiRGlzcGxheUxpbmtEZXYtPkdyYXBoaWNzT3V0cHV0UHJvdG9jb2wuTW9kZS0+SW5mby0+ SG9yaXpvbnRhbFJlc29sdXRpb24pDQorICAgICAgIHx8IChHb3AtPk1vZGUtPkluZm8tPlZlcnRp Y2FsUmVzb2x1dGlvbiAhPSBVc2JEaXNwbGF5TGlua0Rldi0+R3JhcGhpY3NPdXRwdXRQcm90b2Nv bC5Nb2RlLT5JbmZvLT5WZXJ0aWNhbFJlc29sdXRpb24pKQ0KKyAgICAgIHsNCisgICAgICAgIERp c3BsYXlMaW5rU2V0TW9kZSAoJlVzYkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1dFByb3Rv Y29sLCBHZXROZWFyZXN0TW9kZSAoR29wLT5Nb2RlLT5JbmZvLT5Ib3Jpem9udGFsUmVzb2x1dGlv biwgR29wLT5Nb2RlLT5JbmZvLT5WZXJ0aWNhbFJlc29sdXRpb24pKTsNCisgICAgICB9DQorICAg IH0NCisNCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBza2lwIHRoaXMgY29weSBi ZWNhdXNlIHRoZXJlIGlzIGNvcnJ1cHRpb24gb24gdGhlIHNjcmVlbg0KKyAgICBpZiAoR29wLT5N b2RlLT5JbmZvLT5Ib3Jpem9udGFsUmVzb2x1dGlvbiA9PSAxMDI0ICYmIEdvcC0+TW9kZS0+SW5m by0+VmVydGljYWxSZXNvbHV0aW9uID09IDc2OCkgew0KKyAgICAgIENPTlNUIFVJTlQzMiBjb3Jy dXB0aW9uQ3JjID0gMHg2QkIxOUMxNTsNCisgICAgICBVSU5UMzIgbGluZUNyYyA9IGNvcnJ1cHRp b25DcmM7DQorICAgICAgVUlOVE4gbGluZTsNCisgICAgICBmb3IgKGxpbmUgPSAxNTsgbGluZSA8 IDI1ICYmIGxpbmVDcmMgPT0gY29ycnVwdGlvbkNyYzsgbGluZSsrKSB7DQorICAgICAgICBsaW5l Q3JjID0gMDsNCisgICAgICAgIGdCUy0+Q2FsY3VsYXRlQ3JjMzIgKChjaGFyKilHb3AtPk1vZGUt PkZyYW1lQnVmZmVyQmFzZSArIChsaW5lICogNCAqIDEwMjQpLCAxMDI0LCAmbGluZUNyYyk7DQor ICAgICAgfQ0KKyAgICAgIGlmIChsaW5lQ3JjID09IGNvcnJ1cHRpb25DcmMpIHsNCisgICAgICAg IGlmIChVc2JEaXNwbGF5TGlua0Rldi0+U2hvd0RlYnVnKSB7DQorICAgICAgICAgIERsR29wUHJp bnRUZXh0VG9TY3JlZW4gKCZVc2JEaXNwbGF5TGlua0Rldi0+R3JhcGhpY3NPdXRwdXRQcm90b2Nv bCwgMzIsIDE5NiwgKENPTlNUIENIQVIxNiopTCJTa2lwcGluZyBDb3B5Iik7DQorICAgICAgICB9 DQorICAgICAgICBicmVhazsNCisgICAgICB9DQorICAgIH0NCisjZW5kaWYNCisNCisgICAgLy8g U2VlIGlmIHdlIG5lZWQgdG8gZG8gYSBzY3JlZW4gdXBkYXRlIC0gY2FsY3VsYXRlIGEgcmVhbGx5 IG5vZGR5IGhhc2ggdG8gc2VlIGlmIGFueSBzY3JlZW4gdXBkYXRlcyBoYXZlIGhhcHBlbmVkLg0K KyAgICBTVEFUSUMgVUlOVDMyIHByZXZmcmFtZUJ1ZmZlckhhc2ggPSAwOyAvLyA0IGJ5dGVzIHBl ciBwaXhlbA0KKyAgICBVSU5UMzIgY3VyckZyYW1lQnVmZmVySGFzaCA9IDA7DQorICAgIFVJTlRO IGk7DQorICAgIGZvciAoaSA9IDA7IGkgPCAoR29wLT5Nb2RlLT5JbmZvLT5Ib3Jpem9udGFsUmVz b2x1dGlvbiAqIEdvcC0+TW9kZS0+SW5mby0+VmVydGljYWxSZXNvbHV0aW9uKTsgaSsrKSB7DQor ICAgICAgY3VyckZyYW1lQnVmZmVySGFzaCArPSAoKFVJTlQzMiopKFVJTlROKUdvcC0+TW9kZS0+ RnJhbWVCdWZmZXJCYXNlKVtpXTsNCisgICAgfQ0KKw0KKyAgICBpZiAoY3VyckZyYW1lQnVmZmVy SGFzaCAhPSBwcmV2ZnJhbWVCdWZmZXJIYXNoKSB7DQorICAgICAgcHJldmZyYW1lQnVmZmVySGFz aCA9IGN1cnJGcmFtZUJ1ZmZlckhhc2g7DQorDQorICAgICAgRGlzcGxheUxpbmtCbHQgKA0KKyAg ICAgICAgJlVzYkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1dFByb3RvY29sLA0KKyAgICAg ICAgKEVGSV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMKikoVUlOVE4pR29wLT5Nb2RlLT5GcmFt ZUJ1ZmZlckJhc2UsDQorICAgICAgICBFZmlCbHRCdWZmZXJUb1ZpZGVvLA0KKyAgICAgICAgMCwN CisgICAgICAgIDAsDQorICAgICAgICAwLA0KKyAgICAgICAgMCwNCisgICAgICAgIEdvcC0+TW9k ZS0+SW5mby0+SG9yaXpvbnRhbFJlc29sdXRpb24sDQorICAgICAgICBHb3AtPk1vZGUtPkluZm8t PlZlcnRpY2FsUmVzb2x1dGlvbiwNCisgICAgICAgIDApOw0KKyAgICAgIH0NCisgICAgICBicmVh azsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQorfQ0KKyNl bmRpZiAvLyBDT1BZX1BJWEVMU19GUk9NX1BSSU1BUllfR09QX0RFVklDRQ0KKw0KKw0KKy8qKg0K KyAqIFRPRE86IFZlcmlmeSBpZiBpdCdzIHRydWUhDQorICogRXhpdCBmcm9tIGJvb3Qgc2Vydmlj ZXM6IHNpZ25hbCBoYW5kbGVyLg0KKyAqLw0KK1NUQVRJQyBWT0lEDQorRUZJQVBJDQorRGlzcGxh eUxpbmtEcml2ZXJFeGl0Qm9vdFNlcnZpY2VzICgNCisgIElOIEVGSV9FVkVOVCAgRXZlbnQsDQor ICBJTiBWT0lEICAgICAgICpDb250ZXh0DQorICApDQorew0KKyAgVVNCX0RJU1BMQVlMSU5LX0RF ViogVXNiRGlzcGxheUxpbmtEZXY7DQorICBVc2JEaXNwbGF5TGlua0RldiA9IChVU0JfRElTUExB WUxJTktfREVWKilDb250ZXh0Ow0KKw0KKyAgZ0JTLT5DbG9zZUV2ZW50IChVc2JEaXNwbGF5TGlu a0Rldi0+VGltZXJFdmVudCk7DQorfQ0KKw0KKy8qKg0KKyAqIFBlcmlvZGljIHNjcmVlbiB1cGRh dGU6IHRpbWVyIGNhbGxiYWNrLg0KKyAqLw0KK1ZPSUQNCitFRklBUEkNCitEaXNwbGF5TGlua1Bl cmlvZGljVGltZXIgKA0KKyAgICBJTiBFRklfRVZFTlQgRXZlbnQsDQorICAgIElOIFZPSUQqIENv bnRleHQNCisgICAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgU3RhdHVzOw0KKyAgVVNCX0RJU1BMQVlM SU5LX0RFViogVXNiRGlzcGxheUxpbmtEZXY7DQorDQorICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsN CisgIFVzYkRpc3BsYXlMaW5rRGV2ID0gKFVTQl9ESVNQTEFZTElOS19ERVYqKUNvbnRleHQ7DQor DQorICAvLyBEcm9wIG91dCBpZiB3ZSBoYXZlbid0IHNldCB0aGUgdmlkZW8gbW9kZSB1cCB5ZXQN CisgIGlmIChVc2JEaXNwbGF5TGlua0Rldi0+R3JhcGhpY3NPdXRwdXRQcm90b2NvbC5Nb2RlLT5N b2RlID09IEdSQVBISUNTX09VVFBVVF9JTlZBTElEX01PREVfTlVNQkVSKSB7DQorICAgIC8vIFJl c3RhcnQgdGhlIG9uZS1zaG90IHRpbWVyIHRvIHBvbGwgdGhlIHN0YXR1cyBhZ2Fpbi4NCisgICAg U3RhdHVzID0gZ0JTLT5TZXRUaW1lciAoVXNiRGlzcGxheUxpbmtEZXYtPlRpbWVyRXZlbnQsIFRp bWVyUmVsYXRpdmUsIERJU1BMQVlMSU5LX1NDUkVFTl9VUERBVEVfVElNRVJfUEVSSU9EKTsNCisg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIERFQlVHICgoREVCVUdfRVJST1Is ICJGYWlsZWQgdG8gY3JlYXRlIHRpbWVyLlxuIikpOw0KKyAgICB9DQorICAgIHJldHVybjsNCisg IH0NCisNCisjaWZkZWYgQ09QWV9QSVhFTFNfRlJPTV9QUklNQVJZX0dPUF9ERVZJQ0UNCisgIERp c3BsYXlMaW5rQ29weUZyb21QcmltYXJ5R29wRGV2aWNlIChVc2JEaXNwbGF5TGlua0Rldik7DQor I2VuZGlmIC8vIENPUFlfUElYRUxTX0ZST01fUFJJTUFSWV9HT1BfREVWSUNFDQorDQorICBpZiAo VXNiRGlzcGxheUxpbmtEZXYtPlNob3dCYW5kd2lkdGgpIHsNCisgICAgU1RBVElDIFVJTlROIENv dW50ID0gMDsNCisNCisgICAgaWYgKENvdW50KysgJSA1MCA9PSAwKSB7DQorICAgICAgRGxHb3BQ cmludFRleHRUb1NjcmVlbiAoJlVzYkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1dFByb3Rv Y29sLCAzMiwgNDgsIChDT05TVCBDSEFSMTYqKUwiICBCYW5kd2lkdGg6ICVkIE1CL3MgICAgIiwg VXNiRGlzcGxheUxpbmtEZXYtPkRhdGFTZW50ICogMTAwMDAwMDAgLyBESVNQTEFZTElOS19TQ1JF RU5fVVBEQVRFX1RJTUVSX1BFUklPRCAvIDUwIC8gMTAyNCAvIDEwMjQpOw0KKyAgICAgIFVzYkRp c3BsYXlMaW5rRGV2LT5EYXRhU2VudCA9IDA7DQorICAgIH0NCisgIH0NCisNCisgIGlmIChVc2JE aXNwbGF5TGlua0Rldi0+U2hvd1Rlc3RQYXR0ZXJuKQ0KKyAgew0KKyAgICBpZiAoVXNiRGlzcGxh eUxpbmtEZXYtPlNob3dUZXN0UGF0dGVybiA9PSA1KSB7DQorICAgICAgRGxHb3BTZW5kVGVzdFBh dHRlcm4gKFVzYkRpc3BsYXlMaW5rRGV2LCAwKTsNCisgICAgfSBlbHNlIGlmIChVc2JEaXNwbGF5 TGlua0Rldi0+U2hvd1Rlc3RQYXR0ZXJuID49IDEwKSB7DQorICAgICAgRGxHb3BTZW5kVGVzdFBh dHRlcm4gKFVzYkRpc3BsYXlMaW5rRGV2LCAxKTsNCisgICAgICBVc2JEaXNwbGF5TGlua0Rldi0+ U2hvd1Rlc3RQYXR0ZXJuID0gMDsNCisgICAgfQ0KKyAgICBVc2JEaXNwbGF5TGlua0Rldi0+U2hv d1Rlc3RQYXR0ZXJuKys7DQorDQorICB9DQorDQorICAvLyBTZW5kIHRoZSBsYXRlc3QgdmVyc2lv biBvZiB0aGUgZnJhbWUgYnVmZmVyIHRvIHRoZSBETCBkZXZpY2Ugb3ZlciBVU0INCisgIERsR29w U2VuZFNjcmVlblVwZGF0ZSAoVXNiRGlzcGxheUxpbmtEZXYpOw0KKw0KKyAgLy8gUmVzdGFydCB0 aGUgdGltZXIgbm93IHdlJ3ZlIGZpbmlzaGVkDQorICBTdGF0dXMgPSBnQlMtPlNldFRpbWVyIChV c2JEaXNwbGF5TGlua0Rldi0+VGltZXJFdmVudCwgVGltZXJSZWxhdGl2ZSwgRElTUExBWUxJTktf U0NSRUVOX1VQREFURV9USU1FUl9QRVJJT0QpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSB0aW1lci5cbiIp KTsNCisgIH0NCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovDQorLyogKioqKioqKioqKioqKioqKioqICAgU1RBUlQgT0YgRlVOQ1RJT05TIFdI SUNIIElNUExFTUVOVCBEUklWRVIgQklORElORyBJTlRFUkZBQ0UgICAgKioqKioqKioqKioqKioq KioqICovDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov DQorDQorLyoqDQorICBDaGVjayB3aGV0aGVyIFVTQiBEaXNwbGF5TGluayBkcml2ZXIgc3VwcG9y dHMgdGhpcyBkZXZpY2UuDQorDQorICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICAgVGhl IFVTQiBEaXNwbGF5TGluayBkcml2ZXIgYmluZGluZyBwcm90b2NvbC4NCisgIEBwYXJhbSAgQ29u dHJvbGxlciAgICAgICAgICAgICBUaGUgY29udHJvbGxlciBoYW5kbGUgdG8gY2hlY2suDQorICBA cGFyYW0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgVGhlIHJlbWFpbmluZyBkZXZpY2UgcGF0aC4N CisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgZHJpdmVyIHN1cHBvcnRz IHRoaXMgY29udHJvbGxlci4NCisgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICBUaGlz IGRldmljZSBpc24ndCBzdXBwb3J0ZWQuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0K K1VzYkRpc3BsYXlMaW5rRHJpdmVyQmluZGluZ1N1cHBvcnRlZCAoDQorICBJTiBFRklfRFJJVkVS X0JJTkRJTkdfUFJPVE9DT0wgICAgKlRoaXMsDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAg ICAgICAgICAgQ29udHJvbGxlciwNCisgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAg ICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAg U3RhdHVzOw0KKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAqVXNiSW87DQorDQorICBTdGF0dXMgPSBn QlMtPk9wZW5Qcm90b2NvbCAoDQorICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCisgICAg ICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAg IChWT0lEICoqKSAmVXNiSW8sDQorICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGlu Z0hhbmRsZSwNCisgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KKyAgICAgICAgICAgICAg ICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUik7DQorDQorICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAvLw0KKyAgLy8gVXNl IHRoZSBVU0IgSS9PIFByb3RvY29sIGludGVyZmFjZSB0byBjaGVjayB3aGV0aGVyIENvbnRyb2xs ZXIgaXMNCisgIC8vIGEgRGlzcGxheUxpbmsgZGV2aWNlIHRoYXQgY2FuIGJlIG1hbmFnZWQgYnkg dGhpcyBkcml2ZXIuDQorICAvLw0KKyAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KKyAgRUZJ X1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiBEdW1teUludGVyZmFjZURlc2NyaXB0b3I7DQorICBJ TlROIER1bW15QWx0U2V0dGluZ0luZGV4Ow0KKw0KKyAgaWYgKElzRExEaXJlY3RGYkNhcGFibGVJ bnRlcmZhY2UgKFVzYklvLCAmRHVtbXlJbnRlcmZhY2VEZXNjcmlwdG9yLCAmRHVtbXlBbHRTZXR0 aW5nSW5kZXgpKXsNCisgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQorICB9DQorDQorICBnQlMt PkNsb3NlUHJvdG9jb2wgKA0KKyAgICAgICAgQ29udHJvbGxlciwNCisgICAgICAgICZnRWZpVXNi SW9Qcm90b2NvbEd1aWQsDQorICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAg ICAgICAgQ29udHJvbGxlcik7DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCisvKioN CisgIFN0YXJ0cyB0aGUgRGlzcGxheUxpbmsgZGV2aWNlIHdpdGggdGhpcyBkcml2ZXIuDQorDQor ICBUaGlzIGZ1bmN0aW9uIGNvbnN1bWVzIFVTQiBJL08gUHJvdG9jb2wsIGludGlhbGl6ZXMgVVNC IERpc3BsYXlMaW5rIGRldmljZSwNCisgIGluc3RhbGxzIEdyYXBoaWNzIE91dHB1dCBQcm90b2Nv bA0KKyAgVHJhbnNmZXIgdG8gbWFuYWdlIHRoZSBVU0IgRGlzcGxheUxpbmsgZGV2aWNlLg0KKw0K KyAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgVGhlIFVTQiBEaXNwbGF5TGluayBkcml2 ZXIgYmluZGluZyBpbnN0YW5jZS4NCisgIEBwYXJhbSAgQ29udHJvbGxlciAgICAgICAgICAgIEhh bmRsZSBvZiBkZXZpY2UgdG8gYmluZCBkcml2ZXIgdG8uDQorICBAcGFyYW0gIFJlbWFpbmluZ0Rl dmljZVBhdGggICBPcHRpb25hbCBwYXJhbWV0ZXIgdXNlIHRvIHBpY2sgYSBzcGVjaWZpYyBjaGls ZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRvIHN0YXJ0Lg0KKw0K KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhp cyBkZXZpY2UuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGlzIGRyaXZlciBk b2VzIG5vdCBzdXBwb3J0IHRoaXMgZGV2aWNlLg0KKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICAgICAgVGhpcyBkcml2ZXIgY2Fubm90IGJlIHN0YXJ0ZWQgZHVlIHRvIGRldmljZSBFcnJvci4N CisgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIENhbid0IGFsbG9jYXRlIG1lbW9yeSBy ZXNvdXJjZXMuDQorICBAcmV0dmFsIEVGSV9BTFJFQURZX1NUQVJURUQgICBUaGlzIGRyaXZlciBo YXMgYmVlbiBzdGFydGVkLg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitVc2JEaXNw bGF5TGlua0RyaXZlckJpbmRpbmdTdGFydCAoDQorICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJP VE9DT0wgICpUaGlzLA0KKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9s bGVyLA0KKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNl UGF0aA0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KKyAgVVNCX0RJU1BMQVlMSU5LX0RFViAgICAgICAgICAgICAqVXNiRGlzcGxheUxpbmtEZXY7 DQorICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZHBvaW50TnVtYmVyOw0KKyAg RUZJX1VTQl9FTkRQT0lOVF9ERVNDUklQVE9SICAgICBFbmRwb2ludERlc2NyaXB0b3I7DQorICBV SU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KKyAgQk9PTEVBTiAgICAgICAg ICAgICAgICAgICAgICAgICBGb3VuZE91dDsNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg ICAgICAgRm91bmRJbjsNCisgIEVGSV9UUEwgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZ2lu YWxUUEw7DQorICBJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdFNldHRpbmdJbmRl eDsNCisNCisgIE9yaWdpbmFsVFBMID0gZ0JTLT5SYWlzZVRQTCAoVFBMX0NBTExCQUNLKTsNCisN CisgIFVzYkRpc3BsYXlMaW5rRGV2ID0gKFVTQl9ESVNQTEFZTElOS19ERVYqKUFsbG9jYXRlWmVy b1Bvb2wgKHNpemVvZiAoVVNCX0RJU1BMQVlMSU5LX0RFVikpOw0KKyAgaWYgKFVzYkRpc3BsYXlM aW5rRGV2ID09IE5VTEwpIHsNCisgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkRldmljZSBpbml0 aWFsaWFsaXNhdGlvbiAtIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZS5cbiIp KTsNCisgICAgZ0JTLT5SZXN0b3JlVFBMIChPcmlnaW5hbFRQTCk7DQorICAgIHJldHVybiBFRklf T1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisgIFVzYkRpc3BsYXlMaW5rRGV2LT5TaWduYXR1 cmUgPSBVU0JfRElTUExBWUxJTktfREVWX1NJR05BVFVSRTsNCisNCisgIFVzYkRpc3BsYXlMaW5r RGV2LT5TaG93QmFuZHdpZHRoID0gUmVhZEVudmlyb25tZW50Qm9vbCAoTCJEaXNwbGF5TGlua1No b3dCYW5kd2lkdGgiLCBGQUxTRSk7DQorICBVc2JEaXNwbGF5TGlua0Rldi0+U2hvd1Rlc3RQYXR0 ZXJuID0gUmVhZEVudmlyb25tZW50Qm9vbCAoTCJEaXNwbGF5TGlua1Nob3dUZXN0UGF0dGVybnMi LCBGQUxTRSk7DQorDQorICAvLw0KKyAgLy8gT3BlbiBVU0IgSS9PIFByb3RvY29sDQorICAvLw0K KyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KKyAgICAgIENvbnRyb2xsZXIsDQorICAg ICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCisgICAgICAoVk9JRCAqKikgJlVzYkRpc3BsYXlM aW5rRGV2LT5Vc2JJbywNCisgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAg IENvbnRyb2xsZXIsDQorICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSKTsNCisNCisg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZh aWxlZCB0byBvcGVuIHVzYmlvIHByb3RvY29sLiBJcyBVU0IgY29ycmVjdGx5IHN1cHBvcnRlZCBv biB0aGlzIHBsYXRmb3JtPy5cbiIpKTsNCisgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0K KyAgICBnb3RvIEVycm9yRXhpdDI7DQorICB9DQorDQorICBpZiAoIUlzRExEaXJlY3RGYkNhcGFi bGVJbnRlcmZhY2UgKFVzYkRpc3BsYXlMaW5rRGV2LT5Vc2JJbywgJlVzYkRpc3BsYXlMaW5rRGV2 LT5JbnRlcmZhY2VEZXNjcmlwdG9yLCAmYWx0U2V0dGluZ0luZGV4KSkgew0KKyAgICBTdGF0dXMg PSBFRklfVU5TVVBQT1JURUQ7DQorICAgIGdvdG8gRXJyb3JFeGl0NDsNCisgIH0NCisNCisgIFN0 YXR1cyA9IFNlbGVjdEFsdFNldHRpbmcgKFVzYkRpc3BsYXlMaW5rRGV2LT5Vc2JJbywgYWx0U2V0 dGluZ0luZGV4KTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChE RUJVR19FUlJPUiwgIkRpc3BsYXlMaW5rIEdPUDogRmFpbGVkIHRvIHNlbGVjdCBhbHRlcm5hdGUg c2V0dGluZy5cbiIpKTsNCisgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KKyAgICBnb3Rv IEVycm9yRXhpdDQ7DQorICB9DQorDQorICAvLw0KKyAgLy8gUGFyc2UgZW5kcG9pbnQgZGVzY3Jp cHRvcg0KKyAgLy8NCisgIEVuZHBvaW50TnVtYmVyID0gVXNiRGlzcGxheUxpbmtEZXYtPkludGVy ZmFjZURlc2NyaXB0b3IuTnVtRW5kcG9pbnRzOw0KKw0KKyAgLy8NCisgIC8vIFRyYXZlcnNlIGVu ZHBvaW50cyB0byBmaW5kIGJ1bGsgZW5kcG9pbnQNCisgIC8vDQorICBGb3VuZE91dCA9IEZBTFNF Ow0KKyAgRm91bmRJbiA9IEZBTFNFOw0KKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRW5kcG9p bnROdW1iZXI7IEluZGV4KyspIHsNCisgICAgVXNiRGlzcGxheUxpbmtEZXYtPlVzYklvLT5Vc2JH ZXRFbmRwb2ludERlc2NyaXB0b3IgKA0KKyAgICAgICAgICAgICBVc2JEaXNwbGF5TGlua0Rldi0+ VXNiSW8sDQorICAgICAgICAgICAgIEluZGV4LA0KKyAgICAgICAgICAgICAmRW5kcG9pbnREZXNj cmlwdG9yKTsNCisNCisgICAgaWYgKChFbmRwb2ludERlc2NyaXB0b3IuQXR0cmlidXRlcyAmIChC SVQwIHwgQklUMSkpID09IFVTQl9FTkRQT0lOVF9CVUxLKSB7DQorICAgICAgaWYgKCFGb3VuZE91 dCAmJiAoRW5kcG9pbnREZXNjcmlwdG9yLkVuZHBvaW50QWRkcmVzcyAmIEJJVDcpID09IDApIHsN CisgICAgICAgIENvcHlNZW0gKCZVc2JEaXNwbGF5TGlua0Rldi0+QnVsa091dEVuZHBvaW50RGVz Y3JpcHRvciwgJkVuZHBvaW50RGVzY3JpcHRvciwgc2l6ZW9mIChFbmRwb2ludERlc2NyaXB0b3Ip KTsNCisgICAgICAgIEZvdW5kT3V0ID0gVFJVRTsNCisgICAgICB9IGVsc2UgaWYgKCFGb3VuZElu ICYmIChFbmRwb2ludERlc2NyaXB0b3IuRW5kcG9pbnRBZGRyZXNzICYgQklUNykgPT0gQklUNykg ew0KKyAgICAgICAgQ29weU1lbSAoJlVzYkRpc3BsYXlMaW5rRGV2LT5CdWxrSW5FbmRwb2ludERl c2NyaXB0b3IsICZFbmRwb2ludERlc2NyaXB0b3IsIHNpemVvZiAoRW5kcG9pbnREZXNjcmlwdG9y KSk7DQorICAgICAgICBGb3VuZEluID0gVFJVRTsNCisgICAgICB9DQorICAgIH0NCisgIH0NCisN CisgIGlmIChGb3VuZE91dCA9PSBGQUxTRSkgew0KKyAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JU RUQ7DQorICAgIERFQlVHICgoREVCVUdfRVJST1IsICJObyBlbmRwb2ludHMgZm91bmQuICBOdW0g ZW5kcG9pbnRzIHNlYXJjaGVkID0gJWQuXG4iLCBFbmRwb2ludE51bWJlcikpOw0KKyAgICBnb3Rv IEVycm9yRXhpdDQ7DQorICB9DQorDQorICBTdGF0dXMgPSBEbFJlYWRFZGlkIChVc2JEaXNwbGF5 TGlua0Rldik7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoREVC VUdfRVJST1IsICJGYWlsZWQgdG8gcmVhZCBtb25pdG9yIEVESUQgZnJvbSBEaXNwbGF5TGluayBk ZXZpY2UgKGNvZGUgJXIpXG4iLCBTdGF0dXMpKTsNCisgICAgZ290byBFcnJvckV4aXQ3Ow0KKyAg fQ0KKw0KKyAgU3RhdHVzID0gSW5pdGlhbGl6ZVVzYkRpc3BsYXlMaW5rRGV2aWNlIChVc2JEaXNw bGF5TGlua0Rldik7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgo REVCVUdfRVJST1IsICJGYWlsZWQgdG8gaW5pdGlhbGlzZSBEaXNwbGF5TGluayBkZXZpY2UgKGNv ZGUgJXIpXG4iLCBTdGF0dXMpKTsNCisgICAgZ290byBFcnJvckV4aXQ3Ow0KKyAgfQ0KKw0KKyAg U3RhdHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KKyAgICAg ICZDb250cm9sbGVyLA0KKyAgICAgICZnRWZpR3JhcGhpY3NPdXRwdXRQcm90b2NvbEd1aWQsDQor ICAgICAgJlVzYkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1dFByb3RvY29sLA0KKyAgICAg ICZnRWZpRWRpZERpc2NvdmVyZWRQcm90b2NvbEd1aWQsDQorICAgICAgJlVzYkRpc3BsYXlMaW5r RGV2LT5FZGlkRGlzY292ZXJlZCwNCisgICAgICAmZ0VmaUVkaWRBY3RpdmVQcm90b2NvbEd1aWQs DQorICAgICAgJlVzYkRpc3BsYXlMaW5rRGV2LT5FZGlkQWN0aXZlLA0KKyAgICAgIE5VTEwpOw0K Kw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBERUJVRyAoKERFQlVHX0VSUk9S LCAiRmFpbGVkIHRvIGluc3RhbGwgR3JhcGhpY3MgT3V0cHV0IGFuZCBFRElEIHByb3RvY29sIGlu dGVyZmFjZXMgLSBkcml2ZXIgbm90IGluc3RhbGxlZCBjb3JyZWN0bHkgLSAlclxuIiwgU3RhdHVz KSk7DQorICAgIGdvdG8gRXJyb3JFeGl0ODsNCisgIH0NCisNCisgIFVzYkRpc3BsYXlMaW5rRGV2 LT5Db250cm9sbGVyTmFtZVRhYmxlID0gKEVGSV9VTklDT0RFX1NUUklOR19UQUJMRSopTlVMTDsN CisNCisgIEFkZFVuaWNvZGVTdHJpbmcyICgNCisgICAgImVuZyIsDQorICAgIG1Vc2JEaXNwbGF5 TGlua0NvbXBvbmVudE5hbWUuU3VwcG9ydGVkTGFuZ3VhZ2VzLA0KKyAgICAmVXNiRGlzcGxheUxp bmtEZXYtPkNvbnRyb2xsZXJOYW1lVGFibGUsDQorICAgIChDT05TVCBDSEFSMTYqKUwiR2VuZXJp YyBVc2IgRGlzcGxheUxpbmsiLA0KKyAgICBUUlVFKTsNCisNCisgIEFkZFVuaWNvZGVTdHJpbmcy ICgNCisgICAgImVuIiwNCisgICAgbVVzYkRpc3BsYXlMaW5rQ29tcG9uZW50TmFtZTIuU3VwcG9y dGVkTGFuZ3VhZ2VzLA0KKyAgICAmVXNiRGlzcGxheUxpbmtEZXYtPkNvbnRyb2xsZXJOYW1lVGFi bGUsDQorICAgIChDT05TVCBDSEFSMTYqKUwiR2VuZXJpYyBVc2IgRGlzcGxheUxpbmsiLA0KKyAg ICBGQUxTRSk7DQorDQorICAvLw0KKyAgLy8gU2V0dXAgYSBwZXJpb2RpYyB0aW1lcg0KKyAgLy8N CisgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnQgKA0KKyAgICAgICAgICAgICAgICAgIEVWVF9U SU1FUiB8IEVWVF9OT1RJRllfU0lHTkFMLA0KKyAgICAgICAgICAgICAgICAgIFRQTF9DQUxMQkFD SywNCisgICAgICAgICAgICAgICAgICBEaXNwbGF5TGlua1BlcmlvZGljVGltZXIsDQorICAgICAg ICAgICAgICAgICAgVXNiRGlzcGxheUxpbmtEZXYsDQorICAgICAgICAgICAgICAgICAgJlVzYkRp c3BsYXlMaW5rRGV2LT5UaW1lckV2ZW50KTsNCisNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCisgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICAgIERFQlVHICgoREVC VUdfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIHNjcmVlZW4gdXBkYXRlIHBvbGxpbmcgZXZlbnQu XG4iKSk7DQorICAgIGdvdG8gRXJyb3JFeGl0ODsNCisgIH0NCisNCisgIC8vIFN0YXJ0IG9uZS1z aG90IHRpbWVyLiBUaGUgcmVuZGVyaW5nIG9wZXJhdGlvbnMgY2FuIHRha2UgcXVpdGUgYSBsb25n IHRpbWUsIHNvIHdlDQorICAvLyBkb24ndCB3YW50IGFub3RoZXIgdGltZXIgZXZlbnQgdG8gaGFw cGVuIHVudGlsIHdlIGhhdmUgZmluaXNoZWQ7IHNvIHdlJ2xsIHJlc3RhcnQNCisgIC8vIHRoZSB0 aW1lciBmcm9tIERpc3BsYXlMaW5rUGVyaW9kaWNUaW1lciwgdGhlIGV2ZW50IGhhbmRsZXIgZnVu Y3Rpb24uDQorICBTdGF0dXMgPSBnQlMtPlNldFRpbWVyIChVc2JEaXNwbGF5TGlua0Rldi0+VGlt ZXJFdmVudCwgVGltZXJSZWxhdGl2ZSwgRElTUExBWUxJTktfU0NSRUVOX1VQREFURV9USU1FUl9Q RVJJT0QpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBTdGF0dXMgPSBFRklf T1VUX09GX1JFU09VUkNFUzsNCisgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZhaWxlZCB0byBj cmVhdGUgc2NyZWVuIHVwZGF0ZSBwb2xsaW5nIHRpbWVyLlxuIikpOw0KKyAgICBnb3RvIEVycm9y RXhpdDg7DQorICB9DQorDQorICBTdGF0dXMgPSBnQlMtPkNyZWF0ZUV2ZW50RXggKA0KKyAgICAg ICAgICAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFMLA0KKyAgICAgICAgICAgICAgICAgIFRQTF9O T1RJRlksDQorICAgICAgICAgICAgICAgICAgRGlzcGxheUxpbmtEcml2ZXJFeGl0Qm9vdFNlcnZp Y2VzLA0KKyAgICAgICAgICAgICAgICAgIFVzYkRpc3BsYXlMaW5rRGV2LA0KKyAgICAgICAgICAg ICAgICAgICZnRWZpRXZlbnRFeGl0Qm9vdFNlcnZpY2VzR3VpZCwNCisgICAgICAgICAgICAgICAg ICAmVXNiRGlzcGxheUxpbmtEZXYtPkRyaXZlckV4aXRCb290U2VydmljZXNFdmVudCk7DQorDQor ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBldmVu dCBmb3IgYm9vdGV4aXQuXG4iKSk7DQorICAgIGdvdG8gRXJyb3JFeGl0ODsNCisgIH0NCisNCisg IGdCUy0+UmVzdG9yZVRQTCAoT3JpZ2luYWxUUEwpOw0KKw0KKyAgREVCVUcgKChERUJVR19JTkZP LCAiRGlzcGxheUxpbmsgR09QIGRyaXZlciBzdWNjZXNzZnVsbHkgYm91bmQgdG8gZGV2aWNlLlxu IikpOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKw0KKyAgLy8NCisgIC8vIEVycm9yIGhh bmRsZXINCisgIC8vDQorIEVycm9yRXhpdDg6DQorIEVycm9yRXhpdDc6DQorIEVycm9yRXhpdDQ6 DQorICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KKyAgIENvbnRyb2xsZXIsDQorICAgJmdFZmlVc2JJ b1Byb3RvY29sR3VpZCwNCisgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgIENvbnRy b2xsZXIpOw0KKw0KKyBFcnJvckV4aXQyOg0KKyAgaWYgKFVzYkRpc3BsYXlMaW5rRGV2ICE9IE5V TEwpIHsNCisgICAgRnJlZVBvb2wgKFVzYkRpc3BsYXlMaW5rRGV2KTsNCisgICAgVXNiRGlzcGxh eUxpbmtEZXYgPSAoVVNCX0RJU1BMQVlMSU5LX0RFViopTlVMTDsNCisgIH0NCisNCisgIERFQlVH ICgoREVCVUdfRVJST1IsICJFeGl0aW5nIC0gRmFpbGVkIHRvIGluaXRpYWxpc2UgZHJpdmVyLlxu IikpOw0KKw0KKyAgZ0JTLT5SZXN0b3JlVFBMIChPcmlnaW5hbFRQTCk7DQorICByZXR1cm4gU3Rh dHVzOw0KK30NCisNCisvKioNCitFbnRyeXBvaW50IG9mIFVTQiBEaXNwbGF5TGluayBEcml2ZXIu DQorDQorVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnlwb2ludCBvZiBhIGNvbWJpbmVkIFVTQiBE aXNwbGF5TGluayBHT1AgRHJpdmVyLiBJdCBpbnN0YWxscyBEcml2ZXIgQmluZGluZw0KK1Byb3Rv Y29scyB0b2dldGhlciB3aXRoIENvbXBvbmVudCBOYW1lIFByb3RvY29scy4NCisNCitAcGFyYW0g IEltYWdlSGFuZGxlICAgICAgIFRoZSBmaXJtd2FyZSBhbGxvY2F0ZWQgaGFuZGxlIGZvciB0aGUg RUZJIGltYWdlLg0KK0BwYXJhbSAgU3lzdGVtVGFibGUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBF RkkgU3lzdGVtIFRhYmxlLg0KK0BwYXJhbSAgRHJpdmVyQmluZGluZ0hhbmRsZSAgVGhlIERyaXZl ciBiaW5kaW5nIGhhbmRsZQ0KKw0KK0ByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIGVudHJ5 IHBvaW50IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisNCisqKi8NCitFRklfU1RBVFVTDQor RUZJQVBJDQorVXNiRGlzcGxheUxpbmtEcml2ZXJDb21iaW5lZEdvcEJpbmRpbmdFbnRyeVBvaW50 ICgNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgIEltYWdlSGFuZGxlLA0KKyAgSU4gRUZJX1NZ U1RFTV9UQUJMRSAgICAgKlN5c3RlbVRhYmxlLA0KKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAg RHJpdmVyQmluZGluZ0hhbmRsZQ0KKykNCit7DQorICBFRklfU1RBVFVTIFN0YXR1czsNCisNCisg IFN0YXR1cyA9IEVmaUxpYkluc3RhbGxEcml2ZXJCaW5kaW5nQ29tcG9uZW50TmFtZTIgKA0KKyAg ICBJbWFnZUhhbmRsZSwNCisgICAgU3lzdGVtVGFibGUsDQorICAgICZnVXNiRGlzcGxheUxpbmtE cml2ZXJCaW5kaW5nLA0KKyAgICBEcml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAmbVVzYkRpc3Bs YXlMaW5rQ29tcG9uZW50TmFtZSwNCisgICAgJm1Vc2JEaXNwbGF5TGlua0NvbXBvbmVudE5hbWUy KTsNCisNCisgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQorDQorICByZXR1cm4gRUZJX1NV Q0NFU1M7DQorfQ0KKw0KKw0KKy8qKg0KK0VudHJ5cG9pbnQgb2YgVVNCIERpc3BsYXlMaW5rIERy aXZlci4NCisNCitUaGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeXBvaW50IG9mIFVTQiBEaXNwbGF5 TGluayBEcml2ZXIuIEl0IGluc3RhbGxzIERyaXZlciBCaW5kaW5nDQorUHJvdG9jb2xzIHRvZ2V0 aGVyIHdpdGggQ29tcG9uZW50IE5hbWUgUHJvdG9jb2xzLg0KKw0KK0BwYXJhbSAgSW1hZ2VIYW5k bGUgICAgICAgVGhlIGZpcm13YXJlIGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBFRkkgaW1hZ2Uu DQorQHBhcmFtICBTeXN0ZW1UYWJsZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSSBTeXN0ZW0g VGFibGUuDQorDQorQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUaGUgZW50cnkgcG9pbnQgaXMg ZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitV c2JEaXNwbGF5TGlua0RyaXZlckJpbmRpbmdFbnRyeVBvaW50ICgNCisgIElOIEVGSV9IQU5ETEUg ICAgICAgICAgIEltYWdlSGFuZGxlLA0KKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgICAgKlN5c3Rl bVRhYmxlDQorKQ0KK3sNCisgIHJldHVybiBVc2JEaXNwbGF5TGlua0RyaXZlckNvbWJpbmVkR29w QmluZGluZ0VudHJ5UG9pbnQgKEltYWdlSGFuZGxlLCBTeXN0ZW1UYWJsZSwgSW1hZ2VIYW5kbGUp Ow0KK30NCisNCisNCisvKioNCitVbmxvYWRzIGFuIGltYWdlLg0KK0BwYXJhbSAgSW1hZ2VIYW5k bGUgICAgICAgICAgIEhhbmRsZSB0aGF0IGlkZW50aWZpZXMgdGhlIGltYWdlIHRvIGJlIHVubG9h ZGVkLg0KK0ByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBpbWFnZSBoYXMgYmVlbiB1 bmxvYWRlZC4NCitAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbWFnZUhhbmRsZSBpcyBu b3QgYSB2YWxpZCBpbWFnZSBoYW5kbGUuDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1Vz YkRpc3BsYXlMaW5rRHJpdmVyQ29tYmluZWRHb3BVbmxvYWQgKA0KKyAgSU4gRUZJX0hBTkRMRSAg SW1hZ2VIYW5kbGUNCispDQorew0KKyAgRUZJX1NUQVRVUyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7 DQorICBFRklfU1RBVFVTICBoYW5kbGVEaXNjb25uZWN0U3RhdHVzOw0KKyAgRUZJX0hBTkRMRSAg KkhhbmRsZUJ1ZmZlcjsNCisgIFVJTlROICAgICAgIEhhbmRsZUNvdW50Ow0KKyAgVUlOVE4gICAg ICAgSW5kZXg7DQorDQorICAvLw0KKyAgLy8gUmV0cmlldmUgYXJyYXkgb2YgYWxsIGhhbmRsZXMg aW4gdGhlIGhhbmRsZSBkYXRhYmFzZQ0KKyAgLy8NCisgIGhhbmRsZURpc2Nvbm5lY3RTdGF0dXMg PSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQorICAgIEFsbEhhbmRsZXMsDQorICAgIE5VTEws DQorICAgIE5VTEwsDQorICAgICZIYW5kbGVDb3VudCwNCisgICAgJkhhbmRsZUJ1ZmZlcg0KKyAg KTsNCisgIGlmICghIEVGSV9FUlJPUiAoaGFuZGxlRGlzY29ubmVjdFN0YXR1cykpIHsNCisgICAg Ly8NCisgICAgLy8gRGlzY29ubmVjdCB0aGUgY3VycmVudCBkcml2ZXIgZnJvbSBoYW5kbGVzIGlu IHRoZSBoYW5kbGUgZGF0YWJhc2UNCisgICAgLy8NCisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCisgICAgICBTdGF0dXMgPSBnQlMtPkRpc2Nvbm5l Y3RDb250cm9sbGVyIChIYW5kbGVCdWZmZXJbSW5kZXhdLCBnSW1hZ2VIYW5kbGUsIE5VTEwpOw0K KyAgICB9DQorICAgIC8vDQorICAgIC8vIEZyZWUgdGhlIGFycmF5IG9mIGhhbmRsZXMNCisgICAg Ly8NCisgICAgaWYgKEhhbmRsZUJ1ZmZlciAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAgRnJlZVBv b2wgKEhhbmRsZUJ1ZmZlcik7DQorICAgIH0NCisgIH0NCisNCisgIC8vIEV2ZW4gaWYgd2UgZGlk bid0IG1hbmFnZSB0byBkaXNjb25uZWN0IHRoZSBoYW5kbGVzLCB0cnkgdG8gdW5pbnN0YWxsIHRo ZSBwcm90b2NvbHMNCisgIC8vDQorICAvLyBVbmluc3RhbGwgcHJvdG9jb2xzIGluc3RhbGxlZCBp biB0aGUgZHJpdmVyIGVudHJ5IHBvaW50DQorICAvLw0KKyAgU3RhdHVzID0gZ0JTLT5Vbmluc3Rh bGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQorICAgIEltYWdlSGFuZGxlLA0KKyAgICAm Z0VmaURyaXZlckJpbmRpbmdQcm90b2NvbEd1aWQsDQorICAgICZnVXNiRGlzcGxheUxpbmtEcml2 ZXJCaW5kaW5nLA0KKyAgICAmZ0VmaUNvbXBvbmVudE5hbWVQcm90b2NvbEd1aWQsDQorICAgICZt VXNiRGlzcGxheUxpbmtDb21wb25lbnROYW1lLA0KKyAgICAmZ0VmaUNvbXBvbmVudE5hbWUyUHJv dG9jb2xHdWlkLA0KKyAgICAmbVVzYkRpc3BsYXlMaW5rQ29tcG9uZW50TmFtZTIsDQorICAgIE5V TEwNCisgICk7DQorDQorICBpZiAoRUZJX0VSUk9SIChoYW5kbGVEaXNjb25uZWN0U3RhdHVzKSkN CisgIHsNCisgICAgcmV0dXJuIGhhbmRsZURpc2Nvbm5lY3RTdGF0dXM7DQorICB9DQorICByZXR1 cm4gU3RhdHVzOw0KK30NCisNCisNCisvKioNCisgIFN0b3AgdGhlIFVTQiBEaXNwbGF5TGluayBk ZXZpY2UgaGFuZGxlZCBieSB0aGlzIGRyaXZlci4NCisNCisgIEBwYXJhbSAgVGhpcyAgICAgICAg ICAgICAgICAgICBUaGUgVVNCIERpc3BsYXlMaW5rIGRyaXZlciBiaW5kaW5nIHByb3RvY29sLg0K KyAgQHBhcmFtICBDb250cm9sbGVyICAgICAgICAgICAgIFRoZSBjb250cm9sbGVyIHRvIHJlbGVh c2UuDQorICBAcGFyYW0gIE51bWJlck9mQ2hpbGRyZW4gICAgICAgVGhlIG51bWJlciBvZiBoYW5k bGVzIGluIENoaWxkSGFuZGxlQnVmZmVyLg0KKyAgQHBhcmFtICBDaGlsZEhhbmRsZUJ1ZmZlciAg ICAgIFRoZSBhcnJheSBvZiBjaGlsZCBoYW5kbGUuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICAgVGhlIGRldmljZSB3YXMgc3RvcHBlZC4NCisgIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgICAgICBTaW1wbGUgUG9pbnRlciBQcm90b2NvbCBpcyBub3QgaW5zdGFsbGVkIG9u IENvbnRyb2xsZXIuDQorICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgRmFpbCB0byB1 bmluc3RhbGwgcHJvdG9jb2xzIGF0dGFjaGVkIG9uIHRoZSBkZXZpY2UuDQorDQorKiovDQorRUZJ X1NUQVRVUw0KK0VGSUFQSQ0KK1VzYkRpc3BsYXlMaW5rRHJpdmVyQmluZGluZ1N0b3AgKA0KKyAg SU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgICpUaGlzLA0KKyAgSU4gIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQorICBJTiAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCisgIElOICBFRklfSEFORExFICAgICAg ICAgICAgICAgICAgICAqQ2hpbGRIYW5kbGVCdWZmZXINCisgICkNCit7DQorICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgVVNCX0RJU1BMQVlMSU5LX0RFViAg ICAgICAgICAgICAgICpVc2JEaXNwbGF5TGlua0RldjsNCisgIEVGSV9HUkFQSElDU19PVVRQVVRf UFJPVE9DT0wgICAgICAqR3JhcGhpY3NPdXRwdXRQcm90b2NvbDsNCisNCisgIFN0YXR1cyA9IGdC Uy0+T3BlblByb3RvY29sICgNCisgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KKyAgICAg ICAgICAgICAgICAgICZnRWZpR3JhcGhpY3NPdXRwdXRQcm90b2NvbEd1aWQsDQorICAgICAgICAg ICAgICAgICAgKFZPSUQgKiopICZHcmFwaGljc091dHB1dFByb3RvY29sLA0KKyAgICAgICAgICAg ICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgQ29u dHJvbGxlciwNCisgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9D T0wpOw0KKw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gRUZJX1VO U1VQUE9SVEVEOw0KKyAgfQ0KKw0KKyAgVXNiRGlzcGxheUxpbmtEZXYgPSBVU0JfRElTUExBWUxJ TktfREVWX0ZST01fR1JBUEhJQ1NfT1VUUFVUX1BST1RPQ09MKEdyYXBoaWNzT3V0cHV0UHJvdG9j b2wpOw0KKw0KKyAgLy8gUmVzZXQgdGhlIHZpZGVvIG1vZGUgdG8gY2xlYXIgdGhlIGRpc3BsYXku IERvbid0IGRyb3Agb3V0IGlmIHRoZXJlIGlzIGEgcHJvYmxlbSwganVzdCBwcmVzcyBvbi4NCisg IC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgYWxzbyBjbGVhciB0aGUgZnJhbWUgYnVmZmVyLCBhcyB0 aGUgc2NyZWVuIGJ1ZmZlciB3aWxsIGJlIHJlLWFsbG9jYXRlZCB3aXRoIEFsbG9jYXRlWmVyb1Bv b2wuDQorICBpZiAoKEdyYXBoaWNzT3V0cHV0UHJvdG9jb2wtPk1vZGUgIT0gTlVMTCkgJiYNCisg ICAgICAoR3JhcGhpY3NPdXRwdXRQcm90b2NvbC0+TW9kZS0+TW9kZSAhPSBHUkFQSElDU19PVVRQ VVRfSU5WQUxJRF9NT0RFX05VTUJFUikpIHsNCisgICAgU3RhdHVzID0gRGlzcGxheUxpbmtTZXRN b2RlIChHcmFwaGljc091dHB1dFByb3RvY29sLCBHcmFwaGljc091dHB1dFByb3RvY29sLT5Nb2Rl LT5Nb2RlKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIERFQlVHICgo REVCVUdfV0FSTiwgIkRyaXZlciBzdG9wIC0gUHJvYmxlbSByZXNldHRpbmcgdmlkZW8gbW9kZSAt ICVyLlxuIiwgU3RhdHVzKSk7DQorICAgIH0NCisgIH0NCisNCisgIC8vIFJlc2V0IHRoZSBhbHQg c2V0dGluZyBvbiB0aGUgaW50ZXJmYWNlICh0byB0aGUgREwzIGFsdCBzZXR0aW5nKQ0KKyAgU3Rh dHVzID0gU2VsZWN0QWx0U2V0dGluZyAoVXNiRGlzcGxheUxpbmtEZXYtPlVzYklvLCAwKTsNCisg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChERUJVR19XQVJOLCAiRXJy b3IgcmVzZXR0aW5nIFVTQiBpbnRlcmZhY2UgYWx0ZXJuYXRlIHNldHRpbmcgLSAlci5cbiIsIFN0 YXR1cykpOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gZ0JTLT5Vbmluc3RhbGxNdWx0aXBsZVByb3Rv Y29sSW50ZXJmYWNlcyAoDQorICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCisgICAgICAg ICAgICAgICAgICAmZ0VmaUdyYXBoaWNzT3V0cHV0UHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAg ICAgICAgICZVc2JEaXNwbGF5TGlua0Rldi0+R3JhcGhpY3NPdXRwdXRQcm90b2NvbCwNCisgICAg ICAgICAgICAgICAgICAmZ0VmaUVkaWREaXNjb3ZlcmVkUHJvdG9jb2xHdWlkLA0KKyAgICAgICAg ICAgICAgICAgICZVc2JEaXNwbGF5TGlua0Rldi0+RWRpZERpc2NvdmVyZWQsDQorICAgICAgICAg ICAgICAgICAgJmdFZmlFZGlkQWN0aXZlUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAg ICZVc2JEaXNwbGF5TGlua0Rldi0+RWRpZEFjdGl2ZSwNCisgICAgICAgICAgICAgICAgICBOVUxM KTsNCisNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChERUJVR19X QVJOLCAiRXJyb3IgdW5pbnN0YWxsaW5nIEdyYXBoaWNzIE91dHB1dCBhbmQgRURJRCBwcm90b2Nv bCBpbnRlcmZhY2VzIC0gJXIuXG4iLCBTdGF0dXMpKTsNCisgICAgcmV0dXJuIFN0YXR1czsNCisg IH0NCisNCisgIGdCUy0+Q2xvc2VFdmVudCAoVXNiRGlzcGxheUxpbmtEZXYtPlRpbWVyRXZlbnQp Ow0KKw0KKyAgZ0JTLT5DbG9zZVByb3RvY29sICgNCisgICAgICAgICBDb250cm9sbGVyLA0KKyAg ICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQorICAgICAgICAgVGhpcy0+RHJpdmVyQmlu ZGluZ0hhbmRsZSwNCisgICAgICAgICBDb250cm9sbGVyKTsNCisNCisgIC8vDQorICAvLyBGcmVl IGFsbCByZXNvdXJjZXMuDQorICAvLw0KKyAgaWYgKFVzYkRpc3BsYXlMaW5rRGV2LT5Db250cm9s bGVyTmFtZVRhYmxlICE9IE5VTEwpIHsNCisgICAgRnJlZVVuaWNvZGVTdHJpbmdUYWJsZSAoVXNi RGlzcGxheUxpbmtEZXYtPkNvbnRyb2xsZXJOYW1lVGFibGUpOw0KKyAgfQ0KKw0KKyAgaWYgKFVz YkRpc3BsYXlMaW5rRGV2LT5TY3JlZW4gIT0gTlVMTCkgew0KKyAgICBGcmVlUG9vbCAoVXNiRGlz cGxheUxpbmtEZXYtPlNjcmVlbik7DQorICAgIFVzYkRpc3BsYXlMaW5rRGV2LT5TY3JlZW4gPSBO VUxMOw0KKyAgfQ0KKw0KKyAgaWYgKFVzYkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1dFBy b3RvY29sLk1vZGUpIHsNCisgICAgaWYgKFVzYkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1 dFByb3RvY29sLk1vZGUtPkluZm8pIHsNCisgICAgICBGcmVlUG9vbCAoVXNiRGlzcGxheUxpbmtE ZXYtPkdyYXBoaWNzT3V0cHV0UHJvdG9jb2wuTW9kZS0+SW5mbyk7DQorICAgICAgVXNiRGlzcGxh eUxpbmtEZXYtPkdyYXBoaWNzT3V0cHV0UHJvdG9jb2wuTW9kZS0+SW5mbyA9IE5VTEw7DQorICAg IH0NCisgICAgRnJlZVBvb2wgKFVzYkRpc3BsYXlMaW5rRGV2LT5HcmFwaGljc091dHB1dFByb3Rv Y29sLk1vZGUpOw0KKyAgICBVc2JEaXNwbGF5TGlua0Rldi0+R3JhcGhpY3NPdXRwdXRQcm90b2Nv bC5Nb2RlID0gTlVMTDsNCisgIH0NCisNCisgIEZyZWVQb29sIChVc2JEaXNwbGF5TGlua0Rldik7 DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorDQorfQ0KKw0KZGlmZiAtLWdpdCBhL0RyaXZl cnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtHb3AvVXNiVHJhbnNmZXIu YyBiL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxpbmtHb3AvVXNi VHJhbnNmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI1MjI5 M2RhMzlkNAotLS0gL2Rldi9udWxsCisrKyBiL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxp bmtQa2cvRGlzcGxheUxpbmtHb3AvVXNiVHJhbnNmZXIuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoq DQorICogQGZpbGUgVXNiVHJhbnNmZXIuYw0KKyAqIEBicmllZiBXcmFwcGVyIG9mIFVFRkkgVVNC IGJ1bGsgYW5kIGNvbnRyb2wgdHJhbnNmZXIgaW50ZXJmYWNlIGZvciBVU0IgRGlzcGxheUxpbmsg ZHJpdmVyLg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIERpc3BsYXlMaW5rIChV SykgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisgKg0KKyoqLw0KKw0KKyNpbmNsdWRlICJVc2JE aXNwbGF5TGluay5oIg0KKw0KKy8qKg0KKyAqIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBEaXNwbGF5 TGluayBkZXZpY2UgdXNpbmcgdGhlIFVTQklPIHByb3RvY29sLg0KKyAqIEBwYXJhbSBVc2JEaXNw bGF5TGlua0Rldg0KKyAqIEBwYXJhbSBCdWZmZXINCisgKiBAcGFyYW0gRGF0YUxlbg0KKyAqIEBw YXJhbSBVU0JTdGF0dXMNCisgKiBAcmV0dXJuDQorICAqIEVGSV9TVUNDRVNTICAgVGhlIGJ1bGsg dHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KKyAgKiBFRklfSU5WQUxJ RF9QQVJBTUVURVIgICBJZiBEZXZpY2VFbmRwb2ludCBpcyBub3QgdmFsaWQuDQorICAqIEVGSV9J TlZBTElEX1BBUkFNRVRFUiAgIERhdGEgaXMgTlVMTC4NCisgICogRUZJX0lOVkFMSURfUEFSQU1F VEVSICAgRGF0YUxlbmd0aCBpcyBOVUxMLg0KKyAgKiBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBT dGF0dXMgaXMgTlVMTC4NCisgICogRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZSByZXF1ZXN0IGNv dWxkIG5vdCBiZSBjb21wbGV0ZWQgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJjZXMuDQorICAqIEVG SV9USU1FT1VUICAgVGhlIGJ1bGsgdHJhbnNmZXIgY2Fubm90IGJlIGNvbXBsZXRlZCB3aXRoaW4g VGltZW91dCB0aW1lZnJhbWUuDQorICAqIEVGSV9ERVZJQ0VfRVJST1IgIFRoZSB0cmFuc2ZlciBm YWlsZWQgb3RoZXIgdGhhbiB0aW1lb3V0LCBhbmQgdGhlIHRyYW5zZmVyIHN0YXR1cyBpcyByZXR1 cm5lZCBpbiBTdGF0dXMuDQorICovDQorRUZJX1NUQVRVUw0KK0RsVXNiQnVsa1dyaXRlICgNCisg ICAgSU4gVVNCX0RJU1BMQVlMSU5LX0RFViogVXNiRGlzcGxheUxpbmtEZXYsDQorICAgIElOIENP TlNUIFVJTlQ4KiBCdWZmZXIsDQorICAgIElOIFVJTlROIERhdGFMZW4sDQorICAgIE9VVCBVSU5U MzIgKlVTQlN0YXR1cw0KKyAgICApDQorew0KKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQorICBTdGF0 dXMgPSBVc2JEaXNwbGF5TGlua0Rldi0+VXNiSW8tPlVzYkJ1bGtUcmFuc2ZlciAoDQorICAgIFVz YkRpc3BsYXlMaW5rRGV2LT5Vc2JJbywNCisgICAgVXNiRGlzcGxheUxpbmtEZXYtPkJ1bGtPdXRF bmRwb2ludERlc2NyaXB0b3IuRW5kcG9pbnRBZGRyZXNzLA0KKyAgICAoVk9JRCopQnVmZmVyLA0K KyAgICAmRGF0YUxlbiwNCisgICAgRElTUExBWUxJTktfVVNCX0JVTEtfVElNRU9VVCwNCisgICAg VVNCU3RhdHVzKTsNCisNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyogUmVhZCBk YXRhIGZyb20gdGhlIERpc3BsYXlMaW5rIGRldmljZSB1c2luZyB0aGUgVVNCSU8gcHJvdG9jb2wu DQorKiBAcGFyYW0gVXNiRGlzcGxheUxpbmtEZXYNCisqIEBwYXJhbSBCdWZmZXINCisqIEBwYXJh bSBCdWZmZXJMZW4NCisqIEByZXR1cm4gMCBpZiBhbiBlcnJvciBvY2N1cnJlZCBvciAwIGJ5dGVz IHdlcmUgcmVhZCwgb3RoZXJ3aXNlIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZA0KKyAqLw0KK1VJ TlRODQorRGxVc2JCdWxrUmVhZCAoDQorICAgIElOIFVTQl9ESVNQTEFZTElOS19ERVYqIFVzYkRp c3BsYXlMaW5rRGV2LA0KKyAgICBJTiBVSU5UOCogQnVmZmVyLA0KKyAgICBJTiBVSU5UTiBCdWZm ZXJMZW4NCisgICAgKQ0KK3sNCisgIFVJTlQzMiBSZXN1bHQ7DQorICBVSU5UTiBSZWFkTGVuOw0K KyAgRUZJX1NUQVRVUyBTdGF0dXM7DQorDQorICBSZWFkTGVuID0gQnVmZmVyTGVuOw0KKw0KKyAg U3RhdHVzID0gVXNiRGlzcGxheUxpbmtEZXYtPlVzYklvLT5Vc2JCdWxrVHJhbnNmZXIgKA0KKyAg ICBVc2JEaXNwbGF5TGlua0Rldi0+VXNiSW8sDQorICAgIFVzYkRpc3BsYXlMaW5rRGV2LT5CdWxr SW5FbmRwb2ludERlc2NyaXB0b3IuRW5kcG9pbnRBZGRyZXNzLA0KKyAgICBCdWZmZXIsDQorICAg ICZSZWFkTGVuLA0KKyAgICBESVNQTEFZTElOS19VU0JfQlVMS19USU1FT1VULA0KKyAgICAmUmVz dWx0KTsNCisNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIDA7DQor ICB9DQorDQorICByZXR1cm4gUmVhZExlbjsNCit9DQorDQorDQorLyoqDQorU2VuZCBhIGNvbnRy b2wgbWVzc2FnZSAoZS5nIHNldCB2aWRlbyBtb2RlKSBtZXNzYWdlIHRvIHRoZSBEaXNwbGF5TGlu ayBkZXZpY2UuDQorDQorQHBhcmFtICBEZXZpY2UgICAgICAgICAgICAgICAgICAgVVNCIGRldmlj ZSBoYW5kbGUuDQorQHBhcmFtICByZXF1ZXN0ICAgICAgICAgICAgICAgICAgUmVxdWVzdCB0eXBl LCBlLmcuIFNFVF9WSURFT19NT0RFDQorQHBhcmFtICB2YWx1ZQ0KK0BwYXJhbSAgY29udHJvbE1z ZyAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgdG8gc2VuZC4NCitAcGFyYW0g IGNvbnRyb2xNc2dMZW4gICAgICAgICAgICBMZW5ndGggb2YgdGhlIG1lc3NhZ2UuDQorDQorQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZW50IG1lc3NhZ2UuDQor DQorKiovDQorRUZJX1NUQVRVUw0KK0RsVXNiU2VuZENvbnRyb2xXcml0ZU1lc3NhZ2UgKA0KKyAg SU4gVVNCX0RJU1BMQVlMSU5LX0RFViAqRGV2aWNlLA0KKyAgSU4gVUlOVDggUmVxdWVzdCwNCisg IElOIFVJTlQxNiBWYWx1ZSwNCisgIElOIENPTlNUIFZPSUQgKkNvbnRyb2xNc2csDQorICBJTiBV SU5UMTYgQ29udHJvbE1zZ0xlbg0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAg U3RhdHVzOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICBVc2JTdGF0dXM7DQorICBFRklfVVNC X0RFVklDRV9SRVFVRVNUIFVzYlJlcXVlc3Q7DQorDQorICBaZXJvTWVtICgmUmVxdWVzdCwgc2l6 ZW9mIChSZXF1ZXN0KSk7DQorICBVc2JSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNCX1JFUV9UWVBF X1ZFTkRPUiB8IFVTQl9UQVJHRVRfSU5URVJGQUNFOw0KKyAgVXNiUmVxdWVzdC5JbmRleCA9IERl dmljZS0+SW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VOdW1iZXI7DQorICBVc2JSZXF1ZXN0 LlJlcXVlc3QgPSBSZXF1ZXN0Ow0KKyAgVXNiUmVxdWVzdC5WYWx1ZSA9IFZhbHVlOw0KKyAgVXNi UmVxdWVzdC5MZW5ndGggPSBDb250cm9sTXNnTGVuOw0KKw0KKyAgU3RhdHVzID0gRGV2aWNlLT5V c2JJby0+VXNiQ29udHJvbFRyYW5zZmVyICgNCisgICAgRGV2aWNlLT5Vc2JJbywNCisgICAgJlVz YlJlcXVlc3QsDQorICAgIEVmaVVzYkRhdGFPdXQsDQorICAgIERJU1BMQVlMSU5LX1VTQl9DVFJM X1RJTUVPVVQsDQorICAgIChWT0lEICopQ29udHJvbE1zZywNCisgICAgQ29udHJvbE1zZ0xlbiwN CisgICAgJlVzYlN0YXR1cyk7DQorDQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAg IERFQlVHICgoREVCVUdfRVJST1IsICJVU0Igd3JpdGUgY29udHJvbCB0cmFuc2ZlciBmYWlsZWQg LSAlciAoVVNCIHN0YXR1cyB4JXgpLlxuIiwgU3RhdHVzLCBVc2JTdGF0dXMpKTsNCisgICAgU3Rh dHVzID0gRUZJX0RFVklDRV9FUlJPUjsNCisgIH0NCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0K Kw0KKy8qKg0KK1JlcXVlc3QgZGF0YSBmcm9tIHRoZSBEaXNwbGF5TGluayBkZXZpY2UgKGUuZy4g dGhlIG1vbml0b3IgRURJRCkNCisNCitAcGFyYW0gIERldmljZSAgICAgICAgICAgICAgICAgICBV U0IgZGV2aWNlIGhhbmRsZS4NCitAcGFyYW0gIHJlcXVlc3QgICAgICAgICAgICAgICAgICBSZXF1 ZXN0IHR5cGUsIGUuZy4gR0VUX09VVFBVVF9FRElEDQorQHBhcmFtICB2YWx1ZQ0KK0BwYXJhbSAg Y29udHJvbE1zZyAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgdG8gc2VuZC4N CitAcGFyYW0gIGNvbnRyb2xNc2dMZW4gICAgICAgICAgICBMZW5ndGggb2YgdGhlIG1lc3NhZ2Uu DQorDQorQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZW50IG1l c3NhZ2UuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0RsVXNiU2VuZENvbnRyb2xSZWFkTWVzc2Fn ZSAoDQorICBJTiBVU0JfRElTUExBWUxJTktfREVWICpEZXZpY2UsDQorICBJTiBVSU5UOCBSZXF1 ZXN0LA0KKyAgSU4gVUlOVDE2IFZhbHVlLA0KKyAgT1VUIFZPSUQgKkNvbnRyb2xNc2csDQorICBJ TiBVSU5UMTYgQ29udHJvbE1zZ0xlbg0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgU3RhdHVzOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICBVc2JTdGF0dXM7DQorICBFRklf VVNCX0RFVklDRV9SRVFVRVNUIFVzYlJlcXVlc3Q7DQorDQorICBaZXJvTWVtICgmVXNiUmVxdWVz dCwgc2l6ZW9mIChVc2JSZXF1ZXN0KSk7DQorICBVc2JSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNC X1JFUV9UWVBFX1ZFTkRPUiB8IFVTQl9UQVJHRVRfSU5URVJGQUNFIHwgVVNCX0VORFBPSU5UX0RJ Ul9JTjsNCisgIFVzYlJlcXVlc3QuUmVxdWVzdCA9IFJlcXVlc3Q7DQorICBVc2JSZXF1ZXN0LlZh bHVlID0gVmFsdWU7DQorICBVc2JSZXF1ZXN0LkluZGV4ID0gRGV2aWNlLT5JbnRlcmZhY2VEZXNj cmlwdG9yLkludGVyZmFjZU51bWJlcjsNCisgIFVzYlJlcXVlc3QuTGVuZ3RoID0gQ29udHJvbE1z Z0xlbjsNCisNCisgIFN0YXR1cyA9IERldmljZS0+VXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAo DQorICAgIERldmljZS0+VXNiSW8sDQorICAgICZVc2JSZXF1ZXN0LA0KKyAgICBFZmlVc2JEYXRh SW4sDQorICAgIERJU1BMQVlMSU5LX1VTQl9DVFJMX1RJTUVPVVQsDQorICAgIChWT0lEICopQ29u dHJvbE1zZywNCisgICAgQ29udHJvbE1zZ0xlbiwNCisgICAgJlVzYlN0YXR1cyk7DQorDQorICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoREVCVUdfRVJST1IsICJVU0Ig cmVhZCBjb250cm9sIHRyYW5zZmVyIGZhaWxlZCAtICVyIChVU0Igc3RhdHVzIHgleCkuXG4iLCBT dGF0dXMsIFVzYlN0YXR1cykpOw0KKyAgICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOw0KKyAg fQ0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQpkaWZmIC0tZ2l0IGEvRHJpdmVycy9EaXNwbGF5TGlu ay9EaXNwbGF5TGlua1BrZy9EaXNwbGF5TGlua0dvcC9WaWRlb01vZGVzLmMgYi9Ecml2ZXJzL0Rp c3BsYXlMaW5rL0Rpc3BsYXlMaW5rUGtnL0Rpc3BsYXlMaW5rR29wL1ZpZGVvTW9kZXMuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjYyMThjMDkzMTQ3YwotLS0gL2Rl di9udWxsCisrKyBiL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvRGlzcGxheUxp bmtHb3AvVmlkZW9Nb2Rlcy5jCkBAIC0wLDAgKzEsMjU0IEBACisvKioNCisgKiBAZmlsZSBWaWRl b01vZGVzLmMNCisgKiBAYnJpZWYgUHJlLWNhbGN1bGF0ZWQgdmlkZW8gdGltaW5ncyBzZW50IHRv IHRoZSBEaXNwbGF5TGluayBkZXZpY2Ugd2hlbiBhIHZpZGVvIG1vZGUgaXMgc2VsZWN0ZWQNCisg Kg0KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBEaXNwbGF5TGluayAoVUspIEx0ZC4gQWxs IHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt Mi1DbGF1c2UtUGF0ZW50DQorICoNCisqKi8NCisNCisjaW5jbHVkZSAiVXNiRGlzcGxheUxpbmsu aCINCisNCisNCisvLyBTdXBwb3J0ZWQgdmlkZW8gbW9kZXMgLSBtdXN0IGJlIGluIG9yZGVyIG9m IHBpeGVsIGNvdW50IChpLmUuIGhyZXMgeCB2cmVzKQ0KKw0KK1NUQVRJQyBDT05TVCBzdHJ1Y3Qg VmlkZW9Nb2RlIE1vZGVEYXRhW10gPSB7DQorICB7DQorICAgICAvLyA2NDAgeCA0ODAgQCA2MEh6 DQorICAgIC5SZXNlcnZlZDIgPSAyLA0KKyAgICAuUGl4ZWxDbG9jayA9IDI1MTcsDQorICAgIC5I QWN0aXZlID0gNjQwLA0KKyAgICAuSEJsYW5raW5nID0gMTYwLA0KKyAgICAuSFN5bmNPZmZzZXQg PSAxNiwNCisgICAgLkhTeW5jV2lkdGggPSA5NiwNCisgICAgLlZBY3RpdmUgPSA0ODAsDQorICAg IC5WQmxhbmtpbmcgPSA0NSwNCisgICAgLlZTeW5jT2Zmc2V0ID0gMTAsDQorICAgIC5WU3luY1dp ZHRoID0gMiwNCisgICAgLkZsYWdzID0gMHgwMDAwMDMwMCwNCisgICAgLkFjY3VtdWxhdGUgPSAx LA0KKyAgICAuUmVzZXJ2ZWQzID0gMCwNCisgICAgLlJlc2VydmVkNCA9IDAsDQorICAgIC5SZXNl cnZlZDUgPSAweDAwMDAwMDAwLA0KKyAgICAuVmljID0gMCwNCisgICAgLkFjdGl2ZUZvcm1hdCA9 IDAsDQorICB9LA0KKyAgew0KKyAgICAvLyA4MDAgeCA2MDAgQCA2MEh6DQorICAgIC5SZXNlcnZl ZDIgPSAyLA0KKyAgICAuUGl4ZWxDbG9jayA9IDQwMDAsDQorICAgIC5IQWN0aXZlID0gODAwLA0K KyAgICAuSEJsYW5raW5nID0gMjU2LA0KKyAgICAuSFN5bmNPZmZzZXQgPSA0MCwNCisgICAgLkhT eW5jV2lkdGggPSAxMjgsDQorICAgIC5WQWN0aXZlID0gNjAwLA0KKyAgICAuVkJsYW5raW5nID0g MjgsDQorICAgIC5WU3luY09mZnNldCA9IDEsDQorICAgIC5WU3luY1dpZHRoID0gMywNCisgICAg LkZsYWdzID0gMHgwMDAwMDAwMCwNCisgICAgLkFjY3VtdWxhdGUgPSAxLA0KKyAgICAuUmVzZXJ2 ZWQzID0gMCwNCisgICAgLlJlc2VydmVkNCA9IDAsDQorICAgIC5SZXNlcnZlZDUgPSAweDAwMDAw MDAwLA0KKyAgICAuVmljID0gMCwNCisgICAgLkFjdGl2ZUZvcm1hdCA9IDAsDQorICB9LA0KKyAg ew0KKyAgICAvLyAxMDI0eDc2OCBAIDYwSHoNCisgICAgLlJlc2VydmVkMSA9IDAsDQorICAgIC5S ZXNlcnZlZDIgPSAyLA0KKyAgICAuUGl4ZWxDbG9jayA9IDY1MDAsDQorICAgIC5IQWN0aXZlID0g MTAyNCwNCisgICAgLkhCbGFua2luZyA9IDMyMCwNCisgICAgLkhTeW5jT2Zmc2V0ID0gMjQsDQor ICAgIC5IU3luY1dpZHRoID0gMTM2LA0KKyAgICAuVkFjdGl2ZSA9IDc2OCwNCisgICAgLlZCbGFu a2luZyA9IDM4LA0KKyAgICAuVlN5bmNPZmZzZXQgPSAzLA0KKyAgICAuVlN5bmNXaWR0aCA9IDYs DQorICAgIC5GbGFncyA9IDB4MDAwMDAzMDAsDQorICAgIC5BY2N1bXVsYXRlID0gMSwNCisgICAg LlJlc2VydmVkMyA9IDAsDQorICAgIC5SZXNlcnZlZDQgPSAwLA0KKyAgICAuUmVzZXJ2ZWQ1ID0g MHgwMDAwMDAwMCwNCisgICAgLlZpYyA9IDAsDQorICAgIC5BY3RpdmVGb3JtYXQgPSAwLA0KKyAg fSwNCisgIHsNCisgICAgLy8gMTM2MHg3NjggQCA2MEh6DQorICAgIC5SZXNlcnZlZDEgPSAwLA0K KyAgICAuUmVzZXJ2ZWQyID0gMiwNCisgICAgLlBpeGVsQ2xvY2sgPSA4NTUwLA0KKyAgICAuSEFj dGl2ZSA9IDEzNjAsDQorICAgIC5IQmxhbmtpbmcgPSA0MzIsDQorICAgIC5IU3luY09mZnNldCA9 IDY0LA0KKyAgICAuSFN5bmNXaWR0aCA9IDExMiwNCisgICAgLlZBY3RpdmUgPSA3NjgsDQorICAg IC5WQmxhbmtpbmcgPSAyNywNCisgICAgLlZTeW5jT2Zmc2V0ID0gMywNCisgICAgLlZTeW5jV2lk dGggPSA2LA0KKyAgICAuRmxhZ3MgPSAweDAwMDAwMDAwLA0KKyAgICAuQWNjdW11bGF0ZSA9IDEs DQorICAgIC5SZXNlcnZlZDMgPSAwLA0KKyAgICAuUmVzZXJ2ZWQ0ID0gMCwNCisgICAgLlJlc2Vy dmVkNSA9IDB4MDAwMDAwMDAsDQorICAgIC5WaWMgPSAwLA0KKyAgICAuQWN0aXZlRm9ybWF0ID0g MCwNCisgIH0sDQorICB7DQorICAgIC8vIDEyODB4OTYwIEAgNjBIeg0KKyAgICAuUmVzZXJ2ZWQx ID0gMCwNCisgICAgLlJlc2VydmVkMiA9IDIsDQorICAgIC5QaXhlbENsb2NrID0gMTA4MDAsDQor ICAgIC5IQWN0aXZlID0gMTI4MCwNCisgICAgLkhCbGFua2luZyA9IDUyMCwNCisgICAgLkhTeW5j T2Zmc2V0ID0gOTYsDQorICAgIC5IU3luY1dpZHRoID0gMTEyLA0KKyAgICAuVkFjdGl2ZSA9IDk2 MCwNCisgICAgLlZCbGFua2luZyA9IDQwLA0KKyAgICAuVlN5bmNPZmZzZXQgPSAxLA0KKyAgICAu VlN5bmNXaWR0aCA9IDMsDQorICAgIC5GbGFncyA9IDB4MDAwMDAwMDAsDQorICAgIC5BY2N1bXVs YXRlID0gMSwNCisgICAgLlJlc2VydmVkMyA9IDAsDQorICAgIC5SZXNlcnZlZDQgPSAwLA0KKyAg ICAuUmVzZXJ2ZWQ1ID0gMHgwMDAwMDAwMCwNCisgICAgLlZpYyA9IDAsDQorICAgIC5BY3RpdmVG b3JtYXQgPSAwLA0KKyAgfSwNCisgIHsNCisgICAgLy8gMTI4MHgxMDI0IEAgNjBIeg0KKyAgICAu UmVzZXJ2ZWQxID0gMCwNCisgICAgLlJlc2VydmVkMiA9IDIsDQorICAgIC5QaXhlbENsb2NrID0g MTA4MDAsDQorICAgIC5IQWN0aXZlID0gMTI4MCwNCisgICAgLkhCbGFua2luZyA9IDQwOCwNCisg ICAgLkhTeW5jT2Zmc2V0ID0gNDgsDQorICAgIC5IU3luY1dpZHRoID0gMTEyLA0KKyAgICAuVkFj dGl2ZSA9IDEwMjQsDQorICAgIC5WQmxhbmtpbmcgPSA0MiwNCisgICAgLlZTeW5jT2Zmc2V0ID0g MSwNCisgICAgLlZTeW5jV2lkdGggPSAzLA0KKyAgICAuRmxhZ3MgPSAweDAwMDAwMDAwLA0KKyAg ICAuQWNjdW11bGF0ZSA9IDEsDQorICAgIC5SZXNlcnZlZDMgPSAwLA0KKyAgICAuUmVzZXJ2ZWQ0 ID0gMCwNCisgICAgLlJlc2VydmVkNSA9IDB4MDAwMDAwMDAsDQorICAgIC5WaWMgPSAwLA0KKyAg ICAuQWN0aXZlRm9ybWF0ID0gMCwNCisgIH0sDQorICB7DQorICAgIC8vIDE2MDB4OTAwIEAgNjBI eg0KKyAgICAuUmVzZXJ2ZWQyID0gMiwNCisgICAgLlBpeGVsQ2xvY2sgPSAxMTgyNSwNCisgICAg LkhBY3RpdmUgPSAxNjAwLA0KKyAgICAuSEJsYW5raW5nID0gNTEyLA0KKyAgICAuSFN5bmNPZmZz ZXQgPSA4OCwNCisgICAgLkhTeW5jV2lkdGggPSAxNjgsDQorICAgIC5WQWN0aXZlID0gOTAwLA0K KyAgICAuVkJsYW5raW5nID0gMzQsDQorICAgIC5WU3luY09mZnNldCA9IDMsDQorICAgIC5WU3lu Y1dpZHRoID0gNSwNCisgICAgLkZsYWdzID0gMHgwMDAwMDUwMCwNCisgICAgLkFjY3VtdWxhdGUg PSAxLA0KKyAgICAuUmVzZXJ2ZWQzID0gMCwNCisgICAgLlJlc2VydmVkNCA9IDAsDQorICAgIC5S ZXNlcnZlZDUgPSAweDAwMDAwMDAwLA0KKyAgICAuVmljID0gMCwNCisgICAgLkFjdGl2ZUZvcm1h dCA9IDAsDQorICB9LA0KKyAgew0KKyAgICAvLyAxNDAweDEwNTAgQCA2MEh6DQorICAgIC5SZXNl cnZlZDEgPSAwLA0KKyAgICAuUmVzZXJ2ZWQyID0gMiwNCisgICAgLlBpeGVsQ2xvY2sgPSAxMjE3 NSwNCisgICAgLkhBY3RpdmUgPSAxNDAwLA0KKyAgICAuSEJsYW5raW5nID0gNDY0LA0KKyAgICAu SFN5bmNPZmZzZXQgPSA4OCwNCisgICAgLkhTeW5jV2lkdGggPSAxNDQsDQorICAgIC5WQWN0aXZl ID0gMTA1MCwNCisgICAgLlZCbGFua2luZyA9IDM5LA0KKyAgICAuVlN5bmNPZmZzZXQgPSAzLA0K KyAgICAuVlN5bmNXaWR0aCA9IDQsDQorICAgIC5GbGFncyA9IDB4MDAwMDAxMDAsDQorICAgIC5B Y2N1bXVsYXRlID0gMSwNCisgICAgLlJlc2VydmVkMyA9IDAsDQorICAgIC5SZXNlcnZlZDQgPSAw LA0KKyAgICAuUmVzZXJ2ZWQ1ID0gMHgwMDAwMDAwMCwNCisgICAgLlZpYyA9IDAsDQorICAgIC5B Y3RpdmVGb3JtYXQgPSAwLA0KKyAgfSwNCisgIHsNCisgICAgLy8gMTYwMHgxMjAwIEAgNjBIeg0K KyAgICAuUmVzZXJ2ZWQxID0gMCwNCisgICAgLlJlc2VydmVkMiA9IDIsDQorICAgIC5QaXhlbENs b2NrID0gMTYyMDAsDQorICAgIC5IQWN0aXZlID0gMTYwMCwNCisgICAgLkhCbGFua2luZyA9IDU2 MCwNCisgICAgLkhTeW5jT2Zmc2V0ID0gNjQsDQorICAgIC5IU3luY1dpZHRoID0gMTkyLA0KKyAg ICAuVkFjdGl2ZSA9IDEyMDAsDQorICAgIC5WQmxhbmtpbmcgPSA1MCwNCisgICAgLlZTeW5jT2Zm c2V0ID0gMSwNCisgICAgLlZTeW5jV2lkdGggPSAzLA0KKyAgICAuRmxhZ3MgPSAweDAwMDAwMDAw LA0KKyAgICAuQWNjdW11bGF0ZSA9IDEsDQorICAgIC5SZXNlcnZlZDMgPSAwLA0KKyAgICAuUmVz ZXJ2ZWQ0ID0gMCwNCisgICAgLlJlc2VydmVkNSA9IDB4MDAwMDAwMDAsDQorICAgIC5WaWMgPSAw LA0KKyAgICAuQWN0aXZlRm9ybWF0ID0gMCwNCisgIH0sDQorICB7DQorICAgIC8vIDE5MjAgeCAx MDgwDQorICAgIC5SZXNlcnZlZDIgPSAyLA0KKyAgICAuUGl4ZWxDbG9jayA9IDE0ODUwLA0KKyAg ICAuSEFjdGl2ZSA9IDE5MjAsDQorICAgIC5IQmxhbmtpbmcgPSAyODAsDQorICAgIC5IU3luY09m ZnNldCA9IDg4LA0KKyAgICAuSFN5bmNXaWR0aCA9IDQ0LA0KKyAgICAuVkFjdGl2ZSA9IDEwODAs DQorICAgIC5WQmxhbmtpbmcgPSA0NSwNCisgICAgLlZTeW5jT2Zmc2V0ID0gNCwNCisgICAgLlZT eW5jV2lkdGggPSA1LA0KKyAgICAuRmxhZ3MgPSAweDAwMDAwMDAwLA0KKyAgICAuQWNjdW11bGF0 ZSA9IDEsDQorICAgIC5SZXNlcnZlZDMgPSAwLA0KKyAgICAuUmVzZXJ2ZWQ0ID0gMCwNCisgICAg LlJlc2VydmVkNSA9IDB4MDAwMDAwMDAsDQorICAgIC5WaWMgPSAwLA0KKyAgICAuQWN0aXZlRm9y bWF0ID0gMCwNCisgIH0NCit9Ow0KKw0KK1NUQVRJQyBDT05TVCBVSU5UMzIgTnVtU3VwcG9ydGVk VmlkZW9Nb2RlcyA9IChzaXplb2YgKE1vZGVEYXRhKSAvIHNpemVvZiAoc3RydWN0IFZpZGVvTW9k ZSkpOw0KKw0KKy8qKg0KK0ZpbmQgdGhlIG51bWJlciBvZiBwcmUtY2FsY3VsYXRlZCB2aWRlbyBt b2RlcyB0aGF0IHdlIHN1cHBvcnQuDQorDQorQHJldHZhbCBOdW1iZXIgb2YgbW9kZXMuDQorDQor KiovDQorVUlOVDMyIERsVmlkZW9Nb2RlR2V0TnVtU3VwcG9ydGVkVmlkZW9Nb2RlcyAoKQ0KK3sN CisgIHJldHVybiBOdW1TdXBwb3J0ZWRWaWRlb01vZGVzOw0KK30NCisNCisvKioNCitHZXQgb25l IG9mIHRoZSBwcmUtY2FsY3VsYXRlZCB2aWRlbyBtb2Rlcw0KKw0KK0BwYXJhbSAgaW5kZXggICAg ICBUaGUgdmlkZW8gbW9kZSB0aGF0IHdlIHdhbnQuDQorDQorQHJldHZhbCBOVUxMICAgICAgIFRo ZSBpbmRleCB3YXMgb3V0IG9mIHJhbmdlLg0KKw0KKyoqLw0KK0NPTlNUIHN0cnVjdCBWaWRlb01v ZGUgKkRsVmlkZW9Nb2RlR2V0U3VwcG9ydGVkVmlkZW9Nb2RlICgNCisgICAgVUlOVDMyIEluZGV4 DQorICAgICkNCit7DQorICBpZiAoSW5kZXggPj0gTnVtU3VwcG9ydGVkVmlkZW9Nb2Rlcykgew0K KyAgICByZXR1cm4gTlVMTDsNCisgIH0NCisgIHJldHVybiAmTW9kZURhdGFbSW5kZXhdOw0KK30N CmRpZmYgLS1naXQgYS9Ecml2ZXJzL0Rpc3BsYXlMaW5rL0Rpc3BsYXlMaW5rUGtnL1JlYWRNZS5t ZCBiL0RyaXZlcnMvRGlzcGxheUxpbmsvRGlzcGxheUxpbmtQa2cvUmVhZE1lLm1kCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDAwNjFmMWViNDZkCi0tLSAvZGV2L251 bGwKKysrIGIvRHJpdmVycy9EaXNwbGF5TGluay9EaXNwbGF5TGlua1BrZy9SZWFkTWUubWQKQEAg LTAsMCArMSw3NyBAQAorIyBESVNQTEFZTElOSyBEUklWRVJTDQorVGhpcyBwYWNrYWdlIGNvbnRh aW5zIGEgR09QIGRyaXZlciBmb3IgVW5pdmVyc2FsIFVTQi1jb25uZWN0ZWQgZG9ja3MgY29udGFp bmluZyB0aGUNCitEaXNwbGF5TGluayBETC02eHh4IGNoaXAgb3IgbmV3ZXIuDQorDQorW0Rpc3Bs YXlMaW5rIFdlYnNpdGVdKGh0dHA6Ly93d3cuZGlzcGxheWxpbmsuY29tKQ0KKw0KK1tQcm9kdWN0 c10oaHR0cHM6Ly93d3cuZGlzcGxheWxpbmsuY29tL3Byb2R1Y3RzL3VuaXZlcnNhbC1kb2NraW5n LXN0YXRpb25zKQ0KKw0KKyMgSU5ERVgNCisNCisqIFtSZXNvbHV0aW9ucyBTdXBwb3J0ZWRdKCNy ZXNvbHV0aW9ucy1zdXBwb3J0ZWQpDQorKiBbRnJhbWUgcmF0ZXNdKCNmcmFtZS1yYXRlcykNCisq IFtNdWx0aXBsZSBtb25pdG9yIG91dHB1dHNdKCNtdWx0aXBsZS1tb25pdG9yLW91dHB1dHMpDQor KiBbTXVsdGlwbGUgRGlzcGxheUxpbmsgZGV2aWNlc10oI211bHRpcGxlLWRpc3BsYXlsaW5rLWRl dmljZXMpDQorKiBbQmVoYXZpb3VyIHdpdGggbm8gbW9uaXRvciBjb25uZWN0ZWRdKCNiZWhhdmlv dXItd2l0aC1uby1tb25pdG9yLWNvbm5lY3RlZCkNCisNCisjIFJlc29sdXRpb25zIHN1cHBvcnRl ZA0KKw0KK1RoZSBkcml2ZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyByZXNvbHV0aW9uczoNCisN Cis2NDAgeCA0ODAgQCA2MEh6DQorDQorODAwIHggNjAwIEAgNjBIeg0KKw0KKzEwMjR4NzY4IEAg NjBIeg0KKw0KKzEzNjB4NzY4IEAgNjBIeg0KKw0KKzEyODB4OTYwIEAgNjBIeg0KKw0KKzEyODB4 MTAyNCBAIDYwSHoNCisNCisxNjAweDkwMCBAIDYwSHoNCisNCisxNDAweDEwNTAgQCA2MEh6DQor DQorMTYwMHgxMjAwIEAgNjBIeg0KKw0KKzE5MjB4MTA4MCBAIDYwSHoNCisNCisNCitOb3RlIHRo YXQgdGhlIGxpc3Qgb2YgcmVzb2x1dGlvbnMgYWR2ZXJ0aXNlZCBieSB0aGUgZHJpdmVyIG1heSBi ZSBzbWFsbGVyIHRoYW4NCit0aGlzIGlmIGEgY29ubmVjdGVkIG1vbml0b3IgZG9lcyBub3Qgc3Vw cG9ydCBhIHBhcnRpY3VsYXIgcmVzb2x1dGlvbi4gVGhlIGRyaXZlcg0KK2ludGVycm9nYXRlcyBj b25uZWN0ZWQgbW9uaXRvcnMgdG8gc2VlIHdoaWNoIG1vZGVzIGNhbiBiZSBzdXBwb3J0ZWQuSXQg aXMgdGhlDQorcmVzcG9uc2liaWxpdHkgb2YgdGhlIEJJT1MgdG8gc2VsZWN0IHRoZSB2aWRlbyBt b2RlIGZyb20gdGhpcyBsaXN0IHdoaWNoIG1vc3QNCitjbG9zZWx5IG1hdGNoZXMgaXRzIHJlcXVp cmVtZW50cy4gSW4gc29tZSBjYXNlcyB0aGlzIG1heSBsZWFkIHRvIHRoZSBCSU9TDQorc2NhbGlu ZyBpdHMgZGlzcGxheS4NCisNCisjIEZyYW1lIHJhdGVzDQorDQorVGhlIGRyaXZlciBpcyBsaW1p dGVkIHRvIGEgbWF4aW11bSBvZiB0ZW4gZnJhbWVzIHBlciBzZWNvbmQuIFNvbWUgc2xvd2VyIHN5 c3RlbXMNCithdCBoaWdoZXIgc2NyZWVuIHJlc29sdXRpb25zIG1heSBwZXJmb3JtIGF0IGEgbG93 ZXIgcmF0ZSB0aGFuIHRoaXMuDQorDQorIyBNdWx0aXBsZSBtb25pdG9yIG91dHB1dHMNCisNCitJ ZiBtdWx0aXBsZSBtb25pdG9ycyBhcmUgY29ubmVjdGVkIHRvIHRoZSBEaXNwbGF5TGlua2Rldmlj ZSwgdGhlIGRpc3BsYXkgd2lsbCBiZQ0KK2R1cGxpY2F0ZWQgKGNsb25lZCkgYWNyb3NzIGFsbCBv dXRwdXRzIGF0IHRoZSBzYW1lIHJlc29sdXRpb24uIFRoZSByZXNvbHV0aW9uDQordXNlZCB3aWxs IGJlIGxpbWl0ZWQgYnkgdGhlIGNhcGFiaWxpdHkgb2YgdGhlIG1vbml0b3Igd2l0aCB0aGUNCits b3dlc3Qgc3BlY2lmaWNhdGlvbi4NCisNCisjIE11bHRpcGxlIERpc3BsYXlMaW5rIGRldmljZXMN CisNCitUaGUgZHJpdmVyIHdpbGwgc3VwcG9ydCB0aGUgY29ubmVjdGlvbiBvZiBtdWx0aXBsZSBE aXNwbGF5TGluayBkZXZpY2VzLiBUaGUNCitleGFjdCBiZWhhdmlvdXJvZiB0aGUgc3lzdGVtIHdp dGggbXVsdGlwbGUgZGV2aWNlcyBjb25uZWN0ZWQgaXMgZGVmaW5lZCBieSB0aGUNCityZXN0IG9m IHRoZSBCSU9TOyB1c3VhbGx5LCB0aGUgQklPUyBjYXVzZXMgdGhlIGRpc3BsYXlzIHRvIGJlIGR1 cGxpY2F0ZWQNCisoY2xvbmVkKSBhY3Jvc3MgYWxsIGRldmljZXMuIE5vdGUgdGhhdCB0aGUgc3lz dGVtIHBlcmZvcm1hbmNlIGFuZCBmcmFtZSByYXRlDQord2lsbCBiZSBhZmZlY3RlZCBieSB0aGUg bnVtYmVyIG9mIERpc3BsYXlMaW5rIGRldmljZXMgY29ubmVjdGVkLg0KKw0KKyMgQmVoYXZpb3Vy IHdpdGggbm8gbW9uaXRvciBjb25uZWN0ZWQNCisNCitUaGUgZHJpdmVyIHVzZXMgdGhlIEVESUQg KEV4dGVuZGVkIERpc3BsYXkgSWRlbnRpZmljYXRpb24gRGF0YSkgcHJvdG9jb2wgdG8NCitkZXRl Y3QgdGhlIGxpc3Qgb2YgcmVzb2x1dGlvbnMgdGhhdCBhIG1vbml0b3Igd2lsbCBzdXBwb3J0Lklu IHNvbWUgbW9uaXRvcnMgdGhpcw0KK21heSB0YWtlIHNvbWUgdGltZSwgYW5kIG9jY2FzaW9uYWxs eSBubyBFRElEIGluZm9ybWF0aW9uIHdpbGwgYmUgcmV0dXJuZWQgYXQNCithbGwuIEluIHRoaXMg Y2FzZSB0aGUgZHJpdmVyIHdpbGwgbm90IGJlIGFibGUgdG8gZGV0ZWN0IHRoYXQgdGhlcmUgaXMg YSBtb25pdG9yDQorY29ubmVjdGVkLiBUbyBpbXByb3ZlIHRoZSB1c2VyIGV4cGVyaWVuY2UgaW4g dGhlc2UgY2FzZXMsIHRoZSBkcml2ZXIgd2lsbCBiZWhhdmUNCithcyBpZiB0aGVyZSBpcyBhIG1v bml0b3IgY29ubmVjdGVkLCBhbmQgd2lsbCBmYWxsIGJhY2sgdG8gcHJlc2VudGluZyB0aGUgZnVs bA0KK3JhbmdlIG9mIHN1cHBvcnRlZCByZXNvbHV0aW9ucyB0byB0aGUgQklPUy4NCmRpZmYgLS1n aXQgYS9NYWludGFpbmVycy50eHQgYi9NYWludGFpbmVycy50eHQKaW5kZXggODc2YWU1NjEyYWQ4 Li40MDkzMzc1YWNmZmUgMTAwNjQ0Ci0tLSBhL01haW50YWluZXJzLnR4dAorKysgYi9NYWludGFp bmVycy50eHQKQEAgLTQ3LDYgKzQ3LDExIEBAIERyaXZlcnMvT3B0aW9uUm9tUGtnCiBXOiBodHRw czovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL3RpYW5vY29yZS5naXRodWIuaW8vd2lraS9PcHRpb25S b21Qa2cNCiBNOiBSYXkgTmkgPHJheS5uaUBpbnRlbC5jb20+DQogDQorRHJpdmVycy9EaXNwbGF5 TGluaw0KK006IExlaWYgTGluZGhvbG0gPGxlaWYubGluZGhvbG1AbGluYXJvLm9yZz4NCitNOiBB cmQgQmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZz4NCitSOiBBbmR5IEhheWVz IDxhbmR5LmhheWVzQGRpc3BsYXlsaW5rLmNvbT4NCisNCiBQbGF0Zm9ybQ0KIE06IEFyZCBCaWVz aGV1dmVsIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPg0KIE06IExlaWYgTGluZGhvbG0gPGxl aWYubGluZGhvbG1AbGluYXJvLm9yZz4NCi0tIAoyLjE3LjEKCg== --_004_DB8PR10MB2684B8E28270DD983695427F95AD0DB8PR10MB2684EURP_--