From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joao Martins Subject: [RFC] netif: staging grants for requests Date: Wed, 14 Dec 2016 18:11:12 +0000 Message-ID: <58518B40.3050408@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHDzB-0007ej-9m for xen-devel@lists.xenproject.org; Wed, 14 Dec 2016 18:09:01 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , Wei Liu , David Vrabel , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org SGV5LAoKQmFjayBpbiB0aGUgWGVuIGhhY2thdG9uICcxNiBuZXR3b3JraW5nIHNlc3Npb24gdGhl cmUgd2VyZSBhIGNvdXBsZSBvZiBpZGVhcwpicm91Z2h0IHVwLiBPbmUgb2YgdGhlbSB3YXMgYWJv dXQgZXhwbG9yaW5nIHBlcm1hbmVudGx5IG1hcHBlZCBncmFudHMgYmV0d2Vlbgp4ZW4tbmV0YmFj ay94ZW4tbmV0ZnJvbnQuCgpJIHN0YXJ0ZWQgZXhwZXJpbWVudGluZyBhbmQgY2FtZSB1cCB3aXRo IHNvcnQgb2YgYSBkZXNpZ24gZG9jdW1lbnQgKGluIHBhbmRvYykKb24gd2hhdCBpdCB3b3VsZCBs aWtlIHRvIGJlIHByb3Bvc2VkLiBUaGlzIGlzIG1lYW50IGFzIGEgc2VlZCBmb3IgZGlzY3Vzc2lv bgphbmQgYWxzbyByZXF1ZXN0aW5nIGlucHV0IHRvIGtub3cgaWYgdGhpcyBpcyBhIGdvb2QgZGly ZWN0aW9uLiBPZiBjb3Vyc2UsIEkKYW0gd2lsbGluZyB0byB0cnkgYWx0ZXJuYXRpdmVzIHRoYXQg d2UgY29tZSB1cCBiZXlvbmQgdGhlIGNvbnRlbnRzIG9mIHRoZQpzcGVjLCBvciBhbnkgb3RoZXIg c3VnZ2VzdGVkIGNoYW5nZXMgOykKCkFueSBjb21tZW50cyBvciBmZWVkYmFjayBpcyB3ZWxjb21l IQoKQ2hlZXJzLApKb2FvCgotLS0KJSBTdGFnaW5nIGdyYW50cyBmb3IgbmV0d29yayBJL08gcmVx dWVzdHMKJSBKb2FvIE1hcnRpbnMgPDxqb2FvLm0ubWFydGluc0BvcmFjbGUuY29tPj4KJSBSZXZp c2lvbiAxCgpcY2xlYXJwYWdlCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdGF0dXM6ICoqRXhwZXJpbWVudGFsKioK CkFyY2hpdGVjdHVyZShzKTogeDg2IGFuZCBBUk0KCkNvbXBvbmVudChzKTogR3Vlc3QKCkhhcmR3 YXJlOiBJbnRlbCBhbmQgQU1ECi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIEJhY2tncm91bmQgYW5kIE1vdGl2YXRp b24KCkF0IHRoZSBYZW4gaGFja2F0b24gJzE2IG5ldHdvcmtpbmcgc2Vzc2lvbiwgd2Ugc3Bva2Ug YWJvdXQgaGF2aW5nIGEgcGVybWFuZW50bHkKbWFwcGVkIHJlZ2lvbiB0byBkZXNjcmliZSBoZWFk ZXIvbGluZWFyIHJlZ2lvbiBvZiBwYWNrZXQgYnVmZmVycy4gVGhpcyBkb2N1bWVudApvdXRsaW5l cyB0aGUgcHJvcG9zYWwgY292ZXJpbmcgbW90aXZhdGlvbiBvZiB0aGlzIGFuZCBhcHBsaWNhYmls aXR5IGZvciBvdGhlcgp1c2UtY2FzZXMgYWxvbmdzaWRlIHRoZSBuZWNlc3NhcnkgY2hhbmdlcy4g VGhpcyBwcm9wb3NhbCBpcyBhbiBSRkMgYW5kIGFsc28KaW5jbHVkZXMgYWx0ZXJuYXRpdmUgc29s dXRpb25zLgoKVGhlIG1vdGl2YXRpb24gb2YgdGhpcyB3b3JrIGlzIHRvIGVsaW1pbmF0ZSBncmFu dCBvcHMgZm9yIHBhY2tldCBJL08gaW50ZW5zaXZlCndvcmtsb2FkcyBzdWNoIGFzIHRob3NlIG9i c2VydmVkIHdpdGggc21hbGxlciByZXF1ZXN0cyBzaXplIChpLmUuIDw9IDI1NiBieXRlcwpvciA8 PSBNVFUpLiBDdXJyZW50bHkgb24gWGVuLCBvbmx5IGJ1bGsgdHJhbnNmZXIgKGUuZy4gMzJLLi42 NEsgcGFja2V0cykgYXJlIHRoZQpvbmx5IG9uZXMgcGVyZm9ybWluZyByZWFsbHkgZ29vZCAodXAg dG8gODAgR2JpdC9zIGluIGZldyBDUFVzKSwgdXN1YWxseQpiYWNraW5nIGVuZC1ob3N0cyBhbmQg c2VydmVyIGFwcGxpYW5jZXMuIEFueXRoaW5nIHRoYXQgaW52b2x2ZXMgaGlnaGVyIHBhY2tldApy YXRlcyAoPD0gMTUwMCBNVFUpIG9yIHdpdGhvdXQgc2csIHBlcmZvcm1zIGJhZGx5IGFsbW9zdCBs aWtlIGEgMSBHYml0L3MKdGhyb3VnaHB1dC4KCiMgUHJvcG9zYWwKClRoZSBwcm9wb3NhbCBpcyB0 byBsZXZlcmFnZSB0aGUgYWxyZWFkeSBpbXBsaWNpdCBjb3B5IGZyb20gYW5kIHRvIHBhY2tldCBs aW5lYXIKZGF0YSBvbiBuZXRmcm9udCBhbmQgbmV0YmFjaywgdG8gYmUgZG9uZSBpbnN0ZWFkIGZy b20gYSBwZXJtYW5lbnRseSBtYXBwZWQKcmVnaW9uLiBJbiBzb21lIChwaHlzaWNhbCkgTklDcyB0 aGlzIGlzIGtub3duIGFzIGhlYWRlci9kYXRhIHNwbGl0LgoKU3BlY2lmaWNhbGx5IHNvbWUgd29y a2xvYWRzIChlLmcuIE5GVikgaXQgd291bGQgcHJvdmlkZSBhIGJpZyBpbmNyZWFzZSBpbgp0aHJv dWdocHV0IHdoZW4gd2Ugc3dpdGNoIHRvICh6ZXJvKWNvcHlpbmcgaW4gdGhlIGJhY2tlbmQvZnJv bnRlbmQsIGluc3RlYWQgb2YKdGhlIGdyYW50IGh5cGVyY2FsbHMuIFRodXMgdGhpcyBleHRlbnNp b24gYWltcyBhdCBmdXR1cmVwcm9vZmluZyB0aGUgbmV0aWYKcHJvdG9jb2wgYnkgYWRkaW5nIHRo ZSBwb3NzaWJpbGl0eSBvZiBndWVzdHMgc2V0dGluZyB1cCBhIGxpc3Qgb2YgZ3JhbnRzIHRoYXQK YXJlIHNldCB1cCBhdCBkZXZpY2UgY3JlYXRpb24gYW5kIHJldm9rZWQgYXQgZGV2aWNlIGZyZWVp bmcgLSB3aXRob3V0IHRha2luZwp0b28gbXVjaCBncmFudCBlbnRyaWVzIGluIGFjY291bnQgZm9y IHRoZSBnZW5lcmFsIGNhc2UgKGkuZS4gdG8gY292ZXIgb25seSB0aGUKaGVhZGVyIHJlZ2lvbiA8 PSAyNTYgYnl0ZXMsIDE2IGdyYW50cyBwZXIgcmluZykgd2hpbGUgY29uZmlndXJhYmxlIGJ5IGtl cm5lbAp3aGVuIG9uZSB3YW50cyB0byByZXNvcnQgdG8gYSBjb3B5LWJhc2VkIGFzIG9wcG9zZWQg dG8gZ3JhbnQgY29weS9tYXAuCgpcY2xlYXJwYWdlCgojIEdlbmVyYWwgT3BlcmF0aW9uCgpIZXJl IHdlIGRlc2NyaWJlIGhvdyBuZXRiYWNrIGFuZCBuZXRmcm9udCBnZW5lcmFsIG9wZXJhdGUsIGFu ZCB3aGVyZSB0aGUgcHJvcG9zZWQKc29sdXRpb24gd2lsbCBmaXQuIFRoZSBzZWN1cml0eSBtZWNo YW5pc20gY3VycmVudGx5IGludm9sdmVzIGdyYW50cyByZWZlcmVuY2VzCndoaWNoIGluIGVzc2Vu Y2UgYXJlIHJvdW5kLXJvYmluIHJlY3ljbGVkICd0aWNrZXRzJyBzdGFtcGVkIHdpdGggdGhlIEdQ Rk5zLApwZXJtaXNzaW9uIGF0dHJpYnV0ZXMsIGFuZCB0aGUgYXV0aG9yaXplZCBkb21haW46Cgoo VGhpcyBpcyBhbiBpbi1tZW1vcnkgdmlldyBvZiBzdHJ1Y3QgZ3JhbnRfZW50cnlfdjEpOgoKICAg ICAwICAgICAxICAgICAyICAgICAzICAgICA0ICAgICA1ICAgICA2ICAgICA3IG9jdGV0CiAgICAr LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwg ZmxhZ3MgICAgICB8IGRvbWFpbiBpZCB8IGZyYW1lICAgICAgICAgICAgICAgICAgfAogICAgKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgpXaGVyZSB0 aGVyZSBhcmUgTiBncmFudCBlbnRyaWVzIGluIGEgZ3JhbnQgdGFibGUsIGZvciBleGFtcGxlOgoK ICAgIEAwOgogICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rCiAgICB8IHJ3ICAgICAgICAgfCAwICAgICAgICAgfCAweEFCQ0RFRiAgICAgICAgICAg ICAgIHwKICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKwogICAgfCBydyAgICAgICAgIHwgMCAgICAgICAgIHwgMHhGQTEyNCAgICAgICAgICAgICAg ICB8CiAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKICAgIHwgcm8gICAgICAgICB8IDEgICAgICAgICB8IDB4QkVFRiAgICAgICAgICAgICAgICAg fAogICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r CgogICAgICAuLi4uLgogICAgQE46CiAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgcncgICAgICAgICB8IDAgICAgICAgICB8IDB4OTky M0EgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rCgpFYWNoIGVudHJ5IGNvbnN1bWVzIDggYnl0ZXMsIHRoZXJlZm9y ZSA1MTIgZW50cmllcyBjYW4gZml0IG9uIG9uZSBwYWdlLgpUaGUgYGdudHRhYl9tYXhfZnJhbWVz YCB3aGljaCBpcyBhIGRlZmF1bHQgb2YgMzIgcGFnZXMuIEhlbmNlIDE2LDM4NApncmFudHMuIFRo ZSBQYXJhVmlydHVhbGl6ZWQgKFBWKSBkcml2ZXJzIHdpbGwgdXNlIHRoZSBncmFudCByZWZlcmVu Y2UgKGluZGV4CmluIHRoZSBncmFudCB0YWJsZSAtIDAgLi4gTikgaW4gdGhlaXIgY29tbWFuZCBy aW5nLgoKXGNsZWFycGFnZQoKIyMgR3Vlc3QgVHJhbnNtaXQKClRoZSB2aWV3IG9mIHRoZSBzaGFy ZWQgdHJhbnNtaXQgcmluZyBpcyB0aGUgZm9sbG93aW5nOgoKICAgICAwICAgICAxICAgICAyICAg ICAzICAgICA0ICAgICA1ICAgICA2ICAgICA3IG9jdGV0CiAgICArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgcmVxX3Byb2QgICAgICAgICAg ICAgICB8IHJlcV9ldmVudCAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IHJzcF9wcm9kICAgICAgICAgICAg ICAgfCByc3BfZXZlbnQgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBwdnQgICAgICAgICAgICAgICAgICAg IHwgcGFkWzQ0XSAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KyAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgLi4uLiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCBbNjRieXRlc10KICAgICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy1cCiAgICB8IGdyZWYgICAgICAgICAg ICAgICAgICAgfCBvZmZzZXQgICAgfCBmbGFncyAgICAgIHwgfAogICAgKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICstJ3N0cnVjdAogICAgfCBpZCAg ICAgICAgIHwgc2l6ZSAgICAgIHwgaWQgICAgICAgIHwgc3RhdHVzICAgICB8IHwgbmV0aWZfdHhf c3JpbmdfZW50cnknCiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLwogICAgfC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC98IC4uIE4KICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKwoKRWFjaCBlbnRyeSBjb25zdW1lcyAxNiBvY3RldHMgdGhlcmVmb3Jl IDI1NiBlbnRyaWVzIGNhbiBmaXQgb24gb25lIHBhZ2UuYHN0cnVjdApuZXRpZl90eF9zcmluZ19l bnRyeWAgaW5jbHVkZXMgYm90aCBgc3RydWN0IG5ldGlmX3R4X3JlcXVlc3RgIChmaXJzdCAxMiBv Y3RldHMpCmFuZCBgc3RydWN0IG5ldGlmX3R4X3Jlc3BvbnNlYCAobGFzdCA0IG9jdGV0cykuICBB ZGRpdGlvbmFsbHkgYSBgc3RydWN0Cm5ldGlmX2V4dHJhX2luZm9gIG1heSBvdmVybGF5IHRoZSBy ZXF1ZXN0IGluIHdoaWNoIGNhc2UgdGhlIGZvcm1hdCBpczoKCiAgICArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstXAogICAgfCB0eXBlIHxmbGFnc3wg dHlwZSBzcGVjaWZpYyBkYXRhIChnc28sIGhhc2gsIGV0Yyl8IHwKICAgICstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyArLSdzdHJ1Y3QKICAgIHwgcGFk ZGluZyBmb3IgdHggICAgICAgICB8IHVudXNlZCAgICAgICAgICAgICAgICAgfCB8IG5ldGlmX2V4 dHJhX2luZm8nCiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLwoKSW4gZXNzZW5jZSB0aGUgdHJhbnNtaXNzaW9uIG9mIGEgcGFja2V0IGluIGEg ZnJvbSBmcm9udGVuZCB0byB0aGUgYmFja2VuZApuZXR3b3JrIHN0YWNrIGdvZXMgYXMgZm9sbG93 aW5nOgoKKipGcm9udGVuZCoqCgoxKSBDYWxjdWxhdGUgaG93IG1hbnkgc2xvdHMgYXJlIG5lZWRl ZCBmb3IgdHJhbnNtaXR0aW5nIHRoZSBwYWNrZXQuCiAgIEZhaWwgaWYgdGhlcmUgYXJlIGFyZW4n dCBlbm91Z2ggc2xvdHMuCgpbIENhbGN1bGF0aW9uIG5lZWRzIHRvIGVzdGltYXRlIHNsb3RzIHRh a2luZyBpbnRvIGFjY291bnQgNGsgcGFnZSBib3VuZGFyeSBdCgoyKSBNYWtlIGZpcnN0IHJlcXVl c3QgZm9yIHRoZSBwYWNrZXQuCiAgIFRoZSBmaXJzdCByZXF1ZXN0IGNvbnRhaW5zIHRoZSB3aG9s ZSBwYWNrZXQgc2l6ZSwgY2hlY2tzdW0gaW5mbywKICAgZmxhZyB3aGV0aGVyIGl0IGNvbnRhaW5z IGV4dHJhIG1ldGFkYXRhLCBhbmQgaWYgZm9sbG93aW5nIHNsb3RzIGNvbnRhaW4KICAgbW9yZSBk YXRhLgoKMykgUHV0IGdyYW50IGluIHRoZSBgZ3JlZmAgZmllbGQgb2YgdGhlIHR4IHNsb3QuCgo0 KSBTZXQgZXh0cmEgaW5mbyBpZiBwYWNrZXQgcmVxdWlyZXMgc3BlY2lhbCBtZXRhZGF0YSAoZS5n LiBHU08gc2l6ZSkKCjUpIElmIHRoZXJlJ3Mgc3RpbGwgZGF0YSB0byBiZSBncmFudGVkIHNldCBm bGFnIGBORVRUWEZfbW9yZV9kYXRhYCBpbgpyZXF1ZXN0IGBmbGFnc2AuCgo2KSBHcmFudCByZW1h aW5pbmcgcGFja2V0IHBhZ2VzIG9uZSBwZXIgc2xvdC4gKGdyYW50IGJvdW5kYXJ5IGlzIDRrKQoK NykgRmlsbCByZXN1bHRhbnQgZ3JlZnMgaW4gdGhlIHNsb3RzIHNldHRpbmcgYE5FVFRYRl9tb3Jl X2RhdGFgIGZvciB0aGUgTi0xLgoKOCkgRmlsbCB0aGUgdG90YWwgcGFja2V0IHNpemUgaW4gdGhl IGZpcnN0IHJlcXVlc3QuCgo5KSBTZXQgY2hlY2tzdW0gaW5mbyBvZiB0aGUgcGFja2V0IChpZiB0 aGUgY2hrc3VtIG9mZmxvYWQgaWYgc3VwcG9ydGVkKQoKMTApIFVwZGF0ZSB0aGUgcmVxdWVzdCBw cm9kdWNlciBpbmRleCAoYHJlcV9wcm9kYCkKCjExKSBDaGVjayB3aGV0aGVyIGJhY2tlbmQgbmVl ZHMgYSBub3RpZmljYXRpb24KCjExLjEpIFBlcmZvcm0gaHlwZXJjYWxsIGBFVlRDSE5PUF9zZW5k YCB3aGljaCBtaWdodCBtZWFuIGEgX19WTUVYSVRfXwogICAgICBkZXBlbmRpbmcgb24gdGhlIGd1 ZXN0IHR5cGUuCgoqKkJhY2tlbmQqKgoKMTIpIEJhY2tlbmQgZ2V0cyBhbiBpbnRlcnJ1cHQgYW5k IHJ1bnMgaXRzIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCgoxMykgQmFja2VuZCBjaGVja3Mg aWYgdGhlcmUgYXJlIHVuY29uc3VtZWQgcmVxdWVzdHMKCjE0KSBCYWNrZW5kIGNvbnN1bWUgYSBy ZXF1ZXN0IGZyb20gdGhlIHJpbmcKCjE1KSBQcm9jZXNzIGV4dHJhIGluZm8gKGUuZy4gaWYgR1NP IGluZm8gd2FzIHNldCkKCjE2KSBDb3VudHMgYWxsIHJlcXVlc3RzIGZvciB0aGlzIHBhY2tldCB0 byBiZSBwcm9jZXNzZWQgKHdoaWxlCmBORVRUWEZfbW9yZV9kYXRhYCBpcyBzZXQpIGFuZCBwZXJm b3JtcyBhIGZldyB2YWxpZGF0aW9uIHRlc3RzOgoKMTYuMSkgRmFpbCB0cmFuc21pc3Npb24gaWYg dG90YWwgcGFja2V0IHNpemUgaXMgc21hbGxlciB0aGFuIEV0aGVybmV0Cm1pbmltdW0gYWxsb3dl ZDsKCiAgRmFpbGluZyB0cmFuc21pc3Npb24gbWVhbnMgZmlsbGluZyBgaWRgIG9mIHRoZSByZXF1 ZXN0IGFuZAogIGBzdGF0dXNgIG9mIGBORVRJRl9SU1BfRVJSYCBvZiBgc3RydWN0IG5ldGlmX3R4 X3Jlc3BvbnNlYDsKICB1cGRhdGUgcnNwX3Byb2QgYW5kIGZpbmFsbHkgbm90aWZ5IGZyb250ZW5k ICh0aHJvdWdoIGBFVlRDSE5PUF9zZW5kYCkuCgoxNi4yKSBGYWlsIHRyYW5zbWlzc2lvbiBpZiBv bmUgb2YgdGhlIHNsb3RzIChzaXplICsgb2Zmc2V0KSBjcm9zc2VzIHRoZSBwYWdlCmJvdW5kYXJ5 CgoxNi4zKSBGYWlsIHRyYW5zbWlzc2lvbiBpZiBudW1iZXIgb2Ygc2xvdHMgYXJlIGJpZ2dlciB0 aGFuIHNwZWMgZGVmaW5lZAooMTggc2xvdHMgbWF4IGluIG5ldGlmLmgpCgoxNykgQWxsb2NhdGUg cGFja2V0IG1ldGFkYXRhCgpbICpMaW51eCBzcGVjaWZpYyo6IFRoaXMgc3RydWN0dXJlIGVtY29t cGFzc2VzIGEgbGluZWFyIGRhdGEgcmVnaW9uIHdoaWNoCmdlbmVyYWxseSBhY2NvbW9kYXRlcyB0 aGUgcHJvdG9jb2wgaGVhZGVyIGFuZCBzdWNoLiBOZXRiYWNrIGFsbG9jYXRlcyB1cCB0byAxMjgK Ynl0ZXMgZm9yIHRoYXQuIF0KCjE4KSAqTGludXggc3BlY2lmaWMqOiBTZXR1cCB1cCBhIGBHTlRU QUJPUF9jb3B5YCB0byBjb3B5IHVwIHRvIDEyOCBieXRlcyB0byB0aGlzIHNtYWxsCnJlZ2lvbiAo bGluZWFyIHBhcnQgb2YgdGhlIHNrYikgKm9ubHkqIGZyb20gdGhlIGZpcnN0IHNsb3QuCgoxOSkg U2V0dXAgR05UVEFCT1Agb3BlcmF0aW9ucyB0byBjb3B5L21hcCB0aGUgcGFja2V0CgoyMCkgUGVy Zm9ybSB0aGUgYEdOVFRBQk9QX2NvcHlgIChncmFudCBjb3B5KSBhbmQvb3IgYEdOVFRBQk9QX21h cF9ncmFudF9yZWZgCiAgICBoeXBlcmNhbGxzLgoKWyAqTGludXgtc3BlY2lmaWMqOiBkb2VzIGEg Y29weSBmb3IgdGhlIGxpbmVhciByZWdpb24gKDw9MTI4IGJ5dGVzKSBhbmQgbWFwcyB0aGUKICAg ICAgICAgcmVtYWluaW5nIHNsb3RzIGFzIGZyYWdzIGZvciB0aGUgcmVzdCBvZiB0aGUgZGF0YSBd CgoyMSkgQ2hlY2sgaWYgdGhlIGdyYW50IG9wZXJhdGlvbnMgd2VyZSBzdWNjZXNzZnVsIGFuZCBm YWlsIHRyYW5zbWlzc2lvbiBpZgphbnkgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24gYHN0YXR1 c2Agd2VyZSBkaWZmZXJlbnQgdGhhbiBgR05UU1Rfb2theWAuCgoyMS4xKSBJZiBpdCdzIGEgZ3Jh bnQgY29weWluZyBiYWNrZW5kLCB0aGVyZWZvcmUgcHJvZHVjZSByZXNwb25zZXMgZm9yIGFsbCB0 aGUKdGhlIGNvcGllZCBncmFudHMgbGlrZSBpbiAxNi4xKS4gT25seSBkaWZmZXJlbmNlIGlzIHRo YXQgc3RhdHVzIGlzCmBORVRJRl9SU1BfT0tBWWAuCgoyMS4yKSBVcGRhdGUgdGhlIHJlc3BvbnNl IHByb2R1Y2VyIGluZGV4IChgcnNwX3Byb2RgKQoKMjIpIFNldCB1cCBnc28gaW5mbyByZXF1ZXN0 ZWQgYnkgZnJvbnRlbmQgW29wdGlvbmFsXQoKMjMpIFNldCBmcm9udGVuZCBwcm92aWRlZCBjaGVj a3N1bSBpbmZvCgoyNCkgKkxpbnV4LXNwZWNpZmljKjogUmVnaXN0ZXIgZGVzdHJ1Y3RvciBjYWxs YmFjayB3aGVuIHBhY2tldCBwYWdlcyBhcmUgZnJlZWQuCgoyNSkgQ2FsbCBpbnRvIHRvIHRoZSBu ZXR3b3JrIHN0YWNrLgoKMjYpIFVwZGF0ZSBgcmVxX2V2ZW50YCB0byBgcmVxdWVzdCBjb25zdW1l ciBpbmRleCArIDFgIHRvIHJlY2VpdmUgYSBub3RpZmljYXRpb24KICAgIG9uIHRoZSBmaXJzdCBw cm9kdWNlZCByZXF1ZXN0IGZyb20gZnJvbnRlbmQuCiAgICBbb3B0aW9uYWwsIGlmIGJhY2tlbmQg aXMgcG9sbGluZyB0aGUgcmluZyBhbmQgbmV2ZXIgc2xlZXBzXQoKMjcpICpMaW51eC1zcGVjaWZp Yyo6IFBhY2tldCBkZXN0cnVjdG9yIGNhbGxiYWNrIGlzIGNhbGxlZC4KCjI3LjEpIFNldCB1cCBg R05UVEFCT1BfdW5tYXBfZ3JhbnRfcmVmYCBvcHMgZm9yIHRoZSBkZXNpZ25hdGVkIHBhY2tldCBw YWdlcy4KCjI3LjIpIE9uY2UgZG9uZSwgcGVyZm9ybSBgR05UVEFCT1BfdW5tYXBfZ3JhbnRfcmVm YCBoeXBlcmNhbGwuIFVuZGVybHlpbmcKdGhpcyBoeXBlcmNhbGwgYSBUTEIgZmx1c2ggb2YgYWxs IGJhY2tlbmQgdkNQVVMgaXMgZG9uZS4KCjI3LjMpIFByb2R1Y2UgVHggcmVzcG9uc2UgbGlrZSBz dGVwIDIxLjEpIGFuZCAyMS4yKQoKWypMaW51eC1zcGVjaWZpYyo6IEl0IGNvbnRhaW5zIGEgdGhy ZWFkIHRoYXQgaXMgd29rZW4gZm9yIHRoaXMgcHVycG9zZS4gQW5kCml0IGJhdGNoIHRoZXNlIHVu bWFwIG9wZXJhdGlvbnMuIFRoZSBjYWxsYmFjayBqdXN0IHF1ZXVlcyBhbm90aGVyIHVubWFwLl0K CjI3LjQpIENoZWNrIHdoZXRoZXIgZnJvbnRlbmQgcmVxdWVzdGVkIGEgbm90aWZpY2F0aW9uCgoy Ny40LjEpIElmIHNvLCBQZXJmb3JtIGh5cGVyY2FsbCBgRVZUQ0hOT1Bfc2VuZGAgd2hpY2ggbWln aHQgbWVhbiBhIF9fVk1FWElUX18KICAgICAgZGVwZW5kaW5nIG9uIHRoZSBndWVzdCB0eXBlLgoK KipGcm9udGVuZCoqCgoyOCkgVHJhbnNtaXQgaW50ZXJydXB0IGlzIHJhaXNlZCB3aGljaCBzaWdu YWxzIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGNvbXBsZXRpb24uCgoyOSkgVHJhbnNtaXQgY29t cGxldGlvbiByb3V0aW5lIGNoZWNrcyBmb3IgdW5jb25zdW1lZCByZXNwb25zZXMKCjMwKSBQcm9j ZXNzZXMgdGhlIHJlc3BvbnNlcyBhbmQgcmV2b2tlcyB0aGUgZ3JhbnRzIHByb3ZpZGVkLgoKMzEp IFVwZGF0ZXMgYHJzcF9jb25zYCAocmVxdWVzdCBjb25zdW1lciBpbmRleCkKClRoaXMgcHJvcG9z YWwgYWltcyBhdCByZXBsYWNpbmcgc3RlcHMgMTkpIDIwKSAyMSkgdG8gYmUgYmUgYSBtZW1jcHkg ZnJvbSBhCnBlcm1hbmVudGx5IG1hcHBlZCByZWdpb24uIEFkZGl0aW9uYWxseSBiYWNrZW5kIG1h eSBjaG9vc2UgdG8gdXNlIHRoZXNlCnBlcm1hbmVudGx5IG1hcHBlZCBwYWdlcyBpbiB0aGUgcmVz dCBvZiB0aGUgcGFja2V0IHRoZXJlZm9yZSByZXBsYWNpbmcgc3RlcAoyNykgKHRoZSB1bm1hcCkg cHJldmVudGluZyB0aGUgVExCIGZsdXNoLgoKTm90ZSB0aGF0IGEgZ3JhbnQgY29weSBkb2VzIHRo ZSBmb2xsb3dpbmcgKGluIHBzZXVkbyBjb2RlKToKCglyY3VfbG9jayhzcmNfZG9tYWluKTsKCXJj dV9sb2NrKGRzdF9kb21haW4pOwoKCWZvciAob3AgPSBnbnRjb3B5WzBdOyBvcCA8IG5yX29wczsg b3ArKykgewoJCXNyY19mcmFtZSA9IF9fYWNxdWlyZV9ncmFudF9mb3JfY29weShzcmNfZG9tYWlu LCA8b3Auc3JjLmdyZWY+KTsKCQleIGhlcmUgaW1wbGllcyBhIGhvbGRpbmcgYSBwb3RlbnRpYWwg Y29udGVuZGVkIHBlciBDUFUgbG9jayBvbiB0aGUKCSAgICAgICAgICByZW1vdGUgZ3JhbnQgdGFi bGUuCgkJc3JjX3ZhZGRyID0gbWFwX2RvbWFpbl9wYWdlKHNyY19mcmFtZSk7CgkKCQlkc3RfZnJh bWUgPSBfX2dldF9wYWdlZF9mcmFtZShkc3RfZG9tYWluLCA8b3AuZHN0Lm1mbj4pCgkJZHN0X3Zh ZGRyID0gbWFwX2RvbWFpbl9wYWdlKGRzdF9mcmFtZSk7CgoJCW1lbWNweShkc3RfdmFkZHIgKyA8 b3AuZHN0Lm9mZnNldD4sCgkJCXNyY19mcmFtZSArIDxvcC5zcmMub2Zmc2V0PiwKCQkJPG9wLnNp emU+KTsKCgkJdW5tYXBfZG9tYWluX3BhZ2Uoc3JjX2ZyYW1lKTsKCQl1bm1hcF9kb21haW5fcGFn ZShkc3RfZnJhbWUpOwoKCXJjdV91bmxvY2soc3JjX2RvbWFpbik7CglyY3VfdW5sb2NrKGRzdF9k b21haW4pOwoKV2hlcmVhcyB3ZSBwcm9wb3NlIGRvaW5nIGEgbWVtY3B5IGZyb20gYSBwcmVtYXBw ZWQgcmVnaW9uIHRoYXQgYSBmcm9udGVuZCB3b3VsZApoYXZlIHRvIHNldC4gVGhpcyByZWdpb24g d291bGQgYWxzbyBsZXQgdXMgYXZvaWQgdGhlIHRyaWNreSBjYXNlIHRoYXQgdGhlIGZyb250ZW5k CmxpbmVhciByZWdpb24gbWlnaHQgYmUgc3Bhbm5lZCBhY3Jvc3MgNEsgcGFnZSBib3VuZGFyeSAo d2hpY2ggbGVhZHMgdG8gaGF2ZSBvbmUgc2xvdAp3aXRoIGEgdGlueSBhbW91bnQgb2YgZGF0YSku IFRoZSBkaXNhZHZhbnRhZ2Ugd291bGQgYmUgdG8gcmVxdWlyZSBhbiBhZGRpdGlvbmFsCmNvcHkg aW4gc3RlcHMgNCkgYW5kIDYpLiBCdXQgZXZlbiB3aXRoIHRoYXQgdGhlIGJlbmVmaXRzIGFyZSBz dGlsbCBxdWl0ZSBiaWcgYXMKcmVzdWx0cyBoaW50IGluIHNlY3Rpb24gW1BlcmZvcm1hbmNlXSgj cGVyZm9ybWFuY2UpLgoKXGNsZWFycGFnZQoKIyMgR3Vlc3QgUmVjZWl2ZQoKVGhlIHZpZXcgb2Yg dGhlIHNoYXJlZCByZWNlaXZlIHJpbmcgaXMgdGhlIGZvbGxvd2luZzoKCiAgICAgMCAgICAgMSAg ICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyBvY3RldAogICAgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IHJlcV9wcm9kICAg ICAgICAgICAgICAgfCByZXFfZXZlbnQgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCByc3BfcHJvZCAgICAg ICAgICAgICAgIHwgcnNwX2V2ZW50ICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgcHZ0ICAgICAgICAgICAg ICAgICAgICB8IHBhZFs0NF0gICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8IC4uLi4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWzY0Ynl0ZXNdCiAgICArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgaWQgICAgICAg ICB8IHBhZCAgICAgICB8IGdyZWYgICAgICAgICAgICAgICAgICAgfCAtPidzdHJ1Y3QgbmV0aWZf cnhfcmVxdWVzdCcKICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKwogICAgfCBpZCAgICAgICAgIHwgb2Zmc2V0ICAgIHwgZmxhZ3MgICAgIHwgc3Rh dHVzICAgICB8IC0+J3N0cnVjdCBuZXRpZl9yeF9yZXNwb25zZScKICAgICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfC9cL1wvXC9cL1wvXC9c L1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC98IC4uIE4KICAgICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkVhY2ggZW50cnkgaW4g dGhlIHJpbmcgb2NjdXBpZXMgMTYgb2N0ZXRzIHdoaWNoIG1lYW5zIGEgcGFnZSBmaXRzIDI1NiBl bnRyaWVzLgpBZGRpdGlvbmFsbHkgYSBgc3RydWN0IG5ldGlmX2V4dHJhX2luZm9gIG1heSBvdmVy bGF5IHRoZSByeCByZXF1ZXN0IGluIHdoaWNoCmNhc2UgdGhlIGZvcm1hdCBpczoKCiAgICArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgdHlw ZSB8ZmxhZ3N8IHR5cGUgc3BlY2lmaWMgZGF0YSAoZ3NvLCBoYXNoLCBldGMpfCAtPidzdHJ1Y3Qg bmV0aWZfZXh0cmFfaW5mbycKICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKwoKTm90aWNlIHRoZSBsYWNrIG9mIHBhZGRpbmcsIGFuZCB0aGF0IGlz IGJlY2F1c2UgaXQncyBub3QgdXNlZCBvbiBSeCwgYXMgUngKcmVxdWVzdCBib3VuZGFyeSBpcyA4 IG9jdGV0cy4KCkluIGVzc2VuY2UgdGhlIHN0ZXBzIGZvciByZWNlaXZpbmcgb2YgYSBwYWNrZXQg aW4gYSBMaW51eCBmcm9udGVuZCBpcyBhcwogZnJvbSBiYWNrZW5kIHRvIGZyb250ZW5kIG5ldHdv cmsgc3RhY2s6CgoqKkJhY2tlbmQqKgoKMSkgQmFja2VuZCB0cmFuc21pdCBmdW5jdGlvbiBzdGFy dHMKClsqTGludXgtc3BlY2lmaWMqOiBJdCBtZWFucyB3ZSB0YWtlIGEgcGFja2V0IGFuZCBhZGQg dG8gYW4gaW50ZXJuYWwgcXVldWUKIChwcm90ZWN0ZWQgYnkgYSBsb2NrKSB3aGVyZWFzIGEgc2Vw YXJhdGUgdGhyZWFkIHRha2VzIGl0IGZyb20gdGhhdCBxdWV1ZSBhbmQKIHByb2Nlc3MgdGhlIGFj dHVhbCBsaWtlIHRoZSBzdGVwcyBiZWxvdy4gVGhpcyB0aHJlYWQgaGFzIHRoZSBwdXJwb3NlIG9m CiBhZ2dyZWdhdGluZyBhcyBtdWNoIGNvcGllcyBhcyBwb3NzaWJsZS5dCgoyKSBDaGVja3MgaWYg dGhlcmUgYXJlIGVub3VnaCByeCByaW5nIHNsb3RzIHRoYXQgY2FuIGFjY29tb2RhdGUgdGhlIHBh Y2tldC4KCjMpIEdldHMgYSByZXF1ZXN0IGZyb20gdGhlIHJpbmcgZm9yIHRoZSBmaXJzdCBkYXRh IHNsb3QgYW5kIGZldGNoZXMgdGhlIGBncmVmYAogICBmcm9tIGl0LgoKNCkgQ3JlYXRlIGdyYW50 IGNvcHkgb3AgZnJvbSBwYWNrZXQgcGFnZSB0byBgZ3JlZmAuCgpbIEl0J3MgdXAgdG8gdGhlIGJh Y2tlbmQgdG8gY2hvb3NlIGhvdyBpdCBmaWxscyB0aGlzIGRhdGEuIEUuZy4gYmFja2VuZCBtYXkK ICBjaG9vc2UgdG8gbWVyZ2UgYXMgbXVjaCBhcyBkYXRhIGZyb20gZGlmZmVyZW50IHBhZ2VzIGlu dG8gdGhpcyBzaW5nbGUgZ3JlZiwKICBzaW1pbGFyIHRvIG1lcmdlYWJsZSByeCBidWZmZXJzIGlu IHZob3N0LiBdCgo1KSBTZXRzIHVwIGZsYWdzL2NoZWNrc3VtIGluZm8gb24gZmlyc3QgcmVxdWVz dC4KCjYpIEdldHMgYSByZXNwb25zZSBmcm9tIHRoZSByaW5nIGZvciB0aGlzIGRhdGEgc2xvdC4K CjcpIFByZWZpbGwgZXhwZWN0ZWQgcmVzcG9uc2UgcmluZyB3aXRoIHRoZSByZXF1ZXN0IGBpZGAg YW5kIHNsb3Qgc2l6ZS4KCjgpIFVwZGF0ZSB0aGUgcmVxdWVzdCBjb25zdW1lciBpbmRleCAoYHJl cV9jb25zYCkKCjkpIEdldHMgYSByZXF1ZXN0IGZyb20gdGhlIHJpbmcgZm9yIHRoZSBmaXJzdCBl eHRyYSBpbmZvIFtvcHRpb25hbF0KCjEwKSBTZXRzIHVwIGV4dHJhIGluZm8gKGUuZy4gR1NPIGRl c2NyaXB0b3IpIFtvcHRpb25hbF0gcmVwZWF0IHN0ZXAgOCkuCgoxMSkgUmVwZWF0IHN0ZXBzIDMg dGhyb3VnaCA4IGZvciBhbGwgcGFja2V0IHBhZ2VzIGFuZCBzZXQgYE5FVFJYRl9tb3JlX2RhdGFg CiAgIGluIHRoZSBOLTEgc2xvdC4KCjEyKSBQZXJmb3JtIHRoZSBgR05UVEFCT1BfY29weWAgaHlw ZXJjYWxsLgoKMTMpIENoZWNrIGlmIHRoZSBncmFudCBvcGVyYXRpb25zIHN0YXR1cyB3YXMgaW5j b3JyZWN0IGFuZCBpZiBzbyBzZXQgYHN0YXR1c2AKICAgIG9mIHRoZSBgc3RydWN0IG5ldGlmX3J4 X3Jlc3BvbnNlYCBmaWVsZCB0byBORVRJRl9SU1BfRVJSLgoKMTQpIFVwZGF0ZSB0aGUgcmVzcG9u c2UgcHJvZHVjZXIgaW5kZXggKGByc3BfcHJvZGApCgoqKkZyb250ZW5kKioKCjE1KSBGcm9udGVu ZCBnZXRzIGFuIGludGVycnVwdCBhbmQgcnVucyBpdHMgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGlu ZQoKMTYpIENoZWNrcyBpZiB0aGVyZSdzIHVuY29uc3VtZWQgcmVzcG9uc2VzCgoxNykgQ29uc3Vt ZXMgYSByZXNwb25zZSBmcm9tIHRoZSByaW5nIChmaXJzdCByZXNwb25zZSBmb3IgYSBwYWNrZXQp CgoxOCkgUmV2b2tlIHRoZSBgZ3JlZmAgaW4gdGhlIHJlc3BvbnNlCgoxOSkgQ29uc3VtZXMgZXh0 cmEgaW5mbyByZXNwb25zZSBbb3B0aW9uYWxdCgoyMCkgV2hpbGUgTi0xIHJlcXVlc3RzIGhhcyBg TkVUUlhGX21vcmVfZGF0YWAsIHRoZW4gZmV0Y2ggZWFjaCBvZiByZXNwb25zZXMKICAgIGFuZCBy ZXZva2UgdGhlIGRlc2lnbmF0ZWQgYGdyZWZgLgoKMjEpIFVwZGF0ZSB0aGUgcmVzcG9uc2UgY29u c3VtZXIgaW5kZXggKGByc3BfY29uc2ApCgoyMikgKkxpbnV4LXNwZWNpZmljKjogQ29weSAoZnJv bSBmaXJzdCBzbG90IGdyZWYpIHVwIHRvIDI1NiBieXRlcyB0byB0aGUgbGluZWFyCiAgICByZWdp b24gb2YgdGhlIHBhY2tldCBtZXRhZGF0YSBzdHJ1Y3R1cmUgKHNrYikuIFRoZSByZXN0IG9mIHRo ZSBwYWdlcwogICAgcHJvY2Vzc2VkIGluIHRoZSByZXNwb25zZXMgYXJlIHRoZW4gYWRkZWQgYXMg ZnJhZ3MuCgoyMykgU2V0IGNoZWNrc3VtIGluZm8gYmFzZWQgb24gZmlyc3QgcmVzcG9uc2UgZmxh Z3MuCgoyNCkgQ2FsbCBwYWNrZXQgaW50byB0aGUgbmV0d29yayBzdGFjay4KCjI1KSBBbGxvY2F0 ZSBuZXcgcGFnZXMgYW5kIGFueSBuZWNlc3NhcnkgcGFja2V0IG1ldGFkYXRhIHN0cnV0dXJlcyB0 byBuZXcKICAgIHJlcXVlc3RzLiBUaGVzZSByZXF1ZXN0cyB3aWxsIHRoZW4gYmUgdXNlZCBpbiBz dGVwIDEpIGFuZCBzbyBmb3J0aC4KCjI2KSBVcGRhdGUgdGhlIHJlcXVlc3QgcHJvZHVjZXIgaW5k ZXggKGByZXFfcHJvZGApCgoyNykgQ2hlY2sgd2hldGhlciBiYWNrZW5kIG5lZWRzIG5vdGlmaWNh dGlvbjoKCjI3LjEpIElmIHNvLCBQZXJmb3JtIGh5cGVyY2FsbCBgRVZUQ0hOT1Bfc2VuZGAgd2hp Y2ggbWlnaHQgbWVhbiBhIF9fVk1FWElUX18KICAgICAgZGVwZW5kaW5nIG9uIHRoZSBndWVzdCB0 eXBlLgoKMjgpIFVwZGF0ZSBgcnNwX2V2ZW50YCB0byBgcmVzcG9uc2UgY29uc3VtZXIgaW5kZXgg KyAxYCBzdWNoIHRoYXQgZnJvbnRlbmQKICAgIHJlY2VpdmUgYSBub3RpZmljYXRpb24gb24gdGhl IGZpcnN0IG5ld2x5IHByb2R1Y2VkIHJlc3BvbnNlLgogICAgW29wdGlvbmFsLCBpZiBmcm9udGVu ZCBpcyBwb2xsaW5nIHRoZSByaW5nIGFuZCBuZXZlciBzbGVlcHNdCgpUaGlzIHByb3Bvc2FsIGFp bXMgYXQgcmVwbGFjaW5nIHN0ZXAgNCksIDEyKSBhbmQgIDIyKSB3aXRoIGEgbWVtY3B5IGFuZCBh bGxvdwpmcm9udGVuZCB0byBpbnN0ZWFkIHB1bGwgZnJvbSBhIHBlcm1hbmVudGx5IG1hcHBlZCBy ZWdpb24uIEZ1cnRoZXJtb3JlIGl0CmZ1cnRoZXIgYWxsb3dzIGZhc3QgcmVjeWNsaW5nIG9mIHVu dXNlZCBncmVmcyBmb3IgcmVwbGluaXNoaW5nIHRoZSByaW5nLgoKRGVwZW5kaW5nIG9uIHRoZSBp bXBsZW1lbnRhdGlvbiwgcmVjZWl2ZSBwYXRoIGl0IHdvdWxkIG1lYW4gdGhhdCB3ZSBubyBsb25n ZXIKd291bGQgbmVlZCB0byBhZ2dyZWdhdGUgYXMgbXVjaCBhcyBncmFudCBvcHMgYXMgcG9zc2li bGUgKHN0ZXAgMSkgYW5kIGNvdWxkCnRyYW5zbWl0IHRoZSBwYWNrZXQgb24gdGhlIHRyYW5zbWl0 IGZ1bmN0aW9uIChlLmcuIExpbnV4IGBgYG5kb19zdGFydF94bWl0YGBgKQphcyBwcmV2aW91c2x5 IHByb3Bvc2VkCmhlcmVcW1swXShodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvYXJjaGl2ZXMv aHRtbC94ZW4tZGV2ZWwvMjAxNS0wNS9tc2cwMTUwNC5odG1sKVxdLgpUaGlzIHdvdWxkIGhlYXZp bHkgaW1wcm92ZSBlZmZpY2llbmN5IHNwZWNpZmlhbGx5IGZvciBzbWFsbGVyIHBhY2tldHMuIFdo aWNoIGluCnJldHVybiB3b3VsZCBkZWNyZWFzZSBSVFQsIGhhdmluZyBkYXRhIGJlaW5nIGFja25v bGVkZ2VkIG11Y2ggcXVpY2tlci4KClxjbGVhcnBhZ2UKCiMgVXNlIENhc2VzIGFuZCBSZWNlbnQg VHJlbmRzIGluIE5ldHdvcmtpbmcKClJlY2VudCB0cmVuZHMgaW4gbmV0d29ya2luZyBhcmUgYWlt aW5nIGhlYXZpbHkgYXQgc3BlY2lhbGl6ZWQgbmV0d29yayBzdGFja3MKYW5kIHBhY2tldCBJL08g ZW5naW5lcy4gTmV0d29yayBiYWNrZW5kcyBhbmQgYm90aCBwYXJ0aWFsL2Z1bGwgYnlwYXNzIFBh Y2tldApJL08gZW5naW5lcyBoYXZlIGJlZW4gYXBwZWFyaW5nIGZyb20gdmVuZG9ycyAoT3Blbk9u bG9hZCwgUkRNQSwgRFBESywgZXRjKSBhbmQKb3BlcmF0aW5nIHN5c3RlbXMgKEZyZWVCU0QgbmV0 bWFwLCBQRlJJTkdfRE5BKS4gVGhlc2UgYnJpbmcgbm92ZWx0eSBpbiB0aGUgc3BhY2UKb2YgTkZW LCBhbmQgZmFzdCBwYWNrZXQgcHJvY2Vzc2luZy4gU29tZSBvZiB0aGUgdGhpbmdzL3RlY2huaXF1 ZXMgdXNlZCBpbiB0aGVzZQphcHByb2FjaGVzIGluY2x1ZGU6CgogKiBQcmUtYWxsb2NhdGVkIFRY L1JYIGJ1ZmZlcnMvcGFnZXMKICogRWZmaWNpZW50IGRldmljZSBkcml2ZXJzCiAqIE1lbW9yeSBt YXBwZWQgYnVmZmVycwogKiBJL08gYmF0Y2hpbmcKICogUG9sbC1iYXNlZCBtZXRob2RzCgpJbiB0 aGlzIHNlY3Rpb24gd2UgZnVydGhlciBkaXNjdXNzIHNvbWUgb2YgdGhlc2UgdXNlLWNhc2VzIGFu ZCBob3cgdGhpcwpleHRlbnNpb24gY2FuIGJlIHVzZWZ1bCBmb3IgdGhlc2Ugc2NlbmFyaW9zCgpX aGlsZSB0aGlzIGRvY3VtZW50IGluaXRpYWxseSBhaW1lZCAoaS5lLiBpbiBoYWNrYXRvbiBkaXNj dXNzaW9uKSBhdCBwb2ludHMKWzMuMV0oI2d1ZXN0LXRyYW5zbWl0KSBhbmQgWzMuMl0oI2d1ZXN0 LXJlY2VpdmUpLCBpdCB3b3VsZCBsaWtlIHRvIGJlCmRpc2N1c3NlZCB3aXRoIGV4dGVuc2lvbmFi aWxpdHkgYXMgcmVhc29uZWQgb24gWzQuMV0oI25ldG1hcC1vbi1mcmVlYnNkKSwKWzQuMl0oI2Rh dGFwbGFuZS1kZXZlbG9wbWVudC1raXQtZHBkayksIFs0LjNdKCNleHByZXNzLWRhdGEtcGxhbmUt eGRwKSB1c2UKY2FzZXMuIEZvciBjb25zaWRlcmF0aW9uIEkgYWxzbyBoYXZlIHdvcmtpbmcgcHJv dG90eXBlcyBmb3IKWzQuMl0oI2RhdGFwbGFuZS1kZXZlbG9wbWVudC1raXQtZHBkayksIFs0LjNd KCNleHByZXNzLWRhdGEtcGxhbmUteGRwKSBzaG93aW5nCnJlYWxseSBwcm9taXNzaW5nIHJlc3Vs dHMuIFRoZSB3aG9sZSBhcmd1bWVudCBoZXJlIGlzIHRvIGltcHJvdmUgdGhlIG5ldGlmCnByb3Rv Y29sIHRvIGZ1cnRoZXIgYWR2ZXJ0aXNlIGFuZCBhbGxvdyByZWN5Y2xpbmcgZ3JhbnRzIG9uIHRo ZSBiYWNrZW5kIF9pZl8KaGludGVkL3JlcXVlc3RlZCBieSB0aGUgZnJvbnRlbmQuCgojIyBOZXRt YXAgb24gRnJlZUJTRAoKQnVmZmVycyB1c2VkIGJ5IG5ldG1hcC1tb2RlIGRyaXZlcnMgaW4gRnJl ZUJTRCBhcmUgcGVybWFuZW50bHkgYWxsb2NhdGVkIGJ5CmRlZmF1bHQgMksgYnl0ZXMKXFtbMV0o aHR0cHM6Ly9naXRodWIuY29tL2ZyZWVic2QvZnJlZWJzZC9ibG9iL21hc3Rlci9zeXMvZGV2L25l dG1hcC9uZXRtYXBfbWVtMi5jI0wzNjIpXF0KYW5kIGFyZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBw ZXIgbmV0bWFwLW1vZGUgZGV2aWNlIGFuZCBmcmVlZCBvbiBkZXZpY2UKdGVhcmRvd24uIG5ldG1h cCBpcyB0YXJnZXR0ZWQgYXQgbmV0d29yayBpbnRlbnNpdmUgd29ya2xvYWRzIChpLmUuIHRvIGFi bGUgdG8KZmlsbCB1cCAxMC80MCBHYml0IGNhcmRzIGZvciBhdCBsZWFzdCBwYWNrZXQgc2l6ZXMg PD0gMTUwMCBieXRlcykgc28gYmVpbmcgYWJsZQp0byBhdm9pZCB0aGUgZ3JhbnQgb3BzIGVuYWJs ZXMgRnJlZUJTRCBuZXR3b3JrIGJhY2tlbmQgdG8gdGFrZSBmdWxsIHRha2UKYWR2YW50YWdlIG9m IG5ldG1hcCB3aGljaCBpcyBpbiB0cmVlIGZyb20gdGhlIGxhc3QgY291cGxlIHllYXJzLiAgRm9y IGEgbmV0bWFwCnhlbi1uZXRiYWNrLCBvbmUgd291bGQgbWFwIHRoZSBmcm9udGVuZCBwYWdlcyBh bmQgdXNlIGluZGlyZWN0IGJ1ZmZlcnMgZmVhdHVyZQpvbiB0aGUgYmFja2VuZCBmb3IgYSB2aWYg b24gdG9wIG9mIHRoZSBuZXRtYXAtYmFzZWQgc3dpdGNoIChWQUxFKS4gVkFMRSBpcyBhCnNvZnR3 YXJlIHN3aXRjaCAob3IgYW4gZW5naW5lKSBiYXNlZCBvbiBuZXRtYXAKXFtbMl0oaHR0cHM6Ly93 d3cuZnJlZWJzZC5vcmcvY2dpL21hbi5jZ2k/cXVlcnk9dmFsZSZzZWt0aW9uPTQmbj0xKVxdLiBJ dCBpcwpyZWFsbHkgZmFzdCwgYnV0IHNvbWV3aGF0IGxpbWl0ZWQgaW4gZmVhdHVyZXMgd2hlbiBj b21wYXJlZCB0byBvcGVudnN3aXRjaCBvcgpMaW51eCBicmlkZ2UuIEl0IGhhcyBhIG5pY2UgY29u Y2VwdCBvZiBtb2R1bGFyaXR5IGRlY291cGxpbmcgc3dpdGNoaW5nIGxvZ2ljCihsb29rdXAgYW5k IHN3aXRjaCBzdGF0ZSkgYW5kIGZvd2FyZGluZyBlbmdpbmUgKHBvcnQgbG9ja2luZyBhbmQgZW5n aW5lCmFsZ29yaXRobSBvZiB0cmFuc3ZlcnNpbmcgcGFja2V0cyBiZXR3ZWVuIGRpZmZlcmVudCBw b3J0cykuCgojIyBEYXRhUGxhbmUgRGV2ZWxvcG1lbnQgS2l0IChEUERLKQoKRFBESyB1c2VzIHN0 YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlcnMgbGlrZSBuZXRtYXAgYnV0IG1vcmUgaW1wb3J0YW50 bHksCml0IGlzIGEgY29tcGxldGUga2VybmVsIGJ5cGFzcyBmcmFtZXdvcmsgYW5kIGl0cyBnZW5l cmFsIG9wZXJhdGlvbiBjb25zaXN0cwphcm91bmQgYnVzeSBwb2xsaW5nIHRoZSBOSUMgcmluZyBk ZXNjcmlwdG9ycyAqd2l0aG91dCogYW55IGludGVycnVwdHMgb3Igc3lzdGVtCmNhbGxzLiBFdmVy eXRoaW5nIGlzIGRvbmUgb24gdXNlcnNwYWNlIHRodXMgaGF2aW5nIHRvIG1ha2UgYW4gaHlwZXJj YWxsIHRvCmNvcHkgcGFja2V0IGJ1ZmZlcnMgaGVhdmlseSBkZXRlcmlvdGF0ZXMgdGhyb3VnaHB1 dCBpbiB0aGUgcmVzdCBvZiB0aGF0CnBpcGVsaW5lICh0aGF0IGlzIHRoZSByZXN0IG9mIHRoZSBO SUNzIGluIGEgZ2l2ZW4gcG9sbCBtb2RlIHRocmVhZCkuIEFkZGluZwpzdXBwb3J0IGZvciB0aGlz IHBlcm1hbmVudGx5IG1hcHBlZCByZWdpb24gd291bGQgYXZvaWQgdGhlIG5lZWQgZm9yIG1ha2lu ZyBhbnkKc3lzdGVtIGNhbGxzIGFuZCBqdXN0IHVzZSBkYXRhIGJ1ZmZlcnMgZ3JhbnRlZCBieSB0 aGUgZ3Vlc3Qgd2l0aCB0aGUgYWRkZWQKYmVuZWZpdCBvZiBhIHJlYWxseSBmYXN0IG1lbWNweSB3 aXRob3V0IHRoZSBwcm9ibGVtcyBhc3NvY2lhdGVkIHdpdGggY29zdHMgb2YKRlBVIHNhdmUvcmVz dG9yZSAoaW4gdGhlIGJhY2tlbmQga2VybmVsIG9yIGh5cGVydmlzb3IpLiBPbmx5IHRoZSBub3Rp ZmljYXRpb24Kd291bGQgYmUgdGhlIGxhc3QgdGhpbmcgaW4gdGhlIHdheSwgd2hpY2ggY2FuIGJl IG1pdGlnYWdlZCBieSBoYXZpbmcgZWFjaCBzaWRlCihpLmUuIGVhY2ggRFBESyBkcml2ZXIpIG5v dCBzZXR0aW5nIHJlc3BlY3RpdmUgZXZlbnQgaW5kZXhlcyAocnNwX2V2ZW50IGFuZApyZXFfZXZl bnQsIGFzIG1lbnRpb25lZCBwcmV2aW91c2x5KS4KCiMjIGVYcHJlc3MgRGF0YSBQbGFuZSAoWERQ KQoKU3RhcnRpbmcgd2l0aCBMaW51eCA0LjggTGludXggYnJpbmdzIGFuIGV4cGVyaW1lbnRhbCBm ZWF0dXJlClxbWzNdKGh0dHBzOi8vZ2l0aHViLmNvbS9pb3Zpc29yL2JwZi1kb2NzL2Jsb2IvbWFz dGVyL0V4cHJlc3NfRGF0YV9QYXRoLnBkZilcXS4KSXQgaXMgd2hpY2ggaXMgdG8gcmVjZWl2ZSBh bmQvb3IgZm9yd2FyZCBwYWNrZXQgYnVmZmVycyBhdCBlYXJseSBzdGFnZXMgb2YgdGhlCmRyaXZl ciBSWCBwYXRoLiAgUGFja2V0IGZpbHRlcnMvZm9yd2FyZGVycyBieSBsb2FkaW5nIGEgZUJQRiAo RXh0ZW5kZWQgQmVya2VsZXkKUGFja2V0IEZpbHRlcikgcHJvZ3JhbSB3aGljaCB0aGUgZHJpdmVy IHdpbGwgcnVuIGJlZm9yZSBldmVuIGFueSBza2JzIGFyZQphbGxvY2F0ZWQuIFNvbWUgb2YgdXNl LWNhc2VzIGluY2x1ZGUgYmUgYSBJTEEgcm91dGVyIG9yIGEgbG9hZC1iYWxhbmNlciBhbmQKZnV0 dXJlIGFwcGxpY2F0aW9ucyBjb3VsZCBiZSBhIHByb2dyYW1hYmxlIHN3aXRjaC4KCkRyaXZlcnMg c3VwcG9ydGluZyBYRFAgKGN1cnJlbnRseSkgcmVxdWlyZQpcW1s0XShodHRwOi8vcHJvdG90eXBl LWtlcm5lbC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbmV0d29ya2luZy9YRFAvZGVzaWduL3Jl cXVpcmVtZW50cy5odG1sI3dyaXRlLWFjY2Vzcy10by1wYWNrZXQtZGF0YSlcXQpzZXR0aW5nIHVw IGEgYmlkaXJlY3Rpb25hbCBETUEKcmVnaW9uIChvciBpbiBvdXIgY2FzZSBhIGdyYW50ZWQgcmVn aW9uIHdpdGggUi9XIHBlcm1pc3Npb25zKSBhbmQgcmV1c2UgcGFja2V0CnBhZ2VzIGFmdGVyIGJl aW5nIGRvbmUgaW4gdGhlIGVCUEYgcHJvZ3JhbS4gTm8gdW5ib3VuZGVkIG1lbW9yeSBhbGxvY2F0 aW9ucyBhcmUKbWFkZSAoc3VjaCBxdWV1ZWluZyB3aXRoIG5ldyBwYWdlcyksIGJ1dCBpbnN0ZWFk IHJlY3ljbGUgdGhlIHBhY2tldCBwYWdlcyBhZnRlcgp3ZSdyZSBkb25lIGluIEJQRi4KClRoaXMg Y3JlYXRlcyBhbiBvcHBvcnR1bml0eSBmb3IgYSBiYWNrZW5kIHRvIGF2b2lkIG1hcCBhbmQgdW5t YXAgZ3JhbnRzLiBCUEYKcHJvZ3JhbSBjb3VsZCBhbHNvIG1vZGlmeSB0aGUgcGFja2V0IGFuZCB0 aHVzIHJlcXVlc3RlZCB0byBmb3J3YXJkIG9uIHRoZSBzYW1lCnBvcnQsIHJldXNpbmcgdGhlIHNh bWUgUlggZ3JhbnQgb24gVFguIFdlIHNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSBhCmdyYW50IHJl Z2lvbiB3aXRoIFIvVyBwZXJtaXNzaW9ucyB0byB0aGUgYmFja2VuZCwgd2hpY2ggd291bGQgYmUg ZXF1aXZhbGVudApvZiBbNC4xXSgjbmV0bWFwLW9uLWZyZWVic2QpLiBBbHRob3VnaCBwYWNrZXRz IGJldHdlZW4gZ3Vlc3RzIHdvdWxkIHN0aWxsIGludm9sdmUKYSBjb3B5LgoKIyMgRXhpc3Rpbmcg cGFnZSByZWN5Y2xlIGFwcHJvYWNoZXMgaW4gTklDcwoKTGludXggKGFuZCBwcm9iYWJseSBvdGhl ciBPU2VzKSBmb2xsb3cgc2ltaWxhciBhcHByb2FjaGVzIGluCm5ldHdvcmsgZHJpdmVycyAoZS5n LiBpeGdiZSBhbmQgbWVsbGFub3gpIHRvIGFkZHJlc3MgdGhlIGJvdHRsZW5lY2tzIG9mCnBhZ2Ut YWxsb2NhdG9yIGFuZCBETUEgQVBJcy4gRm9yIGV4YW1wbGU6CgoxKSBpeGdiZSAoYW5kIHByb2Jh Ymx5IG90aGVyIEludGVsIGNhcmRzKSB3aWxsIG1lbWNweSB1cCB0byAyNTYgYnl0ZXMgaW50bwpu ZXdseSBhbGxvY2F0ZWQgcGFja2V0IGJ1ZmZlciBhbmQgcmVjeWNsZSBoYWxmIG9mIHBhZ2UgZm9y IHJlZmlsbGluZyBvdGhlcgphdmFpbGFibGUgZGVzY3JpcHRvcnMKXFtbNV0oaHR0cDovL2x4ci5m cmVlLWVsZWN0cm9ucy5jb20vc291cmNlL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2Jl L2l4Z2JlX21haW4uYyNMMjA3MylcXTsKCjIpIG90aGVyIGRyaXZlcnMgKHN1Y2ggYXMgbWVsbGFu b3gpIGNob29vc2UgdG8gYWxsb2NhdGUgcGFnZSBvcmRlcj4xIGFuZCBkaXZpZGUgdGhlbQptdWx0 aXBsZSBOSUMgZGVzY3JpcHRvcnMKXFtbNl0oaHR0cDovL2x4ci5mcmVlLWVsZWN0cm9ucy5jb20v c291cmNlL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fcnguYyNMNTIpXF07 CgpcY2xlYXJwYWdlCgojIFdpcmUgUGVyZm9ybWFuY2UKClRoaXMgc2VjdGlvbiBpcyBhIGdsb3Nz YXJ5IG1lYW50IHRvIGtlZXAgaW4gbWluZCBudW1iZXJzIG9uIHRoZSB3aXJlLgoKVGhlIG1pbmlt dW0gc2l6ZSB0aGF0IGNhbiBmaXQgaW4gYSBzaW5nbGUgcGFja2V0IHdpdGggc2l6ZSBOIGlzIGNh bGN1bGF0ZWQgYXM6CgogIFBhY2tldCA9IEV0aGVybmV0IEhlYWRlciAoMTQpICsgUHJvdG9jb2wg RGF0YSBVbml0ICg0NiAtIDE1MDApID0gNjAgYnl0ZXMKCkluIHRoZSB3aXJlIGl0J3MgYSBiaXQg bW9yZToKCiAgUHJlYW1ibGUgKDcpICsgU3RhcnQgRnJhbWUgRGVsaW1pdGVyICgxKSArIFBhY2tl dCArIENSQyAoNCkgKyBJbnRlcmZyYW1lIGdhcCAoMTIpID0gODQgYnl0ZXMKCkZvciBnaXZlbiBM aW5rLXNwZWVkIGluIEJpdHMvc2VjIGFuZCBQYWNrZXQgc2l6ZSwgcmVhbCBwYWNrZXQgcmF0ZSBp cwpjYWxjdWxhdGVkIGFzOgoKICBSYXRlID0gTGluay1zcGVlZCAvICgoUHJlYW1ibGUgKyBQYWNr ZXQgKyBDUkMgKyBJbnRlcmZyYW1lIGdhcCkgKiA4KQoKTnVtYmVycyB0byBrZWVwIGluIG1pbmQg KHBhY2tldCBzaXplIGV4Y2x1ZGVzIFBIWSBsYXllciwgdGhvdWdoIHBhY2tldCByYXRlcwpkaXNj bG9zZWQgYnkgdmVuZG9ycyB0YWtlIHRob3NlIGludG8gYWNjb3VudCwgc2luY2UgaXQncyB3aGF0 IGdvZXMgb24gdGhlCndpcmUpOgoKfCBQYWNrZXQgKyBDUkMgKGJ5dGVzKSAgIHwgMTAgR2JpdC9z ICB8ICA0MCBHYml0L3MgfCAgMTAwIEdiaXQvcyAgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t fDotLS0tLS0tLS0tOnw6LS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLTp8CnwgNjQgICAgICAgICAg ICAgICAgICAgICB8IDE0Ljg4ICBNcHBzfCAgNTkuNTIgTXBwc3wgIDE0OC44MCBNcHBzIHwKfCAx MjggICAgICAgICAgICAgICAgICAgIHwgIDguNDQgIE1wcHN8ICAzMy43OCBNcHBzfCAgIDg0LjQ2 IE1wcHMgfAp8IDI1NiAgICAgICAgICAgICAgICAgICAgfCAgNC41MiAgTXBwc3wgIDE4LjExIE1w cHN8ICAgNDUuMjkgTXBwcyB8CnwgMTUwMCAgICAgICAgICAgICAgICAgICB8ICAgODIyICBLcHBz fCAgIDMuMjggTXBwc3wgICAgOC4yMiBNcHBzIHwKfCA2NTUzNSAgICAgICAgICAgICAgICAgIHwg ICB+MTkgIEtwcHN8ICA3Ni4yNyBLcHBzfCAgMTkwLjY4IEtwcHMgfAoKQ2FwdGlvbjogIE1wcHMg KE1pbGxpb24gcGFja2V0cyBwZXIgc2Vjb25kKSA7IEtwcHMgKEtpbG8gcGFja2V0cyBwZXIgc2Vj b25kKQoKXGNsZWFycGFnZQoKIyBQcm9wb3NlZCBFeHRlbnNpb24KCiMjIFRlcm1pbm9sb2d5Cgpg ZGF0YSBncmVmYCByZWZlcnMgdG8gdGhlIHJldXNhYmxlL3N0YWdpbmcgZ3JhbnRzLCB3aGVyZWFz IGBncmVmYCBhcmUgdGhlCm9uZXMgdGhhdCBhcmUgZ3JhbnRlZC9yZXZva2VkIGZvciBlYWNoIHBh Y2tldCBiZWluZyBzZW50LiBgY29tbWFuZCByaW5nYApyZWZlcnMgdG8gdGhlIGN1cnJlbnQgcmlu Zywgd2hlcmVhcyBgZGF0YSBsaXN0YCByZWZlcnMgdG8gdGhlIG9uZSBwcm9wb3NlZApiZWxvdy4K CiMjIFhlbnN0b3JlCgoiZmVhdHVyZS1zdGFnaW5nLWdyYW50cyIgaXMgYSBjYXBhYmlsaXR5IHRv IGFsbG93IHRoZSB1c2Ugb2YgYSBzZXQgb2YKcmVjeWNsZWQgYnVmZmVycyBwZXJtYW5lbnRseSBt YXBwZWQgYXQgdGhlIGRldmljZSBzZXR1cC4gSWYKYWR2ZXJ0aXNlZCwgdGhlIGZyb250ZW5kIHdp bGwgZ3JhbnQgYSByZWdpb24gZXF1aXZhbGVudCB0byBgYGBtYXhpbXVtIG51bWJlcgpvZiBzbG90 cyBwZXIgcmluZyAqIHNpemUgb2YgYnVmZmVyYGBgIHdoZXJlOgoKICogYG1heGltdW0gbnVtYmVy IG9mIHNsb3RzIHBlciByaW5nYCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVlc3Qgc3RydWN0dXJlCiAg IHRoYXQgY2FuIGJlIGZpdCB3aXRoaW4gdGhlIGNvbW1hbmQgcmluZy4gQnkgZGVmYXVsdCBhIHJl cXVlc3QKICAgc3RydWN0dXJlIGNvbnN1bWVzIDE2IGJ5dGVzLiBUaGUgZmlyc3QgNjQgYnl0ZXMg b2YgYSByaW5nIGFyZSB1c2VkIGJ5CiAgIHByb2R1Y2VyIGFuZCBjb25zdW1lciBpbmRpY2llcy4K ICogYHNpemUgb2YgYnVmZmVyYCBpcyB0aGUgbWF4aW11bSBwb3J0aW9uIG9mIHRoZSBwYWNrZXQg dGhlIGJhY2tlbmQgKGFuZAogICBmcm9udGVuZCkgaGF2ZSBuZWdvdGlhdGVkIHdoaWNoIHdpbGwg YmUgcHV0IGZvciBlYWNoIHNsb3Qgb2YgdGhlCiAgIGBkYXRhIHJpbmdgLgoKV2hpY2ggbWVhbnMg dGhhdCBmb3IgMjU2IHBvc3NpYmxlIHBhY2tldHMgaW4gcmluZyB3aXRoIDI1NiBieXRlcyBvZgpj aG9zZW4gc2l6ZSB0aGUgYW1vdW50IG9mIG1lbW9yeSB0byBiZSBwZXJtYW5lbnRseSBncmFudGVk IGlzIGEgcmVnaW9uIG9mCjY0S0IgaS5lLiAxNiBncmVmcy4KClRoZSBsYWNrIG9mICJmZWF0dXJl LXN0YWdpbmctZ3JhbnRzIiBvciBhIHZhbHVlIG9mIDAgbWVhbnMgdGhhdCBpdCdzIG5vdApzdXBw b3J0ZWQuIElmIGZlYXR1cmUgaXMgcHJlc2VudCB0aGVuIGEgc2Vjb25kIGVudHJ5ICJzdGFnaW5n LWdyYW50cy1zaXplcyIKbXVzdCBleGlzdCBhbmQgaXQgY29udGFpbnMgdGhlIHNpemVzIHRoYXQg Y2FuIGJlIHVzZWQgcGVyIHNsb3QuIFRvIGF2b2lkCmZyb250ZW5kIGNsb2JiZXJpbmcgd2l0aCB2 YXJpb3VzIGRpZmZlcmVudCB2YWx1ZXMsIHdlIGxpbWl0IHRvIGEgc2V0IG9mIGZpeGVkCm9uZXMg c2VtaS1jb2xvbiBkZWxpbWl0ZWQuCgpUaGUgYWxsb3dlZCB2YWx1ZXMgYXJlIGltcGxlbWVudGF0 aW9uIHNwZWNpZmljLiBFeGFtcGxlcyBvZiBnb29kIHZhbHVlcwppbmNsdWRlOiAyNTYgKHByb3Rv Y29sL2hlYWRlciByZWdpb24pLCAyMDQ4IChmaXRzIDEgTVNTIHdoaWNoIGlzIGNvbW1vbiB0byBi ZQppbiB0aGUgbGluZWFyIHBhcnQgb2YgbGludXggcGFja2V0cyksIDQwOTYgKGdyYW50IHBlciBw YWNrZXQgaWYgZmVhdHVyZS1zZz0wLCBmb3IKRFBESy9YRFAvbmV0bWFwIGJ1ZmZlcnMpIGFuZCA2 NTUzNSAobWF4aW11bSBwYWNrZXQgc2l6ZSBpLmUuCmBgYE5FVElGX05SX1NMT1RTX01JTiAqIFhF Tl9QQUdFX1NJWkVgYGAgZm9yIGZlYXR1cmUtc2c9MSkuCgpJbmRpdmlkdWFsIHNpemUgY292ZXJl ZCBwZXIgZW50cnkgYnkgZnJvbnRlbmQgaXMgdGhyb3VnaCBgYGB0eC1kYXRhLWxlbmBgYCBvcgpg YGByeC1kYXRhLWxlbmBgYCB3aGljaCBjb250YWlucyBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIG9u IGEgc2luZ2xlIHBhY2tldC4KQ2hvc2VuIHZhbHVlcyBvZiAidHgtZGF0YS1sZW4iIGFuZCAicngt ZGF0YS1sZW4iIGFyZSBhc3ltbWV0cmljYWwgKGhlbmNlIGNhbgpiZSBkaWZmZXJlbnQgYmV0d2Vl biBUWCBhbmQgUlgpIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCB0aGlzIGxpc3Qgb2YgdmFsaWQgc2l6 ZXMuCkZvciBpdCdzIHVzZSBzZWUgW2RhdGFwYXRoXSgjZGF0YXBhdGgtY2hhbmdlcykgc2VjdGlv biBmdXJ0aGVyIGJlbG93LgoKCS9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmlmLzAvZmVhdHVyZS1z dGFnaW5nLWdyYW50cyA9ICIxIgoJL2xvY2FsL2RvbWFpbi8xL2RldmljZS92aWYvMC9zdGFnaW5n LWdyYW50cy1zaXplcyA9ICIxMjg7MjU2OzIwNDg7NDA5NiIKCS9sb2NhbC9kb21haW4vMS9kZXZp Y2UvdmlmLzAvcXVldWUtMC90eC1kYXRhLXJlZjAgPSAiPGRhdGEtcmVmLXR4MD4iCgkvbG9jYWwv ZG9tYWluLzEvZGV2aWNlL3ZpZi8wL3F1ZXVlLTAvdHgtZGF0YS1sZW4gPSAiMTI4IgoJL2xvY2Fs L2RvbWFpbi8xL2RldmljZS92aWYvMC9xdWV1ZS0wL3J4LWRhdGEtcmVmMCA9ICI8ZGF0YS1yZWYt cngwPiIKCS9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmlmLzAvcXVldWUtMC9yeC1kYXRhLWxlbiA9 ICIyNTYiCgpUaGUgYGBgdHgtZGF0YS1yZWYldWBgYCBhbmQgYGBgcngtZGF0YS1yZWYldWBgYCBk ZXNjcmliZSB0aGUgbGlzdCBvZiBncmFudHMgdG8gYmUKdXNlZCBmb3IgZWFjaCByaW5nLiBUaGUg ZXhhbXBsZSBhYm92ZSBleGVtcGxpZmllcyBhIGxpc3QgY29tcG9zZWQgb2YgYSBzaW5nbGUKcGFn ZSB3aGVyZWFzIG11bHRpcGxlIHBhZ2VzIHdvdWxkIGJlIGFzOgoKCXR4LWRhdGEtcmVmMCA9IDxk YXRhLXJlZi10eDA+Cgl0eC1kYXRhLXJlZjEgPSA8ZGF0YS1yZWYtdHgxPgoJcngtZGF0YS1yZWYw ID0gPGRhdGEtcmVmLXJ4MD4KCXJ4LWRhdGEtcmVmMSA9IDxkYXRhLXJlZi1yeDE+CgpFYWNoIHNs b3QgaW4gdGhlIGBkYXRhLXJlZmAgbGlzdCBpcyBmb3JtYXR0ZWQgYXMgZm9sbG93aW5nOgoKICAg ICAgICAgICAgMCAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyAgb2N0 ZXQKICAgICAgICAgKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0t LS0tKwogICAgICAgICB8IGlkICAgICAgICB8IGdyZWYgICAgICAgICAgICAgICAgICB8IG9mZnNl dCAgICB8CiAgICAgICAgICstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0t LSstLS0tLSsKCglpZDogdGhlIGZyYW1lIGlkZW50aWZpZXIuCglncmVmOiBncmFudCByZWZlcmVu Y2UgdG8gdGhlIGZyYW1lLgoJb2Zmc2V0OiBvZmZzZXQgd2l0aGluIHRoZSBmcmFtZS4KClRoaXMg bGlzdCBoYXMgdHdpY2UgYXMgbWF4IHNsb3RzIGFzIHdvdWxkIGhhdmUgYHR4LXJpbmctcmVmYCBv ciBgcngtcmluZy1yZWZgCnJlc3BlY3RpdmVseSwgYW5kIGl0IGlzIHNldCB1cCBhdCBkZXZpY2Ug Y3JlYXRpb24gYW5kIHJlbW92ZWQgYXQgZGV2aWNlCnRlYXJkb3duLCBzYW1lIGFzIHRoZSBjb21t YW5kIHJpbmcgZW50cmllcy4gVGhpcyB3YXkgd2Uga2VlcCB1cCB3aXRoIHJpbmcgc2l6ZQpjaGFu Z2VzIGFzIGl0IGl0IGV4cGVjdGVkIHRvIGJlIGluIHRoZSBjb21tYW5kIHJpbmcuIEEgaHlwb3Ro ZXRpY2FsIG11bHRpLXBhZ2UKY29tbWFuZCByaW5nIHdvdWxkIGluY3JlYXNlIG51bWJlciBvZiBz bG90cyBhbmQgdGh1cyB0aGlzIGRhdGEgbGlzdCB3b3VsZCBncm93CmFjY29yZGluZ2x5LiBMaXN0 IGlzIHRlcm1pbmF0ZWQgYnkgYW4gZW50cnkgd2hpY2ggYGBgZ3JlZmBgYCBmaWVsZCBpcyAwLCBo YXZpbmcKaWdub3JlZCB0aGUgb3RoZXIgZmllbGRzIG9mIHRoaXMgc3BlY2lmaWMgZW50cnkuCgoj IyBEYXRhcGF0aCBDaGFuZ2VzCgpUaGUgcGFja2V0IGlzIGNvcGllZCB0by9mcm9tIHRoZSBtYXBw ZWQgZGF0YSBsaXN0IGdyZWZzIG9mIHVwIHRvIGB0eC1kYXRhLWxlbmAKb3IgYHJ4LWRhdGEtbGVu YC4gVGhpcyBtZWFucyB0aGF0IHRoZSBidWZmZXIgKHJlZmVyZW5jZWQgYnkgYGdyZWZgIGZyb20g d2l0aGluCnRoZSBgc3RydWN0IG5ldGlmX1t0eHxyeF1fcmVxdWVzdGApIGhhcyB0aGUgc2FtZSBk YXRhIHVwIHRvIGBzaXplYC4gIEluIG90aGVyCndvcmRzLCAqZ3JlZlswLT5zaXplXSBjb250ZW50 cyBpcyByZXBsaWNhdGVkIG9uIHRoZSBgZGF0YS1yaW5nYCBhdCBgaWR4YC4gSGVuY2UKbmV0YmFj ayBzaG91bGQgaWdub3JlIHVwIHRvIGBzaXplYCBvZiB0aGUgYGdyZWZgIHdoZW4gcHJvY2Vzc2lu ZyBhcyB0aGUKYGRhdGEtcmluZ2AgaGFzIHRoZSBjb250ZW50cyBvZiBpdC4KClZhbHVlcyBiaWdn ZXIgdGhlbiB0aGUgNDA5NiBwYWdlL2dyYW50IGJvdW5kYXJ5IG9ubHkgaGF2ZSBzcGVjaWFsIG1l YW5pbmcgZm9yCmJhY2tlbmQgYmVpbmcgaG93IG11Y2ggaXQgaXMgcmVxdWlyZWQgdG8gYmUgY29w aWVkL3B1bGxlZCBhY3Jvc3MgdGhlIHdob2xlCnBhY2tldCAod2hpY2ggY2FuIGJlIGNvbXBvc2Vk IG9mIG11bHRpcGxlIHNsb3RzKS4gSGVuY2UgKGUuZy4pIGEgdmFsdWUgb2YgNjU1MzYKdnMgNDA5 NiB3aWxsIGhhdmUgdGhlIHNhbWUgZGF0YSBsaXN0IHNpemUgYW5kIHRoZSBsYXR0ZXIgdmFsdWUg d291bGQgbGVhZCB0bwpvbmx5IGNvcHkvcHVsbCBvbmUgZ3JlZiBpbiB0aGUgd2hvbGUgcGFja2V0 LCB3aGVyZWFzIHRoZSBmb3JtZXIgd2lsbCBiZSBhCmNvcHktb25seSBpbnRlcmZhY2UgZm9yIGFs bCBzbG90cy4KCiMjIEJ1ZmZlciBJZGVudGlmaWNhdGlvbiBhbmQgRmxhZ3MKClRoZSBkYXRhIGxp c3QgaWRzIG11c3Qgc3RhcnQgZnJvbSAwIGFuZCBhcmUgZ2xvYmFsIGFuZCBjb250aW5ndW91cyAo YWNyb3NzIGJvdGgKbGlzdHMpLiAgRGF0YSBzbG90IGlzIGlkZW50aWZpZWQgYnkgcmluZyBzbG90 IGBgYGlkYGBgIGZpZWxkLiBSZXN1bHRhbnQgZGF0YQpncmVmIGlkIHRvIGJlIHVzZWQgaW4gUlgg ZGF0YSBsaXN0IGlzIGNvbXB1dGVkIGJ5IHN1YnRyYWN0IG9mIGBzdHJ1Y3QKbmV0aWZfW3R4fHJ4 XV9yZXF1ZXN0YCBgYGBpZGBgYCBmcm9tIHRvdGFsIGFtb3VudCBvZiB0eCBkYXRhIGdyZWZzLkV4 YW1wbGUgb2YKdGhlIGxpc3RzIGxheW91dCAgYmVsb3c6CgpgYGAKIFt0eC1kYXRhLXJlZi0wLCB0 eC1kYXRhLWxlbj0yNTZdCiB7IC5pZCA9IDAsIGdyZWYgPSA1MTIsIC5vZmZzZXQgPSAweDAgICB9 CiB7IC5pZCA9IDEsIGdyZWYgPSA1MTIsIC5vZmZzZXQgPSAweDEwMCB9CiB7IC5pZCA9IDIsIGdy ZWYgPSA1MTIsIC5vZmZzZXQgPSAweDIwMCB9CiAuLi4KIHsgLmlkID0gMjU2LCBncmVmID0gMCwg Lm9mZnNldCA9IDB4MCAgIH0KCiBbcngtZGF0YS1yZWYtMCwgcngtZGF0YS1sZW49NDA5Nl0KIHsg LmlkID0gMjU2LCBncmVmID0gNTI5LCAub2Zmc2V0ID0gMHgwIH0KIHsgLmlkID0gMjU3LCBncmVm ID0gNTMwLCAub2Zmc2V0ID0gMHgwIH0KIHsgLmlkID0gMjU4LCBncmVmID0gNTMxLCAub2Zmc2V0 ID0gMHgwIH0KIC4uLgogeyAuaWQgPSA1MTIsIGdyZWYgPSAwLCAgIC5vZmZzZXQgPSAweDAgfQpg YGAKClBlcm1pc3Npb25zIG9mIFJYIGRhdGEgZ3JlZnMgYXJlIHJlYWQtd3JpdGUgd2hlcmVhcyBU WCBkYXRhIGdyZWZzIGlzIHJlYWQtb25seS4KCiMjIFplcm9jb3B5CgpGcm9udGVuZCBtYXkgd2lz aCB0byBwcm92aWRlIGEgYmlnZ2VyIFJYIGxpc3QgdGhhbiBUWCwgYW5kIHVzZSBSWCBidWZmZXJz IGZvcgp0cmFuc21pc3Npb24gaW4gYSB6ZXJvY29weSBmYXNoaW9uIGZvciBndWVzdHMgbWFpbmx5 IGRvaW5nIGZvcndhcmRpbmcuIEluIHN1Y2gKY2FzZXMgYmFja2VuZCBzZXQgTkVUVFhGX3N0YWdp bmdfYnVmZmVyIGZsYWcgaW4gYGBgbmV0aWZfdHhfcmVxdWVzdGBgYCBmbGFncwpmaWVsZCBzdWNo IHRoYXQgYGdyZWZgIGZpZWxkIGluc3RlYWQgZGVzaWduYXRlcyB0aGUgYGlkYCBvZiBhIGRhdGEg Z3JlZnMuCgpUaGlzIGlzIG9ubHkgdmFsaWQgd2hlbiBwYWNrZXRzIGFyZSBzb2xlbHkgZGVzY3Jp YmVkIGJ5IHRoZSBzdGFnaW5nIGdyYW50cyBmb3IKdGhlIHNsb3QgcGFja2V0IHNpemUgYmVpbmcg d3JpdHRlbi4gT3Igd2hlbiBbdHh8cnhdLWRhdGEtbGVuIGlzIDQwOTYgKGZvcgpmZWF0dXJlLXNn IDApIG9yIDY1NTM1IChmb3IgZmVhdHVyZS1zZyAxKSBhbmQgdGh1cyBubyBuZXcgYGdyZWZgIGlz IG5lZWRlZCBmb3IKZGVzY3JpYmluZyB0aGUgcGFja2V0IHBheWxvYWQuCgpcY2xlYXJwYWdlCgoj IyBQZXJmb3JtYW5jZQoKTnVtYmVycyB0aGF0IGdpdmUgYSByb3VnaCBpZGVhIG9uIHRoZSBwZXJm b3JtYW5jZSBiZW5lZml0cyBvZiB0aGlzIGV4dGVuc2lvbi4KVGhlc2UgYXJlIEd1ZXN0IDwtPiBE b20wIHdoaWNoIHRlc3QgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiBiYWNrZW5kIGFuZApmcm9u dGVuZCwgZXhjbHVkaW5nIG90aGVyIGJvdHRsZW5lY2tzIGluIHRoZSBkYXRhcGF0aCAodGhlIHNv ZnR3YXJlIHN3aXRjaCkuCgpgYGAKIyBncmFudCBjb3B5Ckd1ZXN0IFRYICgxdmNwdSwgIDY0Yiwg VURQIGluIHBwcyk6ICAxIDUwNiAxNzAgcHBzCkd1ZXN0IFRYICg0dmNwdSwgIDY0YiwgVURQIGlu IHBwcyk6ICA0IDk4OCA1NjMgcHBzCkd1ZXN0IFRYICgxdmNwdSwgMjU2YiwgVURQIGluIHBwcyk6 ICAxIDI5NSAwMDEgcHBzCkd1ZXN0IFRYICg0dmNwdSwgMjU2YiwgVURQIGluIHBwcyk6ICA0IDI0 OSAyMTEgcHBzCgojIGdyYW50IGNvcHkgKyBncmFudCBtYXAgKHNlZSBuZXh0IHN1YnNlY3Rpb24p Ckd1ZXN0IFRYICgxdmNwdSwgMjYwYiwgVURQIGluIHBwcyk6ICAgIDU3NyA3ODIgcHBzCkd1ZXN0 IFRYICg0dmNwdSwgMjYwYiwgVURQIGluIHBwcyk6ICAxIDIxOCAyNzMgcHBzCgojIGRyb3AgYXQg dGhlIGd1ZXN0IG5ldHdvcmsgc3RhY2sKR3Vlc3QgUlggKDF2Y3B1LCAgNjRiLCBVRFAgaW4gcHBz KTogIDEgNTQ5IDYzMCBwcHMKR3Vlc3QgUlggKDR2Y3B1LCAgNjRiLCBVRFAgaW4gcHBzKTogIDIg ODcwIDk0NyBwcHMKYGBgCgpXaXRoIHRoaXMgZXh0ZW5zaW9uOgpgYGAKIyBtZW1jcHkKZGF0YS1s ZW49MjU2IFRYICgxdmNwdSwgIDY0YiwgVURQIGluIHBwcyk6ICAzIDc1OSAwMTIgcHBzCmRhdGEt bGVuPTI1NiBUWCAoNHZjcHUsICA2NGIsIFVEUCBpbiBwcHMpOiAxMiA0MTYgNDM2IHBwcwpkYXRh LWxlbj0yNTYgVFggKDF2Y3B1LCAyNTZiLCBVRFAgaW4gcHBzKTogIDMgMjQ4IDM5MiBwcHMKZGF0 YS1sZW49MjU2IFRYICg0dmNwdSwgMjU2YiwgVURQIGluIHBwcyk6IDExIDE2NSAzNTUgcHBzCgoj IG1lbWNweSArIGdyYW50IG1hcCAoc2VlIG5leHQgc3Vic2VjdGlvbikKZGF0YS1sZW49MjU2IFRY ICgxdmNwdSwgMjYwYiwgVURQIGluIHBwcyk6ICAgIDU4OCA0MjggcHBzCmRhdGEtbGVuPTI1NiBU WCAoNHZjcHUsIDI2MGIsIFVEUCBpbiBwcHMpOiAgMSA2NjggMDQ0IHBwcwoKIyAoZHJvcCBhdCB0 aGUgZ3Vlc3QgbmV0d29yayBzdGFjaykKZGF0YS1sZW49MjU2IFJYICgxdmNwdSwgIDY0YiwgVURQ IGluIHBwcyk6ICAzIDI4NSAzNjIgcHBzCmRhdGEtbGVuPTI1NiBSWCAoNHZjcHUsICA2NGIsIFVE UCBpbiBwcHMpOiAxMSA3NjEgODQ3IHBwcwoKIyAoZHJvcCB3aXRoIGd1ZXN0IFhEUF9EUk9QIHBy b2cpCmRhdGEtbGVuPTI1NiBSWCAoMXZjcHUsICA2NGIsIFVEUCBpbiBwcHMpOiAgOSA0NjYgNTkx IHBwcwpkYXRhLWxlbj0yNTYgUlggKDR2Y3B1LCAgNjRiLCBVRFAgaW4gcHBzKTogMzMgMDA2IDE1 NyBwcHMKYGBgCgpMYXRlbmN5IG1lYXN1cmVtZW50cyAobmV0cGVyZiBUQ1BfUlIgcmVxdWVzdCBz aXplIDEgYW5kIHJlc3BvbnNlIHNpemUgMSk6CmBgYAoyNCBLVHBzIHZzIDI4IEtUcHMKMzkgS1Rw cyB2cyA1MCBLVHBzICh3aXRoIGtlcm5lbCBidXN5IHBvbGwpCmBgYAoKVENQIEJ1bGsgdHJhbnNm ZXIgbWVhc3VyZW1lbnRzIGFyZW4ndCBzaG93aW5nIGEgcmVwcmVzZW50YXRpdmUgaW5jcmVhc2Ug b24KbWF4aW11bSB0aHJvdWdocHV0IChzb21ldGltZXMgfjEwJSksIGJ1dCByYXRoZXIgbGVzcyBy ZXRyYW5zbWlzc2lvbnMgYW5kCm1vcmUgc3RhYmxlLiBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2Ug b2YgYmVpbmcgaGF2aW5nIGEgc2xpZ2h0IGRlY3JlYXNlIGluIHJ0dAp0aW1lIChpLmUuIHJlY2Vp dmVyIGFja25vd2xlZGdpbmcgZGF0YSBxdWlja2VyKS4gQ3VycmVudGx5IHRyeWluZyBleHBsb3Jp bmcKb3RoZXIgZGF0YSBsaXN0IHNpemVzIGFuZCBwcm9iYWJseSB3aWxsIGhhdmUgYSBiZXR0ZXIg aWRlYSBvbiB0aGUgZWZmZWN0cyBvZgp0aGlzLgoKIyMgTGludXggZ3JhbnQgY29weSB2cyBtYXAg cmVtYXJrCgpCYXNlZCBvbiBudW1iZXJzIGFib3ZlIHRoZXJlJ3MgYSBzdWRkZW4gMnggcGVyZm9y bWFuY2UgZHJvcCB3aGVuIHdlIHN3aXRjaCBmcm9tCmdyYW50IGNvcHkgdG8gYWxzbyBncmFudCBt YXAgdGhlIGAgZ3JlZmA6IDEgMjk1IDAwMSB2cyAgNTc3IDc4MiBmb3IgMjU2IGFuZCAyNjAKcGFj a2V0cyBieXRlcyByZXNwZWN0aXZhbGx5LiBXaGljaCBpcyBhbGwgdGhlIG1vcmUgdmlzaWJsZSB3 aGVuIHJlbW92aW5nIHRoZSBncmFudApjb3B5IHdpdGggbWVtY3B5IGluIHRoaXMgZXh0ZW5zaW9u ICgzIDI0OCAzOTIgdnMgNTg4IDQyOCkuIFdoaWxlIHRoZXJlJ3MgYmVlbgpkaXNjdXNzaW9ucyBv ZiBhdm9pZCB0aGUgVExCIHVuZmx1c2ggb24gdW5tYXAsIG9uZSBjb3VsZCB3b25kZXIgd2hhdCB0 aGUKdGhyZXNob2xkIG9mIHRoYXQgaW1wcm92ZW1lbnQgd291bGQgYmUuIENoYW5jZXMgYXJlIHRo YXQgdGhpcyBpcyB0aGUgbGVhc3Qgb2YKb3VyIGNvbmNlcm5zIGluIGEgZnVsbHkgcG9wcHVsYXRl ZCBob3N0IChvciB3aXRoIGFuIG92ZXJzdWJzY3JpYmVkIG9uZSkuIFdvdWxkCml0IGJlIHdvcnRo IGV4cGVyaW1lbnRpbmcgaW5jcmVhc2luZyB0aGUgdGhyZXNob2xkIG9mIHRoZSBjb3B5IGJleW9u ZCB0aGUKaGVhZGVyPwoKXGNsZWFycGFnZQoKIyBSZWZlcmVuY2VzCgpbMF0gaHR0cDovL2xpc3Rz LnhlbnByb2plY3Qub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTUtMDUvbXNnMDE1MDQu aHRtbAoKWzFdIGh0dHBzOi8vZ2l0aHViLmNvbS9mcmVlYnNkL2ZyZWVic2QvYmxvYi9tYXN0ZXIv c3lzL2Rldi9uZXRtYXAvbmV0bWFwX21lbTIuYyNMMzYyCgpbMl0gaHR0cHM6Ly93d3cuZnJlZWJz ZC5vcmcvY2dpL21hbi5jZ2k/cXVlcnk9dmFsZSZzZWt0aW9uPTQmbj0xCgpbM10gaHR0cHM6Ly9n aXRodWIuY29tL2lvdmlzb3IvYnBmLWRvY3MvYmxvYi9tYXN0ZXIvRXhwcmVzc19EYXRhX1BhdGgu cGRmCgpbNF0KaHR0cDovL3Byb3RvdHlwZS1rZXJuZWwucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0 L25ldHdvcmtpbmcvWERQL2Rlc2lnbi9yZXF1aXJlbWVudHMuaHRtbCN3cml0ZS1hY2Nlc3MtdG8t cGFja2V0LWRhdGEKCls1XSBodHRwOi8vbHhyLmZyZWUtZWxlY3Ryb25zLmNvbS9zb3VyY2UvZHJp dmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jI0wyMDczCgpbNl0gaHR0 cDovL2x4ci5mcmVlLWVsZWN0cm9ucy5jb20vc291cmNlL2RyaXZlcnMvbmV0L2V0aGVybmV0L21l bGxhbm94L21seDQvZW5fcnguYyNMNTIKCiMgSGlzdG9yeQoKQSB0YWJsZSBvZiBjaGFuZ2VzIHRv IHRoZSBkb2N1bWVudCwgaW4gY2hyb25vbG9naWNhbCBvcmRlci4KCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpE YXRlICAgICAgIFJldmlzaW9uIFZlcnNpb24gIE5vdGVzCi0tLS0tLS0tLS0gLS0tLS0tLS0gLS0t LS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoyMDE2LTEy LTE0IDEgICAgICAgIFhlbiA0LjkgIEluaXRpYWwgdmVyc2lvbi4KLS0tLS0tLS0tLSAtLS0tLS0t LSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9y Zy94ZW4tZGV2ZWwK