From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhishek Lekshmanan Subject: v12.2.0 Luminous released Date: Tue, 29 Aug 2017 20:20:06 +0200 Message-ID: <871snukzhl.fsf@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ceph-users-bounces-idqoXFIVOFJgJs9I8MT0rw@public.gmane.org Sender: "ceph-users" To: ceph-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, ceph-users-Qp0mS5GaXlQ@public.gmane.org, ceph-maintainers-Qp0mS5GaXlQ@public.gmane.org, ceph-announce-Qp0mS5GaXlQ@public.gmane.org List-Id: ceph-devel.vger.kernel.org CldlJ3JlIGdsYWQgdG8gYW5ub3VuY2UgdGhlIGZpcnN0IHJlbGVhc2Ugb2YgTHVtaW5vdXMgdjEy LjIueCBsb25nIHRlcm0Kc3RhYmxlIHJlbGVhc2Ugc2VyaWVzLiBUaGVyZSBoYXZlIGJlZW4gbWFq b3IgY2hhbmdlcyBzaW5jZSBLcmFrZW4KKHYxMS4yLnopIGFuZCBKZXdlbCAodjEwLjIueiksIGFu ZCB0aGUgdXBncmFkZSBwcm9jZXNzIGlzIG5vbi10cml2aWFsLgpQbGVhc2UgcmVhZCB0aGUgcmVs ZWFzZSBub3RlcyBjYXJlZnVsbHkuCgpGb3IgbW9yZSBkZXRhaWxzLCBsaW5rcyAmIGNoYW5nZWxv ZyBwbGVhc2UgcmVmZXIgdG8gdGhlCmNvbXBsZXRlIHJlbGVhc2Ugbm90ZXMgZW50cnkgYXQgdGhl IENlcGggYmxvZzoKaHR0cDovL2NlcGguY29tL3JlbGVhc2VzL3YxMi0yLTAtbHVtaW5vdXMtcmVs ZWFzZWQvCgoKTWFqb3IgQ2hhbmdlcyBmcm9tIEtyYWtlbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCgotICpHZW5lcmFsKjoKICAqIENlcGggbm93IGhhcyBhIHNpbXBsZSwgYnVpbHQtaW4gd2Vi LWJhc2VkIGRhc2hib2FyZCBmb3IgbW9uaXRvcmluZyBjbHVzdGVyCiAgICBzdGF0dXMuCgotICpS QURPUyo6CiAgKiAqQmx1ZVN0b3JlKjoKICAgIC0gVGhlIG5ldyAqQmx1ZVN0b3JlKiBiYWNrZW5k IGZvciAqY2VwaC1vc2QqIGlzIG5vdyBzdGFibGUgYW5kIHRoZQogICAgICBuZXcgZGVmYXVsdCBm b3IgbmV3bHkgY3JlYXRlZCBPU0RzLiAgQmx1ZVN0b3JlIG1hbmFnZXMgZGF0YQogICAgICBzdG9y ZWQgYnkgZWFjaCBPU0QgYnkgZGlyZWN0bHkgbWFuYWdpbmcgdGhlIHBoeXNpY2FsIEhERHMgb3IK ICAgICAgU1NEcyB3aXRob3V0IHRoZSB1c2Ugb2YgYW4gaW50ZXJ2ZW5pbmcgZmlsZSBzeXN0ZW0g bGlrZSBYRlMuCiAgICAgIFRoaXMgcHJvdmlkZXMgZ3JlYXRlciBwZXJmb3JtYW5jZSBhbmQgZmVh dHVyZXMuCiAgICAtIEJsdWVTdG9yZSBzdXBwb3J0cyBmdWxsIGRhdGEgYW5kIG1ldGFkYXRhIGNo ZWNrc3VtcwogICAgICBvZiBhbGwgZGF0YSBzdG9yZWQgYnkgQ2VwaC4KICAgIC0gQmx1ZVN0b3Jl IHN1cHBvcnRzIGlubGluZSBjb21wcmVzc2lvbiB1c2luZyB6bGliLCBzbmFwcHksIG9yIExaNC4g KENlcGgKICAgICAgYWxzbyBzdXBwb3J0cyB6c3RkIGZvciBSR1cgY29tcHJlc3Npb24gYnV0IHpz dGQgaXMgbm90IHJlY29tbWVuZGVkIGZvcgogICAgICBCbHVlU3RvcmUgZm9yIHBlcmZvcm1hbmNl IHJlYXNvbnMuKQoKICAqICpFcmFzdXJlIGNvZGVkKiBwb29scyBub3cgaGF2ZSBmdWxsIHN1cHBv cnQgZm9yIG92ZXJ3cml0ZXMKICAgIGFsbG93aW5nIHRoZW0gdG8gYmUgdXNlZCB3aXRoIFJCRCBh bmQgQ2VwaEZTLgoKICAqICpjZXBoLW1ncio6CiAgICAtIFRoZXJlIGlzIGEgbmV3IGRhZW1vbiwg KmNlcGgtbWdyKiwgd2hpY2ggaXMgYSByZXF1aXJlZCBwYXJ0IG9mCiAgICAgIGFueSBDZXBoIGRl cGxveW1lbnQuICBBbHRob3VnaCBJTyBjYW4gY29udGludWUgd2hlbiAqY2VwaC1tZ3IqCiAgICAg IGlzIGRvd24sIG1ldHJpY3Mgd2lsbCBub3QgcmVmcmVzaCBhbmQgc29tZSBtZXRyaWNzLXJlbGF0 ZWQgY2FsbHMKICAgICAgKGUuZy4sIGBjZXBoIGRmYCkgbWF5IGJsb2NrLiAgV2UgcmVjb21tZW5k IGRlcGxveWluZyBzZXZlcmFsCiAgICAgIGluc3RhbmNlcyBvZiAqY2VwaC1tZ3IqIGZvciByZWxp YWJpbGl0eS4gIFNlZSB0aGUgbm90ZXMgb24KICAgICAgVXBncmFkaW5nIGJlbG93LgogICAgLSBU aGUgKmNlcGgtbWdyKiBkYWVtb24gaW5jbHVkZXMgYSBSRVNULWJhc2VkIG1hbmFnZW1lbnQgQVBJ LgogICAgICBUaGUgQVBJIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCBhbmQgc29tZXdoYXQgbGltaXRl ZCBidXQKICAgICAgd2lsbCBmb3JtIHRoZSBiYXNpcyBmb3IgQVBJLWJhc2VkIG1hbmFnZW1lbnQg b2YgQ2VwaCBnb2luZyBmb3J3YXJkLgogICAgLSBjZXBoLW1nciBhbHNvIGluY2x1ZGVzIGEgUHJv bWV0aGV1cyBleHBvcnRlciBwbHVnaW4sIHdoaWNoIGNhbiBwcm92aWRlIENlcGgKICAgICAgcGVy ZmNvdW50ZXJzIHRvIFByb21ldGhldXMuCiAgICAtIGNlcGgtbWdyIG5vdyBoYXMgYSBaYWJiaXgg cGx1Z2luLiBVc2luZyB6YWJiaXhfc2VuZGVyIGl0IHNlbmRzIHRyYXBwZXIKICAgICAgZXZlbnRz IHRvIGEgWmFiYml4IHNlcnZlciBjb250YWluaW5nIGhpZ2gtbGV2ZWwgaW5mb3JtYXRpb24gb2Yg dGhlIENlcGgKICAgICAgY2x1c3Rlci4gVGhpcyBtYWtlcyBpdCBlYXN5IHRvIG1vbml0b3IgYSBD ZXBoIGNsdXN0ZXIncyBzdGF0dXMgYW5kIHNlbmQKICAgICAgb3V0IG5vdGlmaWNhdGlvbnMgaW4g Y2FzZSBvZiBhIG1hbGZ1bmN0aW9uLgoKICAqIFRoZSBvdmVyYWxsICpzY2FsYWJpbGl0eSogb2Yg dGhlIGNsdXN0ZXIgaGFzIGltcHJvdmVkLiBXZSBoYXZlCiAgICBzdWNjZXNzZnVsbHkgdGVzdGVk IGNsdXN0ZXJzIHdpdGggdXAgdG8gMTAsMDAwIE9TRHMuCiAgKiBFYWNoIE9TRCBjYW4gbm93IGhh dmUgYSBkZXZpY2UgY2xhc3MgYXNzb2NpYXRlZCB3aXRoCiAgICBpdCAoZS5nLiwgYGhkZGAgb3Ig YHNzZGApLCBhbGxvd2luZyBDUlVTSCBydWxlcyB0byB0cml2aWFsbHkgbWFwCiAgICBkYXRhIHRv IGEgc3Vic2V0IG9mIGRldmljZXMgaW4gdGhlIHN5c3RlbS4gIE1hbnVhbGx5IHdyaXRpbmcgQ1JV U0gKICAgIHJ1bGVzIG9yIG1hbnVhbCBlZGl0aW5nIG9mIHRoZSBDUlVTSCBpcyBub3JtYWxseSBu b3QgcmVxdWlyZWQuCiAgKiBUaGVyZSBpcyBhIG5ldyB1cG1hcCBleGNlcHRpb24gbWVjaGFuaXNt IHRoYXQgYWxsb3dzIGluZGl2aWR1YWwgUEdzIHRvIGJlIG1vdmVkIGFyb3VuZCB0byBhY2hpZXZl CiAgICBhICpwZXJmZWN0IGRpc3RyaWJ1dGlvbiogKHRoaXMgcmVxdWlyZXMgbHVtaW5vdXMgY2xp ZW50cykuCiAgKiBFYWNoIE9TRCBub3cgYWRqdXN0cyBpdHMgZGVmYXVsdCBjb25maWd1cmF0aW9u IGJhc2VkIG9uIHdoZXRoZXIgdGhlCiAgICBiYWNraW5nIGRldmljZSBpcyBhbiBIREQgb3IgU1NE LiBNYW51YWwgdHVuaW5nIGdlbmVyYWxseSBub3QgcmVxdWlyZWQuCiAgKiBUaGUgcHJvdG90eXBl IG1DbG9jayBRb1MgcXVldWVpbmcgYWxnb3JpdGhtIGlzIG5vdyBhdmFpbGFibGUuCiAgKiBUaGVy ZSBpcyBub3cgYSAqYmFja29mZiogbWVjaGFuaXNtIHRoYXQgcHJldmVudHMgT1NEcyBmcm9tIGJl aW5nCiAgICBvdmVybG9hZGVkIGJ5IHJlcXVlc3RzIHRvIG9iamVjdHMgb3IgUEdzIHRoYXQgYXJl IG5vdCBjdXJyZW50bHkgYWJsZSB0bwogICAgcHJvY2VzcyBJTy4KICAqIFRoZXJlIGlzIGEgc2lt cGxpZmllZCBPU0QgcmVwbGFjZW1lbnQgcHJvY2VzcyB0aGF0IGlzIG1vcmUgcm9idXN0LgogICog WW91IGNhbiBxdWVyeSB0aGUgc3VwcG9ydGVkIGZlYXR1cmVzIGFuZCAoYXBwYXJlbnQpIHJlbGVh c2VzIG9mCiAgICBhbGwgY29ubmVjdGVkIGRhZW1vbnMgYW5kIGNsaWVudHMgd2l0aCBgY2VwaCBm ZWF0dXJlc2AKICAqIFlvdSBjYW4gY29uZmlndXJlIHRoZSBvbGRlc3QgQ2VwaCBjbGllbnQgdmVy c2lvbiB5b3Ugd2lzaCB0byBhbGxvdyB0bwogICAgY29ubmVjdCB0byB0aGUgY2x1c3RlciB2aWEg YGNlcGggb3NkIHNldC1yZXF1aXJlLW1pbi1jb21wYXQtY2xpZW50YCBhbmQKICAgIENlcGggd2ls bCBwcmV2ZW50IHlvdSBmcm9tIGVuYWJsaW5nIGZlYXR1cmVzIHRoYXQgd2lsbCBicmVhayBjb21w YXRpYmlsaXR5CiAgICB3aXRoIHRob3NlIGNsaWVudHMuCiAgKiBTZXZlcmFsIGBzbGVlcGAgc2V0 dGluZ3MsIGluY2x1ZGUgYG9zZF9yZWNvdmVyeV9zbGVlcGAsCiAgICBgb3NkX3NuYXBfdHJpbV9z bGVlcGAsIGFuZCBgb3NkX3NjcnViX3NsZWVwYCBoYXZlIGJlZW4KICAgIHJlaW1wbGVtZW50ZWQg dG8gd29yayBlZmZpY2llbnRseS4gIChUaGVzZSBhcmUgdXNlZCBpbiBzb21lIGNhc2VzCiAgICB0 byB3b3JrIGFyb3VuZCBpc3N1ZXMgdGhyb3R0bGluZyBiYWNrZ3JvdW5kIHdvcmsuKQogICogUG9v bHMgYXJlIG5vdyBleHBlY3RlZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcGxpY2F0aW9u IHVzaW5nIHRoZW0uCiAgICBVcG9uIGNvbXBsZXRpbmcgdGhlIHVwZ3JhZGUgdG8gTHVtaW5vdXMs IHRoZSBjbHVzdGVyIHdpbGwgYXR0ZW1wdCB0byBhc3NvY2lhdGUKICAgIGV4aXN0aW5nIHBvb2xz IHRvIGtub3duIGFwcGxpY2F0aW9ucyAoaS5lLiBDZXBoRlMsIFJCRCwgYW5kIFJHVykuIEluLXVz ZSBwb29scwogICAgdGhhdCBhcmUgbm90IGFzc29jaWF0ZWQgdG8gYW4gYXBwbGljYXRpb24gd2ls bCBnZW5lcmF0ZSBhIGhlYWx0aCB3YXJuaW5nLiBBbnkKICAgIHVuYXNzb2NpYXRlZCBwb29scyBj YW4gYmUgbWFudWFsbHkgYXNzb2NpYXRlZCB1c2luZyB0aGUgbmV3CiAgICBgY2VwaCBvc2QgcG9v bCBhcHBsaWNhdGlvbiBlbmFibGVgIGNvbW1hbmQuIEZvciBtb3JlIGRldGFpbHMgc2VlCiAgICBg YXNzb2NpYXRlIHBvb2wgdG8gYXBwbGljYXRpb25gIGluIHRoZSBkb2N1bWVudGF0aW9uLgoKLSAq UkdXKjoKCiAgKiBSR1cgKm1ldGFkYXRhIHNlYXJjaCogYmFja2VkIGJ5IEVsYXN0aWNTZWFyY2gg bm93IHN1cHBvcnRzIGVuZAogICAgdXNlciByZXF1ZXN0cyBzZXJ2aWNlIHZpYSBSR1cgaXRzZWxm LCBhbmQgYWxzbyBzdXBwb3J0cyBjdXN0b20KICAgIG1ldGFkYXRhIGZpZWxkcy4gQSBxdWVyeSBs YW5ndWFnZSBhIHNldCBvZiBSRVNUZnVsIEFQSXMgd2VyZQogICAgY3JlYXRlZCBmb3IgdXNlcnMg dG8gYmUgYWJsZSB0byBzZWFyY2ggb2JqZWN0cyBieSB0aGVpcgogICAgbWV0YWRhdGEuIE5ldyBB UElzIHRoYXQgYWxsb3cgY29udHJvbCBvZiBjdXN0b20gbWV0YWRhdGEgZmllbGRzCiAgICB3ZXJl IGFsc28gYWRkZWQuCiAgKiBSR1cgbm93IHN1cHBvcnRzICpkeW5hbWljIGJ1Y2tldCBpbmRleCBz aGFyZGluZyouIFRoaXMgaGFzIHRvIGJlIGVuYWJsZWQgdmlhCiAgICB0aGUgYHJndyBkeWFtaWMg cmVzaGFyZGluZ2AgY29uZmlndXJhYmxlLiBBcyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gYQog ICAgYnVja2V0IGdyb3dzLCBSR1cgd2lsbCBhdXRvbWF0aWNhbGx5IHJlc2hhcmQgdGhlIGJ1Y2tl dCBpbmRleCBpbiByZXNwb25zZS4KICAgIE5vIHVzZXIgaW50ZXJ2ZW50aW9uIG9yIGJ1Y2tldCBz aXplIGNhcGFjaXR5IHBsYW5uaW5nIGlzIHJlcXVpcmVkLgogICogUkdXIGludHJvZHVjZXMgKnNl cnZlciBzaWRlIGVuY3J5cHRpb24qIG9mIHVwbG9hZGVkIG9iamVjdHMgd2l0aAogICAgdGhyZWUg b3B0aW9ucyBmb3IgdGhlIG1hbmFnZW1lbnQgb2YgZW5jcnlwdGlvbiBrZXlzOiBhdXRvbWF0aWMK ICAgIGVuY3J5cHRpb24gKG9ubHkgcmVjb21tZW5kZWQgZm9yIHRlc3Qgc2V0dXBzKSwgY3VzdG9t ZXIgcHJvdmlkZWQKICAgIGtleXMgc2ltaWxhciB0byBBbWF6b24gU1NFLUMgc3BlY2lmaWNhdGlv biwgYW5kIHRocm91Z2ggdGhlIHVzZSBvZgogICAgYW4gZXh0ZXJuYWwga2V5IG1hbmFnZW1lbnQg c2VydmljZSAoT3BlbnN0YWNrIEJhcmJpY2FuKSBzaW1pbGFyCiAgICB0byBBbWF6b24gU1NFLUtN UyBzcGVjaWZpY2F0aW9uLgogICogUkdXIG5vdyBoYXMgcHJlbGltaW5hcnkgQVdTLWxpa2UgYnVj a2V0IHBvbGljeSBBUEkgc3VwcG9ydC4gIEZvcgogICAgbm93LCBwb2xpY3kgaXMgYSBtZWFucyB0 byBleHByZXNzIGEgcmFuZ2Ugb2YgbmV3IGF1dGhvcml6YXRpb24KICAgIGNvbmNlcHRzLiAgSW4g dGhlIGZ1dHVyZSBpdCB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBhZGRpdGlvbmFsCiAgICBh dXRoIGNhcGFiaWxpdGllcyBzdWNoIGFzIFNUUyBhbmQgZ3JvdXAgcG9saWN5LgogICogUkdXIGhh cyBjb25zb2xpZGF0ZWQgdGhlIHNldmVyYWwgbWV0YWRhdGEgaW5kZXggcG9vbHMgdmlhIHRoZSB1 c2Ugb2YgcmFkb3MKICAgIG5hbWVzcGFjZXMuCiAgKiBTMyBPYmplY3QgVGFnZ2luZyBBUEkgaGFz IGJlZW4gYWRkZWQ7IHdoaWxlIEFQSXMgYXJlCiAgICBzdXBwb3J0ZWQgZm9yIEdFVC9QVVQvREVM RVRFIG9iamVjdCB0YWdzIGFuZCBpbiBQVVQgb2JqZWN0CiAgICBBUEksIHRoZXJlIGlzIG5vIHN1 cHBvcnQgZm9yIHRhZ3Mgb24gUG9saWNpZXMgJiBMaWZlY3ljbGUgeWV0CiAgKiBSR1cgbXVsdGlz aXRlIG5vdyBzdXBwb3J0cyBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHN5bmMgYXQgYQogICAg YnVja2V0IGxldmVsLgoKLSAqUkJEKjoKCiAgKiBSQkQgbm93IGhhcyBmdWxsLCBzdGFibGUgc3Vw cG9ydCBmb3IgKmVyYXN1cmUgY29kZWQgcG9vbHMqIHZpYSB0aGUgbmV3CiAgICBgLS1kYXRhLXBv b2xgIG9wdGlvbiB0byBgcmJkIGNyZWF0ZWAuCiAgKiBSQkQgbWlycm9yaW5nJ3MgcmJkLW1pcnJv ciBkYWVtb24gaXMgbm93IGhpZ2hseSBhdmFpbGFibGUuIFdlCiAgICByZWNvbW1lbmQgZGVwbG95 aW5nIHNldmVyYWwgaW5zdGFuY2VzIG9mIHJiZC1taXJyb3IgZm9yCiAgICByZWxpYWJpbGl0eS4K ICAqIFJCRCBtaXJyb3JpbmcncyByYmQtbWlycm9yIGRhZW1vbiBzaG91bGQgdXRpbGl6ZSB1bmlx dWUgQ2VwaCB1c2VyCiAgICBJRHMgcGVyIGluc3RhbmNlIHRvIHN1cHBvcnQgdGhlIG5ldyBtaXJy b3JpbmcgZGFzaGJvYXJkLgogICogVGhlIGRlZmF1bHQgJ3JiZCcgcG9vbCBpcyBubyBsb25nZXIg Y3JlYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZwogICAgY2x1c3RlciBjcmVhdGlvbi4gQWRkaXRp b25hbGx5LCB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBwb29sIHVzZWQKICAgIGJ5IHRoZSByYmQg Q0xJIHdoZW4gbm8gcG9vbCBpcyBzcGVjaWZpZWQgY2FuIGJlIG92ZXJyaWRkZW4gdmlhIGEKICAg IG5ldyBgcmJkIGRlZmF1bHQgcG9vbCA9IDxwb29sIG5hbWU+YCBjb25maWd1cmF0aW9uIG9wdGlv bi4KICAqIEluaXRpYWwgc3VwcG9ydCBmb3IgZGVmZXJyZWQgaW1hZ2UgZGVsZXRpb24gdmlhIG5l dyBgcmJkCiAgICB0cmFzaGAgQ0xJIGNvbW1hbmRzLiBJbWFnZXMsIGV2ZW4gb25lcyBhY3RpdmVs eSBpbi11c2UgYnkKICAgIGNsb25lcywgY2FuIGJlIG1vdmVkIHRvIHRoZSB0cmFzaCBhbmQgZGVs ZXRlZCBhdCBhIGxhdGVyIHRpbWUuCiAgKiBOZXcgcG9vbC1sZXZlbCBgcmJkIG1pcnJvciBwb29s IHByb21vdGVgIGFuZCBgcmJkIG1pcnJvciBwb29sCiAgICBkZW1vdGVgIGNvbW1hbmRzIHRvIGJh dGNoIHByb21vdGUvZGVtb3RlIGFsbCBtaXJyb3JlZCBpbWFnZXMKICAgIHdpdGhpbiBhIHBvb2wu CiAgKiBNaXJyb3Jpbmcgbm93IG9wdGlvbmFsbHkgc3VwcG9ydHMgYSBjb25maWd1cmFibGUgcmVw bGljYXRpb24gZGVsYXkKICAgIHZpYSB0aGUgYHJiZCBtaXJyb3JpbmcgcmVwbGF5IGRlbGF5ID0g PHNlY29uZHM+YCBjb25maWd1cmF0aW9uCiAgICBvcHRpb24uCiAgKiBJbXByb3ZlZCBkaXNjYXJk IGhhbmRsaW5nIHdoZW4gdGhlIG9iamVjdCBtYXAgZmVhdHVyZSBpcyBlbmFibGVkLgogICogcmJk IENMSSBgaW1wb3J0YCBhbmQgYGNvcHlgIGNvbW1hbmRzIG5vdyBkZXRlY3Qgc3BhcnNlIGFuZAog ICAgcHJlc2VydmUgc3BhcnNlIHJlZ2lvbnMuCiAgKiBJbWFnZXMgYW5kIFNuYXBzaG90cyB3aWxs IG5vdyBpbmNsdWRlIGEgY3JlYXRpb24gdGltZXN0YW1wLgogICogU3BlY2lmeWluZyB1c2VyIGF1 dGhvcml6YXRpb24gY2FwYWJpbGl0aWVzIGZvciBSQkQgY2xpZW50cyBoYXMgYmVlbgogICAgc2lt cGxpZmllZC4gVGhlIGdlbmVyYWwgc3ludGF4IGZvciB1c2luZyBSQkQgY2FwYWJpbGl0eSBwcm9m aWxlcyBpcwogICAgIm1vbiAncHJvZmlsZSByYmQnIG9zZCAncHJvZmlsZSByYmRbLXJlYWQtb25s eV1bIHBvb2w9e3Bvb2wtbmFtZX1bLCAuLi5dXSciLgogICAgRm9yIG1vcmUgZGV0YWlscyBzZWUg IlVzZXIgTWFuYWdlbWVudCIgaW4gdGhlIGRvY3VtZW50YXRpb24uCgotICpDZXBoRlMqOgoKICAq ICpNdWx0aXBsZSBhY3RpdmUgTURTIGRhZW1vbnMqIGlzIG5vdyBjb25zaWRlcmVkIHN0YWJsZS4g IFRoZSBudW1iZXIKICAgIG9mIGFjdGl2ZSBNRFMgc2VydmVycyBtYXkgYmUgYWRqdXN0ZWQgdXAg b3IgZG93biBvbiBhbiBhY3RpdmUgQ2VwaEZTIGZpbGUKICAgIHN5c3RlbS4KICAqIENlcGhGUyAq ZGlyZWN0b3J5IGZyYWdtZW50YXRpb24qIGlzIG5vdyBzdGFibGUgYW5kIGVuYWJsZWQgYnkKICAg IGRlZmF1bHQgb24gbmV3IGZpbGVzeXN0ZW1zLiAgVG8gZW5hYmxlIGl0IG9uIGV4aXN0aW5nIGZp bGVzeXN0ZW1zCiAgICB1c2UgImNlcGggZnMgc2V0IDxmc19uYW1lPiBhbGxvd19kaXJmcmFncyIu ICBMYXJnZSBvciB2ZXJ5IGJ1c3kKICAgIGRpcmVjdG9yaWVzIGFyZSBzaGFyZGVkIGFuZCAocG90 ZW50aWFsbHkpIGRpc3RyaWJ1dGVkIGFjcm9zcwogICAgbXVsdGlwbGUgTURTIGRhZW1vbnMgYXV0 b21hdGljYWxseS4KICAqIERpcmVjdG9yeSBzdWJ0cmVlcyBjYW4gYmUgZXhwbGljaXRseSBwaW5u ZWQgdG8gc3BlY2lmaWMgTURTIGRhZW1vbnMgaW4KICAgIGNhc2VzIHdoZXJlIHRoZSBhdXRvbWF0 aWMgbG9hZCBiYWxhbmNpbmcgaXMgbm90IGRlc2lyZWQgb3IgZWZmZWN0aXZlLgogICogQ2xpZW50 IGtleXMgY2FuIG5vdyBiZSBjcmVhdGVkIHVzaW5nIHRoZSBuZXcgYGNlcGggZnMgYXV0aG9yaXpl YCBjb21tYW5kCiAgICB0byBjcmVhdGUga2V5cyB3aXRoIGFjY2VzcyB0byB0aGUgZ2l2ZW4gQ2Vw aEZTIGZpbGUgc3lzdGVtIGFuZCBhbGwgb2YgaXRzCiAgICBkYXRhIHBvb2xzLgogICogV2hlbiBy dW5uaW5nICdkZicgb24gYSBDZXBoRlMgZmlsZXN5c3RlbSBjb21wcmlzaW5nIGV4YWN0bHkgb25l IGRhdGEgcG9vbCwKICAgIHRoZSByZXN1bHQgbm93IHJlZmxlY3RzIHRoZSBmaWxlIHN0b3JhZ2Ug c3BhY2UgdXNlZCBhbmQgYXZhaWxhYmxlIGluIHRoYXQKICAgIGRhdGEgcG9vbCAoZnVzZSBjbGll bnQgb25seSkuCgotICpNaXNjZWxsYW5lb3VzKjoKCiAgKiBSZWxlYXNlIHBhY2thZ2VzIGFyZSBu b3cgYmVpbmcgYnVpbHQgZm9yICpEZWJpYW4gU3RyZXRjaCouICBOb3RlCiAgICB0aGF0IFFBIGlz IGxpbWl0ZWQgdG8gQ2VudE9TIGFuZCBVYnVudHUgKHhlbmlhbCBhbmQgdHJ1c3R5KS4gIFRoZQog ICAgZGlzdHJpYnV0aW9ucyB3ZSBidWlsZCBmb3Igbm93IGluY2x1ZGU6CgogICAgLSBDZW50T1Mg NyAoeDg2XzY0IGFuZCBhYXJjaDY0KQogICAgLSBEZWJpYW4gOCBKZXNzaWUgKHg4Nl82NCkKICAg IC0gRGViaWFuIDkgU3RyZXRjaCAoeDg2XzY0KQogICAgLSBVYnVudHUgMTYuMDQgWGVuaWFsICh4 ODZfNjQgYW5kIGFhcmNoNjQpCiAgICAtIFVidW50dSAxNC4wNCBUcnVzdHkgKHg4Nl82NCkKCiAg KiBBIGZpcnN0IHJlbGVhc2Ugb2YgQ2VwaCBmb3IgRnJlZUJTRCBpcyBhdmFpbGFibGUgd2hpY2gg Y29udGFpbnMgYSBmdWxsIHNldAogICAgb2YgZmVhdHVyZXMsIG90aGVyIHRoYW4gQmx1ZXN0b3Jl LiBJdCB3aWxsIHJ1biBldmVyeXRoaW5nIG5lZWRlZCB0byBidWlsZCBhCiAgICBzdG9yYWdlIGNs dXN0ZXIuIEZvciBjbGllbnRzLCBhbGwgYWNjZXNzIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSwgYWxi ZWl0CiAgICBDZXBoRlMgaXMgb25seSBhY2Nlc3NpYmxlIHRocm91Z2ggYSBGdXNlIGltcGxlbWVu dGF0aW9uLiBSQkQgaW1hZ2VzIGNhbiBiZQogICAgbW91bnRlZCBvbiBGcmVlQlNEIHN5c3RlbXMg dGhyb3VnaCByYmQtZ2dhdGUKICAgIENlcGggdmVyc2lvbnMgYXJlIHJlbGVhc2VkIHRocm91Z2gg dGhlIHJlZ3VsYXIgRnJlZUJTRCBwb3J0cyBhbmQgcGFja2FnZXMKICAgIHN5c3RlbS4gVGhlIG1v c3QgY3VycmVudCB2ZXJzaW9uIGlzIGF2YWlsYWJsZSBhczogbmV0L2NlcGgtZGV2ZWwuIE9uY2UK ICAgIEx1bWlub3VzIGdvZXMgaW50byBvZmZpY2lhbCByZWxlYXNlLCB0aGlzIHZlcnNpb24gd2ls bCBiZSBhdmFpbGFibGUgYXMKICAgIG5ldC9jZXBoLiBGdXR1cmUgZGV2ZWxvcG1lbnQgcmVsZWFz ZXMgd2lsbCBiZSBhdmFpbGFibGUgdmlhIG5ldC9jZXBoLWRldmVsCgogICogKkNMSSBjaGFuZ2Vz KjoKCiAgICAtIFRoZSBgY2VwaCAtc2Agb3IgYGNlcGggc3RhdHVzYCBjb21tYW5kIGhhcyBhIGZy ZXNoIGxvb2suCiAgICAtIGBjZXBoIG1nciBtZXRhZGF0YWAgd2lsbCBkdW1wIG1ldGFkYXRhIGFz c29jaWF0ZWQgd2l0aCBlYWNoIG1ncgogICAgICBkYWVtb24uCiAgICAtIGBjZXBoIHZlcnNpb25z YCBvciBgY2VwaCB7b3NkLG1kcyxtb24sbWdyfSB2ZXJzaW9uc2AKICAgICAgc3VtbWFyaXplIHZl cnNpb25zIG9mIHJ1bm5pbmcgZGFlbW9ucy4KICAgIC0gYGNlcGgge29zZCxtZHMsbW9uLG1ncn0g Y291bnQtbWV0YWRhdGEgPHByb3BlcnR5PmAgc2ltaWxhcmx5CiAgICAgIHRhYnVsYXRlcyBhbnkg b3RoZXIgZGFlbW9uIG1ldGFkYXRhIHZpc2libGUgdmlhIHRoZSBgY2VwaAogICAgICB7b3NkLG1k cyxtb24sbWdyfSBtZXRhZGF0YWAgY29tbWFuZHMuCiAgICAtIGBjZXBoIGZlYXR1cmVzYCBzdW1t YXJpemVzIGZlYXR1cmVzIGFuZCByZWxlYXNlcyBvZiBjb25uZWN0ZWQKICAgICAgY2xpZW50cyBh bmQgZGFlbW9ucy4KICAgIC0gYGNlcGggb3NkIHJlcXVpcmUtb3NkLXJlbGVhc2UgPHJlbGVhc2U+ YCByZXBsYWNlcyB0aGUgb2xkCiAgICAgIGByZXF1aXJlX1JFTEVBU0Vfb3Nkc2AgZmxhZ3MuCiAg ICAtIGBjZXBoIG9zZCBwZy11cG1hcGAsIGBjZXBoIG9zZCBybS1wZy11cG1hcGAsIGBjZXBoIG9z ZAogICAgICBwZy11cG1hcC1pdGVtc2AsIGBjZXBoIG9zZCBybS1wZy11cG1hcC1pdGVtc2AgY2Fu IGV4cGxpY2l0bHkKICAgICAgbWFuYWdlIGB1cG1hcGAgaXRlbXMKICAgIC0gYGNlcGggb3NkIGdl dGNydXNobWFwYCByZXR1cm5zIGEgY3J1c2ggbWFwIHZlcnNpb24gbnVtYmVyIG9uCiAgICAgIHN0 ZGVyciwgYW5kIGBjZXBoIG9zZCBzZXRjcnVzaG1hcCBbdmVyc2lvbl1gIHdpbGwgb25seSBpbmpl Y3QKICAgICAgYW4gdXBkYXRlZCBjcnVzaCBtYXAgaWYgdGhlIHZlcnNpb24gbWF0Y2hlcy4gIFRo aXMgYWxsb3dzIGNydXNoCiAgICAgIG1hcHMgdG8gYmUgdXBkYXRlZCBvZmZsaW5lIGFuZCB0aGVu IHJlaW5qZWN0ZWQgaW50byB0aGUgY2x1c3RlcgogICAgICB3aXRob3V0IGZlYXIgb2YgY2xvYmJl cmluZyByYWNpbmcgY2hhbmdlcyAoZS5nLiwgYnkgbmV3bHkgYWRkZWQKICAgICAgb3NkcyBvciBj aGFuZ2VzIGJ5IG90aGVyIGFkbWluaXN0cmF0b3JzKS4KICAgIC0gYGNlcGggb3NkIGNyZWF0ZWAg aGFzIGJlZW4gcmVwbGFjZWQgYnkgYGNlcGggb3NkIG5ld2AuICBUaGlzCiAgICAgIHNob3VsZCBi ZSBoaWRkZW4gZnJvbSBtb3N0IHVzZXJzIGJ5IHVzZXItZmFjaW5nIHRvb2xzIGxpa2UKICAgICAg YGNlcGgtZGlza2AuCiAgICAtIGBjZXBoIG9zZCBkZXN0cm95YCB3aWxsIG1hcmsgYW4gT1NEIGRl c3Ryb3llZCBhbmQgcmVtb3ZlIGl0cwogICAgICBjZXBoeCBhbmQgbG9ja2JveCBrZXlzLiAgSG93 ZXZlciwgdGhlIE9TRCBpZCBhbmQgQ1JVU0ggbWFwIGVudHJ5CiAgICAgIHdpbGwgcmVtYWluIGlu IHBsYWNlLCBhbGxvd2luZyB0aGUgaWQgdG8gYmUgcmV1c2VkIGJ5IGEKICAgICAgcmVwbGFjZW1l bnQgZGV2aWNlIHdpdGggbWluaW1hbCBkYXRhIHJlYmFsYW5jaW5nLgogICAgLSBgY2VwaCBvc2Qg cHVyZ2VgIHdpbGwgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgYW4gT1NEIGZyb20gdGhlCiAgICAgIGNs dXN0ZXIsIGluY2x1ZGluZyBpdHMgY2VwaHggZW5jcnlwdGlvbiBrZXlzLCBkbS1jcnlwdCBsb2Nr Ym94CiAgICAgIGtleXMsIE9TRCBpZCwgYW5kIGNydXNoIG1hcCBlbnRyeS4KICAgIC0gYGNlcGgg b3NkIGxzLXRyZWUgPG5hbWU+YCB3aWxsIG91dHB1dCBhIGxpc3Qgb2YgT1NEIGlkcyB1bmRlcgog ICAgICB0aGUgZ2l2ZW4gQ1JVU0ggbmFtZSAobGlrZSBhIGhvc3Qgb3IgcmFjayBuYW1lKS4gIFRo aXMgaXMgdXNlZnVsCiAgICAgIGZvciBhcHBseWluZyBjaGFuZ2VzIHRvIGVudGlyZSBzdWJ0cmVl cy4gIEZvciBleGFtcGxlLCBgY2VwaAogICAgICBvc2QgZG93biBgY2VwaCBvc2QgbHMtdHJlZSBy YWNrMWBgLgogICAgLSBgY2VwaCBvc2Qge2FkZCxybX0te25vb3V0LG5vaW4sbm9kb3duLG5vdXB9 YCBhbGxvdyB0aGUKICAgICAgYG5vb3V0YCwgYG5vaW5gLCBgbm9kb3duYCwgYW5kIGBub3VwYCBm bGFncyB0byBiZSBhcHBsaWVkIHRvCiAgICAgIHNwZWNpZmljIE9TRHMuCiAgICAtIGBjZXBoIG9z ZCBzYWZlLXRvLWRlc3Ryb3kgPG9zZChzKT5gIHdpbGwgcmVwb3J0IHdoZXRoZXIgaXQgaXMgc2Fm ZSB0bwogICAgICByZW1vdmUgb3IgZGVzdHJveSBPU0Qocykgd2l0aG91dCByZWR1Y2luZyBkYXRh IGR1cmFiaWxpdHkgb3IgcmVkdW5kYW5jeS4KICAgIC0gYGNlcGggb3NkIG9rLXRvLXN0b3AgPG9z ZChzKT5gIHdpbGwgcmVwb3J0IHdoZXRoZXIgaXQgaXMgb2theSB0byBzdG9wCiAgICAgIE9TRChz KSB3aXRob3V0IGltbWVkaWF0ZWx5IGNvbXByb21pc2luZyBhdmFpbGFiaWxpdHkgKGkuZS4sIGFs bCBQR3MKICAgICAgc2hvdWxkIHJlbWFpbiBhY3RpdmUgYnV0IG1heSBiZSBkZWdyYWRlZCkuCiAg ICAtIGBjZXBoIGxvZyBsYXN0IFtuXWAgd2lsbCBvdXRwdXQgdGhlIGxhc3QgKm4qIGxpbmVzIG9m IHRoZSBjbHVzdGVyCiAgICAgIGxvZy4KICAgIC0gYGNlcGggbWdyIGR1bXBgIHdpbGwgZHVtcCB0 aGUgTWdyTWFwLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnRseSBhY3RpdmUKICAgICAgY2VwaC1tZ3Ig ZGFlbW9uIGFuZCBhbnkgc3RhbmRieXMuCiAgICAtIGBjZXBoIG1nciBtb2R1bGUgbHNgIHdpbGwg bGlzdCBhY3RpdmUgY2VwaC1tZ3IgbW9kdWxlcy4KICAgIC0gYGNlcGggbWdyIG1vZHVsZSB7ZW5h YmxlLGRpc2FibGV9IDxuYW1lPmAgd2lsbCBlbmFibGUgb3IKICAgICAgZGlzYWJsZSB0aGUgbmFt ZWQgbWdyIG1vZHVsZS4gIFRoZSBtb2R1bGUgbXVzdCBiZSBwcmVzZW50IGluIHRoZQogICAgICBj b25maWd1cmVkIGBtZ3JfbW9kdWxlX3BhdGhgIG9uIHRoZSBob3N0KHMpIHdoZXJlIGBjZXBoLW1n cmAgaXMKICAgICAgcnVubmluZy4KICAgIC0gYGNlcGggb3NkIGNydXNoIGxzIDxub2RlPmAgd2ls bCBsaXN0IGl0ZW1zIChPU0RzIG9yIG90aGVyIENSVVNIIG5vZGVzKQogICAgICBkaXJlY3RseSBi ZW5lYXRoIGEgZ2l2ZW4gQ1JVU0ggbm9kZS4KICAgIC0gYGNlcGggb3NkIGNydXNoIHN3YXAtYnVj a2V0IDxzcmM+IDxkZXN0PmAgd2lsbCBzd2FwIHRoZQogICAgICBjb250ZW50cyBvZiB0d28gQ1JV U0ggYnVja2V0cyBpbiB0aGUgaGllcmFyY2h5IHdoaWxlIHByZXNlcnZpbmcKICAgICAgdGhlIGJ1 Y2tldHMnIGlkcy4gIFRoaXMgYWxsb3dzIGFuIGVudGlyZSBzdWJ0cmVlIG9mIGRldmljZXMgdG8K ICAgICAgYmUgcmVwbGFjZWQgKGUuZy4sIHRvIHJlcGxhY2UgYW4gZW50aXJlIGhvc3Qgb2YgRmls ZVN0b3JlIE9TRHMKICAgICAgd2l0aCBuZXdseS1pbWFnZWQgQmx1ZVN0b3JlIE9TRHMpIHdpdGhv dXQgZGlzcnVwdGluZyB0aGUKICAgICAgZGlzdHJpYnV0aW9uIG9mIGRhdGEgYWNyb3NzIG5laWdo Ym9yaW5nIGRldmljZXMuCiAgICAtIGBjZXBoIG9zZCBzZXQtcmVxdWlyZS1taW4tY29tcGF0LWNs aWVudCA8cmVsZWFzZT5gIGNvbmZpZ3VyZXMKICAgICAgdGhlIG9sZGVzdCBjbGllbnQgcmVsZWFz ZSB0aGUgY2x1c3RlciBpcyByZXF1aXJlZCB0byBzdXBwb3J0LgogICAgICBPdGhlciBjaGFuZ2Vz LCBsaWtlIENSVVNIIHR1bmFibGVzLCB3aWxsIGZhaWwgd2l0aCBhbiBlcnJvciBpZgogICAgICB0 aGV5IHdvdWxkIHZpb2xhdGUgdGhpcyBzZXR0aW5nLiAgQ2hhbmdpbmcgdGhpcyBzZXR0aW5nIGFs c28KICAgICAgZmFpbHMgaWYgY2xpZW50cyBvbGRlciB0aGFuIHRoZSBzcGVjaWZpZWQgcmVsZWFz ZSBhcmUgY3VycmVudGx5CiAgICAgIGNvbm5lY3RlZCB0byB0aGUgY2x1c3Rlci4KICAgIC0gYGNl cGggY29uZmlnLWtleSBkdW1wYCBkdW1wcyBjb25maWcta2V5IGVudHJpZXMgYW5kIHRoZWlyCiAg ICAgIGNvbnRlbnRzLiAgKFRoZSBleGlzdGluZyBgY2VwaCBjb25maWcta2V5IGxpc3RgIG9ubHkg ZHVtcHMgdGhlIGtleQogICAgICBuYW1lcywgbm90IHRoZSB2YWx1ZXMuKQogICAgLSBgY2VwaCBj b25maWcta2V5IGxpc3RgIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYGNlcGggY29uZmlnLWtl eSBsc2AuCiAgICAtIGBjZXBoIGNvbmZpZy1rZXkgcHV0YCBpcyBkZXByZWNhdGVkIGluIGZhdm9y IG9mIGBjZXBoIGNvbmZpZy1rZXkgc2V0YC4KICAgIC0gYGNlcGggYXV0aCBsaXN0YCBpcyBkZXBy ZWNhdGVkIGluIGZhdm9yIG9mIGBjZXBoIGF1dGggbHNgLgogICAgLSBgY2VwaCBvc2QgY3J1c2gg cnVsZSBsaXN0YCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGBjZXBoIG9zZCBjcnVzaCBydWxl IGxzYC4KICAgIC0gYGNlcGggb3NkIHNldC17ZnVsbCxuZWFyZnVsbCxiYWNrZmlsbGZ1bGx9LXJh dGlvYCBzZXRzIHRoZQogICAgICBjbHVzdGVyLXdpZGUgcmF0aW8gZm9yIHZhcmlvdXMgZnVsbCB0 aHJlc2hvbGRzICh3aGVuIHRoZSBjbHVzdGVyCiAgICAgIHJlZnVzZXMgSU8sIHdoZW4gdGhlIGNs dXN0ZXIgd2FybnMgYWJvdXQgYmVpbmcgY2xvc2UgdG8gZnVsbCwKICAgICAgd2hlbiBhbiBPU0Qg d2lsbCBkZWZlciByZWJhbGFuY2luZyBhIFBHIHRvIGl0c2VsZiwKICAgICAgcmVzcGVjdGl2ZWx5 KS4KICAgIC0gYGNlcGggb3NkIHJld2VpZ2h0bmAgd2lsbCBzcGVjaWZ5IHRoZSBgcmV3ZWlnaHRg IHZhbHVlcyBmb3IKICAgICAgbXVsdGlwbGUgT1NEcyBpbiBhIHNpbmdsZSBjb21tYW5kLiAgVGhp cyBpcyBlcXVpdmFsZW50IHRvIGEgc2VyaWVzIG9mCiAgICAgIGBjZXBoIG9zZCByZXdlaWdodGAg Y29tbWFuZHMuCiAgICAtIGBjZXBoIG9zZCBjcnVzaCB7c2V0LHJtfS1kZXZpY2UtY2xhc3NgIG1h bmFnZSB0aGUgbmV3CiAgICAgIENSVVNIICpkZXZpY2UgY2xhc3MqIGZlYXR1cmUuIE5vdGUgdGhh dCBtYW51YWxseSBjcmVhdGluZyBvciBkZWxldGluZwogICAgICBhIGRldmljZSBjbGFzcyBuYW1l IGlzIGdlbmVyYWxseSBub3QgbmVjZXNzYXJ5IGFzIGl0IHdpbGwgYmUgc21hcnQKICAgICAgZW5v dWdoIHRvIGJlIHNlbGYtbWFuYWdlZC4gYGNlcGggb3NkIGNydXNoIGNsYXNzIGxzYCBhbmQKICAg ICAgYGNlcGggb3NkIGNydXNoIGNsYXNzIGxzLW9zZGAgd2lsbCBvdXRwdXQgYWxsIGV4aXN0aW5n IGRldmljZSBjbGFzc2VzCiAgICAgIGFuZCBhIGxpc3Qgb2YgT1NEIGlkcyB1bmRlciB0aGUgZ2l2 ZW4gZGV2aWNlIGNsYXNzIHJlc3BlY3RpdmVseS4KICAgIC0gYGNlcGggb3NkIGNydXNoIHJ1bGUg Y3JlYXRlLXJlcGxpY2F0ZWRgIHJlcGxhY2VzIHRoZSBvbGQKICAgICAgYGNlcGggb3NkIGNydXNo IHJ1bGUgY3JlYXRlLXNpbXBsZWAgY29tbWFuZCB0byBjcmVhdGUgYSBDUlVTSAogICAgICBydWxl IGZvciBhIHJlcGxpY2F0ZWQgcG9vbC4gIE5vdGFibHkgaXQgdGFrZXMgYSBgY2xhc3NgIGFyZ3Vt ZW50CiAgICAgIGZvciB0aGUgKmRldmljZSBjbGFzcyogdGhlIHJ1bGUgc2hvdWxkIHRhcmdldCAo ZS5nLiwgYHNzZGAgb3IKICAgICAgYGhkZGApLgogICAgLSBgY2VwaCBtb24gZmVhdHVyZSBsc2Ag d2lsbCBsaXN0IG1vbml0b3IgZmVhdHVyZXMgcmVjb3JkZWQgaW4gdGhlCiAgICAgIE1vbk1hcC4g IGBjZXBoIG1vbiBmZWF0dXJlIHNldGAgd2lsbCBzZXQgYW4gb3B0aW9uYWwgZmVhdHVyZSAobm9u ZSBvZgogICAgICB0aGVzZSBleGlzdCB5ZXQpLgogICAgLSBgY2VwaCB0ZWxsIDxkYWVtb24+IGhl bHBgIHdpbGwgbm93IHJldHVybiBhIHVzYWdlIHN1bW1hcnkuCiAgICAtIGBjZXBoIGZzIGF1dGhv cml6ZWAgY3JlYXRlcyBhIG5ldyBjbGllbnQga2V5IHdpdGggY2FwcyBhdXRvbWF0aWNhbGx5CiAg ICAgIHNldCB0byBhY2Nlc3MgdGhlIGdpdmVuIENlcGhGUyBmaWxlIHN5c3RlbS4KICAgIC0gVGhl IGBjZXBoIGhlYWx0aGAgc3RydWN0dXJlZCBvdXRwdXQgKEpTT04gb3IgWE1MKSBubyBsb25nZXIg Y29udGFpbnMKICAgICAgJ3RpbWVjaGVja3MnIHNlY3Rpb24gZGVzY3JpYmluZyB0aGUgdGltZSBz eW5jIHN0YXR1cy4gIFRoaXMKICAgICAgaW5mb3JtYXRpb24gaXMgbm93IGF2YWlsYWJsZSB2aWEg dGhlICdjZXBoIHRpbWUtc3luYy1zdGF0dXMnCiAgICAgIGNvbW1hbmQuCiAgICAtIENlcnRhaW4g ZXh0cmEgZmllbGRzIGluIHRoZSBgY2VwaCBoZWFsdGhgIHN0cnVjdHVyZWQgb3V0cHV0IHRoYXQK ICAgICAgdXNlZCB0byBhcHBlYXIgaWYgdGhlIG1vbnMgd2VyZSBsb3cgb24gZGlzayBzcGFjZSAo d2hpY2ggZHVwbGljYXRlZAogICAgICB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIG5vcm1hbCBoZWFs dGggd2FybmluZyBtZXNzYWdlcykgYXJlIG5vdyBnb25lLgogICAgLSBUaGUgYGNlcGggLXdgIG91 dHB1dCBubyBsb25nZXIgY29udGFpbnMgYXVkaXQgbG9nIGVudHJpZXMgYnkgZGVmYXVsdC4KICAg ICAgQWRkIGEgYC0td2F0Y2gtY2hhbm5lbD1hdWRpdGAgb3IgYC0td2F0Y2gtY2hhbm5lbD0qYCB0 byBzZWUgdGhlbS4KICAgIC0gTmV3ICJjZXBoIC13IiBiZWhhdmlvciAtIHRoZSAiY2VwaCAtdyIg b3V0cHV0IG5vIGxvbmdlciBjb250YWlucwogICAgICBJL08gcmF0ZXMsIGF2YWlsYWJsZSBzcGFj ZSwgcGcgaW5mbywgZXRjLiBiZWNhdXNlIHRoZXNlIGFyZSBubwogICAgICBsb25nZXIgbG9nZ2Vk IHRvIHRoZSBjZW50cmFsIGxvZyAod2hpY2ggaXMgd2hhdCBgY2VwaCAtd2AKICAgICAgc2hvd3Mp LiBUaGUgc2FtZSBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgYnkgcnVubmluZyBgY2VwaCBw ZwogICAgICBzdGF0YDsgYWx0ZXJuYXRpdmVseSwgSS9PIHJhdGVzIHBlciBwb29sIGNhbiBiZSBk ZXRlcm1pbmVkIHVzaW5nCiAgICAgIGBjZXBoIG9zZCBwb29sIHN0YXRzYC4gQWx0aG91Z2ggdGhl c2UgY29tbWFuZHMgZG8gbm90CiAgICAgIHNlbGYtdXBkYXRlIGxpa2UgYGNlcGggLXdgIGRpZCwg dGhleSBkbyBoYXZlIHRoZSBhYmlsaXR5IHRvCiAgICAgIHJldHVybiBmb3JtYXR0ZWQgb3V0cHV0 IGJ5IHByb3ZpZGluZyBhIGAtLWZvcm1hdD08Zm9ybWF0PmAKICAgICAgb3B0aW9uLgogICAgLSBB ZGRlZCBuZXcgY29tbWFuZHMgYHBnIGZvcmNlLXJlY292ZXJ5YCBhbmQKICAgICAgYHBnLWZvcmNl LWJhY2tmaWxsYC4gVXNlIHRoZW0gdG8gYm9vc3QgcmVjb3Zlcnkgb3IgYmFja2ZpbGwKICAgICAg cHJpb3JpdHkgb2Ygc3BlY2lmaWVkIHBncywgc28gdGhleSdyZSByZWNvdmVyZWQvYmFja2ZpbGxl ZAogICAgICBiZWZvcmUgYW55IG90aGVyLiBOb3RlIHRoYXQgdGhlc2UgY29tbWFuZHMgZG9uJ3Qg aW50ZXJydXB0CiAgICAgIG9uZ29pbmcgcmVjb3ZlcnkvYmFja2ZpbGwsIGJ1dCBtZXJlbHkgcXVl dWUgc3BlY2lmaWVkIHBncyBiZWZvcmUKICAgICAgb3RoZXJzIHNvIHRoZXkncmUgcmVjb3ZlcmVk L2JhY2tmaWxsZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4gTmV3CiAgICAgIGNvbW1hbmRzIGBwZyBj YW5jZWwtZm9yY2UtcmVjb3ZlcnlgIGFuZCBgcGcKICAgICAgY2FuY2VsLWZvcmNlLWJhY2tmaWxs YCByZXN0b3JlIGRlZmF1bHQgcmVjb3ZlcnkvYmFja2ZpbGwKICAgICAgcHJpb3JpdHkgb2YgcHJl dmlvdXNseSBmb3JjZWQgcGdzLgoKTWFqb3IgQ2hhbmdlcyBmcm9tIEpld2VsCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQoKLSAqUkFET1MqOgoKICAqIFdlIG5vdyBkZWZhdWx0IHRvIHRoZSBBc3lu Y01lc3NlbmdlciAoYG1zIHR5cGUgPSBhc3luY2ApIGluc3RlYWQKICAgIG9mIHRoZSBsZWdhY3kg U2ltcGxlTWVzc2VuZ2VyLsKgIFRoZSBtb3N0IG5vdGljZWFibGUgZGlmZmVyZW5jZSBpcwogICAg dGhhdCB3ZSBub3cgdXNlIGEgZml4ZWQgc2l6ZWQgdGhyZWFkIHBvb2wgZm9yIG5ldHdvcmsgY29u bmVjdGlvbnMKICAgIChpbnN0ZWFkIG9mIHR3byB0aHJlYWRzIHBlciBzb2NrZXQgd2l0aCBTaW1w bGVNZXNzZW5nZXIpLgogICogU29tZSBPU0QgZmFpbHVyZXMgYXJlIG5vdyBkZXRlY3RlZCBhbG1v c3QgaW1tZWRpYXRlbHksIHdoZXJlYXMKICAgIHByZXZpb3VzbHkgdGhlIGhlYXJ0YmVhdCB0aW1l b3V0ICh3aGljaCBkZWZhdWx0cyB0byAyMCBzZWNvbmRzKQogICAgaGFkIHRvIGV4cGlyZS7CoCBU aGlzIHByZXZlbnRzIElPIGZyb20gYmxvY2tpbmcgZm9yIGFuIGV4dGVuZGVkCiAgICBwZXJpb2Qg Zm9yIGZhaWx1cmVzIHdoZXJlIHRoZSBob3N0IHJlbWFpbnMgdXAgYnV0IHRoZSBjZXBoLW9zZAog ICAgcHJvY2VzcyBpcyBubyBsb25nZXIgcnVubmluZy4KICAqIFRoZSBzaXplIG9mIGVuY29kZWQg T1NETWFwcyBoYXMgYmVlbiByZWR1Y2VkLgogICogVGhlIE9TRHMgbm93IHF1aWVzY2Ugc2NydWJi aW5nIHdoZW4gcmVjb3Zlcnkgb3IgcmViYWxhbmNpbmcgaXMgaW4gcHJvZ3Jlc3MuCgotICpSR1cq OgoKICAqIFJHVyBub3cgc3VwcG9ydHMgdGhlIFMzIG11bHRpcGFydCBvYmplY3QgY29weS1wYXJ0 IEFQSS4KICAqIEl0IGlzIHBvc3NpYmxlIG5vdyB0byByZXNoYXJkIGFuIGV4aXN0aW5nIGJ1Y2tl dCBvZmZsaW5lLiBPZmZsaW5lCiAgICBidWNrZXQgcmVzaGFyZGluZyBjdXJyZW50bHkgcmVxdWly ZXMgdGhhdCBhbGwgSU8gKGVzcGVjaWFsbHkKICAgIHdyaXRlcykgdG8gdGhlIHNwZWNpZmljIGJ1 Y2tldCBpcyBxdWllc2NlZC4gIChGb3IgYXV0b21hdGljIG9ubGluZQogICAgcmVzaGFyZGluZywg c2VlIHRoZSBuZXcgZmVhdHVyZSBpbiBMdW1pbm91cyBhYm92ZS4pCiAgKiBSR1cgbm93IHN1cHBv cnRzIGRhdGEgY29tcHJlc3Npb24gZm9yIG9iamVjdHMuCiAgKiBDaXZldHdlYiB2ZXJzaW9uIGhh cyBiZWVuIHVwZ3JhZGVkIHRvIDEuOAogICogVGhlIFN3aWZ0IHN0YXRpYyB3ZWJzaXRlIEFQSSBp cyBub3cgc3VwcG9ydGVkIChTMyBzdXBwb3J0IGhhcyBiZWVuIGFkZGVkCiAgICBwcmV2aW91c2x5 KS4KICAqIFMzIGJ1Y2tldCBsaWZlY3ljbGUgQVBJIGhhcyBiZWVuIGFkZGVkLiBOb3RlIHRoYXQg Y3VycmVudGx5IGl0IG9ubHkgc3VwcG9ydHMKICAgIG9iamVjdCBleHBpcmF0aW9uLgogICogU3Vw cG9ydCBmb3IgY3VzdG9tIHNlYXJjaCBmaWx0ZXJzIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBMREFQ IGF1dGgKICAgIGltcGxlbWVudGF0aW9uLgogICogU3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMyBo YXMgYmVlbiBhZGRlZCB0byB0aGUgUkdXIE5GUyBnYXRld2F5LgogICogQSBQeXRob24gYmluZGlu ZyBoYXMgYmVlbiBjcmVhdGVkIGZvciBsaWJyZ3cuCgotICpSQkQqOgoKICAqIFRoZSByYmQtbWly cm9yIGRhZW1vbiBub3cgc3VwcG9ydHMgcmVwbGljYXRpbmcgZHluYW1pYyBpbWFnZQogICAgZmVh dHVyZSB1cGRhdGVzIGFuZCBpbWFnZSBtZXRhZGF0YSBrZXkvdmFsdWUgcGFpcnMgZnJvbSB0aGUK ICAgIHByaW1hcnkgaW1hZ2UgdG8gdGhlIG5vbi1wcmltYXJ5IGltYWdlLgogICogVGhlIG51bWJl ciBvZiBpbWFnZSBzbmFwc2hvdHMgY2FuIGJlIG9wdGlvbmFsbHkgcmVzdHJpY3RlZCB0byBhCiAg ICBjb25maWd1cmFibGUgbWF4aW11bS4KICAqIFRoZSByYmQgUHl0aG9uIEFQSSBub3cgc3VwcG9y dHMgYXN5bmNocm9ub3VzIElPIG9wZXJhdGlvbnMuCgotICpDZXBoRlMqOgoKICAqIGxpYmNlcGhm cyBmdW5jdGlvbiBkZWZpbml0aW9ucyBoYXZlIGJlZW4gY2hhbmdlZCB0byBlbmFibGUgcHJvcGVy CiAgICB1aWQvZ2lkIGNvbnRyb2wuICBUaGUgbGlicmFyeSB2ZXJzaW9uIGhhcyBiZWVuIGluY3Jl YXNlZCB0byByZWZsZWN0IHRoZQogICAgaW50ZXJmYWNlIGNoYW5nZS4KICAqIFN0YW5kYnkgcmVw bGF5IE1EUyBkYWVtb25zIG5vdyBjb25zdW1lIGxlc3MgbWVtb3J5IG9uIHdvcmtsb2FkcwogICAg ZG9pbmcgZGVsZXRpb25zLgogICogU2NydWIgbm93IHJlcGFpcnMgYmFja3RyYWNlLCBhbmQgcG9w dWxhdGVzIGBkYW1hZ2UgbHNgIHdpdGgKICAgIGRpc2NvdmVyZWQgZXJyb3JzLgogICogQSBuZXcg YHBnX2ZpbGVzYCBzdWJjb21tYW5kIHRvIGBjZXBoZnMtZGF0YS1zY2FuYCBjYW4gaWRlbnRpZnkK ICAgIGZpbGVzIGFmZmVjdGVkIGJ5IGEgZGFtYWdlZCBvciBsb3N0IFJBRE9TIFBHLgogICogVGhl IGZhbHNlLXBvc2l0aXZlICJmYWlsaW5nIHRvIHJlc3BvbmQgdG8gY2FjaGUgcHJlc3N1cmUiIHdh cm5pbmdzIGhhdmUKICAgIGJlZW4gZml4ZWQuCgoKVXBncmFkZSBmcm9tIEpld2VsIG9yIEtyYWtl bgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMuIEVuc3VyZSB0aGF0IHRoZSBgc29ydGJp dHdpc2VgIGZsYWcgaXMgZW5hYmxlZDo6CiAgICAgIyBjZXBoIG9zZCBzZXQgc29ydGJpdHdpc2UK Iy4gTWFrZSBzdXJlIHlvdXIgY2x1c3RlciBpcyBzdGFibGUgYW5kIGhlYWx0aHkgKG5vIGRvd24g b3IKICAgcmVjb3ZlcnlpbmcgT1NEcykuICAoT3B0aW9uYWwsIGJ1dCByZWNvbW1lbmRlZC4pCiMu IERvIG5vdCBjcmVhdGUgYW55IG5ldyBlcmFzdXJlLWNvZGUgcG9vbHMgd2hpbGUgdXBncmFkaW5n IHRoZSBtb25pdG9ycy4KIy4gWW91IGNhbiBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiB5b3VyIHVw Z3JhZGUgYXQgZWFjaCBzdGFnZSB3aXRoIHRoZQogICBgY2VwaCB2ZXJzaW9uc2AgY29tbWFuZCwg d2hpY2ggd2lsbCB0ZWxsIHlvdSB3aGF0IGNlcGggdmVyc2lvbiBpcwogICBydW5uaW5nIGZvciBl YWNoIHR5cGUgb2YgZGFlbW9uLgojLiBTZXQgdGhlIGBub291dGAgZmxhZyBmb3IgdGhlIGR1cmF0 aW9uIG9mIHRoZSB1cGdyYWRlLiAoT3B0aW9uYWwKICAgYnV0IHJlY29tbWVuZGVkLik6OgogICAg ICMgY2VwaCBvc2Qgc2V0IG5vb3V0CiMuIFVwZ3JhZGUgbW9uaXRvcnMgYnkgaW5zdGFsbGluZyB0 aGUgbmV3IHBhY2thZ2VzIGFuZCByZXN0YXJ0aW5nIHRoZQogICBtb25pdG9yIGRhZW1vbnMuICBO b3RlIHRoYXQsIHVubGlrZSBwcmlvciByZWxlYXNlcywgdGhlIGNlcGgtbW9uCiAgIGRhZW1vbnMg Km11c3QqIGJlIHVwZ3JhZGVkIGZpcnN0OjoKICAgICAjIHN5c3RlbWN0bCByZXN0YXJ0IGNlcGgt bW9uLnRhcmdldAogICBWZXJpZnkgdGhlIG1vbml0b3IgdXBncmFkZSBpcyBjb21wbGV0ZSBvbmNl IGFsbCBtb25pdG9ycyBhcmUgdXAgYnkKICAgbG9va2luZyBmb3IgdGhlIGBsdW1pbm91c2AgZmVh dHVyZSBzdHJpbmcgaW4gdGhlIG1vbiBtYXAuICBGb3IKICAgZXhhbXBsZTo6CiAgICAgIyBjZXBo IG1vbiBmZWF0dXJlIGxzCiAgIHNob3VsZCBpbmNsdWRlIGBsdW1pbm91c2AgdW5kZXIgcGVyc2lz dGVudCBmZWF0dXJlczo6CiAgICAgb24gY3VycmVudCBtb25tYXAgKGVwb2NoIE5OTikKICAgICAg ICBwZXJzaXN0ZW50OiBba3Jha2VuLGx1bWlub3VzXQogICAgICAgIHJlcXVpcmVkOiBba3Jha2Vu LGx1bWlub3VzXQojLiBBZGQgb3IgcmVzdGFydCBgY2VwaC1tZ3JgIGRhZW1vbnMuICBJZiB5b3Ug YXJlIHVwZ3JhZGluZyBmcm9tCiAgIGtyYWtlbiwgdXBncmFkZSBwYWNrYWdlcyBhbmQgcmVzdGFy dCBjZXBoLW1nciBkYWVtb25zIHdpdGg6OgogICAgICMgc3lzdGVtY3RsIHJlc3RhcnQgY2VwaC1t Z3IudGFyZ2V0CiAgIElmIHlvdSBhcmUgdXBncmFkaW5nIGZyb20ga3Jha2VuLCB5b3UgbWF5IGFs cmVhZHkgaGF2ZSBjZXBoLW1ncgogICBkYWVtb25zIGRlcGxveWVkLiAgSWYgbm90LCBvciBpZiB5 b3UgYXJlIHVwZ3JhZGluZyBmcm9tIGpld2VsLCB5b3UKICAgY2FuIGRlcGxveSBuZXcgZGFlbW9u cyB3aXRoIHRvb2xzIGxpa2UgY2VwaC1kZXBsb3kgb3IgY2VwaC1hbnNpYmxlLgogICBGb3IgZXhh bXBsZTo6CiAgICAgIyBjZXBoLWRlcGxveSBtZ3IgY3JlYXRlIEhPU1QKICAgVmVyaWZ5IHRoZSBj ZXBoLW1nciBkYWVtb25zIGFyZSBydW5uaW5nIGJ5IGNoZWNraW5nIGBjZXBoIC1zYDo6CiAgICAg IyBjZXBoIC1zCiAgICAgLi4uCiAgICAgICBzZXJ2aWNlczoKICAgICAgICBtb246IDMgZGFlbW9u cywgcXVvcnVtIGZvbyxiYXIsYmF6CiAgICAgICAgbWdyOiBmb28oYWN0aXZlKSwgc3RhbmRieXM6 IGJhciwgYmF6CiAgICAgLi4uCiMuIFVwZ3JhZGUgYWxsIE9TRHMgYnkgaW5zdGFsbGluZyB0aGUg bmV3IHBhY2thZ2VzIGFuZCByZXN0YXJ0aW5nIHRoZQogICBjZXBoLW9zZCBkYWVtb25zIG9uIGFs bCBob3N0czo6CiAgICAgIyBzeXN0ZW1jdGwgcmVzdGFydCBjZXBoLW9zZC50YXJnZXQKICAgWW91 IGNhbiBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiB0aGUgT1NEIHVwZ3JhZGVzIHdpdGggdGhlIG5l dwogICBgY2VwaCB2ZXJzaW9uc2Agb3IgYGNlcGggb3NkIHZlcnNpb25zYCBjb21tYW5kOjoKICAg ICAjIGNlcGggb3NkIHZlcnNpb25zCiAgICAgewogICAgICAgICJjZXBoIHZlcnNpb24gMTIuMi4w ICguLi4pIGx1bWlub3VzIChzdGFibGUpIjogMTIsCiAgICAgICAgImNlcGggdmVyc2lvbiAxMC4y LjYgKC4uLikiOiAzLAogICAgIH0KIy4gVXBncmFkZSBhbGwgQ2VwaEZTIGRhZW1vbnMgYnkgdXBn cmFkaW5nIHBhY2thZ2VzIGFuZCByZXN0YXJ0aW5nCiAgIGRhZW1vbnMgb24gYWxsIGhvc3RzOjoK ICAgICAjIHN5c3RlbWN0bCByZXN0YXJ0IGNlcGgtbWRzLnRhcmdldAojLiBVcGdyYWRlIGFsbCBy YWRvc2d3IGRhZW1vbnMgYnkgdXBncmFkaW5nIHBhY2thZ2VzIGFuZCByZXN0YXJ0aW5nCiAgIGRh ZW1vbnMgb24gYWxsIGhvc3RzOjoKICAgICAjIHN5c3RlbWN0bCByZXN0YXJ0IHJhZG9zZ3cudGFy Z2V0CiMuIENvbXBsZXRlIHRoZSB1cGdyYWRlIGJ5IGRpc2FsbG93aW5nIHByZS1sdW1pbm91cyBP U0RzIGFuZCBlbmFibGluZwogICBhbGwgbmV3IEx1bWlub3VzLW9ubHkgZnVuY3Rpb25hbGl0eTo6 CiAgICAgIyBjZXBoIG9zZCByZXF1aXJlLW9zZC1yZWxlYXNlIGx1bWlub3VzCiAgIElmIHlvdSBz ZXQgYG5vb3V0YCBhdCB0aGUgYmVnaW5uaW5nLCBiZSBzdXJlIHRvIGNsZWFyIGl0IHdpdGg6Ogog ICAgICMgY2VwaCBvc2QgdW5zZXQgbm9vdXQKIy4gVmVyaWZ5IHRoZSBjbHVzdGVyIGlzIGhlYWx0 aHkgd2l0aCBgY2VwaCBoZWFsdGhgLgoKClVwZ3JhZGluZyBmcm9tIHByZS1KZXdlbCByZWxlYXNl cyAobGlrZSBIYW1tZXIpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCgpZb3UgKm11c3QqIGZpcnN0IHVwZ3JhZGUgdG8gSmV3ZWwgKDEwLjIueikgYmVmb3Jl IGF0dGVtcHRpbmcgYW4KdXBncmFkZSB0byBMdW1pbm91cy4KCgpVcGdyYWRlIGNvbXBhdGliaWxp dHkgbm90ZXMsIEtyYWtlbiB0byBMdW1pbm91cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb24gYG9zZCBwb29s IGVyYXN1cmUgY29kZSBzdHJpcGUgd2lkdGhgIGhhcwogIGJlZW4gcmVwbGFjZWQgYnkgYG9zZCBw b29sIGVyYXN1cmUgY29kZSBzdHJpcGUgdW5pdGAsIGFuZCBnaXZlbgogIHRoZSBhYmlsaXR5IHRv IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGVyYXN1cmUgY29kZSBwcm9maWxlIHNldHRpbmcKICBgc3Ry aXBlX3VuaXRgLiBGb3IgbW9yZSBkZXRhaWxzIHNlZQogIDpyZWY6YGVyYXN1cmUtY29kZS1wcm9m aWxlc2AuCgoqIHJiZCBhbmQgY2VwaGZzIGNhbiB1c2UgZXJhc3VyZSBjb2Rpbmcgd2l0aCBibHVl c3RvcmUuIFRoaXMgbWF5IGJlCiAgZW5hYmxlZCBieSBzZXR0aW5nIGBhbGxvd19lY19vdmVyd3Jp dGVzYCB0byBgdHJ1ZWAgZm9yIGEgcG9vbC4gU2luY2UKICB0aGlzIHJlbGllcyBvbiBibHVlc3Rv cmUncyBjaGVja3N1bW1pbmcgdG8gZG8gZGVlcCBzY3J1YmJpbmcsCiAgZW5hYmxpbmcgdGhpcyBv biBhIHBvb2wgc3RvcmVkIG9uIGZpbGVzdG9yZSBpcyBub3QgYWxsb3dlZC4KCiogVGhlIGByYWRv cyBkZmAgSlNPTiBvdXRwdXQgbm93IHByaW50cyBudW1lcmljIHZhbHVlcyBhcyBudW1iZXJzIGlu c3RlYWQgb2YKICBzdHJpbmdzLgoKKiBUaGUgYG1vbl9vc2RfbWF4X29wX2FnZWAgb3B0aW9uIGhh cyBiZWVuIHJlbmFtZWQgdG8KICBgbW9uX29zZF93YXJuX29wX2FnZWAgKGRlZmF1bHQ6IDMyIHNl Y29uZHMpLCB0byBpbmRpY2F0ZSB3ZQogIGdlbmVyYXRlIGEgd2FybmluZyBhdCB0aGlzIGFnZS4g IFRoZXJlIGlzIGFsc28gYSBuZXcKICBgbW9uX29zZF9lcnJfb3BfYWdlX3JhdGlvYCB0aGF0IGlz IGEgZXhwcmVzc2VkIGFzIGEgbXVsdGl0cGxlIG9mCiAgYG1vbl9vc2Rfd2Fybl9vcF9hZ2VgIChk ZWZhdWx0OiAxMjgsIGZvciByb3VnaGx5IDYwIG1pbnV0ZXMpIHRvCiAgY29udHJvbCB3aGVuIGFu IGVycm9yIGlzIGdlbmVyYXRlZC4KCiogVGhlIGRlZmF1bHQgbWF4aW11bSBzaXplIGZvciBhIHNp bmdsZSBSQURPUyBvYmplY3QgaGFzIGJlZW4gcmVkdWNlZCBmcm9tCiAgMTAwR0IgdG8gMTI4TUIu ICBUaGUgMTAwR0IgbGltaXQgd2FzIGNvbXBsZXRlbHkgaW1wcmFjdGljYWwgaW4gcHJhY3RpY2UK ICB3aGlsZSB0aGUgMTI4TUIgbGltaXQgaXMgYSBiaXQgaGlnaCBidXQgbm90IHVucmVhc29uYWJs ZS4gIElmIHlvdSBoYXZlIGFuCiAgYXBwbGljYXRpb24gd3JpdHRlbiBkaXJlY3RseSB0byBsaWJy YWRvcyB0aGF0IGlzIHVzaW5nIG9iamVjdHMgbGFyZ2VyIHRoYW4KICAxMjhNQiB5b3UgbWF5IG5l ZWQgdG8gYWRqdXN0IGBvc2RfbWF4X29iamVjdF9zaXplYC4KCiogVGhlIHNlbWFudGljcyBvZiB0 aGUgYHJhZG9zIGxzYCBhbmQgbGlicmFkb3Mgb2JqZWN0IGxpc3RpbmcKICBvcGVyYXRpb25zIGhh dmUgYWx3YXlzIGJlZW4gYSBiaXQgY29uZnVzaW5nIGluIHRoYXQgIndoaXRlb3V0IgogIG9iamVj dHMgKHdoaWNoIGxvZ2ljYWxseSBkb24ndCBleGlzdCBhbmQgd2lsbCByZXR1cm4gRU5PRU5UIGlm IHlvdQogIHRyeSB0byBhY2Nlc3MgdGhlbSkgYXJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHRzLiAg UHJldmlvdXNseQogIHdoaXRlb3V0cyBvbmx5IG9jY3VycmVkIGluIGNhY2hlIHRpZXIgcG9vbHMu ICBJbiBsdW1pbm91cywgbG9naWNhbGx5CiAgZGVsZXRlZCBidXQgc25hcHNob3R0ZWQgb2JqZWN0 cyBub3cgcmVzdWx0IGluIGEgd2hpdGVvdXQgb2JqZWN0LCBhbmQKICBhcyBhIHJlc3VsdCB0aGV5 IHdpbGwgYXBwZWFyIGluIGByYWRvcyBsc2AgcmVzdWx0cywgZXZlbiB0aG91Z2gKICB0cnlpbmcg dG8gcmVhZCBzdWNoIGFuIG9iamVjdCB3aWxsIHJlc3VsdCBpbiBFTk9FTlQuICBUaGUgYHJhZG9z CiAgbGlzdHNuYXBzYCBvcGVyYXRpb24gY2FuIGJlIHVzZWQgaW4gc3VjaCBhIGNhc2UgdG8gZW51 bWVyYXRlIHdoaWNoCiAgc25hcHNob3RzIGFyZSBwcmVzZW50LgogIFRoaXMgbWF5IHNlZW0gYSBi aXQgc3RyYW5nZSwgYnV0IGlzIGxlc3Mgc3RyYW5nZSB0aGFuIGhhdmluZyBhCiAgZGVsZXRlZC1i dXQtc25hcHNob3R0ZWQgb2JqZWN0IG5vdCBhcHBlYXIgYXQgYWxsIGFuZCBiZSBjb21wbGV0ZWx5 CiAgaGlkZGVuIGZyb20gbGlicmFkb3MncyBhYmlsaXR5IHRvIGVudW1lcmF0ZSBvYmplY3RzLiAg RnV0dXJlCiAgdmVyc2lvbnMgb2YgQ2VwaCB3aWxsIGxpa2VseSBpbmNsdWRlIGFuIGFsdGVybmF0 aXZlIG9iamVjdAogIGVudW1lcmF0aW9uIGludGVyZmFjZSB0aGF0IG1ha2VzIGl0IG1vcmUgbmF0 dXJhbCBhbmQgZWZmaWNpZW50IHRvCiAgZW51bWVyYXRlIGFsbCBvYmplY3RzIGFsb25nIHdpdGgg dGhlaXIgc25hcHNob3QgYW5kIGNsb25lIG1ldGFkYXRhLgoKKiBUaGUgZGVwcmVjYXRlZCBgY3J1 c2hfcnVsZXNldGAgcHJvcGVydHkgaGFzIGZpbmFsbHkgYmVlbiByZW1vdmVkOwogIHBsZWFzZSB1 c2UgIGBjcnVzaF9ydWxlYCBpbnN0ZWFkIGZvciB0aGUgYG9zZCBwb29sIGdldCAuLi5gIGFuZCBg b3NkCiAgcG9vbCBzZXQgLi4uYCBjb21tYW5kcy4KCiogVGhlIGBvc2QgcG9vbCBkZWZhdWx0IGNy dXNoIHJlcGxpY2F0ZWQgcnVsZXNldGAgb3B0aW9uIGhhcyBiZWVuCiAgcmVtb3ZlZCBhbmQgcmVw bGFjZWQgYnkgdGhlIGBwc2QgcG9vbCBkZWZhdWx0IGNydXNoIHJ1bGVgIG9wdGlvbi4KICBCeSBk ZWZhdWx0IGl0IGlzIC0xLCB3aGljaCBtZWFucyB0aGUgbW9uIHdpbGwgcGljayB0aGUgZmlyc3Qg dHlwZQogIHJlcGxpY2F0ZWQgcnVsZSBpbiB0aGUgQ1JVU0ggbWFwIGZvciByZXBsaWNhdGVkIHBv b2xzLiAgRXJhc3VyZQogIGNvZGVkIHBvb2xzIGhhdmUgcnVsZXMgdGhhdCBhcmUgYXV0b21hdGlj YWxseSBjcmVhdGVkIGZvciB0aGVtIGlmCiAgdGhleSBhcmUgbm90IHNwZWNpZmllZCBhdCBwb29s IGNyZWF0aW9uIHRpbWUuCgoqIFdlIG5vIGxvbmdlciB0ZXN0IHRoZSBGaWxlU3RvcmUgY2VwaC1v c2QgYmFja2VuZCBpbiBjb21iaW5hdGlvbiB3aXRoCiAgYnRyZnMuICBXZSByZWNvbW1lbmQgYWdh aW5zdCB1c2luZyBidHJmcy4gIElmIHlvdSBhcmUgdXNpbmcKICBidHJmcy1iYXNlZCBPU0RzIGFu ZCB3YW50IHRvIHVwZ3JhZGUgdG8gbHVtaW5vdXMgeW91IHdpbGwgbmVlZCB0bwogIGFkZCB0aGUg Zm9sbHdpbmcgdG8geW91ciBjZXBoLmNvbmY6OgoKICAgIGVuYWJsZSBleHBlcmltZW50YWwgdW5y ZWNvdmVyYWJsZSBkYXRhIGNvcnJ1cHRpbmcgZmVhdHVyZXMgPSBidHJmcwoKICBUaGUgY29kZSBp cyBtYXR1cmUgYW5kIHVubGlrZWx5IHRvIGNoYW5nZSwgYnV0IHdlIGFyZSBvbmx5CiAgY29udGlu dWluZyB0byB0ZXN0IHRoZSBKZXdlbCBzdGFibGUgYnJhbmNoIGFnYWluc3QgYnRyZnMuICBXZQog IHJlY29tbWVuZCBtb3ZpbmcgdGhlc2UgT1NEcyB0byBGaWxlU3RvcmUgd2l0aCBYRlMgb3IgQmx1 ZVN0b3JlLgoqIFRoZSBgcnVsZXNldC0qYCBwcm9wZXJ0aWVzIGZvciB0aGUgZXJhc3VyZSBjb2Rl IHByb2ZpbGVzIGhhdmUgYmVlbgogIHJlbmFtZWQgdG8gYGNydXNoLSpgIHRvICgxKSBtb3ZlIGF3 YXkgZnJvbSB0aGUgb2Jzb2xldGUgJ3J1bGVzZXQnCiAgdGVybSBhbmQgdG8gYmUgbW9yZSBjbGVh ciBhYm91dCB0aGVpciBwdXJwb3NlLiAgVGhlcmUgaXMgYWxzbyBhIG5ldwogIG9wdGlvbmFsIGBj cnVzaC1kZXZpY2UtY2xhc3NgIHByb3BlcnR5IHRvIHNwZWNpZnkgYSBDUlVTSCBkZXZpY2UKICBj bGFzcyB0byB1c2UgZm9yIHRoZSBlcmFzdXJlIGNvZGVkIHBvb2wuICBFeGlzdGluZyBlcmFzdXJl IGNvZGUKICBwcm9maWxlcyB3aWxsIGJlIGNvbnZlcnRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXBn cmFkZSBjb21wbGV0ZXMKICAod2hlbiB0aGUgYGNlcGggb3NkIHJlcXVpcmUtb3NkLXJlbGVhc2Ug bHVtaW5vdXNgIGNvbW1hbmQgaXMgcnVuKQogIGJ1dCBhbnkgcHJvdmlzaW9uaW5nIHRvb2xzIHRo YXQgY3JlYXRlIGVyYXN1cmUgY29kZWQgcG9vbHMgbWF5IG5lZWQKICB0byBiZSB1cGRhdGVkLgoq IFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFhNTCBvdXRwdXQgZm9yIGBvc2QgY3J1c2ggdHJlZWAgaGFz IGNoYW5nZWQKICBzbGlnaHRseSB0byBiZXR0ZXIgbWF0Y2ggdGhlIGBvc2QgdHJlZWAgb3V0cHV0 LiAgVGhlIHRvcCBsZXZlbAogIHN0cnVjdHVyZSBpcyBub3cgYG5vZGVzYCBpbnN0ZWFkIG9mIGBj cnVzaF9tYXBfcm9vdHNgLgoqIFdoZW4gYXNzaWduaW5nIGEgbmV0d29yayB0byB0aGUgcHVibGlj IG5ldHdvcmsgYW5kIG5vdCB0bwogIHRoZSBjbHVzdGVyIG5ldHdvcmsgdGhlIG5ldHdvcmsgc3Bl Y2lmaWNhdGlvbiBvZiB0aGUgcHVibGljCiAgbmV0d29yayB3aWxsIGJlIHVzZWQgZm9yIHRoZSBj bHVzdGVyIG5ldHdvcmsgYXMgd2VsbC4KICBJbiBvbGRlciB2ZXJzaW9ucyB0aGlzIHdvdWxkIGxl YWQgdG8gY2x1c3RlciBzZXJ2aWNlcwogIGJlaW5nIGJvdW5kIHRvIDAuMC4wLjA6PHBvcnQ+LCB0 aHVzIG1ha2luZyB0aGUKICBjbHVzdGVyIHNlcnZpY2UgZXZlbiBtb3JlIHB1YmxpY2x5IGF2YWls YWJsZSB0aGFuIHRoZQogIHB1YmxpYyBzZXJ2aWNlcy4gV2hlbiBvbmx5IHNwZWNpZnlpbmcgYSBj bHVzdGVyIG5ldHdvcmsgaXQKICB3aWxsIHN0aWxsIHJlc3VsdCBpbiB0aGUgcHVibGljIHNlcnZp Y2VzIGJpbmRpbmcgdG8gMC4wLjAuMC4KCiogSW4gcHJldmlvdXMgdmVyc2lvbnMsIGlmIGEgY2xp ZW50IHNlbnQgYW4gb3AgdG8gdGhlIHdyb25nIE9TRCwgdGhlIE9TRAogIHdvdWxkIHJlcGx5IHdp dGggRU5YSU8uICBUaGUgcmF0aW9uYWxlIGhlcmUgaXMgdGhhdCB0aGUgY2xpZW50IG9yIE9TRCBp cwogIGNsZWFybHkgYnVnZ3kgYW5kIHdlIHdhbnQgdG8gc3VyZmFjZSB0aGUgZXJyb3IgYXMgY2xl YXJseSBhcyBwb3NzaWJsZS4KICBXZSBub3cgb25seSBzZW5kIHRoZSBFTlhJTyByZXBseSBpZiB0 aGUgb3NkX2VueGlvX29uX21pc2RpcmVjdGVkX29wIG9wdGlvbgogIGlzIGVuYWJsZWQgKGl0J3Mg b2ZmIGJ5IGRlZmF1bHQpLiAgVGhpcyBtZWFucyB0aGF0IGEgVk0gdXNpbmcgbGlicmJkIHRoYXQK ICBwcmV2aW91c2x5IHdvdWxkIGhhdmUgZ290dGVuIGFuIEVJTyBhbmQgZ29uZSByZWFkLW9ubHkg d2lsbCBub3cgc2VlIGEKICBibG9ja2VkL2h1bmcgSU8gaW5zdGVhZC4KCiogVGhlICJqb3VybmFs ZXIgYWxsb3cgc3BsaXQgZW50cmllcyIgY29uZmlnIHNldHRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4K CiogVGhlICdtb25fd2Fybl9vc2RfdXNhZ2VfbWluX21heF9kZWx0YScgY29uZmlnIG9wdGlvbiBo YXMgYmVlbgogIHJlbW92ZWQgYW5kIHRoZSBhc3NvY2lhdGVkIGhlYWx0aCB3YXJuaW5nIGhhcyBi ZWVuIGRpc2FibGVkIGJlY2F1c2UKICBpdCBkb2VzIG5vdCBhZGRyZXNzIGNsdXN0ZXJzIHVuZGVy Z29pbmcgcmVjb3Zlcnkgb3IgQ1JVU0ggcnVsZXMgdGhhdCBkbwogIG5vdCB0YXJnZXQgYWxsIGRl dmljZXMgaW4gdGhlIGNsdXN0ZXIuCgoqIEFkZGVkIG5ldyBjb25maWd1cmF0aW9uICJwdWJsaWMg YmluZCBhZGRyIiB0byBzdXBwb3J0IGR5bmFtaWMKICBlbnZpcm9ubWVudHMgbGlrZSBLdWJlcm5l dGVzLiBXaGVuIHNldCB0aGUgQ2VwaCBNT04gZGFlbW9uIGNvdWxkCiAgYmluZCBsb2NhbGx5IHRv IGFuIElQIGFkZHJlc3MgYW5kIGFkdmVydGlzZSBhIGRpZmZlcmVudCBJUCBhZGRyZXNzCiAgYHB1 YmxpYyBhZGRyYCBvbiB0aGUgbmV0d29yay4KCiogVGhlIGNydXNoIGBjaG9vc2VfYXJnc2AgZW5j b2RpbmcgaGFzIGJlZW4gY2hhbmdlZCB0byBtYWtlIGl0CiAgYXJjaGl0ZWN0dXJlLWluZGVwZW5k ZW50LiBJZiB5b3UgZGVwbG95ZWQgTHVtaW5vdXMgZGV2IHJlbGVhc2VzIG9yCiAgMTIuMS4wIHJj IHJlbGVhc2UgYW5kIG1hZGUgdXNlIG9mIHRoZSBDUlVTSCBjaG9vc2VfYXJncyBmZWF0dXJlLCB5 b3UKICBuZWVkIHRvIHJlbW92ZSBhbGwgY2hvb3NlX2FyZ3MgbWFwcGluZ3MgZnJvbSB5b3VyIENS VVNIIG1hcCBiZWZvcmUKICBzdGFydGluZyB0aGUgdXBncmFkZS4KCgotICpsaWJyYWRvcyo6Cgog ICogU29tZSB2YXJpYW50cyBvZiB0aGUgb21hcF9nZXRfa2V5cyBhbmQgb21hcF9nZXRfdmFscyBs aWJyYWRvcwogICAgZnVuY3Rpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIG9t YXBfZ2V0X3ZhbHMyIGFuZAogICAgb21hcF9nZXRfa2V5czIuICBUaGUgbmV3IG1ldGhvZHMgaW5j bHVkZSBhbiBvdXRwdXQgYXJndW1lbnQKICAgIGluZGljYXRpbmcgd2hldGhlciB0aGVyZSBhcmUg YWRkaXRpb25hbCBrZXlzIGxlZnQgdG8gZmV0Y2guCiAgICBQcmV2aW91c2x5IHRoaXMgaGFkIHRv IGJlIGluZmVycmVkIGZyb20gdGhlIHJlcXVlc3RlZCBrZXkgY291bnQgdnMKICAgIHRoZSBudW1i ZXIgb2Yga2V5cyByZXR1cm5lZCwgYnV0IHRoaXMgYnJlYWtzIHdpdGggbmV3IE9TRC1zaWRlCiAg ICBsaW1pdHMgb24gdGhlIG51bWJlciBvZiBrZXlzIG9yIGJ5dGVzIHRoYXQgY2FuIGJlIHJldHVy bmVkIGJ5IGEKICAgIHNpbmdsZSBvbWFwIHJlcXVlc3QuICBUaGVzZSBsaW1pdHMgd2VyZSBpbnRy b2R1Y2VkIGJ5IGtyYWtlbiBidXQKICAgIGFyZSBlZmZlY3RpdmVseSBkaXNhYmxlZCBieSBkZWZh dWx0IChieSBzZXR0aW5nIGEgdmVyeSBsYXJnZSBsaW1pdAogICAgb2YgMSBHQikgYmVjYXVzZSB1 c2VycyBvZiB0aGUgbmV3bHkgZGVwcmVjYXRlZCBpbnRlcmZhY2UgY2Fubm90CiAgICB0ZWxsIHdo ZXRoZXIgdGhleSBzaG91bGQgZmV0Y2ggbW9yZSBrZXlzIG9yIG5vdC4gIEluIHRoZSBjYXNlIG9m CiAgICB0aGUgc3RhbmRhbG9uZSBjYWxscyBpbiB0aGUgQysrIGludGVyZmFjZQogICAgKElvQ3R4 OjpnZXRfb21hcF97a2V5cyx2YWxzfSksIGxpYnJhZG9zIGhhcyBiZWVuIHVwZGF0ZWQgdG8gbG9v cCBvbgogICAgdGhlIGNsaWVudCBzaWRlIHRvIHByb3ZpZGUgYSBjb3JyZWN0IHJlc3VsdCB2aWEg bXVsdGlwbGUgY2FsbHMgdG8KICAgIHRoZSBPU0QuICBJbiB0aGUgY2FzZSBvZiB0aGUgbWV0aG9k cyB1c2VkIGZvciBidWlsZGluZwogICAgbXVsdGktb3BlcmF0aW9uIHRyYW5zYWN0aW9ucywgaG93 ZXZlciwgY2xpZW50LXNpZGUgbG9vcGluZyBpcyBub3QKICAgIHByYWN0aWNhbCwgYW5kIHRoZSBt ZXRob2RzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAgTm90ZSB0aGF0IHVzZSBvZgogICAgZWl0aGVy IHRoZSBJb0N0eCBtZXRob2RzIG9uIG9sZGVyIGxpYnJhZG9zIHZlcnNpb25zIG9yIHRoZQogICAg ZGVwcmVjYXRlZCBtZXRob2RzIG9uIGFueSB2ZXJzaW9uIG9mIGxpYnJhZG9zIHdpbGwgbGVhZCB0 bwogICAgaW5jb21wbGV0ZSByZXN1bHRzIGlmL3doZW4gdGhlIG5ldyBPU0QgbGltaXRzIGFyZSBl bmFibGVkLgoKICAqIFRoZSBvcmlnaW5hbCBsaWJyYWRvcyByYWRvc19vYmplY3RzX2xpc3Rfb3Bl biAoQykgYW5kIG9iamVjdHNfYmVnaW4KICAgIChDKyspIG9iamVjdCBsaXN0aW5nIEFQSSwgZGVw cmVjYXRlZCBpbiBIYW1tZXIsIGhhcyBmaW5hbGx5IGJlZW4KICAgIHJlbW92ZWQuICBVc2VycyBv ZiB0aGlzIGludGVyZmFjZSBtdXN0IHVwZGF0ZSB0aGVpciBzb2Z0d2FyZSB0byB1c2UKICAgIGVp dGhlciB0aGUgcmFkb3Nfbm9iamVjdHNfbGlzdF9vcGVuIChDKSBhbmQgbm9iamVjdHNfYmVnaW4g KEMrKykgQVBJIG9yCiAgICB0aGUgbmV3IHJhZG9zX29iamVjdF9saXN0X2JlZ2luIChDKSBhbmQg b2JqZWN0X2xpc3RfYmVnaW4gKEMrKykgQVBJCiAgICBiZWZvcmUgdXBkYXRpbmcgdGhlIGNsaWVu dC1zaWRlIGxpYnJhZG9zIGxpYnJhcnkgdG8gTHVtaW5vdXMuCiAgICBPYmplY3QgZW51bWVyYXRp b24gKHZpYSBhbnkgQVBJKSB3aXRoIHRoZSBsYXRlc3QgbGlicmFkb3MgdmVyc2lvbgogICAgYW5k IHByZS1IYW1tZXIgT1NEcyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgTm90ZSB0aGF0IG5vIGlu LXRyZWUKICAgIENlcGggc2VydmljZXMgcmVseSBvbiBvYmplY3QgZW51bWVyYXRpb24gdmlhIHRo ZSBkZXByZWNhdGVkIEFQSXMsIHNvCiAgICBvbmx5IGV4dGVybmFsIGxpYnJhZG9zIHVzZXJzIG1p Z2h0IGJlIGFmZmVjdGVkLgogICAgVGhlIG5ld2VzdCAoYW5kIHJlY29tbWVuZGVkKSByYWRvc19v YmplY3RfbGlzdF9iZWdpbiAoQykgYW5kCiAgICBvYmplY3RfbGlzdF9iZWdpbiAoQysrKSBBUEkg aXMgb25seSB1c2FibGUgb24gY2x1c3RlcnMgd2l0aCB0aGUKICAgIFNPUlRCSVRXSVNFIGZsYWcg ZW5hYmxlZCAoSmV3ZWwgYW5kIGxhdGVyKS4gIChOb3RlIHRoYXQgdGhpcyBmbGFnIGlzCiAgICBy ZXF1aXJlZCB0byBiZSBzZXQgYmVmb3JlIHVwZ3JhZGluZyBiZXlvbmQgSmV3ZWwuKQoKLSAqQ2Vw aEZTKjoKCiAgKiBXaGVuIGNvbmZpZ3VyaW5nIGNlcGgtZnVzZSBtb3VudHMgaW4gL2V0Yy9mc3Rh YiwgYSBuZXcgc3ludGF4IGlzCiAgICBhdmFpbGFibGUgdGhhdCB1c2VzICJjZXBoLjxhcmc+PTx2 YWw+IiBpbiB0aGUgb3B0aW9ucyBjb2x1bW4sIGluc3RlYWQKICAgIG9mIHB1dHRpbmcgY29uZmln dXJhdGlvbiBpbiB0aGUgZGV2aWNlIGNvbHVtbi4gIFRoZSBvbGQgc3R5bGUgc3ludGF4CiAgICBz dGlsbCB3b3Jrcy4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBwYWdlICJNb3VudCBDZXBoRlMgaW4g eW91cgogICAgZmlsZSBzeXN0ZW1zIHRhYmxlIiBmb3IgZGV0YWlscy4KICAqIENlcGhGUyBjbGll bnRzIHdpdGhvdXQgdGhlICdwJyBmbGFnIGluIHRoZWlyIGF1dGhlbnRpY2F0aW9uIGNhcGFiaWxp dHkKICAgIHN0cmluZyB3aWxsIG5vIGxvbmdlciBiZSBhYmxlIHRvIHNldCBxdW90YXMgb3IgYW55 IGxheW91dCBmaWVsZHMuICBUaGlzCiAgICBmbGFnIHByZXZpb3VzbHkgb25seSByZXN0cmljdGVk IG1vZGlmaWNhdGlvbiBvZiB0aGUgcG9vbCBhbmQgbmFtZXNwYWNlCiAgICBmaWVsZHMgaW4gbGF5 b3V0cy4KICAqIENlcGhGUyB3aWxsIGdlbmVyYXRlIGEgaGVhbHRoIHdhcm5pbmcgaWYgeW91IGhh dmUgZmV3ZXIgc3RhbmRieSBkYWVtb25zCiAgICB0aGFuIGl0IHRoaW5rcyB5b3Ugd2FudGVkLiAg QnkgZGVmYXVsdCB0aGlzIHdpbGwgYmUgMSBpZiB5b3UgZXZlciBoYWQKICAgIGEgc3RhbmRieSwg YW5kIDAgaWYgeW91IGRpZCBub3QuICBZb3UgY2FuIGN1c3RvbWl6ZSB0aGlzIHVzaW5nCiAgICBg Y2VwaCBmcyBzZXQgPGZzPiBzdGFuZGJ5X2NvdW50X3dhbnRlZCA8bnVtYmVyPmAuICBTZXR0aW5n IGl0CiAgICB0byB6ZXJvIHdpbGwgZWZmZWN0aXZlbHkgZGlzYWJsZSB0aGUgaGVhbHRoIGNoZWNr LgogICogVGhlICJjZXBoIG1kcyB0ZWxsIC4uLiIgY29tbWFuZCBoYXMgYmVlbiByZW1vdmVkLiAg SXQgaXMgc3VwZXJjZWRlZAogICAgYnkgImNlcGggdGVsbCBtZHMuPGlkPiAuLi4iCiAgKiBUaGUg YGFwcGx5YCBtb2RlIG9mIGNlcGhmcy1qb3VybmFsLXRvb2wgaGFzIGJlZW4gcmVtb3ZlZAoKR2V0 dGluZyBDZXBoCi0tLS0tLS0tLS0tLQoKKiBHaXQgYXQgZ2l0Oi8vZ2l0aHViLmNvbS9jZXBoL2Nl cGguZ2l0CiogVGFyYmFsbCBhdCBodHRwOi8vZG93bmxvYWQuY2VwaC5jb20vdGFyYmFsbHMvY2Vw aC0xMi4yLjAudGFyLmd6CiogRm9yIHBhY2thZ2VzLCBzZWUgaHR0cDovL2RvY3MuY2VwaC5jb20v ZG9jcy9tYXN0ZXIvaW5zdGFsbC9nZXQtcGFja2FnZXMvCiogRm9yIGNlcGgtZGVwbG95LCBzZWUg aHR0cDovL2RvY3MuY2VwaC5jb20vZG9jcy9tYXN0ZXIvaW5zdGFsbC9pbnN0YWxsLWNlcGgtZGVw bG95CiogUmVsZWFzZSBnaXQgc2hhMTogMzJjZTJhM2FlNTIzOWVlMzNkNjE1MDcwNWNkYjI0ZDQz YmFiOTEwYwoKLS0KQWJoaXNoZWsgTGVrc2htYW5hbgpTVVNFIExpbnV4IEdtYkgsIEdGOiBGZWxp eCBJbWVuZMO2cmZmZXIsIEphbmUgU21pdGhhcmQsIEdyYWhhbSBOb3J0b24sCkhSQiAyMTI4NCAo QUcgTsO8cm5iZXJnKQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpjZXBoLXVzZXJzIG1haWxpbmcgbGlzdApjZXBoLXVzZXJzQGxpc3RzLmNlcGguY29tCmh0 dHA6Ly9saXN0cy5jZXBoLmNvbS9saXN0aW5mby5jZ2kvY2VwaC11c2Vycy1jZXBoLmNvbQo=