Name: series-workflowsb74b Phase: Succeeded StartedAt: 2026-08-12 14:07:24 +0000 UTC FinishedAt: 2026-08-12 18:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[0] Phase: Succeeded StartedAt: 2026-08-12 14:07:24 +0000 UTC FinishedAt: 2026-08-12 14:10:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 14:07:24 +0000 UTC FinishedAt: 2026-08-12 14:10:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX", "FUTEX_PRIVATE_HASH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX", "FUTEX_PRIVATE_HASH" ], "series_id": "f5791934-c4f7-4601-b386-b0ec95e2a0ae" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "futex_hash_prctl", "futex_hash_allocate_default" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgY29udHJvbCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgcmVwbGFjaW5nIGEgbXV0ZXggbG9jayB3aXRoIGFuIFJDVSByZWFkIGxvY2sgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIChgc21wX3JtYigpYCkuIEl0IGFsc28gdXNlcyBgUkVBRF9PTkNFYCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHN5bmNocm9uaXphdGlvbiwgbWVtb3J5IG9yZGVyaW5nLCBhbmQgbG9ja2luZy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgc3dpdGNoaW5nIGZyb20gYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyLiBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBhbGxvY2F0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgYW5kIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhjZmM0ZGMzNTUyZTViMTY5NDE0MmNiZDkyMGQxOTVhOTZhZmIwNGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNDowOTowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uYjFlYWI1ODQzZTlkNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2g7XG4gXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4mIzQzO1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4mIzQzO1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuJiM0MztcdCAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF9ybWIoKTtcbiYjNDM7XHRpZiAoIVJFQURfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtXHUwMDNlaGFzaCk7XG4gXHRyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4Y2ZjNGRjMzU1MmU1YjE2OTQxNDJjYmQ5MjBkMTk1YTk2YWZiMDRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTQ6MDk6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuYwppbmRleCAxMjhjNTc1MmYyMjVjLi5iMWVhYjU4NDNlOWQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKQEAgLTE3ODYsMTIgJiM0MzsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJc3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gJmFtcDttbS0mZ3Q7ZnV0ZXgucGhhc2g7CiAJc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7bW1waC0mZ3Q7bG9jayk7CiYjNDM7CWd1YXJkKHJjdSkoKTsKIAotCWlmICghbW1waC0mZ3Q7aGFzaF9uZXcpCiYjNDM7CWZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLSZndDtoYXNoKTsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZAomIzQzOwkgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluCiYjNDM7CSAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3JtYigpOwomIzQzOwlpZiAoIVJFQURfT05DRShtbXBoLSZndDtoYXNoX25ldykpCiAJCXJldHVybiB0cnVlOwogCi0JZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLSZndDtoYXNoKTsKIAlyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV0ZXggUGl2b3QgUGVuZGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCB0aGF0JiMzOTtzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgdG8gdGhlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgbG9ja2luZyBpcyBoYW5kbGVkLiBXZSYjMzk7cmUgbW92aW5nIGZyb20gYSBtdXRleCAoYGd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spYCkgdG8gUkNVIChgZ3VhcmQocmN1KSgpYCkuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdCwgaW1wbHlpbmcgdGhlIGludGVudGlvbiBpcyB0byByZWxheCBzb21lIGNvbnRlbnRpb24gYXJvdW5kIHRoYXQgY3JpdGljYWwgc2VjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKVGhlIGFkZGl0aW9uIG9mIGBzbXBfcm1iKClgIGlzIGFub3RoZXIgaW1wb3J0YW50IGRldGFpbC4gSXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgbWVtb3J5IG9yZGVyaW5nIGlzIGNydWNpYWwgaW4gdGhpcyBwYXJ0IG9mIHRoZSBjb2RlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgaG93IGRhdGEgaXMgYmVpbmcgYWNjZXNzZWQgYW5kIG1vZGlmaWVkLCBhbmQgd2hlcmUgdGhlIG1lbW9yeSBiYXJyaWVyIGlzIHBsYWNlZCBpbiB0aGUgb3BlcmF0aW9uIG9mIHRoZSBwaXZvdC4gSSBhbHNvIHNlZSB0aGV5JiMzOTtyZSBub3cgdXNpbmcgYFJFQURfT05DRShtbXBoLSZndDtoYXNoX25ldylgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYGhhc2hfbmV3YCBpcyBsaWtlbHkgYWNjZXNzZWQgYnkgbXVsdGlwbGUgdGhyZWFkcyBhbmQgd2UgYXJlIHdvcmtpbmcgdG8gZ3VhcmFudGVlIGNvbnNpc3RlbmN5IG9mIHRoYXQgYWNjZXNzIHdpdGggcmVzcGVjdCB0byB0aGUgcGl2b3QuCgpUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgZnV0ZXggY29yZSBsb2dpYywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBzaGlmdCB3YXMgbWFkZSBhbmQgd2hhdCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBpc3N1ZXMgaXQmIzM5O3MgYWRkcmVzc2luZy4gVGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZSBhcmUgaW1wb3J0YW50LiBUaW1lIHRvIGRpZyBpbnRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgZnVuY3Rpb24gaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X3Bpdm90X3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTc3Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3ODQ6c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3Ny1hZ2Fpbjpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg3ODpcdFx0d2FpdF92YXJfZXZlbnQobW0sIGZ1dGV4X3Bpdm90X3BlbmRpbmcobW0pKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBGdXRleCBIYXNoIEFsbG9jYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBmdXRleF9waXZvdF9wZW5kaW5nYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcGxheWluZyBhIHJvbGUgaW4gYSBjYWxsIHRvIGB3YWl0X3Zhcl9ldmVudGAgd2l0aGluIHRoZSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUuIFRoZSB3YXkgdGhpcyBpcyBzZXQgdXAgaXMgdW51c3VhbCwgYW5kIEkgbmVlZCB0byBwYXJzZSB0aGUgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgaGVhcnQgb2YgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIG5vdy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gV2hhdCBhcmUgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGNhbGwsIGFuZCB3aGF0JiMzOTtzIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGlzIGFsbG9jYXRpb24gY29udGV4dD8gTGV0JiMzOTtzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDAtXHQgKlx0XHRcdFx0ICByY3VfYXNzaWduX3BvaW50ZXIoXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwMTpcdCAqXHRcdFx0XHRmdXRleF9oYXNoX2FsbG9jYXRlKClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMi1cdCAqXHRcdFx0XHQgIGZ1dGV4X3JlZl9kcm9wKClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4MDQ9c3RhdGljIGJvb2wgZnV0ZXhfaGFzaF9sZXNzKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmEsXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODI4OnN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI5LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Njg6XHRyZXR1cm4gZnV0ZXhfaGFzaF9hbGxvY2F0ZShidWNrZXRzLCAwKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2OS19XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTcxPXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODEtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4MjpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykgeyByZXR1cm4gLUVJTlZBTDsgfVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgzLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpIHsgcmV0dXJuIDA7IH1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMjQ9aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMzM6XHRcdHJldCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGUoYXJnMywgZmxhZ3MpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDM0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGZyb20gYm90aCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBhbmQgYGZ1dGV4X2hhc2hfcHJjdGxgLiBgZnV0ZXhfaGFzaF9wcmN0bGAgaXMgY2xlYXJseSBvdXIgdXNlci1zcGFjZSBlbnRyeSBwb2ludCB2aWEgdGhlIGBwcmN0bChQUl9GVVRFWF9IQVNILCAuLi4pYCBjYWxsLCB3aGljaCBtZWFucyB1c2VycyBjYW4gZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGUgaGFzaGluZyBtZWNoYW5pc20uIEludGVyZXN0aW5nLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hgLiBSaWdodCwgdGltZSB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGluIGBLY29uZmlnYCB0byBzZWUgdGhlIGNvbmRpdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZXR0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4NDQ9Y29uZmlnIEZVVEVYX1BJXG4tLVxuaW5pdC9LY29uZmlnLTE4NDgtXG5pbml0L0tjb25maWc6MTg0OTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXG5pbml0L0tjb25maWctMTg1MC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtZW50aW9uIG9mIGBpbml0L0tjb25maWdgIGlzIGEgcHJldHR5IHN0cm9uZyBoaW50LiBNeSBndXQgdGVsbHMgbWUgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIGFyb3VuZCBsaW5lIDE4NDksIG1heWJlIGEgY3JpdGljYWwgb3B0aW9uLCBvciBwb3NzaWJseSBhIHJlY2VudCBjaGFuZ2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBJdCYjMzk7cyBhIGJyb2FkIGZpbGUsIHNvIGtub3dpbmcgYSBzcGVjaWZpYyBsaW5lIGdpdmVzIG1lIGEgbXVjaCBmYXN0ZXIgd2F5IHRvIGZpbmQgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0MDpcdFx0ICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJlIGJ1aWx0IHdpdGhvdXRcbjE4NDE6XHRcdCAgc3VwcG9ydCBmb3IgXCYjMzQ7ZmFzdCB1c2Vyc3BhY2UgbXV0ZXhlc1wmIzM0Oy4gIFRoZSByZXN1bHRpbmcga2VybmVsIG1heSBub3RcbjE4NDI6XHRcdCAgcnVuIGdsaWJjLWJhc2VkIGFwcGxpY2F0aW9ucyBjb3JyZWN0bHkuXG4xODQzOlx0XG4xODQ0Olx0Y29uZmlnIEZVVEVYX1BJXG4xODQ1Olx0XHRib29sXG4xODQ2Olx0XHRkZXBlbmRzIG9uIEZVVEVYIFx1MDAyNlx1MDAyNiBSVF9NVVRFWEVTXG4xODQ3Olx0XHRkZWZhdWx0IHlcbjE4NDg6XHRcbjE4NDk6XHRjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXG4xODUwOlx0XHRib29sXG4xODUxOlx0XHRkZXBlbmRzIG9uIEZVVEVYIFx1MDAyNlx1MDAyNiAhQkFTRV9TTUFMTCBcdTAwMjZcdTAwMjYgTU1VXG4xODUyOlx0XHRkZWZhdWx0IHlcbjE4NTM6XHRcbjE4NTQ6XHRjb25maWcgRlVURVhfTVBPTFxuMTg1NTpcdFx0Ym9vbFxuMTg1NjpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgTlVNQVxuMTg1NzpcdFx0ZGVmYXVsdCB5XG4xODU4Olx0XG4xODU5Olx0Y29uZmlnIEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIEZ1dGV4IFByaXZhdGUgSGFzaCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIG9uIGJ5IGRlZmF1bHQuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIOKAkyB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB3aGF0IG1hdHRlcnMgaW4gdGhlIG1ham9yaXR5IG9mIHN5c3RlbXMgdW5sZXNzIGV4cGxpY2l0bHkgbW9kaWZpZWQuIEFuZCB0aGUgY29uZGl0aW9ucyBmb3IgdGhpcyBkZWZhdWx0IGFyZTogYEZVVEVYYCBpcyBkZWZpbmVkLCBgQkFTRV9TTUFMTGAgaXMgbm90LCBhbmQgd2UgaGF2ZSBhbiBNTVUuIE1ha2VzIHNlbnNlLCB0aGF0IGNvbmZpZ3VyYXRpb24gaXMgcHJldHR5IGNvbW1vbi4gTm93LCB3aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludD8gTG9va3MgbGlrZSBgZnV0ZXhfaGFzaF9wcmN0bGAgaXMgdGhlIGZ1bmN0aW9uIHdlIG5lZWQgdG8gZm9jdXMgb24uIE15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgRlVURVhfUFJJVkFURV9IQVNIYCBzZXR0aW5nIGlzIGFjdHVhbGx5IHV0aWxpemVkLiBXaGVyZSBpcyB0aGUgbG9naWM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGxvY2tpbmcgcGVyZm9ybWFuY2Ugb3IgbWVtb3J5IHVzYWdlIHdpdGggdGhpcyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24/IFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc3PWxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC03OC1cdCAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo3OTppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTQ9c3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTk4LX1cbmluY2x1ZGUvbGludXgvZnV0ZXguaDo5OTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAwLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTc9dm9pZCBmdXRleF9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAyNDppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcbi0tXG5rZXJuZWwvc3lzLmM9MjUzND1TWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxuLS1cbmtlcm5lbC9zeXMuYy0yODg0LVx0Y2FzZSBQUl9GVVRFWF9IQVNIOlxua2VybmVsL3N5cy5jOjI4ODU6XHRcdGVycm9yID0gZnV0ZXhfaGFzaF9wcmN0bChhcmcyLCBhcmczLCBhcmc0KTtcbmtlcm5lbC9zeXMuYy0yODg2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1dGV4IEhhc2ggUHJjdGwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgaXQmIzM5O3MgaGl0dGluZyBgZnV0ZXhfaGFzaF9wcmN0bGAgdGhyb3VnaCBhIGBwcmN0bGAgY2FsbCB3aXRoIGBQUl9GVVRFWF9IQVNIYCYjMzQ7LiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCBoZXJlLiBUaGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCB3aGljaCBpcyBjbGVhcmx5IGNhbGxlZCBmcm9tIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gQW5kLCBvZiBjb3Vyc2UsIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBmdXRleF9oYXNoX3ByY3RsYC4gU28sIHRoZSBlbnRpcmUgcGF0aCwgZnJvbSB0aGUgYHByY3RsYCBzeXN0ZW0gY2FsbCwgdGhyb3VnaCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAsIGRvd24gdG8gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCBpcyBkaXJlY3RseSBpbnZvbHZlZC4gR29vZCwgdGhhdCBjb25maXJtcyByZWFjaGFiaWxpdHkuCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCBpbmRpY2F0aW5nIHNvbWUga2luZCBvZiByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgbG9ja2luZyBwcm9ibGVtIHRoZXJlLiBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2UgaXMgYm90aCBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgbWVhbnMgd2UgYXJlIGZpeGluZyBzb21ldGhpbmcgdGhhdCB3aWxsIGFjdHVhbGx5IGhhdmUgYW4gaW1wYWN0LiBUaGUgcHJpbWFyeSBmb2N1cyBub3cgbmVlZHMgdG8gYmUgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBlc3BlY2lhbGx5IGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gVGhlIG90aGVyLCBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIGlzIGxpa2VseSBzdGF0aWMgaW5saW5lIG9yIGp1c3QgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIHRoZSBsYXR0ZXIuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGJvdGggYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGFuZCBgZnV0ZXhfaGFzaF9wcmN0bGAgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGUgZml4IGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhZGRyZXNzZXMgdGhlIHJhY2UuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgZGV0YWlsIGxpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVx0ICpcdFx0XHRcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsIG5ldyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XHQgKlx0XHRcdFx0ZnV0ZXhfaGFzaF9hbGxvY2F0ZSgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXHQgKlx0XHRcdFx0ICBmdXRleF9yZWZfZHJvcCgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4Olx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4My1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKSB7IHJldHVybiAwOyB9XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlx0XHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGdXRleCBTeW1ib2wgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZm9jdXNpbmcgb24gdGhlc2UgYGZ1dGV4YCBmdW5jdGlvbnMuIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgYXJlIG5vbi1zdGF0aWMg4oCTIHRoYXQmIzM5O3MgdGhlIGtleSBpbmRpY2F0b3IuIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBvdXRzaWRlIHRoZWlyIHNvdXJjZSBmaWxlcywgd2hpY2ggbWVhbnMgdGhleSBjYW4gYmUgZW50cnkgcG9pbnRzIGZvciBpbnRlcmFjdGlvbi4gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgaWdub3JlIGl0IGZvciBub3cgYXMgYSBtb3JlIGdsb2JhbCBpbmRpY2F0b3IuIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgYXJlLCB0aGVyZWZvcmUsIGdvb2QgY2FuZGlkYXRlcyBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uIGFuZCBwb3RlbnRpYWwgaG9va2luZyBvciBpbnN0cnVtZW50YXRpb24uIEhvd2V2ZXIsIGJlZm9yZSBJIGdldCB0b28gZGVlcCwgaXQmIzM5O3Mgd29ydGggdGFraW5nIGEgc3RlcCBiYWNrLi4uIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLCB3aGlsZSBub24tc3RhdGljLCBuZWVkcyBjbGFyaWZpY2F0aW9uLiBXaGVyZSBpcyB0aGF0IGFjdHVhbGx5IGNhbGxlZCBmcm9tPyBJdHMgY2FsbGVycyBhcmUgZ29pbmcgdG8gaW5kaWNhdGUgaG93IGl0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MS0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODMtdm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTg0LSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04Ni1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDItfVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwNC1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvZm9yay5jLTE5NzYtXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxua2VybmVsL2ZvcmsuYy0xOTc4LXtcbi0tXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTI0MTAtXG5rZXJuZWwvZm9yay5jOjI0MTE6XHRpZiAobmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoY2xvbmVfZmxhZ3MpKSB7XG5rZXJuZWwvZm9yay5jOjI0MTI6XHRcdHJldHZhbCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCgpO1xua2VybmVsL2ZvcmsuYy0yNDEzLVx0XHRpZiAocmV0dmFsKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0NgoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZ1dGV4IFByaXZhdGUgSGFzaCBBbGxvY2F0aW9uIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgZ2V0cyBjYWxsZWQgZnJvbSBgY29weV9wcm9jZXNzYCBkdXJpbmcgYSBmb3JrLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGFic29sdXRlbHkgcmVhY2hhYmxlLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5IGhlcmUuIFRoZSBjb25maWd1cmF0aW9uIG5lZWRlZCB0byB0cmlnZ2VyIHRoaXMgaXMgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIFNpbmNlIHRoYXQgY29uZmlnIGRlcGVuZHMgb24gYEZVVEVYYCwgYW5kIHRoYXQgd2UgZG9uJiMzOTt0IGhhdmUgYEJBU0VfU01BTExgIGFuZCAqZG8qIGhhdmUgYE1NVWAsIHdlIHNob3VsZCBkZWZpbml0ZWx5IGVuYWJsZSBgRlVURVhgIGFsb25nIHdpdGggYEZVVEVYX1BSSVZBVEVfSEFTSGAuCgpTbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZywgZGlzdGlsbGVkOgoKKiAgICoqVGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLioqIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24uIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSB3aXRoaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGZyb20gYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIHRvIHNvbHZlIGEgcmFjZSBjb25kaXRpb24sIHNvIHRoaXMgaXMgY3JpdGljYWwuCiogICAqKlRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSB3YW50IHRvIGZvY3VzIG9uIGFyZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLioqIFRoZXkgYXJlIHJpZ2h0IHdoZXJlIHRoZSBhY3Rpb24gaXMgaGFwcGVuaW5nLgoqICAgKipUbyBlbmFibGUgdGhpcyB0ZXN0aW5nIHByb3Blcmx5LCBJIG5lZWQgdG8gZW5hYmxlIHR3byBrZXJuZWwgY29uZmlndXJhdGlvbnM6KiogYEZVVEVYX1BSSVZBVEVfSEFTSGAgYW5kIHRoZSBwYXJlbnQgYEZVVEVYYCBkZXBlbmRlbmN5LgoqICAgKipUaGUgcmVhc29uaW5nIGlzIHNvbGlkOioqIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGlzIHBhcnQgb2YgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBhbGxvY2F0aW9uLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGNhbGwgYW5kIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgY29udHJvbCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgcmVwbGFjaW5nIGEgbXV0ZXggbG9jayB3aXRoIGFuIFJDVSByZWFkIGxvY2sgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIChgc21wX3JtYigpYCkuIEl0IGFsc28gdXNlcyBgUkVBRF9PTkNFYCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHN5bmNocm9uaXphdGlvbiwgbWVtb3J5IG9yZGVyaW5nLCBhbmQgbG9ja2luZy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGNmYzRkYzM1NTJlNWIxNjk0MTQyY2JkOTIwZDE5NWE5NmFmYjA0YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDE0OjA5OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKaW5kZXggMTI4YzU3NTJmMjI1Yy4uYjFlYWI1ODQzZTlkNiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9ICZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoOwogCXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTgKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1dGV4IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBzd2l0Y2hpbmcgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGZyb20gYSBgbXV0ZXhgIGd1YXJkZWQgYnkgYGd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spO2AgdG8gYW4gUkNVIG1lY2hhbmlzbSB1c2luZyBgZ3VhcmQocmN1KSgpO2AuIEkgc2VlIHRoYXQgYHJjdV9kZXJlZmVyZW5jZWAsIGBSRUFEX09OQ0VgLCBhbmQgYHNtcF9ybWIoKWAgYXJlIGludHJvZHVjZWQuIFRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBjb25jdXJyZW5jeSwgUkNVLCBhbmQgdGhlIGNyaXRpY2FsIGltcG9ydGFuY2Ugb2YgbWVtb3J5IGJhcnJpZXJzLgoKTm8gbmV3IGFsbG9jYXRpb25zIGhlcmUsIGFuZCBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0IHJlbW92ZXMgYSB3aG9sZSBjbGFzcyBvZiBwb3RlbnRpYWwgaGVhZGFjaGVzLiBTaW5jZSB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgY29waWVzLCBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGltbWVkaWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBjcmVlcGluZyBpbiBmcm9tIHRoaXMgcGF0Y2guCgpUaGUgbGlrZWx5IGJ1Z3MgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkICpoZXJlKiB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3IgbG9ja2luZyBpc3N1ZXMsIHRoZSBzdGFuZGFyZCBjb25jdXJyZW5jeSBwaXRmYWxscy4gQnV0LCBLQ1NBTiwgS0FTQU4sIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBiZSBteSBmcmllbmRzIGhlcmUuIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIHRoYXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIHRyaWdnZXJlZC4gVGhlcmVmb3JlLCBJIGNhbiBzYWZlbHkgZGVjbGFyZSB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb2RlOgoKYGBgYwotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CmBgYAoKWWVwLCB0aGlzIGlzIHNvbGVseSBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNoYW5nZS4gVGhlcmUmIzM5O3Mgbm8gaGludCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbnl3aGVyZSBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZS4gSSYjMzk7bSBzdGlja2luZyB3aXRoIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBhIG11dGV4IGZvciBhbiBSQ1UsIGFuZCBhZGRpbmcgdGhlIHJlcXVpcmVkIG1lbW9yeSBiYXJyaWVyIHRvIGVuc3VyZSB0aGF0IHdlIHdpbGwgc2VlIHRoZSBuZXcgaGFzaCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmN1cnJlbmN5IGNvbnRyb2wgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHJlcGxhY2luZyBhIG11dGV4IGxvY2sgd2l0aCBhbiBSQ1UgcmVhZCBsb2NrIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllciAoYHNtcF9ybWIoKWApLiBJdCBhbHNvIHVzZXMgYFJFQURfT05DRWAgYW5kIGByY3VfZGVyZWZlcmVuY2VgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24sIG1lbW9yeSBvcmRlcmluZywgYW5kIGxvY2tpbmcuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBjb250cm9sIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBieSByZXBsYWNpbmcgYSBtdXRleCBsb2NrIHdpdGggYW4gUkNVIHJlYWQgbG9jayBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgKGBzbXBfcm1iKClgKS4gSXQgYWxzbyB1c2VzIGBSRUFEX09OQ0VgIGFuZCBgcmN1X2RlcmVmZXJlbmNlYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uLCBtZW1vcnkgb3JkZXJpbmcsIGFuZCBsb2NraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTowMi4wNjcwOTQ3NjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTU1NjU0NDIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBjb250cm9sIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBieSByZXBsYWNpbmcgYSBtdXRleCBsb2NrIHdpdGggYW4gUkNVIHJlYWQgbG9jayBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgKGBzbXBfcm1iKClgKS4gSXQgYWxzbyB1c2VzIGBSRUFEX09OQ0VgIGFuZCBgcmN1X2RlcmVmZXJlbmNlYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uLCBtZW1vcnkgb3JkZXJpbmcsIGFuZCBsb2NraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjAyLjA2NzEwMjMzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MTkzMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGNmYzRkYzM1NTJlNWIxNjk0MTQyY2JkOTIwZDE5NWE5NmFmYjA0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNDowOTowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmIxZWFiNTg0M2U5ZDYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcXG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoO1xcbiBcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNm1tcGgtXFx1MDAzZWxvY2spO1xcbitcXHRndWFyZChyY3UpKCk7XFxuIFxcbi1cXHRpZiAoIW1tcGgtXFx1MDAzZWhhc2hfbmV3KVxcbitcXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cXHUwMDNlaGFzaCk7XFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcXG4rXFx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxcbitcXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9ybWIoKTtcXG4rXFx0aWYgKCFSRUFEX09OQ0UobW1waC1cXHUwMDNlaGFzaF9uZXcpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cXHUwMDNlaGFzaCk7XFxuIFxcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTowMi41MDY2MDEwMDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MDc3MzYwODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgc3dpdGNoaW5nIGZyb20gYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyLiBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBhbGxvY2F0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgYW5kIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGNmYzRkYzM1NTJlNWIxNjk0MTQyY2JkOTIwZDE5NWE5NmFmYjA0YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE0OjA5OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmIxZWFiNTg0M2U5ZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jXG4rKysgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2g7XG4gXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKTtcbitcdGd1YXJkKHJjdSkoKTtcbiBcbi1cdGlmICghbW1waC1cdTAwM2VoYXNoX25ldylcbitcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLVx1MDAzZWhhc2gpO1xuK1x0LypcbitcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcbitcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cbitcdCAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLlxuK1x0ICovXG4rXHRzbXBfcm1iKCk7XG4rXHRpZiAoIVJFQURfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtXHUwMDNlaGFzaCk7XG4gXHRyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTowMi41MDY2MDM4NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjUxNzAxNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV0ZXggUGl2b3QgUGVuZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AgdGhhdCdzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgdG8gdGhlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgbG9ja2luZyBpcyBoYW5kbGVkLiBXZSdyZSBtb3ZpbmcgZnJvbSBhIG11dGV4IChgZ3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jaylgKSB0byBSQ1UgKGBndWFyZChyY3UpKClgKS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgc2hpZnQsIGltcGx5aW5nIHRoZSBpbnRlbnRpb24gaXMgdG8gcmVsYXggc29tZSBjb250ZW50aW9uIGFyb3VuZCB0aGF0IGNyaXRpY2FsIHNlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy5cblxuVGhlIGFkZGl0aW9uIG9mIGBzbXBfcm1iKClgIGlzIGFub3RoZXIgaW1wb3J0YW50IGRldGFpbC4gSXQncyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCBtZW1vcnkgb3JkZXJpbmcgaXMgY3J1Y2lhbCBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUsIHNvIEknbGwgbmVlZCB0byBhbmFseXplIGhvdyBkYXRhIGlzIGJlaW5nIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCwgYW5kIHdoZXJlIHRoZSBtZW1vcnkgYmFycmllciBpcyBwbGFjZWQgaW4gdGhlIG9wZXJhdGlvbiBvZiB0aGUgcGl2b3QuIEkgYWxzbyBzZWUgdGhleSdyZSBub3cgdXNpbmcgYFJFQURfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3KWAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgaGFzaF9uZXdgIGlzIGxpa2VseSBhY2Nlc3NlZCBieSBtdWx0aXBsZSB0aHJlYWRzIGFuZCB3ZSBhcmUgd29ya2luZyB0byBndWFyYW50ZWUgY29uc2lzdGVuY3kgb2YgdGhhdCBhY2Nlc3Mgd2l0aCByZXNwZWN0IHRvIHRoZSBwaXZvdC5cblxuVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGZ1dGV4IGNvcmUgbG9naWMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgc2hpZnQgd2FzIG1hZGUgYW5kIHdoYXQgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgaXNzdWVzIGl0J3MgYWRkcmVzc2luZy4gVGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZSBhcmUgaW1wb3J0YW50LiBUaW1lIHRvIGRpZyBpbnRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgZnVuY3Rpb24gaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MTAuMTU4MzA5MjI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDExNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X3Bpdm90X3BlbmRpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE3NzM9dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzg0OnN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzg1LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3Ny1hZ2FpbjpcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Nzg6XFx0XFx0d2FpdF92YXJfZXZlbnQobW0sIGZ1dGV4X3Bpdm90X3BlbmRpbmcobW0pKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOToxMC4yMDQ3MjYzMTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5MjkwOTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBmdXRleF9waXZvdF9wZW5kaW5nYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcGxheWluZyBhIHJvbGUgaW4gYSBjYWxsIHRvIGB3YWl0X3Zhcl9ldmVudGAgd2l0aGluIHRoZSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaGVyZS4gVGhlIHdheSB0aGlzIGlzIHNldCB1cCBpcyB1bnVzdWFsLCBhbmQgSSBuZWVkIHRvIHBhcnNlIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBoZWFydCBvZiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgbm93LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgY2FsbCwgYW5kIHdoYXQncyBpdHMgcHVycG9zZSB3aXRoaW4gdGhpcyBhbGxvY2F0aW9uIGNvbnRleHQ/IExldCdzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjE0Ljg0NDAyMDUzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE2NzA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cXHQgKlxcdFxcdFxcdFxcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XFx0ICpcXHRcXHRcXHRcXHRmdXRleF9oYXNoX2FsbG9jYXRlKClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXFx0ICpcXHRcXHRcXHRcXHQgIGZ1dGV4X3JlZl9kcm9wKClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4OlxcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2OS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgzLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjE0Ljg5MTE5MTc3MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTc0MzQ4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZnJvbSBib3RoIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGFuZCBgZnV0ZXhfaGFzaF9wcmN0bGAuIGBmdXRleF9oYXNoX3ByY3RsYCBpcyBjbGVhcmx5IG91ciB1c2VyLXNwYWNlIGVudHJ5IHBvaW50IHZpYSB0aGUgYHByY3RsKFBSX0ZVVEVYX0hBU0gsIC4uLilgIGNhbGwsIHdoaWNoIG1lYW5zIHVzZXJzIGNhbiBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZSBoYXNoaW5nIG1lY2hhbmlzbS4gSW50ZXJlc3RpbmcuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSGAuIFJpZ2h0LCB0aW1lIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaW4gYEtjb25maWdgIHRvIHNlZSB0aGUgY29uZGl0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOToxOC43MDg2MzA1OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEyNzU4MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODQ0PWNvbmZpZyBGVVRFWF9QSVxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDgtXFxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbmluaXQvS2NvbmZpZy0xODUwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MjAuNTIxMzk0NDc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NzYwNDkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIG1lbnRpb24gb2YgYGluaXQvS2NvbmZpZ2AgaXMgYSBwcmV0dHkgc3Ryb25nIGhpbnQuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBhcm91bmQgbGluZSAxODQ5LCBtYXliZSBhIGNyaXRpY2FsIG9wdGlvbiwgb3IgcG9zc2libHkgYSByZWNlbnQgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gSXQncyBhIGJyb2FkIGZpbGUsIHNvIGtub3dpbmcgYSBzcGVjaWZpYyBsaW5lIGdpdmVzIG1lIGEgbXVjaCBmYXN0ZXIgd2F5IHRvIGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3IuIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MjQuODY5MDAxODYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTg0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg0MDpcXHRcXHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmUgYnVpbHQgd2l0aG91dFxcbjE4NDE6XFx0XFx0ICBzdXBwb3J0IGZvciBcXFwiZmFzdCB1c2Vyc3BhY2UgbXV0ZXhlc1xcXCIuICBUaGUgcmVzdWx0aW5nIGtlcm5lbCBtYXkgbm90XFxuMTg0MjpcXHRcXHQgIHJ1biBnbGliYy1iYXNlZCBhcHBsaWNhdGlvbnMgY29ycmVjdGx5LlxcbjE4NDM6XFx0XFxuMTg0NDpcXHRjb25maWcgRlVURVhfUElcXG4xODQ1OlxcdFxcdGJvb2xcXG4xODQ2OlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgUlRfTVVURVhFU1xcbjE4NDc6XFx0XFx0ZGVmYXVsdCB5XFxuMTg0ODpcXHRcXG4xODQ5OlxcdGNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcXG4xODUwOlxcdFxcdGJvb2xcXG4xODUxOlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgIUJBU0VfU01BTEwgXFx1MDAyNlxcdTAwMjYgTU1VXFxuMTg1MjpcXHRcXHRkZWZhdWx0IHlcXG4xODUzOlxcdFxcbjE4NTQ6XFx0Y29uZmlnIEZVVEVYX01QT0xcXG4xODU1OlxcdFxcdGJvb2xcXG4xODU2OlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgTlVNQVxcbjE4NTc6XFx0XFx0ZGVmYXVsdCB5XFxuMTg1ODpcXHRcXG4xODU5OlxcdGNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MjQuODY5MTQzMjczWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzOTUwNzI0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBGdXRleCBQcml2YXRlIEhhc2ggQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIG9uIGJ5IGRlZmF1bHQuIFRoYXQncyBhIGtleSBkZXRhaWwg4oCTIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHdoYXQgbWF0dGVycyBpbiB0aGUgbWFqb3JpdHkgb2Ygc3lzdGVtcyB1bmxlc3MgZXhwbGljaXRseSBtb2RpZmllZC4gQW5kIHRoZSBjb25kaXRpb25zIGZvciB0aGlzIGRlZmF1bHQgYXJlOiBgRlVURVhgIGlzIGRlZmluZWQsIGBCQVNFX1NNQUxMYCBpcyBub3QsIGFuZCB3ZSBoYXZlIGFuIE1NVS4gTWFrZXMgc2Vuc2UsIHRoYXQgY29uZmlndXJhdGlvbiBpcyBwcmV0dHkgY29tbW9uLiBOb3csIHdoYXQncyB0aGUgZW50cnkgcG9pbnQ/IExvb2tzIGxpa2UgYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIHRoZSBmdW5jdGlvbiB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBNeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgdGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYEZVVEVYX1BSSVZBVEVfSEFTSGAgc2V0dGluZyBpcyBhY3R1YWxseSB1dGlsaXplZC4gV2hlcmUgaXMgdGhlIGxvZ2ljPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBsb2NraW5nIHBlcmZvcm1hbmNlIG9yIG1lbW9yeSB1c2FnZSB3aXRoIHRoaXMgZGVmYXVsdCBjb25maWd1cmF0aW9uPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDM0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTozMC4yNjQyMTgxMzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzUzNzA3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc3PWxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtNzgtXFx0ICAgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo3OTppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTQ9c3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtOTgtfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo5OTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMC17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTc9dm9pZCBmdXRleF9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDIzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAyNDppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XFxuLS1cXG5rZXJuZWwvc3lzLmM9MjUzND1TWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxcbi0tXFxua2VybmVsL3N5cy5jLTI4ODQtXFx0Y2FzZSBQUl9GVVRFWF9IQVNIOlxcbmtlcm5lbC9zeXMuYzoyODg1OlxcdFxcdGVycm9yID0gZnV0ZXhfaGFzaF9wcmN0bChhcmcyLCBhcmczLCBhcmc0KTtcXG5rZXJuZWwvc3lzLmMtMjg4Ni1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MzIuMDk5NTk1Mzk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTYwNjcxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXRleCBIYXNoIFByY3RsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBpdCdzIGhpdHRpbmcgYGZ1dGV4X2hhc2hfcHJjdGxgIHRocm91Z2ggYSBgcHJjdGxgIGNhbGwgd2l0aCBgUFJfRlVURVhfSEFTSGBcIi4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCBoZXJlLiBUaGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCB3aGljaCBpcyBjbGVhcmx5IGNhbGxlZCBmcm9tIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gQW5kLCBvZiBjb3Vyc2UsIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBmdXRleF9oYXNoX3ByY3RsYC4gU28sIHRoZSBlbnRpcmUgcGF0aCwgZnJvbSB0aGUgYHByY3RsYCBzeXN0ZW0gY2FsbCwgdGhyb3VnaCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAsIGRvd24gdG8gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCBpcyBkaXJlY3RseSBpbnZvbHZlZC4gR29vZCwgdGhhdCBjb25maXJtcyByZWFjaGFiaWxpdHkuXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIGluZGljYXRpbmcgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uIG9yIHBvdGVudGlhbCBsb2NraW5nIHByb2JsZW0gdGhlcmUuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZSBpcyBib3RoIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBtZWFucyB3ZSBhcmUgZml4aW5nIHNvbWV0aGluZyB0aGF0IHdpbGwgYWN0dWFsbHkgaGF2ZSBhbiBpbXBhY3QuIFRoZSBwcmltYXJ5IGZvY3VzIG5vdyBuZWVkcyB0byBiZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGVzcGVjaWFsbHkgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGUgb3RoZXIsIGBmdXRleF9waXZvdF9wZW5kaW5nYCwgaXMgbGlrZWx5IHN0YXRpYyBpbmxpbmUgb3IganVzdCBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGxhdHRlci5cblxuQWxyaWdodCwgbGV0J3MgaGVhZCBvdmVyIHRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGJvdGggYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGFuZCBgZnV0ZXhfaGFzaF9wcmN0bGAgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGUgZml4IGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhZGRyZXNzZXMgdGhlIHJhY2UuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBkZXRhaWwgbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTozNy44MTU2NjUzMTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQxNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVxcdCAqXFx0XFx0XFx0XFx0ICByY3VfYXNzaWduX3BvaW50ZXIoXFx1MDAyNm1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwMTpcXHQgKlxcdFxcdFxcdFxcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMi1cXHQgKlxcdFxcdFxcdFxcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Njg6XFx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODEtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlxcdFxcdHJldCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGUoYXJnMywgZmxhZ3MpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MzcuODYwMzExMDg5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTk5MDczOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGdXRleCBTeW1ib2wgQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIG9uIHRoZXNlIGBmdXRleGAgZnVuY3Rpb25zLiBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGFyZSBub24tc3RhdGljIOKAkyB0aGF0J3MgdGhlIGtleSBpbmRpY2F0b3IuIFRoYXQgbWVhbnMgdGhleSdyZSBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlaXIgc291cmNlIGZpbGVzLCB3aGljaCBtZWFucyB0aGV5IGNhbiBiZSBlbnRyeSBwb2ludHMgZm9yIGludGVyYWN0aW9uLiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgaXMgc3RhdGljLCBzbyBJIGNhbiBwcm9iYWJseSBpZ25vcmUgaXQgZm9yIG5vdyBhcyBhIG1vcmUgZ2xvYmFsIGluZGljYXRvci4gYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBhcmUsIHRoZXJlZm9yZSwgZ29vZCBjYW5kaWRhdGVzIGZvciBjbG9zZXIgZXhhbWluYXRpb24gYW5kIHBvdGVudGlhbCBob29raW5nIG9yIGluc3RydW1lbnRhdGlvbi4gSG93ZXZlciwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBpdCdzIHdvcnRoIHRha2luZyBhIHN0ZXAgYmFjay4uLiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCwgd2hpbGUgbm9uLXN0YXRpYywgbmVlZHMgY2xhcmlmaWNhdGlvbi4gV2hlcmUgaXMgdGhhdCBhY3R1YWxseSBjYWxsZWQgZnJvbT8gSXRzIGNhbGxlcnMgYXJlIGdvaW5nIHRvIGluZGljYXRlIGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjQzLjU2MDIyMTE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMjEyMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgxLSNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgzLXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODQtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODYtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMi19XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDQtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMTk3Ni1cXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxcbmtlcm5lbC9mb3JrLmMtMTk3OC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjQxMC1cXG5rZXJuZWwvZm9yay5jOjI0MTE6XFx0aWYgKG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KGNsb25lX2ZsYWdzKSkge1xcbmtlcm5lbC9mb3JrLmM6MjQxMjpcXHRcXHRyZXR2YWwgPSBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoKTtcXG5rZXJuZWwvZm9yay5jLTI0MTMtXFx0XFx0aWYgKHJldHZhbClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjQ1LjIxMzQzODM4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTg2NTI2NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBGdXRleCBQcml2YXRlIEhhc2ggQWxsb2NhdGlvbiBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGdldHMgY2FsbGVkIGZyb20gYGNvcHlfcHJvY2Vzc2AgZHVyaW5nIGEgZm9yay4gVGhhdCBtZWFucyBpdCdzIGFic29sdXRlbHkgcmVhY2hhYmxlLCBhbmQgdGhhdCdzIHRoZSBrZXkgaGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBpcyBgRlVURVhfUFJJVkFURV9IQVNIYC4gU2luY2UgdGhhdCBjb25maWcgZGVwZW5kcyBvbiBgRlVURVhgLCBhbmQgdGhhdCB3ZSBkb24ndCBoYXZlIGBCQVNFX1NNQUxMYCBhbmQgKmRvKiBoYXZlIGBNTVVgLCB3ZSBzaG91bGQgZGVmaW5pdGVseSBlbmFibGUgYEZVVEVYYCBhbG9uZyB3aXRoIGBGVVRFWF9QUklWQVRFX0hBU0hgLlxuXG5TbyBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcsIGRpc3RpbGxlZDpcblxuKiAgICoqVGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLioqIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbi4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIHdpdGhpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgZnJvbSBhIG11dGV4IHRvIFJDVSBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgdG8gc29sdmUgYSByYWNlIGNvbmRpdGlvbiwgc28gdGhpcyBpcyBjcml0aWNhbC5cbiogICAqKlRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSB3YW50IHRvIGZvY3VzIG9uIGFyZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLioqIFRoZXkgYXJlIHJpZ2h0IHdoZXJlIHRoZSBhY3Rpb24gaXMgaGFwcGVuaW5nLlxuKiAgICoqVG8gZW5hYmxlIHRoaXMgdGVzdGluZyBwcm9wZXJseSwgSSBuZWVkIHRvIGVuYWJsZSB0d28ga2VybmVsIGNvbmZpZ3VyYXRpb25zOioqIGBGVVRFWF9QUklWQVRFX0hBU0hgIGFuZCB0aGUgcGFyZW50IGBGVVRFWGAgZGVwZW5kZW5jeS5cbiogICAqKlRoZSByZWFzb25pbmcgaXMgc29saWQ6KiogYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgaXMgcGFydCBvZiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIGFsbG9jYXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgY2FsbCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzQ2LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTo1My4xOTk5NjczNjhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDIzODQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIixcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIixcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjUzLjI4MDIxMzIxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM0MzQxNDc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjUzLjI4MDg2OTA1OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNDM0Mjc1MzIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgY29udHJvbCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgcmVwbGFjaW5nIGEgbXV0ZXggbG9jayB3aXRoIGFuIFJDVSByZWFkIGxvY2sgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIChgc21wX3JtYigpYCkuIEl0IGFsc28gdXNlcyBgUkVBRF9PTkNFYCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHN5bmNocm9uaXphdGlvbiwgbWVtb3J5IG9yZGVyaW5nLCBhbmQgbG9ja2luZy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4Y2ZjNGRjMzU1MmU1YjE2OTQxNDJjYmQ5MjBkMTk1YTk2YWZiMDRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTQ6MDk6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uYjFlYWI1ODQzZTlkNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0xNzg2LDEyICsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuK1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuK1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuK1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4rXHQgKi9cbitcdHNtcF9ybWIoKTtcbitcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjUzLjI4MDg2OTkxOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDM0MjczMDQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXRleCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHN3aXRjaGluZyB0aGUgbG9ja2luZyBtZWNoYW5pc20gZnJvbSBhIGBtdXRleGAgZ3VhcmRlZCBieSBgZ3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7YCB0byBhbiBSQ1UgbWVjaGFuaXNtIHVzaW5nIGBndWFyZChyY3UpKCk7YC4gSSBzZWUgdGhhdCBgcmN1X2RlcmVmZXJlbmNlYCwgYFJFQURfT05DRWAsIGFuZCBgc21wX3JtYigpYCBhcmUgaW50cm9kdWNlZC4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIGNvbmN1cnJlbmN5LCBSQ1UsIGFuZCB0aGUgY3JpdGljYWwgaW1wb3J0YW5jZSBvZiBtZW1vcnkgYmFycmllcnMuXG5cbk5vIG5ldyBhbGxvY2F0aW9ucyBoZXJlLCBhbmQgbm90aGluZyBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCByZW1vdmVzIGEgd2hvbGUgY2xhc3Mgb2YgcG90ZW50aWFsIGhlYWRhY2hlcy4gU2luY2Ugd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgY29waWVzLCBJJ20gbm90IHNlZWluZyBhbnkgaW1tZWRpYXRlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNyZWVwaW5nIGluIGZyb20gdGhpcyBwYXRjaC5cblxuVGhlIGxpa2VseSBidWdzIHRoYXQgY291bGQgYmUgaW50cm9kdWNlZCAqaGVyZSogd291bGQgYmUgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIG9yIGxvY2tpbmcgaXNzdWVzLCB0aGUgc3RhbmRhcmQgY29uY3VycmVuY3kgcGl0ZmFsbHMuIEJ1dCwgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUCBhcmUgZ29pbmcgdG8gYmUgbXkgZnJpZW5kcyBoZXJlLiBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyB0aGF0J3Mgbm90IGdvaW5nIHRvIGJlIHRyaWdnZXJlZC4gVGhlcmVmb3JlLCBJIGNhbiBzYWZlbHkgZGVjbGFyZSB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgY29kZTpcblxuYGBgY1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4rXHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4rXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cdTAwM2VoYXNoKTtcbitcdC8qXG4rXHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4rXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG4rXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbitcdCAqL1xuK1x0c21wX3JtYigpO1xuK1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG5gYGBcblxuWWVwLCB0aGlzIGlzIHNvbGVseSBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNoYW5nZS4gVGhlcmUncyBubyBoaW50IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFueXdoZXJlIGluIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBJJ20gc3RpY2tpbmcgd2l0aCBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgYSBtdXRleCBmb3IgYW4gUkNVLCBhbmQgYWRkaW5nIHRoZSByZXF1aXJlZCBtZW1vcnkgYmFycmllciB0byBlbnN1cmUgdGhhdCB3ZSB3aWxsIHNlZSB0aGUgbmV3IGhhc2ggb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE4LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjEwOjE3LjYyMzYwMzkxM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgY29udHJvbCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgcmVwbGFjaW5nIGEgbXV0ZXggbG9jayB3aXRoIGFuIFJDVSByZWFkIGxvY2sgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIChgc21wX3JtYigpYCkuIEl0IGFsc28gdXNlcyBgUkVBRF9PTkNFYCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHN5bmNocm9uaXphdGlvbiwgbWVtb3J5IG9yZGVyaW5nLCBhbmQgbG9ja2luZy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBjb250cm9sIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBieSByZXBsYWNpbmcgYSBtdXRleCBsb2NrIHdpdGggYW4gUkNVIHJlYWQgbG9jayBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgKGBzbXBfcm1iKClgKS4gSXQgYWxzbyB1c2VzIGBSRUFEX09OQ0VgIGFuZCBgcmN1X2RlcmVmZXJlbmNlYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uLCBtZW1vcnkgb3JkZXJpbmcsIGFuZCBsb2NraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowsb74b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 14:07:24 +0000 UTC FinishedAt: 2026-08-12 14:10:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX", "FUTEX_PRIVATE_HASH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX", "FUTEX_PRIVATE_HASH" ], "series_id": "f5791934-c4f7-4601-b386-b0ec95e2a0ae" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "futex_hash_prctl", "futex_hash_allocate_default" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgY29udHJvbCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgcmVwbGFjaW5nIGEgbXV0ZXggbG9jayB3aXRoIGFuIFJDVSByZWFkIGxvY2sgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIChgc21wX3JtYigpYCkuIEl0IGFsc28gdXNlcyBgUkVBRF9PTkNFYCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHN5bmNocm9uaXphdGlvbiwgbWVtb3J5IG9yZGVyaW5nLCBhbmQgbG9ja2luZy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgc3dpdGNoaW5nIGZyb20gYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyLiBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBhbGxvY2F0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgYW5kIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhjZmM0ZGMzNTUyZTViMTY5NDE0MmNiZDkyMGQxOTVhOTZhZmIwNGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNDowOTowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uYjFlYWI1ODQzZTlkNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2g7XG4gXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4mIzQzO1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4mIzQzO1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuJiM0MztcdCAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF9ybWIoKTtcbiYjNDM7XHRpZiAoIVJFQURfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtXHUwMDNlaGFzaCk7XG4gXHRyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4Y2ZjNGRjMzU1MmU1YjE2OTQxNDJjYmQ5MjBkMTk1YTk2YWZiMDRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTQ6MDk6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuYwppbmRleCAxMjhjNTc1MmYyMjVjLi5iMWVhYjU4NDNlOWQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKQEAgLTE3ODYsMTIgJiM0MzsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJc3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gJmFtcDttbS0mZ3Q7ZnV0ZXgucGhhc2g7CiAJc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7bW1waC0mZ3Q7bG9jayk7CiYjNDM7CWd1YXJkKHJjdSkoKTsKIAotCWlmICghbW1waC0mZ3Q7aGFzaF9uZXcpCiYjNDM7CWZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLSZndDtoYXNoKTsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZAomIzQzOwkgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluCiYjNDM7CSAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3JtYigpOwomIzQzOwlpZiAoIVJFQURfT05DRShtbXBoLSZndDtoYXNoX25ldykpCiAJCXJldHVybiB0cnVlOwogCi0JZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLSZndDtoYXNoKTsKIAlyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV0ZXggUGl2b3QgUGVuZGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCB0aGF0JiMzOTtzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgdG8gdGhlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgbG9ja2luZyBpcyBoYW5kbGVkLiBXZSYjMzk7cmUgbW92aW5nIGZyb20gYSBtdXRleCAoYGd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spYCkgdG8gUkNVIChgZ3VhcmQocmN1KSgpYCkuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdCwgaW1wbHlpbmcgdGhlIGludGVudGlvbiBpcyB0byByZWxheCBzb21lIGNvbnRlbnRpb24gYXJvdW5kIHRoYXQgY3JpdGljYWwgc2VjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKVGhlIGFkZGl0aW9uIG9mIGBzbXBfcm1iKClgIGlzIGFub3RoZXIgaW1wb3J0YW50IGRldGFpbC4gSXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgbWVtb3J5IG9yZGVyaW5nIGlzIGNydWNpYWwgaW4gdGhpcyBwYXJ0IG9mIHRoZSBjb2RlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgaG93IGRhdGEgaXMgYmVpbmcgYWNjZXNzZWQgYW5kIG1vZGlmaWVkLCBhbmQgd2hlcmUgdGhlIG1lbW9yeSBiYXJyaWVyIGlzIHBsYWNlZCBpbiB0aGUgb3BlcmF0aW9uIG9mIHRoZSBwaXZvdC4gSSBhbHNvIHNlZSB0aGV5JiMzOTtyZSBub3cgdXNpbmcgYFJFQURfT05DRShtbXBoLSZndDtoYXNoX25ldylgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgYGhhc2hfbmV3YCBpcyBsaWtlbHkgYWNjZXNzZWQgYnkgbXVsdGlwbGUgdGhyZWFkcyBhbmQgd2UgYXJlIHdvcmtpbmcgdG8gZ3VhcmFudGVlIGNvbnNpc3RlbmN5IG9mIHRoYXQgYWNjZXNzIHdpdGggcmVzcGVjdCB0byB0aGUgcGl2b3QuCgpUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgZnV0ZXggY29yZSBsb2dpYywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBzaGlmdCB3YXMgbWFkZSBhbmQgd2hhdCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBpc3N1ZXMgaXQmIzM5O3MgYWRkcmVzc2luZy4gVGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZSBhcmUgaW1wb3J0YW50LiBUaW1lIHRvIGRpZyBpbnRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgZnVuY3Rpb24gaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X3Bpdm90X3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTc3Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3ODQ6c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3Ny1hZ2Fpbjpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg3ODpcdFx0d2FpdF92YXJfZXZlbnQobW0sIGZ1dGV4X3Bpdm90X3BlbmRpbmcobW0pKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBGdXRleCBIYXNoIEFsbG9jYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBmdXRleF9waXZvdF9wZW5kaW5nYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcGxheWluZyBhIHJvbGUgaW4gYSBjYWxsIHRvIGB3YWl0X3Zhcl9ldmVudGAgd2l0aGluIHRoZSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUuIFRoZSB3YXkgdGhpcyBpcyBzZXQgdXAgaXMgdW51c3VhbCwgYW5kIEkgbmVlZCB0byBwYXJzZSB0aGUgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgaGVhcnQgb2YgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIG5vdy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gV2hhdCBhcmUgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGNhbGwsIGFuZCB3aGF0JiMzOTtzIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGlzIGFsbG9jYXRpb24gY29udGV4dD8gTGV0JiMzOTtzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDAtXHQgKlx0XHRcdFx0ICByY3VfYXNzaWduX3BvaW50ZXIoXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwMTpcdCAqXHRcdFx0XHRmdXRleF9oYXNoX2FsbG9jYXRlKClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMi1cdCAqXHRcdFx0XHQgIGZ1dGV4X3JlZl9kcm9wKClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4MDQ9c3RhdGljIGJvb2wgZnV0ZXhfaGFzaF9sZXNzKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmEsXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODI4OnN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI5LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Njg6XHRyZXR1cm4gZnV0ZXhfaGFzaF9hbGxvY2F0ZShidWNrZXRzLCAwKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2OS19XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTcxPXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODEtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4MjpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykgeyByZXR1cm4gLUVJTlZBTDsgfVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgzLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpIHsgcmV0dXJuIDA7IH1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMjQ9aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMzM6XHRcdHJldCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGUoYXJnMywgZmxhZ3MpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDM0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjU0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGZyb20gYm90aCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBhbmQgYGZ1dGV4X2hhc2hfcHJjdGxgLiBgZnV0ZXhfaGFzaF9wcmN0bGAgaXMgY2xlYXJseSBvdXIgdXNlci1zcGFjZSBlbnRyeSBwb2ludCB2aWEgdGhlIGBwcmN0bChQUl9GVVRFWF9IQVNILCAuLi4pYCBjYWxsLCB3aGljaCBtZWFucyB1c2VycyBjYW4gZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGUgaGFzaGluZyBtZWNoYW5pc20uIEludGVyZXN0aW5nLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hgLiBSaWdodCwgdGltZSB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGluIGBLY29uZmlnYCB0byBzZWUgdGhlIGNvbmRpdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZXR0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4NDQ9Y29uZmlnIEZVVEVYX1BJXG4tLVxuaW5pdC9LY29uZmlnLTE4NDgtXG5pbml0L0tjb25maWc6MTg0OTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXG5pbml0L0tjb25maWctMTg1MC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtZW50aW9uIG9mIGBpbml0L0tjb25maWdgIGlzIGEgcHJldHR5IHN0cm9uZyBoaW50LiBNeSBndXQgdGVsbHMgbWUgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIGFyb3VuZCBsaW5lIDE4NDksIG1heWJlIGEgY3JpdGljYWwgb3B0aW9uLCBvciBwb3NzaWJseSBhIHJlY2VudCBjaGFuZ2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBJdCYjMzk7cyBhIGJyb2FkIGZpbGUsIHNvIGtub3dpbmcgYSBzcGVjaWZpYyBsaW5lIGdpdmVzIG1lIGEgbXVjaCBmYXN0ZXIgd2F5IHRvIGZpbmQgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0MDpcdFx0ICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJlIGJ1aWx0IHdpdGhvdXRcbjE4NDE6XHRcdCAgc3VwcG9ydCBmb3IgXCYjMzQ7ZmFzdCB1c2Vyc3BhY2UgbXV0ZXhlc1wmIzM0Oy4gIFRoZSByZXN1bHRpbmcga2VybmVsIG1heSBub3RcbjE4NDI6XHRcdCAgcnVuIGdsaWJjLWJhc2VkIGFwcGxpY2F0aW9ucyBjb3JyZWN0bHkuXG4xODQzOlx0XG4xODQ0Olx0Y29uZmlnIEZVVEVYX1BJXG4xODQ1Olx0XHRib29sXG4xODQ2Olx0XHRkZXBlbmRzIG9uIEZVVEVYIFx1MDAyNlx1MDAyNiBSVF9NVVRFWEVTXG4xODQ3Olx0XHRkZWZhdWx0IHlcbjE4NDg6XHRcbjE4NDk6XHRjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXG4xODUwOlx0XHRib29sXG4xODUxOlx0XHRkZXBlbmRzIG9uIEZVVEVYIFx1MDAyNlx1MDAyNiAhQkFTRV9TTUFMTCBcdTAwMjZcdTAwMjYgTU1VXG4xODUyOlx0XHRkZWZhdWx0IHlcbjE4NTM6XHRcbjE4NTQ6XHRjb25maWcgRlVURVhfTVBPTFxuMTg1NTpcdFx0Ym9vbFxuMTg1NjpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgTlVNQVxuMTg1NzpcdFx0ZGVmYXVsdCB5XG4xODU4Olx0XG4xODU5Olx0Y29uZmlnIEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIEZ1dGV4IFByaXZhdGUgSGFzaCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIG9uIGJ5IGRlZmF1bHQuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIOKAkyB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB3aGF0IG1hdHRlcnMgaW4gdGhlIG1ham9yaXR5IG9mIHN5c3RlbXMgdW5sZXNzIGV4cGxpY2l0bHkgbW9kaWZpZWQuIEFuZCB0aGUgY29uZGl0aW9ucyBmb3IgdGhpcyBkZWZhdWx0IGFyZTogYEZVVEVYYCBpcyBkZWZpbmVkLCBgQkFTRV9TTUFMTGAgaXMgbm90LCBhbmQgd2UgaGF2ZSBhbiBNTVUuIE1ha2VzIHNlbnNlLCB0aGF0IGNvbmZpZ3VyYXRpb24gaXMgcHJldHR5IGNvbW1vbi4gTm93LCB3aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludD8gTG9va3MgbGlrZSBgZnV0ZXhfaGFzaF9wcmN0bGAgaXMgdGhlIGZ1bmN0aW9uIHdlIG5lZWQgdG8gZm9jdXMgb24uIE15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgRlVURVhfUFJJVkFURV9IQVNIYCBzZXR0aW5nIGlzIGFjdHVhbGx5IHV0aWxpemVkLiBXaGVyZSBpcyB0aGUgbG9naWM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGxvY2tpbmcgcGVyZm9ybWFuY2Ugb3IgbWVtb3J5IHVzYWdlIHdpdGggdGhpcyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24/IFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc3PWxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC03OC1cdCAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo3OTppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTQ9c3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTk4LX1cbmluY2x1ZGUvbGludXgvZnV0ZXguaDo5OTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAwLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTc9dm9pZCBmdXRleF9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAyNDppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcbi0tXG5rZXJuZWwvc3lzLmM9MjUzND1TWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxuLS1cbmtlcm5lbC9zeXMuYy0yODg0LVx0Y2FzZSBQUl9GVVRFWF9IQVNIOlxua2VybmVsL3N5cy5jOjI4ODU6XHRcdGVycm9yID0gZnV0ZXhfaGFzaF9wcmN0bChhcmcyLCBhcmczLCBhcmc0KTtcbmtlcm5lbC9zeXMuYy0yODg2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1dGV4IEhhc2ggUHJjdGwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgaXQmIzM5O3MgaGl0dGluZyBgZnV0ZXhfaGFzaF9wcmN0bGAgdGhyb3VnaCBhIGBwcmN0bGAgY2FsbCB3aXRoIGBQUl9GVVRFWF9IQVNIYCYjMzQ7LiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCBoZXJlLiBUaGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCB3aGljaCBpcyBjbGVhcmx5IGNhbGxlZCBmcm9tIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gQW5kLCBvZiBjb3Vyc2UsIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBmdXRleF9oYXNoX3ByY3RsYC4gU28sIHRoZSBlbnRpcmUgcGF0aCwgZnJvbSB0aGUgYHByY3RsYCBzeXN0ZW0gY2FsbCwgdGhyb3VnaCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAsIGRvd24gdG8gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCBpcyBkaXJlY3RseSBpbnZvbHZlZC4gR29vZCwgdGhhdCBjb25maXJtcyByZWFjaGFiaWxpdHkuCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCBpbmRpY2F0aW5nIHNvbWUga2luZCBvZiByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgbG9ja2luZyBwcm9ibGVtIHRoZXJlLiBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2UgaXMgYm90aCBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgbWVhbnMgd2UgYXJlIGZpeGluZyBzb21ldGhpbmcgdGhhdCB3aWxsIGFjdHVhbGx5IGhhdmUgYW4gaW1wYWN0LiBUaGUgcHJpbWFyeSBmb2N1cyBub3cgbmVlZHMgdG8gYmUgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBlc3BlY2lhbGx5IGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gVGhlIG90aGVyLCBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIGlzIGxpa2VseSBzdGF0aWMgaW5saW5lIG9yIGp1c3QgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIHRoZSBsYXR0ZXIuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGJvdGggYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGFuZCBgZnV0ZXhfaGFzaF9wcmN0bGAgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGUgZml4IGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhZGRyZXNzZXMgdGhlIHJhY2UuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgZGV0YWlsIGxpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVx0ICpcdFx0XHRcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsIG5ldyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XHQgKlx0XHRcdFx0ZnV0ZXhfaGFzaF9hbGxvY2F0ZSgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXHQgKlx0XHRcdFx0ICBmdXRleF9yZWZfZHJvcCgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4Olx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4My1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKSB7IHJldHVybiAwOyB9XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlx0XHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGdXRleCBTeW1ib2wgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZm9jdXNpbmcgb24gdGhlc2UgYGZ1dGV4YCBmdW5jdGlvbnMuIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgYXJlIG5vbi1zdGF0aWMg4oCTIHRoYXQmIzM5O3MgdGhlIGtleSBpbmRpY2F0b3IuIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBvdXRzaWRlIHRoZWlyIHNvdXJjZSBmaWxlcywgd2hpY2ggbWVhbnMgdGhleSBjYW4gYmUgZW50cnkgcG9pbnRzIGZvciBpbnRlcmFjdGlvbi4gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgaWdub3JlIGl0IGZvciBub3cgYXMgYSBtb3JlIGdsb2JhbCBpbmRpY2F0b3IuIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgYXJlLCB0aGVyZWZvcmUsIGdvb2QgY2FuZGlkYXRlcyBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uIGFuZCBwb3RlbnRpYWwgaG9va2luZyBvciBpbnN0cnVtZW50YXRpb24uIEhvd2V2ZXIsIGJlZm9yZSBJIGdldCB0b28gZGVlcCwgaXQmIzM5O3Mgd29ydGggdGFraW5nIGEgc3RlcCBiYWNrLi4uIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLCB3aGlsZSBub24tc3RhdGljLCBuZWVkcyBjbGFyaWZpY2F0aW9uLiBXaGVyZSBpcyB0aGF0IGFjdHVhbGx5IGNhbGxlZCBmcm9tPyBJdHMgY2FsbGVycyBhcmUgZ29pbmcgdG8gaW5kaWNhdGUgaG93IGl0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MS0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODMtdm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTg0LSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04Ni1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDItfVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwNC1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvZm9yay5jLTE5NzYtXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxua2VybmVsL2ZvcmsuYy0xOTc4LXtcbi0tXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTI0MTAtXG5rZXJuZWwvZm9yay5jOjI0MTE6XHRpZiAobmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoY2xvbmVfZmxhZ3MpKSB7XG5rZXJuZWwvZm9yay5jOjI0MTI6XHRcdHJldHZhbCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCgpO1xua2VybmVsL2ZvcmsuYy0yNDEzLVx0XHRpZiAocmV0dmFsKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0NgoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZ1dGV4IFByaXZhdGUgSGFzaCBBbGxvY2F0aW9uIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgZ2V0cyBjYWxsZWQgZnJvbSBgY29weV9wcm9jZXNzYCBkdXJpbmcgYSBmb3JrLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGFic29sdXRlbHkgcmVhY2hhYmxlLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5IGhlcmUuIFRoZSBjb25maWd1cmF0aW9uIG5lZWRlZCB0byB0cmlnZ2VyIHRoaXMgaXMgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIFNpbmNlIHRoYXQgY29uZmlnIGRlcGVuZHMgb24gYEZVVEVYYCwgYW5kIHRoYXQgd2UgZG9uJiMzOTt0IGhhdmUgYEJBU0VfU01BTExgIGFuZCAqZG8qIGhhdmUgYE1NVWAsIHdlIHNob3VsZCBkZWZpbml0ZWx5IGVuYWJsZSBgRlVURVhgIGFsb25nIHdpdGggYEZVVEVYX1BSSVZBVEVfSEFTSGAuCgpTbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZywgZGlzdGlsbGVkOgoKKiAgICoqVGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLioqIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24uIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSB3aXRoaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGZyb20gYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIHRvIHNvbHZlIGEgcmFjZSBjb25kaXRpb24sIHNvIHRoaXMgaXMgY3JpdGljYWwuCiogICAqKlRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSB3YW50IHRvIGZvY3VzIG9uIGFyZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLioqIFRoZXkgYXJlIHJpZ2h0IHdoZXJlIHRoZSBhY3Rpb24gaXMgaGFwcGVuaW5nLgoqICAgKipUbyBlbmFibGUgdGhpcyB0ZXN0aW5nIHByb3Blcmx5LCBJIG5lZWQgdG8gZW5hYmxlIHR3byBrZXJuZWwgY29uZmlndXJhdGlvbnM6KiogYEZVVEVYX1BSSVZBVEVfSEFTSGAgYW5kIHRoZSBwYXJlbnQgYEZVVEVYYCBkZXBlbmRlbmN5LgoqICAgKipUaGUgcmVhc29uaW5nIGlzIHNvbGlkOioqIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGlzIHBhcnQgb2YgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBhbGxvY2F0aW9uLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGNhbGwgYW5kIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgY29udHJvbCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgcmVwbGFjaW5nIGEgbXV0ZXggbG9jayB3aXRoIGFuIFJDVSByZWFkIGxvY2sgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIChgc21wX3JtYigpYCkuIEl0IGFsc28gdXNlcyBgUkVBRF9PTkNFYCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHN5bmNocm9uaXphdGlvbiwgbWVtb3J5IG9yZGVyaW5nLCBhbmQgbG9ja2luZy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGNmYzRkYzM1NTJlNWIxNjk0MTQyY2JkOTIwZDE5NWE5NmFmYjA0YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDE0OjA5OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKaW5kZXggMTI4YzU3NTJmMjI1Yy4uYjFlYWI1ODQzZTlkNiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9ICZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoOwogCXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTgKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1dGV4IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBzd2l0Y2hpbmcgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGZyb20gYSBgbXV0ZXhgIGd1YXJkZWQgYnkgYGd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spO2AgdG8gYW4gUkNVIG1lY2hhbmlzbSB1c2luZyBgZ3VhcmQocmN1KSgpO2AuIEkgc2VlIHRoYXQgYHJjdV9kZXJlZmVyZW5jZWAsIGBSRUFEX09OQ0VgLCBhbmQgYHNtcF9ybWIoKWAgYXJlIGludHJvZHVjZWQuIFRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBjb25jdXJyZW5jeSwgUkNVLCBhbmQgdGhlIGNyaXRpY2FsIGltcG9ydGFuY2Ugb2YgbWVtb3J5IGJhcnJpZXJzLgoKTm8gbmV3IGFsbG9jYXRpb25zIGhlcmUsIGFuZCBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0IHJlbW92ZXMgYSB3aG9sZSBjbGFzcyBvZiBwb3RlbnRpYWwgaGVhZGFjaGVzLiBTaW5jZSB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgY29waWVzLCBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGltbWVkaWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBjcmVlcGluZyBpbiBmcm9tIHRoaXMgcGF0Y2guCgpUaGUgbGlrZWx5IGJ1Z3MgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkICpoZXJlKiB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3IgbG9ja2luZyBpc3N1ZXMsIHRoZSBzdGFuZGFyZCBjb25jdXJyZW5jeSBwaXRmYWxscy4gQnV0LCBLQ1NBTiwgS0FTQU4sIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBiZSBteSBmcmllbmRzIGhlcmUuIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIHRoYXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIHRyaWdnZXJlZC4gVGhlcmVmb3JlLCBJIGNhbiBzYWZlbHkgZGVjbGFyZSB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb2RlOgoKYGBgYwotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CmBgYAoKWWVwLCB0aGlzIGlzIHNvbGVseSBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNoYW5nZS4gVGhlcmUmIzM5O3Mgbm8gaGludCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbnl3aGVyZSBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZS4gSSYjMzk7bSBzdGlja2luZyB3aXRoIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBhIG11dGV4IGZvciBhbiBSQ1UsIGFuZCBhZGRpbmcgdGhlIHJlcXVpcmVkIG1lbW9yeSBiYXJyaWVyIHRvIGVuc3VyZSB0aGF0IHdlIHdpbGwgc2VlIHRoZSBuZXcgaGFzaCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmN1cnJlbmN5IGNvbnRyb2wgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHJlcGxhY2luZyBhIG11dGV4IGxvY2sgd2l0aCBhbiBSQ1UgcmVhZCBsb2NrIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllciAoYHNtcF9ybWIoKWApLiBJdCBhbHNvIHVzZXMgYFJFQURfT05DRWAgYW5kIGByY3VfZGVyZWZlcmVuY2VgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24sIG1lbW9yeSBvcmRlcmluZywgYW5kIGxvY2tpbmcuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBjb250cm9sIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBieSByZXBsYWNpbmcgYSBtdXRleCBsb2NrIHdpdGggYW4gUkNVIHJlYWQgbG9jayBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgKGBzbXBfcm1iKClgKS4gSXQgYWxzbyB1c2VzIGBSRUFEX09OQ0VgIGFuZCBgcmN1X2RlcmVmZXJlbmNlYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uLCBtZW1vcnkgb3JkZXJpbmcsIGFuZCBsb2NraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTowMi4wNjcwOTQ3NjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTU1NjU0NDIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBjb250cm9sIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBieSByZXBsYWNpbmcgYSBtdXRleCBsb2NrIHdpdGggYW4gUkNVIHJlYWQgbG9jayBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgKGBzbXBfcm1iKClgKS4gSXQgYWxzbyB1c2VzIGBSRUFEX09OQ0VgIGFuZCBgcmN1X2RlcmVmZXJlbmNlYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uLCBtZW1vcnkgb3JkZXJpbmcsIGFuZCBsb2NraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjAyLjA2NzEwMjMzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MTkzMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGNmYzRkYzM1NTJlNWIxNjk0MTQyY2JkOTIwZDE5NWE5NmFmYjA0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNDowOTowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmIxZWFiNTg0M2U5ZDYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcXG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoO1xcbiBcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNm1tcGgtXFx1MDAzZWxvY2spO1xcbitcXHRndWFyZChyY3UpKCk7XFxuIFxcbi1cXHRpZiAoIW1tcGgtXFx1MDAzZWhhc2hfbmV3KVxcbitcXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cXHUwMDNlaGFzaCk7XFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcXG4rXFx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxcbitcXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9ybWIoKTtcXG4rXFx0aWYgKCFSRUFEX09OQ0UobW1waC1cXHUwMDNlaGFzaF9uZXcpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cXHUwMDNlaGFzaCk7XFxuIFxcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTowMi41MDY2MDEwMDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MDc3MzYwODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgc3dpdGNoaW5nIGZyb20gYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyLiBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBhbGxvY2F0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgYW5kIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGNmYzRkYzM1NTJlNWIxNjk0MTQyY2JkOTIwZDE5NWE5NmFmYjA0YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE0OjA5OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmIxZWFiNTg0M2U5ZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jXG4rKysgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2g7XG4gXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKTtcbitcdGd1YXJkKHJjdSkoKTtcbiBcbi1cdGlmICghbW1waC1cdTAwM2VoYXNoX25ldylcbitcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLVx1MDAzZWhhc2gpO1xuK1x0LypcbitcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcbitcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cbitcdCAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLlxuK1x0ICovXG4rXHRzbXBfcm1iKCk7XG4rXHRpZiAoIVJFQURfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtXHUwMDNlaGFzaCk7XG4gXHRyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTowMi41MDY2MDM4NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjUxNzAxNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV0ZXggUGl2b3QgUGVuZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AgdGhhdCdzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgdG8gdGhlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgbG9ja2luZyBpcyBoYW5kbGVkLiBXZSdyZSBtb3ZpbmcgZnJvbSBhIG11dGV4IChgZ3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jaylgKSB0byBSQ1UgKGBndWFyZChyY3UpKClgKS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgc2hpZnQsIGltcGx5aW5nIHRoZSBpbnRlbnRpb24gaXMgdG8gcmVsYXggc29tZSBjb250ZW50aW9uIGFyb3VuZCB0aGF0IGNyaXRpY2FsIHNlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy5cblxuVGhlIGFkZGl0aW9uIG9mIGBzbXBfcm1iKClgIGlzIGFub3RoZXIgaW1wb3J0YW50IGRldGFpbC4gSXQncyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCBtZW1vcnkgb3JkZXJpbmcgaXMgY3J1Y2lhbCBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUsIHNvIEknbGwgbmVlZCB0byBhbmFseXplIGhvdyBkYXRhIGlzIGJlaW5nIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCwgYW5kIHdoZXJlIHRoZSBtZW1vcnkgYmFycmllciBpcyBwbGFjZWQgaW4gdGhlIG9wZXJhdGlvbiBvZiB0aGUgcGl2b3QuIEkgYWxzbyBzZWUgdGhleSdyZSBub3cgdXNpbmcgYFJFQURfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3KWAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgaGFzaF9uZXdgIGlzIGxpa2VseSBhY2Nlc3NlZCBieSBtdWx0aXBsZSB0aHJlYWRzIGFuZCB3ZSBhcmUgd29ya2luZyB0byBndWFyYW50ZWUgY29uc2lzdGVuY3kgb2YgdGhhdCBhY2Nlc3Mgd2l0aCByZXNwZWN0IHRvIHRoZSBwaXZvdC5cblxuVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGZ1dGV4IGNvcmUgbG9naWMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgc2hpZnQgd2FzIG1hZGUgYW5kIHdoYXQgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgaXNzdWVzIGl0J3MgYWRkcmVzc2luZy4gVGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZSBhcmUgaW1wb3J0YW50LiBUaW1lIHRvIGRpZyBpbnRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgZnVuY3Rpb24gaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MTAuMTU4MzA5MjI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDExNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X3Bpdm90X3BlbmRpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE3NzM9dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzg0OnN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzg1LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3Ny1hZ2FpbjpcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Nzg6XFx0XFx0d2FpdF92YXJfZXZlbnQobW0sIGZ1dGV4X3Bpdm90X3BlbmRpbmcobW0pKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOToxMC4yMDQ3MjYzMTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5MjkwOTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBmdXRleF9waXZvdF9wZW5kaW5nYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcGxheWluZyBhIHJvbGUgaW4gYSBjYWxsIHRvIGB3YWl0X3Zhcl9ldmVudGAgd2l0aGluIHRoZSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaGVyZS4gVGhlIHdheSB0aGlzIGlzIHNldCB1cCBpcyB1bnVzdWFsLCBhbmQgSSBuZWVkIHRvIHBhcnNlIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBoZWFydCBvZiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgbm93LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgY2FsbCwgYW5kIHdoYXQncyBpdHMgcHVycG9zZSB3aXRoaW4gdGhpcyBhbGxvY2F0aW9uIGNvbnRleHQ/IExldCdzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjE0Ljg0NDAyMDUzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE2NzA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cXHQgKlxcdFxcdFxcdFxcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XFx0ICpcXHRcXHRcXHRcXHRmdXRleF9oYXNoX2FsbG9jYXRlKClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXFx0ICpcXHRcXHRcXHRcXHQgIGZ1dGV4X3JlZl9kcm9wKClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4OlxcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2OS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgzLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjE0Ljg5MTE5MTc3MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTc0MzQ4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZnJvbSBib3RoIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGFuZCBgZnV0ZXhfaGFzaF9wcmN0bGAuIGBmdXRleF9oYXNoX3ByY3RsYCBpcyBjbGVhcmx5IG91ciB1c2VyLXNwYWNlIGVudHJ5IHBvaW50IHZpYSB0aGUgYHByY3RsKFBSX0ZVVEVYX0hBU0gsIC4uLilgIGNhbGwsIHdoaWNoIG1lYW5zIHVzZXJzIGNhbiBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZSBoYXNoaW5nIG1lY2hhbmlzbS4gSW50ZXJlc3RpbmcuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSGAuIFJpZ2h0LCB0aW1lIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaW4gYEtjb25maWdgIHRvIHNlZSB0aGUgY29uZGl0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOToxOC43MDg2MzA1OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEyNzU4MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODQ0PWNvbmZpZyBGVVRFWF9QSVxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDgtXFxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbmluaXQvS2NvbmZpZy0xODUwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MjAuNTIxMzk0NDc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NzYwNDkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIG1lbnRpb24gb2YgYGluaXQvS2NvbmZpZ2AgaXMgYSBwcmV0dHkgc3Ryb25nIGhpbnQuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBhcm91bmQgbGluZSAxODQ5LCBtYXliZSBhIGNyaXRpY2FsIG9wdGlvbiwgb3IgcG9zc2libHkgYSByZWNlbnQgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gSXQncyBhIGJyb2FkIGZpbGUsIHNvIGtub3dpbmcgYSBzcGVjaWZpYyBsaW5lIGdpdmVzIG1lIGEgbXVjaCBmYXN0ZXIgd2F5IHRvIGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3IuIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MjQuODY5MDAxODYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTg0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg0MDpcXHRcXHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmUgYnVpbHQgd2l0aG91dFxcbjE4NDE6XFx0XFx0ICBzdXBwb3J0IGZvciBcXFwiZmFzdCB1c2Vyc3BhY2UgbXV0ZXhlc1xcXCIuICBUaGUgcmVzdWx0aW5nIGtlcm5lbCBtYXkgbm90XFxuMTg0MjpcXHRcXHQgIHJ1biBnbGliYy1iYXNlZCBhcHBsaWNhdGlvbnMgY29ycmVjdGx5LlxcbjE4NDM6XFx0XFxuMTg0NDpcXHRjb25maWcgRlVURVhfUElcXG4xODQ1OlxcdFxcdGJvb2xcXG4xODQ2OlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgUlRfTVVURVhFU1xcbjE4NDc6XFx0XFx0ZGVmYXVsdCB5XFxuMTg0ODpcXHRcXG4xODQ5OlxcdGNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcXG4xODUwOlxcdFxcdGJvb2xcXG4xODUxOlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgIUJBU0VfU01BTEwgXFx1MDAyNlxcdTAwMjYgTU1VXFxuMTg1MjpcXHRcXHRkZWZhdWx0IHlcXG4xODUzOlxcdFxcbjE4NTQ6XFx0Y29uZmlnIEZVVEVYX01QT0xcXG4xODU1OlxcdFxcdGJvb2xcXG4xODU2OlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgTlVNQVxcbjE4NTc6XFx0XFx0ZGVmYXVsdCB5XFxuMTg1ODpcXHRcXG4xODU5OlxcdGNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MjQuODY5MTQzMjczWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzOTUwNzI0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBGdXRleCBQcml2YXRlIEhhc2ggQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIG9uIGJ5IGRlZmF1bHQuIFRoYXQncyBhIGtleSBkZXRhaWwg4oCTIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHdoYXQgbWF0dGVycyBpbiB0aGUgbWFqb3JpdHkgb2Ygc3lzdGVtcyB1bmxlc3MgZXhwbGljaXRseSBtb2RpZmllZC4gQW5kIHRoZSBjb25kaXRpb25zIGZvciB0aGlzIGRlZmF1bHQgYXJlOiBgRlVURVhgIGlzIGRlZmluZWQsIGBCQVNFX1NNQUxMYCBpcyBub3QsIGFuZCB3ZSBoYXZlIGFuIE1NVS4gTWFrZXMgc2Vuc2UsIHRoYXQgY29uZmlndXJhdGlvbiBpcyBwcmV0dHkgY29tbW9uLiBOb3csIHdoYXQncyB0aGUgZW50cnkgcG9pbnQ/IExvb2tzIGxpa2UgYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIHRoZSBmdW5jdGlvbiB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBNeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgdGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYEZVVEVYX1BSSVZBVEVfSEFTSGAgc2V0dGluZyBpcyBhY3R1YWxseSB1dGlsaXplZC4gV2hlcmUgaXMgdGhlIGxvZ2ljPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBsb2NraW5nIHBlcmZvcm1hbmNlIG9yIG1lbW9yeSB1c2FnZSB3aXRoIHRoaXMgZGVmYXVsdCBjb25maWd1cmF0aW9uPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHNpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDM0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTozMC4yNjQyMTgxMzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzUzNzA3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc3PWxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtNzgtXFx0ICAgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo3OTppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTQ9c3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtOTgtfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo5OTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMC17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTc9dm9pZCBmdXRleF9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDIzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAyNDppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XFxuLS1cXG5rZXJuZWwvc3lzLmM9MjUzND1TWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxcbi0tXFxua2VybmVsL3N5cy5jLTI4ODQtXFx0Y2FzZSBQUl9GVVRFWF9IQVNIOlxcbmtlcm5lbC9zeXMuYzoyODg1OlxcdFxcdGVycm9yID0gZnV0ZXhfaGFzaF9wcmN0bChhcmcyLCBhcmczLCBhcmc0KTtcXG5rZXJuZWwvc3lzLmMtMjg4Ni1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MzIuMDk5NTk1Mzk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTYwNjcxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXRleCBIYXNoIFByY3RsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBpdCdzIGhpdHRpbmcgYGZ1dGV4X2hhc2hfcHJjdGxgIHRocm91Z2ggYSBgcHJjdGxgIGNhbGwgd2l0aCBgUFJfRlVURVhfSEFTSGBcIi4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCBoZXJlLiBUaGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCB3aGljaCBpcyBjbGVhcmx5IGNhbGxlZCBmcm9tIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gQW5kLCBvZiBjb3Vyc2UsIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBmdXRleF9oYXNoX3ByY3RsYC4gU28sIHRoZSBlbnRpcmUgcGF0aCwgZnJvbSB0aGUgYHByY3RsYCBzeXN0ZW0gY2FsbCwgdGhyb3VnaCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAsIGRvd24gdG8gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCBpcyBkaXJlY3RseSBpbnZvbHZlZC4gR29vZCwgdGhhdCBjb25maXJtcyByZWFjaGFiaWxpdHkuXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIGluZGljYXRpbmcgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uIG9yIHBvdGVudGlhbCBsb2NraW5nIHByb2JsZW0gdGhlcmUuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZSBpcyBib3RoIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBtZWFucyB3ZSBhcmUgZml4aW5nIHNvbWV0aGluZyB0aGF0IHdpbGwgYWN0dWFsbHkgaGF2ZSBhbiBpbXBhY3QuIFRoZSBwcmltYXJ5IGZvY3VzIG5vdyBuZWVkcyB0byBiZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGVzcGVjaWFsbHkgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGUgb3RoZXIsIGBmdXRleF9waXZvdF9wZW5kaW5nYCwgaXMgbGlrZWx5IHN0YXRpYyBpbmxpbmUgb3IganVzdCBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGxhdHRlci5cblxuQWxyaWdodCwgbGV0J3MgaGVhZCBvdmVyIHRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGJvdGggYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGFuZCBgZnV0ZXhfaGFzaF9wcmN0bGAgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGUgZml4IGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhZGRyZXNzZXMgdGhlIHJhY2UuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBkZXRhaWwgbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTozNy44MTU2NjUzMTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQxNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVxcdCAqXFx0XFx0XFx0XFx0ICByY3VfYXNzaWduX3BvaW50ZXIoXFx1MDAyNm1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwMTpcXHQgKlxcdFxcdFxcdFxcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMi1cXHQgKlxcdFxcdFxcdFxcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Njg6XFx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODEtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlxcdFxcdHJldCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGUoYXJnMywgZmxhZ3MpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTQ6MDk6MzcuODYwMzExMDg5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTk5MDczOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGdXRleCBTeW1ib2wgQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIG9uIHRoZXNlIGBmdXRleGAgZnVuY3Rpb25zLiBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGFyZSBub24tc3RhdGljIOKAkyB0aGF0J3MgdGhlIGtleSBpbmRpY2F0b3IuIFRoYXQgbWVhbnMgdGhleSdyZSBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlaXIgc291cmNlIGZpbGVzLCB3aGljaCBtZWFucyB0aGV5IGNhbiBiZSBlbnRyeSBwb2ludHMgZm9yIGludGVyYWN0aW9uLiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgaXMgc3RhdGljLCBzbyBJIGNhbiBwcm9iYWJseSBpZ25vcmUgaXQgZm9yIG5vdyBhcyBhIG1vcmUgZ2xvYmFsIGluZGljYXRvci4gYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBhcmUsIHRoZXJlZm9yZSwgZ29vZCBjYW5kaWRhdGVzIGZvciBjbG9zZXIgZXhhbWluYXRpb24gYW5kIHBvdGVudGlhbCBob29raW5nIG9yIGluc3RydW1lbnRhdGlvbi4gSG93ZXZlciwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBpdCdzIHdvcnRoIHRha2luZyBhIHN0ZXAgYmFjay4uLiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCwgd2hpbGUgbm9uLXN0YXRpYywgbmVlZHMgY2xhcmlmaWNhdGlvbi4gV2hlcmUgaXMgdGhhdCBhY3R1YWxseSBjYWxsZWQgZnJvbT8gSXRzIGNhbGxlcnMgYXJlIGdvaW5nIHRvIGluZGljYXRlIGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjQzLjU2MDIyMTE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMjEyMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgxLSNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgzLXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODQtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODYtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMi19XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDQtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMTk3Ni1cXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxcbmtlcm5lbC9mb3JrLmMtMTk3OC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjQxMC1cXG5rZXJuZWwvZm9yay5jOjI0MTE6XFx0aWYgKG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KGNsb25lX2ZsYWdzKSkge1xcbmtlcm5lbC9mb3JrLmM6MjQxMjpcXHRcXHRyZXR2YWwgPSBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoKTtcXG5rZXJuZWwvZm9yay5jLTI0MTMtXFx0XFx0aWYgKHJldHZhbClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjQ1LjIxMzQzODM4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTg2NTI2NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBGdXRleCBQcml2YXRlIEhhc2ggQWxsb2NhdGlvbiBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGdldHMgY2FsbGVkIGZyb20gYGNvcHlfcHJvY2Vzc2AgZHVyaW5nIGEgZm9yay4gVGhhdCBtZWFucyBpdCdzIGFic29sdXRlbHkgcmVhY2hhYmxlLCBhbmQgdGhhdCdzIHRoZSBrZXkgaGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBpcyBgRlVURVhfUFJJVkFURV9IQVNIYC4gU2luY2UgdGhhdCBjb25maWcgZGVwZW5kcyBvbiBgRlVURVhgLCBhbmQgdGhhdCB3ZSBkb24ndCBoYXZlIGBCQVNFX1NNQUxMYCBhbmQgKmRvKiBoYXZlIGBNTVVgLCB3ZSBzaG91bGQgZGVmaW5pdGVseSBlbmFibGUgYEZVVEVYYCBhbG9uZyB3aXRoIGBGVVRFWF9QUklWQVRFX0hBU0hgLlxuXG5TbyBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcsIGRpc3RpbGxlZDpcblxuKiAgICoqVGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLioqIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbi4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIHdpdGhpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgZnJvbSBhIG11dGV4IHRvIFJDVSBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgdG8gc29sdmUgYSByYWNlIGNvbmRpdGlvbiwgc28gdGhpcyBpcyBjcml0aWNhbC5cbiogICAqKlRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSB3YW50IHRvIGZvY3VzIG9uIGFyZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLioqIFRoZXkgYXJlIHJpZ2h0IHdoZXJlIHRoZSBhY3Rpb24gaXMgaGFwcGVuaW5nLlxuKiAgICoqVG8gZW5hYmxlIHRoaXMgdGVzdGluZyBwcm9wZXJseSwgSSBuZWVkIHRvIGVuYWJsZSB0d28ga2VybmVsIGNvbmZpZ3VyYXRpb25zOioqIGBGVVRFWF9QUklWQVRFX0hBU0hgIGFuZCB0aGUgcGFyZW50IGBGVVRFWGAgZGVwZW5kZW5jeS5cbiogICAqKlRoZSByZWFzb25pbmcgaXMgc29saWQ6KiogYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgaXMgcGFydCBvZiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIGFsbG9jYXRpb24sIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgY2FsbCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzQ2LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNDowOTo1My4xOTk5NjczNjhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDIzODQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIixcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIixcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGJ5IHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgYSBtZW1vcnkgYmFycmllci4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggYWxsb2NhdGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjUzLjI4MDIxMzIxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM0MzQxNDc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjUzLjI4MDg2OTA1OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNDM0Mjc1MzIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgY29udHJvbCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgcmVwbGFjaW5nIGEgbXV0ZXggbG9jayB3aXRoIGFuIFJDVSByZWFkIGxvY2sgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIChgc21wX3JtYigpYCkuIEl0IGFsc28gdXNlcyBgUkVBRF9PTkNFYCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHN5bmNocm9uaXphdGlvbiwgbWVtb3J5IG9yZGVyaW5nLCBhbmQgbG9ja2luZy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4Y2ZjNGRjMzU1MmU1YjE2OTQxNDJjYmQ5MjBkMTk1YTk2YWZiMDRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTQ6MDk6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uYjFlYWI1ODQzZTlkNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0xNzg2LDEyICsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuK1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuK1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuK1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4rXHQgKi9cbitcdHNtcF9ybWIoKTtcbitcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjA5OjUzLjI4MDg2OTkxOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDM0MjczMDQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXRleCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHN3aXRjaGluZyB0aGUgbG9ja2luZyBtZWNoYW5pc20gZnJvbSBhIGBtdXRleGAgZ3VhcmRlZCBieSBgZ3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7YCB0byBhbiBSQ1UgbWVjaGFuaXNtIHVzaW5nIGBndWFyZChyY3UpKCk7YC4gSSBzZWUgdGhhdCBgcmN1X2RlcmVmZXJlbmNlYCwgYFJFQURfT05DRWAsIGFuZCBgc21wX3JtYigpYCBhcmUgaW50cm9kdWNlZC4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIGNvbmN1cnJlbmN5LCBSQ1UsIGFuZCB0aGUgY3JpdGljYWwgaW1wb3J0YW5jZSBvZiBtZW1vcnkgYmFycmllcnMuXG5cbk5vIG5ldyBhbGxvY2F0aW9ucyBoZXJlLCBhbmQgbm90aGluZyBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhhdCByZW1vdmVzIGEgd2hvbGUgY2xhc3Mgb2YgcG90ZW50aWFsIGhlYWRhY2hlcy4gU2luY2Ugd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhbnkgbmV3IHN0cnVjdHVyZXMgb3IgY29waWVzLCBJJ20gbm90IHNlZWluZyBhbnkgaW1tZWRpYXRlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNyZWVwaW5nIGluIGZyb20gdGhpcyBwYXRjaC5cblxuVGhlIGxpa2VseSBidWdzIHRoYXQgY291bGQgYmUgaW50cm9kdWNlZCAqaGVyZSogd291bGQgYmUgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIG9yIGxvY2tpbmcgaXNzdWVzLCB0aGUgc3RhbmRhcmQgY29uY3VycmVuY3kgcGl0ZmFsbHMuIEJ1dCwgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUCBhcmUgZ29pbmcgdG8gYmUgbXkgZnJpZW5kcyBoZXJlLiBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyB0aGF0J3Mgbm90IGdvaW5nIHRvIGJlIHRyaWdnZXJlZC4gVGhlcmVmb3JlLCBJIGNhbiBzYWZlbHkgZGVjbGFyZSB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgY29kZTpcblxuYGBgY1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4rXHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4rXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cdTAwM2VoYXNoKTtcbitcdC8qXG4rXHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4rXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG4rXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbitcdCAqL1xuK1x0c21wX3JtYigpO1xuK1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG5gYGBcblxuWWVwLCB0aGlzIGlzIHNvbGVseSBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNoYW5nZS4gVGhlcmUncyBubyBoaW50IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFueXdoZXJlIGluIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBJJ20gc3RpY2tpbmcgd2l0aCBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgYSBtdXRleCBmb3IgYW4gUkNVLCBhbmQgYWRkaW5nIHRoZSByZXF1aXJlZCBtZW1vcnkgYmFycmllciB0byBlbnN1cmUgdGhhdCB3ZSB3aWxsIHNlZSB0aGUgbmV3IGhhc2ggb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE4LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE0OjEwOjE3LjYyMzYwMzkxM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgY29udHJvbCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYnkgcmVwbGFjaW5nIGEgbXV0ZXggbG9jayB3aXRoIGFuIFJDVSByZWFkIGxvY2sgYW5kIGFkZGluZyBhIG1lbW9yeSBiYXJyaWVyIChgc21wX3JtYigpYCkuIEl0IGFsc28gdXNlcyBgUkVBRF9PTkNFYCBhbmQgYHJjdV9kZXJlZmVyZW5jZWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIHN5bmNocm9uaXphdGlvbiwgbWVtb3J5IG9yZGVyaW5nLCBhbmQgbG9ja2luZy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBjb250cm9sIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBieSByZXBsYWNpbmcgYSBtdXRleCBsb2NrIHdpdGggYW4gUkNVIHJlYWQgbG9jayBhbmQgYWRkaW5nIGEgbWVtb3J5IGJhcnJpZXIgKGBzbXBfcm1iKClgKS4gSXQgYWxzbyB1c2VzIGBSRUFEX09OQ0VgIGFuZCBgcmN1X2RlcmVmZXJlbmNlYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uLCBtZW1vcnkgb3JkZXJpbmcsIGFuZCBsb2NraW5nLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowsb74b[1] Phase: Succeeded StartedAt: 2026-08-12 14:10:28 +0000 UTC FinishedAt: 2026-08-12 14:10:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 14:10:28 +0000 UTC FinishedAt: 2026-08-12 14:10:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2] Phase: Succeeded StartedAt: 2026-08-12 14:10:28 +0000 UTC FinishedAt: 2026-08-12 18:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 14:10:28 +0000 UTC FinishedAt: 2026-08-12 18:02:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 14:10:28 +0000 UTC FinishedAt: 2026-08-12 14:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 14:10:28 +0000 UTC FinishedAt: 2026-08-12 14:10:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},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-workflowsb74b/series-workflowsb74b-convert-artifact-408417052/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 14:10:39 +0000 UTC FinishedAt: 2026-08-12 14:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 14:10:39 +0000 UTC FinishedAt: 2026-08-12 14:32:28 +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:*f62bfb52-70bf-4ece-a6b4-af51b60cff41,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-workflowsb74b/series-workflowsb74b-convert-artifact-408417052/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": "64a75220-534b-490c-b2e6-f491c0ae5082", "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-workflowsb74b/series-workflowsb74b-build-action-2533529930/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 14:10:39 +0000 UTC FinishedAt: 2026-08-12 14:32:06 +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:*f62bfb52-70bf-4ece-a6b4-af51b60cff41,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-workflowsb74b/series-workflowsb74b-convert-artifact-408417052/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": "64a75220-534b-490c-b2e6-f491c0ae5082", "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-workflowsb74b/series-workflowsb74b-build-action-2533529930/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 14:32:28 +0000 UTC FinishedAt: 2026-08-12 14:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 14:32:28 +0000 UTC FinishedAt: 2026-08-12 14:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 14:32:28 +0000 UTC FinishedAt: 2026-08-12 14:32:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 14:32:28 +0000 UTC FinishedAt: 2026-08-12 14:32:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},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-workflowsb74b/series-workflowsb74b-convert-artifact-3668232283/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 14:32:38 +0000 UTC FinishedAt: 2026-08-12 14:34:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 14:32:38 +0000 UTC FinishedAt: 2026-08-12 14:34:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64a75220-534b-490c-b2e6-f491c0ae5082,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-workflowsb74b/series-workflowsb74b-build-action-2533529930/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-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 14:34:41 +0000 UTC FinishedAt: 2026-08-12 14:34:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 14:34:41 +0000 UTC FinishedAt: 2026-08-12 14:34:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 14:34:41 +0000 UTC FinishedAt: 2026-08-12 14:56:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 14:34:41 +0000 UTC FinishedAt: 2026-08-12 14:56:07 +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:*f62bfb52-70bf-4ece-a6b4-af51b60cff41,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-workflowsb74b/series-workflowsb74b-convert-artifact-3668232283/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": "57aab8b8-dbe3-46cb-b3fd-a63f4ad823ae", "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-workflowsb74b/series-workflowsb74b-build-action-3705171711/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 14:34:41 +0000 UTC FinishedAt: 2026-08-12 14:55:47 +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:*f62bfb52-70bf-4ece-a6b4-af51b60cff41,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-workflowsb74b/series-workflowsb74b-convert-artifact-3668232283/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": "57aab8b8-dbe3-46cb-b3fd-a63f4ad823ae", "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-workflowsb74b/series-workflowsb74b-build-action-3705171711/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 14:56:07 +0000 UTC FinishedAt: 2026-08-12 14:56:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 14:56:07 +0000 UTC FinishedAt: 2026-08-12 14:56:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 14:56:07 +0000 UTC FinishedAt: 2026-08-12 14:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 14:56:07 +0000 UTC FinishedAt: 2026-08-12 14:58:04 +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:*57aab8b8-dbe3-46cb-b3fd-a63f4ad823ae,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-workflowsb74b/series-workflowsb74b-build-action-3705171711/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-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 14:58:14 +0000 UTC FinishedAt: 2026-08-12 18:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 14:58:14 +0000 UTC FinishedAt: 2026-08-12 18:02:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"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:*64a75220-534b-490c-b2e6-f491c0ae5082,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*57aab8b8-dbe3-46cb-b3fd-a63f4ad823ae,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-workflowsb74b/series-workflowsb74b-build-action-2533529930/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-workflowsb74b/series-workflowsb74b-build-action-3705171711/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 14:58:14 +0000 UTC FinishedAt: 2026-08-12 14:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 14:58:14 +0000 UTC FinishedAt: 2026-08-12 14:58:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"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-workflowsb74b/series-workflowsb74b-convert-artifact-1567494996/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 14:58:14 +0000 UTC FinishedAt: 2026-08-12 14:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 14:58:14 +0000 UTC FinishedAt: 2026-08-12 14:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 14:58:14 +0000 UTC FinishedAt: 2026-08-12 14:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 14:58:24 +0000 UTC FinishedAt: 2026-08-12 18:02:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsb74b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"f5791934-c4f7-4601-b386-b0ec95e2a0ae","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 14:58:24 +0000 UTC FinishedAt: 2026-08-12 18:02:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64a75220-534b-490c-b2e6-f491c0ae5082,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*57aab8b8-dbe3-46cb-b3fd-a63f4ad823ae,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-workflowsb74b/series-workflowsb74b-build-action-2533529930/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-workflowsb74b/series-workflowsb74b-build-action-3705171711/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-workflowsb74b/series-workflowsb74b-convert-artifact-1567494996/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,}