Name: series-workflowblnhn Phase: Succeeded StartedAt: 2026-08-26 05:00:03 +0000 UTC FinishedAt: 2026-08-26 08:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[0] Phase: Succeeded StartedAt: 2026-08-26 05:00:03 +0000 UTC FinishedAt: 2026-08-26 05:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 05:00:03 +0000 UTC FinishedAt: 2026-08-26 05:16:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d38ce59d16d53194cf184baa822d5f2ad528b92e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d38ce59d16d53194cf184baa822d5f2ad528b92e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "fffbcf53-2a0c-446d-b451-e053ab8cd306" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_attr_size_bounds_check", "ntfs_attr_add", "ntfs_attr_make_non_resident" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2smIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gTlRGUyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgIGFuZCB0aGF0IHRoZSBsb29wIGl0ZXJhdGluZyBvdmVyIGB2b2wtXHUwMDNlYXR0cmRlZmAgZG9lcyBub3QgcmVhZCBhIHBhcnRpYWwgc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZW5zdXJpbmcgdGhhdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gYXJyYXkgZG9lcyBub3QgZXhjZWVkIHRoZSBhbGxvY2F0ZWQgc2l6ZSBhbmQgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgZW50cnkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IE5URlMgdm9sdW1lcyBhcmUgbW91bnRlZCBhbmQgaG93IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFiNTQwNjQ2OTgzN2QyNDViNWJkYzg2MzVkMTM5MGJhNWIyY2ZmNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNToxNDo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5jIGIvZnMvbnRmcy9hdHRyaWIuY1xuaW5kZXggOTkwYzM5MzdhNTUxNi4uN2QwODE2ZGU3NTYzNCAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvYXR0cmliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvYXR0cmliLmNcbkBAIC0xNzM3LDggJiM0MzsxNzM3LDggQEAgc3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbiBcdHN0cnVjdCBhdHRyX2RlZiAqYWQ7XG4gXG4gXHRXQVJOX09OKCF0eXBlKTtcbi1cdGZvciAoYWQgPSB2b2wtXHUwMDNlYXR0cmRlZjsgKHU4ICopYWQgLSAodTggKil2b2wtXHUwMDNlYXR0cmRlZiBcdTAwM2Ncbi1cdFx0XHR2b2wtXHUwMDNlYXR0cmRlZl9zaXplIFx1MDAyNlx1MDAyNiBhZC1cdTAwM2V0eXBlOyAmIzQzOyYjNDM7YWQpIHtcbiYjNDM7XHRmb3IgKGFkID0gdm9sLVx1MDAzZWF0dHJkZWY7ICh1OCAqKWFkIC0gKHU4ICopdm9sLVx1MDAzZWF0dHJkZWYgXHUwMDNjPVxuJiM0MztcdCAgICAgdm9sLVx1MDAzZWF0dHJkZWZfc2l6ZSAtIChzMzIpc2l6ZW9mKCphZCkgXHUwMDI2XHUwMDI2IGFkLVx1MDAzZXR5cGU7ICYjNDM7JiM0MzthZCkge1xuIFx0XHQvKiBXZSBoYXZlIG5vdCBmb3VuZCBpdCB5ZXQsIGNhcnJ5IG9uIHNlYXJjaGluZy4gKi9cbiBcdFx0aWYgKGxpa2VseShsZTMyX3RvX2NwdShhZC1cdTAwM2V0eXBlKSBcdTAwM2MgbGUzMl90b19jcHUodHlwZSkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuY1xuaW5kZXggY2Q4ZmEyYzEzMzcwMC4uMmZkN2RiNjcyNjFlZiAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9zdXBlci5jXG5AQCAtMTI0MSw5ICYjNDM7MTI0MSw5IEBAIHN0YXRpYyBib29sIGxvYWRfYW5kX2luaXRfYXR0cmRlZihzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdFx0Z290byBmYWlsZWQ7XG4gXHR9XG4gXHROSW5vU2V0U3BhcnNlRGlzYWJsZWQoTlRGU19JKGlubykpO1xuLVx0LyogVGhlIHNpemUgb2YgRklMRV9BdHRyRGVmIG11c3QgYmUgYWJvdmUgMCBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqL1xuJiM0MztcdC8qIEZJTEVfQXR0ckRlZiBtdXN0IGhvbGQgYXQgbGVhc3Qgb25lIGVudHJ5IGFuZCBmaXQgaW5zaWRlIDMxIGJpdHMuICovXG4gXHRpX3NpemUgPSBpX3NpemVfcmVhZChpbm8pO1xuLVx0aWYgKGlfc2l6ZSBcdTAwM2M9IDAgfHwgaV9zaXplIFx1MDAzZSAweDdmZmZmZmZmKVxuJiM0MztcdGlmIChpX3NpemUgXHUwMDNjIChzNjQpc2l6ZW9mKHN0cnVjdCBhdHRyX2RlZikgfHwgaV9zaXplIFx1MDAzZSAweDdmZmZmZmZmKVxuIFx0XHRnb3RvIGlwdXRfZmFpbGVkO1xuIFx0dm9sLVx1MDAzZWF0dHJkZWYgPSBrdnphbGxvYyhpX3NpemUsIEdGUF9OT0ZTKTtcbiBcdGlmICghdm9sLVx1MDAzZWF0dHJkZWYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2smIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZW5zdXJpbmcgdGhhdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gYXJyYXkgZG9lcyBub3QgZXhjZWVkIHRoZSBhbGxvY2F0ZWQgc2l6ZSBhbmQgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgZW50cnkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IE5URlMgdm9sdW1lcyBhcmUgbW91bnRlZCBhbmQgaG93IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFiNTQwNjQ2OTgzN2QyNDViNWJkYzg2MzVkMTM5MGJhNWIyY2ZmNjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwNToxNDo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMvYXR0cmliLmMgYi9mcy9udGZzL2F0dHJpYi5jCmluZGV4IDk5MGMzOTM3YTU1MTYuLjdkMDgxNmRlNzU2MzQgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvYXR0cmliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9hdHRyaWIuYwpAQCAtMTczNyw4ICYjNDM7MTczNyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cl9kZWYgKm50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsCiAJc3RydWN0IGF0dHJfZGVmICphZDsKIAogCVdBUk5fT04oIXR5cGUpOwotCWZvciAoYWQgPSB2b2wtJmd0O2F0dHJkZWY7ICh1OCAqKWFkIC0gKHU4ICopdm9sLSZndDthdHRyZGVmICZsdDsKLQkJCXZvbC0mZ3Q7YXR0cmRlZl9zaXplICZhbXA7JmFtcDsgYWQtJmd0O3R5cGU7ICYjNDM7JiM0MzthZCkgewomIzQzOwlmb3IgKGFkID0gdm9sLSZndDthdHRyZGVmOyAodTggKilhZCAtICh1OCAqKXZvbC0mZ3Q7YXR0cmRlZiAmbHQ7PQomIzQzOwkgICAgIHZvbC0mZ3Q7YXR0cmRlZl9zaXplIC0gKHMzMilzaXplb2YoKmFkKSAmYW1wOyZhbXA7IGFkLSZndDt0eXBlOyAmIzQzOyYjNDM7YWQpIHsKIAkJLyogV2UgaGF2ZSBub3QgZm91bmQgaXQgeWV0LCBjYXJyeSBvbiBzZWFyY2hpbmcuICovCiAJCWlmIChsaWtlbHkobGUzMl90b19jcHUoYWQtJmd0O3R5cGUpICZsdDsgbGUzMl90b19jcHUodHlwZSkpKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggY2Q4ZmEyYzEzMzcwMC4uMmZkN2RiNjcyNjFlZiAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtMTI0MSw5ICYjNDM7MTI0MSw5IEBAIHN0YXRpYyBib29sIGxvYWRfYW5kX2luaXRfYXR0cmRlZihzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCkKIAkJZ290byBmYWlsZWQ7CiAJfQogCU5Jbm9TZXRTcGFyc2VEaXNhYmxlZChOVEZTX0koaW5vKSk7Ci0JLyogVGhlIHNpemUgb2YgRklMRV9BdHRyRGVmIG11c3QgYmUgYWJvdmUgMCBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqLwomIzQzOwkvKiBGSUxFX0F0dHJEZWYgbXVzdCBob2xkIGF0IGxlYXN0IG9uZSBlbnRyeSBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqLwogCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlubyk7Ci0JaWYgKGlfc2l6ZSAmbHQ7PSAwIHx8IGlfc2l6ZSAmZ3Q7IDB4N2ZmZmZmZmYpCiYjNDM7CWlmIChpX3NpemUgJmx0OyAoczY0KXNpemVvZihzdHJ1Y3QgYXR0cl9kZWYpIHx8IGlfc2l6ZSAmZ3Q7IDB4N2ZmZmZmZmYpCiAJCWdvdG8gaXB1dF9mYWlsZWQ7CiAJdm9sLSZndDthdHRyZGVmID0ga3Z6YWxsb2MoaV9zaXplLCBHRlBfTk9GUyk7CiAJaWYgKCF2b2wtJmd0O2F0dHJkZWYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyB0byBiZSBmb2N1c2luZyBvbiBzb21lIGNydWNpYWwgTlRGUyBkYXRhIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgaGl0dGluZyBgZnMvbnRmcy9hdHRyaWIuY2AgYW5kIGBmcy9udGZzL3N1cGVyLmNgLCB3aGljaCBtYWtlcyBzZW5zZTsgYXR0cmlidXRlcyBhbmQgc3VwZXJibG9jayBkYXRhIGFyZSBjb3JlIHRvIGhvdyBOVEZTIG9wZXJhdGVzLgoKSW4gYGF0dHJpYi5jYCwgdGhlIGNoYW5nZSB0byBgbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZmAgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoaXMgbG9vcCBjb25kaXRpb24gbW9kaWZpY2F0aW9uLCBlbnN1cmluZyBgYWRgIHN0YXlzIHdpdGhpbiBgdm9sLSZndDthdHRyZGVmX3NpemVgLCBzdHJvbmdseSBzdWdnZXN0cyBhIGJvdW5kYXJ5IGNoZWNrIHRvIHByZXZlbnQgcG90ZW50aWFsIGJ1ZmZlciBvdmVycnVucyBvciBvdXQtb2YtYm91bmRzIHJlYWRzIGR1cmluZyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBsb29rdXAuIFRoaXMgaXMgYSBjb21tb24gYW5kIGltcG9ydGFudCB2dWxuZXJhYmlsaXR5IHRvIGFkZHJlc3MuIEl0JiMzOTtzIGEgY2xlYW4sIHRhcmdldGVkIGZpeCwgbGlrZWx5IHRvIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGZpbGUgc3lzdGVtLgoKVGhlbiB3ZSYjMzk7cmUgc2VlaW5nIGEgdHdlYWsgdG8gYGZzL250ZnMvc3VwZXIuY2Agd2l0aGluIGBsb2FkX2FuZF9pbml0X2F0dHJkZWZgLiBUaGUgYGlfc2l6ZWAgY2hlY2sgdG8gY29uZmlybSB0aGF0IGl0IGhvbGRzIGF0IGxlYXN0IG9uZSBlbnRyeSAoYHNpemVvZihzdHJ1Y3QgYXR0cl9kZWYpYCkgaXMgYW5vdGhlciBsb2dpY2FsIGJvdW5kYXJ5IGNoZWNrLiBUaGlzIHByZXZlbnRzIGluaXRpYWxpemF0aW9uIGVycm9ycyB3aGVuIGxvYWRpbmcgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIHRhYmxlIGZyb20gdGhlIHZvbHVtZS4gSXQgbWFrZXMgc2Vuc2UgdG8gZW5mb3JjZSB0aGlzIG1pbmltdW0gc2l6ZSBiZWNhdXNlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGlzIHZhbGlkIGJlZm9yZSB1c2luZyBpdC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE5URlMgaW4gYGZzL250ZnMvS2NvbmZpZ2AuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aCBhbnkgcGFydGljdWxhciBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBJJiMzOTttIGN1cmlvdXMgaWYgdGhlcmUmIzM5O3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgdGhpcyBmaXggaXMgYXBwbGllZCBvciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gdGhpcyBpbXByb3ZlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgYnJvYWRlciBOVEZTIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnLTEyLVxuZnMvbnRmcy9LY29uZmlnOjEzOmNvbmZpZyBOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTlxuZnMvbnRmcy9LY29uZmlnLTE0LVx0Ym9vbCBcJiMzNDtOVEZTIFdpbmRvd3Mgc3lzdGVtIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9udGZzL0tjb25maWc9MjQ9Y29uZmlnIE5URlNfREVCVUdcbi0tXG5mcy9udGZzL0tjb25maWctNDUtXG5mcy9udGZzL0tjb25maWc6NDY6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXG5mcy9udGZzL0tjb25maWctNDctXHRib29sIFwmIzM0O05URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlRGUyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBOVEZTX0ZTYC4gUmlnaHQsIGJ1dCBoYW5nIG9uLCBJIGFsc28gc2VlIGBOVEZTM19GU2AgaW4gYGZzL250ZnMzL0tjb25maWdgLiBUaGlzIHBhdGNoLCBob3dldmVyLCBpcyBtb2RpZnlpbmcgZmlsZXMgaW4gdGhlIGBmcy9udGZzL2AgZGlyZWN0b3J5LiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgZnMvbnRmcy9gIGlzIHN0aWxsIGFjdGl2ZWx5IG1haW50YWluZWQgd2l0aGluIHRoZSB0cmVlIG9yIGlmIGl0JiMzOTtzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgTlRGUzNgLiBHaXZlbiB0aGUgZmlsZSBwYXRocyBpbnZvbHZlZCwgaXQmIzM5O3MgY2xlYXIgYGZzL250ZnMvYCByZXByZXNlbnRzIHRoZSAqb2xkZXIqIE5URlMgZHJpdmVyLiBUaW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gTGV0IG1lIGNoZWNrIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQ6IGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYCBhbmQgYGxvYWRfYW5kX2luaXRfYXR0cmRlZmAgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTE3MTM9dm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0xNzI0LS8qXG5mcy9udGZzL2F0dHJpYi5jOjE3MjU6ICogbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZiAtIGZpbmQgYW4gYXR0cmlidXRlIGluIHRoZSAkQXR0ckRlZiBzeXN0ZW0gZmlsZVxuZnMvbnRmcy9hdHRyaWIuYy0xNzI2LSAqIEB2b2w6XHRudGZzIHZvbHVtZSB0byB3aGljaCB0aGUgYXR0cmlidXRlIGJlbG9uZ3Ncbi0tXG5mcy9udGZzL2F0dHJpYi5jLTE3MzMtICovXG5mcy9udGZzL2F0dHJpYi5jOjE3MzQ6c3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbmZzL250ZnMvYXR0cmliLmMtMTczNS1cdFx0Y29uc3QgX19sZTMyIHR5cGUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYz0xNzY2PWludCBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2soY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNvbnN0IF9fbGUzMiB0eXBlLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtMTc4MC1cdC8qIEdldCB0aGUgJEF0dHJEZWYgZW50cnkgZm9yIHRoZSBhdHRyaWJ1dGUgQHR5cGUuICovXG5mcy9udGZzL2F0dHJpYi5jOjE3ODE6XHRhZCA9IG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYodm9sLCB0eXBlKTtcbmZzL250ZnMvYXR0cmliLmMtMTc4Mi1cdGlmICh1bmxpa2VseSghYWQpKVxuLS1cbmZzL250ZnMvYXR0cmliLmM9MTgwMT1zdGF0aWMgaW50IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtMTgwNi1cdC8qIEZpbmQgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIHJlY29yZCBpbiAkQXR0ckRlZi4gKi9cbmZzL250ZnMvYXR0cmliLmM6MTgwNzpcdGFkID0gbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZih2b2wsIHR5cGUpO1xuZnMvbnRmcy9hdHRyaWIuYy0xODA4LVx0aWYgKHVubGlrZWx5KCFhZCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBOVEZTIEF0dHJpYnV0ZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IE5URlMgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgZnVuY3Rpb24gY2FsbGVkIGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBsaW1pdHMgaXRzIHNjb3BlLCBtYWtpbmcgaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzICp1c2VkKi4gVGhlIHRleHQgbWVudGlvbnMgaXQmIzM5O3MgY2FsbGVkIGJ5IGBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2tgIGFuZCBgbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnRgLiBUaG9zZSBuYW1lcyBhcmUgcHJldHR5IGRlc2NyaXB0aXZlOyB0aGV5IGhpbnQgYXQgYXR0cmlidXRlIHNpemUgdmFsaWRhdGlvbiBhbmQgZGV0ZXJtaW5pbmcgaWYgYW4gYXR0cmlidXRlIGNhbiBiZSBzdG9yZWQgYXMgbm9uLXJlc2lkZW50IGRhdGEuIENsZWFybHksIGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYCBtdXN0IHBsYXkgYSByb2xlIGluIGZpbmRpbmcgYW5kIHBvdGVudGlhbGx5IHZhbGlkYXRpbmcgYXR0cmlidXRlIGRlZmluaXRpb25zIHdpdGhpbiB0aGUgTlRGUyBtZXRhZGF0YSBzdHJ1Y3R1cmVzLgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJpZ2dlciBwaWN0dXJlLCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgb3V0IGBsb2FkX2FuZF9pbml0X2F0dHJkZWZgLiBVbmRlcnN0YW5kaW5nIGhvdyBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgYXJlIGxvYWRlZCBhbmQgaW5pdGlhbGl6ZWQgd2lsbCBnaXZlIG1lIHZpdGFsIGNvbnRleHQgZm9yIHdoYXQgYG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWZgIGlzIGFjdHVhbGx5ICpkb2luZyouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9hZF9hbmRfaW5pdF9hdHRyZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jPTExMzg9c3RhdGljIGludCBjaGVja193aW5kb3dzX2hpYmVybmF0aW9uX3N0YXR1cyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbi0tXG5mcy9udGZzL3N1cGVyLmMtMTIxOS0vKlxuZnMvbnRmcy9zdXBlci5jOjEyMjA6ICogbG9hZF9hbmRfaW5pdF9hdHRyZGVmIC0gbG9hZCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb25zIHRhYmxlIGZvciBhIHZvbHVtZVxuZnMvbnRmcy9zdXBlci5jLTEyMjEtICogQHZvbDpcdG50ZnMgc3VwZXIgYmxvY2sgZGVzY3JpYmluZyBkZXZpY2Ugd2hvc2UgYXR0cmRlZiB0byBsb2FkXG4tLVxuZnMvbnRmcy9zdXBlci5jLTEyMjQtICovXG5mcy9udGZzL3N1cGVyLmM6MTIyNTpzdGF0aWMgYm9vbCBsb2FkX2FuZF9pbml0X2F0dHJkZWYoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG5mcy9udGZzL3N1cGVyLmMtMTIyNi17XG4tLVxuZnMvbnRmcy9zdXBlci5jPTEzOTk9c3RhdGljIGJvb2wgbG9hZF9zeXN0ZW1fZmlsZXMoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE0MzktXHQgKi9cbmZzL250ZnMvc3VwZXIuYzoxNDQwOlx0aWYgKCFsb2FkX2FuZF9pbml0X2F0dHJkZWYodm9sKSlcbmZzL250ZnMvc3VwZXIuYy0xNDQxLVx0XHRnb3RvIGlwdXRfdXBjYXNlX2Vycl9vdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIE5URlMgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBOVEZTIGZpbGUgc3lzdGVtIGNvZGUsIGFuZCBJJiMzOTt2ZSBnb3QgYSBkZWNlbnQgZ3Jhc3Agb24gdGhlIGluaXRpYWxpemF0aW9uIGZsb3cuIGBudGZzX2ZpbGxfc3VwZXJgIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludDsgaXQmIzM5O3MgdGhlIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkLiBJIGtub3cgdGhhdCBgbG9hZF9zeXN0ZW1fZmlsZXNgIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRoZSBjb3JlIHN5c3RlbSBmaWxlcywgYW5kIHRoYXQgZnVuY3Rpb24sIGluIHR1cm4sIGNhbGxzIGBsb2FkX2FuZF9pbml0X2F0dHJkZWZgLiBTaW5jZSBgbnRmc19maWxsX3N1cGVyYCBpcyBhdCB0aGUgdG9wIG9mIHRoZSBjaGFpbiwgdGhhdCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgcGxhY2UgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGZvciBub3cuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIHJvb3Qgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGFuZCB3aGVyZSBJIGNhbiBnYWluIHRoZSBtb3N0IGluc2lnaHQgaW5pdGlhbGx5LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYm91bmRzIG9mIHRob3NlIGNhbGxzLiBJIHdhcyBzbyBmb2N1c2VkIG9uIHRoZSBjYWxsIGNoYWluLCB0aGF0IEkgZGlkbiYjMzk7dCBzdG9wIHRvIGV4YW1pbmUgd2hhdCBmdW5jdGlvbnMgYG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVja2AgYW5kIGBudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudGAgYXJlIGV2ZW4gY2FsbGVkIGJ5ISBJIG5lZWQgdG8gZXhwYW5kIHRoZSBzY29wZSBhbmQgdW5kZXJzdGFuZCB0aGVpciBwbGFjZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgZG93biB0aGlzIHNwZWNpZmljIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvYXR0cmliLmM9MTczND1zdGF0aWMgc3RydWN0IGF0dHJfZGVmICpudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtMTc1Ny0vKlxuZnMvbnRmcy9hdHRyaWIuYzoxNzU4OiAqIG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayAtIGNoZWNrIGEgc2l6ZSBvZiBhbiBhdHRyaWJ1dGUgdHlwZSBmb3IgdmFsaWRpdHlcbmZzL250ZnMvYXR0cmliLmMtMTc1OS0gKiBAdm9sOlx0bnRmcyB2b2x1bWUgdG8gd2hpY2ggdGhlIGF0dHJpYnV0ZSBiZWxvbmdzXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0xNzY1LSAqL1xuZnMvbnRmcy9hdHRyaWIuYzoxNzY2OmludCBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2soY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNvbnN0IF9fbGUzMiB0eXBlLFxuZnMvbnRmcy9hdHRyaWIuYy0xNzY3LVx0XHRjb25zdCBzNjQgc2l6ZSlcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTI3ODk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI4MTAtXHQvKiBDaGVjayB0aGUgYXR0cmlidXRlIHR5cGUgYW5kIHRoZSBzaXplLiAqL1xuZnMvbnRmcy9hdHRyaWIuYzoyODExOlx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKG5pLVx1MDAzZXZvbCwgdHlwZSwgc2l6ZSk7XG5mcy9udGZzL2F0dHJpYi5jLTI4MTItXHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00MTk3PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmsoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSlcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTQyMTktXHQgKi9cbmZzL250ZnMvYXR0cmliLmM6NDIyMDpcdGVyciA9IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayh2b2wsIG5pLVx1MDAzZXR5cGUsIG5ld3NpemUpO1xuZnMvbnRmcy9hdHRyaWIuYy00MjIxLVx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvYXR0cmliLmM9NDM3ND1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00NDAyLVx0ICovXG5mcy9udGZzL2F0dHJpYi5jOjQ0MDM6XHRlcnIgPSBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sodm9sLCBuaS1cdTAwM2V0eXBlLCBuZXdzaXplKTtcbmZzL250ZnMvYXR0cmliLmMtNDQwNC1cdGlmIChlcnJcdFx1MDAzYyAwKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00NjQwPXN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpemUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00Njc2LVx0ICovXG5mcy9udGZzL2F0dHJpYi5jOjQ2Nzc6XHRlcnIgPSBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sodm9sLCBhdHRyX25pLVx1MDAzZXR5cGUsIG5ld3NpemUpO1xuZnMvbnRmcy9hdHRyaWIuYy00Njc4LVx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvYXR0cmliLmg9OTE9dm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xuZnMvbnRmcy9hdHRyaWIuaDo5MjppbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuZnMvbnRmcy9hdHRyaWIuaC05My1cdFx0Y29uc3QgX19sZTMyIHR5cGUsIGNvbnN0IHM2NCBzaXplKTtcbi0tXG5mcy9udGZzL2VhLmM9MTg5PXN0YXRpYyBpbnQgbnRmc19zZXRfZWEoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLFxuLS1cbmZzL250ZnMvZWEuYy0yNjUtXHRcdGlmICh2YWxfc2l6ZSBcdTAwMjZcdTAwMjZcbmZzL250ZnMvZWEuYzoyNjY6XHRcdCAgICBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXHUwMDNldm9sLCBBVF9FQSxcbmZzL250ZnMvZWEuYy0yNjctXHRcdFx0XHRcdGVhX2luZm9fcXNpemUgLSBlYV9zaXplICYjNDM7IG5ld19lYV9zaXplKSkge1xuLS1cbmZzL250ZnMvZWEuYy0zMjktXG5mcy9udGZzL2VhLmM6MzMwOlx0XHRpZiAobnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKG5pLVx1MDAzZXZvbCwgQVRfRUEsXG5mcy9udGZzL2VhLmMtMzMxLVx0XHRcdFx0XHRlYV9pbmZvX3FzaXplICYjNDM7IG5ld19lYV9zaXplKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDA4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuCgoqKkluaXRpYWwgQXNzZXNzbWVudDogTlRGUyBBdHRyaWJ1dGUgTWFuaXB1bGF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSBgbnRmc19hdHRyX2FkZGAsIGBudGZzX25vbl9yZXNpZGVudF9hdHRyX3Nocmlua2AsIGBudGZzX25vbl9yZXNpZGVudF9hdHRyX2V4cGFuZGAsIGBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplYCwgYW5kIGBudGZzX3NldF9lYWAuIFRoZXNlIGFyZSBhbGwga2V5IGZ1bmN0aW9ucywgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBOVEZTIGF0dHJpYnV0ZSBtYW5hZ2VtZW50LiBJIHJlY29nbml6ZSB0aGVtIGltbWVkaWF0ZWx5LiBUaGV5JiMzOTtyZSBsaWtlIHNpZ25wb3N0cyBwb2ludGluZyB0byB0aGUgY29yZSBtZWNoYW5pc21zIG9mIGhvdyBmaWxlIGRhdGEsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGFuZCBtZXRhZGF0YSBhcmUgc3RvcmVkIGFuZCBtb2RpZmllZCB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtLiBUaGVzZSBkZWZpbml0ZWx5IHdhcnJhbnQgbXkgZm9jdXNlZCBhdHRlbnRpb24uCgpCdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gYG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50YC4gVGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBvbmUuIFdoYXQgY2FsbHMgKnRoYXQqIGZ1bmN0aW9uPyBJdHMgcmV0dXJuIHZhbHVlIGRldGVybWluZXMgaWYgYW4gYXR0cmlidXRlIGNhbiBiZSBzdG9yZWQgaW5saW5lIHdpdGggdGhlIE1GVCBlbnRyeSBvciBpZiBpdCBuZWVkcyB0byBiZSBzdG9yZWQgb3V0LW9mLWxpbmUgKG5vbi1yZXNpZGVudCkuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsLCBhcyB0aGV5IGRldGVybWluZSB0aGUgY3JpdGVyaWEgZm9yIGRhdGEgcGxhY2VtZW50IGRlY2lzaW9ucy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBjb25uZWN0ZWQgdG8uIFRoZSBjb250ZXh0IHN1cnJvdW5kaW5nICp0aGF0KiBjYWxsIGlzIHZlcnkgaW1wb3J0YW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRlY2lzaW9uIHBvaW50cyBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvYXR0cmliLmM9MTc2Nj1pbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMzIgdHlwZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTE3OTMtLypcbmZzL250ZnMvYXR0cmliLmM6MTc5NDogKiBudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudCAtIGNoZWNrIGlmIGFuIGF0dHJpYnV0ZSBjYW4gYmUgbm9uLXJlc2lkZW50XG5mcy9udGZzL2F0dHJpYi5jLTE3OTUtICogQHZvbDpcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xuLS1cbmZzL250ZnMvYXR0cmliLmMtMTgwMC0gKi9cbmZzL250ZnMvYXR0cmliLmM6MTgwMTpzdGF0aWMgaW50IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuZnMvbnRmcy9hdHRyaWIuYy0xODAyLVx0XHRjb25zdCBfX2xlMzIgdHlwZSlcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTE5Mzg9aW50IG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHUzMiBkYXRhX3NpemUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0xOTYwLVx0LyogQ2hlY2sgdGhhdCB0aGUgYXR0cmlidXRlIGlzIGFsbG93ZWQgdG8gYmUgbm9uLXJlc2lkZW50LiAqL1xuZnMvbnRmcy9hdHRyaWIuYzoxOTYxOlx0ZXJyID0gbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQodm9sLCBuaS1cdTAwM2V0eXBlKTtcbmZzL250ZnMvYXR0cmliLmMtMTk2Mi1cdGlmICh1bmxpa2VseShlcnIpKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz0yNTE2PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0yNTM0LVxuZnMvbnRmcy9hdHRyaWIuYzoyNTM1Olx0ZXJyID0gbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQobmktXHUwMDNldm9sLCB0eXBlKTtcbmZzL250ZnMvYXR0cmliLmMtMjUzNi1cdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI1MzktXHRcdGVsc2VcbmZzL250ZnMvYXR0cmliLmM6MjU0MDpcdFx0XHRwcl9lcnIoXCYjMzQ7bnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQgZmFpbGVkXFxuXCYjMzQ7KTtcbmZzL250ZnMvYXR0cmliLmMtMjU0MS1cdFx0cmV0dXJuIGVycjtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTI3ODk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI4MTktXHQvKiBTYW5pdHkgY2hlY2tzIGZvciBhbHdheXMgcmVzaWRlbnQgYXR0cmlidXRlcy4gKi9cbmZzL250ZnMvYXR0cmliLmM6MjgyMDpcdGVyciA9IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KG5pLVx1MDAzZXZvbCwgdHlwZSk7XG5mcy9udGZzL2F0dHJpYi5jLTI4MjEtXHRpZiAoZXJyKSB7XG5mcy9udGZzL2F0dHJpYi5jLTI4MjItXHRcdGlmIChlcnIgIT0gLUVQRVJNKSB7XG5mcy9udGZzL2F0dHJpYi5jOjI4MjM6XHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7bnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQgZmFpbGVkXCYjMzQ7KTtcbmZzL250ZnMvYXR0cmliLmMtMjgyNC1cdFx0XHRnb3RvIGVycl9vdXQ7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00NjQwPXN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpemUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00NzM1LVxuZnMvbnRmcy9hdHRyaWIuYzo0NzM2Olx0XHRpZiAobnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQodm9sLCBhLVx1MDAzZXR5cGUpKVxuZnMvbnRmcy9hdHRyaWIuYy00NzM3LVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTlRGUyBBdHRyaWJ1dGUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIE5URlMgYXR0cmlidXRlIG1hbmFnZW1lbnQgaGVyZS4gVGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBmb2N1c2luZyBvbiBhcmUgYG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudGAsIGBudGZzX2F0dHJfYWRkYCwgYW5kIGBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplYC4gVGhleSYjMzk7cmUgY29yZSB0byBob3cgYXR0cmlidXRlcywgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBOVEZTIGZpbGVzLCBhcmUgaGFuZGxlZCBpbiB2YXJpb3VzIHN0YXRlcy4KCkkgc3VzcGVjdCB0aGF0IHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgaW50byB0aGlzIGF0dHJpYnV0ZSBtYW5pcHVsYXRpb24gcmVhbG0gYXJlIGEgYml0IGJyb2FkZXIgdGhhbiBqdXN0IHRob3NlLCB0aG91Z2guIEkgbmVlZCB0byBrZWVwIG15IGV5ZSBvbiBgbnRmc19maWxsX3N1cGVyYCwgYG50ZnNfYXR0cl9hZGRgLCBgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50YCwgYG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemVgLCBhbmQgdGhlIGxlc3Mgb2J2aW91cyBmdW5jdGlvbnMgb2YgYG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rYCwgYG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kYCwgYW5kIGBudGZzX3NldF9lYWAuIEkmIzM5O20gZXNzZW50aWFsbHkgb3V0bGluaW5nIHRoZSBwcm9jZXNzIG9mIGhvdyBhdHRyaWJ1dGVzIGdldCBjcmVhdGVkLCBtb2RpZmllZCwgYW5kIHRyYW5zaXRpb25lZCBiZXR3ZWVuIHJlc2lkZW50IGFuZCBub24tcmVzaWRlbnQgc3RhdGVzLCBpbmNsdWRpbmcgaG93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIHNocmlua2luZyBvciBncm93aW5nIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGVzIGFyZSBhZGRyZXNzZWQuCgpUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBudGZzX2ZpbGxfc3VwZXJgLiBJdCBpcyBsaWtlbHkgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgc3VwZXJibG9jayBpbnRlcmFjdHMgd2l0aCBhbGwgdGhlc2UgYXR0cmlidXRlcy4gRnJvbSB0aGVyZSwgSSBjYW4gaG9wZWZ1bGx5IHRyYWNlIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHZhcmlvdXMgYXR0cmlidXRlLXJlbGF0ZWQgdGFza3MgYXJlIGludGVncmF0ZWQuIExldCYjMzk7cyBzZWUgaWYgdGhhdCBpbml0aWFsIGNoZWNrIGNsYXJpZmllcyB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfZmlsbF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYz0yMTg0PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbnRmc19tZnRfaW52YWxfbG9ja19rZXk7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTIxODYtLypcbmZzL250ZnMvc3VwZXIuYzoyMTg3OiAqIG50ZnNfZmlsbF9zdXBlciAtIG1vdW50IGFuIG50ZnMgZmlsZXN5c3RlbVxuZnMvbnRmcy9zdXBlci5jLTIxODgtICogQHNiOiBzdXBlciBibG9jayBvZiB0aGUgZGV2aWNlIHRvIG1vdW50XG4tLVxuZnMvbnRmcy9zdXBlci5jLTIxOTAtICpcbmZzL250ZnMvc3VwZXIuYzoyMTkxOiAqIG50ZnNfZmlsbF9zdXBlcigpIGlzIGNhbGxlZCBieSB0aGUgVkZTIHRvIG1vdW50IHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IEBzYlxuZnMvbnRmcy9zdXBlci5jLTIxOTItICogd2l0aCB0aGUgbW91bnQgb3Rpb25zIGluIEBkYXRhIHdpdGggdGhlIE5URlMgZmlsZXN5c3RlbS5cbi0tXG5mcy9udGZzL3N1cGVyLmMtMjIwMC0gKi9cbmZzL250ZnMvc3VwZXIuYzoyMjAxOnN0YXRpYyBpbnQgbnRmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL250ZnMvc3VwZXIuYy0yMjAyLXtcbi0tXG5mcy9udGZzL3N1cGVyLmM9MjUxNj1zdGF0aWMgaW50IG50ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbnRmcy9zdXBlci5jLTI1MTcte1xuZnMvbnRmcy9zdXBlci5jOjI1MTg6XHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgbnRmc19maWxsX3N1cGVyKTtcbmZzL250ZnMvc3VwZXIuYy0yNTE5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODExNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgZW50cnkgcG9pbnQgZm9yIG1vdW50aW5nIGlzIGRlZmluaXRlbHkgYG50ZnNfZmlsbF9zdXBlcmAuIFRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LCBzcGVjaWZpY2FsbHkgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHdyaXRlIHdpdGhpbiB0aGUgYG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWZgIGZ1bmN0aW9uLiBUaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgbWFraW5nIHN1cmUgdGhhdCB0aGUgYGFkYCBwb2ludGVyIGRvZXNuJiMzOTt0IGdvIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBidWZmZXIgKGB2b2wtJmd0O2F0dHJkZWZfc2l6ZSAtIHNpemVvZigqYWQpYCkgZHVyaW5nIGxvb2t1cC4gQW5kLCBzaW1pbGFybHksIHRoYXQgYGxvYWRfYW5kX2luaXRfYXR0cmRlZmAgZ3VhcmFudGVlcyB0aGUgaW5vZGUmIzM5O3Mgc2l6ZSAoYGlfc2l6ZWApIGlzIGF0IGxlYXN0IGJpZyBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhlIGBzdHJ1Y3QgYXR0cl9kZWZgIHN0cnVjdHVyZS4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsbHkgZHJpdmVuIGNoYW5nZSB0aGF0IHNob3VsZCBlbGltaW5hdGUgYSBwb3NzaWJsZSBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSXMgYE5URlNfRlNgIHRoZSBvbmx5IHJlcXVpcmVkIG9wdGlvbj8gWWVwLCBqdXN0IGBOVEZTX0ZTYCwgbm90aGluZyBlbHNlIG5lZWRlZC4KCkZpbmFsbHksIEkgc2hvdWxkIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgbnRmc19hdHRyX2FkZGAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfYXR0cl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTI2NTI9aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0yNzYzLS8qXG5mcy9udGZzL2F0dHJpYi5jOjI3NjQ6ICogbnRmc19hdHRyX2FkZCAtIGFkZCBhdHRyaWJ1dGUgdG8gaW5vZGVcbmZzL250ZnMvYXR0cmliLmMtMjc2NS0gKiBAbmk6XHRcdG9wZW5lZCBudGZzIGlub2RlIHRvIHdoaWNoIGFkZCBhdHRyaWJ1dGVcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI3ODgtICovXG5mcy9udGZzL2F0dHJpYi5jOjI3ODk6aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbmZzL250ZnMvYXR0cmliLmMtMjc5MC1cdFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgdTggKnZhbCwgczY0IHNpemUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuaD0xMjM9aW50IG50ZnNfYXR0cl9yZWNvcmRfbW92ZV90byhzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbmZzL250ZnMvYXR0cmliLmg6MTI0OmludCBudGZzX2F0dHJfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG5mcy9udGZzL2F0dHJpYi5oLTEyNS1cdFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgdTggKnZhbCwgczY0IHNpemUpO1xuLS1cbmZzL250ZnMvZWEuYz0xODk9c3RhdGljIGludCBudGZzX3NldF9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sXG4tLVxuZnMvbnRmcy9lYS5jLTIyOC1cdFx0ZWFfaW5mb19xc2l6ZSA9IDA7XG5mcy9udGZzL2VhLmM6MjI5Olx0XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9FQV9JTkZPUk1BVElPTiwgQVRfVU5OQU1FRCwgMCxcbmZzL250ZnMvZWEuYy0yMzAtXHRcdFx0XHQoY2hhciAqKXBfZWFfaW5mbywgc2l6ZW9mKHN0cnVjdCBlYV9pbmZvcm1hdGlvbikpO1xuLS1cbmZzL250ZnMvZWEuYy0yOTYtXHRcdFx0XHQvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCAkRUEgaWYgJEVBX0lORk9STUFUSU9OIHJlbW92YWwgZmFpbGVkLiAqL1xuZnMvbnRmcy9lYS5jOjI5NzpcdFx0XHRcdG50ZnNfYXR0cl9hZGQobmksIEFUX0VBLCBBVF9VTk5BTUVELCAwLCBvbGRfZWFfYnVmLFxuZnMvbnRmcy9lYS5jLTI5OC1cdFx0XHRcdFx0ICAgICAgYWxsX2VhX3NpemUpO1xuLS1cbmZzL250ZnMvZWEuYy0zNzItXHRpZiAoIW50ZnNfYXR0cl9leGlzdChuaSwgQVRfRUEsIEFUX1VOTkFNRUQsIDApKSB7XG5mcy9udGZzL2VhLmM6MzczOlx0XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9FQSwgQVRfVU5OQU1FRCwgMCwgZWFfYnVmLFxuZnMvbnRmcy9lYS5jLTM3NC1cdFx0XHRcdGVhX2luZm9fcXNpemUgJiM0MzsgbmV3X2VhX3NpemUpO1xuLS1cbmZzL250ZnMvaW5kZXguYz0xMDE0PXN0YXRpYyBpbnQgbnRmc19pYm1fYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTAyNi1cdG1lbXNldChibXAsIDAsIHNpemVvZihibXApKTtcbmZzL250ZnMvaW5kZXguYzoxMDI3Olx0cmV0ID0gbnRmc19hdHRyX2FkZChpY3gtXHUwMDNlaWR4X25pLCBBVF9CSVRNQVAsIGljeC1cdTAwM2VuYW1lLCBpY3gtXHUwMDNlbmFtZV9sZW4sXG5mcy9udGZzL2luZGV4LmMtMTAyOC1cdFx0XHQgICAgYm1wLCBzaXplb2YoYm1wKSk7XG4tLVxuZnMvbnRmcy9pbmRleC5jPTEyNTQ9c3RhdGljIGludCBudGZzX2lhX2FkZChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG4tLVxuZnMvbnRmcy9pbmRleC5jLTEyNjQtXHRpZiAoIW50ZnNfYXR0cl9leGlzdChpY3gtXHUwMDNlaWR4X25pLCBBVF9JTkRFWF9BTExPQ0FUSU9OLCBpY3gtXHUwMDNlbmFtZSwgaWN4LVx1MDAzZW5hbWVfbGVuKSkge1xuZnMvbnRmcy9pbmRleC5jOjEyNjU6XHRcdHJldCA9IG50ZnNfYXR0cl9hZGQoaWN4LVx1MDAzZWlkeF9uaSwgQVRfSU5ERVhfQUxMT0NBVElPTiwgaWN4LVx1MDAzZW5hbWUsXG5mcy9udGZzL2luZGV4LmMtMTI2Ni1cdFx0XHRcdFx0aWN4LVx1MDAzZW5hbWVfbGVuLCBOVUxMLCAwKTtcbi0tXG5mcy9udGZzL25hbWVpLmM9MzMwPXN0YXRpYyBpbnQgbnRmc19zZF9hZGRfZXZlcnlvbmUoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuLS1cbmZzL250ZnMvbmFtZWkuYy0zODQtXG5mcy9udGZzL25hbWVpLmM6Mzg1Olx0cmV0ID0gbnRmc19hdHRyX2FkZChuaSwgQVRfU0VDVVJJVFlfREVTQ1JJUFRPUiwgQVRfVU5OQU1FRCwgMCwgKHU4ICopc2QsXG5mcy9udGZzL25hbWVpLmMtMzg2LVx0XHRcdHNkX2xlbik7XG4tLVxuZnMvbnRmcy9uYW1laS5jPTM5ND1zdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy01MzgtXHQvKiBBZGQgU1RBTkRBUkRfSU5GT1JNQVRJT04gdG8gaW5vZGUuICovXG5mcy9udGZzL25hbWVpLmM6NTM5Olx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfU1RBTkRBUkRfSU5GT1JNQVRJT04sIEFUX1VOTkFNRUQsIDAsICh1OCAqKXNpLFxuZnMvbnRmcy9uYW1laS5jLTU0MC1cdFx0XHRzaV9sZW4pO1xuLS1cbmZzL250ZnMvbmFtZWkuYy01ODEtXHRcdC8qIEFkZCBzdHJ1Y3QgaW5kZXhfcm9vdCBhdHRyaWJ1dGUgdG8gaW5vZGUuICovXG5mcy9udGZzL25hbWVpLmM6NTgyOlx0XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9JTkRFWF9ST09ULCBJMzAsIDQsICh1OCAqKWlyLCBpcl9sZW4pO1xuZnMvbnRmcy9uYW1laS5jLTU4My1cdFx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvbmFtZWkuYy01OTMtXHRcdC8qIEFkZCBEQVRBIGF0dHJpYnV0ZSB0byBpbm9kZS4gKi9cbmZzL250ZnMvbmFtZWkuYzo1OTQ6XHRcdGVyciA9IG50ZnNfYXR0cl9hZGQobmksIEFUX0RBVEEsIEFUX1VOTkFNRUQsIDAsIE5VTEwsIDApO1xuZnMvbnRmcy9uYW1laS5jLTU5NS1cdFx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvbmFtZWkuYy02NjAtXHQvKiBBZGQgRklMRV9OQU1FIGF0dHJpYnV0ZSB0byBpbm9kZS4gKi9cbmZzL250ZnMvbmFtZWkuYzo2NjE6XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9GSUxFX05BTUUsIEFUX1VOTkFNRUQsIDAsICh1OCAqKWZuLCBmbl9sZW4pO1xuZnMvbnRmcy9uYW1laS5jLTY2Mi1cdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL25hbWVpLmM9MTE0Nj1zdGF0aWMgaW50IF9fbnRmc19saW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG50ZnNfaW5vZGUgKmRpcl9uaSxcbi0tXG5mcy9udGZzL25hbWVpLmMtMTIyMC1cdC8qIEFkZCBGSUxFX05BTUUgYXR0cmlidXRlIHRvIGlub2RlLiAqL1xuZnMvbnRmcy9uYW1laS5jOjEyMjE6XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9GSUxFX05BTUUsIEFUX1VOTkFNRUQsIDAsICh1OCAqKWZuLCBmbl9sZW4pO1xuZnMvbnRmcy9uYW1laS5jLTEyMjItXHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9yZXBhcnNlLmM9NjkxPXN0YXRpYyBpbnQgbnRmc19zZXRfbnRmc19yZXBhcnNlX2RhdGEoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjaGFyICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4tLVxuZnMvbnRmcy9yZXBhcnNlLmMtNzI2LVxuZnMvbnRmcy9yZXBhcnNlLmM6NzI3Olx0XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9SRVBBUlNFX1BPSU5ULCBBVF9VTk5BTUVELCAwLCAodTggKilcdTAwMjZycCwgc2l6ZW9mKHJwKSk7XG5mcy9udGZzL3JlcGFyc2UuYy03MjgtXHRcdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIE5URlMgQ29kZSAtIFBvdGVudGlhbCBFbnRyeSBQb2ludHMgYW5kIFNjb3BlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE5URlMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYW5kIGhvdyB0aGluZ3MgYXJlIHN0cnVjdHVyZWQuIEZpcnN0LCBJIG5vdGljZSB0aGF0IGBudGZzX2F0dHJfYWRkYCBhbmQgYG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudGAgYXJlICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSB1c2VmdWw7IGl0IHRlbGxzIG1lIHRoZXkmIzM5O3JlIHByb2JhYmx5IGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlLCB3aGljaCBtZWFucyB0aGV5IG1pZ2h0IGJlIGludGVyZXN0aW5nIGFzIHBvdGVudGlhbCBzeW1ib2xzIHRvIHRyYWNlIG9yIGFuYWx5emUgZnVydGhlciBkb3duIHRoZSBsaW5lLCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0LgoKVGhlbiBJIHNlZSBgbnRmc19maWxsX3N1cGVyYC4gQWgsIGl0ICppcyogc3RhdGljISBOb3csIHRoYXQgaW5pdGlhbGx5IG1ha2VzIGl0IGxlc3MgYXBwZWFsaW5nIGFzIGEgbWFpbiBmb2N1cywgc2luY2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBsaW1pdGVkIGluIHRoZWlyIHNjb3BlLiBCdXQgd2FpdCBhIHNlY29uZC4uLiBgbnRmc19maWxsX3N1cGVyYCBpcyB0aGUgbW91bnQgZW50cnkgcG9pbnQsIGlzbiYjMzk7dCBpdD8gVGhhdCBtZWFucyBpdCYjMzk7cyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgKmhvdyogdGhlIGZpbGVzeXN0ZW0gaXMgYnJvdWdodCB1cC4gRXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyB0aGUgZ2F0ZXdheS4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBpdCBhbmQgcmVjb25zaWRlciBpdHMgaW1wb3J0YW5jZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2hvbGUgc3lzdGVtLiBMZXQgbWUgcmUtZXZhbHVhdGUgYG50ZnNfZmlsbF9zdXBlcmAgbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmM9MjE4ND1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG50ZnNfbWZ0X2ludmFsX2xvY2tfa2V5O1xuLS1cbmZzL250ZnMvc3VwZXIuYy0yMTg2LS8qXG5mcy9udGZzL3N1cGVyLmM6MjE4NzogKiBudGZzX2ZpbGxfc3VwZXIgLSBtb3VudCBhbiBudGZzIGZpbGVzeXN0ZW1cbmZzL250ZnMvc3VwZXIuYy0yMTg4LSAqIEBzYjogc3VwZXIgYmxvY2sgb2YgdGhlIGRldmljZSB0byBtb3VudFxuLS1cbmZzL250ZnMvc3VwZXIuYy0yMTkwLSAqXG5mcy9udGZzL3N1cGVyLmM6MjE5MTogKiBudGZzX2ZpbGxfc3VwZXIoKSBpcyBjYWxsZWQgYnkgdGhlIFZGUyB0byBtb3VudCB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSBAc2JcbmZzL250ZnMvc3VwZXIuYy0yMTkyLSAqIHdpdGggdGhlIG1vdW50IG90aW9ucyBpbiBAZGF0YSB3aXRoIHRoZSBOVEZTIGZpbGVzeXN0ZW0uXG4tLVxuZnMvbnRmcy9zdXBlci5jLTIyMDAtICovXG5mcy9udGZzL3N1cGVyLmM6MjIwMTpzdGF0aWMgaW50IG50ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9udGZzL3N1cGVyLmMtMjIwMi17XG4tLVxuZnMvbnRmcy9zdXBlci5jPTI1MTY9c3RhdGljIGludCBudGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL250ZnMvc3VwZXIuYy0yNTE3LXtcbmZzL250ZnMvc3VwZXIuYzoyNTE4Olx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIG50ZnNfZmlsbF9zdXBlcik7XG5mcy9udGZzL3N1cGVyLmMtMjUxOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTM0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ29uc2lkZXJpbmcgU3RhdGljIEZ1bmN0aW9uIFNjb3BlIGluIE5URlMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBOVEZTIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYXQgYG50ZnNfZ2V0X3RyZWVgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBicmluZ3MgdXAgc29tZSBpbXBsaWNhdGlvbnMgZm9yIGl0cyB2aXNpYmlsaXR5IGFuZCB1c2FnZS4gKlN0YXRpYyogc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBvbmx5IGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBgbnRmc2AgbW9kdWxlLCBsaWtlbHkgYmVjYXVzZSBpdCBoYW5kbGVzIGZpbGVzeXN0ZW0tc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFjY2VzcyBtZXRob2RzLgoKTm93LCBteSBtaW5kIHNoaWZ0cyB0byBgbnRmc19pbml0X2ZzX2NvbnRleHRgLiBJIG5lZWQgdG8gZXZhbHVhdGUgd2hldGhlciB0aGUgc2FtZSBkZXNpZ24gY29uc2lkZXJhdGlvbnMgYXBwbHkgdGhlcmUuIElzIGl0IGFsc28gc3RhdGljPyBTaG91bGQgaXQgYmU/IElmIGl0ICppcyogc3RhdGljLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgc2NvcGUgYWxpZ25zIHdpdGggaG93IHRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwuIElmIGl0IGlzbiYjMzk7dCBzdGF0aWMsIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IHRoaW5raW5nIG9mIHdoeSBpdCBtYXkgbm90IGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2luaXRfZnNfY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYz0yNTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIG50ZnNfY29udGV4dF9vcHMgPSB7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTI1MzUtXG5mcy9udGZzL3N1cGVyLmM6MjUzNjpzdGF0aWMgaW50IG50ZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL250ZnMvc3VwZXIuYy0yNTM3LXtcbi0tXG5mcy9udGZzL3N1cGVyLmM9MjU2OD1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbnRmc19mc190eXBlID0ge1xuLS1cbmZzL250ZnMvc3VwZXIuYy0yNTcwLVx0Lm5hbWUgICAgICAgICAgICAgICAgICAgPSBcJiMzNDtudGZzXCYjMzQ7LFxuZnMvbnRmcy9zdXBlci5jOjI1NzE6XHQuaW5pdF9mc19jb250ZXh0ICAgICAgICA9IG50ZnNfaW5pdF9mc19jb250ZXh0LFxuZnMvbnRmcy9zdXBlci5jLTI1NzItXHQucGFyYW1ldGVycyAgICAgICAgICAgICA9IG50ZnNfcGFyYW1ldGVycyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRnV6emluZyBOVEZTOiBBIFJlZmluZW1lbnQgb2YgU3RyYXRlZ3kqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG50ZnNfZmlsbF9zdXBlcmAgZnVuY3Rpb24uIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHBhaW4gZm9yIGZ1enppbmcgYmVjYXVzZSBpdCYjMzk7cyBoYXJkIHRvIGdldCBkaXJlY3QgY29udHJvbCwgYnV0Li4uIGl0JiMzOTtzIHRoZSAqbW91bnQgZW50cnkgcG9pbnQqLiBTeXprYWxsZXIsIHdpdGggaXRzIG1vdW50IGZ1enppbmcgY2FwYWJpbGl0aWVzLCBzaG91bGQgYmUgYWJsZSB0byBnZXQgbWUgdGhlcmUhIFRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcy4KClJpZ2h0LCBzbyBpbnN0ZWFkIG9mIHRyeWluZyB0byBoaXQgYG50ZnNfZmlsbF9zdXBlcmAgZGlyZWN0bHkgYXMgbXkgcHJpbWFyeSB0YXJnZXQsIEkgY2FuIGZvY3VzIG9uIGZ1bmN0aW9ucyBkZWVwZXIgaW4gdGhlIGZpbGUgc3lzdGVtLiBUaGlua2luZyBhYm91dCB0aGUgTlRGUyBhdHRyaWJ1dGUgaGFuZGxpbmcuLi4gYG50ZnNfYXR0cl9hZGRgIGFuZCBgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50YC4gVGhvc2UgYXJlIGV4Y2VsbGVudCwgbG93ZXItbGV2ZWwgZnVuY3Rpb25zIHRoYXQgbGlrZWx5IGhhdmUgc29tZSBpbnRlcmVzdGluZyBsb2dpYyB3aXRoaW4gdGhlbSBhbmQgYXJlIGxpa2VseSBleHBvc2VkIGF0IHRoZSBWRlMgbGV2ZWwuIFRoZXNlIGNvdWxkIGJlIGV4Y2VsbGVudCAmIzM0O2ZvY3VzIHN5bWJvbHMmIzM0OyB0byBndWlkZSB0aGUgZnV6emVyLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCYjMzk7cyB0aGlzPyBgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrYD8gQW5kIGl0JiMzOTtzICpub24tc3RhdGljKj8gVGhhdCBqdXN0IGNoYW5nZWQgdGhlIGdhbWUgcGxhbiBhIGJpdC4gTWF5YmUgdGhpcyBpcyBhIGJldHRlciBlbnRyeSBwb2ludCB0byBsb29rIGF0ISBXaXRoIHRoaXMgb25lIGF2YWlsYWJsZSwgaXQgZ2l2ZXMgbWUgYSBiZXR0ZXIgb3B0aW9uIGZvciBmdXp6aW5nIGF0IHRoZSAmIzM0O2JvdW5kcyBjaGVjayYjMzQ7IGxldmVsLCB3aGljaCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgZmlsZSBzeXN0ZW0gdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTE3MzQ9c3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTE3NTctLypcbmZzL250ZnMvYXR0cmliLmM6MTc1ODogKiBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sgLSBjaGVjayBhIHNpemUgb2YgYW4gYXR0cmlidXRlIHR5cGUgZm9yIHZhbGlkaXR5XG5mcy9udGZzL2F0dHJpYi5jLTE3NTktICogQHZvbDpcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xuLS1cbmZzL250ZnMvYXR0cmliLmMtMTc2NS0gKi9cbmZzL250ZnMvYXR0cmliLmM6MTc2NjppbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMzIgdHlwZSxcbmZzL250ZnMvYXR0cmliLmMtMTc2Ny1cdFx0Y29uc3QgczY0IHNpemUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYz0yNzg5PWludCBudGZzX2F0dHJfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0yODEwLVx0LyogQ2hlY2sgdGhlIGF0dHJpYnV0ZSB0eXBlIGFuZCB0aGUgc2l6ZS4gKi9cbmZzL250ZnMvYXR0cmliLmM6MjgxMTpcdGVyciA9IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhuaS1cdTAwM2V2b2wsIHR5cGUsIHNpemUpO1xuZnMvbnRmcy9hdHRyaWIuYy0yODEyLVx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvYXR0cmliLmM9NDE5Nz1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00MjE5LVx0ICovXG5mcy9udGZzL2F0dHJpYi5jOjQyMjA6XHRlcnIgPSBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sodm9sLCBuaS1cdTAwM2V0eXBlLCBuZXdzaXplKTtcbmZzL250ZnMvYXR0cmliLmMtNDIyMS1cdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTQzNzQ9c3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2V4cGFuZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXplLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtNDQwMi1cdCAqL1xuZnMvbnRmcy9hdHRyaWIuYzo0NDAzOlx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgbmktXHUwMDNldHlwZSwgbmV3c2l6ZSk7XG5mcy9udGZzL2F0dHJpYi5jLTQ0MDQtXHRpZiAoZXJyXHRcdTAwM2MgMCkge1xuLS1cbmZzL250ZnMvYXR0cmliLmM9NDY0MD1zdGF0aWMgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemUoc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbmksIGNvbnN0IHM2NCBuZXdzaXplLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtNDY3Ni1cdCAqL1xuZnMvbnRmcy9hdHRyaWIuYzo0Njc3Olx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgYXR0cl9uaS1cdTAwM2V0eXBlLCBuZXdzaXplKTtcbmZzL250ZnMvYXR0cmliLmMtNDY3OC1cdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL2F0dHJpYi5oPTkxPXZvaWQgbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KTtcbmZzL250ZnMvYXR0cmliLmg6OTI6aW50IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbmZzL250ZnMvYXR0cmliLmgtOTMtXHRcdGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBzNjQgc2l6ZSk7XG4tLVxuZnMvbnRmcy9lYS5jPTE4OT1zdGF0aWMgaW50IG50ZnNfc2V0X2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbixcbi0tXG5mcy9udGZzL2VhLmMtMjY1LVx0XHRpZiAodmFsX3NpemUgXHUwMDI2XHUwMDI2XG5mcy9udGZzL2VhLmM6MjY2Olx0XHQgICAgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKG5pLVx1MDAzZXZvbCwgQVRfRUEsXG5mcy9udGZzL2VhLmMtMjY3LVx0XHRcdFx0XHRlYV9pbmZvX3FzaXplIC0gZWFfc2l6ZSAmIzQzOyBuZXdfZWFfc2l6ZSkpIHtcbi0tXG5mcy9udGZzL2VhLmMtMzI5LVxuZnMvbnRmcy9lYS5jOjMzMDpcdFx0aWYgKG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhuaS1cdTAwM2V2b2wsIEFUX0VBLFxuZnMvbnRmcy9lYS5jLTMzMS1cdFx0XHRcdFx0ZWFfaW5mb19xc2l6ZSAmIzQzOyBuZXdfZWFfc2l6ZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNTUKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIE5URlMgQXR0cmlidXRlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBOVEZTIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2tgIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGJlY2F1c2UgaXQmIzM5O3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHVzdWFsbHkgbWVhbnMgaXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gYSByZWxhdGVkIHN1YnN5c3RlbS4gQnV0IHdhaXQgYSBtaW51dGUsIEkgc2VlIHRoYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgbnRmc19hdHRyX2FkZGAgY2FsbCBpdCBkaXJlY3RseS4gVGhhdCBtZWFucyBpdCYjMzk7cyBldmVuIG1vcmUgY2VudHJhbCB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQhIEV4Y2VsbGVudCwgdGhpcyBpcyBwcm9taXNpbmcuCgpCYXNlZCBvbiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIGNlbnRlciBteSBpbnZlc3RpZ2F0aW9uIGFyb3VuZCB0aGVzZSB0aHJlZTogYG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVja2AsIGBudGZzX2F0dHJfYWRkYCwgYW5kIGBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgb2YgYXR0cmlidXRlIG1hbmlwdWxhdGlvbi4KCkJlZm9yZSBJIGdvIHRvbyBkZWVwLCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biBhIGNvbmZpZyBjaGVjay4uLiBZZXAsIGxvb2tzIGxpa2UgYE5URlNfRlNgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZy4gR29vZCwga2VlcHMgdGhpbmdzIG5pY2UgYW5kIGZvY3VzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl9hZGQmIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGFycmF5IGRvZXMgbm90IGV4Y2VlZCB0aGUgYWxsb2NhdGVkIHNpemUgYW5kIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGVudHJ5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOVEZTIHZvbHVtZXMgYXJlIG1vdW50ZWQgYW5kIGhvdyBhdHRyaWJ1dGVzIGFyZSBwcm9jZXNzZWQsIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2smIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZW5zdXJpbmcgdGhhdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gYXJyYXkgZG9lcyBub3QgZXhjZWVkIHRoZSBhbGxvY2F0ZWQgc2l6ZSBhbmQgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgZW50cnkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IE5URlMgdm9sdW1lcyBhcmUgbW91bnRlZCBhbmQgaG93IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gTlRGUyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgIGFuZCB0aGF0IHRoZSBsb29wIGl0ZXJhdGluZyBvdmVyIGB2b2wtXHUwMDNlYXR0cmRlZmAgZG9lcyBub3QgcmVhZCBhIHBhcnRpYWwgc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWI1NDA2NDY5ODM3ZDI0NWI1YmRjODYzNWQxMzkwYmE1YjJjZmY2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA1OjE0OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9hdHRyaWIuYyBiL2ZzL250ZnMvYXR0cmliLmMKaW5kZXggOTkwYzM5MzdhNTUxNi4uN2QwODE2ZGU3NTYzNCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9hdHRyaWIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2F0dHJpYi5jCkBAIC0xNzM3LDggJiM0MzsxNzM3LDggQEAgc3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwKIAlzdHJ1Y3QgYXR0cl9kZWYgKmFkOwogCiAJV0FSTl9PTighdHlwZSk7Ci0JZm9yIChhZCA9IHZvbC0mZ3Q7YXR0cmRlZjsgKHU4ICopYWQgLSAodTggKil2b2wtJmd0O2F0dHJkZWYgJmx0OwotCQkJdm9sLSZndDthdHRyZGVmX3NpemUgJmFtcDsmYW1wOyBhZC0mZ3Q7dHlwZTsgJiM0MzsmIzQzO2FkKSB7CiYjNDM7CWZvciAoYWQgPSB2b2wtJmd0O2F0dHJkZWY7ICh1OCAqKWFkIC0gKHU4ICopdm9sLSZndDthdHRyZGVmICZsdDs9CiYjNDM7CSAgICAgdm9sLSZndDthdHRyZGVmX3NpemUgLSAoczMyKXNpemVvZigqYWQpICZhbXA7JmFtcDsgYWQtJmd0O3R5cGU7ICYjNDM7JiM0MzthZCkgewogCQkvKiBXZSBoYXZlIG5vdCBmb3VuZCBpdCB5ZXQsIGNhcnJ5IG9uIHNlYXJjaGluZy4gKi8KIAkJaWYgKGxpa2VseShsZTMyX3RvX2NwdShhZC0mZ3Q7dHlwZSkgJmx0OyBsZTMyX3RvX2NwdSh0eXBlKSkpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuYwppbmRleCBjZDhmYTJjMTMzNzAwLi4yZmQ3ZGI2NzI2MWVmIDEwMDY0NAotLS0gYS9mcy9udGZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9zdXBlci5jCkBAIC0xMjQxLDkgJiM0MzsxMjQxLDkgQEAgc3RhdGljIGJvb2wgbG9hZF9hbmRfaW5pdF9hdHRyZGVmKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCQlnb3RvIGZhaWxlZDsKIAl9CiAJTklub1NldFNwYXJzZURpc2FibGVkKE5URlNfSShpbm8pKTsKLQkvKiBUaGUgc2l6ZSBvZiBGSUxFX0F0dHJEZWYgbXVzdCBiZSBhYm92ZSAwIGFuZCBmaXQgaW5zaWRlIDMxIGJpdHMuICovCiYjNDM7CS8qIEZJTEVfQXR0ckRlZiBtdXN0IGhvbGQgYXQgbGVhc3Qgb25lIGVudHJ5IGFuZCBmaXQgaW5zaWRlIDMxIGJpdHMuICovCiAJaV9zaXplID0gaV9zaXplX3JlYWQoaW5vKTsKLQlpZiAoaV9zaXplICZsdDs9IDAgfHwgaV9zaXplICZndDsgMHg3ZmZmZmZmZikKJiM0MzsJaWYgKGlfc2l6ZSAmbHQ7IChzNjQpc2l6ZW9mKHN0cnVjdCBhdHRyX2RlZikgfHwgaV9zaXplICZndDsgMHg3ZmZmZmZmZikKIAkJZ290byBpcHV0X2ZhaWxlZDsKIAl2b2wtJmd0O2F0dHJkZWYgPSBrdnphbGxvYyhpX3NpemUsIEdGUF9OT0ZTKTsKIAlpZiAoIXZvbC0mZ3Q7YXR0cmRlZikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzgKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogMTA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLQVNBTiBpcyB0aGUgUmlnaHQgVG9vbCBmb3IgVGhpcyBOVEZTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTlRGUyBkcml2ZXIuIEl0IHRvdWNoZXMgYGF0dHJpYi5jYCBhbmQgYHN1cGVyLmNgLiBJbiBgYXR0cmliLmNgLCBpdCBsb29rcyBsaWtlIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgZml4IGZvciB0aGUgYHZvbC0mZ3Q7YXR0cmRlZmAgaXRlcmF0aW9uLiBUaGUgb3JpZ2luYWwgbG9vcCBjb3VsZCBwb3RlbnRpYWxseSByZWFkIGJleW9uZCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgYGF0dHJkZWZgIGJ5IGRlcmVmZXJlbmNpbmcgYGFkLSZndDt0eXBlYCB3aXRob3V0IGNoZWNraW5nIGlmIGEgZnVsbCBgc3RydWN0IGF0dHJfZGVmYCBjb3VsZCBmaXQgd2l0aGluIGB2b2wtJmd0O2F0dHJkZWZfc2l6ZWAuIFRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlcmUmIzM5O3MgZW5vdWdoIHNwYWNlLgoKSW4gYHN1cGVyLmNgLCB0aGVyZSYjMzk7cyBhIHNpemUgY2hlY2sgZm9yIGBGSUxFX0F0dHJEZWZgLiBJdCYjMzk7cyBlbnN1cmluZyB0aGUgc2l6ZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgYHN0cnVjdCBhdHRyX2RlZmAuIFRoaXMgbWFrZXMgc2Vuc2UsIHByZXZlbnRpbmcgYSB6ZXJvLXNpemVkIG9yIHRvby1zbWFsbCBhbGxvY2F0aW9uIHdoaWNoIGNvdWxkIGxlYWQgdG8gc2ltaWxhciBpc3N1ZXMgbGF0ZXIuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0NvdWxkIHRoaXMgYmUgYSBLTVNBTiB0aGluZz8mIzM0OyBiZWNhdXNlIG91dC1vZi1ib3VuZHMgc3R1ZmYgc29tZXRpbWVzIG92ZXJsYXBzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBgdm9sLSZndDthdHRyZGVmYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3Z6YWxsb2NgIGluIGBzdXBlci5jYCB3aGljaCwgYnkgZGVmaW5pdGlvbiwgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSB0byB6ZXJvLiBIb3dldmVyLCBpdCYjMzk7cyBhbHNvIHBvcHVsYXRlZCBmcm9tIHRoZSBkaXNrLCBzbyBJIG5lZWRlZCB0byBjbGFyaWZ5IGhvdyBpdCYjMzk7cyBwb3B1bGF0ZWQuIEkgcmV2aWV3ZWQgYGxvYWRfYW5kX2luaXRfYXR0cmRlZmAgYW5kIGNvbmZpcm1lZCB0aGUgbWVtb3J5IGlzIGxvYWRlZCBmcm9tIGRpc2suCgpLQVNBTiBpcyB0aGUgdG9vbCB0aGF0IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaGFwcGVucyB3aGVuIHRoZSBsb29wIGNvbmRpdGlvbiBpcyBzYXRpc2ZpZWQgYnV0IHRoZSBsYXN0IGBhZGAgaXMgcGFydGlhbGx5IG91dCBvZiBib3VuZHMuIFRoZSBsb29wIGl0ZXJhdGVzIHVwIHRvIGB2b2wtJmd0O2F0dHJkZWZfc2l6ZWAuIElmIGBpX3NpemVgICh0aGUgYWxsb2NhdGVkIHNpemUpIGlzbiYjMzk7dCBhIG11bHRpcGxlIG9mIGBzaXplb2YoKmFkKWAsIHRoZW4gdGhlIHZlcnkgbGFzdCBpdGVyYXRpb24gY2FuIGJlIHByb2JsZW1hdGljLiBUaGlzIGlzIG5vdyBmaXhlZCBpbiB0aGUgcGF0Y2guCgpTbywgc2luY2UgaXQmIzM5O3MgYW4gb3V0LW9mLWJvdW5kcyAqcmVhZCosIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgbm8gaW5mby1sZWFrYWdlIGNvbmNlcm5zLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhlIHJlYWQsIHdoaWNoIEtNU0FOIHdvdWxkbiYjMzk7dCBjYXRjaC4gS01TQU4gaXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLQVNBTiBmb3Igb3V0LW9mLWJvdW5kcy4gVGhlIHBhdGNoIGVuc3VyZXMgdGhhdCBzaXplIGNoZWNrcyBhcmUgcGVyZm9ybWVkIGFuZCBpdCYjMzk7cyBmaXhlZC4KVGhlcmVmb3JlLCBubyBLTVNBTiBmdXp6aW5nIGlzIG5lZWRlZCBoZXJlLiBUaGlzIGlzIGEgS0FTQU4gaXNzdWUsIHBsYWluIGFuZCBzaW1wbGUuCgpUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGhhbmRsaW5nIG9mIE5URlMgYXR0cmlidXRlIGRlZmluaXRpb25zLiBJdCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gaXRlcmF0aW5nIG92ZXIgYHZvbC0mZ3Q7YXR0cmRlZmAgYW5kIGVuc3VyZXMgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgYHN0cnVjdCBhdHRyX2RlZmAsIHByZXZlbnRpbmcgcGFydGlhbCBzdHJ1Y3R1cmUgcmVhZHMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoaXMgdHlwZSBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpc3N1ZSBpc24mIzM5O3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIE5URlMgYXR0cmlidXRlIGRlZmluaXRpb24gaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyB0aGF0IHRoZSBzaXplIG9mIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBmaWxlIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIG9uZSBgc3RydWN0IGF0dHJfZGVmYCBhbmQgdGhhdCB0aGUgbG9vcCBpdGVyYXRpbmcgb3ZlciBgdm9sLVx1MDAzZWF0dHJkZWZgIGRvZXMgbm90IHJlYWQgYSBwYXJ0aWFsIHN0cnVjdHVyZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gTlRGUyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgIGFuZCB0aGF0IHRoZSBsb29wIGl0ZXJhdGluZyBvdmVyIGB2b2wtXHUwMDNlYXR0cmRlZmAgZG9lcyBub3QgcmVhZCBhIHBhcnRpYWwgc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTQ6NTIuNzkwNzQzMDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODg4NTIzNjQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrXCIsXG4gICAgXCJudGZzX2F0dHJfYWRkXCIsXG4gICAgXCJudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBOVEZTIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgYHN0cnVjdCBhdHRyX2RlZmAgYW5kIHRoYXQgdGhlIGxvb3AgaXRlcmF0aW5nIG92ZXIgYHZvbC1cXHUwMDNlYXR0cmRlZmAgZG9lcyBub3QgcmVhZCBhIHBhcnRpYWwgc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRyaXZlciBieSBlbnN1cmluZyB0aGF0IHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBhcnJheSBkb2VzIG5vdCBleGNlZWQgdGhlIGFsbG9jYXRlZCBzaXplIGFuZCB0aGF0IHRoZSBzaXplIG9mIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBmaWxlIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIG9uZSBlbnRyeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgTlRGUyB2b2x1bWVzIGFyZSBtb3VudGVkIGFuZCBob3cgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNDo1Mi43OTA3NDg0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc1MjAzMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWI1NDA2NDY5ODM3ZDI0NWI1YmRjODYzNWQxMzkwYmE1YjJjZmY2OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNToxNDo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5jIGIvZnMvbnRmcy9hdHRyaWIuY1xcbmluZGV4IDk5MGMzOTM3YTU1MTYuLjdkMDgxNmRlNzU2MzQgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9hdHRyaWIuY1xcbisrKyBiL2ZzL250ZnMvYXR0cmliLmNcXG5AQCAtMTczNyw4ICsxNzM3LDggQEAgc3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcXG4gXFx0c3RydWN0IGF0dHJfZGVmICphZDtcXG4gXFxuIFxcdFdBUk5fT04oIXR5cGUpO1xcbi1cXHRmb3IgKGFkID0gdm9sLVxcdTAwM2VhdHRyZGVmOyAodTggKilhZCAtICh1OCAqKXZvbC1cXHUwMDNlYXR0cmRlZiBcXHUwMDNjXFxuLVxcdFxcdFxcdHZvbC1cXHUwMDNlYXR0cmRlZl9zaXplIFxcdTAwMjZcXHUwMDI2IGFkLVxcdTAwM2V0eXBlOyArK2FkKSB7XFxuK1xcdGZvciAoYWQgPSB2b2wtXFx1MDAzZWF0dHJkZWY7ICh1OCAqKWFkIC0gKHU4ICopdm9sLVxcdTAwM2VhdHRyZGVmIFxcdTAwM2M9XFxuK1xcdCAgICAgdm9sLVxcdTAwM2VhdHRyZGVmX3NpemUgLSAoczMyKXNpemVvZigqYWQpIFxcdTAwMjZcXHUwMDI2IGFkLVxcdTAwM2V0eXBlOyArK2FkKSB7XFxuIFxcdFxcdC8qIFdlIGhhdmUgbm90IGZvdW5kIGl0IHlldCwgY2Fycnkgb24gc2VhcmNoaW5nLiAqL1xcbiBcXHRcXHRpZiAobGlrZWx5KGxlMzJfdG9fY3B1KGFkLVxcdTAwM2V0eXBlKSBcXHUwMDNjIGxlMzJfdG9fY3B1KHR5cGUpKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuY1xcbmluZGV4IGNkOGZhMmMxMzM3MDAuLjJmZDdkYjY3MjYxZWYgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9zdXBlci5jXFxuKysrIGIvZnMvbnRmcy9zdXBlci5jXFxuQEAgLTEyNDEsOSArMTI0MSw5IEBAIHN0YXRpYyBib29sIGxvYWRfYW5kX2luaXRfYXR0cmRlZihzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcdH1cXG4gXFx0Tklub1NldFNwYXJzZURpc2FibGVkKE5URlNfSShpbm8pKTtcXG4tXFx0LyogVGhlIHNpemUgb2YgRklMRV9BdHRyRGVmIG11c3QgYmUgYWJvdmUgMCBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqL1xcbitcXHQvKiBGSUxFX0F0dHJEZWYgbXVzdCBob2xkIGF0IGxlYXN0IG9uZSBlbnRyeSBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqL1xcbiBcXHRpX3NpemUgPSBpX3NpemVfcmVhZChpbm8pO1xcbi1cXHRpZiAoaV9zaXplIFxcdTAwM2M9IDAgfHwgaV9zaXplIFxcdTAwM2UgMHg3ZmZmZmZmZilcXG4rXFx0aWYgKGlfc2l6ZSBcXHUwMDNjIChzNjQpc2l6ZW9mKHN0cnVjdCBhdHRyX2RlZikgfHwgaV9zaXplIFxcdTAwM2UgMHg3ZmZmZmZmZilcXG4gXFx0XFx0Z290byBpcHV0X2ZhaWxlZDtcXG4gXFx0dm9sLVxcdTAwM2VhdHRyZGVmID0ga3Z6YWxsb2MoaV9zaXplLCBHRlBfTk9GUyk7XFxuIFxcdGlmICghdm9sLVxcdTAwM2VhdHRyZGVmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNDo1My4xNjY1NjkzOTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1Mzk3MTc1MjY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrXCIsXG4gICAgXCJudGZzX2F0dHJfYWRkXCIsXG4gICAgXCJudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRyaXZlciBieSBlbnN1cmluZyB0aGF0IHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBhcnJheSBkb2VzIG5vdCBleGNlZWQgdGhlIGFsbG9jYXRlZCBzaXplIGFuZCB0aGF0IHRoZSBzaXplIG9mIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBmaWxlIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIG9uZSBlbnRyeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgTlRGUyB2b2x1bWVzIGFyZSBtb3VudGVkIGFuZCBob3cgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYjU0MDY0Njk4MzdkMjQ1YjViZGM4NjM1ZDEzOTBiYTViMmNmZjY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDU6MTQ6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5jIGIvZnMvbnRmcy9hdHRyaWIuY1xuaW5kZXggOTkwYzM5MzdhNTUxNi4uN2QwODE2ZGU3NTYzNCAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvYXR0cmliLmNcbisrKyBiL2ZzL250ZnMvYXR0cmliLmNcbkBAIC0xNzM3LDggKzE3MzcsOCBAQCBzdGF0aWMgc3RydWN0IGF0dHJfZGVmICpudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuIFx0c3RydWN0IGF0dHJfZGVmICphZDtcbiBcbiBcdFdBUk5fT04oIXR5cGUpO1xuLVx0Zm9yIChhZCA9IHZvbC1cdTAwM2VhdHRyZGVmOyAodTggKilhZCAtICh1OCAqKXZvbC1cdTAwM2VhdHRyZGVmIFx1MDAzY1xuLVx0XHRcdHZvbC1cdTAwM2VhdHRyZGVmX3NpemUgXHUwMDI2XHUwMDI2IGFkLVx1MDAzZXR5cGU7ICsrYWQpIHtcbitcdGZvciAoYWQgPSB2b2wtXHUwMDNlYXR0cmRlZjsgKHU4ICopYWQgLSAodTggKil2b2wtXHUwMDNlYXR0cmRlZiBcdTAwM2M9XG4rXHQgICAgIHZvbC1cdTAwM2VhdHRyZGVmX3NpemUgLSAoczMyKXNpemVvZigqYWQpIFx1MDAyNlx1MDAyNiBhZC1cdTAwM2V0eXBlOyArK2FkKSB7XG4gXHRcdC8qIFdlIGhhdmUgbm90IGZvdW5kIGl0IHlldCwgY2Fycnkgb24gc2VhcmNoaW5nLiAqL1xuIFx0XHRpZiAobGlrZWx5KGxlMzJfdG9fY3B1KGFkLVx1MDAzZXR5cGUpIFx1MDAzYyBsZTMyX3RvX2NwdSh0eXBlKSkpXG4gXHRcdFx0Y29udGludWU7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9zdXBlci5jIGIvZnMvbnRmcy9zdXBlci5jXG5pbmRleCBjZDhmYTJjMTMzNzAwLi4yZmQ3ZGI2NzI2MWVmIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9zdXBlci5jXG4rKysgYi9mcy9udGZzL3N1cGVyLmNcbkBAIC0xMjQxLDkgKzEyNDEsOSBAQCBzdGF0aWMgYm9vbCBsb2FkX2FuZF9pbml0X2F0dHJkZWYoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdGdvdG8gZmFpbGVkO1xuIFx0fVxuIFx0Tklub1NldFNwYXJzZURpc2FibGVkKE5URlNfSShpbm8pKTtcbi1cdC8qIFRoZSBzaXplIG9mIEZJTEVfQXR0ckRlZiBtdXN0IGJlIGFib3ZlIDAgYW5kIGZpdCBpbnNpZGUgMzEgYml0cy4gKi9cbitcdC8qIEZJTEVfQXR0ckRlZiBtdXN0IGhvbGQgYXQgbGVhc3Qgb25lIGVudHJ5IGFuZCBmaXQgaW5zaWRlIDMxIGJpdHMuICovXG4gXHRpX3NpemUgPSBpX3NpemVfcmVhZChpbm8pO1xuLVx0aWYgKGlfc2l6ZSBcdTAwM2M9IDAgfHwgaV9zaXplIFx1MDAzZSAweDdmZmZmZmZmKVxuK1x0aWYgKGlfc2l6ZSBcdTAwM2MgKHM2NClzaXplb2Yoc3RydWN0IGF0dHJfZGVmKSB8fCBpX3NpemUgXHUwMDNlIDB4N2ZmZmZmZmYpXG4gXHRcdGdvdG8gaXB1dF9mYWlsZWQ7XG4gXHR2b2wtXHUwMDNlYXR0cmRlZiA9IGt2emFsbG9jKGlfc2l6ZSwgR0ZQX05PRlMpO1xuIFx0aWYgKCF2b2wtXHUwMDNlYXR0cmRlZilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE0OjUzLjE2NjU3MDY4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDI3NDQ3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVEZTIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgdG8gYmUgZm9jdXNpbmcgb24gc29tZSBjcnVjaWFsIE5URlMgZGF0YSBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIGl0J3MgaGl0dGluZyBgZnMvbnRmcy9hdHRyaWIuY2AgYW5kIGBmcy9udGZzL3N1cGVyLmNgLCB3aGljaCBtYWtlcyBzZW5zZTsgYXR0cmlidXRlcyBhbmQgc3VwZXJibG9jayBkYXRhIGFyZSBjb3JlIHRvIGhvdyBOVEZTIG9wZXJhdGVzLlxuXG5JbiBgYXR0cmliLmNgLCB0aGUgY2hhbmdlIHRvIGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBsb29wIGNvbmRpdGlvbiBtb2RpZmljYXRpb24sIGVuc3VyaW5nIGBhZGAgc3RheXMgd2l0aGluIGB2b2wtXHUwMDNlYXR0cmRlZl9zaXplYCwgc3Ryb25nbHkgc3VnZ2VzdHMgYSBib3VuZGFyeSBjaGVjayB0byBwcmV2ZW50IHBvdGVudGlhbCBidWZmZXIgb3ZlcnJ1bnMgb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgYXR0cmlidXRlIGRlZmluaXRpb24gbG9va3VwLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBpbXBvcnRhbnQgdnVsbmVyYWJpbGl0eSB0byBhZGRyZXNzLiBJdCdzIGEgY2xlYW4sIHRhcmdldGVkIGZpeCwgbGlrZWx5IHRvIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGZpbGUgc3lzdGVtLlxuXG5UaGVuIHdlJ3JlIHNlZWluZyBhIHR3ZWFrIHRvIGBmcy9udGZzL3N1cGVyLmNgIHdpdGhpbiBgbG9hZF9hbmRfaW5pdF9hdHRyZGVmYC4gVGhlIGBpX3NpemVgIGNoZWNrIHRvIGNvbmZpcm0gdGhhdCBpdCBob2xkcyBhdCBsZWFzdCBvbmUgZW50cnkgKGBzaXplb2Yoc3RydWN0IGF0dHJfZGVmKWApIGlzIGFub3RoZXIgbG9naWNhbCBib3VuZGFyeSBjaGVjay4gVGhpcyBwcmV2ZW50cyBpbml0aWFsaXphdGlvbiBlcnJvcnMgd2hlbiBsb2FkaW5nIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiB0YWJsZSBmcm9tIHRoZSB2b2x1bWUuIEl0IG1ha2VzIHNlbnNlIHRvIGVuZm9yY2UgdGhpcyBtaW5pbXVtIHNpemUgYmVjYXVzZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBpcyB2YWxpZCBiZWZvcmUgdXNpbmcgaXQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTlRGUyBpbiBgZnMvbnRmcy9LY29uZmlnYC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIGFueSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEknbSBjdXJpb3VzIGlmIHRoZXJlJ3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgdGhpcyBmaXggaXMgYXBwbGllZCBvciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gdGhpcyBpbXByb3ZlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgYnJvYWRlciBOVEZTIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTQ6NTguMDY5MzE3NjQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTczMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xcbmZzL250ZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzL0tjb25maWctMTItXFxuZnMvbnRmcy9LY29uZmlnOjEzOmNvbmZpZyBOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTlxcbmZzL250ZnMvS2NvbmZpZy0xNC1cXHRib29sIFxcXCJOVEZTIFdpbmRvd3Mgc3lzdGVtIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzL0tjb25maWc9MjQ9Y29uZmlnIE5URlNfREVCVUdcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy00NS1cXG5mcy9udGZzL0tjb25maWc6NDY6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuZnMvbnRmcy9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE0OjU4LjExODI5NjEyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODczNDQwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVEZTIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgTlRGU19GU2AuIFJpZ2h0LCBidXQgaGFuZyBvbiwgSSBhbHNvIHNlZSBgTlRGUzNfRlNgIGluIGBmcy9udGZzMy9LY29uZmlnYC4gVGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgbW9kaWZ5aW5nIGZpbGVzIGluIHRoZSBgZnMvbnRmcy9gIGRpcmVjdG9yeS4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYGZzL250ZnMvYCBpcyBzdGlsbCBhY3RpdmVseSBtYWludGFpbmVkIHdpdGhpbiB0aGUgdHJlZSBvciBpZiBpdCdzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgTlRGUzNgLiBHaXZlbiB0aGUgZmlsZSBwYXRocyBpbnZvbHZlZCwgaXQncyBjbGVhciBgZnMvbnRmcy9gIHJlcHJlc2VudHMgdGhlICpvbGRlciogTlRGUyBkcml2ZXIuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLiBMZXQgbWUgY2hlY2sgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZDogYG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWZgIGFuZCBgbG9hZF9hbmRfaW5pdF9hdHRyZGVmYCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MDIuMDA1NjQzMzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NzEwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTE3MTM9dm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTE3MjQtLypcXG5mcy9udGZzL2F0dHJpYi5jOjE3MjU6ICogbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZiAtIGZpbmQgYW4gYXR0cmlidXRlIGluIHRoZSAkQXR0ckRlZiBzeXN0ZW0gZmlsZVxcbmZzL250ZnMvYXR0cmliLmMtMTcyNi0gKiBAdm9sOlxcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0xNzMzLSAqL1xcbmZzL250ZnMvYXR0cmliLmM6MTczNDpzdGF0aWMgc3RydWN0IGF0dHJfZGVmICpudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbmZzL250ZnMvYXR0cmliLmMtMTczNS1cXHRcXHRjb25zdCBfX2xlMzIgdHlwZSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9MTc2Nj1pbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMTc4MC1cXHQvKiBHZXQgdGhlICRBdHRyRGVmIGVudHJ5IGZvciB0aGUgYXR0cmlidXRlIEB0eXBlLiAqL1xcbmZzL250ZnMvYXR0cmliLmM6MTc4MTpcXHRhZCA9IG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYodm9sLCB0eXBlKTtcXG5mcy9udGZzL2F0dHJpYi5jLTE3ODItXFx0aWYgKHVubGlrZWx5KCFhZCkpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTE4MDE9c3RhdGljIGludCBudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudChjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMTgwNi1cXHQvKiBGaW5kIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiByZWNvcmQgaW4gJEF0dHJEZWYuICovXFxuZnMvbnRmcy9hdHRyaWIuYzoxODA3OlxcdGFkID0gbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZih2b2wsIHR5cGUpO1xcbmZzL250ZnMvYXR0cmliLmMtMTgwOC1cXHRpZiAodW5saWtlbHkoIWFkKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MDIuMDUzNDIwMDQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NzM4MzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE5URlMgQXR0cmlidXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IE5URlMgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgZnVuY3Rpb24gY2FsbGVkIGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYC4gSXQncyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGludGVybmFsIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgbGltaXRzIGl0cyBzY29wZSwgbWFraW5nIGl0IGVhc2llciB0byByZWFzb24gYWJvdXQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzICp1c2VkKi4gVGhlIHRleHQgbWVudGlvbnMgaXQncyBjYWxsZWQgYnkgYG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVja2AgYW5kIGBudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudGAuIFRob3NlIG5hbWVzIGFyZSBwcmV0dHkgZGVzY3JpcHRpdmU7IHRoZXkgaGludCBhdCBhdHRyaWJ1dGUgc2l6ZSB2YWxpZGF0aW9uIGFuZCBkZXRlcm1pbmluZyBpZiBhbiBhdHRyaWJ1dGUgY2FuIGJlIHN0b3JlZCBhcyBub24tcmVzaWRlbnQgZGF0YS4gQ2xlYXJseSwgYG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWZgIG11c3QgcGxheSBhIHJvbGUgaW4gZmluZGluZyBhbmQgcG90ZW50aWFsbHkgdmFsaWRhdGluZyBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgd2l0aGluIHRoZSBOVEZTIG1ldGFkYXRhIHN0cnVjdHVyZXMuXG5cbk5vdywgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBiaWdnZXIgcGljdHVyZSwgSSB0aGluayBpdCdzIHRpbWUgdG8gY2hlY2sgb3V0IGBsb2FkX2FuZF9pbml0X2F0dHJkZWZgLiBVbmRlcnN0YW5kaW5nIGhvdyBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgYXJlIGxvYWRlZCBhbmQgaW5pdGlhbGl6ZWQgd2lsbCBnaXZlIG1lIHZpdGFsIGNvbnRleHQgZm9yIHdoYXQgYG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWZgIGlzIGFjdHVhbGx5ICpkb2luZyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNTowNi4wMTA4MDU5NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNzY2NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvYWRfYW5kX2luaXRfYXR0cmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MTEzOD1zdGF0aWMgaW50IGNoZWNrX3dpbmRvd3NfaGliZXJuYXRpb25fc3RhdHVzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTEyMTktLypcXG5mcy9udGZzL3N1cGVyLmM6MTIyMDogKiBsb2FkX2FuZF9pbml0X2F0dHJkZWYgLSBsb2FkIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgdGFibGUgZm9yIGEgdm9sdW1lXFxuZnMvbnRmcy9zdXBlci5jLTEyMjEtICogQHZvbDpcXHRudGZzIHN1cGVyIGJsb2NrIGRlc2NyaWJpbmcgZGV2aWNlIHdob3NlIGF0dHJkZWYgdG8gbG9hZFxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTEyMjQtICovXFxuZnMvbnRmcy9zdXBlci5jOjEyMjU6c3RhdGljIGJvb2wgbG9hZF9hbmRfaW5pdF9hdHRyZGVmKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbmZzL250ZnMvc3VwZXIuYy0xMjI2LXtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0xMzk5PXN0YXRpYyBib29sIGxvYWRfc3lzdGVtX2ZpbGVzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE0MzktXFx0ICovXFxuZnMvbnRmcy9zdXBlci5jOjE0NDA6XFx0aWYgKCFsb2FkX2FuZF9pbml0X2F0dHJkZWYodm9sKSlcXG5mcy9udGZzL3N1cGVyLmMtMTQ0MS1cXHRcXHRnb3RvIGlwdXRfdXBjYXNlX2Vycl9vdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjA2LjE5MjU4MjY3N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTIwNDk4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTlRGUyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBOVEZTIGZpbGUgc3lzdGVtIGNvZGUsIGFuZCBJJ3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy4gYG50ZnNfZmlsbF9zdXBlcmAgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50OyBpdCdzIHRoZSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZC4gSSBrbm93IHRoYXQgYGxvYWRfc3lzdGVtX2ZpbGVzYCBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyB0aGUgY29yZSBzeXN0ZW0gZmlsZXMsIGFuZCB0aGF0IGZ1bmN0aW9uLCBpbiB0dXJuLCBjYWxscyBgbG9hZF9hbmRfaW5pdF9hdHRyZGVmYC4gU2luY2UgYG50ZnNfZmlsbF9zdXBlcmAgaXMgYXQgdGhlIHRvcCBvZiB0aGUgY2hhaW4sIHRoYXQgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIHBsYWNlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBmb3Igbm93LiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIHJvb3Qgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGFuZCB3aGVyZSBJIGNhbiBnYWluIHRoZSBtb3N0IGluc2lnaHQgaW5pdGlhbGx5LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBib3VuZHMgb2YgdGhvc2UgY2FsbHMuIEkgd2FzIHNvIGZvY3VzZWQgb24gdGhlIGNhbGwgY2hhaW4sIHRoYXQgSSBkaWRuJ3Qgc3RvcCB0byBleGFtaW5lIHdoYXQgZnVuY3Rpb25zIGBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2tgIGFuZCBgbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnRgIGFyZSBldmVuIGNhbGxlZCBieSEgSSBuZWVkIHRvIGV4cGFuZCB0aGUgc2NvcGUgYW5kIHVuZGVyc3RhbmQgdGhlaXIgcGxhY2UgaW4gdGhlIGJpZ2dlciBwaWN0dXJlIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhpcyBzcGVjaWZpYyBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MDkuODQ0NjM1OTY3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDE4NjkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hdHRyaWIuYz0xNzM0PXN0YXRpYyBzdHJ1Y3QgYXR0cl9kZWYgKm50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTE3NTctLypcXG5mcy9udGZzL2F0dHJpYi5jOjE3NTg6ICogbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrIC0gY2hlY2sgYSBzaXplIG9mIGFuIGF0dHJpYnV0ZSB0eXBlIGZvciB2YWxpZGl0eVxcbmZzL250ZnMvYXR0cmliLmMtMTc1OS0gKiBAdm9sOlxcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0xNzY1LSAqL1xcbmZzL250ZnMvYXR0cmliLmM6MTc2NjppbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMzIgdHlwZSxcXG5mcy9udGZzL2F0dHJpYi5jLTE3NjctXFx0XFx0Y29uc3QgczY0IHNpemUpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTI3ODk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjgxMC1cXHQvKiBDaGVjayB0aGUgYXR0cmlidXRlIHR5cGUgYW5kIHRoZSBzaXplLiAqL1xcbmZzL250ZnMvYXR0cmliLmM6MjgxMTpcXHRlcnIgPSBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgdHlwZSwgc2l6ZSk7XFxuZnMvbnRmcy9hdHRyaWIuYy0yODEyLVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NDE5Nz1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTQyMTktXFx0ICovXFxuZnMvbnRmcy9hdHRyaWIuYzo0MjIwOlxcdGVyciA9IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayh2b2wsIG5pLVxcdTAwM2V0eXBlLCBuZXdzaXplKTtcXG5mcy9udGZzL2F0dHJpYi5jLTQyMjEtXFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz00Mzc0PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDQwMi1cXHQgKi9cXG5mcy9udGZzL2F0dHJpYi5jOjQ0MDM6XFx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgbmktXFx1MDAzZXR5cGUsIG5ld3NpemUpO1xcbmZzL250ZnMvYXR0cmliLmMtNDQwNC1cXHRpZiAoZXJyXFx0XFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTQ2NDA9c3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDY3Ni1cXHQgKi9cXG5mcy9udGZzL2F0dHJpYi5jOjQ2Nzc6XFx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgYXR0cl9uaS1cXHUwMDNldHlwZSwgbmV3c2l6ZSk7XFxuZnMvbnRmcy9hdHRyaWIuYy00Njc4LVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmg9OTE9dm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xcbmZzL250ZnMvYXR0cmliLmg6OTI6aW50IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcXG5mcy9udGZzL2F0dHJpYi5oLTkzLVxcdFxcdGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBzNjQgc2l6ZSk7XFxuLS1cXG5mcy9udGZzL2VhLmM9MTg5PXN0YXRpYyBpbnQgbnRmc19zZXRfZWEoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLFxcbi0tXFxuZnMvbnRmcy9lYS5jLTI2NS1cXHRcXHRpZiAodmFsX3NpemUgXFx1MDAyNlxcdTAwMjZcXG5mcy9udGZzL2VhLmM6MjY2OlxcdFxcdCAgICBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgQVRfRUEsXFxuZnMvbnRmcy9lYS5jLTI2Ny1cXHRcXHRcXHRcXHRcXHRlYV9pbmZvX3FzaXplIC0gZWFfc2l6ZSArIG5ld19lYV9zaXplKSkge1xcbi0tXFxuZnMvbnRmcy9lYS5jLTMyOS1cXG5mcy9udGZzL2VhLmM6MzMwOlxcdFxcdGlmIChudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgQVRfRUEsXFxuZnMvbnRmcy9lYS5jLTMzMS1cXHRcXHRcXHRcXHRcXHRlYV9pbmZvX3FzaXplICsgbmV3X2VhX3NpemUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjA5Ljg5NDgzMTk2NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkxOTM1NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOVEZTIEF0dHJpYnV0ZSBNYW5pcHVsYXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgYG50ZnNfYXR0cl9hZGRgLCBgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmtgLCBgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmRgLCBgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZWAsIGFuZCBgbnRmc19zZXRfZWFgLiBUaGVzZSBhcmUgYWxsIGtleSBmdW5jdGlvbnMsIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgTlRGUyBhdHRyaWJ1dGUgbWFuYWdlbWVudC4gSSByZWNvZ25pemUgdGhlbSBpbW1lZGlhdGVseS4gVGhleSdyZSBsaWtlIHNpZ25wb3N0cyBwb2ludGluZyB0byB0aGUgY29yZSBtZWNoYW5pc21zIG9mIGhvdyBmaWxlIGRhdGEsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGFuZCBtZXRhZGF0YSBhcmUgc3RvcmVkIGFuZCBtb2RpZmllZCB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtLiBUaGVzZSBkZWZpbml0ZWx5IHdhcnJhbnQgbXkgZm9jdXNlZCBhdHRlbnRpb24uXG5cbkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnRgLiBUaGF0J3MgYW4gaW50ZXJlc3Rpbmcgb25lLiBXaGF0IGNhbGxzICp0aGF0KiBmdW5jdGlvbj8gSXRzIHJldHVybiB2YWx1ZSBkZXRlcm1pbmVzIGlmIGFuIGF0dHJpYnV0ZSBjYW4gYmUgc3RvcmVkIGlubGluZSB3aXRoIHRoZSBNRlQgZW50cnkgb3IgaWYgaXQgbmVlZHMgdG8gYmUgc3RvcmVkIG91dC1vZi1saW5lIChub24tcmVzaWRlbnQpLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCwgYXMgdGhleSBkZXRlcm1pbmUgdGhlIGNyaXRlcmlhIGZvciBkYXRhIHBsYWNlbWVudCBkZWNpc2lvbnMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQncyBjb25uZWN0ZWQgdG8uIFRoZSBjb250ZXh0IHN1cnJvdW5kaW5nICp0aGF0KiBjYWxsIGlzIHZlcnkgaW1wb3J0YW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRlY2lzaW9uIHBvaW50cyBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDA4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MTQuMDg2NzY5NzczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc2NjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTE3NjY9aW50IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgX19sZTMyIHR5cGUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTE3OTMtLypcXG5mcy9udGZzL2F0dHJpYi5jOjE3OTQ6ICogbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQgLSBjaGVjayBpZiBhbiBhdHRyaWJ1dGUgY2FuIGJlIG5vbi1yZXNpZGVudFxcbmZzL250ZnMvYXR0cmliLmMtMTc5NS0gKiBAdm9sOlxcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0xODAwLSAqL1xcbmZzL250ZnMvYXR0cmliLmM6MTgwMTpzdGF0aWMgaW50IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbmZzL250ZnMvYXR0cmliLmMtMTgwMi1cXHRcXHRjb25zdCBfX2xlMzIgdHlwZSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9MTkzOD1pbnQgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgdTMyIGRhdGFfc2l6ZSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMTk2MC1cXHQvKiBDaGVjayB0aGF0IHRoZSBhdHRyaWJ1dGUgaXMgYWxsb3dlZCB0byBiZSBub24tcmVzaWRlbnQuICovXFxuZnMvbnRmcy9hdHRyaWIuYzoxOTYxOlxcdGVyciA9IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KHZvbCwgbmktXFx1MDAzZXR5cGUpO1xcbmZzL250ZnMvYXR0cmliLmMtMTk2Mi1cXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz0yNTE2PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI1MzQtXFxuZnMvbnRmcy9hdHRyaWIuYzoyNTM1OlxcdGVyciA9IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KG5pLVxcdTAwM2V2b2wsIHR5cGUpO1xcbmZzL250ZnMvYXR0cmliLmMtMjUzNi1cXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI1MzktXFx0XFx0ZWxzZVxcbmZzL250ZnMvYXR0cmliLmM6MjU0MDpcXHRcXHRcXHRwcl9lcnIoXFxcIm50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50IGZhaWxlZFxcXFxuXFxcIik7XFxuZnMvbnRmcy9hdHRyaWIuYy0yNTQxLVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTI3ODk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjgxOS1cXHQvKiBTYW5pdHkgY2hlY2tzIGZvciBhbHdheXMgcmVzaWRlbnQgYXR0cmlidXRlcy4gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjI4MjA6XFx0ZXJyID0gbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQobmktXFx1MDAzZXZvbCwgdHlwZSk7XFxuZnMvbnRmcy9hdHRyaWIuYy0yODIxLVxcdGlmIChlcnIpIHtcXG5mcy9udGZzL2F0dHJpYi5jLTI4MjItXFx0XFx0aWYgKGVyciAhPSAtRVBFUk0pIHtcXG5mcy9udGZzL2F0dHJpYi5jOjI4MjM6XFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIm50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50IGZhaWxlZFxcXCIpO1xcbmZzL250ZnMvYXR0cmliLmMtMjgyNC1cXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTQ2NDA9c3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDczNS1cXG5mcy9udGZzL2F0dHJpYi5jOjQ3MzY6XFx0XFx0aWYgKG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KHZvbCwgYS1cXHUwMDNldHlwZSkpXFxuZnMvbnRmcy9hdHRyaWIuYy00NzM3LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNToxNC4xMzI1NDA4NjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0MjU2MTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE5URlMgQXR0cmlidXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgTlRGUyBhdHRyaWJ1dGUgbWFuYWdlbWVudCBoZXJlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlIGBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRgLCBgbnRmc19hdHRyX2FkZGAsIGFuZCBgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZWAuIFRoZXkncmUgY29yZSB0byBob3cgYXR0cmlidXRlcywgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBOVEZTIGZpbGVzLCBhcmUgaGFuZGxlZCBpbiB2YXJpb3VzIHN0YXRlcy5cblxuSSBzdXNwZWN0IHRoYXQgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiByZWFsbSBhcmUgYSBiaXQgYnJvYWRlciB0aGFuIGp1c3QgdGhvc2UsIHRob3VnaC4gSSBuZWVkIHRvIGtlZXAgbXkgZXllIG9uIGBudGZzX2ZpbGxfc3VwZXJgLCBgbnRmc19hdHRyX2FkZGAsIGBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRgLCBgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZWAsIGFuZCB0aGUgbGVzcyBvYnZpb3VzIGZ1bmN0aW9ucyBvZiBgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmtgLCBgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmRgLCBhbmQgYG50ZnNfc2V0X2VhYC4gSSdtIGVzc2VudGlhbGx5IG91dGxpbmluZyB0aGUgcHJvY2VzcyBvZiBob3cgYXR0cmlidXRlcyBnZXQgY3JlYXRlZCwgbW9kaWZpZWQsIGFuZCB0cmFuc2l0aW9uZWQgYmV0d2VlbiByZXNpZGVudCBhbmQgbm9uLXJlc2lkZW50IHN0YXRlcywgaW5jbHVkaW5nIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzIGFuZCBzaHJpbmtpbmcgb3IgZ3Jvd2luZyBub24tcmVzaWRlbnQgYXR0cmlidXRlcyBhcmUgYWRkcmVzc2VkLlxuXG5UaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBudGZzX2ZpbGxfc3VwZXJgLiBJdCBpcyBsaWtlbHkgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgc3VwZXJibG9jayBpbnRlcmFjdHMgd2l0aCBhbGwgdGhlc2UgYXR0cmlidXRlcy4gRnJvbSB0aGVyZSwgSSBjYW4gaG9wZWZ1bGx5IHRyYWNlIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHZhcmlvdXMgYXR0cmlidXRlLXJlbGF0ZWQgdGFza3MgYXJlIGludGVncmF0ZWQuIExldCdzIHNlZSBpZiB0aGF0IGluaXRpYWwgY2hlY2sgY2xhcmlmaWVzIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNToxOS43NzUxMDYxMTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDM5NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjE4ND1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG50ZnNfbWZ0X2ludmFsX2xvY2tfa2V5O1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTIxODYtLypcXG5mcy9udGZzL3N1cGVyLmM6MjE4NzogKiBudGZzX2ZpbGxfc3VwZXIgLSBtb3VudCBhbiBudGZzIGZpbGVzeXN0ZW1cXG5mcy9udGZzL3N1cGVyLmMtMjE4OC0gKiBAc2I6IHN1cGVyIGJsb2NrIG9mIHRoZSBkZXZpY2UgdG8gbW91bnRcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMTkwLSAqXFxuZnMvbnRmcy9zdXBlci5jOjIxOTE6ICogbnRmc19maWxsX3N1cGVyKCkgaXMgY2FsbGVkIGJ5IHRoZSBWRlMgdG8gbW91bnQgdGhlIGRldmljZSBkZXNjcmliZWQgYnkgQHNiXFxuZnMvbnRmcy9zdXBlci5jLTIxOTItICogd2l0aCB0aGUgbW91bnQgb3Rpb25zIGluIEBkYXRhIHdpdGggdGhlIE5URlMgZmlsZXN5c3RlbS5cXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMjAwLSAqL1xcbmZzL250ZnMvc3VwZXIuYzoyMjAxOnN0YXRpYyBpbnQgbnRmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9udGZzL3N1cGVyLmMtMjIwMi17XFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MjUxNj1zdGF0aWMgaW50IG50ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL250ZnMvc3VwZXIuYy0yNTE3LXtcXG5mcy9udGZzL3N1cGVyLmM6MjUxODpcXHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgbnRmc19maWxsX3N1cGVyKTtcXG5mcy9udGZzL3N1cGVyLmMtMjUxOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjE5LjgyNDE0ODc2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc0OTI5MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gdGhlIGVudHJ5IHBvaW50IGZvciBtb3VudGluZyBpcyBkZWZpbml0ZWx5IGBudGZzX2ZpbGxfc3VwZXJgLiBUaGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSwgc3BlY2lmaWNhbGx5IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciB3cml0ZSB3aXRoaW4gdGhlIGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYCBmdW5jdGlvbi4gVGhlIGZpeCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGl0J3MgbWFraW5nIHN1cmUgdGhhdCB0aGUgYGFkYCBwb2ludGVyIGRvZXNuJ3QgZ28gYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGJ1ZmZlciAoYHZvbC1cdTAwM2VhdHRyZGVmX3NpemUgLSBzaXplb2YoKmFkKWApIGR1cmluZyBsb29rdXAuIEFuZCwgc2ltaWxhcmx5LCB0aGF0IGBsb2FkX2FuZF9pbml0X2F0dHJkZWZgIGd1YXJhbnRlZXMgdGhlIGlub2RlJ3Mgc2l6ZSAoYGlfc2l6ZWApIGlzIGF0IGxlYXN0IGJpZyBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhlIGBzdHJ1Y3QgYXR0cl9kZWZgIHN0cnVjdHVyZS4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsbHkgZHJpdmVuIGNoYW5nZSB0aGF0IHNob3VsZCBlbGltaW5hdGUgYSBwb3NzaWJsZSBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cblxuTm93LCBsZXQgbWUganVzdCBjb25maXJtIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJcyBgTlRGU19GU2AgdGhlIG9ubHkgcmVxdWlyZWQgb3B0aW9uPyBZZXAsIGp1c3QgYE5URlNfRlNgLCBub3RoaW5nIGVsc2UgbmVlZGVkLlxuXG5GaW5hbGx5LCBJIHNob3VsZCBqdXN0IHF1aWNrbHkgY2hlY2sgaWYgYG50ZnNfYXR0cl9hZGRgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2Agb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTE1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjI1LjA5OTA4NDAwMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNTAzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19hdHRyX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTI2NTI9aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI3NjMtLypcXG5mcy9udGZzL2F0dHJpYi5jOjI3NjQ6ICogbnRmc19hdHRyX2FkZCAtIGFkZCBhdHRyaWJ1dGUgdG8gaW5vZGVcXG5mcy9udGZzL2F0dHJpYi5jLTI3NjUtICogQG5pOlxcdFxcdG9wZW5lZCBudGZzIGlub2RlIHRvIHdoaWNoIGFkZCBhdHRyaWJ1dGVcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjc4OC0gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjI3ODk6aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG5mcy9udGZzL2F0dHJpYi5jLTI3OTAtXFx0XFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgdTggKnZhbCwgczY0IHNpemUpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5oPTEyMz1pbnQgbnRmc19hdHRyX3JlY29yZF9tb3ZlX3RvKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xcbmZzL250ZnMvYXR0cmliLmg6MTI0OmludCBudGZzX2F0dHJfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXFxuZnMvbnRmcy9hdHRyaWIuaC0xMjUtXFx0XFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgdTggKnZhbCwgczY0IHNpemUpO1xcbi0tXFxuZnMvbnRmcy9lYS5jPTE4OT1zdGF0aWMgaW50IG50ZnNfc2V0X2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbixcXG4tLVxcbmZzL250ZnMvZWEuYy0yMjgtXFx0XFx0ZWFfaW5mb19xc2l6ZSA9IDA7XFxuZnMvbnRmcy9lYS5jOjIyOTpcXHRcXHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9FQV9JTkZPUk1BVElPTiwgQVRfVU5OQU1FRCwgMCxcXG5mcy9udGZzL2VhLmMtMjMwLVxcdFxcdFxcdFxcdChjaGFyICopcF9lYV9pbmZvLCBzaXplb2Yoc3RydWN0IGVhX2luZm9ybWF0aW9uKSk7XFxuLS1cXG5mcy9udGZzL2VhLmMtMjk2LVxcdFxcdFxcdFxcdC8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsICRFQSBpZiAkRUFfSU5GT1JNQVRJT04gcmVtb3ZhbCBmYWlsZWQuICovXFxuZnMvbnRmcy9lYS5jOjI5NzpcXHRcXHRcXHRcXHRudGZzX2F0dHJfYWRkKG5pLCBBVF9FQSwgQVRfVU5OQU1FRCwgMCwgb2xkX2VhX2J1ZixcXG5mcy9udGZzL2VhLmMtMjk4LVxcdFxcdFxcdFxcdFxcdCAgICAgIGFsbF9lYV9zaXplKTtcXG4tLVxcbmZzL250ZnMvZWEuYy0zNzItXFx0aWYgKCFudGZzX2F0dHJfZXhpc3QobmksIEFUX0VBLCBBVF9VTk5BTUVELCAwKSkge1xcbmZzL250ZnMvZWEuYzozNzM6XFx0XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfRUEsIEFUX1VOTkFNRUQsIDAsIGVhX2J1ZixcXG5mcy9udGZzL2VhLmMtMzc0LVxcdFxcdFxcdFxcdGVhX2luZm9fcXNpemUgKyBuZXdfZWFfc2l6ZSk7XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTAxND1zdGF0aWMgaW50IG50ZnNfaWJtX2FkZChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTAyNi1cXHRtZW1zZXQoYm1wLCAwLCBzaXplb2YoYm1wKSk7XFxuZnMvbnRmcy9pbmRleC5jOjEwMjc6XFx0cmV0ID0gbnRmc19hdHRyX2FkZChpY3gtXFx1MDAzZWlkeF9uaSwgQVRfQklUTUFQLCBpY3gtXFx1MDAzZW5hbWUsIGljeC1cXHUwMDNlbmFtZV9sZW4sXFxuZnMvbnRmcy9pbmRleC5jLTEwMjgtXFx0XFx0XFx0ICAgIGJtcCwgc2l6ZW9mKGJtcCkpO1xcbi0tXFxuZnMvbnRmcy9pbmRleC5jPTEyNTQ9c3RhdGljIGludCBudGZzX2lhX2FkZChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTI2NC1cXHRpZiAoIW50ZnNfYXR0cl9leGlzdChpY3gtXFx1MDAzZWlkeF9uaSwgQVRfSU5ERVhfQUxMT0NBVElPTiwgaWN4LVxcdTAwM2VuYW1lLCBpY3gtXFx1MDAzZW5hbWVfbGVuKSkge1xcbmZzL250ZnMvaW5kZXguYzoxMjY1OlxcdFxcdHJldCA9IG50ZnNfYXR0cl9hZGQoaWN4LVxcdTAwM2VpZHhfbmksIEFUX0lOREVYX0FMTE9DQVRJT04sIGljeC1cXHUwMDNlbmFtZSxcXG5mcy9udGZzL2luZGV4LmMtMTI2Ni1cXHRcXHRcXHRcXHRcXHRpY3gtXFx1MDAzZW5hbWVfbGVuLCBOVUxMLCAwKTtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0zMzA9c3RhdGljIGludCBudGZzX3NkX2FkZF9ldmVyeW9uZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtMzg0LVxcbmZzL250ZnMvbmFtZWkuYzozODU6XFx0cmV0ID0gbnRmc19hdHRyX2FkZChuaSwgQVRfU0VDVVJJVFlfREVTQ1JJUFRPUiwgQVRfVU5OQU1FRCwgMCwgKHU4ICopc2QsXFxuZnMvbnRmcy9uYW1laS5jLTM4Ni1cXHRcXHRcXHRzZF9sZW4pO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTM5ND1zdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTUzOC1cXHQvKiBBZGQgU1RBTkRBUkRfSU5GT1JNQVRJT04gdG8gaW5vZGUuICovXFxuZnMvbnRmcy9uYW1laS5jOjUzOTpcXHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9TVEFOREFSRF9JTkZPUk1BVElPTiwgQVRfVU5OQU1FRCwgMCwgKHU4ICopc2ksXFxuZnMvbnRmcy9uYW1laS5jLTU0MC1cXHRcXHRcXHRzaV9sZW4pO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTU4MS1cXHRcXHQvKiBBZGQgc3RydWN0IGluZGV4X3Jvb3QgYXR0cmlidXRlIHRvIGlub2RlLiAqL1xcbmZzL250ZnMvbmFtZWkuYzo1ODI6XFx0XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfSU5ERVhfUk9PVCwgSTMwLCA0LCAodTggKilpciwgaXJfbGVuKTtcXG5mcy9udGZzL25hbWVpLmMtNTgzLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy01OTMtXFx0XFx0LyogQWRkIERBVEEgYXR0cmlidXRlIHRvIGlub2RlLiAqL1xcbmZzL250ZnMvbmFtZWkuYzo1OTQ6XFx0XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfREFUQSwgQVRfVU5OQU1FRCwgMCwgTlVMTCwgMCk7XFxuZnMvbnRmcy9uYW1laS5jLTU5NS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9udGZzL25hbWVpLmMtNjYwLVxcdC8qIEFkZCBGSUxFX05BTUUgYXR0cmlidXRlIHRvIGlub2RlLiAqL1xcbmZzL250ZnMvbmFtZWkuYzo2NjE6XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfRklMRV9OQU1FLCBBVF9VTk5BTUVELCAwLCAodTggKilmbiwgZm5fbGVuKTtcXG5mcy9udGZzL25hbWVpLmMtNjYyLVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0xMTQ2PXN0YXRpYyBpbnQgX19udGZzX2xpbmsoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19pbm9kZSAqZGlyX25pLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTEyMjAtXFx0LyogQWRkIEZJTEVfTkFNRSBhdHRyaWJ1dGUgdG8gaW5vZGUuICovXFxuZnMvbnRmcy9uYW1laS5jOjEyMjE6XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfRklMRV9OQU1FLCBBVF9VTk5BTUVELCAwLCAodTggKilmbiwgZm5fbGVuKTtcXG5mcy9udGZzL25hbWVpLmMtMTIyMi1cXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9udGZzL3JlcGFyc2UuYz02OTE9c3RhdGljIGludCBudGZzX3NldF9udGZzX3JlcGFyc2VfZGF0YShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNoYXIgKnZhbHVlLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL250ZnMvcmVwYXJzZS5jLTcyNi1cXG5mcy9udGZzL3JlcGFyc2UuYzo3Mjc6XFx0XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfUkVQQVJTRV9QT0lOVCwgQVRfVU5OQU1FRCwgMCwgKHU4ICopXFx1MDAyNnJwLCBzaXplb2YocnApKTtcXG5mcy9udGZzL3JlcGFyc2UuYy03MjgtXFx0XFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNToyNS4xNDg0NDAyNjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2MjY0MzAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgTlRGUyBDb2RlIC0gUG90ZW50aWFsIEVudHJ5IFBvaW50cyBhbmQgU2NvcGUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIE5URlMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYW5kIGhvdyB0aGluZ3MgYXJlIHN0cnVjdHVyZWQuIEZpcnN0LCBJIG5vdGljZSB0aGF0IGBudGZzX2F0dHJfYWRkYCBhbmQgYG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudGAgYXJlICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IHVzZWZ1bDsgaXQgdGVsbHMgbWUgdGhleSdyZSBwcm9iYWJseSBjYWxsYWJsZSBmcm9tIGVsc2V3aGVyZSwgd2hpY2ggbWVhbnMgdGhleSBtaWdodCBiZSBpbnRlcmVzdGluZyBhcyBwb3RlbnRpYWwgc3ltYm9scyB0byB0cmFjZSBvciBhbmFseXplIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgZGVwZW5kaW5nIG9uIHdoYXQgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0LlxuXG5UaGVuIEkgc2VlIGBudGZzX2ZpbGxfc3VwZXJgLiBBaCwgaXQgKmlzKiBzdGF0aWMhIE5vdywgdGhhdCBpbml0aWFsbHkgbWFrZXMgaXQgbGVzcyBhcHBlYWxpbmcgYXMgYSBtYWluIGZvY3VzLCBzaW5jZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IGxpbWl0ZWQgaW4gdGhlaXIgc2NvcGUuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGBudGZzX2ZpbGxfc3VwZXJgIGlzIHRoZSBtb3VudCBlbnRyeSBwb2ludCwgaXNuJ3QgaXQ/IFRoYXQgbWVhbnMgaXQncyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgKmhvdyogdGhlIGZpbGVzeXN0ZW0gaXMgYnJvdWdodCB1cC4gRXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3MgdGhlIGdhdGV3YXkuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgaXQgYW5kIHJlY29uc2lkZXIgaXRzIGltcG9ydGFuY2UgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdob2xlIHN5c3RlbS4gTGV0IG1lIHJlLWV2YWx1YXRlIGBudGZzX2ZpbGxfc3VwZXJgIG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNTozMC4xMTEwODU5NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTM3MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjE4ND1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG50ZnNfbWZ0X2ludmFsX2xvY2tfa2V5O1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTIxODYtLypcXG5mcy9udGZzL3N1cGVyLmM6MjE4NzogKiBudGZzX2ZpbGxfc3VwZXIgLSBtb3VudCBhbiBudGZzIGZpbGVzeXN0ZW1cXG5mcy9udGZzL3N1cGVyLmMtMjE4OC0gKiBAc2I6IHN1cGVyIGJsb2NrIG9mIHRoZSBkZXZpY2UgdG8gbW91bnRcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMTkwLSAqXFxuZnMvbnRmcy9zdXBlci5jOjIxOTE6ICogbnRmc19maWxsX3N1cGVyKCkgaXMgY2FsbGVkIGJ5IHRoZSBWRlMgdG8gbW91bnQgdGhlIGRldmljZSBkZXNjcmliZWQgYnkgQHNiXFxuZnMvbnRmcy9zdXBlci5jLTIxOTItICogd2l0aCB0aGUgbW91bnQgb3Rpb25zIGluIEBkYXRhIHdpdGggdGhlIE5URlMgZmlsZXN5c3RlbS5cXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMjAwLSAqL1xcbmZzL250ZnMvc3VwZXIuYzoyMjAxOnN0YXRpYyBpbnQgbnRmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9udGZzL3N1cGVyLmMtMjIwMi17XFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MjUxNj1zdGF0aWMgaW50IG50ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL250ZnMvc3VwZXIuYy0yNTE3LXtcXG5mcy9udGZzL3N1cGVyLmM6MjUxODpcXHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgbnRmc19maWxsX3N1cGVyKTtcXG5mcy9udGZzL3N1cGVyLmMtMjUxOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjMwLjE1OTAyOTI5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgwNTIwMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDb25zaWRlcmluZyBTdGF0aWMgRnVuY3Rpb24gU2NvcGUgaW4gTlRGUyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBOVEZTIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYXQgYG50ZnNfZ2V0X3RyZWVgLiBJdCdzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGJyaW5ncyB1cCBzb21lIGltcGxpY2F0aW9ucyBmb3IgaXRzIHZpc2liaWxpdHkgYW5kIHVzYWdlLiAqU3RhdGljKiBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIG9ubHkgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIGBudGZzYCBtb2R1bGUsIGxpa2VseSBiZWNhdXNlIGl0IGhhbmRsZXMgZmlsZXN5c3RlbS1zcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgb3IgYWNjZXNzIG1ldGhvZHMuXG5cbk5vdywgbXkgbWluZCBzaGlmdHMgdG8gYG50ZnNfaW5pdF9mc19jb250ZXh0YC4gSSBuZWVkIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhlIHNhbWUgZGVzaWduIGNvbnNpZGVyYXRpb25zIGFwcGx5IHRoZXJlLiBJcyBpdCBhbHNvIHN0YXRpYz8gU2hvdWxkIGl0IGJlPyBJZiBpdCAqaXMqIHN0YXRpYywgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgc2NvcGUgYWxpZ25zIHdpdGggaG93IHRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwuIElmIGl0IGlzbid0IHN0YXRpYywgSSB3aWxsIGhhdmUgdG8gc3RhcnQgdGhpbmtpbmcgb2Ygd2h5IGl0IG1heSBub3QgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTM0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MzMuNDM5NTUxNTQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc3NjIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2luaXRfZnNfY29udGV4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjUyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBudGZzX2NvbnRleHRfb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTI1MzUtXFxuZnMvbnRmcy9zdXBlci5jOjI1MzY6c3RhdGljIGludCBudGZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvbnRmcy9zdXBlci5jLTI1Mzcte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTI1Njg9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG50ZnNfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yNTcwLVxcdC5uYW1lICAgICAgICAgICAgICAgICAgID0gXFxcIm50ZnNcXFwiLFxcbmZzL250ZnMvc3VwZXIuYzoyNTcxOlxcdC5pbml0X2ZzX2NvbnRleHQgICAgICAgID0gbnRmc19pbml0X2ZzX2NvbnRleHQsXFxuZnMvbnRmcy9zdXBlci5jLTI1NzItXFx0LnBhcmFtZXRlcnMgICAgICAgICAgICAgPSBudGZzX3BhcmFtZXRlcnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjMzLjQ4NzMzMzM0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzY0NzQzNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipGdXp6aW5nIE5URlM6IEEgUmVmaW5lbWVudCBvZiBTdHJhdGVneSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IHRoaXMgYG50ZnNfZmlsbF9zdXBlcmAgZnVuY3Rpb24uIEl0J3Mgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IGEgcGFpbiBmb3IgZnV6emluZyBiZWNhdXNlIGl0J3MgaGFyZCB0byBnZXQgZGlyZWN0IGNvbnRyb2wsIGJ1dC4uLiBpdCdzIHRoZSAqbW91bnQgZW50cnkgcG9pbnQqLiBTeXprYWxsZXIsIHdpdGggaXRzIG1vdW50IGZ1enppbmcgY2FwYWJpbGl0aWVzLCBzaG91bGQgYmUgYWJsZSB0byBnZXQgbWUgdGhlcmUhIFRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcy5cblxuUmlnaHQsIHNvIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGhpdCBgbnRmc19maWxsX3N1cGVyYCBkaXJlY3RseSBhcyBteSBwcmltYXJ5IHRhcmdldCwgSSBjYW4gZm9jdXMgb24gZnVuY3Rpb25zIGRlZXBlciBpbiB0aGUgZmlsZSBzeXN0ZW0uIFRoaW5raW5nIGFib3V0IHRoZSBOVEZTIGF0dHJpYnV0ZSBoYW5kbGluZy4uLiBgbnRmc19hdHRyX2FkZGAgYW5kIGBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRgLiBUaG9zZSBhcmUgZXhjZWxsZW50LCBsb3dlci1sZXZlbCBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgaGF2ZSBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHdpdGhpbiB0aGVtIGFuZCBhcmUgbGlrZWx5IGV4cG9zZWQgYXQgdGhlIFZGUyBsZXZlbC4gVGhlc2UgY291bGQgYmUgZXhjZWxsZW50IFwiZm9jdXMgc3ltYm9sc1wiIHRvIGd1aWRlIHRoZSBmdXp6ZXIuXG5cbldhaXQgYSBtaW51dGUsIHdoYXQncyB0aGlzPyBgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrYD8gQW5kIGl0J3MgKm5vbi1zdGF0aWMqPyBUaGF0IGp1c3QgY2hhbmdlZCB0aGUgZ2FtZSBwbGFuIGEgYml0LiBNYXliZSB0aGlzIGlzIGEgYmV0dGVyIGVudHJ5IHBvaW50IHRvIGxvb2sgYXQhIFdpdGggdGhpcyBvbmUgYXZhaWxhYmxlLCBpdCBnaXZlcyBtZSBhIGJldHRlciBvcHRpb24gZm9yIGZ1enppbmcgYXQgdGhlIFwiYm91bmRzIGNoZWNrXCIgbGV2ZWwsIHdoaWNoIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBmaWxlIHN5c3RlbSB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MzkuODUyMDgwMzk2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ3MDIzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hdHRyaWIuYz0xNzM0PXN0YXRpYyBzdHJ1Y3QgYXR0cl9kZWYgKm50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTE3NTctLypcXG5mcy9udGZzL2F0dHJpYi5jOjE3NTg6ICogbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrIC0gY2hlY2sgYSBzaXplIG9mIGFuIGF0dHJpYnV0ZSB0eXBlIGZvciB2YWxpZGl0eVxcbmZzL250ZnMvYXR0cmliLmMtMTc1OS0gKiBAdm9sOlxcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0xNzY1LSAqL1xcbmZzL250ZnMvYXR0cmliLmM6MTc2NjppbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMzIgdHlwZSxcXG5mcy9udGZzL2F0dHJpYi5jLTE3NjctXFx0XFx0Y29uc3QgczY0IHNpemUpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTI3ODk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjgxMC1cXHQvKiBDaGVjayB0aGUgYXR0cmlidXRlIHR5cGUgYW5kIHRoZSBzaXplLiAqL1xcbmZzL250ZnMvYXR0cmliLmM6MjgxMTpcXHRlcnIgPSBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgdHlwZSwgc2l6ZSk7XFxuZnMvbnRmcy9hdHRyaWIuYy0yODEyLVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NDE5Nz1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTQyMTktXFx0ICovXFxuZnMvbnRmcy9hdHRyaWIuYzo0MjIwOlxcdGVyciA9IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayh2b2wsIG5pLVxcdTAwM2V0eXBlLCBuZXdzaXplKTtcXG5mcy9udGZzL2F0dHJpYi5jLTQyMjEtXFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz00Mzc0PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDQwMi1cXHQgKi9cXG5mcy9udGZzL2F0dHJpYi5jOjQ0MDM6XFx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgbmktXFx1MDAzZXR5cGUsIG5ld3NpemUpO1xcbmZzL250ZnMvYXR0cmliLmMtNDQwNC1cXHRpZiAoZXJyXFx0XFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTQ2NDA9c3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDY3Ni1cXHQgKi9cXG5mcy9udGZzL2F0dHJpYi5jOjQ2Nzc6XFx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgYXR0cl9uaS1cXHUwMDNldHlwZSwgbmV3c2l6ZSk7XFxuZnMvbnRmcy9hdHRyaWIuYy00Njc4LVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmg9OTE9dm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xcbmZzL250ZnMvYXR0cmliLmg6OTI6aW50IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcXG5mcy9udGZzL2F0dHJpYi5oLTkzLVxcdFxcdGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBzNjQgc2l6ZSk7XFxuLS1cXG5mcy9udGZzL2VhLmM9MTg5PXN0YXRpYyBpbnQgbnRmc19zZXRfZWEoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLFxcbi0tXFxuZnMvbnRmcy9lYS5jLTI2NS1cXHRcXHRpZiAodmFsX3NpemUgXFx1MDAyNlxcdTAwMjZcXG5mcy9udGZzL2VhLmM6MjY2OlxcdFxcdCAgICBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgQVRfRUEsXFxuZnMvbnRmcy9lYS5jLTI2Ny1cXHRcXHRcXHRcXHRcXHRlYV9pbmZvX3FzaXplIC0gZWFfc2l6ZSArIG5ld19lYV9zaXplKSkge1xcbi0tXFxuZnMvbnRmcy9lYS5jLTMyOS1cXG5mcy9udGZzL2VhLmM6MzMwOlxcdFxcdGlmIChudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgQVRfRUEsXFxuZnMvbnRmcy9lYS5jLTMzMS1cXHRcXHRcXHRcXHRcXHRlYV9pbmZvX3FzaXplICsgbmV3X2VhX3NpemUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjM5LjkwODU1NDg1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ2ODI3NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIE5URlMgQXR0cmlidXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTlRGUyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBiZWNhdXNlIGl0J3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHVzdWFsbHkgbWVhbnMgaXQncyBhIGtleSBmdW5jdGlvbiBpbiBhIHJlbGF0ZWQgc3Vic3lzdGVtLiBCdXQgd2FpdCBhIG1pbnV0ZSwgSSBzZWUgdGhhdCBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBudGZzX2F0dHJfYWRkYCBjYWxsIGl0IGRpcmVjdGx5LiBUaGF0IG1lYW5zIGl0J3MgZXZlbiBtb3JlIGNlbnRyYWwgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0ISBFeGNlbGxlbnQsIHRoaXMgaXMgcHJvbWlzaW5nLlxuXG5CYXNlZCBvbiB0aGlzLCBJJ20gZ29pbmcgdG8gY2VudGVyIG15IGludmVzdGlnYXRpb24gYXJvdW5kIHRoZXNlIHRocmVlOiBgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrYCwgYG50ZnNfYXR0cl9hZGRgLCBhbmQgYG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBvZiBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9uLlxuXG5CZWZvcmUgSSBnbyB0b28gZGVlcCwgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gYSBjb25maWcgY2hlY2suLi4gWWVwLCBsb29rcyBsaWtlIGBOVEZTX0ZTYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcuIEdvb2QsIGtlZXBzIHRoaW5ncyBuaWNlIGFuZCBmb2N1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1NSwiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6NDcuMDU1Mzg5MDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjkyOTg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVja1wiLFxuICAgIFwibnRmc19hdHRyX2FkZFwiLFxuICAgIFwibnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZW5zdXJpbmcgdGhhdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gYXJyYXkgZG9lcyBub3QgZXhjZWVkIHRoZSBhbGxvY2F0ZWQgc2l6ZSBhbmQgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgZW50cnkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IE5URlMgdm9sdW1lcyBhcmUgbW91bnRlZCBhbmQgaG93IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCwgc28gaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrXCIsXG4gICAgXCJudGZzX2F0dHJfYWRkXCIsXG4gICAgXCJudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRyaXZlciBieSBlbnN1cmluZyB0aGF0IHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBhcnJheSBkb2VzIG5vdCBleGNlZWQgdGhlIGFsbG9jYXRlZCBzaXplIGFuZCB0aGF0IHRoZSBzaXplIG9mIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBmaWxlIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIG9uZSBlbnRyeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgTlRGUyB2b2x1bWVzIGFyZSBtb3VudGVkIGFuZCBob3cgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNTo0Ny4xMzgzMjYyMzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTM3NjQxNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6NDcuMTM4OTUyMzE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NTM3MDExOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gTlRGUyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgIGFuZCB0aGF0IHRoZSBsb29wIGl0ZXJhdGluZyBvdmVyIGB2b2wtXFx1MDAzZWF0dHJkZWZgIGRvZXMgbm90IHJlYWQgYSBwYXJ0aWFsIHN0cnVjdHVyZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWI1NDA2NDY5ODM3ZDI0NWI1YmRjODYzNWQxMzkwYmE1YjJjZmY2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA1OjE0OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9hdHRyaWIuYyBiL2ZzL250ZnMvYXR0cmliLmNcbmluZGV4IDk5MGMzOTM3YTU1MTYuLjdkMDgxNmRlNzU2MzQgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL2F0dHJpYi5jXG4rKysgYi9mcy9udGZzL2F0dHJpYi5jXG5AQCAtMTczNyw4ICsxNzM3LDggQEAgc3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbiBcdHN0cnVjdCBhdHRyX2RlZiAqYWQ7XG4gXG4gXHRXQVJOX09OKCF0eXBlKTtcbi1cdGZvciAoYWQgPSB2b2wtXHUwMDNlYXR0cmRlZjsgKHU4ICopYWQgLSAodTggKil2b2wtXHUwMDNlYXR0cmRlZiBcdTAwM2Ncbi1cdFx0XHR2b2wtXHUwMDNlYXR0cmRlZl9zaXplIFx1MDAyNlx1MDAyNiBhZC1cdTAwM2V0eXBlOyArK2FkKSB7XG4rXHRmb3IgKGFkID0gdm9sLVx1MDAzZWF0dHJkZWY7ICh1OCAqKWFkIC0gKHU4ICopdm9sLVx1MDAzZWF0dHJkZWYgXHUwMDNjPVxuK1x0ICAgICB2b2wtXHUwMDNlYXR0cmRlZl9zaXplIC0gKHMzMilzaXplb2YoKmFkKSBcdTAwMjZcdTAwMjYgYWQtXHUwMDNldHlwZTsgKythZCkge1xuIFx0XHQvKiBXZSBoYXZlIG5vdCBmb3VuZCBpdCB5ZXQsIGNhcnJ5IG9uIHNlYXJjaGluZy4gKi9cbiBcdFx0aWYgKGxpa2VseShsZTMyX3RvX2NwdShhZC1cdTAwM2V0eXBlKSBcdTAwM2MgbGUzMl90b19jcHUodHlwZSkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuY1xuaW5kZXggY2Q4ZmEyYzEzMzcwMC4uMmZkN2RiNjcyNjFlZiAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvc3VwZXIuY1xuKysrIGIvZnMvbnRmcy9zdXBlci5jXG5AQCAtMTI0MSw5ICsxMjQxLDkgQEAgc3RhdGljIGJvb2wgbG9hZF9hbmRfaW5pdF9hdHRyZGVmKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRnb3RvIGZhaWxlZDtcbiBcdH1cbiBcdE5Jbm9TZXRTcGFyc2VEaXNhYmxlZChOVEZTX0koaW5vKSk7XG4tXHQvKiBUaGUgc2l6ZSBvZiBGSUxFX0F0dHJEZWYgbXVzdCBiZSBhYm92ZSAwIGFuZCBmaXQgaW5zaWRlIDMxIGJpdHMuICovXG4rXHQvKiBGSUxFX0F0dHJEZWYgbXVzdCBob2xkIGF0IGxlYXN0IG9uZSBlbnRyeSBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqL1xuIFx0aV9zaXplID0gaV9zaXplX3JlYWQoaW5vKTtcbi1cdGlmIChpX3NpemUgXHUwMDNjPSAwIHx8IGlfc2l6ZSBcdTAwM2UgMHg3ZmZmZmZmZilcbitcdGlmIChpX3NpemUgXHUwMDNjIChzNjQpc2l6ZW9mKHN0cnVjdCBhdHRyX2RlZikgfHwgaV9zaXplIFx1MDAzZSAweDdmZmZmZmZmKVxuIFx0XHRnb3RvIGlwdXRfZmFpbGVkO1xuIFx0dm9sLVx1MDAzZWF0dHJkZWYgPSBrdnphbGxvYyhpX3NpemUsIEdGUF9OT0ZTKTtcbiBcdGlmICghdm9sLVx1MDAzZWF0dHJkZWYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNTo0Ny4xMzg5NTM0MTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ1MzY5ODk3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS0FTQU4gaXMgdGhlIFJpZ2h0IFRvb2wgZm9yIFRoaXMgTlRGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBOVEZTIGRyaXZlci4gSXQgdG91Y2hlcyBgYXR0cmliLmNgIGFuZCBgc3VwZXIuY2AuIEluIGBhdHRyaWIuY2AsIGl0IGxvb2tzIGxpa2UgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCBmaXggZm9yIHRoZSBgdm9sLVx1MDAzZWF0dHJkZWZgIGl0ZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGxvb3AgY291bGQgcG90ZW50aWFsbHkgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIGBhdHRyZGVmYCBieSBkZXJlZmVyZW5jaW5nIGBhZC1cdTAwM2V0eXBlYCB3aXRob3V0IGNoZWNraW5nIGlmIGEgZnVsbCBgc3RydWN0IGF0dHJfZGVmYCBjb3VsZCBmaXQgd2l0aGluIGB2b2wtXHUwMDNlYXR0cmRlZl9zaXplYC4gVGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGVyZSdzIGVub3VnaCBzcGFjZS5cblxuSW4gYHN1cGVyLmNgLCB0aGVyZSdzIGEgc2l6ZSBjaGVjayBmb3IgYEZJTEVfQXR0ckRlZmAuIEl0J3MgZW5zdXJpbmcgdGhlIHNpemUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgLiBUaGlzIG1ha2VzIHNlbnNlLCBwcmV2ZW50aW5nIGEgemVyby1zaXplZCBvciB0b28tc21hbGwgYWxsb2NhdGlvbiB3aGljaCBjb3VsZCBsZWFkIHRvIHNpbWlsYXIgaXNzdWVzIGxhdGVyLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkNvdWxkIHRoaXMgYmUgYSBLTVNBTiB0aGluZz9cIiBiZWNhdXNlIG91dC1vZi1ib3VuZHMgc3R1ZmYgc29tZXRpbWVzIG92ZXJsYXBzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBgdm9sLVx1MDAzZWF0dHJkZWZgIGlzIGFsbG9jYXRlZCB3aXRoIGBrdnphbGxvY2AgaW4gYHN1cGVyLmNgIHdoaWNoLCBieSBkZWZpbml0aW9uLCBpbml0aWFsaXplcyB0aGUgbWVtb3J5IHRvIHplcm8uIEhvd2V2ZXIsIGl0J3MgYWxzbyBwb3B1bGF0ZWQgZnJvbSB0aGUgZGlzaywgc28gSSBuZWVkZWQgdG8gY2xhcmlmeSBob3cgaXQncyBwb3B1bGF0ZWQuIEkgcmV2aWV3ZWQgYGxvYWRfYW5kX2luaXRfYXR0cmRlZmAgYW5kIGNvbmZpcm1lZCB0aGUgbWVtb3J5IGlzIGxvYWRlZCBmcm9tIGRpc2suXG5cbktBU0FOIGlzIHRoZSB0b29sIHRoYXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBoYXBwZW5zIHdoZW4gdGhlIGxvb3AgY29uZGl0aW9uIGlzIHNhdGlzZmllZCBidXQgdGhlIGxhc3QgYGFkYCBpcyBwYXJ0aWFsbHkgb3V0IG9mIGJvdW5kcy4gVGhlIGxvb3AgaXRlcmF0ZXMgdXAgdG8gYHZvbC1cdTAwM2VhdHRyZGVmX3NpemVgLiBJZiBgaV9zaXplYCAodGhlIGFsbG9jYXRlZCBzaXplKSBpc24ndCBhIG11bHRpcGxlIG9mIGBzaXplb2YoKmFkKWAsIHRoZW4gdGhlIHZlcnkgbGFzdCBpdGVyYXRpb24gY2FuIGJlIHByb2JsZW1hdGljLiBUaGlzIGlzIG5vdyBmaXhlZCBpbiB0aGUgcGF0Y2guXG5cblNvLCBzaW5jZSBpdCdzIGFuIG91dC1vZi1ib3VuZHMgKnJlYWQqLCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBoZXJlLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgbm8gaW5mby1sZWFrYWdlIGNvbmNlcm5zLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhlIHJlYWQsIHdoaWNoIEtNU0FOIHdvdWxkbid0IGNhdGNoLiBLTVNBTiBpcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIGZvciBvdXQtb2YtYm91bmRzLiBUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHNpemUgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYW5kIGl0J3MgZml4ZWQuXG5UaGVyZWZvcmUsIG5vIEtNU0FOIGZ1enppbmcgaXMgbmVlZGVkIGhlcmUuIFRoaXMgaXMgYSBLQVNBTiBpc3N1ZSwgcGxhaW4gYW5kIHNpbXBsZS5cblxuVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZiBOVEZTIGF0dHJpYnV0ZSBkZWZpbml0aW9ucy4gSXQgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyBvdmVyIGB2b2wtXHUwMDNlYXR0cmRlZmAgYW5kIGVuc3VyZXMgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgYHN0cnVjdCBhdHRyX2RlZmAsIHByZXZlbnRpbmcgcGFydGlhbCBzdHJ1Y3R1cmUgcmVhZHMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoaXMgdHlwZSBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpc3N1ZSBpc24ndCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc4LCJPdXRwdXRUb2tlbnMiOjEzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNjowMS42NzU5NDU3MzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBOVEZTIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgYHN0cnVjdCBhdHRyX2RlZmAgYW5kIHRoYXQgdGhlIGxvb3AgaXRlcmF0aW5nIG92ZXIgYHZvbC1cXHUwMDNlYXR0cmRlZmAgZG9lcyBub3QgcmVhZCBhIHBhcnRpYWwgc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gTlRGUyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgIGFuZCB0aGF0IHRoZSBsb29wIGl0ZXJhdGluZyBvdmVyIGB2b2wtXFx1MDAzZWF0dHJkZWZgIGRvZXMgbm90IHJlYWQgYSBwYXJ0aWFsIHN0cnVjdHVyZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowblnhn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 05:00:03 +0000 UTC FinishedAt: 2026-08-26 05:16:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d38ce59d16d53194cf184baa822d5f2ad528b92e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d38ce59d16d53194cf184baa822d5f2ad528b92e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "fffbcf53-2a0c-446d-b451-e053ab8cd306" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_attr_size_bounds_check", "ntfs_attr_add", "ntfs_attr_make_non_resident" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2smIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gTlRGUyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgIGFuZCB0aGF0IHRoZSBsb29wIGl0ZXJhdGluZyBvdmVyIGB2b2wtXHUwMDNlYXR0cmRlZmAgZG9lcyBub3QgcmVhZCBhIHBhcnRpYWwgc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZW5zdXJpbmcgdGhhdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gYXJyYXkgZG9lcyBub3QgZXhjZWVkIHRoZSBhbGxvY2F0ZWQgc2l6ZSBhbmQgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgZW50cnkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IE5URlMgdm9sdW1lcyBhcmUgbW91bnRlZCBhbmQgaG93IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFiNTQwNjQ2OTgzN2QyNDViNWJkYzg2MzVkMTM5MGJhNWIyY2ZmNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNToxNDo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5jIGIvZnMvbnRmcy9hdHRyaWIuY1xuaW5kZXggOTkwYzM5MzdhNTUxNi4uN2QwODE2ZGU3NTYzNCAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvYXR0cmliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvYXR0cmliLmNcbkBAIC0xNzM3LDggJiM0MzsxNzM3LDggQEAgc3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbiBcdHN0cnVjdCBhdHRyX2RlZiAqYWQ7XG4gXG4gXHRXQVJOX09OKCF0eXBlKTtcbi1cdGZvciAoYWQgPSB2b2wtXHUwMDNlYXR0cmRlZjsgKHU4ICopYWQgLSAodTggKil2b2wtXHUwMDNlYXR0cmRlZiBcdTAwM2Ncbi1cdFx0XHR2b2wtXHUwMDNlYXR0cmRlZl9zaXplIFx1MDAyNlx1MDAyNiBhZC1cdTAwM2V0eXBlOyAmIzQzOyYjNDM7YWQpIHtcbiYjNDM7XHRmb3IgKGFkID0gdm9sLVx1MDAzZWF0dHJkZWY7ICh1OCAqKWFkIC0gKHU4ICopdm9sLVx1MDAzZWF0dHJkZWYgXHUwMDNjPVxuJiM0MztcdCAgICAgdm9sLVx1MDAzZWF0dHJkZWZfc2l6ZSAtIChzMzIpc2l6ZW9mKCphZCkgXHUwMDI2XHUwMDI2IGFkLVx1MDAzZXR5cGU7ICYjNDM7JiM0MzthZCkge1xuIFx0XHQvKiBXZSBoYXZlIG5vdCBmb3VuZCBpdCB5ZXQsIGNhcnJ5IG9uIHNlYXJjaGluZy4gKi9cbiBcdFx0aWYgKGxpa2VseShsZTMyX3RvX2NwdShhZC1cdTAwM2V0eXBlKSBcdTAwM2MgbGUzMl90b19jcHUodHlwZSkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuY1xuaW5kZXggY2Q4ZmEyYzEzMzcwMC4uMmZkN2RiNjcyNjFlZiAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9zdXBlci5jXG5AQCAtMTI0MSw5ICYjNDM7MTI0MSw5IEBAIHN0YXRpYyBib29sIGxvYWRfYW5kX2luaXRfYXR0cmRlZihzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbiBcdFx0Z290byBmYWlsZWQ7XG4gXHR9XG4gXHROSW5vU2V0U3BhcnNlRGlzYWJsZWQoTlRGU19JKGlubykpO1xuLVx0LyogVGhlIHNpemUgb2YgRklMRV9BdHRyRGVmIG11c3QgYmUgYWJvdmUgMCBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqL1xuJiM0MztcdC8qIEZJTEVfQXR0ckRlZiBtdXN0IGhvbGQgYXQgbGVhc3Qgb25lIGVudHJ5IGFuZCBmaXQgaW5zaWRlIDMxIGJpdHMuICovXG4gXHRpX3NpemUgPSBpX3NpemVfcmVhZChpbm8pO1xuLVx0aWYgKGlfc2l6ZSBcdTAwM2M9IDAgfHwgaV9zaXplIFx1MDAzZSAweDdmZmZmZmZmKVxuJiM0MztcdGlmIChpX3NpemUgXHUwMDNjIChzNjQpc2l6ZW9mKHN0cnVjdCBhdHRyX2RlZikgfHwgaV9zaXplIFx1MDAzZSAweDdmZmZmZmZmKVxuIFx0XHRnb3RvIGlwdXRfZmFpbGVkO1xuIFx0dm9sLVx1MDAzZWF0dHJkZWYgPSBrdnphbGxvYyhpX3NpemUsIEdGUF9OT0ZTKTtcbiBcdGlmICghdm9sLVx1MDAzZWF0dHJkZWYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2smIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZW5zdXJpbmcgdGhhdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gYXJyYXkgZG9lcyBub3QgZXhjZWVkIHRoZSBhbGxvY2F0ZWQgc2l6ZSBhbmQgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgZW50cnkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IE5URlMgdm9sdW1lcyBhcmUgbW91bnRlZCBhbmQgaG93IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFiNTQwNjQ2OTgzN2QyNDViNWJkYzg2MzVkMTM5MGJhNWIyY2ZmNjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwNToxNDo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMvYXR0cmliLmMgYi9mcy9udGZzL2F0dHJpYi5jCmluZGV4IDk5MGMzOTM3YTU1MTYuLjdkMDgxNmRlNzU2MzQgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvYXR0cmliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9hdHRyaWIuYwpAQCAtMTczNyw4ICYjNDM7MTczNyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cl9kZWYgKm50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsCiAJc3RydWN0IGF0dHJfZGVmICphZDsKIAogCVdBUk5fT04oIXR5cGUpOwotCWZvciAoYWQgPSB2b2wtJmd0O2F0dHJkZWY7ICh1OCAqKWFkIC0gKHU4ICopdm9sLSZndDthdHRyZGVmICZsdDsKLQkJCXZvbC0mZ3Q7YXR0cmRlZl9zaXplICZhbXA7JmFtcDsgYWQtJmd0O3R5cGU7ICYjNDM7JiM0MzthZCkgewomIzQzOwlmb3IgKGFkID0gdm9sLSZndDthdHRyZGVmOyAodTggKilhZCAtICh1OCAqKXZvbC0mZ3Q7YXR0cmRlZiAmbHQ7PQomIzQzOwkgICAgIHZvbC0mZ3Q7YXR0cmRlZl9zaXplIC0gKHMzMilzaXplb2YoKmFkKSAmYW1wOyZhbXA7IGFkLSZndDt0eXBlOyAmIzQzOyYjNDM7YWQpIHsKIAkJLyogV2UgaGF2ZSBub3QgZm91bmQgaXQgeWV0LCBjYXJyeSBvbiBzZWFyY2hpbmcuICovCiAJCWlmIChsaWtlbHkobGUzMl90b19jcHUoYWQtJmd0O3R5cGUpICZsdDsgbGUzMl90b19jcHUodHlwZSkpKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggY2Q4ZmEyYzEzMzcwMC4uMmZkN2RiNjcyNjFlZiAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtMTI0MSw5ICYjNDM7MTI0MSw5IEBAIHN0YXRpYyBib29sIGxvYWRfYW5kX2luaXRfYXR0cmRlZihzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCkKIAkJZ290byBmYWlsZWQ7CiAJfQogCU5Jbm9TZXRTcGFyc2VEaXNhYmxlZChOVEZTX0koaW5vKSk7Ci0JLyogVGhlIHNpemUgb2YgRklMRV9BdHRyRGVmIG11c3QgYmUgYWJvdmUgMCBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqLwomIzQzOwkvKiBGSUxFX0F0dHJEZWYgbXVzdCBob2xkIGF0IGxlYXN0IG9uZSBlbnRyeSBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqLwogCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlubyk7Ci0JaWYgKGlfc2l6ZSAmbHQ7PSAwIHx8IGlfc2l6ZSAmZ3Q7IDB4N2ZmZmZmZmYpCiYjNDM7CWlmIChpX3NpemUgJmx0OyAoczY0KXNpemVvZihzdHJ1Y3QgYXR0cl9kZWYpIHx8IGlfc2l6ZSAmZ3Q7IDB4N2ZmZmZmZmYpCiAJCWdvdG8gaXB1dF9mYWlsZWQ7CiAJdm9sLSZndDthdHRyZGVmID0ga3Z6YWxsb2MoaV9zaXplLCBHRlBfTk9GUyk7CiAJaWYgKCF2b2wtJmd0O2F0dHJkZWYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyB0byBiZSBmb2N1c2luZyBvbiBzb21lIGNydWNpYWwgTlRGUyBkYXRhIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgaGl0dGluZyBgZnMvbnRmcy9hdHRyaWIuY2AgYW5kIGBmcy9udGZzL3N1cGVyLmNgLCB3aGljaCBtYWtlcyBzZW5zZTsgYXR0cmlidXRlcyBhbmQgc3VwZXJibG9jayBkYXRhIGFyZSBjb3JlIHRvIGhvdyBOVEZTIG9wZXJhdGVzLgoKSW4gYGF0dHJpYi5jYCwgdGhlIGNoYW5nZSB0byBgbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZmAgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoaXMgbG9vcCBjb25kaXRpb24gbW9kaWZpY2F0aW9uLCBlbnN1cmluZyBgYWRgIHN0YXlzIHdpdGhpbiBgdm9sLSZndDthdHRyZGVmX3NpemVgLCBzdHJvbmdseSBzdWdnZXN0cyBhIGJvdW5kYXJ5IGNoZWNrIHRvIHByZXZlbnQgcG90ZW50aWFsIGJ1ZmZlciBvdmVycnVucyBvciBvdXQtb2YtYm91bmRzIHJlYWRzIGR1cmluZyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBsb29rdXAuIFRoaXMgaXMgYSBjb21tb24gYW5kIGltcG9ydGFudCB2dWxuZXJhYmlsaXR5IHRvIGFkZHJlc3MuIEl0JiMzOTtzIGEgY2xlYW4sIHRhcmdldGVkIGZpeCwgbGlrZWx5IHRvIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGZpbGUgc3lzdGVtLgoKVGhlbiB3ZSYjMzk7cmUgc2VlaW5nIGEgdHdlYWsgdG8gYGZzL250ZnMvc3VwZXIuY2Agd2l0aGluIGBsb2FkX2FuZF9pbml0X2F0dHJkZWZgLiBUaGUgYGlfc2l6ZWAgY2hlY2sgdG8gY29uZmlybSB0aGF0IGl0IGhvbGRzIGF0IGxlYXN0IG9uZSBlbnRyeSAoYHNpemVvZihzdHJ1Y3QgYXR0cl9kZWYpYCkgaXMgYW5vdGhlciBsb2dpY2FsIGJvdW5kYXJ5IGNoZWNrLiBUaGlzIHByZXZlbnRzIGluaXRpYWxpemF0aW9uIGVycm9ycyB3aGVuIGxvYWRpbmcgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIHRhYmxlIGZyb20gdGhlIHZvbHVtZS4gSXQgbWFrZXMgc2Vuc2UgdG8gZW5mb3JjZSB0aGlzIG1pbmltdW0gc2l6ZSBiZWNhdXNlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGlzIHZhbGlkIGJlZm9yZSB1c2luZyBpdC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE5URlMgaW4gYGZzL250ZnMvS2NvbmZpZ2AuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aCBhbnkgcGFydGljdWxhciBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBJJiMzOTttIGN1cmlvdXMgaWYgdGhlcmUmIzM5O3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgdGhpcyBmaXggaXMgYXBwbGllZCBvciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gdGhpcyBpbXByb3ZlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgYnJvYWRlciBOVEZTIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnLTEyLVxuZnMvbnRmcy9LY29uZmlnOjEzOmNvbmZpZyBOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTlxuZnMvbnRmcy9LY29uZmlnLTE0LVx0Ym9vbCBcJiMzNDtOVEZTIFdpbmRvd3Mgc3lzdGVtIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9udGZzL0tjb25maWc9MjQ9Y29uZmlnIE5URlNfREVCVUdcbi0tXG5mcy9udGZzL0tjb25maWctNDUtXG5mcy9udGZzL0tjb25maWc6NDY6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXG5mcy9udGZzL0tjb25maWctNDctXHRib29sIFwmIzM0O05URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlRGUyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBOVEZTX0ZTYC4gUmlnaHQsIGJ1dCBoYW5nIG9uLCBJIGFsc28gc2VlIGBOVEZTM19GU2AgaW4gYGZzL250ZnMzL0tjb25maWdgLiBUaGlzIHBhdGNoLCBob3dldmVyLCBpcyBtb2RpZnlpbmcgZmlsZXMgaW4gdGhlIGBmcy9udGZzL2AgZGlyZWN0b3J5LiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgZnMvbnRmcy9gIGlzIHN0aWxsIGFjdGl2ZWx5IG1haW50YWluZWQgd2l0aGluIHRoZSB0cmVlIG9yIGlmIGl0JiMzOTtzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgTlRGUzNgLiBHaXZlbiB0aGUgZmlsZSBwYXRocyBpbnZvbHZlZCwgaXQmIzM5O3MgY2xlYXIgYGZzL250ZnMvYCByZXByZXNlbnRzIHRoZSAqb2xkZXIqIE5URlMgZHJpdmVyLiBUaW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gTGV0IG1lIGNoZWNrIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQ6IGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYCBhbmQgYGxvYWRfYW5kX2luaXRfYXR0cmRlZmAgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTE3MTM9dm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0xNzI0LS8qXG5mcy9udGZzL2F0dHJpYi5jOjE3MjU6ICogbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZiAtIGZpbmQgYW4gYXR0cmlidXRlIGluIHRoZSAkQXR0ckRlZiBzeXN0ZW0gZmlsZVxuZnMvbnRmcy9hdHRyaWIuYy0xNzI2LSAqIEB2b2w6XHRudGZzIHZvbHVtZSB0byB3aGljaCB0aGUgYXR0cmlidXRlIGJlbG9uZ3Ncbi0tXG5mcy9udGZzL2F0dHJpYi5jLTE3MzMtICovXG5mcy9udGZzL2F0dHJpYi5jOjE3MzQ6c3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbmZzL250ZnMvYXR0cmliLmMtMTczNS1cdFx0Y29uc3QgX19sZTMyIHR5cGUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYz0xNzY2PWludCBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2soY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNvbnN0IF9fbGUzMiB0eXBlLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtMTc4MC1cdC8qIEdldCB0aGUgJEF0dHJEZWYgZW50cnkgZm9yIHRoZSBhdHRyaWJ1dGUgQHR5cGUuICovXG5mcy9udGZzL2F0dHJpYi5jOjE3ODE6XHRhZCA9IG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYodm9sLCB0eXBlKTtcbmZzL250ZnMvYXR0cmliLmMtMTc4Mi1cdGlmICh1bmxpa2VseSghYWQpKVxuLS1cbmZzL250ZnMvYXR0cmliLmM9MTgwMT1zdGF0aWMgaW50IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtMTgwNi1cdC8qIEZpbmQgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIHJlY29yZCBpbiAkQXR0ckRlZi4gKi9cbmZzL250ZnMvYXR0cmliLmM6MTgwNzpcdGFkID0gbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZih2b2wsIHR5cGUpO1xuZnMvbnRmcy9hdHRyaWIuYy0xODA4LVx0aWYgKHVubGlrZWx5KCFhZCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBOVEZTIEF0dHJpYnV0ZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IE5URlMgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgZnVuY3Rpb24gY2FsbGVkIGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBsaW1pdHMgaXRzIHNjb3BlLCBtYWtpbmcgaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzICp1c2VkKi4gVGhlIHRleHQgbWVudGlvbnMgaXQmIzM5O3MgY2FsbGVkIGJ5IGBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2tgIGFuZCBgbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnRgLiBUaG9zZSBuYW1lcyBhcmUgcHJldHR5IGRlc2NyaXB0aXZlOyB0aGV5IGhpbnQgYXQgYXR0cmlidXRlIHNpemUgdmFsaWRhdGlvbiBhbmQgZGV0ZXJtaW5pbmcgaWYgYW4gYXR0cmlidXRlIGNhbiBiZSBzdG9yZWQgYXMgbm9uLXJlc2lkZW50IGRhdGEuIENsZWFybHksIGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYCBtdXN0IHBsYXkgYSByb2xlIGluIGZpbmRpbmcgYW5kIHBvdGVudGlhbGx5IHZhbGlkYXRpbmcgYXR0cmlidXRlIGRlZmluaXRpb25zIHdpdGhpbiB0aGUgTlRGUyBtZXRhZGF0YSBzdHJ1Y3R1cmVzLgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJpZ2dlciBwaWN0dXJlLCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgb3V0IGBsb2FkX2FuZF9pbml0X2F0dHJkZWZgLiBVbmRlcnN0YW5kaW5nIGhvdyBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgYXJlIGxvYWRlZCBhbmQgaW5pdGlhbGl6ZWQgd2lsbCBnaXZlIG1lIHZpdGFsIGNvbnRleHQgZm9yIHdoYXQgYG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWZgIGlzIGFjdHVhbGx5ICpkb2luZyouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9hZF9hbmRfaW5pdF9hdHRyZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9zdXBlci5jPTExMzg9c3RhdGljIGludCBjaGVja193aW5kb3dzX2hpYmVybmF0aW9uX3N0YXR1cyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcbi0tXG5mcy9udGZzL3N1cGVyLmMtMTIxOS0vKlxuZnMvbnRmcy9zdXBlci5jOjEyMjA6ICogbG9hZF9hbmRfaW5pdF9hdHRyZGVmIC0gbG9hZCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb25zIHRhYmxlIGZvciBhIHZvbHVtZVxuZnMvbnRmcy9zdXBlci5jLTEyMjEtICogQHZvbDpcdG50ZnMgc3VwZXIgYmxvY2sgZGVzY3JpYmluZyBkZXZpY2Ugd2hvc2UgYXR0cmRlZiB0byBsb2FkXG4tLVxuZnMvbnRmcy9zdXBlci5jLTEyMjQtICovXG5mcy9udGZzL3N1cGVyLmM6MTIyNTpzdGF0aWMgYm9vbCBsb2FkX2FuZF9pbml0X2F0dHJkZWYoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG5mcy9udGZzL3N1cGVyLmMtMTIyNi17XG4tLVxuZnMvbnRmcy9zdXBlci5jPTEzOTk9c3RhdGljIGJvb2wgbG9hZF9zeXN0ZW1fZmlsZXMoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE0MzktXHQgKi9cbmZzL250ZnMvc3VwZXIuYzoxNDQwOlx0aWYgKCFsb2FkX2FuZF9pbml0X2F0dHJkZWYodm9sKSlcbmZzL250ZnMvc3VwZXIuYy0xNDQxLVx0XHRnb3RvIGlwdXRfdXBjYXNlX2Vycl9vdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIE5URlMgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBOVEZTIGZpbGUgc3lzdGVtIGNvZGUsIGFuZCBJJiMzOTt2ZSBnb3QgYSBkZWNlbnQgZ3Jhc3Agb24gdGhlIGluaXRpYWxpemF0aW9uIGZsb3cuIGBudGZzX2ZpbGxfc3VwZXJgIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludDsgaXQmIzM5O3MgdGhlIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkLiBJIGtub3cgdGhhdCBgbG9hZF9zeXN0ZW1fZmlsZXNgIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRoZSBjb3JlIHN5c3RlbSBmaWxlcywgYW5kIHRoYXQgZnVuY3Rpb24sIGluIHR1cm4sIGNhbGxzIGBsb2FkX2FuZF9pbml0X2F0dHJkZWZgLiBTaW5jZSBgbnRmc19maWxsX3N1cGVyYCBpcyBhdCB0aGUgdG9wIG9mIHRoZSBjaGFpbiwgdGhhdCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgcGxhY2UgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGZvciBub3cuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIHJvb3Qgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGFuZCB3aGVyZSBJIGNhbiBnYWluIHRoZSBtb3N0IGluc2lnaHQgaW5pdGlhbGx5LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYm91bmRzIG9mIHRob3NlIGNhbGxzLiBJIHdhcyBzbyBmb2N1c2VkIG9uIHRoZSBjYWxsIGNoYWluLCB0aGF0IEkgZGlkbiYjMzk7dCBzdG9wIHRvIGV4YW1pbmUgd2hhdCBmdW5jdGlvbnMgYG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVja2AgYW5kIGBudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudGAgYXJlIGV2ZW4gY2FsbGVkIGJ5ISBJIG5lZWQgdG8gZXhwYW5kIHRoZSBzY29wZSBhbmQgdW5kZXJzdGFuZCB0aGVpciBwbGFjZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgZG93biB0aGlzIHNwZWNpZmljIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvYXR0cmliLmM9MTczND1zdGF0aWMgc3RydWN0IGF0dHJfZGVmICpudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtMTc1Ny0vKlxuZnMvbnRmcy9hdHRyaWIuYzoxNzU4OiAqIG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayAtIGNoZWNrIGEgc2l6ZSBvZiBhbiBhdHRyaWJ1dGUgdHlwZSBmb3IgdmFsaWRpdHlcbmZzL250ZnMvYXR0cmliLmMtMTc1OS0gKiBAdm9sOlx0bnRmcyB2b2x1bWUgdG8gd2hpY2ggdGhlIGF0dHJpYnV0ZSBiZWxvbmdzXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0xNzY1LSAqL1xuZnMvbnRmcy9hdHRyaWIuYzoxNzY2OmludCBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2soY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIGNvbnN0IF9fbGUzMiB0eXBlLFxuZnMvbnRmcy9hdHRyaWIuYy0xNzY3LVx0XHRjb25zdCBzNjQgc2l6ZSlcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTI3ODk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI4MTAtXHQvKiBDaGVjayB0aGUgYXR0cmlidXRlIHR5cGUgYW5kIHRoZSBzaXplLiAqL1xuZnMvbnRmcy9hdHRyaWIuYzoyODExOlx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKG5pLVx1MDAzZXZvbCwgdHlwZSwgc2l6ZSk7XG5mcy9udGZzL2F0dHJpYi5jLTI4MTItXHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00MTk3PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmsoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSlcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTQyMTktXHQgKi9cbmZzL250ZnMvYXR0cmliLmM6NDIyMDpcdGVyciA9IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayh2b2wsIG5pLVx1MDAzZXR5cGUsIG5ld3NpemUpO1xuZnMvbnRmcy9hdHRyaWIuYy00MjIxLVx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvYXR0cmliLmM9NDM3ND1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00NDAyLVx0ICovXG5mcy9udGZzL2F0dHJpYi5jOjQ0MDM6XHRlcnIgPSBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sodm9sLCBuaS1cdTAwM2V0eXBlLCBuZXdzaXplKTtcbmZzL250ZnMvYXR0cmliLmMtNDQwNC1cdGlmIChlcnJcdFx1MDAzYyAwKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00NjQwPXN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpemUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00Njc2LVx0ICovXG5mcy9udGZzL2F0dHJpYi5jOjQ2Nzc6XHRlcnIgPSBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sodm9sLCBhdHRyX25pLVx1MDAzZXR5cGUsIG5ld3NpemUpO1xuZnMvbnRmcy9hdHRyaWIuYy00Njc4LVx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvYXR0cmliLmg9OTE9dm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xuZnMvbnRmcy9hdHRyaWIuaDo5MjppbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuZnMvbnRmcy9hdHRyaWIuaC05My1cdFx0Y29uc3QgX19sZTMyIHR5cGUsIGNvbnN0IHM2NCBzaXplKTtcbi0tXG5mcy9udGZzL2VhLmM9MTg5PXN0YXRpYyBpbnQgbnRmc19zZXRfZWEoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLFxuLS1cbmZzL250ZnMvZWEuYy0yNjUtXHRcdGlmICh2YWxfc2l6ZSBcdTAwMjZcdTAwMjZcbmZzL250ZnMvZWEuYzoyNjY6XHRcdCAgICBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXHUwMDNldm9sLCBBVF9FQSxcbmZzL250ZnMvZWEuYy0yNjctXHRcdFx0XHRcdGVhX2luZm9fcXNpemUgLSBlYV9zaXplICYjNDM7IG5ld19lYV9zaXplKSkge1xuLS1cbmZzL250ZnMvZWEuYy0zMjktXG5mcy9udGZzL2VhLmM6MzMwOlx0XHRpZiAobnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKG5pLVx1MDAzZXZvbCwgQVRfRUEsXG5mcy9udGZzL2VhLmMtMzMxLVx0XHRcdFx0XHRlYV9pbmZvX3FzaXplICYjNDM7IG5ld19lYV9zaXplKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDA4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuCgoqKkluaXRpYWwgQXNzZXNzbWVudDogTlRGUyBBdHRyaWJ1dGUgTWFuaXB1bGF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSBgbnRmc19hdHRyX2FkZGAsIGBudGZzX25vbl9yZXNpZGVudF9hdHRyX3Nocmlua2AsIGBudGZzX25vbl9yZXNpZGVudF9hdHRyX2V4cGFuZGAsIGBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplYCwgYW5kIGBudGZzX3NldF9lYWAuIFRoZXNlIGFyZSBhbGwga2V5IGZ1bmN0aW9ucywgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBOVEZTIGF0dHJpYnV0ZSBtYW5hZ2VtZW50LiBJIHJlY29nbml6ZSB0aGVtIGltbWVkaWF0ZWx5LiBUaGV5JiMzOTtyZSBsaWtlIHNpZ25wb3N0cyBwb2ludGluZyB0byB0aGUgY29yZSBtZWNoYW5pc21zIG9mIGhvdyBmaWxlIGRhdGEsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGFuZCBtZXRhZGF0YSBhcmUgc3RvcmVkIGFuZCBtb2RpZmllZCB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtLiBUaGVzZSBkZWZpbml0ZWx5IHdhcnJhbnQgbXkgZm9jdXNlZCBhdHRlbnRpb24uCgpCdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gYG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50YC4gVGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBvbmUuIFdoYXQgY2FsbHMgKnRoYXQqIGZ1bmN0aW9uPyBJdHMgcmV0dXJuIHZhbHVlIGRldGVybWluZXMgaWYgYW4gYXR0cmlidXRlIGNhbiBiZSBzdG9yZWQgaW5saW5lIHdpdGggdGhlIE1GVCBlbnRyeSBvciBpZiBpdCBuZWVkcyB0byBiZSBzdG9yZWQgb3V0LW9mLWxpbmUgKG5vbi1yZXNpZGVudCkuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsLCBhcyB0aGV5IGRldGVybWluZSB0aGUgY3JpdGVyaWEgZm9yIGRhdGEgcGxhY2VtZW50IGRlY2lzaW9ucy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBjb25uZWN0ZWQgdG8uIFRoZSBjb250ZXh0IHN1cnJvdW5kaW5nICp0aGF0KiBjYWxsIGlzIHZlcnkgaW1wb3J0YW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRlY2lzaW9uIHBvaW50cyBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvYXR0cmliLmM9MTc2Nj1pbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMzIgdHlwZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTE3OTMtLypcbmZzL250ZnMvYXR0cmliLmM6MTc5NDogKiBudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudCAtIGNoZWNrIGlmIGFuIGF0dHJpYnV0ZSBjYW4gYmUgbm9uLXJlc2lkZW50XG5mcy9udGZzL2F0dHJpYi5jLTE3OTUtICogQHZvbDpcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xuLS1cbmZzL250ZnMvYXR0cmliLmMtMTgwMC0gKi9cbmZzL250ZnMvYXR0cmliLmM6MTgwMTpzdGF0aWMgaW50IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuZnMvbnRmcy9hdHRyaWIuYy0xODAyLVx0XHRjb25zdCBfX2xlMzIgdHlwZSlcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTE5Mzg9aW50IG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHUzMiBkYXRhX3NpemUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0xOTYwLVx0LyogQ2hlY2sgdGhhdCB0aGUgYXR0cmlidXRlIGlzIGFsbG93ZWQgdG8gYmUgbm9uLXJlc2lkZW50LiAqL1xuZnMvbnRmcy9hdHRyaWIuYzoxOTYxOlx0ZXJyID0gbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQodm9sLCBuaS1cdTAwM2V0eXBlKTtcbmZzL250ZnMvYXR0cmliLmMtMTk2Mi1cdGlmICh1bmxpa2VseShlcnIpKSB7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz0yNTE2PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0yNTM0LVxuZnMvbnRmcy9hdHRyaWIuYzoyNTM1Olx0ZXJyID0gbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQobmktXHUwMDNldm9sLCB0eXBlKTtcbmZzL250ZnMvYXR0cmliLmMtMjUzNi1cdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI1MzktXHRcdGVsc2VcbmZzL250ZnMvYXR0cmliLmM6MjU0MDpcdFx0XHRwcl9lcnIoXCYjMzQ7bnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQgZmFpbGVkXFxuXCYjMzQ7KTtcbmZzL250ZnMvYXR0cmliLmMtMjU0MS1cdFx0cmV0dXJuIGVycjtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTI3ODk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI4MTktXHQvKiBTYW5pdHkgY2hlY2tzIGZvciBhbHdheXMgcmVzaWRlbnQgYXR0cmlidXRlcy4gKi9cbmZzL250ZnMvYXR0cmliLmM6MjgyMDpcdGVyciA9IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KG5pLVx1MDAzZXZvbCwgdHlwZSk7XG5mcy9udGZzL2F0dHJpYi5jLTI4MjEtXHRpZiAoZXJyKSB7XG5mcy9udGZzL2F0dHJpYi5jLTI4MjItXHRcdGlmIChlcnIgIT0gLUVQRVJNKSB7XG5mcy9udGZzL2F0dHJpYi5jOjI4MjM6XHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7bnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQgZmFpbGVkXCYjMzQ7KTtcbmZzL250ZnMvYXR0cmliLmMtMjgyNC1cdFx0XHRnb3RvIGVycl9vdXQ7XG4tLVxuZnMvbnRmcy9hdHRyaWIuYz00NjQwPXN0YXRpYyBpbnQgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZShzdHJ1Y3QgbnRmc19pbm9kZSAqYXR0cl9uaSwgY29uc3QgczY0IG5ld3NpemUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00NzM1LVxuZnMvbnRmcy9hdHRyaWIuYzo0NzM2Olx0XHRpZiAobnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQodm9sLCBhLVx1MDAzZXR5cGUpKVxuZnMvbnRmcy9hdHRyaWIuYy00NzM3LVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTlRGUyBBdHRyaWJ1dGUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIE5URlMgYXR0cmlidXRlIG1hbmFnZW1lbnQgaGVyZS4gVGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBmb2N1c2luZyBvbiBhcmUgYG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudGAsIGBudGZzX2F0dHJfYWRkYCwgYW5kIGBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplYC4gVGhleSYjMzk7cmUgY29yZSB0byBob3cgYXR0cmlidXRlcywgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBOVEZTIGZpbGVzLCBhcmUgaGFuZGxlZCBpbiB2YXJpb3VzIHN0YXRlcy4KCkkgc3VzcGVjdCB0aGF0IHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgaW50byB0aGlzIGF0dHJpYnV0ZSBtYW5pcHVsYXRpb24gcmVhbG0gYXJlIGEgYml0IGJyb2FkZXIgdGhhbiBqdXN0IHRob3NlLCB0aG91Z2guIEkgbmVlZCB0byBrZWVwIG15IGV5ZSBvbiBgbnRmc19maWxsX3N1cGVyYCwgYG50ZnNfYXR0cl9hZGRgLCBgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50YCwgYG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemVgLCBhbmQgdGhlIGxlc3Mgb2J2aW91cyBmdW5jdGlvbnMgb2YgYG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rYCwgYG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfZXhwYW5kYCwgYW5kIGBudGZzX3NldF9lYWAuIEkmIzM5O20gZXNzZW50aWFsbHkgb3V0bGluaW5nIHRoZSBwcm9jZXNzIG9mIGhvdyBhdHRyaWJ1dGVzIGdldCBjcmVhdGVkLCBtb2RpZmllZCwgYW5kIHRyYW5zaXRpb25lZCBiZXR3ZWVuIHJlc2lkZW50IGFuZCBub24tcmVzaWRlbnQgc3RhdGVzLCBpbmNsdWRpbmcgaG93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIHNocmlua2luZyBvciBncm93aW5nIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGVzIGFyZSBhZGRyZXNzZWQuCgpUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBudGZzX2ZpbGxfc3VwZXJgLiBJdCBpcyBsaWtlbHkgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgc3VwZXJibG9jayBpbnRlcmFjdHMgd2l0aCBhbGwgdGhlc2UgYXR0cmlidXRlcy4gRnJvbSB0aGVyZSwgSSBjYW4gaG9wZWZ1bGx5IHRyYWNlIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHZhcmlvdXMgYXR0cmlidXRlLXJlbGF0ZWQgdGFza3MgYXJlIGludGVncmF0ZWQuIExldCYjMzk7cyBzZWUgaWYgdGhhdCBpbml0aWFsIGNoZWNrIGNsYXJpZmllcyB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfZmlsbF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYz0yMTg0PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbnRmc19tZnRfaW52YWxfbG9ja19rZXk7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTIxODYtLypcbmZzL250ZnMvc3VwZXIuYzoyMTg3OiAqIG50ZnNfZmlsbF9zdXBlciAtIG1vdW50IGFuIG50ZnMgZmlsZXN5c3RlbVxuZnMvbnRmcy9zdXBlci5jLTIxODgtICogQHNiOiBzdXBlciBibG9jayBvZiB0aGUgZGV2aWNlIHRvIG1vdW50XG4tLVxuZnMvbnRmcy9zdXBlci5jLTIxOTAtICpcbmZzL250ZnMvc3VwZXIuYzoyMTkxOiAqIG50ZnNfZmlsbF9zdXBlcigpIGlzIGNhbGxlZCBieSB0aGUgVkZTIHRvIG1vdW50IHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IEBzYlxuZnMvbnRmcy9zdXBlci5jLTIxOTItICogd2l0aCB0aGUgbW91bnQgb3Rpb25zIGluIEBkYXRhIHdpdGggdGhlIE5URlMgZmlsZXN5c3RlbS5cbi0tXG5mcy9udGZzL3N1cGVyLmMtMjIwMC0gKi9cbmZzL250ZnMvc3VwZXIuYzoyMjAxOnN0YXRpYyBpbnQgbnRmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL250ZnMvc3VwZXIuYy0yMjAyLXtcbi0tXG5mcy9udGZzL3N1cGVyLmM9MjUxNj1zdGF0aWMgaW50IG50ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvbnRmcy9zdXBlci5jLTI1MTcte1xuZnMvbnRmcy9zdXBlci5jOjI1MTg6XHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgbnRmc19maWxsX3N1cGVyKTtcbmZzL250ZnMvc3VwZXIuYy0yNTE5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODExNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgZW50cnkgcG9pbnQgZm9yIG1vdW50aW5nIGlzIGRlZmluaXRlbHkgYG50ZnNfZmlsbF9zdXBlcmAuIFRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LCBzcGVjaWZpY2FsbHkgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHdyaXRlIHdpdGhpbiB0aGUgYG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWZgIGZ1bmN0aW9uLiBUaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgbWFraW5nIHN1cmUgdGhhdCB0aGUgYGFkYCBwb2ludGVyIGRvZXNuJiMzOTt0IGdvIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBidWZmZXIgKGB2b2wtJmd0O2F0dHJkZWZfc2l6ZSAtIHNpemVvZigqYWQpYCkgZHVyaW5nIGxvb2t1cC4gQW5kLCBzaW1pbGFybHksIHRoYXQgYGxvYWRfYW5kX2luaXRfYXR0cmRlZmAgZ3VhcmFudGVlcyB0aGUgaW5vZGUmIzM5O3Mgc2l6ZSAoYGlfc2l6ZWApIGlzIGF0IGxlYXN0IGJpZyBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhlIGBzdHJ1Y3QgYXR0cl9kZWZgIHN0cnVjdHVyZS4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsbHkgZHJpdmVuIGNoYW5nZSB0aGF0IHNob3VsZCBlbGltaW5hdGUgYSBwb3NzaWJsZSBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSXMgYE5URlNfRlNgIHRoZSBvbmx5IHJlcXVpcmVkIG9wdGlvbj8gWWVwLCBqdXN0IGBOVEZTX0ZTYCwgbm90aGluZyBlbHNlIG5lZWRlZC4KCkZpbmFsbHksIEkgc2hvdWxkIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgbnRmc19hdHRyX2FkZGAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfYXR0cl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTI2NTI9aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0yNzYzLS8qXG5mcy9udGZzL2F0dHJpYi5jOjI3NjQ6ICogbnRmc19hdHRyX2FkZCAtIGFkZCBhdHRyaWJ1dGUgdG8gaW5vZGVcbmZzL250ZnMvYXR0cmliLmMtMjc2NS0gKiBAbmk6XHRcdG9wZW5lZCBudGZzIGlub2RlIHRvIHdoaWNoIGFkZCBhdHRyaWJ1dGVcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTI3ODgtICovXG5mcy9udGZzL2F0dHJpYi5jOjI3ODk6aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcbmZzL250ZnMvYXR0cmliLmMtMjc5MC1cdFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgdTggKnZhbCwgczY0IHNpemUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuaD0xMjM9aW50IG50ZnNfYXR0cl9yZWNvcmRfbW92ZV90byhzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pKTtcbmZzL250ZnMvYXR0cmliLmg6MTI0OmludCBudGZzX2F0dHJfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG5mcy9udGZzL2F0dHJpYi5oLTEyNS1cdFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgdTggKnZhbCwgczY0IHNpemUpO1xuLS1cbmZzL250ZnMvZWEuYz0xODk9c3RhdGljIGludCBudGZzX3NldF9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sXG4tLVxuZnMvbnRmcy9lYS5jLTIyOC1cdFx0ZWFfaW5mb19xc2l6ZSA9IDA7XG5mcy9udGZzL2VhLmM6MjI5Olx0XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9FQV9JTkZPUk1BVElPTiwgQVRfVU5OQU1FRCwgMCxcbmZzL250ZnMvZWEuYy0yMzAtXHRcdFx0XHQoY2hhciAqKXBfZWFfaW5mbywgc2l6ZW9mKHN0cnVjdCBlYV9pbmZvcm1hdGlvbikpO1xuLS1cbmZzL250ZnMvZWEuYy0yOTYtXHRcdFx0XHQvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCAkRUEgaWYgJEVBX0lORk9STUFUSU9OIHJlbW92YWwgZmFpbGVkLiAqL1xuZnMvbnRmcy9lYS5jOjI5NzpcdFx0XHRcdG50ZnNfYXR0cl9hZGQobmksIEFUX0VBLCBBVF9VTk5BTUVELCAwLCBvbGRfZWFfYnVmLFxuZnMvbnRmcy9lYS5jLTI5OC1cdFx0XHRcdFx0ICAgICAgYWxsX2VhX3NpemUpO1xuLS1cbmZzL250ZnMvZWEuYy0zNzItXHRpZiAoIW50ZnNfYXR0cl9leGlzdChuaSwgQVRfRUEsIEFUX1VOTkFNRUQsIDApKSB7XG5mcy9udGZzL2VhLmM6MzczOlx0XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9FQSwgQVRfVU5OQU1FRCwgMCwgZWFfYnVmLFxuZnMvbnRmcy9lYS5jLTM3NC1cdFx0XHRcdGVhX2luZm9fcXNpemUgJiM0MzsgbmV3X2VhX3NpemUpO1xuLS1cbmZzL250ZnMvaW5kZXguYz0xMDE0PXN0YXRpYyBpbnQgbnRmc19pYm1fYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTAyNi1cdG1lbXNldChibXAsIDAsIHNpemVvZihibXApKTtcbmZzL250ZnMvaW5kZXguYzoxMDI3Olx0cmV0ID0gbnRmc19hdHRyX2FkZChpY3gtXHUwMDNlaWR4X25pLCBBVF9CSVRNQVAsIGljeC1cdTAwM2VuYW1lLCBpY3gtXHUwMDNlbmFtZV9sZW4sXG5mcy9udGZzL2luZGV4LmMtMTAyOC1cdFx0XHQgICAgYm1wLCBzaXplb2YoYm1wKSk7XG4tLVxuZnMvbnRmcy9pbmRleC5jPTEyNTQ9c3RhdGljIGludCBudGZzX2lhX2FkZChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG4tLVxuZnMvbnRmcy9pbmRleC5jLTEyNjQtXHRpZiAoIW50ZnNfYXR0cl9leGlzdChpY3gtXHUwMDNlaWR4X25pLCBBVF9JTkRFWF9BTExPQ0FUSU9OLCBpY3gtXHUwMDNlbmFtZSwgaWN4LVx1MDAzZW5hbWVfbGVuKSkge1xuZnMvbnRmcy9pbmRleC5jOjEyNjU6XHRcdHJldCA9IG50ZnNfYXR0cl9hZGQoaWN4LVx1MDAzZWlkeF9uaSwgQVRfSU5ERVhfQUxMT0NBVElPTiwgaWN4LVx1MDAzZW5hbWUsXG5mcy9udGZzL2luZGV4LmMtMTI2Ni1cdFx0XHRcdFx0aWN4LVx1MDAzZW5hbWVfbGVuLCBOVUxMLCAwKTtcbi0tXG5mcy9udGZzL25hbWVpLmM9MzMwPXN0YXRpYyBpbnQgbnRmc19zZF9hZGRfZXZlcnlvbmUoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuLS1cbmZzL250ZnMvbmFtZWkuYy0zODQtXG5mcy9udGZzL25hbWVpLmM6Mzg1Olx0cmV0ID0gbnRmc19hdHRyX2FkZChuaSwgQVRfU0VDVVJJVFlfREVTQ1JJUFRPUiwgQVRfVU5OQU1FRCwgMCwgKHU4ICopc2QsXG5mcy9udGZzL25hbWVpLmMtMzg2LVx0XHRcdHNkX2xlbik7XG4tLVxuZnMvbnRmcy9uYW1laS5jPTM5ND1zdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy01MzgtXHQvKiBBZGQgU1RBTkRBUkRfSU5GT1JNQVRJT04gdG8gaW5vZGUuICovXG5mcy9udGZzL25hbWVpLmM6NTM5Olx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfU1RBTkRBUkRfSU5GT1JNQVRJT04sIEFUX1VOTkFNRUQsIDAsICh1OCAqKXNpLFxuZnMvbnRmcy9uYW1laS5jLTU0MC1cdFx0XHRzaV9sZW4pO1xuLS1cbmZzL250ZnMvbmFtZWkuYy01ODEtXHRcdC8qIEFkZCBzdHJ1Y3QgaW5kZXhfcm9vdCBhdHRyaWJ1dGUgdG8gaW5vZGUuICovXG5mcy9udGZzL25hbWVpLmM6NTgyOlx0XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9JTkRFWF9ST09ULCBJMzAsIDQsICh1OCAqKWlyLCBpcl9sZW4pO1xuZnMvbnRmcy9uYW1laS5jLTU4My1cdFx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvbmFtZWkuYy01OTMtXHRcdC8qIEFkZCBEQVRBIGF0dHJpYnV0ZSB0byBpbm9kZS4gKi9cbmZzL250ZnMvbmFtZWkuYzo1OTQ6XHRcdGVyciA9IG50ZnNfYXR0cl9hZGQobmksIEFUX0RBVEEsIEFUX1VOTkFNRUQsIDAsIE5VTEwsIDApO1xuZnMvbnRmcy9uYW1laS5jLTU5NS1cdFx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvbmFtZWkuYy02NjAtXHQvKiBBZGQgRklMRV9OQU1FIGF0dHJpYnV0ZSB0byBpbm9kZS4gKi9cbmZzL250ZnMvbmFtZWkuYzo2NjE6XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9GSUxFX05BTUUsIEFUX1VOTkFNRUQsIDAsICh1OCAqKWZuLCBmbl9sZW4pO1xuZnMvbnRmcy9uYW1laS5jLTY2Mi1cdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL25hbWVpLmM9MTE0Nj1zdGF0aWMgaW50IF9fbnRmc19saW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG50ZnNfaW5vZGUgKmRpcl9uaSxcbi0tXG5mcy9udGZzL25hbWVpLmMtMTIyMC1cdC8qIEFkZCBGSUxFX05BTUUgYXR0cmlidXRlIHRvIGlub2RlLiAqL1xuZnMvbnRmcy9uYW1laS5jOjEyMjE6XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9GSUxFX05BTUUsIEFUX1VOTkFNRUQsIDAsICh1OCAqKWZuLCBmbl9sZW4pO1xuZnMvbnRmcy9uYW1laS5jLTEyMjItXHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmcy9yZXBhcnNlLmM9NjkxPXN0YXRpYyBpbnQgbnRmc19zZXRfbnRmc19yZXBhcnNlX2RhdGEoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjaGFyICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4tLVxuZnMvbnRmcy9yZXBhcnNlLmMtNzI2LVxuZnMvbnRmcy9yZXBhcnNlLmM6NzI3Olx0XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9SRVBBUlNFX1BPSU5ULCBBVF9VTk5BTUVELCAwLCAodTggKilcdTAwMjZycCwgc2l6ZW9mKHJwKSk7XG5mcy9udGZzL3JlcGFyc2UuYy03MjgtXHRcdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIE5URlMgQ29kZSAtIFBvdGVudGlhbCBFbnRyeSBQb2ludHMgYW5kIFNjb3BlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE5URlMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYW5kIGhvdyB0aGluZ3MgYXJlIHN0cnVjdHVyZWQuIEZpcnN0LCBJIG5vdGljZSB0aGF0IGBudGZzX2F0dHJfYWRkYCBhbmQgYG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudGAgYXJlICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSB1c2VmdWw7IGl0IHRlbGxzIG1lIHRoZXkmIzM5O3JlIHByb2JhYmx5IGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlLCB3aGljaCBtZWFucyB0aGV5IG1pZ2h0IGJlIGludGVyZXN0aW5nIGFzIHBvdGVudGlhbCBzeW1ib2xzIHRvIHRyYWNlIG9yIGFuYWx5emUgZnVydGhlciBkb3duIHRoZSBsaW5lLCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0LgoKVGhlbiBJIHNlZSBgbnRmc19maWxsX3N1cGVyYC4gQWgsIGl0ICppcyogc3RhdGljISBOb3csIHRoYXQgaW5pdGlhbGx5IG1ha2VzIGl0IGxlc3MgYXBwZWFsaW5nIGFzIGEgbWFpbiBmb2N1cywgc2luY2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBsaW1pdGVkIGluIHRoZWlyIHNjb3BlLiBCdXQgd2FpdCBhIHNlY29uZC4uLiBgbnRmc19maWxsX3N1cGVyYCBpcyB0aGUgbW91bnQgZW50cnkgcG9pbnQsIGlzbiYjMzk7dCBpdD8gVGhhdCBtZWFucyBpdCYjMzk7cyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgKmhvdyogdGhlIGZpbGVzeXN0ZW0gaXMgYnJvdWdodCB1cC4gRXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyB0aGUgZ2F0ZXdheS4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBpdCBhbmQgcmVjb25zaWRlciBpdHMgaW1wb3J0YW5jZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2hvbGUgc3lzdGVtLiBMZXQgbWUgcmUtZXZhbHVhdGUgYG50ZnNfZmlsbF9zdXBlcmAgbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmM9MjE4ND1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG50ZnNfbWZ0X2ludmFsX2xvY2tfa2V5O1xuLS1cbmZzL250ZnMvc3VwZXIuYy0yMTg2LS8qXG5mcy9udGZzL3N1cGVyLmM6MjE4NzogKiBudGZzX2ZpbGxfc3VwZXIgLSBtb3VudCBhbiBudGZzIGZpbGVzeXN0ZW1cbmZzL250ZnMvc3VwZXIuYy0yMTg4LSAqIEBzYjogc3VwZXIgYmxvY2sgb2YgdGhlIGRldmljZSB0byBtb3VudFxuLS1cbmZzL250ZnMvc3VwZXIuYy0yMTkwLSAqXG5mcy9udGZzL3N1cGVyLmM6MjE5MTogKiBudGZzX2ZpbGxfc3VwZXIoKSBpcyBjYWxsZWQgYnkgdGhlIFZGUyB0byBtb3VudCB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSBAc2JcbmZzL250ZnMvc3VwZXIuYy0yMTkyLSAqIHdpdGggdGhlIG1vdW50IG90aW9ucyBpbiBAZGF0YSB3aXRoIHRoZSBOVEZTIGZpbGVzeXN0ZW0uXG4tLVxuZnMvbnRmcy9zdXBlci5jLTIyMDAtICovXG5mcy9udGZzL3N1cGVyLmM6MjIwMTpzdGF0aWMgaW50IG50ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9udGZzL3N1cGVyLmMtMjIwMi17XG4tLVxuZnMvbnRmcy9zdXBlci5jPTI1MTY9c3RhdGljIGludCBudGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL250ZnMvc3VwZXIuYy0yNTE3LXtcbmZzL250ZnMvc3VwZXIuYzoyNTE4Olx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIG50ZnNfZmlsbF9zdXBlcik7XG5mcy9udGZzL3N1cGVyLmMtMjUxOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTM0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ29uc2lkZXJpbmcgU3RhdGljIEZ1bmN0aW9uIFNjb3BlIGluIE5URlMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBOVEZTIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYXQgYG50ZnNfZ2V0X3RyZWVgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBicmluZ3MgdXAgc29tZSBpbXBsaWNhdGlvbnMgZm9yIGl0cyB2aXNpYmlsaXR5IGFuZCB1c2FnZS4gKlN0YXRpYyogc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBvbmx5IGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBgbnRmc2AgbW9kdWxlLCBsaWtlbHkgYmVjYXVzZSBpdCBoYW5kbGVzIGZpbGVzeXN0ZW0tc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFjY2VzcyBtZXRob2RzLgoKTm93LCBteSBtaW5kIHNoaWZ0cyB0byBgbnRmc19pbml0X2ZzX2NvbnRleHRgLiBJIG5lZWQgdG8gZXZhbHVhdGUgd2hldGhlciB0aGUgc2FtZSBkZXNpZ24gY29uc2lkZXJhdGlvbnMgYXBwbHkgdGhlcmUuIElzIGl0IGFsc28gc3RhdGljPyBTaG91bGQgaXQgYmU/IElmIGl0ICppcyogc3RhdGljLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgc2NvcGUgYWxpZ25zIHdpdGggaG93IHRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwuIElmIGl0IGlzbiYjMzk7dCBzdGF0aWMsIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IHRoaW5raW5nIG9mIHdoeSBpdCBtYXkgbm90IGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2luaXRfZnNfY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYz0yNTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIG50ZnNfY29udGV4dF9vcHMgPSB7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTI1MzUtXG5mcy9udGZzL3N1cGVyLmM6MjUzNjpzdGF0aWMgaW50IG50ZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL250ZnMvc3VwZXIuYy0yNTM3LXtcbi0tXG5mcy9udGZzL3N1cGVyLmM9MjU2OD1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbnRmc19mc190eXBlID0ge1xuLS1cbmZzL250ZnMvc3VwZXIuYy0yNTcwLVx0Lm5hbWUgICAgICAgICAgICAgICAgICAgPSBcJiMzNDtudGZzXCYjMzQ7LFxuZnMvbnRmcy9zdXBlci5jOjI1NzE6XHQuaW5pdF9mc19jb250ZXh0ICAgICAgICA9IG50ZnNfaW5pdF9mc19jb250ZXh0LFxuZnMvbnRmcy9zdXBlci5jLTI1NzItXHQucGFyYW1ldGVycyAgICAgICAgICAgICA9IG50ZnNfcGFyYW1ldGVycyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRnV6emluZyBOVEZTOiBBIFJlZmluZW1lbnQgb2YgU3RyYXRlZ3kqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG50ZnNfZmlsbF9zdXBlcmAgZnVuY3Rpb24uIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHBhaW4gZm9yIGZ1enppbmcgYmVjYXVzZSBpdCYjMzk7cyBoYXJkIHRvIGdldCBkaXJlY3QgY29udHJvbCwgYnV0Li4uIGl0JiMzOTtzIHRoZSAqbW91bnQgZW50cnkgcG9pbnQqLiBTeXprYWxsZXIsIHdpdGggaXRzIG1vdW50IGZ1enppbmcgY2FwYWJpbGl0aWVzLCBzaG91bGQgYmUgYWJsZSB0byBnZXQgbWUgdGhlcmUhIFRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcy4KClJpZ2h0LCBzbyBpbnN0ZWFkIG9mIHRyeWluZyB0byBoaXQgYG50ZnNfZmlsbF9zdXBlcmAgZGlyZWN0bHkgYXMgbXkgcHJpbWFyeSB0YXJnZXQsIEkgY2FuIGZvY3VzIG9uIGZ1bmN0aW9ucyBkZWVwZXIgaW4gdGhlIGZpbGUgc3lzdGVtLiBUaGlua2luZyBhYm91dCB0aGUgTlRGUyBhdHRyaWJ1dGUgaGFuZGxpbmcuLi4gYG50ZnNfYXR0cl9hZGRgIGFuZCBgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50YC4gVGhvc2UgYXJlIGV4Y2VsbGVudCwgbG93ZXItbGV2ZWwgZnVuY3Rpb25zIHRoYXQgbGlrZWx5IGhhdmUgc29tZSBpbnRlcmVzdGluZyBsb2dpYyB3aXRoaW4gdGhlbSBhbmQgYXJlIGxpa2VseSBleHBvc2VkIGF0IHRoZSBWRlMgbGV2ZWwuIFRoZXNlIGNvdWxkIGJlIGV4Y2VsbGVudCAmIzM0O2ZvY3VzIHN5bWJvbHMmIzM0OyB0byBndWlkZSB0aGUgZnV6emVyLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCYjMzk7cyB0aGlzPyBgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrYD8gQW5kIGl0JiMzOTtzICpub24tc3RhdGljKj8gVGhhdCBqdXN0IGNoYW5nZWQgdGhlIGdhbWUgcGxhbiBhIGJpdC4gTWF5YmUgdGhpcyBpcyBhIGJldHRlciBlbnRyeSBwb2ludCB0byBsb29rIGF0ISBXaXRoIHRoaXMgb25lIGF2YWlsYWJsZSwgaXQgZ2l2ZXMgbWUgYSBiZXR0ZXIgb3B0aW9uIGZvciBmdXp6aW5nIGF0IHRoZSAmIzM0O2JvdW5kcyBjaGVjayYjMzQ7IGxldmVsLCB3aGljaCBpcyBhIGNvbW1vbiBzb3VyY2Ugb2YgZmlsZSBzeXN0ZW0gdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2F0dHJpYi5jPTE3MzQ9c3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbi0tXG5mcy9udGZzL2F0dHJpYi5jLTE3NTctLypcbmZzL250ZnMvYXR0cmliLmM6MTc1ODogKiBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sgLSBjaGVjayBhIHNpemUgb2YgYW4gYXR0cmlidXRlIHR5cGUgZm9yIHZhbGlkaXR5XG5mcy9udGZzL2F0dHJpYi5jLTE3NTktICogQHZvbDpcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xuLS1cbmZzL250ZnMvYXR0cmliLmMtMTc2NS0gKi9cbmZzL250ZnMvYXR0cmliLmM6MTc2NjppbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMzIgdHlwZSxcbmZzL250ZnMvYXR0cmliLmMtMTc2Ny1cdFx0Y29uc3QgczY0IHNpemUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYz0yNzg5PWludCBudGZzX2F0dHJfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy0yODEwLVx0LyogQ2hlY2sgdGhlIGF0dHJpYnV0ZSB0eXBlIGFuZCB0aGUgc2l6ZS4gKi9cbmZzL250ZnMvYXR0cmliLmM6MjgxMTpcdGVyciA9IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhuaS1cdTAwM2V2b2wsIHR5cGUsIHNpemUpO1xuZnMvbnRmcy9hdHRyaWIuYy0yODEyLVx0aWYgKGVycikge1xuLS1cbmZzL250ZnMvYXR0cmliLmM9NDE5Nz1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUpXG4tLVxuZnMvbnRmcy9hdHRyaWIuYy00MjE5LVx0ICovXG5mcy9udGZzL2F0dHJpYi5jOjQyMjA6XHRlcnIgPSBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sodm9sLCBuaS1cdTAwM2V0eXBlLCBuZXdzaXplKTtcbmZzL250ZnMvYXR0cmliLmMtNDIyMS1cdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL2F0dHJpYi5jPTQzNzQ9c3RhdGljIGludCBudGZzX25vbl9yZXNpZGVudF9hdHRyX2V4cGFuZChzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBuZXdzaXplLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtNDQwMi1cdCAqL1xuZnMvbnRmcy9hdHRyaWIuYzo0NDAzOlx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgbmktXHUwMDNldHlwZSwgbmV3c2l6ZSk7XG5mcy9udGZzL2F0dHJpYi5jLTQ0MDQtXHRpZiAoZXJyXHRcdTAwM2MgMCkge1xuLS1cbmZzL250ZnMvYXR0cmliLmM9NDY0MD1zdGF0aWMgaW50IG50ZnNfcmVzaWRlbnRfYXR0cl9yZXNpemUoc3RydWN0IG50ZnNfaW5vZGUgKmF0dHJfbmksIGNvbnN0IHM2NCBuZXdzaXplLFxuLS1cbmZzL250ZnMvYXR0cmliLmMtNDY3Ni1cdCAqL1xuZnMvbnRmcy9hdHRyaWIuYzo0Njc3Olx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgYXR0cl9uaS1cdTAwM2V0eXBlLCBuZXdzaXplKTtcbmZzL250ZnMvYXR0cmliLmMtNDY3OC1cdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL2F0dHJpYi5oPTkxPXZvaWQgbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KTtcbmZzL250ZnMvYXR0cmliLmg6OTI6aW50IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbmZzL250ZnMvYXR0cmliLmgtOTMtXHRcdGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBzNjQgc2l6ZSk7XG4tLVxuZnMvbnRmcy9lYS5jPTE4OT1zdGF0aWMgaW50IG50ZnNfc2V0X2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbixcbi0tXG5mcy9udGZzL2VhLmMtMjY1LVx0XHRpZiAodmFsX3NpemUgXHUwMDI2XHUwMDI2XG5mcy9udGZzL2VhLmM6MjY2Olx0XHQgICAgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKG5pLVx1MDAzZXZvbCwgQVRfRUEsXG5mcy9udGZzL2VhLmMtMjY3LVx0XHRcdFx0XHRlYV9pbmZvX3FzaXplIC0gZWFfc2l6ZSAmIzQzOyBuZXdfZWFfc2l6ZSkpIHtcbi0tXG5mcy9udGZzL2VhLmMtMzI5LVxuZnMvbnRmcy9lYS5jOjMzMDpcdFx0aWYgKG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhuaS1cdTAwM2V2b2wsIEFUX0VBLFxuZnMvbnRmcy9lYS5jLTMzMS1cdFx0XHRcdFx0ZWFfaW5mb19xc2l6ZSAmIzQzOyBuZXdfZWFfc2l6ZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNTUKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIE5URlMgQXR0cmlidXRlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBOVEZTIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2tgIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGJlY2F1c2UgaXQmIzM5O3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHVzdWFsbHkgbWVhbnMgaXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gYSByZWxhdGVkIHN1YnN5c3RlbS4gQnV0IHdhaXQgYSBtaW51dGUsIEkgc2VlIHRoYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgbnRmc19hdHRyX2FkZGAgY2FsbCBpdCBkaXJlY3RseS4gVGhhdCBtZWFucyBpdCYjMzk7cyBldmVuIG1vcmUgY2VudHJhbCB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQhIEV4Y2VsbGVudCwgdGhpcyBpcyBwcm9taXNpbmcuCgpCYXNlZCBvbiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIGNlbnRlciBteSBpbnZlc3RpZ2F0aW9uIGFyb3VuZCB0aGVzZSB0aHJlZTogYG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVja2AsIGBudGZzX2F0dHJfYWRkYCwgYW5kIGBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgb2YgYXR0cmlidXRlIG1hbmlwdWxhdGlvbi4KCkJlZm9yZSBJIGdvIHRvbyBkZWVwLCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biBhIGNvbmZpZyBjaGVjay4uLiBZZXAsIGxvb2tzIGxpa2UgYE5URlNfRlNgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZy4gR29vZCwga2VlcHMgdGhpbmdzIG5pY2UgYW5kIGZvY3VzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrJiMzNDssCiAgICAmIzM0O250ZnNfYXR0cl9hZGQmIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGFycmF5IGRvZXMgbm90IGV4Y2VlZCB0aGUgYWxsb2NhdGVkIHNpemUgYW5kIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGVudHJ5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOVEZTIHZvbHVtZXMgYXJlIG1vdW50ZWQgYW5kIGhvdyBhdHRyaWJ1dGVzIGFyZSBwcm9jZXNzZWQsIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2smIzM0OywKICAgICYjMzQ7bnRmc19hdHRyX2FkZCYjMzQ7LAogICAgJiMzNDtudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZW5zdXJpbmcgdGhhdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gYXJyYXkgZG9lcyBub3QgZXhjZWVkIHRoZSBhbGxvY2F0ZWQgc2l6ZSBhbmQgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgZW50cnkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IE5URlMgdm9sdW1lcyBhcmUgbW91bnRlZCBhbmQgaG93IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNToxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gTlRGUyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgIGFuZCB0aGF0IHRoZSBsb29wIGl0ZXJhdGluZyBvdmVyIGB2b2wtXHUwMDNlYXR0cmRlZmAgZG9lcyBub3QgcmVhZCBhIHBhcnRpYWwgc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWI1NDA2NDY5ODM3ZDI0NWI1YmRjODYzNWQxMzkwYmE1YjJjZmY2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA1OjE0OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9hdHRyaWIuYyBiL2ZzL250ZnMvYXR0cmliLmMKaW5kZXggOTkwYzM5MzdhNTUxNi4uN2QwODE2ZGU3NTYzNCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9hdHRyaWIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2F0dHJpYi5jCkBAIC0xNzM3LDggJiM0MzsxNzM3LDggQEAgc3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwKIAlzdHJ1Y3QgYXR0cl9kZWYgKmFkOwogCiAJV0FSTl9PTighdHlwZSk7Ci0JZm9yIChhZCA9IHZvbC0mZ3Q7YXR0cmRlZjsgKHU4ICopYWQgLSAodTggKil2b2wtJmd0O2F0dHJkZWYgJmx0OwotCQkJdm9sLSZndDthdHRyZGVmX3NpemUgJmFtcDsmYW1wOyBhZC0mZ3Q7dHlwZTsgJiM0MzsmIzQzO2FkKSB7CiYjNDM7CWZvciAoYWQgPSB2b2wtJmd0O2F0dHJkZWY7ICh1OCAqKWFkIC0gKHU4ICopdm9sLSZndDthdHRyZGVmICZsdDs9CiYjNDM7CSAgICAgdm9sLSZndDthdHRyZGVmX3NpemUgLSAoczMyKXNpemVvZigqYWQpICZhbXA7JmFtcDsgYWQtJmd0O3R5cGU7ICYjNDM7JiM0MzthZCkgewogCQkvKiBXZSBoYXZlIG5vdCBmb3VuZCBpdCB5ZXQsIGNhcnJ5IG9uIHNlYXJjaGluZy4gKi8KIAkJaWYgKGxpa2VseShsZTMyX3RvX2NwdShhZC0mZ3Q7dHlwZSkgJmx0OyBsZTMyX3RvX2NwdSh0eXBlKSkpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuYwppbmRleCBjZDhmYTJjMTMzNzAwLi4yZmQ3ZGI2NzI2MWVmIDEwMDY0NAotLS0gYS9mcy9udGZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9zdXBlci5jCkBAIC0xMjQxLDkgJiM0MzsxMjQxLDkgQEAgc3RhdGljIGJvb2wgbG9hZF9hbmRfaW5pdF9hdHRyZGVmKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKQogCQlnb3RvIGZhaWxlZDsKIAl9CiAJTklub1NldFNwYXJzZURpc2FibGVkKE5URlNfSShpbm8pKTsKLQkvKiBUaGUgc2l6ZSBvZiBGSUxFX0F0dHJEZWYgbXVzdCBiZSBhYm92ZSAwIGFuZCBmaXQgaW5zaWRlIDMxIGJpdHMuICovCiYjNDM7CS8qIEZJTEVfQXR0ckRlZiBtdXN0IGhvbGQgYXQgbGVhc3Qgb25lIGVudHJ5IGFuZCBmaXQgaW5zaWRlIDMxIGJpdHMuICovCiAJaV9zaXplID0gaV9zaXplX3JlYWQoaW5vKTsKLQlpZiAoaV9zaXplICZsdDs9IDAgfHwgaV9zaXplICZndDsgMHg3ZmZmZmZmZikKJiM0MzsJaWYgKGlfc2l6ZSAmbHQ7IChzNjQpc2l6ZW9mKHN0cnVjdCBhdHRyX2RlZikgfHwgaV9zaXplICZndDsgMHg3ZmZmZmZmZikKIAkJZ290byBpcHV0X2ZhaWxlZDsKIAl2b2wtJmd0O2F0dHJkZWYgPSBrdnphbGxvYyhpX3NpemUsIEdGUF9OT0ZTKTsKIAlpZiAoIXZvbC0mZ3Q7YXR0cmRlZikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA1OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzgKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogMTA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLQVNBTiBpcyB0aGUgUmlnaHQgVG9vbCBmb3IgVGhpcyBOVEZTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTlRGUyBkcml2ZXIuIEl0IHRvdWNoZXMgYGF0dHJpYi5jYCBhbmQgYHN1cGVyLmNgLiBJbiBgYXR0cmliLmNgLCBpdCBsb29rcyBsaWtlIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgZml4IGZvciB0aGUgYHZvbC0mZ3Q7YXR0cmRlZmAgaXRlcmF0aW9uLiBUaGUgb3JpZ2luYWwgbG9vcCBjb3VsZCBwb3RlbnRpYWxseSByZWFkIGJleW9uZCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgYGF0dHJkZWZgIGJ5IGRlcmVmZXJlbmNpbmcgYGFkLSZndDt0eXBlYCB3aXRob3V0IGNoZWNraW5nIGlmIGEgZnVsbCBgc3RydWN0IGF0dHJfZGVmYCBjb3VsZCBmaXQgd2l0aGluIGB2b2wtJmd0O2F0dHJkZWZfc2l6ZWAuIFRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlcmUmIzM5O3MgZW5vdWdoIHNwYWNlLgoKSW4gYHN1cGVyLmNgLCB0aGVyZSYjMzk7cyBhIHNpemUgY2hlY2sgZm9yIGBGSUxFX0F0dHJEZWZgLiBJdCYjMzk7cyBlbnN1cmluZyB0aGUgc2l6ZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgYHN0cnVjdCBhdHRyX2RlZmAuIFRoaXMgbWFrZXMgc2Vuc2UsIHByZXZlbnRpbmcgYSB6ZXJvLXNpemVkIG9yIHRvby1zbWFsbCBhbGxvY2F0aW9uIHdoaWNoIGNvdWxkIGxlYWQgdG8gc2ltaWxhciBpc3N1ZXMgbGF0ZXIuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0NvdWxkIHRoaXMgYmUgYSBLTVNBTiB0aGluZz8mIzM0OyBiZWNhdXNlIG91dC1vZi1ib3VuZHMgc3R1ZmYgc29tZXRpbWVzIG92ZXJsYXBzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBgdm9sLSZndDthdHRyZGVmYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3Z6YWxsb2NgIGluIGBzdXBlci5jYCB3aGljaCwgYnkgZGVmaW5pdGlvbiwgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSB0byB6ZXJvLiBIb3dldmVyLCBpdCYjMzk7cyBhbHNvIHBvcHVsYXRlZCBmcm9tIHRoZSBkaXNrLCBzbyBJIG5lZWRlZCB0byBjbGFyaWZ5IGhvdyBpdCYjMzk7cyBwb3B1bGF0ZWQuIEkgcmV2aWV3ZWQgYGxvYWRfYW5kX2luaXRfYXR0cmRlZmAgYW5kIGNvbmZpcm1lZCB0aGUgbWVtb3J5IGlzIGxvYWRlZCBmcm9tIGRpc2suCgpLQVNBTiBpcyB0aGUgdG9vbCB0aGF0IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaGFwcGVucyB3aGVuIHRoZSBsb29wIGNvbmRpdGlvbiBpcyBzYXRpc2ZpZWQgYnV0IHRoZSBsYXN0IGBhZGAgaXMgcGFydGlhbGx5IG91dCBvZiBib3VuZHMuIFRoZSBsb29wIGl0ZXJhdGVzIHVwIHRvIGB2b2wtJmd0O2F0dHJkZWZfc2l6ZWAuIElmIGBpX3NpemVgICh0aGUgYWxsb2NhdGVkIHNpemUpIGlzbiYjMzk7dCBhIG11bHRpcGxlIG9mIGBzaXplb2YoKmFkKWAsIHRoZW4gdGhlIHZlcnkgbGFzdCBpdGVyYXRpb24gY2FuIGJlIHByb2JsZW1hdGljLiBUaGlzIGlzIG5vdyBmaXhlZCBpbiB0aGUgcGF0Y2guCgpTbywgc2luY2UgaXQmIzM5O3MgYW4gb3V0LW9mLWJvdW5kcyAqcmVhZCosIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgbm8gaW5mby1sZWFrYWdlIGNvbmNlcm5zLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhlIHJlYWQsIHdoaWNoIEtNU0FOIHdvdWxkbiYjMzk7dCBjYXRjaC4gS01TQU4gaXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLQVNBTiBmb3Igb3V0LW9mLWJvdW5kcy4gVGhlIHBhdGNoIGVuc3VyZXMgdGhhdCBzaXplIGNoZWNrcyBhcmUgcGVyZm9ybWVkIGFuZCBpdCYjMzk7cyBmaXhlZC4KVGhlcmVmb3JlLCBubyBLTVNBTiBmdXp6aW5nIGlzIG5lZWRlZCBoZXJlLiBUaGlzIGlzIGEgS0FTQU4gaXNzdWUsIHBsYWluIGFuZCBzaW1wbGUuCgpUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGhhbmRsaW5nIG9mIE5URlMgYXR0cmlidXRlIGRlZmluaXRpb25zLiBJdCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gaXRlcmF0aW5nIG92ZXIgYHZvbC0mZ3Q7YXR0cmRlZmAgYW5kIGVuc3VyZXMgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgYHN0cnVjdCBhdHRyX2RlZmAsIHByZXZlbnRpbmcgcGFydGlhbCBzdHJ1Y3R1cmUgcmVhZHMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoaXMgdHlwZSBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpc3N1ZSBpc24mIzM5O3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDU6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIE5URlMgYXR0cmlidXRlIGRlZmluaXRpb24gaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyB0aGF0IHRoZSBzaXplIG9mIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBmaWxlIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIG9uZSBgc3RydWN0IGF0dHJfZGVmYCBhbmQgdGhhdCB0aGUgbG9vcCBpdGVyYXRpbmcgb3ZlciBgdm9sLVx1MDAzZWF0dHJkZWZgIGRvZXMgbm90IHJlYWQgYSBwYXJ0aWFsIHN0cnVjdHVyZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gTlRGUyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgIGFuZCB0aGF0IHRoZSBsb29wIGl0ZXJhdGluZyBvdmVyIGB2b2wtXHUwMDNlYXR0cmRlZmAgZG9lcyBub3QgcmVhZCBhIHBhcnRpYWwgc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTQ6NTIuNzkwNzQzMDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODg4NTIzNjQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrXCIsXG4gICAgXCJudGZzX2F0dHJfYWRkXCIsXG4gICAgXCJudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBOVEZTIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgYHN0cnVjdCBhdHRyX2RlZmAgYW5kIHRoYXQgdGhlIGxvb3AgaXRlcmF0aW5nIG92ZXIgYHZvbC1cXHUwMDNlYXR0cmRlZmAgZG9lcyBub3QgcmVhZCBhIHBhcnRpYWwgc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRyaXZlciBieSBlbnN1cmluZyB0aGF0IHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBhcnJheSBkb2VzIG5vdCBleGNlZWQgdGhlIGFsbG9jYXRlZCBzaXplIGFuZCB0aGF0IHRoZSBzaXplIG9mIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBmaWxlIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIG9uZSBlbnRyeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgTlRGUyB2b2x1bWVzIGFyZSBtb3VudGVkIGFuZCBob3cgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNDo1Mi43OTA3NDg0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc1MjAzMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWI1NDA2NDY5ODM3ZDI0NWI1YmRjODYzNWQxMzkwYmE1YjJjZmY2OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNToxNDo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5jIGIvZnMvbnRmcy9hdHRyaWIuY1xcbmluZGV4IDk5MGMzOTM3YTU1MTYuLjdkMDgxNmRlNzU2MzQgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9hdHRyaWIuY1xcbisrKyBiL2ZzL250ZnMvYXR0cmliLmNcXG5AQCAtMTczNyw4ICsxNzM3LDggQEAgc3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcXG4gXFx0c3RydWN0IGF0dHJfZGVmICphZDtcXG4gXFxuIFxcdFdBUk5fT04oIXR5cGUpO1xcbi1cXHRmb3IgKGFkID0gdm9sLVxcdTAwM2VhdHRyZGVmOyAodTggKilhZCAtICh1OCAqKXZvbC1cXHUwMDNlYXR0cmRlZiBcXHUwMDNjXFxuLVxcdFxcdFxcdHZvbC1cXHUwMDNlYXR0cmRlZl9zaXplIFxcdTAwMjZcXHUwMDI2IGFkLVxcdTAwM2V0eXBlOyArK2FkKSB7XFxuK1xcdGZvciAoYWQgPSB2b2wtXFx1MDAzZWF0dHJkZWY7ICh1OCAqKWFkIC0gKHU4ICopdm9sLVxcdTAwM2VhdHRyZGVmIFxcdTAwM2M9XFxuK1xcdCAgICAgdm9sLVxcdTAwM2VhdHRyZGVmX3NpemUgLSAoczMyKXNpemVvZigqYWQpIFxcdTAwMjZcXHUwMDI2IGFkLVxcdTAwM2V0eXBlOyArK2FkKSB7XFxuIFxcdFxcdC8qIFdlIGhhdmUgbm90IGZvdW5kIGl0IHlldCwgY2Fycnkgb24gc2VhcmNoaW5nLiAqL1xcbiBcXHRcXHRpZiAobGlrZWx5KGxlMzJfdG9fY3B1KGFkLVxcdTAwM2V0eXBlKSBcXHUwMDNjIGxlMzJfdG9fY3B1KHR5cGUpKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuY1xcbmluZGV4IGNkOGZhMmMxMzM3MDAuLjJmZDdkYjY3MjYxZWYgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9zdXBlci5jXFxuKysrIGIvZnMvbnRmcy9zdXBlci5jXFxuQEAgLTEyNDEsOSArMTI0MSw5IEBAIHN0YXRpYyBib29sIGxvYWRfYW5kX2luaXRfYXR0cmRlZihzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4gXFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcdH1cXG4gXFx0Tklub1NldFNwYXJzZURpc2FibGVkKE5URlNfSShpbm8pKTtcXG4tXFx0LyogVGhlIHNpemUgb2YgRklMRV9BdHRyRGVmIG11c3QgYmUgYWJvdmUgMCBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqL1xcbitcXHQvKiBGSUxFX0F0dHJEZWYgbXVzdCBob2xkIGF0IGxlYXN0IG9uZSBlbnRyeSBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqL1xcbiBcXHRpX3NpemUgPSBpX3NpemVfcmVhZChpbm8pO1xcbi1cXHRpZiAoaV9zaXplIFxcdTAwM2M9IDAgfHwgaV9zaXplIFxcdTAwM2UgMHg3ZmZmZmZmZilcXG4rXFx0aWYgKGlfc2l6ZSBcXHUwMDNjIChzNjQpc2l6ZW9mKHN0cnVjdCBhdHRyX2RlZikgfHwgaV9zaXplIFxcdTAwM2UgMHg3ZmZmZmZmZilcXG4gXFx0XFx0Z290byBpcHV0X2ZhaWxlZDtcXG4gXFx0dm9sLVxcdTAwM2VhdHRyZGVmID0ga3Z6YWxsb2MoaV9zaXplLCBHRlBfTk9GUyk7XFxuIFxcdGlmICghdm9sLVxcdTAwM2VhdHRyZGVmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNDo1My4xNjY1NjkzOTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1Mzk3MTc1MjY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrXCIsXG4gICAgXCJudGZzX2F0dHJfYWRkXCIsXG4gICAgXCJudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRyaXZlciBieSBlbnN1cmluZyB0aGF0IHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBhcnJheSBkb2VzIG5vdCBleGNlZWQgdGhlIGFsbG9jYXRlZCBzaXplIGFuZCB0aGF0IHRoZSBzaXplIG9mIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBmaWxlIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIG9uZSBlbnRyeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgTlRGUyB2b2x1bWVzIGFyZSBtb3VudGVkIGFuZCBob3cgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYjU0MDY0Njk4MzdkMjQ1YjViZGM4NjM1ZDEzOTBiYTViMmNmZjY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDU6MTQ6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5jIGIvZnMvbnRmcy9hdHRyaWIuY1xuaW5kZXggOTkwYzM5MzdhNTUxNi4uN2QwODE2ZGU3NTYzNCAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvYXR0cmliLmNcbisrKyBiL2ZzL250ZnMvYXR0cmliLmNcbkBAIC0xNzM3LDggKzE3MzcsOCBAQCBzdGF0aWMgc3RydWN0IGF0dHJfZGVmICpudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuIFx0c3RydWN0IGF0dHJfZGVmICphZDtcbiBcbiBcdFdBUk5fT04oIXR5cGUpO1xuLVx0Zm9yIChhZCA9IHZvbC1cdTAwM2VhdHRyZGVmOyAodTggKilhZCAtICh1OCAqKXZvbC1cdTAwM2VhdHRyZGVmIFx1MDAzY1xuLVx0XHRcdHZvbC1cdTAwM2VhdHRyZGVmX3NpemUgXHUwMDI2XHUwMDI2IGFkLVx1MDAzZXR5cGU7ICsrYWQpIHtcbitcdGZvciAoYWQgPSB2b2wtXHUwMDNlYXR0cmRlZjsgKHU4ICopYWQgLSAodTggKil2b2wtXHUwMDNlYXR0cmRlZiBcdTAwM2M9XG4rXHQgICAgIHZvbC1cdTAwM2VhdHRyZGVmX3NpemUgLSAoczMyKXNpemVvZigqYWQpIFx1MDAyNlx1MDAyNiBhZC1cdTAwM2V0eXBlOyArK2FkKSB7XG4gXHRcdC8qIFdlIGhhdmUgbm90IGZvdW5kIGl0IHlldCwgY2Fycnkgb24gc2VhcmNoaW5nLiAqL1xuIFx0XHRpZiAobGlrZWx5KGxlMzJfdG9fY3B1KGFkLVx1MDAzZXR5cGUpIFx1MDAzYyBsZTMyX3RvX2NwdSh0eXBlKSkpXG4gXHRcdFx0Y29udGludWU7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9zdXBlci5jIGIvZnMvbnRmcy9zdXBlci5jXG5pbmRleCBjZDhmYTJjMTMzNzAwLi4yZmQ3ZGI2NzI2MWVmIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9zdXBlci5jXG4rKysgYi9mcy9udGZzL3N1cGVyLmNcbkBAIC0xMjQxLDkgKzEyNDEsOSBAQCBzdGF0aWMgYm9vbCBsb2FkX2FuZF9pbml0X2F0dHJkZWYoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4gXHRcdGdvdG8gZmFpbGVkO1xuIFx0fVxuIFx0Tklub1NldFNwYXJzZURpc2FibGVkKE5URlNfSShpbm8pKTtcbi1cdC8qIFRoZSBzaXplIG9mIEZJTEVfQXR0ckRlZiBtdXN0IGJlIGFib3ZlIDAgYW5kIGZpdCBpbnNpZGUgMzEgYml0cy4gKi9cbitcdC8qIEZJTEVfQXR0ckRlZiBtdXN0IGhvbGQgYXQgbGVhc3Qgb25lIGVudHJ5IGFuZCBmaXQgaW5zaWRlIDMxIGJpdHMuICovXG4gXHRpX3NpemUgPSBpX3NpemVfcmVhZChpbm8pO1xuLVx0aWYgKGlfc2l6ZSBcdTAwM2M9IDAgfHwgaV9zaXplIFx1MDAzZSAweDdmZmZmZmZmKVxuK1x0aWYgKGlfc2l6ZSBcdTAwM2MgKHM2NClzaXplb2Yoc3RydWN0IGF0dHJfZGVmKSB8fCBpX3NpemUgXHUwMDNlIDB4N2ZmZmZmZmYpXG4gXHRcdGdvdG8gaXB1dF9mYWlsZWQ7XG4gXHR2b2wtXHUwMDNlYXR0cmRlZiA9IGt2emFsbG9jKGlfc2l6ZSwgR0ZQX05PRlMpO1xuIFx0aWYgKCF2b2wtXHUwMDNlYXR0cmRlZilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE0OjUzLjE2NjU3MDY4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDI3NDQ3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVEZTIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgdG8gYmUgZm9jdXNpbmcgb24gc29tZSBjcnVjaWFsIE5URlMgZGF0YSBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIGl0J3MgaGl0dGluZyBgZnMvbnRmcy9hdHRyaWIuY2AgYW5kIGBmcy9udGZzL3N1cGVyLmNgLCB3aGljaCBtYWtlcyBzZW5zZTsgYXR0cmlidXRlcyBhbmQgc3VwZXJibG9jayBkYXRhIGFyZSBjb3JlIHRvIGhvdyBOVEZTIG9wZXJhdGVzLlxuXG5JbiBgYXR0cmliLmNgLCB0aGUgY2hhbmdlIHRvIGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBsb29wIGNvbmRpdGlvbiBtb2RpZmljYXRpb24sIGVuc3VyaW5nIGBhZGAgc3RheXMgd2l0aGluIGB2b2wtXHUwMDNlYXR0cmRlZl9zaXplYCwgc3Ryb25nbHkgc3VnZ2VzdHMgYSBib3VuZGFyeSBjaGVjayB0byBwcmV2ZW50IHBvdGVudGlhbCBidWZmZXIgb3ZlcnJ1bnMgb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgYXR0cmlidXRlIGRlZmluaXRpb24gbG9va3VwLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBpbXBvcnRhbnQgdnVsbmVyYWJpbGl0eSB0byBhZGRyZXNzLiBJdCdzIGEgY2xlYW4sIHRhcmdldGVkIGZpeCwgbGlrZWx5IHRvIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGZpbGUgc3lzdGVtLlxuXG5UaGVuIHdlJ3JlIHNlZWluZyBhIHR3ZWFrIHRvIGBmcy9udGZzL3N1cGVyLmNgIHdpdGhpbiBgbG9hZF9hbmRfaW5pdF9hdHRyZGVmYC4gVGhlIGBpX3NpemVgIGNoZWNrIHRvIGNvbmZpcm0gdGhhdCBpdCBob2xkcyBhdCBsZWFzdCBvbmUgZW50cnkgKGBzaXplb2Yoc3RydWN0IGF0dHJfZGVmKWApIGlzIGFub3RoZXIgbG9naWNhbCBib3VuZGFyeSBjaGVjay4gVGhpcyBwcmV2ZW50cyBpbml0aWFsaXphdGlvbiBlcnJvcnMgd2hlbiBsb2FkaW5nIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiB0YWJsZSBmcm9tIHRoZSB2b2x1bWUuIEl0IG1ha2VzIHNlbnNlIHRvIGVuZm9yY2UgdGhpcyBtaW5pbXVtIHNpemUgYmVjYXVzZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBpcyB2YWxpZCBiZWZvcmUgdXNpbmcgaXQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTlRGUyBpbiBgZnMvbnRmcy9LY29uZmlnYC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIGFueSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEknbSBjdXJpb3VzIGlmIHRoZXJlJ3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgdGhpcyBmaXggaXMgYXBwbGllZCBvciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gdGhpcyBpbXByb3ZlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgYnJvYWRlciBOVEZTIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTQ6NTguMDY5MzE3NjQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTczMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xcbmZzL250ZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzL0tjb25maWctMTItXFxuZnMvbnRmcy9LY29uZmlnOjEzOmNvbmZpZyBOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTlxcbmZzL250ZnMvS2NvbmZpZy0xNC1cXHRib29sIFxcXCJOVEZTIFdpbmRvd3Mgc3lzdGVtIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzL0tjb25maWc9MjQ9Y29uZmlnIE5URlNfREVCVUdcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy00NS1cXG5mcy9udGZzL0tjb25maWc6NDY6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuZnMvbnRmcy9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE0OjU4LjExODI5NjEyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODczNDQwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVEZTIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgTlRGU19GU2AuIFJpZ2h0LCBidXQgaGFuZyBvbiwgSSBhbHNvIHNlZSBgTlRGUzNfRlNgIGluIGBmcy9udGZzMy9LY29uZmlnYC4gVGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgbW9kaWZ5aW5nIGZpbGVzIGluIHRoZSBgZnMvbnRmcy9gIGRpcmVjdG9yeS4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYGZzL250ZnMvYCBpcyBzdGlsbCBhY3RpdmVseSBtYWludGFpbmVkIHdpdGhpbiB0aGUgdHJlZSBvciBpZiBpdCdzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgTlRGUzNgLiBHaXZlbiB0aGUgZmlsZSBwYXRocyBpbnZvbHZlZCwgaXQncyBjbGVhciBgZnMvbnRmcy9gIHJlcHJlc2VudHMgdGhlICpvbGRlciogTlRGUyBkcml2ZXIuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLiBMZXQgbWUgY2hlY2sgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZDogYG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWZgIGFuZCBgbG9hZF9hbmRfaW5pdF9hdHRyZGVmYCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MDIuMDA1NjQzMzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NzEwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTE3MTM9dm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTE3MjQtLypcXG5mcy9udGZzL2F0dHJpYi5jOjE3MjU6ICogbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZiAtIGZpbmQgYW4gYXR0cmlidXRlIGluIHRoZSAkQXR0ckRlZiBzeXN0ZW0gZmlsZVxcbmZzL250ZnMvYXR0cmliLmMtMTcyNi0gKiBAdm9sOlxcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0xNzMzLSAqL1xcbmZzL250ZnMvYXR0cmliLmM6MTczNDpzdGF0aWMgc3RydWN0IGF0dHJfZGVmICpudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbmZzL250ZnMvYXR0cmliLmMtMTczNS1cXHRcXHRjb25zdCBfX2xlMzIgdHlwZSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9MTc2Nj1pbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMTc4MC1cXHQvKiBHZXQgdGhlICRBdHRyRGVmIGVudHJ5IGZvciB0aGUgYXR0cmlidXRlIEB0eXBlLiAqL1xcbmZzL250ZnMvYXR0cmliLmM6MTc4MTpcXHRhZCA9IG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYodm9sLCB0eXBlKTtcXG5mcy9udGZzL2F0dHJpYi5jLTE3ODItXFx0aWYgKHVubGlrZWx5KCFhZCkpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTE4MDE9c3RhdGljIGludCBudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudChjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMTgwNi1cXHQvKiBGaW5kIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiByZWNvcmQgaW4gJEF0dHJEZWYuICovXFxuZnMvbnRmcy9hdHRyaWIuYzoxODA3OlxcdGFkID0gbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZih2b2wsIHR5cGUpO1xcbmZzL250ZnMvYXR0cmliLmMtMTgwOC1cXHRpZiAodW5saWtlbHkoIWFkKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MDIuMDUzNDIwMDQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NzM4MzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE5URlMgQXR0cmlidXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IE5URlMgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgZnVuY3Rpb24gY2FsbGVkIGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYC4gSXQncyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGludGVybmFsIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgbGltaXRzIGl0cyBzY29wZSwgbWFraW5nIGl0IGVhc2llciB0byByZWFzb24gYWJvdXQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzICp1c2VkKi4gVGhlIHRleHQgbWVudGlvbnMgaXQncyBjYWxsZWQgYnkgYG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVja2AgYW5kIGBudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudGAuIFRob3NlIG5hbWVzIGFyZSBwcmV0dHkgZGVzY3JpcHRpdmU7IHRoZXkgaGludCBhdCBhdHRyaWJ1dGUgc2l6ZSB2YWxpZGF0aW9uIGFuZCBkZXRlcm1pbmluZyBpZiBhbiBhdHRyaWJ1dGUgY2FuIGJlIHN0b3JlZCBhcyBub24tcmVzaWRlbnQgZGF0YS4gQ2xlYXJseSwgYG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWZgIG11c3QgcGxheSBhIHJvbGUgaW4gZmluZGluZyBhbmQgcG90ZW50aWFsbHkgdmFsaWRhdGluZyBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgd2l0aGluIHRoZSBOVEZTIG1ldGFkYXRhIHN0cnVjdHVyZXMuXG5cbk5vdywgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBiaWdnZXIgcGljdHVyZSwgSSB0aGluayBpdCdzIHRpbWUgdG8gY2hlY2sgb3V0IGBsb2FkX2FuZF9pbml0X2F0dHJkZWZgLiBVbmRlcnN0YW5kaW5nIGhvdyBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgYXJlIGxvYWRlZCBhbmQgaW5pdGlhbGl6ZWQgd2lsbCBnaXZlIG1lIHZpdGFsIGNvbnRleHQgZm9yIHdoYXQgYG50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWZgIGlzIGFjdHVhbGx5ICpkb2luZyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNTowNi4wMTA4MDU5NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNzY2NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvYWRfYW5kX2luaXRfYXR0cmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MTEzOD1zdGF0aWMgaW50IGNoZWNrX3dpbmRvd3NfaGliZXJuYXRpb25fc3RhdHVzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTEyMTktLypcXG5mcy9udGZzL3N1cGVyLmM6MTIyMDogKiBsb2FkX2FuZF9pbml0X2F0dHJkZWYgLSBsb2FkIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgdGFibGUgZm9yIGEgdm9sdW1lXFxuZnMvbnRmcy9zdXBlci5jLTEyMjEtICogQHZvbDpcXHRudGZzIHN1cGVyIGJsb2NrIGRlc2NyaWJpbmcgZGV2aWNlIHdob3NlIGF0dHJkZWYgdG8gbG9hZFxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTEyMjQtICovXFxuZnMvbnRmcy9zdXBlci5jOjEyMjU6c3RhdGljIGJvb2wgbG9hZF9hbmRfaW5pdF9hdHRyZGVmKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbmZzL250ZnMvc3VwZXIuYy0xMjI2LXtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0xMzk5PXN0YXRpYyBib29sIGxvYWRfc3lzdGVtX2ZpbGVzKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE0MzktXFx0ICovXFxuZnMvbnRmcy9zdXBlci5jOjE0NDA6XFx0aWYgKCFsb2FkX2FuZF9pbml0X2F0dHJkZWYodm9sKSlcXG5mcy9udGZzL3N1cGVyLmMtMTQ0MS1cXHRcXHRnb3RvIGlwdXRfdXBjYXNlX2Vycl9vdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjA2LjE5MjU4MjY3N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTIwNDk4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTlRGUyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBOVEZTIGZpbGUgc3lzdGVtIGNvZGUsIGFuZCBJJ3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy4gYG50ZnNfZmlsbF9zdXBlcmAgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50OyBpdCdzIHRoZSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZC4gSSBrbm93IHRoYXQgYGxvYWRfc3lzdGVtX2ZpbGVzYCBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyB0aGUgY29yZSBzeXN0ZW0gZmlsZXMsIGFuZCB0aGF0IGZ1bmN0aW9uLCBpbiB0dXJuLCBjYWxscyBgbG9hZF9hbmRfaW5pdF9hdHRyZGVmYC4gU2luY2UgYG50ZnNfZmlsbF9zdXBlcmAgaXMgYXQgdGhlIHRvcCBvZiB0aGUgY2hhaW4sIHRoYXQgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIHBsYWNlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBmb3Igbm93LiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIHJvb3Qgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGFuZCB3aGVyZSBJIGNhbiBnYWluIHRoZSBtb3N0IGluc2lnaHQgaW5pdGlhbGx5LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBib3VuZHMgb2YgdGhvc2UgY2FsbHMuIEkgd2FzIHNvIGZvY3VzZWQgb24gdGhlIGNhbGwgY2hhaW4sIHRoYXQgSSBkaWRuJ3Qgc3RvcCB0byBleGFtaW5lIHdoYXQgZnVuY3Rpb25zIGBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2tgIGFuZCBgbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnRgIGFyZSBldmVuIGNhbGxlZCBieSEgSSBuZWVkIHRvIGV4cGFuZCB0aGUgc2NvcGUgYW5kIHVuZGVyc3RhbmQgdGhlaXIgcGxhY2UgaW4gdGhlIGJpZ2dlciBwaWN0dXJlIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhpcyBzcGVjaWZpYyBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MDkuODQ0NjM1OTY3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDE4NjkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hdHRyaWIuYz0xNzM0PXN0YXRpYyBzdHJ1Y3QgYXR0cl9kZWYgKm50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTE3NTctLypcXG5mcy9udGZzL2F0dHJpYi5jOjE3NTg6ICogbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrIC0gY2hlY2sgYSBzaXplIG9mIGFuIGF0dHJpYnV0ZSB0eXBlIGZvciB2YWxpZGl0eVxcbmZzL250ZnMvYXR0cmliLmMtMTc1OS0gKiBAdm9sOlxcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0xNzY1LSAqL1xcbmZzL250ZnMvYXR0cmliLmM6MTc2NjppbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMzIgdHlwZSxcXG5mcy9udGZzL2F0dHJpYi5jLTE3NjctXFx0XFx0Y29uc3QgczY0IHNpemUpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTI3ODk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjgxMC1cXHQvKiBDaGVjayB0aGUgYXR0cmlidXRlIHR5cGUgYW5kIHRoZSBzaXplLiAqL1xcbmZzL250ZnMvYXR0cmliLmM6MjgxMTpcXHRlcnIgPSBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgdHlwZSwgc2l6ZSk7XFxuZnMvbnRmcy9hdHRyaWIuYy0yODEyLVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NDE5Nz1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTQyMTktXFx0ICovXFxuZnMvbnRmcy9hdHRyaWIuYzo0MjIwOlxcdGVyciA9IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayh2b2wsIG5pLVxcdTAwM2V0eXBlLCBuZXdzaXplKTtcXG5mcy9udGZzL2F0dHJpYi5jLTQyMjEtXFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz00Mzc0PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDQwMi1cXHQgKi9cXG5mcy9udGZzL2F0dHJpYi5jOjQ0MDM6XFx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgbmktXFx1MDAzZXR5cGUsIG5ld3NpemUpO1xcbmZzL250ZnMvYXR0cmliLmMtNDQwNC1cXHRpZiAoZXJyXFx0XFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTQ2NDA9c3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDY3Ni1cXHQgKi9cXG5mcy9udGZzL2F0dHJpYi5jOjQ2Nzc6XFx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgYXR0cl9uaS1cXHUwMDNldHlwZSwgbmV3c2l6ZSk7XFxuZnMvbnRmcy9hdHRyaWIuYy00Njc4LVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmg9OTE9dm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xcbmZzL250ZnMvYXR0cmliLmg6OTI6aW50IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcXG5mcy9udGZzL2F0dHJpYi5oLTkzLVxcdFxcdGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBzNjQgc2l6ZSk7XFxuLS1cXG5mcy9udGZzL2VhLmM9MTg5PXN0YXRpYyBpbnQgbnRmc19zZXRfZWEoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLFxcbi0tXFxuZnMvbnRmcy9lYS5jLTI2NS1cXHRcXHRpZiAodmFsX3NpemUgXFx1MDAyNlxcdTAwMjZcXG5mcy9udGZzL2VhLmM6MjY2OlxcdFxcdCAgICBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgQVRfRUEsXFxuZnMvbnRmcy9lYS5jLTI2Ny1cXHRcXHRcXHRcXHRcXHRlYV9pbmZvX3FzaXplIC0gZWFfc2l6ZSArIG5ld19lYV9zaXplKSkge1xcbi0tXFxuZnMvbnRmcy9lYS5jLTMyOS1cXG5mcy9udGZzL2VhLmM6MzMwOlxcdFxcdGlmIChudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgQVRfRUEsXFxuZnMvbnRmcy9lYS5jLTMzMS1cXHRcXHRcXHRcXHRcXHRlYV9pbmZvX3FzaXplICsgbmV3X2VhX3NpemUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjA5Ljg5NDgzMTk2NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkxOTM1NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOVEZTIEF0dHJpYnV0ZSBNYW5pcHVsYXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgYG50ZnNfYXR0cl9hZGRgLCBgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmtgLCBgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmRgLCBgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZWAsIGFuZCBgbnRmc19zZXRfZWFgLiBUaGVzZSBhcmUgYWxsIGtleSBmdW5jdGlvbnMsIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgTlRGUyBhdHRyaWJ1dGUgbWFuYWdlbWVudC4gSSByZWNvZ25pemUgdGhlbSBpbW1lZGlhdGVseS4gVGhleSdyZSBsaWtlIHNpZ25wb3N0cyBwb2ludGluZyB0byB0aGUgY29yZSBtZWNoYW5pc21zIG9mIGhvdyBmaWxlIGRhdGEsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGFuZCBtZXRhZGF0YSBhcmUgc3RvcmVkIGFuZCBtb2RpZmllZCB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtLiBUaGVzZSBkZWZpbml0ZWx5IHdhcnJhbnQgbXkgZm9jdXNlZCBhdHRlbnRpb24uXG5cbkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnRgLiBUaGF0J3MgYW4gaW50ZXJlc3Rpbmcgb25lLiBXaGF0IGNhbGxzICp0aGF0KiBmdW5jdGlvbj8gSXRzIHJldHVybiB2YWx1ZSBkZXRlcm1pbmVzIGlmIGFuIGF0dHJpYnV0ZSBjYW4gYmUgc3RvcmVkIGlubGluZSB3aXRoIHRoZSBNRlQgZW50cnkgb3IgaWYgaXQgbmVlZHMgdG8gYmUgc3RvcmVkIG91dC1vZi1saW5lIChub24tcmVzaWRlbnQpLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCwgYXMgdGhleSBkZXRlcm1pbmUgdGhlIGNyaXRlcmlhIGZvciBkYXRhIHBsYWNlbWVudCBkZWNpc2lvbnMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQncyBjb25uZWN0ZWQgdG8uIFRoZSBjb250ZXh0IHN1cnJvdW5kaW5nICp0aGF0KiBjYWxsIGlzIHZlcnkgaW1wb3J0YW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRlY2lzaW9uIHBvaW50cyBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDA4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MTQuMDg2NzY5NzczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc2NjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTE3NjY9aW50IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgX19sZTMyIHR5cGUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTE3OTMtLypcXG5mcy9udGZzL2F0dHJpYi5jOjE3OTQ6ICogbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQgLSBjaGVjayBpZiBhbiBhdHRyaWJ1dGUgY2FuIGJlIG5vbi1yZXNpZGVudFxcbmZzL250ZnMvYXR0cmliLmMtMTc5NS0gKiBAdm9sOlxcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0xODAwLSAqL1xcbmZzL250ZnMvYXR0cmliLmM6MTgwMTpzdGF0aWMgaW50IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbmZzL250ZnMvYXR0cmliLmMtMTgwMi1cXHRcXHRjb25zdCBfX2xlMzIgdHlwZSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9MTkzOD1pbnQgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgdTMyIGRhdGFfc2l6ZSlcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMTk2MC1cXHQvKiBDaGVjayB0aGF0IHRoZSBhdHRyaWJ1dGUgaXMgYWxsb3dlZCB0byBiZSBub24tcmVzaWRlbnQuICovXFxuZnMvbnRmcy9hdHRyaWIuYzoxOTYxOlxcdGVyciA9IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KHZvbCwgbmktXFx1MDAzZXR5cGUpO1xcbmZzL250ZnMvYXR0cmliLmMtMTk2Mi1cXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz0yNTE2PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9yZWNvcmRfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI1MzQtXFxuZnMvbnRmcy9hdHRyaWIuYzoyNTM1OlxcdGVyciA9IG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KG5pLVxcdTAwM2V2b2wsIHR5cGUpO1xcbmZzL250ZnMvYXR0cmliLmMtMjUzNi1cXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI1MzktXFx0XFx0ZWxzZVxcbmZzL250ZnMvYXR0cmliLmM6MjU0MDpcXHRcXHRcXHRwcl9lcnIoXFxcIm50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50IGZhaWxlZFxcXFxuXFxcIik7XFxuZnMvbnRmcy9hdHRyaWIuYy0yNTQxLVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTI3ODk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjgxOS1cXHQvKiBTYW5pdHkgY2hlY2tzIGZvciBhbHdheXMgcmVzaWRlbnQgYXR0cmlidXRlcy4gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjI4MjA6XFx0ZXJyID0gbnRmc19hdHRyX2Nhbl9iZV9ub25fcmVzaWRlbnQobmktXFx1MDAzZXZvbCwgdHlwZSk7XFxuZnMvbnRmcy9hdHRyaWIuYy0yODIxLVxcdGlmIChlcnIpIHtcXG5mcy9udGZzL2F0dHJpYi5jLTI4MjItXFx0XFx0aWYgKGVyciAhPSAtRVBFUk0pIHtcXG5mcy9udGZzL2F0dHJpYi5jOjI4MjM6XFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIm50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50IGZhaWxlZFxcXCIpO1xcbmZzL250ZnMvYXR0cmliLmMtMjgyNC1cXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTQ2NDA9c3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDczNS1cXG5mcy9udGZzL2F0dHJpYi5jOjQ3MzY6XFx0XFx0aWYgKG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KHZvbCwgYS1cXHUwMDNldHlwZSkpXFxuZnMvbnRmcy9hdHRyaWIuYy00NzM3LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNToxNC4xMzI1NDA4NjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0MjU2MTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE5URlMgQXR0cmlidXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgTlRGUyBhdHRyaWJ1dGUgbWFuYWdlbWVudCBoZXJlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlIGBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRgLCBgbnRmc19hdHRyX2FkZGAsIGFuZCBgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZWAuIFRoZXkncmUgY29yZSB0byBob3cgYXR0cmlidXRlcywgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBOVEZTIGZpbGVzLCBhcmUgaGFuZGxlZCBpbiB2YXJpb3VzIHN0YXRlcy5cblxuSSBzdXNwZWN0IHRoYXQgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiByZWFsbSBhcmUgYSBiaXQgYnJvYWRlciB0aGFuIGp1c3QgdGhvc2UsIHRob3VnaC4gSSBuZWVkIHRvIGtlZXAgbXkgZXllIG9uIGBudGZzX2ZpbGxfc3VwZXJgLCBgbnRmc19hdHRyX2FkZGAsIGBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRgLCBgbnRmc19yZXNpZGVudF9hdHRyX3Jlc2l6ZWAsIGFuZCB0aGUgbGVzcyBvYnZpb3VzIGZ1bmN0aW9ucyBvZiBgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9zaHJpbmtgLCBgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmRgLCBhbmQgYG50ZnNfc2V0X2VhYC4gSSdtIGVzc2VudGlhbGx5IG91dGxpbmluZyB0aGUgcHJvY2VzcyBvZiBob3cgYXR0cmlidXRlcyBnZXQgY3JlYXRlZCwgbW9kaWZpZWQsIGFuZCB0cmFuc2l0aW9uZWQgYmV0d2VlbiByZXNpZGVudCBhbmQgbm9uLXJlc2lkZW50IHN0YXRlcywgaW5jbHVkaW5nIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzIGFuZCBzaHJpbmtpbmcgb3IgZ3Jvd2luZyBub24tcmVzaWRlbnQgYXR0cmlidXRlcyBhcmUgYWRkcmVzc2VkLlxuXG5UaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBudGZzX2ZpbGxfc3VwZXJgLiBJdCBpcyBsaWtlbHkgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgc3VwZXJibG9jayBpbnRlcmFjdHMgd2l0aCBhbGwgdGhlc2UgYXR0cmlidXRlcy4gRnJvbSB0aGVyZSwgSSBjYW4gaG9wZWZ1bGx5IHRyYWNlIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHZhcmlvdXMgYXR0cmlidXRlLXJlbGF0ZWQgdGFza3MgYXJlIGludGVncmF0ZWQuIExldCdzIHNlZSBpZiB0aGF0IGluaXRpYWwgY2hlY2sgY2xhcmlmaWVzIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNToxOS43NzUxMDYxMTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDM5NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjE4ND1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG50ZnNfbWZ0X2ludmFsX2xvY2tfa2V5O1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTIxODYtLypcXG5mcy9udGZzL3N1cGVyLmM6MjE4NzogKiBudGZzX2ZpbGxfc3VwZXIgLSBtb3VudCBhbiBudGZzIGZpbGVzeXN0ZW1cXG5mcy9udGZzL3N1cGVyLmMtMjE4OC0gKiBAc2I6IHN1cGVyIGJsb2NrIG9mIHRoZSBkZXZpY2UgdG8gbW91bnRcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMTkwLSAqXFxuZnMvbnRmcy9zdXBlci5jOjIxOTE6ICogbnRmc19maWxsX3N1cGVyKCkgaXMgY2FsbGVkIGJ5IHRoZSBWRlMgdG8gbW91bnQgdGhlIGRldmljZSBkZXNjcmliZWQgYnkgQHNiXFxuZnMvbnRmcy9zdXBlci5jLTIxOTItICogd2l0aCB0aGUgbW91bnQgb3Rpb25zIGluIEBkYXRhIHdpdGggdGhlIE5URlMgZmlsZXN5c3RlbS5cXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMjAwLSAqL1xcbmZzL250ZnMvc3VwZXIuYzoyMjAxOnN0YXRpYyBpbnQgbnRmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9udGZzL3N1cGVyLmMtMjIwMi17XFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MjUxNj1zdGF0aWMgaW50IG50ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL250ZnMvc3VwZXIuYy0yNTE3LXtcXG5mcy9udGZzL3N1cGVyLmM6MjUxODpcXHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgbnRmc19maWxsX3N1cGVyKTtcXG5mcy9udGZzL3N1cGVyLmMtMjUxOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjE5LjgyNDE0ODc2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc0OTI5MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gdGhlIGVudHJ5IHBvaW50IGZvciBtb3VudGluZyBpcyBkZWZpbml0ZWx5IGBudGZzX2ZpbGxfc3VwZXJgLiBUaGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSwgc3BlY2lmaWNhbGx5IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciB3cml0ZSB3aXRoaW4gdGhlIGBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmYCBmdW5jdGlvbi4gVGhlIGZpeCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGl0J3MgbWFraW5nIHN1cmUgdGhhdCB0aGUgYGFkYCBwb2ludGVyIGRvZXNuJ3QgZ28gYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGJ1ZmZlciAoYHZvbC1cdTAwM2VhdHRyZGVmX3NpemUgLSBzaXplb2YoKmFkKWApIGR1cmluZyBsb29rdXAuIEFuZCwgc2ltaWxhcmx5LCB0aGF0IGBsb2FkX2FuZF9pbml0X2F0dHJkZWZgIGd1YXJhbnRlZXMgdGhlIGlub2RlJ3Mgc2l6ZSAoYGlfc2l6ZWApIGlzIGF0IGxlYXN0IGJpZyBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhlIGBzdHJ1Y3QgYXR0cl9kZWZgIHN0cnVjdHVyZS4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsbHkgZHJpdmVuIGNoYW5nZSB0aGF0IHNob3VsZCBlbGltaW5hdGUgYSBwb3NzaWJsZSBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cblxuTm93LCBsZXQgbWUganVzdCBjb25maXJtIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJcyBgTlRGU19GU2AgdGhlIG9ubHkgcmVxdWlyZWQgb3B0aW9uPyBZZXAsIGp1c3QgYE5URlNfRlNgLCBub3RoaW5nIGVsc2UgbmVlZGVkLlxuXG5GaW5hbGx5LCBJIHNob3VsZCBqdXN0IHF1aWNrbHkgY2hlY2sgaWYgYG50ZnNfYXR0cl9hZGRgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2Agb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTE1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjI1LjA5OTA4NDAwMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNTAzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19hdHRyX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2F0dHJpYi5jPTI2NTI9aW50IG50ZnNfYXR0cl9yZWNvcmRfcm0oc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTI3NjMtLypcXG5mcy9udGZzL2F0dHJpYi5jOjI3NjQ6ICogbnRmc19hdHRyX2FkZCAtIGFkZCBhdHRyaWJ1dGUgdG8gaW5vZGVcXG5mcy9udGZzL2F0dHJpYi5jLTI3NjUtICogQG5pOlxcdFxcdG9wZW5lZCBudGZzIGlub2RlIHRvIHdoaWNoIGFkZCBhdHRyaWJ1dGVcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjc4OC0gKi9cXG5mcy9udGZzL2F0dHJpYi5jOjI3ODk6aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG5mcy9udGZzL2F0dHJpYi5jLTI3OTAtXFx0XFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgdTggKnZhbCwgczY0IHNpemUpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5oPTEyMz1pbnQgbnRmc19hdHRyX3JlY29yZF9tb3ZlX3RvKHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpO1xcbmZzL250ZnMvYXR0cmliLmg6MTI0OmludCBudGZzX2F0dHJfYWRkKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTMyIHR5cGUsXFxuZnMvbnRmcy9hdHRyaWIuaC0xMjUtXFx0XFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgdTggKnZhbCwgczY0IHNpemUpO1xcbi0tXFxuZnMvbnRmcy9lYS5jPTE4OT1zdGF0aWMgaW50IG50ZnNfc2V0X2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbixcXG4tLVxcbmZzL250ZnMvZWEuYy0yMjgtXFx0XFx0ZWFfaW5mb19xc2l6ZSA9IDA7XFxuZnMvbnRmcy9lYS5jOjIyOTpcXHRcXHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9FQV9JTkZPUk1BVElPTiwgQVRfVU5OQU1FRCwgMCxcXG5mcy9udGZzL2VhLmMtMjMwLVxcdFxcdFxcdFxcdChjaGFyICopcF9lYV9pbmZvLCBzaXplb2Yoc3RydWN0IGVhX2luZm9ybWF0aW9uKSk7XFxuLS1cXG5mcy9udGZzL2VhLmMtMjk2LVxcdFxcdFxcdFxcdC8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsICRFQSBpZiAkRUFfSU5GT1JNQVRJT04gcmVtb3ZhbCBmYWlsZWQuICovXFxuZnMvbnRmcy9lYS5jOjI5NzpcXHRcXHRcXHRcXHRudGZzX2F0dHJfYWRkKG5pLCBBVF9FQSwgQVRfVU5OQU1FRCwgMCwgb2xkX2VhX2J1ZixcXG5mcy9udGZzL2VhLmMtMjk4LVxcdFxcdFxcdFxcdFxcdCAgICAgIGFsbF9lYV9zaXplKTtcXG4tLVxcbmZzL250ZnMvZWEuYy0zNzItXFx0aWYgKCFudGZzX2F0dHJfZXhpc3QobmksIEFUX0VBLCBBVF9VTk5BTUVELCAwKSkge1xcbmZzL250ZnMvZWEuYzozNzM6XFx0XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfRUEsIEFUX1VOTkFNRUQsIDAsIGVhX2J1ZixcXG5mcy9udGZzL2VhLmMtMzc0LVxcdFxcdFxcdFxcdGVhX2luZm9fcXNpemUgKyBuZXdfZWFfc2l6ZSk7XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTAxND1zdGF0aWMgaW50IG50ZnNfaWJtX2FkZChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTAyNi1cXHRtZW1zZXQoYm1wLCAwLCBzaXplb2YoYm1wKSk7XFxuZnMvbnRmcy9pbmRleC5jOjEwMjc6XFx0cmV0ID0gbnRmc19hdHRyX2FkZChpY3gtXFx1MDAzZWlkeF9uaSwgQVRfQklUTUFQLCBpY3gtXFx1MDAzZW5hbWUsIGljeC1cXHUwMDNlbmFtZV9sZW4sXFxuZnMvbnRmcy9pbmRleC5jLTEwMjgtXFx0XFx0XFx0ICAgIGJtcCwgc2l6ZW9mKGJtcCkpO1xcbi0tXFxuZnMvbnRmcy9pbmRleC5jPTEyNTQ9c3RhdGljIGludCBudGZzX2lhX2FkZChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTI2NC1cXHRpZiAoIW50ZnNfYXR0cl9leGlzdChpY3gtXFx1MDAzZWlkeF9uaSwgQVRfSU5ERVhfQUxMT0NBVElPTiwgaWN4LVxcdTAwM2VuYW1lLCBpY3gtXFx1MDAzZW5hbWVfbGVuKSkge1xcbmZzL250ZnMvaW5kZXguYzoxMjY1OlxcdFxcdHJldCA9IG50ZnNfYXR0cl9hZGQoaWN4LVxcdTAwM2VpZHhfbmksIEFUX0lOREVYX0FMTE9DQVRJT04sIGljeC1cXHUwMDNlbmFtZSxcXG5mcy9udGZzL2luZGV4LmMtMTI2Ni1cXHRcXHRcXHRcXHRcXHRpY3gtXFx1MDAzZW5hbWVfbGVuLCBOVUxMLCAwKTtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0zMzA9c3RhdGljIGludCBudGZzX3NkX2FkZF9ldmVyeW9uZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtMzg0LVxcbmZzL250ZnMvbmFtZWkuYzozODU6XFx0cmV0ID0gbnRmc19hdHRyX2FkZChuaSwgQVRfU0VDVVJJVFlfREVTQ1JJUFRPUiwgQVRfVU5OQU1FRCwgMCwgKHU4ICopc2QsXFxuZnMvbnRmcy9uYW1laS5jLTM4Ni1cXHRcXHRcXHRzZF9sZW4pO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTM5ND1zdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTUzOC1cXHQvKiBBZGQgU1RBTkRBUkRfSU5GT1JNQVRJT04gdG8gaW5vZGUuICovXFxuZnMvbnRmcy9uYW1laS5jOjUzOTpcXHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9TVEFOREFSRF9JTkZPUk1BVElPTiwgQVRfVU5OQU1FRCwgMCwgKHU4ICopc2ksXFxuZnMvbnRmcy9uYW1laS5jLTU0MC1cXHRcXHRcXHRzaV9sZW4pO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTU4MS1cXHRcXHQvKiBBZGQgc3RydWN0IGluZGV4X3Jvb3QgYXR0cmlidXRlIHRvIGlub2RlLiAqL1xcbmZzL250ZnMvbmFtZWkuYzo1ODI6XFx0XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfSU5ERVhfUk9PVCwgSTMwLCA0LCAodTggKilpciwgaXJfbGVuKTtcXG5mcy9udGZzL25hbWVpLmMtNTgzLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy01OTMtXFx0XFx0LyogQWRkIERBVEEgYXR0cmlidXRlIHRvIGlub2RlLiAqL1xcbmZzL250ZnMvbmFtZWkuYzo1OTQ6XFx0XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfREFUQSwgQVRfVU5OQU1FRCwgMCwgTlVMTCwgMCk7XFxuZnMvbnRmcy9uYW1laS5jLTU5NS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9udGZzL25hbWVpLmMtNjYwLVxcdC8qIEFkZCBGSUxFX05BTUUgYXR0cmlidXRlIHRvIGlub2RlLiAqL1xcbmZzL250ZnMvbmFtZWkuYzo2NjE6XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfRklMRV9OQU1FLCBBVF9VTk5BTUVELCAwLCAodTggKilmbiwgZm5fbGVuKTtcXG5mcy9udGZzL25hbWVpLmMtNjYyLVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0xMTQ2PXN0YXRpYyBpbnQgX19udGZzX2xpbmsoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19pbm9kZSAqZGlyX25pLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTEyMjAtXFx0LyogQWRkIEZJTEVfTkFNRSBhdHRyaWJ1dGUgdG8gaW5vZGUuICovXFxuZnMvbnRmcy9uYW1laS5jOjEyMjE6XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfRklMRV9OQU1FLCBBVF9VTk5BTUVELCAwLCAodTggKilmbiwgZm5fbGVuKTtcXG5mcy9udGZzL25hbWVpLmMtMTIyMi1cXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9udGZzL3JlcGFyc2UuYz02OTE9c3RhdGljIGludCBudGZzX3NldF9udGZzX3JlcGFyc2VfZGF0YShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNoYXIgKnZhbHVlLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL250ZnMvcmVwYXJzZS5jLTcyNi1cXG5mcy9udGZzL3JlcGFyc2UuYzo3Mjc6XFx0XFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfUkVQQVJTRV9QT0lOVCwgQVRfVU5OQU1FRCwgMCwgKHU4ICopXFx1MDAyNnJwLCBzaXplb2YocnApKTtcXG5mcy9udGZzL3JlcGFyc2UuYy03MjgtXFx0XFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNToyNS4xNDg0NDAyNjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2MjY0MzAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgTlRGUyBDb2RlIC0gUG90ZW50aWFsIEVudHJ5IFBvaW50cyBhbmQgU2NvcGUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIE5URlMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYW5kIGhvdyB0aGluZ3MgYXJlIHN0cnVjdHVyZWQuIEZpcnN0LCBJIG5vdGljZSB0aGF0IGBudGZzX2F0dHJfYWRkYCBhbmQgYG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudGAgYXJlICpub3QqIGRlY2xhcmVkIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IHVzZWZ1bDsgaXQgdGVsbHMgbWUgdGhleSdyZSBwcm9iYWJseSBjYWxsYWJsZSBmcm9tIGVsc2V3aGVyZSwgd2hpY2ggbWVhbnMgdGhleSBtaWdodCBiZSBpbnRlcmVzdGluZyBhcyBwb3RlbnRpYWwgc3ltYm9scyB0byB0cmFjZSBvciBhbmFseXplIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgZGVwZW5kaW5nIG9uIHdoYXQgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0LlxuXG5UaGVuIEkgc2VlIGBudGZzX2ZpbGxfc3VwZXJgLiBBaCwgaXQgKmlzKiBzdGF0aWMhIE5vdywgdGhhdCBpbml0aWFsbHkgbWFrZXMgaXQgbGVzcyBhcHBlYWxpbmcgYXMgYSBtYWluIGZvY3VzLCBzaW5jZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IGxpbWl0ZWQgaW4gdGhlaXIgc2NvcGUuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGBudGZzX2ZpbGxfc3VwZXJgIGlzIHRoZSBtb3VudCBlbnRyeSBwb2ludCwgaXNuJ3QgaXQ/IFRoYXQgbWVhbnMgaXQncyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgKmhvdyogdGhlIGZpbGVzeXN0ZW0gaXMgYnJvdWdodCB1cC4gRXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3MgdGhlIGdhdGV3YXkuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgaXQgYW5kIHJlY29uc2lkZXIgaXRzIGltcG9ydGFuY2UgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdob2xlIHN5c3RlbS4gTGV0IG1lIHJlLWV2YWx1YXRlIGBudGZzX2ZpbGxfc3VwZXJgIG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNTozMC4xMTEwODU5NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTM3MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjE4ND1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG50ZnNfbWZ0X2ludmFsX2xvY2tfa2V5O1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTIxODYtLypcXG5mcy9udGZzL3N1cGVyLmM6MjE4NzogKiBudGZzX2ZpbGxfc3VwZXIgLSBtb3VudCBhbiBudGZzIGZpbGVzeXN0ZW1cXG5mcy9udGZzL3N1cGVyLmMtMjE4OC0gKiBAc2I6IHN1cGVyIGJsb2NrIG9mIHRoZSBkZXZpY2UgdG8gbW91bnRcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMTkwLSAqXFxuZnMvbnRmcy9zdXBlci5jOjIxOTE6ICogbnRmc19maWxsX3N1cGVyKCkgaXMgY2FsbGVkIGJ5IHRoZSBWRlMgdG8gbW91bnQgdGhlIGRldmljZSBkZXNjcmliZWQgYnkgQHNiXFxuZnMvbnRmcy9zdXBlci5jLTIxOTItICogd2l0aCB0aGUgbW91bnQgb3Rpb25zIGluIEBkYXRhIHdpdGggdGhlIE5URlMgZmlsZXN5c3RlbS5cXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yMjAwLSAqL1xcbmZzL250ZnMvc3VwZXIuYzoyMjAxOnN0YXRpYyBpbnQgbnRmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9udGZzL3N1cGVyLmMtMjIwMi17XFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MjUxNj1zdGF0aWMgaW50IG50ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL250ZnMvc3VwZXIuYy0yNTE3LXtcXG5mcy9udGZzL3N1cGVyLmM6MjUxODpcXHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgbnRmc19maWxsX3N1cGVyKTtcXG5mcy9udGZzL3N1cGVyLmMtMjUxOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjMwLjE1OTAyOTI5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgwNTIwMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDb25zaWRlcmluZyBTdGF0aWMgRnVuY3Rpb24gU2NvcGUgaW4gTlRGUyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBOVEZTIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYXQgYG50ZnNfZ2V0X3RyZWVgLiBJdCdzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGJyaW5ncyB1cCBzb21lIGltcGxpY2F0aW9ucyBmb3IgaXRzIHZpc2liaWxpdHkgYW5kIHVzYWdlLiAqU3RhdGljKiBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIG9ubHkgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIGBudGZzYCBtb2R1bGUsIGxpa2VseSBiZWNhdXNlIGl0IGhhbmRsZXMgZmlsZXN5c3RlbS1zcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgb3IgYWNjZXNzIG1ldGhvZHMuXG5cbk5vdywgbXkgbWluZCBzaGlmdHMgdG8gYG50ZnNfaW5pdF9mc19jb250ZXh0YC4gSSBuZWVkIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhlIHNhbWUgZGVzaWduIGNvbnNpZGVyYXRpb25zIGFwcGx5IHRoZXJlLiBJcyBpdCBhbHNvIHN0YXRpYz8gU2hvdWxkIGl0IGJlPyBJZiBpdCAqaXMqIHN0YXRpYywgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgc2NvcGUgYWxpZ25zIHdpdGggaG93IHRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwuIElmIGl0IGlzbid0IHN0YXRpYywgSSB3aWxsIGhhdmUgdG8gc3RhcnQgdGhpbmtpbmcgb2Ygd2h5IGl0IG1heSBub3QgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTM0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MzMuNDM5NTUxNTQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc3NjIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2luaXRfZnNfY29udGV4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjUyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBudGZzX2NvbnRleHRfb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTI1MzUtXFxuZnMvbnRmcy9zdXBlci5jOjI1MzY6c3RhdGljIGludCBudGZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvbnRmcy9zdXBlci5jLTI1Mzcte1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jPTI1Njg9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG50ZnNfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0yNTcwLVxcdC5uYW1lICAgICAgICAgICAgICAgICAgID0gXFxcIm50ZnNcXFwiLFxcbmZzL250ZnMvc3VwZXIuYzoyNTcxOlxcdC5pbml0X2ZzX2NvbnRleHQgICAgICAgID0gbnRmc19pbml0X2ZzX2NvbnRleHQsXFxuZnMvbnRmcy9zdXBlci5jLTI1NzItXFx0LnBhcmFtZXRlcnMgICAgICAgICAgICAgPSBudGZzX3BhcmFtZXRlcnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjMzLjQ4NzMzMzM0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzY0NzQzNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipGdXp6aW5nIE5URlM6IEEgUmVmaW5lbWVudCBvZiBTdHJhdGVneSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IHRoaXMgYG50ZnNfZmlsbF9zdXBlcmAgZnVuY3Rpb24uIEl0J3Mgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IGEgcGFpbiBmb3IgZnV6emluZyBiZWNhdXNlIGl0J3MgaGFyZCB0byBnZXQgZGlyZWN0IGNvbnRyb2wsIGJ1dC4uLiBpdCdzIHRoZSAqbW91bnQgZW50cnkgcG9pbnQqLiBTeXprYWxsZXIsIHdpdGggaXRzIG1vdW50IGZ1enppbmcgY2FwYWJpbGl0aWVzLCBzaG91bGQgYmUgYWJsZSB0byBnZXQgbWUgdGhlcmUhIFRoYXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcy5cblxuUmlnaHQsIHNvIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGhpdCBgbnRmc19maWxsX3N1cGVyYCBkaXJlY3RseSBhcyBteSBwcmltYXJ5IHRhcmdldCwgSSBjYW4gZm9jdXMgb24gZnVuY3Rpb25zIGRlZXBlciBpbiB0aGUgZmlsZSBzeXN0ZW0uIFRoaW5raW5nIGFib3V0IHRoZSBOVEZTIGF0dHJpYnV0ZSBoYW5kbGluZy4uLiBgbnRmc19hdHRyX2FkZGAgYW5kIGBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRgLiBUaG9zZSBhcmUgZXhjZWxsZW50LCBsb3dlci1sZXZlbCBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgaGF2ZSBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHdpdGhpbiB0aGVtIGFuZCBhcmUgbGlrZWx5IGV4cG9zZWQgYXQgdGhlIFZGUyBsZXZlbC4gVGhlc2UgY291bGQgYmUgZXhjZWxsZW50IFwiZm9jdXMgc3ltYm9sc1wiIHRvIGd1aWRlIHRoZSBmdXp6ZXIuXG5cbldhaXQgYSBtaW51dGUsIHdoYXQncyB0aGlzPyBgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrYD8gQW5kIGl0J3MgKm5vbi1zdGF0aWMqPyBUaGF0IGp1c3QgY2hhbmdlZCB0aGUgZ2FtZSBwbGFuIGEgYml0LiBNYXliZSB0aGlzIGlzIGEgYmV0dGVyIGVudHJ5IHBvaW50IHRvIGxvb2sgYXQhIFdpdGggdGhpcyBvbmUgYXZhaWxhYmxlLCBpdCBnaXZlcyBtZSBhIGJldHRlciBvcHRpb24gZm9yIGZ1enppbmcgYXQgdGhlIFwiYm91bmRzIGNoZWNrXCIgbGV2ZWwsIHdoaWNoIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBmaWxlIHN5c3RlbSB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6MzkuODUyMDgwMzk2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ3MDIzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hdHRyaWIuYz0xNzM0PXN0YXRpYyBzdHJ1Y3QgYXR0cl9kZWYgKm50ZnNfYXR0cl9maW5kX2luX2F0dHJkZWYoY29uc3Qgc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTE3NTctLypcXG5mcy9udGZzL2F0dHJpYi5jOjE3NTg6ICogbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrIC0gY2hlY2sgYSBzaXplIG9mIGFuIGF0dHJpYnV0ZSB0eXBlIGZvciB2YWxpZGl0eVxcbmZzL250ZnMvYXR0cmliLmMtMTc1OS0gKiBAdm9sOlxcdG50ZnMgdm9sdW1lIHRvIHdoaWNoIHRoZSBhdHRyaWJ1dGUgYmVsb25nc1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYy0xNzY1LSAqL1xcbmZzL250ZnMvYXR0cmliLmM6MTc2NjppbnQgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKGNvbnN0IHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBfX2xlMzIgdHlwZSxcXG5mcy9udGZzL2F0dHJpYi5jLTE3NjctXFx0XFx0Y29uc3QgczY0IHNpemUpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTI3ODk9aW50IG50ZnNfYXR0cl9hZGQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMzIgdHlwZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtMjgxMC1cXHQvKiBDaGVjayB0aGUgYXR0cmlidXRlIHR5cGUgYW5kIHRoZSBzaXplLiAqL1xcbmZzL250ZnMvYXR0cmliLmM6MjgxMTpcXHRlcnIgPSBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgdHlwZSwgc2l6ZSk7XFxuZnMvbnRmcy9hdHRyaWIuYy0yODEyLVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmM9NDE5Nz1zdGF0aWMgaW50IG50ZnNfbm9uX3Jlc2lkZW50X2F0dHJfc2hyaW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3QgczY0IG5ld3NpemUpXFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jLTQyMTktXFx0ICovXFxuZnMvbnRmcy9hdHRyaWIuYzo0MjIwOlxcdGVyciA9IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayh2b2wsIG5pLVxcdTAwM2V0eXBlLCBuZXdzaXplKTtcXG5mcy9udGZzL2F0dHJpYi5jLTQyMjEtXFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9hdHRyaWIuYz00Mzc0PXN0YXRpYyBpbnQgbnRmc19ub25fcmVzaWRlbnRfYXR0cl9leHBhbmQoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDQwMi1cXHQgKi9cXG5mcy9udGZzL2F0dHJpYi5jOjQ0MDM6XFx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgbmktXFx1MDAzZXR5cGUsIG5ld3NpemUpO1xcbmZzL250ZnMvYXR0cmliLmMtNDQwNC1cXHRpZiAoZXJyXFx0XFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9udGZzL2F0dHJpYi5jPTQ2NDA9c3RhdGljIGludCBudGZzX3Jlc2lkZW50X2F0dHJfcmVzaXplKHN0cnVjdCBudGZzX2lub2RlICphdHRyX25pLCBjb25zdCBzNjQgbmV3c2l6ZSxcXG4tLVxcbmZzL250ZnMvYXR0cmliLmMtNDY3Ni1cXHQgKi9cXG5mcy9udGZzL2F0dHJpYi5jOjQ2Nzc6XFx0ZXJyID0gbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKHZvbCwgYXR0cl9uaS1cXHUwMDNldHlwZSwgbmV3c2l6ZSk7XFxuZnMvbnRmcy9hdHRyaWIuYy00Njc4LVxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMvYXR0cmliLmg9OTE9dm9pZCBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgpO1xcbmZzL250ZnMvYXR0cmliLmg6OTI6aW50IG50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVjayhjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcXG5mcy9udGZzL2F0dHJpYi5oLTkzLVxcdFxcdGNvbnN0IF9fbGUzMiB0eXBlLCBjb25zdCBzNjQgc2l6ZSk7XFxuLS1cXG5mcy9udGZzL2VhLmM9MTg5PXN0YXRpYyBpbnQgbnRmc19zZXRfZWEoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLFxcbi0tXFxuZnMvbnRmcy9lYS5jLTI2NS1cXHRcXHRpZiAodmFsX3NpemUgXFx1MDAyNlxcdTAwMjZcXG5mcy9udGZzL2VhLmM6MjY2OlxcdFxcdCAgICBudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgQVRfRUEsXFxuZnMvbnRmcy9lYS5jLTI2Ny1cXHRcXHRcXHRcXHRcXHRlYV9pbmZvX3FzaXplIC0gZWFfc2l6ZSArIG5ld19lYV9zaXplKSkge1xcbi0tXFxuZnMvbnRmcy9lYS5jLTMyOS1cXG5mcy9udGZzL2VhLmM6MzMwOlxcdFxcdGlmIChudGZzX2F0dHJfc2l6ZV9ib3VuZHNfY2hlY2sobmktXFx1MDAzZXZvbCwgQVRfRUEsXFxuZnMvbnRmcy9lYS5jLTMzMS1cXHRcXHRcXHRcXHRcXHRlYV9pbmZvX3FzaXplICsgbmV3X2VhX3NpemUpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA1OjE1OjM5LjkwODU1NDg1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ2ODI3NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIE5URlMgQXR0cmlidXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTlRGUyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBiZWNhdXNlIGl0J3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHVzdWFsbHkgbWVhbnMgaXQncyBhIGtleSBmdW5jdGlvbiBpbiBhIHJlbGF0ZWQgc3Vic3lzdGVtLiBCdXQgd2FpdCBhIG1pbnV0ZSwgSSBzZWUgdGhhdCBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBudGZzX2F0dHJfYWRkYCBjYWxsIGl0IGRpcmVjdGx5LiBUaGF0IG1lYW5zIGl0J3MgZXZlbiBtb3JlIGNlbnRyYWwgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0ISBFeGNlbGxlbnQsIHRoaXMgaXMgcHJvbWlzaW5nLlxuXG5CYXNlZCBvbiB0aGlzLCBJJ20gZ29pbmcgdG8gY2VudGVyIG15IGludmVzdGlnYXRpb24gYXJvdW5kIHRoZXNlIHRocmVlOiBgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrYCwgYG50ZnNfYXR0cl9hZGRgLCBhbmQgYG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBvZiBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9uLlxuXG5CZWZvcmUgSSBnbyB0b28gZGVlcCwgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gYSBjb25maWcgY2hlY2suLi4gWWVwLCBsb29rcyBsaWtlIGBOVEZTX0ZTYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcuIEdvb2QsIGtlZXBzIHRoaW5ncyBuaWNlIGFuZCBmb2N1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1NSwiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6NDcuMDU1Mzg5MDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjkyOTg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfYXR0cl9zaXplX2JvdW5kc19jaGVja1wiLFxuICAgIFwibnRmc19hdHRyX2FkZFwiLFxuICAgIFwibnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZW5zdXJpbmcgdGhhdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gYXJyYXkgZG9lcyBub3QgZXhjZWVkIHRoZSBhbGxvY2F0ZWQgc2l6ZSBhbmQgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgZW50cnkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IE5URlMgdm9sdW1lcyBhcmUgbW91bnRlZCBhbmQgaG93IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCwgc28gaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrXCIsXG4gICAgXCJudGZzX2F0dHJfYWRkXCIsXG4gICAgXCJudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRyaXZlciBieSBlbnN1cmluZyB0aGF0IHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBhcnJheSBkb2VzIG5vdCBleGNlZWQgdGhlIGFsbG9jYXRlZCBzaXplIGFuZCB0aGF0IHRoZSBzaXplIG9mIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBmaWxlIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIG9uZSBlbnRyeS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgTlRGUyB2b2x1bWVzIGFyZSBtb3VudGVkIGFuZCBob3cgYXR0cmlidXRlcyBhcmUgcHJvY2Vzc2VkLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNTo0Ny4xMzgzMjYyMzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTM3NjQxNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDU6MTU6NDcuMTM4OTUyMzE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NTM3MDExOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gTlRGUyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgIGFuZCB0aGF0IHRoZSBsb29wIGl0ZXJhdGluZyBvdmVyIGB2b2wtXFx1MDAzZWF0dHJkZWZgIGRvZXMgbm90IHJlYWQgYSBwYXJ0aWFsIHN0cnVjdHVyZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWI1NDA2NDY5ODM3ZDI0NWI1YmRjODYzNWQxMzkwYmE1YjJjZmY2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA1OjE0OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9hdHRyaWIuYyBiL2ZzL250ZnMvYXR0cmliLmNcbmluZGV4IDk5MGMzOTM3YTU1MTYuLjdkMDgxNmRlNzU2MzQgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL2F0dHJpYi5jXG4rKysgYi9mcy9udGZzL2F0dHJpYi5jXG5AQCAtMTczNyw4ICsxNzM3LDggQEAgc3RhdGljIHN0cnVjdCBhdHRyX2RlZiAqbnRmc19hdHRyX2ZpbmRfaW5fYXR0cmRlZihjb25zdCBzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbiBcdHN0cnVjdCBhdHRyX2RlZiAqYWQ7XG4gXG4gXHRXQVJOX09OKCF0eXBlKTtcbi1cdGZvciAoYWQgPSB2b2wtXHUwMDNlYXR0cmRlZjsgKHU4ICopYWQgLSAodTggKil2b2wtXHUwMDNlYXR0cmRlZiBcdTAwM2Ncbi1cdFx0XHR2b2wtXHUwMDNlYXR0cmRlZl9zaXplIFx1MDAyNlx1MDAyNiBhZC1cdTAwM2V0eXBlOyArK2FkKSB7XG4rXHRmb3IgKGFkID0gdm9sLVx1MDAzZWF0dHJkZWY7ICh1OCAqKWFkIC0gKHU4ICopdm9sLVx1MDAzZWF0dHJkZWYgXHUwMDNjPVxuK1x0ICAgICB2b2wtXHUwMDNlYXR0cmRlZl9zaXplIC0gKHMzMilzaXplb2YoKmFkKSBcdTAwMjZcdTAwMjYgYWQtXHUwMDNldHlwZTsgKythZCkge1xuIFx0XHQvKiBXZSBoYXZlIG5vdCBmb3VuZCBpdCB5ZXQsIGNhcnJ5IG9uIHNlYXJjaGluZy4gKi9cbiBcdFx0aWYgKGxpa2VseShsZTMyX3RvX2NwdShhZC1cdTAwM2V0eXBlKSBcdTAwM2MgbGUzMl90b19jcHUodHlwZSkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuY1xuaW5kZXggY2Q4ZmEyYzEzMzcwMC4uMmZkN2RiNjcyNjFlZiAxMDA2NDRcbi0tLSBhL2ZzL250ZnMvc3VwZXIuY1xuKysrIGIvZnMvbnRmcy9zdXBlci5jXG5AQCAtMTI0MSw5ICsxMjQxLDkgQEAgc3RhdGljIGJvb2wgbG9hZF9hbmRfaW5pdF9hdHRyZGVmKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuIFx0XHRnb3RvIGZhaWxlZDtcbiBcdH1cbiBcdE5Jbm9TZXRTcGFyc2VEaXNhYmxlZChOVEZTX0koaW5vKSk7XG4tXHQvKiBUaGUgc2l6ZSBvZiBGSUxFX0F0dHJEZWYgbXVzdCBiZSBhYm92ZSAwIGFuZCBmaXQgaW5zaWRlIDMxIGJpdHMuICovXG4rXHQvKiBGSUxFX0F0dHJEZWYgbXVzdCBob2xkIGF0IGxlYXN0IG9uZSBlbnRyeSBhbmQgZml0IGluc2lkZSAzMSBiaXRzLiAqL1xuIFx0aV9zaXplID0gaV9zaXplX3JlYWQoaW5vKTtcbi1cdGlmIChpX3NpemUgXHUwMDNjPSAwIHx8IGlfc2l6ZSBcdTAwM2UgMHg3ZmZmZmZmZilcbitcdGlmIChpX3NpemUgXHUwMDNjIChzNjQpc2l6ZW9mKHN0cnVjdCBhdHRyX2RlZikgfHwgaV9zaXplIFx1MDAzZSAweDdmZmZmZmZmKVxuIFx0XHRnb3RvIGlwdXRfZmFpbGVkO1xuIFx0dm9sLVx1MDAzZWF0dHJkZWYgPSBrdnphbGxvYyhpX3NpemUsIEdGUF9OT0ZTKTtcbiBcdGlmICghdm9sLVx1MDAzZWF0dHJkZWYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNTo0Ny4xMzg5NTM0MTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ1MzY5ODk3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS0FTQU4gaXMgdGhlIFJpZ2h0IFRvb2wgZm9yIFRoaXMgTlRGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBOVEZTIGRyaXZlci4gSXQgdG91Y2hlcyBgYXR0cmliLmNgIGFuZCBgc3VwZXIuY2AuIEluIGBhdHRyaWIuY2AsIGl0IGxvb2tzIGxpa2UgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCBmaXggZm9yIHRoZSBgdm9sLVx1MDAzZWF0dHJkZWZgIGl0ZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGxvb3AgY291bGQgcG90ZW50aWFsbHkgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIGBhdHRyZGVmYCBieSBkZXJlZmVyZW5jaW5nIGBhZC1cdTAwM2V0eXBlYCB3aXRob3V0IGNoZWNraW5nIGlmIGEgZnVsbCBgc3RydWN0IGF0dHJfZGVmYCBjb3VsZCBmaXQgd2l0aGluIGB2b2wtXHUwMDNlYXR0cmRlZl9zaXplYC4gVGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGVyZSdzIGVub3VnaCBzcGFjZS5cblxuSW4gYHN1cGVyLmNgLCB0aGVyZSdzIGEgc2l6ZSBjaGVjayBmb3IgYEZJTEVfQXR0ckRlZmAuIEl0J3MgZW5zdXJpbmcgdGhlIHNpemUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgLiBUaGlzIG1ha2VzIHNlbnNlLCBwcmV2ZW50aW5nIGEgemVyby1zaXplZCBvciB0b28tc21hbGwgYWxsb2NhdGlvbiB3aGljaCBjb3VsZCBsZWFkIHRvIHNpbWlsYXIgaXNzdWVzIGxhdGVyLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkNvdWxkIHRoaXMgYmUgYSBLTVNBTiB0aGluZz9cIiBiZWNhdXNlIG91dC1vZi1ib3VuZHMgc3R1ZmYgc29tZXRpbWVzIG92ZXJsYXBzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBgdm9sLVx1MDAzZWF0dHJkZWZgIGlzIGFsbG9jYXRlZCB3aXRoIGBrdnphbGxvY2AgaW4gYHN1cGVyLmNgIHdoaWNoLCBieSBkZWZpbml0aW9uLCBpbml0aWFsaXplcyB0aGUgbWVtb3J5IHRvIHplcm8uIEhvd2V2ZXIsIGl0J3MgYWxzbyBwb3B1bGF0ZWQgZnJvbSB0aGUgZGlzaywgc28gSSBuZWVkZWQgdG8gY2xhcmlmeSBob3cgaXQncyBwb3B1bGF0ZWQuIEkgcmV2aWV3ZWQgYGxvYWRfYW5kX2luaXRfYXR0cmRlZmAgYW5kIGNvbmZpcm1lZCB0aGUgbWVtb3J5IGlzIGxvYWRlZCBmcm9tIGRpc2suXG5cbktBU0FOIGlzIHRoZSB0b29sIHRoYXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBoYXBwZW5zIHdoZW4gdGhlIGxvb3AgY29uZGl0aW9uIGlzIHNhdGlzZmllZCBidXQgdGhlIGxhc3QgYGFkYCBpcyBwYXJ0aWFsbHkgb3V0IG9mIGJvdW5kcy4gVGhlIGxvb3AgaXRlcmF0ZXMgdXAgdG8gYHZvbC1cdTAwM2VhdHRyZGVmX3NpemVgLiBJZiBgaV9zaXplYCAodGhlIGFsbG9jYXRlZCBzaXplKSBpc24ndCBhIG11bHRpcGxlIG9mIGBzaXplb2YoKmFkKWAsIHRoZW4gdGhlIHZlcnkgbGFzdCBpdGVyYXRpb24gY2FuIGJlIHByb2JsZW1hdGljLiBUaGlzIGlzIG5vdyBmaXhlZCBpbiB0aGUgcGF0Y2guXG5cblNvLCBzaW5jZSBpdCdzIGFuIG91dC1vZi1ib3VuZHMgKnJlYWQqLCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBoZXJlLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgbm8gaW5mby1sZWFrYWdlIGNvbmNlcm5zLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhlIHJlYWQsIHdoaWNoIEtNU0FOIHdvdWxkbid0IGNhdGNoLiBLTVNBTiBpcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOIGZvciBvdXQtb2YtYm91bmRzLiBUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHNpemUgY2hlY2tzIGFyZSBwZXJmb3JtZWQgYW5kIGl0J3MgZml4ZWQuXG5UaGVyZWZvcmUsIG5vIEtNU0FOIGZ1enppbmcgaXMgbmVlZGVkIGhlcmUuIFRoaXMgaXMgYSBLQVNBTiBpc3N1ZSwgcGxhaW4gYW5kIHNpbXBsZS5cblxuVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZiBOVEZTIGF0dHJpYnV0ZSBkZWZpbml0aW9ucy4gSXQgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyBvdmVyIGB2b2wtXHUwMDNlYXR0cmRlZmAgYW5kIGVuc3VyZXMgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgYHN0cnVjdCBhdHRyX2RlZmAsIHByZXZlbnRpbmcgcGFydGlhbCBzdHJ1Y3R1cmUgcmVhZHMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoaXMgdHlwZSBvZiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpc3N1ZSBpc24ndCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc4LCJPdXRwdXRUb2tlbnMiOjEzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNToxNjowMS42NzU5NDU3MzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBOVEZTIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIGRlZmluaXRpb24gZmlsZSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgYHN0cnVjdCBhdHRyX2RlZmAgYW5kIHRoYXQgdGhlIGxvb3AgaXRlcmF0aW5nIG92ZXIgYHZvbC1cXHUwMDNlYXR0cmRlZmAgZG9lcyBub3QgcmVhZCBhIHBhcnRpYWwgc3RydWN0dXJlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gTlRGUyBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGZpbGUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2Ygb25lIGBzdHJ1Y3QgYXR0cl9kZWZgIGFuZCB0aGF0IHRoZSBsb29wIGl0ZXJhdGluZyBvdmVyIGB2b2wtXFx1MDAzZWF0dHJkZWZgIGRvZXMgbm90IHJlYWQgYSBwYXJ0aWFsIHN0cnVjdHVyZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowblnhn[1] Phase: Succeeded StartedAt: 2026-08-26 05:16:13 +0000 UTC FinishedAt: 2026-08-26 05:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 05:16:13 +0000 UTC FinishedAt: 2026-08-26 05:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2] Phase: Succeeded StartedAt: 2026-08-26 05:16:13 +0000 UTC FinishedAt: 2026-08-26 08:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 05:16:13 +0000 UTC FinishedAt: 2026-08-26 08:56:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 05:16:13 +0000 UTC FinishedAt: 2026-08-26 05:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 05:16:13 +0000 UTC FinishedAt: 2026-08-26 05:16:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-convert-artifact-1269944485/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 05:16:23 +0000 UTC FinishedAt: 2026-08-26 05:33:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 05:16:23 +0000 UTC FinishedAt: 2026-08-26 05:33:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d8e0a1d8-5a8e-454e-a3d2-6f18772fbc34,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-convert-artifact-1269944485/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b9564572-268f-462f-907a-99ef616b16e9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-build-action-1002810571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 05:16:23 +0000 UTC FinishedAt: 2026-08-26 05:33:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d8e0a1d8-5a8e-454e-a3d2-6f18772fbc34,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-convert-artifact-1269944485/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b9564572-268f-462f-907a-99ef616b16e9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-build-action-1002810571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 05:33:24 +0000 UTC FinishedAt: 2026-08-26 05:33:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 05:33:24 +0000 UTC FinishedAt: 2026-08-26 05:33:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 05:33:24 +0000 UTC FinishedAt: 2026-08-26 05:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 05:33:24 +0000 UTC FinishedAt: 2026-08-26 05:33:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-convert-artifact-4277245568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 05:33:34 +0000 UTC FinishedAt: 2026-08-26 05:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 05:33:34 +0000 UTC FinishedAt: 2026-08-26 05:35:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b9564572-268f-462f-907a-99ef616b16e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-build-action-1002810571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 05:35:45 +0000 UTC FinishedAt: 2026-08-26 05:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 05:35:45 +0000 UTC FinishedAt: 2026-08-26 05:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 05:35:45 +0000 UTC FinishedAt: 2026-08-26 05:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 05:35:45 +0000 UTC FinishedAt: 2026-08-26 05:52:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d8e0a1d8-5a8e-454e-a3d2-6f18772fbc34,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-convert-artifact-4277245568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "df99f4a4-65be-424e-ac9d-c772f338fac0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-build-action-2027914300/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 05:35:45 +0000 UTC FinishedAt: 2026-08-26 05:52:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d8e0a1d8-5a8e-454e-a3d2-6f18772fbc34,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-convert-artifact-4277245568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "df99f4a4-65be-424e-ac9d-c772f338fac0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-build-action-2027914300/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 05:52:35 +0000 UTC FinishedAt: 2026-08-26 05:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 05:52:35 +0000 UTC FinishedAt: 2026-08-26 05:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 05:52:35 +0000 UTC FinishedAt: 2026-08-26 05:54:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 05:52:35 +0000 UTC FinishedAt: 2026-08-26 05:54:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df99f4a4-65be-424e-ac9d-c772f338fac0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-build-action-2027914300/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 05:54:47 +0000 UTC FinishedAt: 2026-08-26 08:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 05:54:47 +0000 UTC FinishedAt: 2026-08-26 08:56:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b9564572-268f-462f-907a-99ef616b16e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df99f4a4-65be-424e-ac9d-c772f338fac0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-build-action-1002810571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-build-action-2027914300/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 05:54:47 +0000 UTC FinishedAt: 2026-08-26 05:54:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 05:54:47 +0000 UTC FinishedAt: 2026-08-26 05:54:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-convert-artifact-1772567769/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 05:54:47 +0000 UTC FinishedAt: 2026-08-26 05:54:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 05:54:47 +0000 UTC FinishedAt: 2026-08-26 05:54:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 05:54:47 +0000 UTC FinishedAt: 2026-08-26 05:54:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 05:54:58 +0000 UTC FinishedAt: 2026-08-26 08:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblnhn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_attr_size_bounds_check","ntfs_attr_add","ntfs_attr_make_non_resident"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d38ce59d16d53194cf184baa822d5f2ad528b92e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"fffbcf53-2a0c-446d-b451-e053ab8cd306","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 05:54:58 +0000 UTC FinishedAt: 2026-08-26 08:56:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b9564572-268f-462f-907a-99ef616b16e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df99f4a4-65be-424e-ac9d-c772f338fac0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-build-action-1002810571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-build-action-2027914300/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblnhn/series-workflowblnhn-convert-artifact-1772567769/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}