Name: series-workflowc5shl Phase: Succeeded StartedAt: 2026-08-13 04:23:18 +0000 UTC FinishedAt: 2026-08-13 08:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[0] Phase: Succeeded StartedAt: 2026-08-13 04:23:18 +0000 UTC FinishedAt: 2026-08-13 04:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 04:23:18 +0000 UTC FinishedAt: 2026-08-13 04:26:09 +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": "e2e27cdc-c55d-45f2-ad21-1e3ab38221dc" }, "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIGBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ld2AuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGRhdGEgcmFjZXMgb3IgdXNlLWFmdGVyLWZyZWUvTlVMTC1kZXJlZiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtDU0FOIGFuZCBLQVNBTiByZXNwZWN0aXZlbHkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGFkZGluZyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gYGhhc2hfbmV3YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBwcmN0bGAgc3lzY2FsbCAoYFBSX0ZVVEVYX0hBU0hgKSBhbmQgcHJvY2VzcyBjbG9uaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTRkZmVlODJkMGJiMzU2ZTI4NGYwMjg1ZDQwNGU5NDEyOTgyYzAwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA0OjI0OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpcbiBcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cdTAwM2VoYXNoLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKSk7XG4gXHRpZiAoZnBoKSB7XG4gXHRcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xuLVx0XHRcdG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldywgbmV3KTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcbkBAIC0yMjQsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gXHRcdGZwaCA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuIFx0XHRpZiAoZnBoKSB7XG4tXHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2g7XG4gXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4mIzQzO1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4mIzQzO1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuJiM0MztcdCAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF9ybWIoKTtcbiYjNDM7XHRpZiAoIVJFQURfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtXHUwMDNlaGFzaCk7XG4gXHRyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTtcbiB9XG4gXG5AQCAtMTg3OSw3ICYjNDM7MTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRjdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsXG4gXHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spKTtcbiBcdFx0bmV3ID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4tXHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbiYjNDM7XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFxuIFx0XHRpZiAoZnBoKSB7XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIWN1ci1cdTAwM2VoYXNoX21hc2spIHtcbkBAIC0xODg5LDcgJiM0MzsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gXHRcdFx0XHQgKiB0aGUgc2Vjb25kIG9uZSByZXR1cm5zIGhlcmUuXG4gXHRcdFx0XHQgKi9cbiBcdFx0XHRcdGZyZWUgPSBmcGg7XG4tXHRcdFx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldztcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIW5ldykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7LAogICAgJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBhZGRpbmcgYFJFQURfT05DRWAvYFdSSVRFX09OQ0VgIHRvIGBoYXNoX25ld2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gdGhhdCBpcyByZWFjaGFibGUgdmlhIHRoZSBgcHJjdGxgIHN5c2NhbGwgKGBQUl9GVVRFWF9IQVNIYCkgYW5kIHByb2Nlc3MgY2xvbmluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE0ZGZlZTgyZDBiYjM1NmUyODRmMDI4NWQ0MDRlOTQxMjk4MmMwMDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwNDoyNDo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L2NvcmUuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKgogCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC0mZ3Q7aGFzaCwgbG9ja2RlcF9pc19oZWxkKCZhbXA7bW1waC0mZ3Q7bG9jaykpOwogCWlmIChmcGgpIHsKIAkJaWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7Ci0JCQltbXBoLSZndDtoYXNoX25ldyA9IG5ldzsKJiM0MzsJCQlXUklURV9PTkNFKG1tcGgtJmd0O2hhc2hfbmV3LCBuZXcpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTIyNCw3ICYjNDM7MjI0LDcgQEAgc3RhdGljIHZvaWQgZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAogCQlmcGggPSBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXc7CiAJCWlmIChmcGgpIHsKLQkJCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7CiYjNDM7CQkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpOwogCQkJX19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpOwogCQl9CiAJfQpAQCAtMTc4NiwxMiAmIzQzOzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSAmYW1wO21tLSZndDtmdXRleC5waGFzaDsKIAlzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7CiAKLQlndWFyZChtdXRleCkoJmFtcDttbXBoLSZndDtsb2NrKTsKJiM0MzsJZ3VhcmQocmN1KSgpOwogCi0JaWYgKCFtbXBoLSZndDtoYXNoX25ldykKJiM0MzsJZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtJmd0O2hhc2gpOwomIzQzOwkvKgomIzQzOwkgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkCiYjNDM7CSAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW4KJiM0MzsJICogX19mdXRleF9waXZvdF9oYXNoKCkuCiYjNDM7CSAqLwomIzQzOwlzbXBfcm1iKCk7CiYjNDM7CWlmICghUkVBRF9PTkNFKG1tcGgtJmd0O2hhc2hfbmV3KSkKIAkJcmV0dXJuIHRydWU7CiAKLQlmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtJmd0O2hhc2gpOwogCXJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpOwogfQogCkBAIC0xODc5LDcgJiM0MzsxODg1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCWN1ciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2gsCiAJCQkJCQlsb2NrZGVwX2lzX2hlbGQoJmFtcDttbS0mZ3Q7ZnV0ZXgucGhhc2gubG9jaykpOwogCQluZXcgPSBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXc7Ci0JCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7CiYjNDM7CQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAKIAkJaWYgKGZwaCkgewogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFjdXItJmd0O2hhc2hfbWFzaykgewpAQCAtMTg4OSw3ICYjNDM7MTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKQogCQkJCSAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS4KIAkJCQkgKi8KIAkJCQlmcmVlID0gZnBoOwotCQkJCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldzsKJiM0MzsJCQkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7CiAJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCX0KIAkJCWlmIChjdXIgJmFtcDsmYW1wOyAhbmV3KSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRnV0ZXggUHJpdmF0ZSBIYXNoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBzeW5jaHJvbml6YXRpb24uIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIHN3YXBwaW5nIG91dCBkaXJlY3Qgd3JpdGVzIHRvIGBtbXBoLSZndDtoYXNoX25ld2AgYW5kIGBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXdgIHdpdGggYFdSSVRFX09OQ0VgLiBTbWFydCBtb3ZlLiBXZSYjMzk7cmUgY2xlYXJseSBkZWFsaW5nIHdpdGggcG90ZW50aWFsIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgaGVyZSwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBnaXZlbiB0aGUgbmF0dXJlIG9mIGZ1dGV4ZXMgYW5kIHNoYXJlZCBtZW1vcnkuIFJlcGxhY2luZyB0aGF0IGBndWFyZChtdXRleClgIGNhbGwgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIHdpdGggYGd1YXJkKHJjdSkoKWAgYW5kIGFkZGluZyBgc21wX3JtYigpYCBpcyBhbm90aGVyIHJlZCBmbGFnIG9mIGNvbmN1cnJlbnQgYWNjZXNzIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBoYW5kbGluZy4gQW5kIHRoZW4gdXNpbmcgYFJFQURfT05DRWDigKYgeWVwLCB0aGlzIHBhdGNoIGlzIGNsZWFybHkgYWJvdXQgZW5zdXJpbmcgdGhlIGNvcnJlY3QgdmlzaWJpbGl0eSBvZiB0aGVzZSBoYXNoIHRhYmxlIHVwZGF0ZXMgYWNyb3NzIGRpZmZlcmVudCBDUFVzLiBJdCYjMzk7cyBhbGwgYWJvdXQgbWVtb3J5IGJhcnJpZXJzIGFuZCBkYXRhIGNvbnNpc3RlbmN5LgoKTm93LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIGNvbnRleHQuIFdhaXQsICpzdGF0aWMqIGZ1bmN0aW9uPyBBbHJpZ2h0LCB0aGF0IG1lYW5zIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgbG9jYWxpemVkIHRvIHRoZSBzYW1lIHNvdXJjZSBmaWxlLiBTbywgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBpcyAqYWN0dWFsbHkqIGJlaW5nIGNhbGxlZCB3aXRoaW4gYGNvcmUuY2AgdG8gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgdGhlIG92ZXJhbGwgZnV0ZXggaGFzaCBtYW5hZ2VtZW50IGxvZ2ljLiBMZXQmIzM5O3MgdHJhY2UgdGhhdCBmdW5jdGlvbiBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X3Bpdm90X3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTc3Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3ODQ6c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3Ny1hZ2Fpbjpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg3ODpcdFx0d2FpdF92YXJfZXZlbnQobW0sIGZ1dGV4X3Bpdm90X3BlbmRpbmcobW0pKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDIxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBGdXRleCBIYXNoIEFsbG9jYXRpb24qKgoKT2theSwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGp1c3QgZ290IGNhbGxlZC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgY2FsbCBvcmlnaW5hdGVkLiBHaXZlbiB0aGUgbmF0dXJlIG9mIGZ1dGV4ZXMsIGl0JiMzOTtzIGxpa2VseSBsaW5rZWQgdG8gcHJvY2VzcyBzeW5jaHJvbml6YXRpb24sIHVzZXItc3BhY2UgbG9ja3MsIG9yIGtlcm5lbC1zcGFjZSB3YWl0IHF1ZXVlcy4gVGhlIGdvYWwgaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uIGNhbGwgcGF0aCB0byB1bmRlcnN0YW5kIHRoZSBoaWdoZXItbGV2ZWwgY29udGV4dCwgYW5kIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBzY2VuYXJpbyB0aGF0IHRyaWdnZXJlZCB0aGUgYWxsb2NhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2Ugc29tZSBkZWJ1Z2dpbmcgdG9vbHMsIGxpa2VseSBgcGVyZmAsIGBmdHJhY2VgLCBvciBnb29kIG9sZCBgZ2RiYCwgdG8gc3RlcCB0aHJvdWdoIHRoZSBjYWxsIHN0YWNrIGFuZCBpZGVudGlmeSB0aGUgY2FsbGluZyBmdW5jdGlvbi4gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgYWxsb2NhdGlvbiBpcyBleHBlY3RlZCwgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBvciBpbmRpY2F0aXZlIG9mIGEgYnVnLCBsaWtlIGEgbWVtb3J5IGxlYWsgb3IgYW4gdW5leHBlY3RlZCBsb2NraW5nIHNjZW5hcmlvLiBNeSBtYWluIGZvY3VzIGF0IHRoaXMgcG9pbnQgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDt3aGVuJiMzNDsgb2YgdGhpcyBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cdCAqXHRcdFx0XHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlx0ICpcdFx0XHRcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVx0ICpcdFx0XHRcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MS0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcdFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgdGhvdWdoIGl0IHdlcmUgbXkgdHJhaW4gb2YgdGhvdWdodDoKCioqRGl2aW5nIGludG8gYGZ1dGV4X2hhc2hfcHJjdGxgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY2FsbCB0byBgZnV0ZXhfaGFzaF9wcmN0bGAgc3RlbW1pbmcgZnJvbSB0aGUgYHByY3RsYCBzeXN0ZW0gY2FsbC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0IGBmdXRleF9oYXNoX3ByY3RsYCBpcyBhY3R1YWxseSBkb2luZyB3aXRoaW4gdGhlIGBwcmN0bGAgY29udGV4dC4gVGhlIGBwcmN0bGAgc3lzdGVtIGNhbGwgaXMgYSBzd2lzcyBhcm15IGtuaWZlLCBoYW5kbGluZyBhIHdpZGUgcmFuZ2Ugb2YgcHJvY2Vzcy1sZXZlbCBvcGVyYXRpb25zLiBVbmRlcnN0YW5kaW5nIGhvdyBgZnV0ZXhfaGFzaF9wcmN0bGAgdGllcyBpbnRvIHRoYXQgaXMgY3J1Y2lhbC4gSSBzdXNwZWN0IGl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gc29tZSBhc3BlY3Qgb2YgZnV0ZXggbWFuYWdlbWVudCDigJMgcGVyaGFwcyBpbml0aWFsaXphdGlvbiwgbWFuaXB1bGF0aW9uIG9mIGZ1dGV4IGRhdGEgc3RydWN0dXJlcywgb3IgZXZlbiBzZWN1cml0eS1yZWxhdGVkIGNoZWNrcyBhcm91bmQgZnV0ZXggb3BlcmF0aW9ucy4gV2UmIzM5O2xsIGhhdmUgdG8gZGlnIGRlZXBlciB0byBjb25maXJtLCB0aG91Z2guIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnV0ZXguaD03Nz1sb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtNzgtXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6Nzk6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODAtXG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk0PXN0YXRpYyBpbmxpbmUgbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC05OC19XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6OTk6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMC17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XG4tLVxua2VybmVsL3N5cy5jPTI1MzQ9U1lTQ0FMTF9ERUZJTkU1KHByY3RsLCBpbnQsIG9wdGlvbiwgdW5zaWduZWQgbG9uZywgYXJnMiwgdW5zaWduZWQgbG9uZywgYXJnMyxcbi0tXG5rZXJuZWwvc3lzLmMtMjg4NC1cdGNhc2UgUFJfRlVURVhfSEFTSDpcbmtlcm5lbC9zeXMuYzoyODg1Olx0XHRlcnJvciA9IGZ1dGV4X2hhc2hfcHJjdGwoYXJnMiwgYXJnMywgYXJnNCk7XG5rZXJuZWwvc3lzLmMtMjg4Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAyMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZ1dGV4IFN5bmNocm9uaXphdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIG5ldyBgZnV0ZXhfaGFzaF9wcmN0bGAgZnVuY3Rpb24gaXMgbm93IGV4cG9zZWQgdmlhIHRoZSBgcHJjdGxgIHN5c2NhbGwsIHVzaW5nIGBQUl9GVVRFWF9IQVNIYC4gSW50ZXJlc3RpbmcuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgc29tZXRoaW5nIGNyaXRpY2FsIHRvIGludmVzdGlnYXRlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBmdW5kYW1lbnRhbCBmdXRleCBmdW5jdGlvbmFsaXR5IGhlcmUgLSBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24uIEFic29sdXRlbHkgd29ydGggYSBkZWVwIGZ1enppbmcgY2FtcGFpZ24uCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExvb2tzIGxpa2UgYENPTkZJR19GVVRFWGAgaXMgYSBnaXZlbiwgYnV0IGBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIYCBpcyB0aGUga2V5LiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGVuYWJsZWQuIFRpbWUgdG8gZ28gZGlnIGludG8gdGhlIGNvbmZpZyBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTgwLVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgxOiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODItaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaD04Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODQ6I2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NS1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTg2PXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjg3OiNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTg4LVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaD0xNTI9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2ZpeHVwX3JvYnVzdF91bmxvY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xNTUtXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6MTU2OiNpZiBkZWZpbmVkKENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0gpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1JPQlVTVF9VTkxPQ0spXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTU3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4tLVxuaW5jbHVkZS9saW51eC9mdXRleF90eXBlcy5oPTIzPXN0cnVjdCBmdXRleF9zY2hlZF9kYXRhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmgtMzMtXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmg6MzQ6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmluY2x1ZGUvbGludXgvZnV0ZXhfdHlwZXMuaC0zNS0vKipcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MTQyPWV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKik7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MTQzOiNpZiBkZWZpbmVkKENPTkZJR19NTVUpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSClcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNDQtLyogc2FtZSBhcyBhYm92ZSBidXQgcGVyZm9ybXMgdGhlIHNsb3cgcGF0aCBmcm9tIHRoZSBhc3luYyBjb250ZXh0LiBDYW5cbi0tXG5pbml0L0tjb25maWc9MTg0ND1jb25maWcgRlVURVhfUElcbi0tXG5pbml0L0tjb25maWctMTg0OC1cbmluaXQvS2NvbmZpZzoxODQ5OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODUwLVx0Ym9vbFxuLS1cbmtlcm5lbC9mb3JrLmM9MTIxMj1FWFBPUlRfU1lNQk9MX0dQTChtbXB1dCk7XG5rZXJuZWwvZm9yay5jLTEyMTMtXG5rZXJuZWwvZm9yay5jOjEyMTQ6I2lmIGRlZmluZWQoQ09ORklHX01NVSkgfHwgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKVxua2VybmVsL2ZvcmsuYy0xMjE1LXN0YXRpYyB2b2lkIG1tcHV0X2FzeW5jX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTEzMD1fX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTMxLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzI6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTMzLXN0YXRpYyBib29sIGZ1dGV4X3JlZl9nZXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTI2MD1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc1LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzY6I2Vsc2UgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc3LVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yNzg9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4Mi1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjgzOiNlbmRpZiAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4NC1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTM2OD1fX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMzcyLVxua2VybmVsL2Z1dGV4L2NvcmUuYzozNzM6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzc0LVx0aWYgKG5vZGUgPT0gRlVURVhfTk9fTk9ERSBcdTAwMjZcdTAwMjYgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSkge1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTU2Nz1zdGF0aWMgdm9pZCBmdXRleF9oYXNoX2J1Y2tldF9pbml0KHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqZmhiKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU3NS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTU3NjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTc3LVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgwLX1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4MTojZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgyLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTg0PXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9oYXNoX2luaXRfbW0oc3RydWN0IGZ1dGV4X21tX2RhdGEgKmZkKSB7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4NTojZW5kaWYgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4Ni1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTM9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3JvYnVzdF91bmxvY2tfaW5pdF9tbShzdHJ1Y3QgZnV0ZXhfbW1fZGF0YSAqZmQpIHsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAxNS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAxNjojaWYgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKSB8fCBkZWZpbmVkKENPTkZJR19GVVRFWF9ST0JVU1RfVU5MT0NLKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDE3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNDE9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYge1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0NS1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0NjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQ3LWV4dGVybiBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjQ4PWV4dGVybiB2b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0OS1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1MDojZWxzZSAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjUxLXN0YXRpYyBpbmxpbmUgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiBOVUxMOyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIHNvbWV0aGluZyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiwgaXRzIHBvc3NpYmxlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBoZWxwIHRleHQgdGhhdCBleHBsYWlucyBpdHMgcHVycG9zZS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIGludmVzdGlnYXRlIHRoZXNlIGtpbmRzIG9mIGNvbXBpbGUtdGltZSBvcHRpb25zLiBMZXQgbWUgZ2V0IHRoYXQgS2NvbmZpZyBmaWxlIG9wZW5lZCBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTg0ND1jb25maWcgRlVURVhfUElcbi0tXG5pbml0L0tjb25maWctMTg0OC1cbmluaXQvS2NvbmZpZzoxODQ5OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODUwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDE1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBzZWxlY3RzIGBGVVRFWF9QUklWQVRFX0hBU0hgOgoKKipEaXNzZWN0aW5nIHRoZSBGVVRFWF9QUklWQVRFX0hBU0ggU2VsZWN0b3IqKgoKQWxyaWdodCwgc28gYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgdGhlIGtleSBwaWVjZSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBwYXJ0aWN1bGFyIGZsYWcgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBzaW5jZSBJJiMzOTttIHRyeWluZyB0byBzZWUgd2hhdCBpdCAqc2VsZWN0cyouIFdoYXQgZG9lcyB0aGlzIG1lYW4gaW4gdGhlIGNvbnRleHQgb2YgYGZ1dGV4YD8gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiAmIzM0O3ByaXZhdGUmIzM0OyB2ZXJzdXMgJiMzNDtzaGFyZWQmIzM0OyBhbmQgdGhlIHVzZSBvZiBhIGhhc2guIFRoaXMgbGlrZWx5IHBvaW50cyB0b3dhcmQgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBvcHRpbWl6YXRpb24uIElzIGl0IHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBmdXRleGVzPyBJcyBpdCBhIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBmdXRleGVzIGFyZSBpbXBsZW1lbnRlZCBmb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcywgb3Igd2l0aCBzcGVjaWZpYyBwcm9jZXNzIG1lbW9yeSBjb25maWd1cmF0aW9ucz8KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgZGlmZmVyZW50IHNjZW5hcmlvczoKCiogICAqKktlcm5lbCBpbXBsZW1lbnRhdGlvbjoqKiBJcyB0aGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGUgZnV0ZXggd2FpdCBxdWV1ZXM/IFBlcmhhcHMgdGhlIGhhc2ggaXMgdXNlZCBmb3IgbG9va3VwIGVmZmljaWVuY3kgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiBEb2VzIGBGVVRFWF9QUklWQVRFX0hBU0hgIHN1Z2dlc3Qgc29tZXRoaW5nIGFib3V0IGhvdyB0aGUga2VybmVsIG9yZ2FuaXplcyBmdXRleGVzIGludGVybmFsbHk/CiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIFRoZSAmIzM0O3ByaXZhdGUmIzM0OyBwYXJ0IG1ha2VzIG1lIHRoaW5rIGFib3V0IHByb2Nlc3MgYWRkcmVzcyBzcGFjZS4gSXMgdGhpcyBmbGFnIGluZGljYXRpbmcgYSBmdXRleCB0aGF0JiMzOTtzIG9ubHkgdmFsaWQgd2l0aGluIHRoZSBwcm9jZXNzJiMzOTtzIG93biBtZW1vcnksIGFuZCB0aGUgaGFzaCBpcyByZWxldmFudCB0byBsb2NhdGluZyBpdCB3aXRoaW4gdGhhdCBhZGRyZXNzIHNwYWNlPyBEb2VzIHRoaXMgc3VnZ2VzdCBhIGRpZmZlcmVudCBtZW1vcnkgbW9kZWwgZm9yIGZ1dGV4ZXM/IFBlcmhhcHMgc3BlY2lmaWMgdG8gdXNlci1zcGFjZSBpbXBsZW1lbnRhdGlvbnM/CiogICAqKlBlcmZvcm1hbmNlIENvbnNpZGVyYXRpb25zOioqIFRoZSBoYXNoIGl0c2VsZiBpcyBtYWtpbmcgbWUgdGhpbmsgb2YgYSB0cmFkZS1vZmYuIElzIHRoaXMgYWJvdXQgcmVkdWNpbmcgdGhlIG92ZXJoZWFkIG9mIHNoYXJlZCBmdXRleGVzPyBNYXliZSBpdCYjMzk7cyBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBhIGxhcmdlIG51bWJlciBvZiBmdXRleGVzPwoKSSBuZWVkIHRvIGRlbHZlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBrZXJuZWwgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYGZ1dGV4YCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciB3aGVyZSB0aGlzIGBGVVRFWF9QUklWQVRFX0hBU0hgIGZsYWcgaXMgZGVmaW5lZCBhbmQgaG93IGl0IGlzIGFjdHVhbGx5IHVzZWQuIEkgd2lsbCBsaWtlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZnV0ZXggc3RydWN0dXJlIGlzIHVzZWQgaW4gdmFyaW91cyBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgYXJjaGl0ZWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGlmZmVyZW50IGNvZGUgcGF0aHMgYW5kIGRhdGEgc3RydWN0dXJlcyB1c2VkIHdvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZS4gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IHN5c3RlbSBjYWxsIGhhbmRsaW5nIGFuZCBhbnkgYXNzb2NpYXRlZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3B0aW1pemF0aW9ucy4gSSBuZWVkIHRvIGRpc2NvdmVyIGV4YWN0bHkgd2hhdCBkYXRhIHN0cnVjdHVyZSBvciBjb2RlIHBhdGggaXMgYmVpbmcgc2VsZWN0ZWQgYnkgdGhlIGZsYWcsIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRlVURVhfUFJJVkFURV9IQVNIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlnIGZvciBGVVRFWF9QUklWQVRFX0hBU0gqKgoKT2theSwgc28gYEZVVEVYX1BSSVZBVEVfSEFTSGAuLi4gd2FpdCBhIHNlY29uZC4gVGhhdCYjMzk7cyBqdXN0IGEgYm9vbGVhbiwgbm8gcHJvbXB0aW5nLCBubyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gY29uc2lkZXI/IFRoYXQmIzM5O3MgdW51c3VhbC4gSXQgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIHRvIHNlZSB0aGUgY29udGV4dC4gTGV0JiMzOTtzIG5hdmlnYXRlIHRvIGBpbml0L0tjb25maWdgLCBhbmQgZm9jdXMgb24gYXJvdW5kIGxpbmUgMTg0OS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgZnV0ZXggaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoYXQgc2VjdGlvbiB0byBnZXQgdGhlIHByb3BlciBjb250ZXh0LiBJIGV4cGVjdCBzb21lIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcyBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0NTpcdFx0Ym9vbFxuMTg0NjpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgUlRfTVVURVhFU1xuMTg0NzpcdFx0ZGVmYXVsdCB5XG4xODQ4Olx0XG4xODQ5Olx0Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxuMTg1MDpcdFx0Ym9vbFxuMTg1MTpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgIUJBU0VfU01BTEwgXHUwMDI2XHUwMDI2IE1NVVxuMTg1MjpcdFx0ZGVmYXVsdCB5XG4xODUzOlx0XG4xODU0Olx0Y29uZmlnIEZVVEVYX01QT0xcbjE4NTU6XHRcdGJvb2xcbjE4NTY6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IE5VTUFcbjE4NTc6XHRcdGRlZmF1bHQgeVxuMTg1ODpcdFxuMTg1OTpcdGNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbjE4NjA6XHRcdGJvb2xcbjE4NjE6XHRcbjE4NjI6XHRjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xuMTg2MzpcdFx0ZGVmX2Jvb2wgRlVURVggXHUwMDI2XHUwMDI2IEhBVkVfR0VORVJJQ19WRFNPIFx1MDAyNlx1MDAyNiBHRU5FUklDX0lSUV9FTlRSWSBcdTAwMjZcdTAwMjYgUlNFUSBcdTAwMjZcdTAwMjYgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4xODY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXRleCBSYWNlIENvbmRpdGlvbiBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIG9mIHRoZSBmaXguIEkgc2VlIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igc2V0cyBhICYjMzk7eSYjMzk7IGlmIGBGVVRFWGAsIGJ1dCBub3QgYEJBU0VfU01BTExgIGFuZCB0aGVyZSBpcyBgTU1VYCBwcmVzZW50LiBBbHJpZ2h0LCBgRlVURVhgIGxvb2tzIHRvIGJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3Rpb24gaXMuIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBjYWxsZWQgYnkgYGZ1dGV4X2hhc2hfcHJjdGxgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgcHJjdGxgIHN5c2NhbGwuIFNvLCB0aGlzIGZpeCB0YXJnZXRzIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRob3NlIGZ1bmN0aW9ucyDigJMgbmFtZWx5LCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4KCmBmdXRleF9oYXNoX3ByY3RsYCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHNpbmNlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBpcyBzdGF0aWMuIFdhaXQgYSBtaW51dGUuLi4gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGFsc28gc3RhdGljLiBPa2F5LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgZnV0ZXhfaGFzaF9wcmN0bGAuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBga2VybmVsL2Z1dGV4L2NvcmUuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIFN0YXRpYyBBbGxvY2F0aW9uIGluIEZ1dGV4IEhhc2hpbmcqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQgbWUganVzdCBjb25maXJtIHNvbWV0aGluZyBhYm91dCB0aGlzIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0JiMzOTtzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGUgd2hvbGUgcG9pbnQgb2Ygc3RhdGljIGFsbG9jYXRpb24gaGVyZSBpcyBhYm91dCBsaW1pdGluZyB0aGUgc2NvcGUgYW5kIGVuc3VyaW5nIHRoYXQgaXQgaXNuJiMzOTt0IGFjY2Vzc2libGUgb3V0c2lkZSBpdHMgaW50ZW5kZWQgbW9kdWxlIG9yIHRyYW5zbGF0aW9uIHVuaXQuIElmIHRoaXMgaXNuJiMzOTt0IHN0YXRpYywgdGhlbiBpdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBwcmV0dHkgbmFzdHkgYW5kIHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzLCBhbmQgSSYjMzk7ZCBuZWVkIHRvIGdvIGJhY2sgdGhyb3VnaCB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgZXh0ZXJuYWxseS4gV2UgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCBpdOKAmXMgbm90IGxlYWtpbmcgb3V0IGluIGEgd2F5IHRoYXQgd2UgZGlkbiYjMzk7dCBpbnRlbmQuIEkgY2FuJiMzOTt0IGJlIHN1cmUsIHdpdGhvdXQgYSBwcm9wZXIgaW5zcGVjdGlvbiBvZiB0aGUgY29kZSwgYnV0IEkgaG9wZSB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlIGlzIHN1aXRhYmx5IGxpbWl0ZWQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeSBjb250cm9scy4gQSBsaXR0bGUgY2hlY2sgbm93IHdpbGwgc2F2ZSBhIGhlYWRhY2hlIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cdCAqXHRcdFx0XHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlx0ICpcdFx0XHRcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVx0ICpcdFx0XHRcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MS0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcdFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTI1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1dGV4LXJlbGF0ZWQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBoYXNoIHRhYmxlIGZvciBmdXRleGVzIGlzIG1hbmFnZWQuIEkgc2VlIHRoYXQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGRlZmluZWQgYXMgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgcHJvYmFibHkgZm9yIGluaXRpYWxpemF0aW9uIG9yIHNvbWUgbG93LWxldmVsIG9wZXJhdGlvbiBvbmx5IHVzZWQgd2l0aGluIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24uIFRoZW4sIEkgbm90aWNlIHRoYXQgYm90aCBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGFyZSBub24tc3RhdGljLiBUaGlzIG1lYW5zIHRoZXkgYXJlIGxpa2VseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgcGlxdWVzIG15IGludGVyZXN0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgYXJlIHVzZWQuIFNpbmNlIGl0JiMzOTtzIG5vdCBzdGF0aWMsIGl0IG11c3QgYmUgY2FsbGVkIGZyb20gZWxzZXdoZXJlLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxscyB0byBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YC4gVW5kZXJzdGFuZGluZyB0aG9zZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZGVmYXVsdCBmdXRleCBoYXNoIHRhYmxlIGlzIHNldCB1cCBhbmQgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnV0ZXguaD03OT1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODEtI2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo4MjppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTgzLXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NC0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xuaW5jbHVkZS9saW51eC9mdXRleC5oOjg1OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKSB7IHJldHVybiAwOyB9XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODYtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk5PXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAyLX1cbmluY2x1ZGUvbGludXgvZnV0ZXguaDoxMDM6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDQtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4tLVxua2VybmVsL2ZvcmsuYz0xOTY5PXN0YXRpYyB2b2lkIHJ2X3Rhc2tfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL2ZvcmsuYy0xOTc2LVxua2VybmVsL2ZvcmsuYzoxOTc3OnN0YXRpYyBib29sIG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHU2NCBjbG9uZV9mbGFncylcbmtlcm5lbC9mb3JrLmMtMTk3OC17XG4tLVxua2VybmVsL2ZvcmsuYz0xOTk0PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4tLVxua2VybmVsL2ZvcmsuYy0yNDEwLVxua2VybmVsL2ZvcmsuYzoyNDExOlx0aWYgKG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KGNsb25lX2ZsYWdzKSkge1xua2VybmVsL2ZvcmsuYzoyNDEyOlx0XHRyZXR2YWwgPSBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoKTtcbmtlcm5lbC9mb3JrLmMtMjQxMy1cdFx0aWYgKHJldHZhbClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODg3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRnV0ZXggSGFzaCBTeW5jaHJvbml6YXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBleWUgaG9uZXMgaW4gb24gYSBjb3VwbGUgb2Yga2V5IHRoaW5ncy4gIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGdldHMgY2FsbGVkIGR1cmluZyBgY29weV9wcm9jZXNzYCwgd2hpY2ggaXMgZm9yay9jbG9uZS4gR29vZCBmdXp6aW5nIHRhcmdldC4gQW5kIGBmdXRleF9oYXNoX3ByY3RsYCwgd2VsbCwgdGhhdCYjMzk7cyBjYWxsZWQgdmlhIGBwcmN0bGAuIEFub3RoZXIgZXhjZWxsZW50IHN5bWJvbCB0byBmb2N1cyBvbi4gQm90aCBvZiB0aGVzZSBhcmUgZW50cnkgcG9pbnRzIGFuZCByZXByZXNlbnQgY3JpdGljYWwgcG9pbnRzIGluIHRoZSBzeXN0ZW0gd2hlcmUgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGZ1dGV4IGhhc2ggaXMgYmVoYXZpbmcgY29ycmVjdGx5LgoKTm93LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29kZSBjaGFuZ2VzLiAgSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gVGhpcyBpcyBhIGJpZyBkZWFsISBSQ1UgaXMgYWxsIGFib3V0IGxvY2stZnJlZSwgY29uY3VycmVudCBhY2Nlc3MsIGFuZCByZXF1aXJlcyBjYXJlZnVsIG1lbW9yeSBiYXJyaWVyIG1hbmFnZW1lbnQgdG8gZW5zdXJlIGRhdGEgdmlzaWJpbGl0eS4gIFRoZSBgZ3VhcmQocmN1KSgpO2Agc3VnZ2VzdHMgd2UgYXJlIGRlYWxpbmcgd2l0aCByY3UgY3JpdGljYWwgc2VjdGlvbi4gYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBhcmUgYmVpbmcgaW50cm9kdWNlZCBmb3IgYGhhc2hfbmV3YCwgd2hpY2ggaXMgYSBzdHJvbmcgaW5kaWNhdGlvbiB3ZSBhcmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIGluIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMuICBJIHNlZSBhIHVzZSBvZiBgc21wX3JtYigpYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkmIzM5O3JlIHJlYWxseSB0aGlua2luZyBhYm91dCBtZW1vcnkgb3JkZXJpbmcuCgpMb29raW5nIGNsb3NlciwgdGhlIGNvbW1pdCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIEl0IHJlcGxhY2VzIHRoZSBtdXRleCAoYG1tcGgtJmd0O2xvY2tgKSB3aXRoIFJDVSBhbmQgYWRkcyBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgLCBgUkVBRF9PTkNFYCwgYW5kIGBXUklURV9PTkNFYCkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHVwZGF0ZWQgdmFsdWUgb2YgYGhhc2hfbmV3YCBpcyB2aXNpYmxlIHRvIGFsbCByZWFkZXJzLCBhbmQgdGhhdCB0aGUgb3JkZXIgaXMgcHJlc2VydmVkLCBzbyBubyBzdGFsZSB2YWx1ZXMgYXJlIGNhY2hlZC4gIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlIGhhbmRsZXMgc3luY2hyb25pemF0aW9uLiBJdCYjMzk7cyBtb3ZpbmcgZnJvbSBhIG1vcmUgdHJhZGl0aW9uYWwgbG9ja2luZyBtZWNoYW5pc20gdG8gYSBsb2NrLWZyZWUgYXBwcm9hY2guIEdpdmVuIHRoaXMgaXMgYSBjb3JlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20sIEkgY2FuIGFscmVhZHkgdGVsbCB0aGF0IHRoaXMgaXMgZ29pbmcgdG8gYmUgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0byBmb2N1cyBvbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFzIHByaW1lIHRhcmdldCBmdXp6aW5nIHN5bWJvbHMuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgdGFyZ2V0cyBhcmUgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYEZVVEVYYCBhbmQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgYXJlIGVuYWJsZWQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuCgpJJiMzOTtsbCBjaGVjayBgaW5pdC9LY29uZmlnYCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYnV0IGl0IHNlZW1zIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzbiYjMzk7dCB1c2VyLXNlbGVjdGFibGUuIEl0JiMzOTtzIGxpa2VseSBlbmFibGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LiBIb3dldmVyLCBpdCYjMzk7cyBzdGlsbCBnb29kIHRvIGRvY3VtZW50IGFuZCBlbnN1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQmIzM5O3MgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIEJ1dCwgaW4gYW55IGNhc2UsIGBGVVRFWGAgaXMgdXNlciBzZWxlY3RhYmxlIGFuZCBzaG91bGQgYmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVVEVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODI3PWNvbmZpZyBCQVNFX1NNQUxMXG4tLVxuaW5pdC9LY29uZmlnLTE4MzMtXG5pbml0L0tjb25maWc6MTgzNDpjb25maWcgRlVURVhcbmluaXQvS2NvbmZpZy0xODM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgZnV0ZXggc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWctMTg0My1cbmluaXQvS2NvbmZpZzoxODQ0OmNvbmZpZyBGVVRFWF9QSVxuaW5pdC9LY29uZmlnLTE4NDUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTE4NDgtXG5pbml0L0tjb25maWc6MTg0OTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXG5pbml0L0tjb25maWctMTg1MC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTg1My1cbmluaXQvS2NvbmZpZzoxODU0OmNvbmZpZyBGVVRFWF9NUE9MXG5pbml0L0tjb25maWctMTg1NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWc9MTg1OT1jb25maWcgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4tLVxuaW5pdC9LY29uZmlnLTE4NjEtXG5pbml0L0tjb25maWc6MTg2Mjpjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xuaW5pdC9LY29uZmlnLTE4NjMtXHRkZWZfYm9vbCBGVVRFWCBcdTAwMjZcdTAwMjYgSEFWRV9HRU5FUklDX1ZEU08gXHUwMDI2XHUwMDI2IEdFTkVSSUNfSVJRX0VOVFJZIFx1MDAyNlx1MDAyNiBSU0VRIFx1MDAyNlx1MDAyNiBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4ODgKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZVVEVYIENvbmZpZ3VyYXRpb24gYW5kIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgRlVURVhgIGlzIGluZGVlZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhIHByZXR0eSBmdW5kYW1lbnRhbCBvbmUgYXQgdGhhdC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCwgYWxvbmcgd2l0aCBgRlVURVhfUFJJVkFURV9IQVNIYC4gVGhlc2UgYXJlIGtleSBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0uCgpOb3csIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gSSByZWNhbGwgaXQgYmVpbmcgcmVsYXRlZCB0byB0aGUgaGFzaGluZyBtZWNoYW5pc21zLiBSaWdodCwgbGV0IG1lIHNlZS4uLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIEFoLCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBQZXJmZWN0LiBUaGF0IG1ha2VzIGl0IGNsZWFyIC0gdGhvc2UgdHdvLCBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLCBhcmUgdGhlIHN5bWJvbHMgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbi4gVGhleSByZXByZXNlbnQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGFuZCB0aGUga2V5IGFzcGVjdHMgdG8gZXhhbWluZS4KClJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBjbGVhciBwaWN0dXJlLCBsZXQgbWUgbG9nIHRoaXMuIEkmIzM5O2xsIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGFkZGluZyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gYGhhc2hfbmV3YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBwcmN0bGAgc3lzY2FsbCAoYFBSX0ZVVEVYX0hBU0hgKSBhbmQgcHJvY2VzcyBjbG9uaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7LAogICAgJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBhZGRpbmcgYFJFQURfT05DRWAvYFdSSVRFX09OQ0VgIHRvIGBoYXNoX25ld2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gdGhhdCBpcyByZWFjaGFibGUgdmlhIHRoZSBgcHJjdGxgIHN5c2NhbGwgKGBQUl9GVVRFWF9IQVNIYCkgYW5kIHByb2Nlc3MgY2xvbmluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBhZGRpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgYW5kIGEgbWVtb3J5IGJhcnJpZXIgKHNtcF9ybWIpIGZvciBhY2Nlc3NpbmcgYG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZS9OVUxMLWRlcmVmIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0NTQU4gYW5kIEtBU0FOIHJlc3BlY3RpdmVseS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTRkZmVlODJkMGJiMzU2ZTI4NGYwMjg1ZDQwNGU5NDEyOTgyYzAwMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA0OjI0OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqCiAJZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLSZndDtoYXNoLCBsb2NrZGVwX2lzX2hlbGQoJmFtcDttbXBoLSZndDtsb2NrKSk7CiAJaWYgKGZwaCkgewogCQlpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHsKLQkJCW1tcGgtJmd0O2hhc2hfbmV3ID0gbmV3OwomIzQzOwkJCVdSSVRFX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcsIG5ldyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiAJCWZwaCA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKIAkJaWYgKGZwaCkgewotCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAJCQlfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7CiAJCX0KIAl9CkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9ICZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoOwogCXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CiB9CiAKQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJY3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaCwKIAkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO21tLSZndDtmdXRleC5waGFzaC5sb2NrKSk7CiAJCW5ldyA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKLQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAogCQlpZiAoZnBoKSB7CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIWN1ci0mZ3Q7aGFzaF9tYXNrKSB7CkBAIC0xODg5LDcgJiM0MzsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCQkJICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLgogCQkJCSAqLwogCQkJCWZyZWUgPSBmcGg7Ci0JCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3OwomIzQzOwkJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFuZXcpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjIKCQkJCQkJCW91dHB1dDogMTYwCgkJCQkJCQl0aG91Z2h0czogNTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV0ZXggQ29uY3VycmVuY3kgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgbW1waC0mZ3Q7aGFzaF9uZXdgICh3aGljaCBpcywgaW4gZXNzZW5jZSwgYG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ld2ApLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAgYXJvdW5kIGFzc2lnbm1lbnRzIGFuZCByZWFkcyBvZiB0aGlzIHZhcmlhYmxlLiBUaGF0IGltbWVkaWF0ZWx5IHNjcmVhbXMgY29uY3VycmVuY3kgYnVnIGZpeCB0byBtZTsgaXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIGEgZGF0YSByYWNlIG9yIGEgbWlzc2luZyBtZW1vcnkgYmFycmllciBpc3N1ZSB3aXRoaW4gdGhlIGZ1dGV4IGltcGxlbWVudGF0aW9uLiBXZSYjMzk7cmUgZXhwbGljaXRseSBvcmRlcmluZyBtZW1vcnkgb3BlcmF0aW9ucyB0byBlbnN1cmUgY29uc2lzdGVudCB2aXNpYmlsaXR5IGFjcm9zcyBkaWZmZXJlbnQgQ1BVcy4KCkxvb2tpbmcgY2xvc2VyLCB0aGUgYGZ1dGV4X3Bpdm90X3BlbmRpbmcoKWAgZnVuY3Rpb24gYWxzbyBub3cgZW1wbG95cyBSQ1UgKFJlYWQtQ29weSBVcGRhdGUpIGluc3RlYWQgb2YgYSBtdXRleCwgYW5kIGNydWNpYWxseSwgYW4gYHNtcF9ybWIoKWAgKFN5c3RlbSBNZW1vcnkgQmFycmllciBSZWFkKSBoYXMgYmVlbiBhZGRlZC4gVGhpcyByZWluZm9yY2VzIHRoZSBmb2N1cyBvbiBtZW1vcnkgb3JkZXJpbmcuIFRoZSBgc21wX3JtYigpYCBpbiBwYXJ0aWN1bGFyIGlzIGNyaXRpY2FsOyBpdCBlbnN1cmVzIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2UgYWxzbyBzZWUgdGhlIG51bGxpbmcgb2YgdGhlIGBoYXNoX25ld2AgcG9pbnRlciwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgdGhlIHBpdm90IG9wZXJhdGlvbi4KCk5vdywgY29uc2lkZXJpbmcgdGhlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYXNwZWN0LCBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IHdvdWxkIHRyaWdnZXIgS01TQU4uIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgbmV3IGFsbG9jYXRpb25zLCBpdCYjMzk7cyBub3QgY2hhbmdpbmcgdGhlIHNpemUgb2YgYW55IHN0cnVjdHVyZXMgaW4gd2F5cyB0aGF0IHdvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBpdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIHBhdGNoIGlzIHB1cmVseSBhYm91dCBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbi4gQW55IGlzc3VlcyB0aGlzIHBhdGNoIHdvdWxkIGFkZHJlc3MgYXJlIG1lbW9yeSBvcmRlcmluZyBidWdzLCBhbmQgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhYm91dCBkYXRhIHJhY2VzIGFuZCBtZW1vcnkgYmFycmllcnMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIGBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ld2AuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGRhdGEgcmFjZXMgb3IgdXNlLWFmdGVyLWZyZWUvTlVMTC1kZXJlZiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtDU0FOIGFuZCBLQVNBTiByZXNwZWN0aXZlbHkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBhZGRpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgYW5kIGEgbWVtb3J5IGJhcnJpZXIgKHNtcF9ybWIpIGZvciBhY2Nlc3NpbmcgYG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZS9OVUxMLWRlcmVmIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0NTQU4gYW5kIEtBU0FOIHJlc3BlY3RpdmVseS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjQ6NTEuMTA2MjQ1NDg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyMDI3OTExNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIixcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIGBtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXdgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBkYXRhIHJhY2VzIG9yIHVzZS1hZnRlci1mcmVlL05VTEwtZGVyZWYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQ1NBTiBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGFkZGluZyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gYGhhc2hfbmV3YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBwcmN0bGAgc3lzY2FsbCAoYFBSX0ZVVEVYX0hBU0hgKSBhbmQgcHJvY2VzcyBjbG9uaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNDo1MS4xMDYyNTA0NDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MzMxODU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE0ZGZlZTgyZDBiYjM1NmUyODRmMDI4NWQ0MDRlOTQxMjk4MmMwMDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDQ6MjQ6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcXG4rKysgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXFxuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKlxcbiBcXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtXFx1MDAzZWhhc2gsIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bW1waC1cXHUwMDNlbG9jaykpO1xcbiBcXHRpZiAoZnBoKSB7XFxuIFxcdFxcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xcbi1cXHRcXHRcXHRtbXBoLVxcdTAwM2VoYXNoX25ldyA9IG5ldztcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShtbXBoLVxcdTAwM2VoYXNoX25ldywgbmV3KTtcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0yMjQsNyArMjI0LDcgQEAgc3RhdGljIHZvaWQgZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIFxcdFxcdGZwaCA9IG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcXG4gXFx0XFx0aWYgKGZwaCkge1xcbi1cXHRcXHRcXHRtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XFxuIFxcdFxcdFxcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTE3ODYsMTIgKzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXFx1MDAyNm1tLVxcdTAwM2VmdXRleC5waGFzaDtcXG4gXFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xcbiBcXG4tXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZtbXBoLVxcdTAwM2Vsb2NrKTtcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbiBcXG4tXFx0aWYgKCFtbXBoLVxcdTAwM2VoYXNoX25ldylcXG4rXFx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXFx1MDAzZWhhc2gpO1xcbitcXHQvKlxcbitcXHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXFxuK1xcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cXG4rXFx0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfcm1iKCk7XFxuK1xcdGlmICghUkVBRF9PTkNFKG1tcGgtXFx1MDAzZWhhc2hfbmV3KSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtXFx1MDAzZWhhc2gpO1xcbiBcXHRyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTtcXG4gfVxcbiBcXG5AQCAtMTg3OSw3ICsxODg1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIFxcdFxcdGN1ciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spKTtcXG4gXFx0XFx0bmV3ID0gbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xcbi1cXHRcXHRtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xcbitcXHRcXHRXUklURV9PTkNFKG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XFxuIFxcbiBcXHRcXHRpZiAoZnBoKSB7XFxuIFxcdFxcdFxcdGlmIChjdXIgXFx1MDAyNlxcdTAwMjYgIWN1ci1cXHUwMDNlaGFzaF9tYXNrKSB7XFxuQEAgLTE4ODksNyArMTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbiBcXHRcXHRcXHRcXHQgKiB0aGUgc2Vjb25kIG9uZSByZXR1cm5zIGhlcmUuXFxuIFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRmcmVlID0gZnBoO1xcbi1cXHRcXHRcXHRcXHRtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XFxuK1xcdFxcdFxcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChjdXIgXFx1MDAyNlxcdTAwMjYgIW5ldykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNDo1MS41MDAyMDU3MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTQ5Njk4OTQwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIGZlYXR1cmUsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYWRkaW5nIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCB0byBgaGFzaF9uZXdgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHByY3RsYCBzeXNjYWxsIChgUFJfRlVURVhfSEFTSGApIGFuZCBwcm9jZXNzIGNsb25pbmcsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE0ZGZlZTgyZDBiYjM1NmUyODRmMDI4NWQ0MDRlOTQxMjk4MmMwMDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNDoyNDo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xuKysrIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKlxuIFx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLVx1MDAzZWhhc2gsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbXBoLVx1MDAzZWxvY2spKTtcbiBcdGlmIChmcGgpIHtcbiBcdFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XG4tXHRcdFx0bW1waC1cdTAwM2VoYXNoX25ldyA9IG5ldztcbitcdFx0XHRXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXG5AQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gXHRcdGZwaCA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuIFx0XHRpZiAoZnBoKSB7XG4tXHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuK1x0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3ODYsMTIgKzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xuIFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4rXHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4rXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cdTAwM2VoYXNoKTtcbitcdC8qXG4rXHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4rXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG4rXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbitcdCAqL1xuK1x0c21wX3JtYigpO1xuK1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG4gfVxuIFxuQEAgLTE4NzksNyArMTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRjdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsXG4gXHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spKTtcbiBcdFx0bmV3ID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4tXHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXG4gXHRcdGlmIChmcGgpIHtcbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhY3VyLVx1MDAzZWhhc2hfbWFzaykge1xuQEAgLTE4ODksNyArMTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRcdFx0ICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHRmcmVlID0gZnBoO1xuLVx0XHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIW5ldykge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjQ6NTEuNTAwMjA3MDIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxODcyODIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGdXRleCBQcml2YXRlIEhhc2ggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHN5bmNocm9uaXphdGlvbi4gU3BlY2lmaWNhbGx5LCB3ZSdyZSBzd2FwcGluZyBvdXQgZGlyZWN0IHdyaXRlcyB0byBgbW1waC1cdTAwM2VoYXNoX25ld2AgYW5kIGBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ld2Agd2l0aCBgV1JJVEVfT05DRWAuIFNtYXJ0IG1vdmUuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIGhlcmUsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBmdXRleGVzIGFuZCBzaGFyZWQgbWVtb3J5LiBSZXBsYWNpbmcgdGhhdCBgZ3VhcmQobXV0ZXgpYCBjYWxsIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCB3aXRoIGBndWFyZChyY3UpKClgIGFuZCBhZGRpbmcgYHNtcF9ybWIoKWAgaXMgYW5vdGhlciByZWQgZmxhZyBvZiBjb25jdXJyZW50IGFjY2VzcyB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgaGFuZGxpbmcuIEFuZCB0aGVuIHVzaW5nIGBSRUFEX09OQ0Vg4oCmIHllcCwgdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGFib3V0IGVuc3VyaW5nIHRoZSBjb3JyZWN0IHZpc2liaWxpdHkgb2YgdGhlc2UgaGFzaCB0YWJsZSB1cGRhdGVzIGFjcm9zcyBkaWZmZXJlbnQgQ1BVcy4gSXQncyBhbGwgYWJvdXQgbWVtb3J5IGJhcnJpZXJzIGFuZCBkYXRhIGNvbnNpc3RlbmN5LlxuXG5Ob3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gY29udGV4dC4gV2FpdCwgKnN0YXRpYyogZnVuY3Rpb24/IEFscmlnaHQsIHRoYXQgbWVhbnMgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBsb2NhbGl6ZWQgdG8gdGhlIHNhbWUgc291cmNlIGZpbGUuIFNvLCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGlzICphY3R1YWxseSogYmVpbmcgY2FsbGVkIHdpdGhpbiBgY29yZS5jYCB0byBzZWUgaG93IHRoZXNlIGNoYW5nZXMgYXJlIGltcGFjdGluZyB0aGUgb3ZlcmFsbCBmdXRleCBoYXNoIG1hbmFnZW1lbnQgbG9naWMuIExldCdzIHRyYWNlIHRoYXQgZnVuY3Rpb24gY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI0OjU2LjAxODkzODMwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE4Njk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9waXZvdF9wZW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNzczPXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzgzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc4NDpzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzctYWdhaW46XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODc4OlxcdFxcdHdhaXRfdmFyX2V2ZW50KG1tLCBmdXRleF9waXZvdF9wZW5kaW5nKG1tKSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjQ6NTYuMDY0MTMwMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjExNTk3MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqXG5cbk9rYXksIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBqdXN0IGdvdCBjYWxsZWQuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgY2FsbCBvcmlnaW5hdGVkLiBHaXZlbiB0aGUgbmF0dXJlIG9mIGZ1dGV4ZXMsIGl0J3MgbGlrZWx5IGxpbmtlZCB0byBwcm9jZXNzIHN5bmNocm9uaXphdGlvbiwgdXNlci1zcGFjZSBsb2Nrcywgb3Iga2VybmVsLXNwYWNlIHdhaXQgcXVldWVzLiBUaGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgZnVuY3Rpb24gY2FsbCBwYXRoIHRvIHVuZGVyc3RhbmQgdGhlIGhpZ2hlci1sZXZlbCBjb250ZXh0LCBhbmQgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHNjZW5hcmlvIHRoYXQgdHJpZ2dlcmVkIHRoZSBhbGxvY2F0aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIHNvbWUgZGVidWdnaW5nIHRvb2xzLCBsaWtlbHkgYHBlcmZgLCBgZnRyYWNlYCwgb3IgZ29vZCBvbGQgYGdkYmAsIHRvIHN0ZXAgdGhyb3VnaCB0aGUgY2FsbCBzdGFjayBhbmQgaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgd2lsbCBoZWxwIGRldGVybWluZSBpZiB0aGlzIGFsbG9jYXRpb24gaXMgZXhwZWN0ZWQsIHBvdGVudGlhbGx5IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgaW5kaWNhdGl2ZSBvZiBhIGJ1ZywgbGlrZSBhIG1lbW9yeSBsZWFrIG9yIGFuIHVuZXhwZWN0ZWQgbG9ja2luZyBzY2VuYXJpby4gTXkgbWFpbiBmb2N1cyBhdCB0aGlzIHBvaW50IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIFwid2h5XCIgYW5kIFwid2hlblwiIG9mIHRoaXMgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNDo1OS4yNzU3Mjk5NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMjYwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDAtXFx0ICpcXHRcXHRcXHRcXHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsIG5ldyk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlxcdCAqXFx0XFx0XFx0XFx0ZnV0ZXhfaGFzaF9hbGxvY2F0ZSgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVxcdCAqXFx0XFx0XFx0XFx0ICBmdXRleF9yZWZfZHJvcCgpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4MDQ9c3RhdGljIGJvb2wgZnV0ZXhfaGFzaF9sZXNzKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmEsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODI4OnN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcXHRyZXR1cm4gZnV0ZXhfaGFzaF9hbGxvY2F0ZShidWNrZXRzLCAwKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTcxPXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MS0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4MjpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykgeyByZXR1cm4gLUVJTlZBTDsgfVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4My1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKSB7IHJldHVybiAwOyB9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMjQ9aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMzM6XFx0XFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDM0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNDo1OS4zMTg3NjA2NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg4OTI3MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGFzIHRob3VnaCBpdCB3ZXJlIG15IHRyYWluIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gYGZ1dGV4X2hhc2hfcHJjdGxgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIGNhbGwgdG8gYGZ1dGV4X2hhc2hfcHJjdGxgIHN0ZW1taW5nIGZyb20gdGhlIGBwcmN0bGAgc3lzdGVtIGNhbGwuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0J3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQgYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIGFjdHVhbGx5IGRvaW5nIHdpdGhpbiB0aGUgYHByY3RsYCBjb250ZXh0LiBUaGUgYHByY3RsYCBzeXN0ZW0gY2FsbCBpcyBhIHN3aXNzIGFybXkga25pZmUsIGhhbmRsaW5nIGEgd2lkZSByYW5nZSBvZiBwcm9jZXNzLWxldmVsIG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgaG93IGBmdXRleF9oYXNoX3ByY3RsYCB0aWVzIGludG8gdGhhdCBpcyBjcnVjaWFsLiBJIHN1c3BlY3QgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXNwZWN0IG9mIGZ1dGV4IG1hbmFnZW1lbnQg4oCTIHBlcmhhcHMgaW5pdGlhbGl6YXRpb24sIG1hbmlwdWxhdGlvbiBvZiBmdXRleCBkYXRhIHN0cnVjdHVyZXMsIG9yIGV2ZW4gc2VjdXJpdHktcmVsYXRlZCBjaGVja3MgYXJvdW5kIGZ1dGV4IG9wZXJhdGlvbnMuIFdlJ2xsIGhhdmUgdG8gZGlnIGRlZXBlciB0byBjb25maXJtLCB0aG91Z2guIExldCdzIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjg4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MDIuMjA3NjkwMDQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTk0NDUzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc3PWxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtNzgtXFx0ICAgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo3OTppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTQ9c3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtOTgtfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo5OTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMC17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTc9dm9pZCBmdXRleF9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDIzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAyNDppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XFxuLS1cXG5rZXJuZWwvc3lzLmM9MjUzND1TWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxcbi0tXFxua2VybmVsL3N5cy5jLTI4ODQtXFx0Y2FzZSBQUl9GVVRFWF9IQVNIOlxcbmtlcm5lbC9zeXMuYzoyODg1OlxcdFxcdGVycm9yID0gZnV0ZXhfaGFzaF9wcmN0bChhcmcyLCBhcmczLCBhcmc0KTtcXG5rZXJuZWwvc3lzLmMtMjg4Ni1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MDQuMDA3MTM5MjczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwMzkyOTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZ1dGV4IFN5bmNocm9uaXphdGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgbmV3IGBmdXRleF9oYXNoX3ByY3RsYCBmdW5jdGlvbiBpcyBub3cgZXhwb3NlZCB2aWEgdGhlIGBwcmN0bGAgc3lzY2FsbCwgdXNpbmcgYFBSX0ZVVEVYX0hBU0hgLiBJbnRlcmVzdGluZy4gVGhpcyBwYXRjaCBtb2RpZmllcyBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgY3JpdGljYWwgdG8gaW52ZXN0aWdhdGUuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgZnV0ZXggZnVuY3Rpb25hbGl0eSBoZXJlIC0gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uLiBBYnNvbHV0ZWx5IHdvcnRoIGEgZGVlcCBmdXp6aW5nIGNhbXBhaWduLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExvb2tzIGxpa2UgYENPTkZJR19GVVRFWGAgaXMgYSBnaXZlbiwgYnV0IGBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIYCBpcyB0aGUga2V5LiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGVuYWJsZWQuIFRpbWUgdG8gZ28gZGlnIGludG8gdGhlIGNvbmZpZyBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDIxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjA3LjgxMTA3MTUwMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NDcyMDQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGVVRFWF9QUklWQVRFX0hBU0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZnV0ZXguaD03OT1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODAtXFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgxOiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgyLWludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oPTgzPXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODQ6I2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODUtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9ODY9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjg3OiNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04OC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaD0xNTI9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2ZpeHVwX3JvYnVzdF91bmxvY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTE1NS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6MTU2OiNpZiBkZWZpbmVkKENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0gpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1JPQlVTVF9VTkxPQ0spXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTE1Ny12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleF90eXBlcy5oPTIzPXN0cnVjdCBmdXRleF9zY2hlZF9kYXRhIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXhfdHlwZXMuaC0zMy1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmg6MzQ6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmgtMzUtLyoqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MTQyPWV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKik7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjE0MzojaWYgZGVmaW5lZChDT05GSUdfTU1VKSB8fCBkZWZpbmVkKENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0gpXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE0NC0vKiBzYW1lIGFzIGFib3ZlIGJ1dCBwZXJmb3JtcyB0aGUgc2xvdyBwYXRoIGZyb20gdGhlIGFzeW5jIGNvbnRleHQuIENhblxcbi0tXFxuaW5pdC9LY29uZmlnPTE4NDQ9Y29uZmlnIEZVVEVYX1BJXFxuLS1cXG5pbml0L0tjb25maWctMTg0OC1cXG5pbml0L0tjb25maWc6MTg0OTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXFxuaW5pdC9LY29uZmlnLTE4NTAtXFx0Ym9vbFxcbi0tXFxua2VybmVsL2ZvcmsuYz0xMjEyPUVYUE9SVF9TWU1CT0xfR1BMKG1tcHV0KTtcXG5rZXJuZWwvZm9yay5jLTEyMTMtXFxua2VybmVsL2ZvcmsuYzoxMjE0OiNpZiBkZWZpbmVkKENPTkZJR19NTVUpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSClcXG5rZXJuZWwvZm9yay5jLTEyMTUtc3RhdGljIHZvaWQgbW1wdXRfYXN5bmNfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMzA9X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzEtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzI6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEzMy1zdGF0aWMgYm9vbCBmdXRleF9yZWZfZ2V0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTI2MD1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzUtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzY6I2Vsc2UgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3Ny1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTI3OD1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yODItXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyODM6I2VuZGlmIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4NC1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MzY4PV9fZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICoqZnBoX3ApXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM3Mi1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM3MzojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzc0LVxcdGlmIChub2RlID09IEZVVEVYX05PX05PREUgXFx1MDAyNlxcdTAwMjYgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSkge1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNTY3PXN0YXRpYyB2b2lkIGZ1dGV4X2hhc2hfYnVja2V0X2luaXQoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpmaGIpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1NzUtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNTc2OiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTc3LVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTcxPXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MC19XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgxOiNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgyLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5ODQ9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2hhc2hfaW5pdF9tbShzdHJ1Y3QgZnV0ZXhfbW1fZGF0YSAqZmQpIHsgfVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4NTojZW5kaWYgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODYtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTM9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3JvYnVzdF91bmxvY2tfaW5pdF9tbShzdHJ1Y3QgZnV0ZXhfbW1fZGF0YSAqZmQpIHsgfVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDE1LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAxNjojaWYgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKSB8fCBkZWZpbmVkKENPTkZJR19GVVRFWF9ST0JVU1RfVU5MT0NLKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAxNy12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNDE9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYge1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQ1LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0NjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0Ny1leHRlcm4gc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNDg9ZXh0ZXJuIHZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0OS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTA6I2Vsc2UgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTEtc3RhdGljIGlubGluZSBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIE5VTEw7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MDkuNTU1Nzk5MTE4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDAwOTgyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBgRlVURVhfUFJJVkFURV9IQVNIYCBpcyBzb21ldGhpbmcgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLCBpdHMgcG9zc2libGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGhlbHAgdGV4dCB0aGF0IGV4cGxhaW5zIGl0cyBwdXJwb3NlLiBJdCdzIHRoZSBzdGFuZGFyZCBwbGFjZSB0byBpbnZlc3RpZ2F0ZSB0aGVzZSBraW5kcyBvZiBjb21waWxlLXRpbWUgb3B0aW9ucy4gTGV0IG1lIGdldCB0aGF0IEtjb25maWcgZmlsZSBvcGVuZWQgYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNToxMi41OTU4OTk3NzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDg3NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODQ0PWNvbmZpZyBGVVRFWF9QSVxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDgtXFxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbmluaXQvS2NvbmZpZy0xODUwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MTIuNjQwMDEzODkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTc0ODc2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgc2VsZWN0cyBgRlVURVhfUFJJVkFURV9IQVNIYDpcblxuKipEaXNzZWN0aW5nIHRoZSBGVVRFWF9QUklWQVRFX0hBU0ggU2VsZWN0b3IqKlxuXG5BbHJpZ2h0LCBzbyBgRlVURVhfUFJJVkFURV9IQVNIYCBpcyB0aGUga2V5IHBpZWNlIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIHBhcnRpY3VsYXIgZmxhZyBpcyBiZWluZyB1c2VkLCBlc3BlY2lhbGx5IHNpbmNlIEknbSB0cnlpbmcgdG8gc2VlIHdoYXQgaXQgKnNlbGVjdHMqLiBXaGF0IGRvZXMgdGhpcyBtZWFuIGluIHRoZSBjb250ZXh0IG9mIGBmdXRleGA/IEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBcInByaXZhdGVcIiB2ZXJzdXMgXCJzaGFyZWRcIiBhbmQgdGhlIHVzZSBvZiBhIGhhc2guIFRoaXMgbGlrZWx5IHBvaW50cyB0b3dhcmQgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBvcHRpbWl6YXRpb24uIElzIGl0IHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBmdXRleGVzPyBJcyBpdCBhIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBmdXRleGVzIGFyZSBpbXBsZW1lbnRlZCBmb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcywgb3Igd2l0aCBzcGVjaWZpYyBwcm9jZXNzIG1lbW9yeSBjb25maWd1cmF0aW9ucz9cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGRpZmZlcmVudCBzY2VuYXJpb3M6XG5cbiogICAqKktlcm5lbCBpbXBsZW1lbnRhdGlvbjoqKiBJcyB0aGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGUgZnV0ZXggd2FpdCBxdWV1ZXM/IFBlcmhhcHMgdGhlIGhhc2ggaXMgdXNlZCBmb3IgbG9va3VwIGVmZmljaWVuY3kgd2l0aGluIHRoZSBrZXJuZWwncyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuIERvZXMgYEZVVEVYX1BSSVZBVEVfSEFTSGAgc3VnZ2VzdCBzb21ldGhpbmcgYWJvdXQgaG93IHRoZSBrZXJuZWwgb3JnYW5pemVzIGZ1dGV4ZXMgaW50ZXJuYWxseT9cbiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIFRoZSBcInByaXZhdGVcIiBwYXJ0IG1ha2VzIG1lIHRoaW5rIGFib3V0IHByb2Nlc3MgYWRkcmVzcyBzcGFjZS4gSXMgdGhpcyBmbGFnIGluZGljYXRpbmcgYSBmdXRleCB0aGF0J3Mgb25seSB2YWxpZCB3aXRoaW4gdGhlIHByb2Nlc3MncyBvd24gbWVtb3J5LCBhbmQgdGhlIGhhc2ggaXMgcmVsZXZhbnQgdG8gbG9jYXRpbmcgaXQgd2l0aGluIHRoYXQgYWRkcmVzcyBzcGFjZT8gRG9lcyB0aGlzIHN1Z2dlc3QgYSBkaWZmZXJlbnQgbWVtb3J5IG1vZGVsIGZvciBmdXRleGVzPyBQZXJoYXBzIHNwZWNpZmljIHRvIHVzZXItc3BhY2UgaW1wbGVtZW50YXRpb25zP1xuKiAgICoqUGVyZm9ybWFuY2UgQ29uc2lkZXJhdGlvbnM6KiogVGhlIGhhc2ggaXRzZWxmIGlzIG1ha2luZyBtZSB0aGluayBvZiBhIHRyYWRlLW9mZi4gSXMgdGhpcyBhYm91dCByZWR1Y2luZyB0aGUgb3ZlcmhlYWQgb2Ygc2hhcmVkIGZ1dGV4ZXM/IE1heWJlIGl0J3MgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgYSBsYXJnZSBudW1iZXIgb2YgZnV0ZXhlcz9cblxuSSBuZWVkIHRvIGRlbHZlIGRlZXBlci4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZnV0ZXhgIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3Igd2hlcmUgdGhpcyBgRlVURVhfUFJJVkFURV9IQVNIYCBmbGFnIGlzIGRlZmluZWQgYW5kIGhvdyBpdCBpcyBhY3R1YWxseSB1c2VkLiBJIHdpbGwgbGlrZWx5IG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1dGV4IHN0cnVjdHVyZSBpcyB1c2VkIGluIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMgYW5kIGFyY2hpdGVjdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGRpZmZlcmVudCBjb2RlIHBhdGhzIGFuZCBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3b3VsZCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UuIEknbGwgcHJvYmFibHkgYWxzbyBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IHN5c3RlbSBjYWxsIGhhbmRsaW5nIGFuZCBhbnkgYXNzb2NpYXRlZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3B0aW1pemF0aW9ucy4gSSBuZWVkIHRvIGRpc2NvdmVyIGV4YWN0bHkgd2hhdCBkYXRhIHN0cnVjdHVyZSBvciBjb2RlIHBhdGggaXMgYmVpbmcgc2VsZWN0ZWQgYnkgdGhlIGZsYWcsIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQxNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjE2LjgzNzUwNDg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MTMyOTA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRlVURVhfUFJJVkFURV9IQVNIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MTguNDYzNjQ0OTA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTQ5NTk3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlnIGZvciBGVVRFWF9QUklWQVRFX0hBU0gqKlxuXG5Pa2F5LCBzbyBgRlVURVhfUFJJVkFURV9IQVNIYC4uLiB3YWl0IGEgc2Vjb25kLiBUaGF0J3MganVzdCBhIGJvb2xlYW4sIG5vIHByb21wdGluZywgbm8gY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGNvbnNpZGVyPyBUaGF0J3MgdW51c3VhbC4gSXQgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIHRvIHNlZSB0aGUgY29udGV4dC4gTGV0J3MgbmF2aWdhdGUgdG8gYGluaXQvS2NvbmZpZ2AsIGFuZCBmb2N1cyBvbiBhcm91bmQgbGluZSAxODQ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBmdXRleCBpbXBsZW1lbnRhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGF0IHNlY3Rpb24gdG8gZ2V0IHRoZSBwcm9wZXIgY29udGV4dC4gSSBleHBlY3Qgc29tZSBpbnRlcmVzdGluZyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjIxLjM1ODYwNzg4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDU6XFx0XFx0Ym9vbFxcbjE4NDY6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiBSVF9NVVRFWEVTXFxuMTg0NzpcXHRcXHRkZWZhdWx0IHlcXG4xODQ4OlxcdFxcbjE4NDk6XFx0Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbjE4NTA6XFx0XFx0Ym9vbFxcbjE4NTE6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiAhQkFTRV9TTUFMTCBcXHUwMDI2XFx1MDAyNiBNTVVcXG4xODUyOlxcdFxcdGRlZmF1bHQgeVxcbjE4NTM6XFx0XFxuMTg1NDpcXHRjb25maWcgRlVURVhfTVBPTFxcbjE4NTU6XFx0XFx0Ym9vbFxcbjE4NTY6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiBOVU1BXFxuMTg1NzpcXHRcXHRkZWZhdWx0IHlcXG4xODU4OlxcdFxcbjE4NTk6XFx0Y29uZmlnIEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcbjE4NjA6XFx0XFx0Ym9vbFxcbjE4NjE6XFx0XFxuMTg2MjpcXHRjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xcbjE4NjM6XFx0XFx0ZGVmX2Jvb2wgRlVURVggXFx1MDAyNlxcdTAwMjYgSEFWRV9HRU5FUklDX1ZEU08gXFx1MDAyNlxcdTAwMjYgR0VORVJJQ19JUlFfRU5UUlkgXFx1MDAyNlxcdTAwMjYgUlNFUSBcXHUwMDI2XFx1MDAyNiBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4xODY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNToyMS4zNTg3NDYwMzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk4Mzc4MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1dGV4IFJhY2UgQ29uZGl0aW9uIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIG9mIHRoZSBmaXguIEkgc2VlIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igc2V0cyBhICd5JyBpZiBgRlVURVhgLCBidXQgbm90IGBCQVNFX1NNQUxMYCBhbmQgdGhlcmUgaXMgYE1NVWAgcHJlc2VudC4gQWxyaWdodCwgYEZVVEVYYCBsb29rcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy4gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGNhbGxlZCBieSBgZnV0ZXhfaGFzaF9wcmN0bGAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGBwcmN0bGAgc3lzY2FsbC4gU28sIHRoaXMgZml4IHRhcmdldHMgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zIOKAkyBuYW1lbHksIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLlxuXG5gZnV0ZXhfaGFzaF9wcmN0bGAgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBzaW5jZSBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgaXMgc3RhdGljLiBXYWl0IGEgbWludXRlLi4uIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBhbHNvIHN0YXRpYy4gT2theSwgbGV0J3Mgem9vbSBpbiBvbiBgZnV0ZXhfaGFzaF9wcmN0bGAuIEknbGwgaGVhZCBvdmVyIHRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MjYuMzQyNTMxMjQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAzMjc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNToyNi4zODY1NjkyMzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MDU0MzkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBTdGF0aWMgQWxsb2NhdGlvbiBpbiBGdXRleCBIYXNoaW5nKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQgbWUganVzdCBjb25maXJtIHNvbWV0aGluZyBhYm91dCB0aGlzIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoZSB3aG9sZSBwb2ludCBvZiBzdGF0aWMgYWxsb2NhdGlvbiBoZXJlIGlzIGFib3V0IGxpbWl0aW5nIHRoZSBzY29wZSBhbmQgZW5zdXJpbmcgdGhhdCBpdCBpc24ndCBhY2Nlc3NpYmxlIG91dHNpZGUgaXRzIGludGVuZGVkIG1vZHVsZSBvciB0cmFuc2xhdGlvbiB1bml0LiBJZiB0aGlzIGlzbid0IHN0YXRpYywgdGhlbiBpdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBwcmV0dHkgbmFzdHkgYW5kIHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzLCBhbmQgSSdkIG5lZWQgdG8gZ28gYmFjayB0aHJvdWdoIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCBleHRlcm5hbGx5LiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCB0aGF0IGl04oCZcyBub3QgbGVha2luZyBvdXQgaW4gYSB3YXkgdGhhdCB3ZSBkaWRuJ3QgaW50ZW5kLiBJIGNhbid0IGJlIHN1cmUsIHdpdGhvdXQgYSBwcm9wZXIgaW5zcGVjdGlvbiBvZiB0aGUgY29kZSwgYnV0IEkgaG9wZSB0aGlzIGZ1bmN0aW9uJ3Mgc2NvcGUgaXMgc3VpdGFibHkgbGltaXRlZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2xzLiBBIGxpdHRsZSBjaGVjayBub3cgd2lsbCBzYXZlIGEgaGVhZGFjaGUgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNToyOS42MjcxMTU0NTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjM0NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVxcdCAqXFx0XFx0XFx0XFx0ICByY3VfYXNzaWduX3BvaW50ZXIoXFx1MDAyNm1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwMTpcXHQgKlxcdFxcdFxcdFxcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMi1cXHQgKlxcdFxcdFxcdFxcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Njg6XFx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODEtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlxcdFxcdHJldCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGUoYXJnMywgZmxhZ3MpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MjkuNjY5NzU0MTU3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjM1NDk3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdXRleC1yZWxhdGVkIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgaGFzaCB0YWJsZSBmb3IgZnV0ZXhlcyBpcyBtYW5hZ2VkLiBJIHNlZSB0aGF0IGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIHByb2JhYmx5IGZvciBpbml0aWFsaXphdGlvbiBvciBzb21lIGxvdy1sZXZlbCBvcGVyYXRpb24gb25seSB1c2VkIHdpdGhpbiB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4uIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbi4gVGhlbiwgSSBub3RpY2UgdGhhdCBib3RoIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgYXJlIG5vbi1zdGF0aWMuIFRoaXMgbWVhbnMgdGhleSBhcmUgbGlrZWx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBwaXF1ZXMgbXkgaW50ZXJlc3QuXG5cbk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGFyZSB1c2VkLiBTaW5jZSBpdCdzIG5vdCBzdGF0aWMsIGl0IG11c3QgYmUgY2FsbGVkIGZyb20gZWxzZXdoZXJlLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxscyB0byBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YC4gVW5kZXJzdGFuZGluZyB0aG9zZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZGVmYXVsdCBmdXRleCBoYXNoIHRhYmxlIGlzIHNldCB1cCBhbmQgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkyNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjMzLjAzMzMwNjc4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTI4NzIzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZnV0ZXguaD03OT1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MS0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo4MjppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04My12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTg0LSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjg1OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKSB7IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTg2LXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gMDsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk5PXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDItfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaDoxMDM6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTA0LXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gMDsgfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0xOTY5PXN0YXRpYyB2b2lkIHJ2X3Rhc2tfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5rZXJuZWwvZm9yay5jLTE5NzYtXFxua2VybmVsL2ZvcmsuYzoxOTc3OnN0YXRpYyBib29sIG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHU2NCBjbG9uZV9mbGFncylcXG5rZXJuZWwvZm9yay5jLTE5Nzgte1xcbi0tXFxua2VybmVsL2ZvcmsuYz0xOTk0PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI0MTAtXFxua2VybmVsL2ZvcmsuYzoyNDExOlxcdGlmIChuZWVkX2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdChjbG9uZV9mbGFncykpIHtcXG5rZXJuZWwvZm9yay5jOjI0MTI6XFx0XFx0cmV0dmFsID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KCk7XFxua2VybmVsL2ZvcmsuYy0yNDEzLVxcdFxcdGlmIChyZXR2YWwpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNTozNC42MTI1OTk3MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzMTMwMzQ5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1dGV4IEhhc2ggU3luY2hyb25pemF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBob25lcyBpbiBvbiBhIGNvdXBsZSBvZiBrZXkgdGhpbmdzLiAgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgZ2V0cyBjYWxsZWQgZHVyaW5nIGBjb3B5X3Byb2Nlc3NgLCB3aGljaCBpcyBmb3JrL2Nsb25lLiBHb29kIGZ1enppbmcgdGFyZ2V0LiBBbmQgYGZ1dGV4X2hhc2hfcHJjdGxgLCB3ZWxsLCB0aGF0J3MgY2FsbGVkIHZpYSBgcHJjdGxgLiBBbm90aGVyIGV4Y2VsbGVudCBzeW1ib2wgdG8gZm9jdXMgb24uIEJvdGggb2YgdGhlc2UgYXJlIGVudHJ5IHBvaW50cyBhbmQgcmVwcmVzZW50IGNyaXRpY2FsIHBvaW50cyBpbiB0aGUgc3lzdGVtIHdoZXJlIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBmdXRleCBoYXNoIGlzIGJlaGF2aW5nIGNvcnJlY3RseS5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBjb2RlIGNoYW5nZXMuICBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIChSZWFkLUNvcHktVXBkYXRlKSBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuIFRoaXMgaXMgYSBiaWcgZGVhbCEgUkNVIGlzIGFsbCBhYm91dCBsb2NrLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBhbmQgcmVxdWlyZXMgY2FyZWZ1bCBtZW1vcnkgYmFycmllciBtYW5hZ2VtZW50IHRvIGVuc3VyZSBkYXRhIHZpc2liaWxpdHkuICBUaGUgYGd1YXJkKHJjdSkoKTtgIHN1Z2dlc3RzIHdlIGFyZSBkZWFsaW5nIHdpdGggcmN1IGNyaXRpY2FsIHNlY3Rpb24uIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYXJlIGJlaW5nIGludHJvZHVjZWQgZm9yIGBoYXNoX25ld2AsIHdoaWNoIGlzIGEgc3Ryb25nIGluZGljYXRpb24gd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2Vzcy4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSBpbiB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljLiAgSSBzZWUgYSB1c2Ugb2YgYHNtcF9ybWIoKWAuIFRoYXQncyBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkncmUgcmVhbGx5IHRoaW5raW5nIGFib3V0IG1lbW9yeSBvcmRlcmluZy5cblxuTG9va2luZyBjbG9zZXIsIHRoZSBjb21taXQgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uLiBJdCByZXBsYWNlcyB0aGUgbXV0ZXggKGBtbXBoLVx1MDAzZWxvY2tgKSB3aXRoIFJDVSBhbmQgYWRkcyBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgLCBgUkVBRF9PTkNFYCwgYW5kIGBXUklURV9PTkNFYCkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHVwZGF0ZWQgdmFsdWUgb2YgYGhhc2hfbmV3YCBpcyB2aXNpYmxlIHRvIGFsbCByZWFkZXJzLCBhbmQgdGhhdCB0aGUgb3JkZXIgaXMgcHJlc2VydmVkLCBzbyBubyBzdGFsZSB2YWx1ZXMgYXJlIGNhY2hlZC4gIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlIGhhbmRsZXMgc3luY2hyb25pemF0aW9uLiBJdCdzIG1vdmluZyBmcm9tIGEgbW9yZSB0cmFkaXRpb25hbCBsb2NraW5nIG1lY2hhbmlzbSB0byBhIGxvY2stZnJlZSBhcHByb2FjaC4gR2l2ZW4gdGhpcyBpcyBhIGNvcmUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSwgSSBjYW4gYWxyZWFkeSB0ZWxsIHRoYXQgdGhpcyBpcyBnb2luZyB0byBiZSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdG8gZm9jdXMgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcyBwcmltZSB0YXJnZXQgZnV6emluZyBzeW1ib2xzLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIHRhcmdldHMgYXJlIGVuYWJsZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYEZVVEVYYCBhbmQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgYXJlIGVuYWJsZWQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbkknbGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJ1dCBpdCBzZWVtcyBgRlVURVhfUFJJVkFURV9IQVNIYCBpc24ndCB1c2VyLXNlbGVjdGFibGUuIEl0J3MgbGlrZWx5IGVuYWJsZWQgYXV0b21hdGljYWxseSBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIEhvd2V2ZXIsIGl0J3Mgc3RpbGwgZ29vZCB0byBkb2N1bWVudCBhbmQgZW5zdXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50J3MgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIEJ1dCwgaW4gYW55IGNhc2UsIGBGVVRFWGAgaXMgdXNlciBzZWxlY3RhYmxlIGFuZCBzaG91bGQgYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjQ1LjkyNTYzNzQ1M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5Mjg2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZVVEVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTgyNz1jb25maWcgQkFTRV9TTUFMTFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4MzMtXFxuaW5pdC9LY29uZmlnOjE4MzQ6Y29uZmlnIEZVVEVYXFxuaW5pdC9LY29uZmlnLTE4MzUtXFx0Ym9vbCBcXFwiRW5hYmxlIGZ1dGV4IHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDMtXFxuaW5pdC9LY29uZmlnOjE4NDQ6Y29uZmlnIEZVVEVYX1BJXFxuaW5pdC9LY29uZmlnLTE4NDUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDgtXFxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbmluaXQvS2NvbmZpZy0xODUwLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xODUzLVxcbmluaXQvS2NvbmZpZzoxODU0OmNvbmZpZyBGVVRFWF9NUE9MXFxuaW5pdC9LY29uZmlnLTE4NTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnPTE4NTk9Y29uZmlnIEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcbi0tXFxuaW5pdC9LY29uZmlnLTE4NjEtXFxuaW5pdC9LY29uZmlnOjE4NjI6Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG5pbml0L0tjb25maWctMTg2My1cXHRkZWZfYm9vbCBGVVRFWCBcXHUwMDI2XFx1MDAyNiBIQVZFX0dFTkVSSUNfVkRTTyBcXHUwMDI2XFx1MDAyNiBHRU5FUklDX0lSUV9FTlRSWSBcXHUwMDI2XFx1MDAyNiBSU0VRIFxcdTAwMjZcXHUwMDI2IEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNTo0NS45Njk1NzAzMThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0ODE2NTg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGVVRFWCBDb25maWd1cmF0aW9uIGFuZCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBGVVRFWGAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgcHJldHR5IGZ1bmRhbWVudGFsIG9uZSBhdCB0aGF0LiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoYXQsIGFsb25nIHdpdGggYEZVVEVYX1BSSVZBVEVfSEFTSGAuIFRoZXNlIGFyZSBrZXkgYXNwZWN0cyBvZiB0aGUgc3lzdGVtLlxuXG5Ob3csIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLiBJIHJlY2FsbCBpdCBiZWluZyByZWxhdGVkIHRvIHRoZSBoYXNoaW5nIG1lY2hhbmlzbXMuIFJpZ2h0LCBsZXQgbWUgc2VlLi4uIEl0J3MgY2FsbGVkIGZyb20gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBBaCwgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YC4gUGVyZmVjdC4gVGhhdCBtYWtlcyBpdCBjbGVhciAtIHRob3NlIHR3bywgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCwgYXJlIHRoZSBzeW1ib2xzIEkgcmVhbGx5IG5lZWQgdG8gZm9jdXMgb24uIFRoZXkgcmVwcmVzZW50IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBhbmQgdGhlIGtleSBhc3BlY3RzIHRvIGV4YW1pbmUuXG5cblJpZ2h0LCBJJ3ZlIGdvdCBhIGNsZWFyIHBpY3R1cmUsIGxldCBtZSBsb2cgdGhpcy4gSSdsbCBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODg4LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNTo1MC45MTc3MzkzNTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQ1MDk0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIixcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGFkZGluZyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gYGhhc2hfbmV3YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBwcmN0bGAgc3lzY2FsbCAoYFBSX0ZVVEVYX0hBU0hgKSBhbmQgcHJvY2VzcyBjbG9uaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCIsXG4gICAgXCJGVVRFWF9QUklWQVRFX0hBU0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gICAgXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBhZGRpbmcgYFJFQURfT05DRWAvYFdSSVRFX09OQ0VgIHRvIGBoYXNoX25ld2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gdGhhdCBpcyByZWFjaGFibGUgdmlhIHRoZSBgcHJjdGxgIHN5c2NhbGwgKGBQUl9GVVRFWF9IQVNIYCkgYW5kIHByb2Nlc3MgY2xvbmluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6NTAuOTk3MTk5NjA4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzExODI4Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6NTAuOTk3ODIyOTk4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgzMTEyMDExODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIGFkZGluZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBhbmQgYSBtZW1vcnkgYmFycmllciAoc21wX3JtYikgZm9yIGFjY2Vzc2luZyBgbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZS9OVUxMLWRlcmVmIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0NTQU4gYW5kIEtBU0FOIHJlc3BlY3RpdmVseS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNGRmZWU4MmQwYmIzNTZlMjg0ZjAyODVkNDA0ZTk0MTI5ODJjMDAxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDQ6MjQ6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpcbiBcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cdTAwM2VoYXNoLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKSk7XG4gXHRpZiAoZnBoKSB7XG4gXHRcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xuLVx0XHRcdG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0V1JJVEVfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzg2LDEyICsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuK1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuK1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuK1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4rXHQgKi9cbitcdHNtcF9ybWIoKTtcbitcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4rXHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFxuIFx0XHRpZiAoZnBoKSB7XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIWN1ci1cdTAwM2VoYXNoX21hc2spIHtcbkBAIC0xODg5LDcgKzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0XHRcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZnJlZSA9IGZwaDtcbi1cdFx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3O1xuK1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjUwLjk5NzgyNzQyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzExMTc2MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV0ZXggQ29uY3VycmVuY3kgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG1tcGgtXHUwMDNlaGFzaF9uZXdgICh3aGljaCBpcywgaW4gZXNzZW5jZSwgYG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3YCkuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBhcm91bmQgYXNzaWdubWVudHMgYW5kIHJlYWRzIG9mIHRoaXMgdmFyaWFibGUuIFRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyBjb25jdXJyZW5jeSBidWcgZml4IHRvIG1lOyBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgYWRkcmVzc2luZyBhIGRhdGEgcmFjZSBvciBhIG1pc3NpbmcgbWVtb3J5IGJhcnJpZXIgaXNzdWUgd2l0aGluIHRoZSBmdXRleCBpbXBsZW1lbnRhdGlvbi4gV2UncmUgZXhwbGljaXRseSBvcmRlcmluZyBtZW1vcnkgb3BlcmF0aW9ucyB0byBlbnN1cmUgY29uc2lzdGVudCB2aXNpYmlsaXR5IGFjcm9zcyBkaWZmZXJlbnQgQ1BVcy5cblxuTG9va2luZyBjbG9zZXIsIHRoZSBgZnV0ZXhfcGl2b3RfcGVuZGluZygpYCBmdW5jdGlvbiBhbHNvIG5vdyBlbXBsb3lzIFJDVSAoUmVhZC1Db3B5IFVwZGF0ZSkgaW5zdGVhZCBvZiBhIG11dGV4LCBhbmQgY3J1Y2lhbGx5LCBhbiBgc21wX3JtYigpYCAoU3lzdGVtIE1lbW9yeSBCYXJyaWVyIFJlYWQpIGhhcyBiZWVuIGFkZGVkLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGZvY3VzIG9uIG1lbW9yeSBvcmRlcmluZy4gVGhlIGBzbXBfcm1iKClgIGluIHBhcnRpY3VsYXIgaXMgY3JpdGljYWw7IGl0IGVuc3VyZXMgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSBhbHNvIHNlZSB0aGUgbnVsbGluZyBvZiB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLCB3aGljaCBpcyBjcnVjaWFsIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIGR1cmluZyB0aGUgcGl2b3Qgb3BlcmF0aW9uLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFzcGVjdCwgSSBkb24ndCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IHdvdWxkIHRyaWdnZXIgS01TQU4uIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbnMsIGl0J3Mgbm90IGNoYW5naW5nIHRoZSBzaXplIG9mIGFueSBzdHJ1Y3R1cmVzIGluIHdheXMgdGhhdCB3b3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgaXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIHBhdGNoIGlzIHB1cmVseSBhYm91dCBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbi4gQW55IGlzc3VlcyB0aGlzIHBhdGNoIHdvdWxkIGFkZHJlc3MgYXJlIG1lbW9yeSBvcmRlcmluZyBidWdzLCBhbmQgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGlzIHBhdGNoIGlzIGFib3V0IGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBiYXJyaWVycywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYyLCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjU5LjMwOTAwNjYxMloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIGBtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXdgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBkYXRhIHJhY2VzIG9yIHVzZS1hZnRlci1mcmVlL05VTEwtZGVyZWYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQ1NBTiBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIGFkZGluZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBhbmQgYSBtZW1vcnkgYmFycmllciAoc21wX3JtYikgZm9yIGFjY2Vzc2luZyBgbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZS9OVUxMLWRlcmVmIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0NTQU4gYW5kIEtBU0FOIHJlc3BlY3RpdmVseS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowc5shl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 04:23:18 +0000 UTC FinishedAt: 2026-08-13 04:26:00 +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": "e2e27cdc-c55d-45f2-ad21-1e3ab38221dc" }, "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIGBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ld2AuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGRhdGEgcmFjZXMgb3IgdXNlLWFmdGVyLWZyZWUvTlVMTC1kZXJlZiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtDU0FOIGFuZCBLQVNBTiByZXNwZWN0aXZlbHkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGFkZGluZyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gYGhhc2hfbmV3YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBwcmN0bGAgc3lzY2FsbCAoYFBSX0ZVVEVYX0hBU0hgKSBhbmQgcHJvY2VzcyBjbG9uaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTRkZmVlODJkMGJiMzU2ZTI4NGYwMjg1ZDQwNGU5NDEyOTgyYzAwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA0OjI0OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpcbiBcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cdTAwM2VoYXNoLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKSk7XG4gXHRpZiAoZnBoKSB7XG4gXHRcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xuLVx0XHRcdG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldywgbmV3KTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcbkBAIC0yMjQsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gXHRcdGZwaCA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuIFx0XHRpZiAoZnBoKSB7XG4tXHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2g7XG4gXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4mIzQzO1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4mIzQzO1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuJiM0MztcdCAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF9ybWIoKTtcbiYjNDM7XHRpZiAoIVJFQURfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtXHUwMDNlaGFzaCk7XG4gXHRyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTtcbiB9XG4gXG5AQCAtMTg3OSw3ICYjNDM7MTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRjdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsXG4gXHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spKTtcbiBcdFx0bmV3ID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4tXHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbiYjNDM7XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFxuIFx0XHRpZiAoZnBoKSB7XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIWN1ci1cdTAwM2VoYXNoX21hc2spIHtcbkBAIC0xODg5LDcgJiM0MzsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gXHRcdFx0XHQgKiB0aGUgc2Vjb25kIG9uZSByZXR1cm5zIGhlcmUuXG4gXHRcdFx0XHQgKi9cbiBcdFx0XHRcdGZyZWUgPSBmcGg7XG4tXHRcdFx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldztcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIW5ldykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7LAogICAgJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBhZGRpbmcgYFJFQURfT05DRWAvYFdSSVRFX09OQ0VgIHRvIGBoYXNoX25ld2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gdGhhdCBpcyByZWFjaGFibGUgdmlhIHRoZSBgcHJjdGxgIHN5c2NhbGwgKGBQUl9GVVRFWF9IQVNIYCkgYW5kIHByb2Nlc3MgY2xvbmluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE0ZGZlZTgyZDBiYjM1NmUyODRmMDI4NWQ0MDRlOTQxMjk4MmMwMDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwNDoyNDo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L2NvcmUuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKgogCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC0mZ3Q7aGFzaCwgbG9ja2RlcF9pc19oZWxkKCZhbXA7bW1waC0mZ3Q7bG9jaykpOwogCWlmIChmcGgpIHsKIAkJaWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7Ci0JCQltbXBoLSZndDtoYXNoX25ldyA9IG5ldzsKJiM0MzsJCQlXUklURV9PTkNFKG1tcGgtJmd0O2hhc2hfbmV3LCBuZXcpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTIyNCw3ICYjNDM7MjI0LDcgQEAgc3RhdGljIHZvaWQgZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAogCQlmcGggPSBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXc7CiAJCWlmIChmcGgpIHsKLQkJCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7CiYjNDM7CQkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpOwogCQkJX19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpOwogCQl9CiAJfQpAQCAtMTc4NiwxMiAmIzQzOzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSAmYW1wO21tLSZndDtmdXRleC5waGFzaDsKIAlzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7CiAKLQlndWFyZChtdXRleCkoJmFtcDttbXBoLSZndDtsb2NrKTsKJiM0MzsJZ3VhcmQocmN1KSgpOwogCi0JaWYgKCFtbXBoLSZndDtoYXNoX25ldykKJiM0MzsJZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtJmd0O2hhc2gpOwomIzQzOwkvKgomIzQzOwkgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkCiYjNDM7CSAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW4KJiM0MzsJICogX19mdXRleF9waXZvdF9oYXNoKCkuCiYjNDM7CSAqLwomIzQzOwlzbXBfcm1iKCk7CiYjNDM7CWlmICghUkVBRF9PTkNFKG1tcGgtJmd0O2hhc2hfbmV3KSkKIAkJcmV0dXJuIHRydWU7CiAKLQlmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtJmd0O2hhc2gpOwogCXJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpOwogfQogCkBAIC0xODc5LDcgJiM0MzsxODg1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCWN1ciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2gsCiAJCQkJCQlsb2NrZGVwX2lzX2hlbGQoJmFtcDttbS0mZ3Q7ZnV0ZXgucGhhc2gubG9jaykpOwogCQluZXcgPSBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXc7Ci0JCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7CiYjNDM7CQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAKIAkJaWYgKGZwaCkgewogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFjdXItJmd0O2hhc2hfbWFzaykgewpAQCAtMTg4OSw3ICYjNDM7MTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKQogCQkJCSAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS4KIAkJCQkgKi8KIAkJCQlmcmVlID0gZnBoOwotCQkJCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldzsKJiM0MzsJCQkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7CiAJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCX0KIAkJCWlmIChjdXIgJmFtcDsmYW1wOyAhbmV3KSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRnV0ZXggUHJpdmF0ZSBIYXNoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBzeW5jaHJvbml6YXRpb24uIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIHN3YXBwaW5nIG91dCBkaXJlY3Qgd3JpdGVzIHRvIGBtbXBoLSZndDtoYXNoX25ld2AgYW5kIGBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXdgIHdpdGggYFdSSVRFX09OQ0VgLiBTbWFydCBtb3ZlLiBXZSYjMzk7cmUgY2xlYXJseSBkZWFsaW5nIHdpdGggcG90ZW50aWFsIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgaGVyZSwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBnaXZlbiB0aGUgbmF0dXJlIG9mIGZ1dGV4ZXMgYW5kIHNoYXJlZCBtZW1vcnkuIFJlcGxhY2luZyB0aGF0IGBndWFyZChtdXRleClgIGNhbGwgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIHdpdGggYGd1YXJkKHJjdSkoKWAgYW5kIGFkZGluZyBgc21wX3JtYigpYCBpcyBhbm90aGVyIHJlZCBmbGFnIG9mIGNvbmN1cnJlbnQgYWNjZXNzIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBoYW5kbGluZy4gQW5kIHRoZW4gdXNpbmcgYFJFQURfT05DRWDigKYgeWVwLCB0aGlzIHBhdGNoIGlzIGNsZWFybHkgYWJvdXQgZW5zdXJpbmcgdGhlIGNvcnJlY3QgdmlzaWJpbGl0eSBvZiB0aGVzZSBoYXNoIHRhYmxlIHVwZGF0ZXMgYWNyb3NzIGRpZmZlcmVudCBDUFVzLiBJdCYjMzk7cyBhbGwgYWJvdXQgbWVtb3J5IGJhcnJpZXJzIGFuZCBkYXRhIGNvbnNpc3RlbmN5LgoKTm93LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIGNvbnRleHQuIFdhaXQsICpzdGF0aWMqIGZ1bmN0aW9uPyBBbHJpZ2h0LCB0aGF0IG1lYW5zIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgbG9jYWxpemVkIHRvIHRoZSBzYW1lIHNvdXJjZSBmaWxlLiBTbywgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBpcyAqYWN0dWFsbHkqIGJlaW5nIGNhbGxlZCB3aXRoaW4gYGNvcmUuY2AgdG8gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgdGhlIG92ZXJhbGwgZnV0ZXggaGFzaCBtYW5hZ2VtZW50IGxvZ2ljLiBMZXQmIzM5O3MgdHJhY2UgdGhhdCBmdW5jdGlvbiBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X3Bpdm90X3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTc3Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3ODQ6c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3Ny1hZ2Fpbjpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg3ODpcdFx0d2FpdF92YXJfZXZlbnQobW0sIGZ1dGV4X3Bpdm90X3BlbmRpbmcobW0pKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDIxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBGdXRleCBIYXNoIEFsbG9jYXRpb24qKgoKT2theSwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGp1c3QgZ290IGNhbGxlZC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgY2FsbCBvcmlnaW5hdGVkLiBHaXZlbiB0aGUgbmF0dXJlIG9mIGZ1dGV4ZXMsIGl0JiMzOTtzIGxpa2VseSBsaW5rZWQgdG8gcHJvY2VzcyBzeW5jaHJvbml6YXRpb24sIHVzZXItc3BhY2UgbG9ja3MsIG9yIGtlcm5lbC1zcGFjZSB3YWl0IHF1ZXVlcy4gVGhlIGdvYWwgaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uIGNhbGwgcGF0aCB0byB1bmRlcnN0YW5kIHRoZSBoaWdoZXItbGV2ZWwgY29udGV4dCwgYW5kIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBzY2VuYXJpbyB0aGF0IHRyaWdnZXJlZCB0aGUgYWxsb2NhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2Ugc29tZSBkZWJ1Z2dpbmcgdG9vbHMsIGxpa2VseSBgcGVyZmAsIGBmdHJhY2VgLCBvciBnb29kIG9sZCBgZ2RiYCwgdG8gc3RlcCB0aHJvdWdoIHRoZSBjYWxsIHN0YWNrIGFuZCBpZGVudGlmeSB0aGUgY2FsbGluZyBmdW5jdGlvbi4gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgYWxsb2NhdGlvbiBpcyBleHBlY3RlZCwgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBvciBpbmRpY2F0aXZlIG9mIGEgYnVnLCBsaWtlIGEgbWVtb3J5IGxlYWsgb3IgYW4gdW5leHBlY3RlZCBsb2NraW5nIHNjZW5hcmlvLiBNeSBtYWluIGZvY3VzIGF0IHRoaXMgcG9pbnQgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDt3aGVuJiMzNDsgb2YgdGhpcyBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cdCAqXHRcdFx0XHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlx0ICpcdFx0XHRcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVx0ICpcdFx0XHRcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MS0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcdFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgdGhvdWdoIGl0IHdlcmUgbXkgdHJhaW4gb2YgdGhvdWdodDoKCioqRGl2aW5nIGludG8gYGZ1dGV4X2hhc2hfcHJjdGxgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY2FsbCB0byBgZnV0ZXhfaGFzaF9wcmN0bGAgc3RlbW1pbmcgZnJvbSB0aGUgYHByY3RsYCBzeXN0ZW0gY2FsbC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0IGBmdXRleF9oYXNoX3ByY3RsYCBpcyBhY3R1YWxseSBkb2luZyB3aXRoaW4gdGhlIGBwcmN0bGAgY29udGV4dC4gVGhlIGBwcmN0bGAgc3lzdGVtIGNhbGwgaXMgYSBzd2lzcyBhcm15IGtuaWZlLCBoYW5kbGluZyBhIHdpZGUgcmFuZ2Ugb2YgcHJvY2Vzcy1sZXZlbCBvcGVyYXRpb25zLiBVbmRlcnN0YW5kaW5nIGhvdyBgZnV0ZXhfaGFzaF9wcmN0bGAgdGllcyBpbnRvIHRoYXQgaXMgY3J1Y2lhbC4gSSBzdXNwZWN0IGl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gc29tZSBhc3BlY3Qgb2YgZnV0ZXggbWFuYWdlbWVudCDigJMgcGVyaGFwcyBpbml0aWFsaXphdGlvbiwgbWFuaXB1bGF0aW9uIG9mIGZ1dGV4IGRhdGEgc3RydWN0dXJlcywgb3IgZXZlbiBzZWN1cml0eS1yZWxhdGVkIGNoZWNrcyBhcm91bmQgZnV0ZXggb3BlcmF0aW9ucy4gV2UmIzM5O2xsIGhhdmUgdG8gZGlnIGRlZXBlciB0byBjb25maXJtLCB0aG91Z2guIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnV0ZXguaD03Nz1sb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtNzgtXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6Nzk6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODAtXG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk0PXN0YXRpYyBpbmxpbmUgbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC05OC19XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6OTk6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMC17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XG4tLVxua2VybmVsL3N5cy5jPTI1MzQ9U1lTQ0FMTF9ERUZJTkU1KHByY3RsLCBpbnQsIG9wdGlvbiwgdW5zaWduZWQgbG9uZywgYXJnMiwgdW5zaWduZWQgbG9uZywgYXJnMyxcbi0tXG5rZXJuZWwvc3lzLmMtMjg4NC1cdGNhc2UgUFJfRlVURVhfSEFTSDpcbmtlcm5lbC9zeXMuYzoyODg1Olx0XHRlcnJvciA9IGZ1dGV4X2hhc2hfcHJjdGwoYXJnMiwgYXJnMywgYXJnNCk7XG5rZXJuZWwvc3lzLmMtMjg4Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAyMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZ1dGV4IFN5bmNocm9uaXphdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIG5ldyBgZnV0ZXhfaGFzaF9wcmN0bGAgZnVuY3Rpb24gaXMgbm93IGV4cG9zZWQgdmlhIHRoZSBgcHJjdGxgIHN5c2NhbGwsIHVzaW5nIGBQUl9GVVRFWF9IQVNIYC4gSW50ZXJlc3RpbmcuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgc29tZXRoaW5nIGNyaXRpY2FsIHRvIGludmVzdGlnYXRlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBmdW5kYW1lbnRhbCBmdXRleCBmdW5jdGlvbmFsaXR5IGhlcmUgLSBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24uIEFic29sdXRlbHkgd29ydGggYSBkZWVwIGZ1enppbmcgY2FtcGFpZ24uCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExvb2tzIGxpa2UgYENPTkZJR19GVVRFWGAgaXMgYSBnaXZlbiwgYnV0IGBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIYCBpcyB0aGUga2V5LiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGVuYWJsZWQuIFRpbWUgdG8gZ28gZGlnIGludG8gdGhlIGNvbmZpZyBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTgwLVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgxOiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODItaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaD04Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODQ6I2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NS1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTg2PXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjg3OiNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTg4LVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaD0xNTI9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2ZpeHVwX3JvYnVzdF91bmxvY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xNTUtXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6MTU2OiNpZiBkZWZpbmVkKENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0gpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1JPQlVTVF9VTkxPQ0spXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTU3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4tLVxuaW5jbHVkZS9saW51eC9mdXRleF90eXBlcy5oPTIzPXN0cnVjdCBmdXRleF9zY2hlZF9kYXRhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmgtMzMtXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmg6MzQ6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmluY2x1ZGUvbGludXgvZnV0ZXhfdHlwZXMuaC0zNS0vKipcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MTQyPWV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKik7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MTQzOiNpZiBkZWZpbmVkKENPTkZJR19NTVUpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSClcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNDQtLyogc2FtZSBhcyBhYm92ZSBidXQgcGVyZm9ybXMgdGhlIHNsb3cgcGF0aCBmcm9tIHRoZSBhc3luYyBjb250ZXh0LiBDYW5cbi0tXG5pbml0L0tjb25maWc9MTg0ND1jb25maWcgRlVURVhfUElcbi0tXG5pbml0L0tjb25maWctMTg0OC1cbmluaXQvS2NvbmZpZzoxODQ5OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODUwLVx0Ym9vbFxuLS1cbmtlcm5lbC9mb3JrLmM9MTIxMj1FWFBPUlRfU1lNQk9MX0dQTChtbXB1dCk7XG5rZXJuZWwvZm9yay5jLTEyMTMtXG5rZXJuZWwvZm9yay5jOjEyMTQ6I2lmIGRlZmluZWQoQ09ORklHX01NVSkgfHwgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKVxua2VybmVsL2ZvcmsuYy0xMjE1LXN0YXRpYyB2b2lkIG1tcHV0X2FzeW5jX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTEzMD1fX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTMxLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzI6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTMzLXN0YXRpYyBib29sIGZ1dGV4X3JlZl9nZXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTI2MD1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc1LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzY6I2Vsc2UgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc3LVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yNzg9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4Mi1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjgzOiNlbmRpZiAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4NC1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTM2OD1fX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMzcyLVxua2VybmVsL2Z1dGV4L2NvcmUuYzozNzM6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzc0LVx0aWYgKG5vZGUgPT0gRlVURVhfTk9fTk9ERSBcdTAwMjZcdTAwMjYgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSkge1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTU2Nz1zdGF0aWMgdm9pZCBmdXRleF9oYXNoX2J1Y2tldF9pbml0KHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqZmhiKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU3NS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTU3NjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTc3LVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgwLX1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4MTojZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgyLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTg0PXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9oYXNoX2luaXRfbW0oc3RydWN0IGZ1dGV4X21tX2RhdGEgKmZkKSB7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4NTojZW5kaWYgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4Ni1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTM9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3JvYnVzdF91bmxvY2tfaW5pdF9tbShzdHJ1Y3QgZnV0ZXhfbW1fZGF0YSAqZmQpIHsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAxNS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAxNjojaWYgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKSB8fCBkZWZpbmVkKENPTkZJR19GVVRFWF9ST0JVU1RfVU5MT0NLKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDE3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNDE9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYge1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0NS1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0NjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQ3LWV4dGVybiBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjQ4PWV4dGVybiB2b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0OS1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1MDojZWxzZSAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjUxLXN0YXRpYyBpbmxpbmUgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiBOVUxMOyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIHNvbWV0aGluZyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiwgaXRzIHBvc3NpYmxlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBoZWxwIHRleHQgdGhhdCBleHBsYWlucyBpdHMgcHVycG9zZS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIGludmVzdGlnYXRlIHRoZXNlIGtpbmRzIG9mIGNvbXBpbGUtdGltZSBvcHRpb25zLiBMZXQgbWUgZ2V0IHRoYXQgS2NvbmZpZyBmaWxlIG9wZW5lZCBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTg0ND1jb25maWcgRlVURVhfUElcbi0tXG5pbml0L0tjb25maWctMTg0OC1cbmluaXQvS2NvbmZpZzoxODQ5OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODUwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDE1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBzZWxlY3RzIGBGVVRFWF9QUklWQVRFX0hBU0hgOgoKKipEaXNzZWN0aW5nIHRoZSBGVVRFWF9QUklWQVRFX0hBU0ggU2VsZWN0b3IqKgoKQWxyaWdodCwgc28gYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgdGhlIGtleSBwaWVjZSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBwYXJ0aWN1bGFyIGZsYWcgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBzaW5jZSBJJiMzOTttIHRyeWluZyB0byBzZWUgd2hhdCBpdCAqc2VsZWN0cyouIFdoYXQgZG9lcyB0aGlzIG1lYW4gaW4gdGhlIGNvbnRleHQgb2YgYGZ1dGV4YD8gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiAmIzM0O3ByaXZhdGUmIzM0OyB2ZXJzdXMgJiMzNDtzaGFyZWQmIzM0OyBhbmQgdGhlIHVzZSBvZiBhIGhhc2guIFRoaXMgbGlrZWx5IHBvaW50cyB0b3dhcmQgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBvcHRpbWl6YXRpb24uIElzIGl0IHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBmdXRleGVzPyBJcyBpdCBhIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBmdXRleGVzIGFyZSBpbXBsZW1lbnRlZCBmb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcywgb3Igd2l0aCBzcGVjaWZpYyBwcm9jZXNzIG1lbW9yeSBjb25maWd1cmF0aW9ucz8KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgZGlmZmVyZW50IHNjZW5hcmlvczoKCiogICAqKktlcm5lbCBpbXBsZW1lbnRhdGlvbjoqKiBJcyB0aGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGUgZnV0ZXggd2FpdCBxdWV1ZXM/IFBlcmhhcHMgdGhlIGhhc2ggaXMgdXNlZCBmb3IgbG9va3VwIGVmZmljaWVuY3kgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiBEb2VzIGBGVVRFWF9QUklWQVRFX0hBU0hgIHN1Z2dlc3Qgc29tZXRoaW5nIGFib3V0IGhvdyB0aGUga2VybmVsIG9yZ2FuaXplcyBmdXRleGVzIGludGVybmFsbHk/CiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIFRoZSAmIzM0O3ByaXZhdGUmIzM0OyBwYXJ0IG1ha2VzIG1lIHRoaW5rIGFib3V0IHByb2Nlc3MgYWRkcmVzcyBzcGFjZS4gSXMgdGhpcyBmbGFnIGluZGljYXRpbmcgYSBmdXRleCB0aGF0JiMzOTtzIG9ubHkgdmFsaWQgd2l0aGluIHRoZSBwcm9jZXNzJiMzOTtzIG93biBtZW1vcnksIGFuZCB0aGUgaGFzaCBpcyByZWxldmFudCB0byBsb2NhdGluZyBpdCB3aXRoaW4gdGhhdCBhZGRyZXNzIHNwYWNlPyBEb2VzIHRoaXMgc3VnZ2VzdCBhIGRpZmZlcmVudCBtZW1vcnkgbW9kZWwgZm9yIGZ1dGV4ZXM/IFBlcmhhcHMgc3BlY2lmaWMgdG8gdXNlci1zcGFjZSBpbXBsZW1lbnRhdGlvbnM/CiogICAqKlBlcmZvcm1hbmNlIENvbnNpZGVyYXRpb25zOioqIFRoZSBoYXNoIGl0c2VsZiBpcyBtYWtpbmcgbWUgdGhpbmsgb2YgYSB0cmFkZS1vZmYuIElzIHRoaXMgYWJvdXQgcmVkdWNpbmcgdGhlIG92ZXJoZWFkIG9mIHNoYXJlZCBmdXRleGVzPyBNYXliZSBpdCYjMzk7cyBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBhIGxhcmdlIG51bWJlciBvZiBmdXRleGVzPwoKSSBuZWVkIHRvIGRlbHZlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBrZXJuZWwgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYGZ1dGV4YCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciB3aGVyZSB0aGlzIGBGVVRFWF9QUklWQVRFX0hBU0hgIGZsYWcgaXMgZGVmaW5lZCBhbmQgaG93IGl0IGlzIGFjdHVhbGx5IHVzZWQuIEkgd2lsbCBsaWtlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZnV0ZXggc3RydWN0dXJlIGlzIHVzZWQgaW4gdmFyaW91cyBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgYXJjaGl0ZWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGlmZmVyZW50IGNvZGUgcGF0aHMgYW5kIGRhdGEgc3RydWN0dXJlcyB1c2VkIHdvdWxkIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZS4gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IHN5c3RlbSBjYWxsIGhhbmRsaW5nIGFuZCBhbnkgYXNzb2NpYXRlZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3B0aW1pemF0aW9ucy4gSSBuZWVkIHRvIGRpc2NvdmVyIGV4YWN0bHkgd2hhdCBkYXRhIHN0cnVjdHVyZSBvciBjb2RlIHBhdGggaXMgYmVpbmcgc2VsZWN0ZWQgYnkgdGhlIGZsYWcsIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRlVURVhfUFJJVkFURV9IQVNIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlnIGZvciBGVVRFWF9QUklWQVRFX0hBU0gqKgoKT2theSwgc28gYEZVVEVYX1BSSVZBVEVfSEFTSGAuLi4gd2FpdCBhIHNlY29uZC4gVGhhdCYjMzk7cyBqdXN0IGEgYm9vbGVhbiwgbm8gcHJvbXB0aW5nLCBubyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gY29uc2lkZXI/IFRoYXQmIzM5O3MgdW51c3VhbC4gSXQgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIHRvIHNlZSB0aGUgY29udGV4dC4gTGV0JiMzOTtzIG5hdmlnYXRlIHRvIGBpbml0L0tjb25maWdgLCBhbmQgZm9jdXMgb24gYXJvdW5kIGxpbmUgMTg0OS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgZnV0ZXggaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoYXQgc2VjdGlvbiB0byBnZXQgdGhlIHByb3BlciBjb250ZXh0LiBJIGV4cGVjdCBzb21lIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcyBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0NTpcdFx0Ym9vbFxuMTg0NjpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgUlRfTVVURVhFU1xuMTg0NzpcdFx0ZGVmYXVsdCB5XG4xODQ4Olx0XG4xODQ5Olx0Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxuMTg1MDpcdFx0Ym9vbFxuMTg1MTpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgIUJBU0VfU01BTEwgXHUwMDI2XHUwMDI2IE1NVVxuMTg1MjpcdFx0ZGVmYXVsdCB5XG4xODUzOlx0XG4xODU0Olx0Y29uZmlnIEZVVEVYX01QT0xcbjE4NTU6XHRcdGJvb2xcbjE4NTY6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IE5VTUFcbjE4NTc6XHRcdGRlZmF1bHQgeVxuMTg1ODpcdFxuMTg1OTpcdGNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbjE4NjA6XHRcdGJvb2xcbjE4NjE6XHRcbjE4NjI6XHRjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xuMTg2MzpcdFx0ZGVmX2Jvb2wgRlVURVggXHUwMDI2XHUwMDI2IEhBVkVfR0VORVJJQ19WRFNPIFx1MDAyNlx1MDAyNiBHRU5FUklDX0lSUV9FTlRSWSBcdTAwMjZcdTAwMjYgUlNFUSBcdTAwMjZcdTAwMjYgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4xODY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXRleCBSYWNlIENvbmRpdGlvbiBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIG9mIHRoZSBmaXguIEkgc2VlIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igc2V0cyBhICYjMzk7eSYjMzk7IGlmIGBGVVRFWGAsIGJ1dCBub3QgYEJBU0VfU01BTExgIGFuZCB0aGVyZSBpcyBgTU1VYCBwcmVzZW50LiBBbHJpZ2h0LCBgRlVURVhgIGxvb2tzIHRvIGJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3Rpb24gaXMuIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBjYWxsZWQgYnkgYGZ1dGV4X2hhc2hfcHJjdGxgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgcHJjdGxgIHN5c2NhbGwuIFNvLCB0aGlzIGZpeCB0YXJnZXRzIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRob3NlIGZ1bmN0aW9ucyDigJMgbmFtZWx5LCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4KCmBmdXRleF9oYXNoX3ByY3RsYCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHNpbmNlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBpcyBzdGF0aWMuIFdhaXQgYSBtaW51dGUuLi4gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGFsc28gc3RhdGljLiBPa2F5LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgZnV0ZXhfaGFzaF9wcmN0bGAuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBga2VybmVsL2Z1dGV4L2NvcmUuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIFN0YXRpYyBBbGxvY2F0aW9uIGluIEZ1dGV4IEhhc2hpbmcqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQgbWUganVzdCBjb25maXJtIHNvbWV0aGluZyBhYm91dCB0aGlzIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0JiMzOTtzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGUgd2hvbGUgcG9pbnQgb2Ygc3RhdGljIGFsbG9jYXRpb24gaGVyZSBpcyBhYm91dCBsaW1pdGluZyB0aGUgc2NvcGUgYW5kIGVuc3VyaW5nIHRoYXQgaXQgaXNuJiMzOTt0IGFjY2Vzc2libGUgb3V0c2lkZSBpdHMgaW50ZW5kZWQgbW9kdWxlIG9yIHRyYW5zbGF0aW9uIHVuaXQuIElmIHRoaXMgaXNuJiMzOTt0IHN0YXRpYywgdGhlbiBpdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBwcmV0dHkgbmFzdHkgYW5kIHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzLCBhbmQgSSYjMzk7ZCBuZWVkIHRvIGdvIGJhY2sgdGhyb3VnaCB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgZXh0ZXJuYWxseS4gV2UgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCBpdOKAmXMgbm90IGxlYWtpbmcgb3V0IGluIGEgd2F5IHRoYXQgd2UgZGlkbiYjMzk7dCBpbnRlbmQuIEkgY2FuJiMzOTt0IGJlIHN1cmUsIHdpdGhvdXQgYSBwcm9wZXIgaW5zcGVjdGlvbiBvZiB0aGUgY29kZSwgYnV0IEkgaG9wZSB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlIGlzIHN1aXRhYmx5IGxpbWl0ZWQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeSBjb250cm9scy4gQSBsaXR0bGUgY2hlY2sgbm93IHdpbGwgc2F2ZSBhIGhlYWRhY2hlIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cdCAqXHRcdFx0XHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlx0ICpcdFx0XHRcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVx0ICpcdFx0XHRcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MS0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcdFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTI1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1dGV4LXJlbGF0ZWQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBoYXNoIHRhYmxlIGZvciBmdXRleGVzIGlzIG1hbmFnZWQuIEkgc2VlIHRoYXQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGRlZmluZWQgYXMgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgcHJvYmFibHkgZm9yIGluaXRpYWxpemF0aW9uIG9yIHNvbWUgbG93LWxldmVsIG9wZXJhdGlvbiBvbmx5IHVzZWQgd2l0aGluIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoYXQmIzM5O3MgYSBrZXkgZGlzdGluY3Rpb24uIFRoZW4sIEkgbm90aWNlIHRoYXQgYm90aCBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGFyZSBub24tc3RhdGljLiBUaGlzIG1lYW5zIHRoZXkgYXJlIGxpa2VseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgcGlxdWVzIG15IGludGVyZXN0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgYXJlIHVzZWQuIFNpbmNlIGl0JiMzOTtzIG5vdCBzdGF0aWMsIGl0IG11c3QgYmUgY2FsbGVkIGZyb20gZWxzZXdoZXJlLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxscyB0byBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YC4gVW5kZXJzdGFuZGluZyB0aG9zZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZGVmYXVsdCBmdXRleCBoYXNoIHRhYmxlIGlzIHNldCB1cCBhbmQgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnV0ZXguaD03OT1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODEtI2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo4MjppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTgzLXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NC0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xuaW5jbHVkZS9saW51eC9mdXRleC5oOjg1OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKSB7IHJldHVybiAwOyB9XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODYtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk5PXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAyLX1cbmluY2x1ZGUvbGludXgvZnV0ZXguaDoxMDM6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDQtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4tLVxua2VybmVsL2ZvcmsuYz0xOTY5PXN0YXRpYyB2b2lkIHJ2X3Rhc2tfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL2ZvcmsuYy0xOTc2LVxua2VybmVsL2ZvcmsuYzoxOTc3OnN0YXRpYyBib29sIG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHU2NCBjbG9uZV9mbGFncylcbmtlcm5lbC9mb3JrLmMtMTk3OC17XG4tLVxua2VybmVsL2ZvcmsuYz0xOTk0PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4tLVxua2VybmVsL2ZvcmsuYy0yNDEwLVxua2VybmVsL2ZvcmsuYzoyNDExOlx0aWYgKG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KGNsb25lX2ZsYWdzKSkge1xua2VybmVsL2ZvcmsuYzoyNDEyOlx0XHRyZXR2YWwgPSBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoKTtcbmtlcm5lbC9mb3JrLmMtMjQxMy1cdFx0aWYgKHJldHZhbClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODg3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRnV0ZXggSGFzaCBTeW5jaHJvbml6YXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGV4cGVydCBleWUgaG9uZXMgaW4gb24gYSBjb3VwbGUgb2Yga2V5IHRoaW5ncy4gIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGdldHMgY2FsbGVkIGR1cmluZyBgY29weV9wcm9jZXNzYCwgd2hpY2ggaXMgZm9yay9jbG9uZS4gR29vZCBmdXp6aW5nIHRhcmdldC4gQW5kIGBmdXRleF9oYXNoX3ByY3RsYCwgd2VsbCwgdGhhdCYjMzk7cyBjYWxsZWQgdmlhIGBwcmN0bGAuIEFub3RoZXIgZXhjZWxsZW50IHN5bWJvbCB0byBmb2N1cyBvbi4gQm90aCBvZiB0aGVzZSBhcmUgZW50cnkgcG9pbnRzIGFuZCByZXByZXNlbnQgY3JpdGljYWwgcG9pbnRzIGluIHRoZSBzeXN0ZW0gd2hlcmUgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGZ1dGV4IGhhc2ggaXMgYmVoYXZpbmcgY29ycmVjdGx5LgoKTm93LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29kZSBjaGFuZ2VzLiAgSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gVGhpcyBpcyBhIGJpZyBkZWFsISBSQ1UgaXMgYWxsIGFib3V0IGxvY2stZnJlZSwgY29uY3VycmVudCBhY2Nlc3MsIGFuZCByZXF1aXJlcyBjYXJlZnVsIG1lbW9yeSBiYXJyaWVyIG1hbmFnZW1lbnQgdG8gZW5zdXJlIGRhdGEgdmlzaWJpbGl0eS4gIFRoZSBgZ3VhcmQocmN1KSgpO2Agc3VnZ2VzdHMgd2UgYXJlIGRlYWxpbmcgd2l0aCByY3UgY3JpdGljYWwgc2VjdGlvbi4gYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBhcmUgYmVpbmcgaW50cm9kdWNlZCBmb3IgYGhhc2hfbmV3YCwgd2hpY2ggaXMgYSBzdHJvbmcgaW5kaWNhdGlvbiB3ZSBhcmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIGluIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMuICBJIHNlZSBhIHVzZSBvZiBgc21wX3JtYigpYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkmIzM5O3JlIHJlYWxseSB0aGlua2luZyBhYm91dCBtZW1vcnkgb3JkZXJpbmcuCgpMb29raW5nIGNsb3NlciwgdGhlIGNvbW1pdCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIEl0IHJlcGxhY2VzIHRoZSBtdXRleCAoYG1tcGgtJmd0O2xvY2tgKSB3aXRoIFJDVSBhbmQgYWRkcyBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgLCBgUkVBRF9PTkNFYCwgYW5kIGBXUklURV9PTkNFYCkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHVwZGF0ZWQgdmFsdWUgb2YgYGhhc2hfbmV3YCBpcyB2aXNpYmxlIHRvIGFsbCByZWFkZXJzLCBhbmQgdGhhdCB0aGUgb3JkZXIgaXMgcHJlc2VydmVkLCBzbyBubyBzdGFsZSB2YWx1ZXMgYXJlIGNhY2hlZC4gIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlIGhhbmRsZXMgc3luY2hyb25pemF0aW9uLiBJdCYjMzk7cyBtb3ZpbmcgZnJvbSBhIG1vcmUgdHJhZGl0aW9uYWwgbG9ja2luZyBtZWNoYW5pc20gdG8gYSBsb2NrLWZyZWUgYXBwcm9hY2guIEdpdmVuIHRoaXMgaXMgYSBjb3JlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20sIEkgY2FuIGFscmVhZHkgdGVsbCB0aGF0IHRoaXMgaXMgZ29pbmcgdG8gYmUgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0byBmb2N1cyBvbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFzIHByaW1lIHRhcmdldCBmdXp6aW5nIHN5bWJvbHMuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1enppbmcgdGFyZ2V0cyBhcmUgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYEZVVEVYYCBhbmQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgYXJlIGVuYWJsZWQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuCgpJJiMzOTtsbCBjaGVjayBgaW5pdC9LY29uZmlnYCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYnV0IGl0IHNlZW1zIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzbiYjMzk7dCB1c2VyLXNlbGVjdGFibGUuIEl0JiMzOTtzIGxpa2VseSBlbmFibGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LiBIb3dldmVyLCBpdCYjMzk7cyBzdGlsbCBnb29kIHRvIGRvY3VtZW50IGFuZCBlbnN1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQmIzM5O3MgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIEJ1dCwgaW4gYW55IGNhc2UsIGBGVVRFWGAgaXMgdXNlciBzZWxlY3RhYmxlIGFuZCBzaG91bGQgYmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVVEVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODI3PWNvbmZpZyBCQVNFX1NNQUxMXG4tLVxuaW5pdC9LY29uZmlnLTE4MzMtXG5pbml0L0tjb25maWc6MTgzNDpjb25maWcgRlVURVhcbmluaXQvS2NvbmZpZy0xODM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgZnV0ZXggc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWctMTg0My1cbmluaXQvS2NvbmZpZzoxODQ0OmNvbmZpZyBGVVRFWF9QSVxuaW5pdC9LY29uZmlnLTE4NDUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTE4NDgtXG5pbml0L0tjb25maWc6MTg0OTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXG5pbml0L0tjb25maWctMTg1MC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTg1My1cbmluaXQvS2NvbmZpZzoxODU0OmNvbmZpZyBGVVRFWF9NUE9MXG5pbml0L0tjb25maWctMTg1NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWc9MTg1OT1jb25maWcgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4tLVxuaW5pdC9LY29uZmlnLTE4NjEtXG5pbml0L0tjb25maWc6MTg2Mjpjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xuaW5pdC9LY29uZmlnLTE4NjMtXHRkZWZfYm9vbCBGVVRFWCBcdTAwMjZcdTAwMjYgSEFWRV9HRU5FUklDX1ZEU08gXHUwMDI2XHUwMDI2IEdFTkVSSUNfSVJRX0VOVFJZIFx1MDAyNlx1MDAyNiBSU0VRIFx1MDAyNlx1MDAyNiBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4ODgKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZVVEVYIENvbmZpZ3VyYXRpb24gYW5kIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgRlVURVhgIGlzIGluZGVlZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhIHByZXR0eSBmdW5kYW1lbnRhbCBvbmUgYXQgdGhhdC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCwgYWxvbmcgd2l0aCBgRlVURVhfUFJJVkFURV9IQVNIYC4gVGhlc2UgYXJlIGtleSBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0uCgpOb3csIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gSSByZWNhbGwgaXQgYmVpbmcgcmVsYXRlZCB0byB0aGUgaGFzaGluZyBtZWNoYW5pc21zLiBSaWdodCwgbGV0IG1lIHNlZS4uLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIEFoLCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBQZXJmZWN0LiBUaGF0IG1ha2VzIGl0IGNsZWFyIC0gdGhvc2UgdHdvLCBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLCBhcmUgdGhlIHN5bWJvbHMgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbi4gVGhleSByZXByZXNlbnQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGFuZCB0aGUga2V5IGFzcGVjdHMgdG8gZXhhbWluZS4KClJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBjbGVhciBwaWN0dXJlLCBsZXQgbWUgbG9nIHRoaXMuIEkmIzM5O2xsIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGFkZGluZyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gYGhhc2hfbmV3YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBwcmN0bGAgc3lzY2FsbCAoYFBSX0ZVVEVYX0hBU0hgKSBhbmQgcHJvY2VzcyBjbG9uaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7LAogICAgJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBhZGRpbmcgYFJFQURfT05DRWAvYFdSSVRFX09OQ0VgIHRvIGBoYXNoX25ld2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gdGhhdCBpcyByZWFjaGFibGUgdmlhIHRoZSBgcHJjdGxgIHN5c2NhbGwgKGBQUl9GVVRFWF9IQVNIYCkgYW5kIHByb2Nlc3MgY2xvbmluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBhZGRpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgYW5kIGEgbWVtb3J5IGJhcnJpZXIgKHNtcF9ybWIpIGZvciBhY2Nlc3NpbmcgYG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZS9OVUxMLWRlcmVmIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0NTQU4gYW5kIEtBU0FOIHJlc3BlY3RpdmVseS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTRkZmVlODJkMGJiMzU2ZTI4NGYwMjg1ZDQwNGU5NDEyOTgyYzAwMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA0OjI0OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqCiAJZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLSZndDtoYXNoLCBsb2NrZGVwX2lzX2hlbGQoJmFtcDttbXBoLSZndDtsb2NrKSk7CiAJaWYgKGZwaCkgewogCQlpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHsKLQkJCW1tcGgtJmd0O2hhc2hfbmV3ID0gbmV3OwomIzQzOwkJCVdSSVRFX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcsIG5ldyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiAJCWZwaCA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKIAkJaWYgKGZwaCkgewotCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAJCQlfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7CiAJCX0KIAl9CkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9ICZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoOwogCXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CiB9CiAKQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJY3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaCwKIAkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO21tLSZndDtmdXRleC5waGFzaC5sb2NrKSk7CiAJCW5ldyA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKLQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAogCQlpZiAoZnBoKSB7CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIWN1ci0mZ3Q7aGFzaF9tYXNrKSB7CkBAIC0xODg5LDcgJiM0MzsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCQkJICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLgogCQkJCSAqLwogCQkJCWZyZWUgPSBmcGg7Ci0JCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3OwomIzQzOwkJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFuZXcpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjIKCQkJCQkJCW91dHB1dDogMTYwCgkJCQkJCQl0aG91Z2h0czogNTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV0ZXggQ29uY3VycmVuY3kgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgbW1waC0mZ3Q7aGFzaF9uZXdgICh3aGljaCBpcywgaW4gZXNzZW5jZSwgYG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ld2ApLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAgYXJvdW5kIGFzc2lnbm1lbnRzIGFuZCByZWFkcyBvZiB0aGlzIHZhcmlhYmxlLiBUaGF0IGltbWVkaWF0ZWx5IHNjcmVhbXMgY29uY3VycmVuY3kgYnVnIGZpeCB0byBtZTsgaXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIGEgZGF0YSByYWNlIG9yIGEgbWlzc2luZyBtZW1vcnkgYmFycmllciBpc3N1ZSB3aXRoaW4gdGhlIGZ1dGV4IGltcGxlbWVudGF0aW9uLiBXZSYjMzk7cmUgZXhwbGljaXRseSBvcmRlcmluZyBtZW1vcnkgb3BlcmF0aW9ucyB0byBlbnN1cmUgY29uc2lzdGVudCB2aXNpYmlsaXR5IGFjcm9zcyBkaWZmZXJlbnQgQ1BVcy4KCkxvb2tpbmcgY2xvc2VyLCB0aGUgYGZ1dGV4X3Bpdm90X3BlbmRpbmcoKWAgZnVuY3Rpb24gYWxzbyBub3cgZW1wbG95cyBSQ1UgKFJlYWQtQ29weSBVcGRhdGUpIGluc3RlYWQgb2YgYSBtdXRleCwgYW5kIGNydWNpYWxseSwgYW4gYHNtcF9ybWIoKWAgKFN5c3RlbSBNZW1vcnkgQmFycmllciBSZWFkKSBoYXMgYmVlbiBhZGRlZC4gVGhpcyByZWluZm9yY2VzIHRoZSBmb2N1cyBvbiBtZW1vcnkgb3JkZXJpbmcuIFRoZSBgc21wX3JtYigpYCBpbiBwYXJ0aWN1bGFyIGlzIGNyaXRpY2FsOyBpdCBlbnN1cmVzIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2UgYWxzbyBzZWUgdGhlIG51bGxpbmcgb2YgdGhlIGBoYXNoX25ld2AgcG9pbnRlciwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgdGhlIHBpdm90IG9wZXJhdGlvbi4KCk5vdywgY29uc2lkZXJpbmcgdGhlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYXNwZWN0LCBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IHdvdWxkIHRyaWdnZXIgS01TQU4uIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgbmV3IGFsbG9jYXRpb25zLCBpdCYjMzk7cyBub3QgY2hhbmdpbmcgdGhlIHNpemUgb2YgYW55IHN0cnVjdHVyZXMgaW4gd2F5cyB0aGF0IHdvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBpdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIHBhdGNoIGlzIHB1cmVseSBhYm91dCBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbi4gQW55IGlzc3VlcyB0aGlzIHBhdGNoIHdvdWxkIGFkZHJlc3MgYXJlIG1lbW9yeSBvcmRlcmluZyBidWdzLCBhbmQgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhYm91dCBkYXRhIHJhY2VzIGFuZCBtZW1vcnkgYmFycmllcnMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIGBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ld2AuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGRhdGEgcmFjZXMgb3IgdXNlLWFmdGVyLWZyZWUvTlVMTC1kZXJlZiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtDU0FOIGFuZCBLQVNBTiByZXNwZWN0aXZlbHkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBhZGRpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgYW5kIGEgbWVtb3J5IGJhcnJpZXIgKHNtcF9ybWIpIGZvciBhY2Nlc3NpbmcgYG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZS9OVUxMLWRlcmVmIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0NTQU4gYW5kIEtBU0FOIHJlc3BlY3RpdmVseS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjQ6NTEuMTA2MjQ1NDg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyMDI3OTExNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIixcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIGBtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXdgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBkYXRhIHJhY2VzIG9yIHVzZS1hZnRlci1mcmVlL05VTEwtZGVyZWYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQ1NBTiBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGFkZGluZyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gYGhhc2hfbmV3YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBwcmN0bGAgc3lzY2FsbCAoYFBSX0ZVVEVYX0hBU0hgKSBhbmQgcHJvY2VzcyBjbG9uaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNDo1MS4xMDYyNTA0NDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MzMxODU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE0ZGZlZTgyZDBiYjM1NmUyODRmMDI4NWQ0MDRlOTQxMjk4MmMwMDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDQ6MjQ6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcXG4rKysgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXFxuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKlxcbiBcXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtXFx1MDAzZWhhc2gsIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bW1waC1cXHUwMDNlbG9jaykpO1xcbiBcXHRpZiAoZnBoKSB7XFxuIFxcdFxcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xcbi1cXHRcXHRcXHRtbXBoLVxcdTAwM2VoYXNoX25ldyA9IG5ldztcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShtbXBoLVxcdTAwM2VoYXNoX25ldywgbmV3KTtcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0yMjQsNyArMjI0LDcgQEAgc3RhdGljIHZvaWQgZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIFxcdFxcdGZwaCA9IG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcXG4gXFx0XFx0aWYgKGZwaCkge1xcbi1cXHRcXHRcXHRtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XFxuIFxcdFxcdFxcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTE3ODYsMTIgKzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXFx1MDAyNm1tLVxcdTAwM2VmdXRleC5waGFzaDtcXG4gXFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xcbiBcXG4tXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZtbXBoLVxcdTAwM2Vsb2NrKTtcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbiBcXG4tXFx0aWYgKCFtbXBoLVxcdTAwM2VoYXNoX25ldylcXG4rXFx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXFx1MDAzZWhhc2gpO1xcbitcXHQvKlxcbitcXHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXFxuK1xcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cXG4rXFx0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfcm1iKCk7XFxuK1xcdGlmICghUkVBRF9PTkNFKG1tcGgtXFx1MDAzZWhhc2hfbmV3KSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtXFx1MDAzZWhhc2gpO1xcbiBcXHRyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTtcXG4gfVxcbiBcXG5AQCAtMTg3OSw3ICsxODg1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIFxcdFxcdGN1ciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spKTtcXG4gXFx0XFx0bmV3ID0gbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xcbi1cXHRcXHRtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xcbitcXHRcXHRXUklURV9PTkNFKG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XFxuIFxcbiBcXHRcXHRpZiAoZnBoKSB7XFxuIFxcdFxcdFxcdGlmIChjdXIgXFx1MDAyNlxcdTAwMjYgIWN1ci1cXHUwMDNlaGFzaF9tYXNrKSB7XFxuQEAgLTE4ODksNyArMTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbiBcXHRcXHRcXHRcXHQgKiB0aGUgc2Vjb25kIG9uZSByZXR1cm5zIGhlcmUuXFxuIFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRmcmVlID0gZnBoO1xcbi1cXHRcXHRcXHRcXHRtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XFxuK1xcdFxcdFxcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChjdXIgXFx1MDAyNlxcdTAwMjYgIW5ldykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNDo1MS41MDAyMDU3MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTQ5Njk4OTQwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIGZlYXR1cmUsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYWRkaW5nIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCB0byBgaGFzaF9uZXdgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHByY3RsYCBzeXNjYWxsIChgUFJfRlVURVhfSEFTSGApIGFuZCBwcm9jZXNzIGNsb25pbmcsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE0ZGZlZTgyZDBiYjM1NmUyODRmMDI4NWQ0MDRlOTQxMjk4MmMwMDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNDoyNDo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xuKysrIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKlxuIFx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLVx1MDAzZWhhc2gsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbXBoLVx1MDAzZWxvY2spKTtcbiBcdGlmIChmcGgpIHtcbiBcdFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XG4tXHRcdFx0bW1waC1cdTAwM2VoYXNoX25ldyA9IG5ldztcbitcdFx0XHRXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXG5AQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gXHRcdGZwaCA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuIFx0XHRpZiAoZnBoKSB7XG4tXHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuK1x0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3ODYsMTIgKzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xuIFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4rXHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4rXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cdTAwM2VoYXNoKTtcbitcdC8qXG4rXHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4rXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG4rXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbitcdCAqL1xuK1x0c21wX3JtYigpO1xuK1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG4gfVxuIFxuQEAgLTE4NzksNyArMTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRjdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsXG4gXHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spKTtcbiBcdFx0bmV3ID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4tXHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXG4gXHRcdGlmIChmcGgpIHtcbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhY3VyLVx1MDAzZWhhc2hfbWFzaykge1xuQEAgLTE4ODksNyArMTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRcdFx0ICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHRmcmVlID0gZnBoO1xuLVx0XHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIW5ldykge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjQ6NTEuNTAwMjA3MDIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxODcyODIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGdXRleCBQcml2YXRlIEhhc2ggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHN5bmNocm9uaXphdGlvbi4gU3BlY2lmaWNhbGx5LCB3ZSdyZSBzd2FwcGluZyBvdXQgZGlyZWN0IHdyaXRlcyB0byBgbW1waC1cdTAwM2VoYXNoX25ld2AgYW5kIGBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ld2Agd2l0aCBgV1JJVEVfT05DRWAuIFNtYXJ0IG1vdmUuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIGhlcmUsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBmdXRleGVzIGFuZCBzaGFyZWQgbWVtb3J5LiBSZXBsYWNpbmcgdGhhdCBgZ3VhcmQobXV0ZXgpYCBjYWxsIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCB3aXRoIGBndWFyZChyY3UpKClgIGFuZCBhZGRpbmcgYHNtcF9ybWIoKWAgaXMgYW5vdGhlciByZWQgZmxhZyBvZiBjb25jdXJyZW50IGFjY2VzcyB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgaGFuZGxpbmcuIEFuZCB0aGVuIHVzaW5nIGBSRUFEX09OQ0Vg4oCmIHllcCwgdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGFib3V0IGVuc3VyaW5nIHRoZSBjb3JyZWN0IHZpc2liaWxpdHkgb2YgdGhlc2UgaGFzaCB0YWJsZSB1cGRhdGVzIGFjcm9zcyBkaWZmZXJlbnQgQ1BVcy4gSXQncyBhbGwgYWJvdXQgbWVtb3J5IGJhcnJpZXJzIGFuZCBkYXRhIGNvbnNpc3RlbmN5LlxuXG5Ob3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gY29udGV4dC4gV2FpdCwgKnN0YXRpYyogZnVuY3Rpb24/IEFscmlnaHQsIHRoYXQgbWVhbnMgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBsb2NhbGl6ZWQgdG8gdGhlIHNhbWUgc291cmNlIGZpbGUuIFNvLCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGlzICphY3R1YWxseSogYmVpbmcgY2FsbGVkIHdpdGhpbiBgY29yZS5jYCB0byBzZWUgaG93IHRoZXNlIGNoYW5nZXMgYXJlIGltcGFjdGluZyB0aGUgb3ZlcmFsbCBmdXRleCBoYXNoIG1hbmFnZW1lbnQgbG9naWMuIExldCdzIHRyYWNlIHRoYXQgZnVuY3Rpb24gY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI0OjU2LjAxODkzODMwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE4Njk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9waXZvdF9wZW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNzczPXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzgzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc4NDpzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzctYWdhaW46XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODc4OlxcdFxcdHdhaXRfdmFyX2V2ZW50KG1tLCBmdXRleF9waXZvdF9wZW5kaW5nKG1tKSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjQ6NTYuMDY0MTMwMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjExNTk3MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqXG5cbk9rYXksIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBqdXN0IGdvdCBjYWxsZWQuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgY2FsbCBvcmlnaW5hdGVkLiBHaXZlbiB0aGUgbmF0dXJlIG9mIGZ1dGV4ZXMsIGl0J3MgbGlrZWx5IGxpbmtlZCB0byBwcm9jZXNzIHN5bmNocm9uaXphdGlvbiwgdXNlci1zcGFjZSBsb2Nrcywgb3Iga2VybmVsLXNwYWNlIHdhaXQgcXVldWVzLiBUaGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgZnVuY3Rpb24gY2FsbCBwYXRoIHRvIHVuZGVyc3RhbmQgdGhlIGhpZ2hlci1sZXZlbCBjb250ZXh0LCBhbmQgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHNjZW5hcmlvIHRoYXQgdHJpZ2dlcmVkIHRoZSBhbGxvY2F0aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIHNvbWUgZGVidWdnaW5nIHRvb2xzLCBsaWtlbHkgYHBlcmZgLCBgZnRyYWNlYCwgb3IgZ29vZCBvbGQgYGdkYmAsIHRvIHN0ZXAgdGhyb3VnaCB0aGUgY2FsbCBzdGFjayBhbmQgaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgd2lsbCBoZWxwIGRldGVybWluZSBpZiB0aGlzIGFsbG9jYXRpb24gaXMgZXhwZWN0ZWQsIHBvdGVudGlhbGx5IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgb3IgaW5kaWNhdGl2ZSBvZiBhIGJ1ZywgbGlrZSBhIG1lbW9yeSBsZWFrIG9yIGFuIHVuZXhwZWN0ZWQgbG9ja2luZyBzY2VuYXJpby4gTXkgbWFpbiBmb2N1cyBhdCB0aGlzIHBvaW50IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIFwid2h5XCIgYW5kIFwid2hlblwiIG9mIHRoaXMgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNDo1OS4yNzU3Mjk5NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMjYwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDAtXFx0ICpcXHRcXHRcXHRcXHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsIG5ldyk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlxcdCAqXFx0XFx0XFx0XFx0ZnV0ZXhfaGFzaF9hbGxvY2F0ZSgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVxcdCAqXFx0XFx0XFx0XFx0ICBmdXRleF9yZWZfZHJvcCgpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4MDQ9c3RhdGljIGJvb2wgZnV0ZXhfaGFzaF9sZXNzKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmEsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODI4OnN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcXHRyZXR1cm4gZnV0ZXhfaGFzaF9hbGxvY2F0ZShidWNrZXRzLCAwKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTcxPXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MS0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4MjpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykgeyByZXR1cm4gLUVJTlZBTDsgfVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4My1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKSB7IHJldHVybiAwOyB9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMjQ9aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMzM6XFx0XFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDM0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNDo1OS4zMTg3NjA2NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg4OTI3MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGFzIHRob3VnaCBpdCB3ZXJlIG15IHRyYWluIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gYGZ1dGV4X2hhc2hfcHJjdGxgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIGNhbGwgdG8gYGZ1dGV4X2hhc2hfcHJjdGxgIHN0ZW1taW5nIGZyb20gdGhlIGBwcmN0bGAgc3lzdGVtIGNhbGwuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0J3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQgYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIGFjdHVhbGx5IGRvaW5nIHdpdGhpbiB0aGUgYHByY3RsYCBjb250ZXh0LiBUaGUgYHByY3RsYCBzeXN0ZW0gY2FsbCBpcyBhIHN3aXNzIGFybXkga25pZmUsIGhhbmRsaW5nIGEgd2lkZSByYW5nZSBvZiBwcm9jZXNzLWxldmVsIG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgaG93IGBmdXRleF9oYXNoX3ByY3RsYCB0aWVzIGludG8gdGhhdCBpcyBjcnVjaWFsLiBJIHN1c3BlY3QgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXNwZWN0IG9mIGZ1dGV4IG1hbmFnZW1lbnQg4oCTIHBlcmhhcHMgaW5pdGlhbGl6YXRpb24sIG1hbmlwdWxhdGlvbiBvZiBmdXRleCBkYXRhIHN0cnVjdHVyZXMsIG9yIGV2ZW4gc2VjdXJpdHktcmVsYXRlZCBjaGVja3MgYXJvdW5kIGZ1dGV4IG9wZXJhdGlvbnMuIFdlJ2xsIGhhdmUgdG8gZGlnIGRlZXBlciB0byBjb25maXJtLCB0aG91Z2guIExldCdzIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjg4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MDIuMjA3NjkwMDQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTk0NDUzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc3PWxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtNzgtXFx0ICAgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo3OTppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTQ9c3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtOTgtfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo5OTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMC17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTc9dm9pZCBmdXRleF9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDIzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAyNDppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XFxuLS1cXG5rZXJuZWwvc3lzLmM9MjUzND1TWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxcbi0tXFxua2VybmVsL3N5cy5jLTI4ODQtXFx0Y2FzZSBQUl9GVVRFWF9IQVNIOlxcbmtlcm5lbC9zeXMuYzoyODg1OlxcdFxcdGVycm9yID0gZnV0ZXhfaGFzaF9wcmN0bChhcmcyLCBhcmczLCBhcmc0KTtcXG5rZXJuZWwvc3lzLmMtMjg4Ni1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MDQuMDA3MTM5MjczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwMzkyOTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZ1dGV4IFN5bmNocm9uaXphdGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgbmV3IGBmdXRleF9oYXNoX3ByY3RsYCBmdW5jdGlvbiBpcyBub3cgZXhwb3NlZCB2aWEgdGhlIGBwcmN0bGAgc3lzY2FsbCwgdXNpbmcgYFBSX0ZVVEVYX0hBU0hgLiBJbnRlcmVzdGluZy4gVGhpcyBwYXRjaCBtb2RpZmllcyBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgY3JpdGljYWwgdG8gaW52ZXN0aWdhdGUuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgZnV0ZXggZnVuY3Rpb25hbGl0eSBoZXJlIC0gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uLiBBYnNvbHV0ZWx5IHdvcnRoIGEgZGVlcCBmdXp6aW5nIGNhbXBhaWduLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExvb2tzIGxpa2UgYENPTkZJR19GVVRFWGAgaXMgYSBnaXZlbiwgYnV0IGBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIYCBpcyB0aGUga2V5LiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGVuYWJsZWQuIFRpbWUgdG8gZ28gZGlnIGludG8gdGhlIGNvbmZpZyBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDIxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjA3LjgxMTA3MTUwMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NDcyMDQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGVVRFWF9QUklWQVRFX0hBU0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZnV0ZXguaD03OT1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODAtXFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgxOiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgyLWludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oPTgzPXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODQ6I2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODUtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9ODY9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjg3OiNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04OC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaD0xNTI9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2ZpeHVwX3JvYnVzdF91bmxvY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTE1NS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6MTU2OiNpZiBkZWZpbmVkKENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0gpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1JPQlVTVF9VTkxPQ0spXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTE1Ny12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleF90eXBlcy5oPTIzPXN0cnVjdCBmdXRleF9zY2hlZF9kYXRhIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXhfdHlwZXMuaC0zMy1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmg6MzQ6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmgtMzUtLyoqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MTQyPWV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKik7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjE0MzojaWYgZGVmaW5lZChDT05GSUdfTU1VKSB8fCBkZWZpbmVkKENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0gpXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE0NC0vKiBzYW1lIGFzIGFib3ZlIGJ1dCBwZXJmb3JtcyB0aGUgc2xvdyBwYXRoIGZyb20gdGhlIGFzeW5jIGNvbnRleHQuIENhblxcbi0tXFxuaW5pdC9LY29uZmlnPTE4NDQ9Y29uZmlnIEZVVEVYX1BJXFxuLS1cXG5pbml0L0tjb25maWctMTg0OC1cXG5pbml0L0tjb25maWc6MTg0OTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXFxuaW5pdC9LY29uZmlnLTE4NTAtXFx0Ym9vbFxcbi0tXFxua2VybmVsL2ZvcmsuYz0xMjEyPUVYUE9SVF9TWU1CT0xfR1BMKG1tcHV0KTtcXG5rZXJuZWwvZm9yay5jLTEyMTMtXFxua2VybmVsL2ZvcmsuYzoxMjE0OiNpZiBkZWZpbmVkKENPTkZJR19NTVUpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSClcXG5rZXJuZWwvZm9yay5jLTEyMTUtc3RhdGljIHZvaWQgbW1wdXRfYXN5bmNfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMzA9X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzEtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzI6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEzMy1zdGF0aWMgYm9vbCBmdXRleF9yZWZfZ2V0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTI2MD1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzUtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzY6I2Vsc2UgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3Ny1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTI3OD1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yODItXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyODM6I2VuZGlmIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4NC1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MzY4PV9fZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICoqZnBoX3ApXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM3Mi1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM3MzojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzc0LVxcdGlmIChub2RlID09IEZVVEVYX05PX05PREUgXFx1MDAyNlxcdTAwMjYgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSkge1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNTY3PXN0YXRpYyB2b2lkIGZ1dGV4X2hhc2hfYnVja2V0X2luaXQoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpmaGIpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1NzUtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNTc2OiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTc3LVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTcxPXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MC19XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgxOiNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgyLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5ODQ9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2hhc2hfaW5pdF9tbShzdHJ1Y3QgZnV0ZXhfbW1fZGF0YSAqZmQpIHsgfVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4NTojZW5kaWYgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODYtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTM9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3JvYnVzdF91bmxvY2tfaW5pdF9tbShzdHJ1Y3QgZnV0ZXhfbW1fZGF0YSAqZmQpIHsgfVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDE1LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAxNjojaWYgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKSB8fCBkZWZpbmVkKENPTkZJR19GVVRFWF9ST0JVU1RfVU5MT0NLKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAxNy12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNDE9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYge1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQ1LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0NjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0Ny1leHRlcm4gc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNDg9ZXh0ZXJuIHZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0OS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTA6I2Vsc2UgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTEtc3RhdGljIGlubGluZSBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIE5VTEw7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MDkuNTU1Nzk5MTE4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDAwOTgyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBgRlVURVhfUFJJVkFURV9IQVNIYCBpcyBzb21ldGhpbmcgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLCBpdHMgcG9zc2libGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGhlbHAgdGV4dCB0aGF0IGV4cGxhaW5zIGl0cyBwdXJwb3NlLiBJdCdzIHRoZSBzdGFuZGFyZCBwbGFjZSB0byBpbnZlc3RpZ2F0ZSB0aGVzZSBraW5kcyBvZiBjb21waWxlLXRpbWUgb3B0aW9ucy4gTGV0IG1lIGdldCB0aGF0IEtjb25maWcgZmlsZSBvcGVuZWQgYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNToxMi41OTU4OTk3NzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDg3NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODQ0PWNvbmZpZyBGVVRFWF9QSVxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDgtXFxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbmluaXQvS2NvbmZpZy0xODUwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MTIuNjQwMDEzODkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTc0ODc2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgc2VsZWN0cyBgRlVURVhfUFJJVkFURV9IQVNIYDpcblxuKipEaXNzZWN0aW5nIHRoZSBGVVRFWF9QUklWQVRFX0hBU0ggU2VsZWN0b3IqKlxuXG5BbHJpZ2h0LCBzbyBgRlVURVhfUFJJVkFURV9IQVNIYCBpcyB0aGUga2V5IHBpZWNlIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIHBhcnRpY3VsYXIgZmxhZyBpcyBiZWluZyB1c2VkLCBlc3BlY2lhbGx5IHNpbmNlIEknbSB0cnlpbmcgdG8gc2VlIHdoYXQgaXQgKnNlbGVjdHMqLiBXaGF0IGRvZXMgdGhpcyBtZWFuIGluIHRoZSBjb250ZXh0IG9mIGBmdXRleGA/IEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBcInByaXZhdGVcIiB2ZXJzdXMgXCJzaGFyZWRcIiBhbmQgdGhlIHVzZSBvZiBhIGhhc2guIFRoaXMgbGlrZWx5IHBvaW50cyB0b3dhcmQgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBvcHRpbWl6YXRpb24uIElzIGl0IHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBmdXRleGVzPyBJcyBpdCBhIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBmdXRleGVzIGFyZSBpbXBsZW1lbnRlZCBmb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcywgb3Igd2l0aCBzcGVjaWZpYyBwcm9jZXNzIG1lbW9yeSBjb25maWd1cmF0aW9ucz9cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGRpZmZlcmVudCBzY2VuYXJpb3M6XG5cbiogICAqKktlcm5lbCBpbXBsZW1lbnRhdGlvbjoqKiBJcyB0aGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGUgZnV0ZXggd2FpdCBxdWV1ZXM/IFBlcmhhcHMgdGhlIGhhc2ggaXMgdXNlZCBmb3IgbG9va3VwIGVmZmljaWVuY3kgd2l0aGluIHRoZSBrZXJuZWwncyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuIERvZXMgYEZVVEVYX1BSSVZBVEVfSEFTSGAgc3VnZ2VzdCBzb21ldGhpbmcgYWJvdXQgaG93IHRoZSBrZXJuZWwgb3JnYW5pemVzIGZ1dGV4ZXMgaW50ZXJuYWxseT9cbiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIFRoZSBcInByaXZhdGVcIiBwYXJ0IG1ha2VzIG1lIHRoaW5rIGFib3V0IHByb2Nlc3MgYWRkcmVzcyBzcGFjZS4gSXMgdGhpcyBmbGFnIGluZGljYXRpbmcgYSBmdXRleCB0aGF0J3Mgb25seSB2YWxpZCB3aXRoaW4gdGhlIHByb2Nlc3MncyBvd24gbWVtb3J5LCBhbmQgdGhlIGhhc2ggaXMgcmVsZXZhbnQgdG8gbG9jYXRpbmcgaXQgd2l0aGluIHRoYXQgYWRkcmVzcyBzcGFjZT8gRG9lcyB0aGlzIHN1Z2dlc3QgYSBkaWZmZXJlbnQgbWVtb3J5IG1vZGVsIGZvciBmdXRleGVzPyBQZXJoYXBzIHNwZWNpZmljIHRvIHVzZXItc3BhY2UgaW1wbGVtZW50YXRpb25zP1xuKiAgICoqUGVyZm9ybWFuY2UgQ29uc2lkZXJhdGlvbnM6KiogVGhlIGhhc2ggaXRzZWxmIGlzIG1ha2luZyBtZSB0aGluayBvZiBhIHRyYWRlLW9mZi4gSXMgdGhpcyBhYm91dCByZWR1Y2luZyB0aGUgb3ZlcmhlYWQgb2Ygc2hhcmVkIGZ1dGV4ZXM/IE1heWJlIGl0J3MgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgYSBsYXJnZSBudW1iZXIgb2YgZnV0ZXhlcz9cblxuSSBuZWVkIHRvIGRlbHZlIGRlZXBlci4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgZnV0ZXhgIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3Igd2hlcmUgdGhpcyBgRlVURVhfUFJJVkFURV9IQVNIYCBmbGFnIGlzIGRlZmluZWQgYW5kIGhvdyBpdCBpcyBhY3R1YWxseSB1c2VkLiBJIHdpbGwgbGlrZWx5IG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1dGV4IHN0cnVjdHVyZSBpcyB1c2VkIGluIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMgYW5kIGFyY2hpdGVjdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGRpZmZlcmVudCBjb2RlIHBhdGhzIGFuZCBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3b3VsZCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UuIEknbGwgcHJvYmFibHkgYWxzbyBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IHN5c3RlbSBjYWxsIGhhbmRsaW5nIGFuZCBhbnkgYXNzb2NpYXRlZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3B0aW1pemF0aW9ucy4gSSBuZWVkIHRvIGRpc2NvdmVyIGV4YWN0bHkgd2hhdCBkYXRhIHN0cnVjdHVyZSBvciBjb2RlIHBhdGggaXMgYmVpbmcgc2VsZWN0ZWQgYnkgdGhlIGZsYWcsIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQxNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjE2LjgzNzUwNDg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MTMyOTA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRlVURVhfUFJJVkFURV9IQVNIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MTguNDYzNjQ0OTA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTQ5NTk3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlnIGZvciBGVVRFWF9QUklWQVRFX0hBU0gqKlxuXG5Pa2F5LCBzbyBgRlVURVhfUFJJVkFURV9IQVNIYC4uLiB3YWl0IGEgc2Vjb25kLiBUaGF0J3MganVzdCBhIGJvb2xlYW4sIG5vIHByb21wdGluZywgbm8gY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGNvbnNpZGVyPyBUaGF0J3MgdW51c3VhbC4gSXQgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIHRvIHNlZSB0aGUgY29udGV4dC4gTGV0J3MgbmF2aWdhdGUgdG8gYGluaXQvS2NvbmZpZ2AsIGFuZCBmb2N1cyBvbiBhcm91bmQgbGluZSAxODQ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBmdXRleCBpbXBsZW1lbnRhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGF0IHNlY3Rpb24gdG8gZ2V0IHRoZSBwcm9wZXIgY29udGV4dC4gSSBleHBlY3Qgc29tZSBpbnRlcmVzdGluZyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjIxLjM1ODYwNzg4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDU6XFx0XFx0Ym9vbFxcbjE4NDY6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiBSVF9NVVRFWEVTXFxuMTg0NzpcXHRcXHRkZWZhdWx0IHlcXG4xODQ4OlxcdFxcbjE4NDk6XFx0Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbjE4NTA6XFx0XFx0Ym9vbFxcbjE4NTE6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiAhQkFTRV9TTUFMTCBcXHUwMDI2XFx1MDAyNiBNTVVcXG4xODUyOlxcdFxcdGRlZmF1bHQgeVxcbjE4NTM6XFx0XFxuMTg1NDpcXHRjb25maWcgRlVURVhfTVBPTFxcbjE4NTU6XFx0XFx0Ym9vbFxcbjE4NTY6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiBOVU1BXFxuMTg1NzpcXHRcXHRkZWZhdWx0IHlcXG4xODU4OlxcdFxcbjE4NTk6XFx0Y29uZmlnIEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcbjE4NjA6XFx0XFx0Ym9vbFxcbjE4NjE6XFx0XFxuMTg2MjpcXHRjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xcbjE4NjM6XFx0XFx0ZGVmX2Jvb2wgRlVURVggXFx1MDAyNlxcdTAwMjYgSEFWRV9HRU5FUklDX1ZEU08gXFx1MDAyNlxcdTAwMjYgR0VORVJJQ19JUlFfRU5UUlkgXFx1MDAyNlxcdTAwMjYgUlNFUSBcXHUwMDI2XFx1MDAyNiBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4xODY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNToyMS4zNTg3NDYwMzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk4Mzc4MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1dGV4IFJhY2UgQ29uZGl0aW9uIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIG9mIHRoZSBmaXguIEkgc2VlIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igc2V0cyBhICd5JyBpZiBgRlVURVhgLCBidXQgbm90IGBCQVNFX1NNQUxMYCBhbmQgdGhlcmUgaXMgYE1NVWAgcHJlc2VudC4gQWxyaWdodCwgYEZVVEVYYCBsb29rcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy4gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGNhbGxlZCBieSBgZnV0ZXhfaGFzaF9wcmN0bGAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGBwcmN0bGAgc3lzY2FsbC4gU28sIHRoaXMgZml4IHRhcmdldHMgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zIOKAkyBuYW1lbHksIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLlxuXG5gZnV0ZXhfaGFzaF9wcmN0bGAgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBzaW5jZSBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgaXMgc3RhdGljLiBXYWl0IGEgbWludXRlLi4uIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBhbHNvIHN0YXRpYy4gT2theSwgbGV0J3Mgem9vbSBpbiBvbiBgZnV0ZXhfaGFzaF9wcmN0bGAuIEknbGwgaGVhZCBvdmVyIHRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MjYuMzQyNTMxMjQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAzMjc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNToyNi4zODY1NjkyMzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MDU0MzkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBTdGF0aWMgQWxsb2NhdGlvbiBpbiBGdXRleCBIYXNoaW5nKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQgbWUganVzdCBjb25maXJtIHNvbWV0aGluZyBhYm91dCB0aGlzIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoZSB3aG9sZSBwb2ludCBvZiBzdGF0aWMgYWxsb2NhdGlvbiBoZXJlIGlzIGFib3V0IGxpbWl0aW5nIHRoZSBzY29wZSBhbmQgZW5zdXJpbmcgdGhhdCBpdCBpc24ndCBhY2Nlc3NpYmxlIG91dHNpZGUgaXRzIGludGVuZGVkIG1vZHVsZSBvciB0cmFuc2xhdGlvbiB1bml0LiBJZiB0aGlzIGlzbid0IHN0YXRpYywgdGhlbiBpdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBwcmV0dHkgbmFzdHkgYW5kIHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzLCBhbmQgSSdkIG5lZWQgdG8gZ28gYmFjayB0aHJvdWdoIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCBleHRlcm5hbGx5LiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCB0aGF0IGl04oCZcyBub3QgbGVha2luZyBvdXQgaW4gYSB3YXkgdGhhdCB3ZSBkaWRuJ3QgaW50ZW5kLiBJIGNhbid0IGJlIHN1cmUsIHdpdGhvdXQgYSBwcm9wZXIgaW5zcGVjdGlvbiBvZiB0aGUgY29kZSwgYnV0IEkgaG9wZSB0aGlzIGZ1bmN0aW9uJ3Mgc2NvcGUgaXMgc3VpdGFibHkgbGltaXRlZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2xzLiBBIGxpdHRsZSBjaGVjayBub3cgd2lsbCBzYXZlIGEgaGVhZGFjaGUgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNToyOS42MjcxMTU0NTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjM0NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVxcdCAqXFx0XFx0XFx0XFx0ICByY3VfYXNzaWduX3BvaW50ZXIoXFx1MDAyNm1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwMTpcXHQgKlxcdFxcdFxcdFxcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMi1cXHQgKlxcdFxcdFxcdFxcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Njg6XFx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODEtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlxcdFxcdHJldCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGUoYXJnMywgZmxhZ3MpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6MjkuNjY5NzU0MTU3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjM1NDk3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdXRleC1yZWxhdGVkIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgaGFzaCB0YWJsZSBmb3IgZnV0ZXhlcyBpcyBtYW5hZ2VkLiBJIHNlZSB0aGF0IGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIHByb2JhYmx5IGZvciBpbml0aWFsaXphdGlvbiBvciBzb21lIGxvdy1sZXZlbCBvcGVyYXRpb24gb25seSB1c2VkIHdpdGhpbiB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4uIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbi4gVGhlbiwgSSBub3RpY2UgdGhhdCBib3RoIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgYXJlIG5vbi1zdGF0aWMuIFRoaXMgbWVhbnMgdGhleSBhcmUgbGlrZWx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBwaXF1ZXMgbXkgaW50ZXJlc3QuXG5cbk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGFyZSB1c2VkLiBTaW5jZSBpdCdzIG5vdCBzdGF0aWMsIGl0IG11c3QgYmUgY2FsbGVkIGZyb20gZWxzZXdoZXJlLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxscyB0byBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YC4gVW5kZXJzdGFuZGluZyB0aG9zZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZGVmYXVsdCBmdXRleCBoYXNoIHRhYmxlIGlzIHNldCB1cCBhbmQgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkyNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjMzLjAzMzMwNjc4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTI4NzIzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZnV0ZXguaD03OT1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MS0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo4MjppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04My12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTg0LSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjg1OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKSB7IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTg2LXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gMDsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk5PXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDItfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaDoxMDM6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTA0LXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gMDsgfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0xOTY5PXN0YXRpYyB2b2lkIHJ2X3Rhc2tfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5rZXJuZWwvZm9yay5jLTE5NzYtXFxua2VybmVsL2ZvcmsuYzoxOTc3OnN0YXRpYyBib29sIG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHU2NCBjbG9uZV9mbGFncylcXG5rZXJuZWwvZm9yay5jLTE5Nzgte1xcbi0tXFxua2VybmVsL2ZvcmsuYz0xOTk0PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI0MTAtXFxua2VybmVsL2ZvcmsuYzoyNDExOlxcdGlmIChuZWVkX2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdChjbG9uZV9mbGFncykpIHtcXG5rZXJuZWwvZm9yay5jOjI0MTI6XFx0XFx0cmV0dmFsID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KCk7XFxua2VybmVsL2ZvcmsuYy0yNDEzLVxcdFxcdGlmIChyZXR2YWwpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNTozNC42MTI1OTk3MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzMTMwMzQ5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1dGV4IEhhc2ggU3luY2hyb25pemF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBob25lcyBpbiBvbiBhIGNvdXBsZSBvZiBrZXkgdGhpbmdzLiAgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgZ2V0cyBjYWxsZWQgZHVyaW5nIGBjb3B5X3Byb2Nlc3NgLCB3aGljaCBpcyBmb3JrL2Nsb25lLiBHb29kIGZ1enppbmcgdGFyZ2V0LiBBbmQgYGZ1dGV4X2hhc2hfcHJjdGxgLCB3ZWxsLCB0aGF0J3MgY2FsbGVkIHZpYSBgcHJjdGxgLiBBbm90aGVyIGV4Y2VsbGVudCBzeW1ib2wgdG8gZm9jdXMgb24uIEJvdGggb2YgdGhlc2UgYXJlIGVudHJ5IHBvaW50cyBhbmQgcmVwcmVzZW50IGNyaXRpY2FsIHBvaW50cyBpbiB0aGUgc3lzdGVtIHdoZXJlIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBmdXRleCBoYXNoIGlzIGJlaGF2aW5nIGNvcnJlY3RseS5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBjb2RlIGNoYW5nZXMuICBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIChSZWFkLUNvcHktVXBkYXRlKSBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuIFRoaXMgaXMgYSBiaWcgZGVhbCEgUkNVIGlzIGFsbCBhYm91dCBsb2NrLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBhbmQgcmVxdWlyZXMgY2FyZWZ1bCBtZW1vcnkgYmFycmllciBtYW5hZ2VtZW50IHRvIGVuc3VyZSBkYXRhIHZpc2liaWxpdHkuICBUaGUgYGd1YXJkKHJjdSkoKTtgIHN1Z2dlc3RzIHdlIGFyZSBkZWFsaW5nIHdpdGggcmN1IGNyaXRpY2FsIHNlY3Rpb24uIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYXJlIGJlaW5nIGludHJvZHVjZWQgZm9yIGBoYXNoX25ld2AsIHdoaWNoIGlzIGEgc3Ryb25nIGluZGljYXRpb24gd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2Vzcy4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSBpbiB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljLiAgSSBzZWUgYSB1c2Ugb2YgYHNtcF9ybWIoKWAuIFRoYXQncyBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkncmUgcmVhbGx5IHRoaW5raW5nIGFib3V0IG1lbW9yeSBvcmRlcmluZy5cblxuTG9va2luZyBjbG9zZXIsIHRoZSBjb21taXQgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uLiBJdCByZXBsYWNlcyB0aGUgbXV0ZXggKGBtbXBoLVx1MDAzZWxvY2tgKSB3aXRoIFJDVSBhbmQgYWRkcyBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iKClgLCBgUkVBRF9PTkNFYCwgYW5kIGBXUklURV9PTkNFYCkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHVwZGF0ZWQgdmFsdWUgb2YgYGhhc2hfbmV3YCBpcyB2aXNpYmxlIHRvIGFsbCByZWFkZXJzLCBhbmQgdGhhdCB0aGUgb3JkZXIgaXMgcHJlc2VydmVkLCBzbyBubyBzdGFsZSB2YWx1ZXMgYXJlIGNhY2hlZC4gIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlIGhhbmRsZXMgc3luY2hyb25pemF0aW9uLiBJdCdzIG1vdmluZyBmcm9tIGEgbW9yZSB0cmFkaXRpb25hbCBsb2NraW5nIG1lY2hhbmlzbSB0byBhIGxvY2stZnJlZSBhcHByb2FjaC4gR2l2ZW4gdGhpcyBpcyBhIGNvcmUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSwgSSBjYW4gYWxyZWFkeSB0ZWxsIHRoYXQgdGhpcyBpcyBnb2luZyB0byBiZSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdG8gZm9jdXMgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcyBwcmltZSB0YXJnZXQgZnV6emluZyBzeW1ib2xzLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIHRhcmdldHMgYXJlIGVuYWJsZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYEZVVEVYYCBhbmQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgYXJlIGVuYWJsZWQgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbkknbGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJ1dCBpdCBzZWVtcyBgRlVURVhfUFJJVkFURV9IQVNIYCBpc24ndCB1c2VyLXNlbGVjdGFibGUuIEl0J3MgbGlrZWx5IGVuYWJsZWQgYXV0b21hdGljYWxseSBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIEhvd2V2ZXIsIGl0J3Mgc3RpbGwgZ29vZCB0byBkb2N1bWVudCBhbmQgZW5zdXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50J3MgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIEJ1dCwgaW4gYW55IGNhc2UsIGBGVVRFWGAgaXMgdXNlciBzZWxlY3RhYmxlIGFuZCBzaG91bGQgYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjQ1LjkyNTYzNzQ1M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5Mjg2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZVVEVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTgyNz1jb25maWcgQkFTRV9TTUFMTFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4MzMtXFxuaW5pdC9LY29uZmlnOjE4MzQ6Y29uZmlnIEZVVEVYXFxuaW5pdC9LY29uZmlnLTE4MzUtXFx0Ym9vbCBcXFwiRW5hYmxlIGZ1dGV4IHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDMtXFxuaW5pdC9LY29uZmlnOjE4NDQ6Y29uZmlnIEZVVEVYX1BJXFxuaW5pdC9LY29uZmlnLTE4NDUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDgtXFxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbmluaXQvS2NvbmZpZy0xODUwLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xODUzLVxcbmluaXQvS2NvbmZpZzoxODU0OmNvbmZpZyBGVVRFWF9NUE9MXFxuaW5pdC9LY29uZmlnLTE4NTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnPTE4NTk9Y29uZmlnIEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcbi0tXFxuaW5pdC9LY29uZmlnLTE4NjEtXFxuaW5pdC9LY29uZmlnOjE4NjI6Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG5pbml0L0tjb25maWctMTg2My1cXHRkZWZfYm9vbCBGVVRFWCBcXHUwMDI2XFx1MDAyNiBIQVZFX0dFTkVSSUNfVkRTTyBcXHUwMDI2XFx1MDAyNiBHRU5FUklDX0lSUV9FTlRSWSBcXHUwMDI2XFx1MDAyNiBSU0VRIFxcdTAwMjZcXHUwMDI2IEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNTo0NS45Njk1NzAzMThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0ODE2NTg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGVVRFWCBDb25maWd1cmF0aW9uIGFuZCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBGVVRFWGAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgcHJldHR5IGZ1bmRhbWVudGFsIG9uZSBhdCB0aGF0LiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoYXQsIGFsb25nIHdpdGggYEZVVEVYX1BSSVZBVEVfSEFTSGAuIFRoZXNlIGFyZSBrZXkgYXNwZWN0cyBvZiB0aGUgc3lzdGVtLlxuXG5Ob3csIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLiBJIHJlY2FsbCBpdCBiZWluZyByZWxhdGVkIHRvIHRoZSBoYXNoaW5nIG1lY2hhbmlzbXMuIFJpZ2h0LCBsZXQgbWUgc2VlLi4uIEl0J3MgY2FsbGVkIGZyb20gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBBaCwgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YC4gUGVyZmVjdC4gVGhhdCBtYWtlcyBpdCBjbGVhciAtIHRob3NlIHR3bywgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCwgYXJlIHRoZSBzeW1ib2xzIEkgcmVhbGx5IG5lZWQgdG8gZm9jdXMgb24uIFRoZXkgcmVwcmVzZW50IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBhbmQgdGhlIGtleSBhc3BlY3RzIHRvIGV4YW1pbmUuXG5cblJpZ2h0LCBJJ3ZlIGdvdCBhIGNsZWFyIHBpY3R1cmUsIGxldCBtZSBsb2cgdGhpcy4gSSdsbCBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODg4LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoyNTo1MC45MTc3MzkzNTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQ1MDk0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIixcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGFkZGluZyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gYGhhc2hfbmV3YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBwcmN0bGAgc3lzY2FsbCAoYFBSX0ZVVEVYX0hBU0hgKSBhbmQgcHJvY2VzcyBjbG9uaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCIsXG4gICAgXCJGVVRFWF9QUklWQVRFX0hBU0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gICAgXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBhZGRpbmcgYFJFQURfT05DRWAvYFdSSVRFX09OQ0VgIHRvIGBoYXNoX25ld2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gdGhhdCBpcyByZWFjaGFibGUgdmlhIHRoZSBgcHJjdGxgIHN5c2NhbGwgKGBQUl9GVVRFWF9IQVNIYCkgYW5kIHByb2Nlc3MgY2xvbmluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6NTAuOTk3MTk5NjA4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzExODI4Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MjU6NTAuOTk3ODIyOTk4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgzMTEyMDExODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIGFkZGluZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBhbmQgYSBtZW1vcnkgYmFycmllciAoc21wX3JtYikgZm9yIGFjY2Vzc2luZyBgbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZS9OVUxMLWRlcmVmIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0NTQU4gYW5kIEtBU0FOIHJlc3BlY3RpdmVseS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNGRmZWU4MmQwYmIzNTZlMjg0ZjAyODVkNDA0ZTk0MTI5ODJjMDAxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDQ6MjQ6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpcbiBcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cdTAwM2VoYXNoLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKSk7XG4gXHRpZiAoZnBoKSB7XG4gXHRcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xuLVx0XHRcdG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0V1JJVEVfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzg2LDEyICsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuK1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuK1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuK1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4rXHQgKi9cbitcdHNtcF9ybWIoKTtcbitcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4rXHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFxuIFx0XHRpZiAoZnBoKSB7XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIWN1ci1cdTAwM2VoYXNoX21hc2spIHtcbkBAIC0xODg5LDcgKzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0XHRcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZnJlZSA9IGZwaDtcbi1cdFx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3O1xuK1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjUwLjk5NzgyNzQyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzExMTc2MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV0ZXggQ29uY3VycmVuY3kgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG1tcGgtXHUwMDNlaGFzaF9uZXdgICh3aGljaCBpcywgaW4gZXNzZW5jZSwgYG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3YCkuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBhcm91bmQgYXNzaWdubWVudHMgYW5kIHJlYWRzIG9mIHRoaXMgdmFyaWFibGUuIFRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyBjb25jdXJyZW5jeSBidWcgZml4IHRvIG1lOyBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgYWRkcmVzc2luZyBhIGRhdGEgcmFjZSBvciBhIG1pc3NpbmcgbWVtb3J5IGJhcnJpZXIgaXNzdWUgd2l0aGluIHRoZSBmdXRleCBpbXBsZW1lbnRhdGlvbi4gV2UncmUgZXhwbGljaXRseSBvcmRlcmluZyBtZW1vcnkgb3BlcmF0aW9ucyB0byBlbnN1cmUgY29uc2lzdGVudCB2aXNpYmlsaXR5IGFjcm9zcyBkaWZmZXJlbnQgQ1BVcy5cblxuTG9va2luZyBjbG9zZXIsIHRoZSBgZnV0ZXhfcGl2b3RfcGVuZGluZygpYCBmdW5jdGlvbiBhbHNvIG5vdyBlbXBsb3lzIFJDVSAoUmVhZC1Db3B5IFVwZGF0ZSkgaW5zdGVhZCBvZiBhIG11dGV4LCBhbmQgY3J1Y2lhbGx5LCBhbiBgc21wX3JtYigpYCAoU3lzdGVtIE1lbW9yeSBCYXJyaWVyIFJlYWQpIGhhcyBiZWVuIGFkZGVkLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGZvY3VzIG9uIG1lbW9yeSBvcmRlcmluZy4gVGhlIGBzbXBfcm1iKClgIGluIHBhcnRpY3VsYXIgaXMgY3JpdGljYWw7IGl0IGVuc3VyZXMgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSBhbHNvIHNlZSB0aGUgbnVsbGluZyBvZiB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLCB3aGljaCBpcyBjcnVjaWFsIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIGR1cmluZyB0aGUgcGl2b3Qgb3BlcmF0aW9uLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFzcGVjdCwgSSBkb24ndCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IHdvdWxkIHRyaWdnZXIgS01TQU4uIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbnMsIGl0J3Mgbm90IGNoYW5naW5nIHRoZSBzaXplIG9mIGFueSBzdHJ1Y3R1cmVzIGluIHdheXMgdGhhdCB3b3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgaXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIHBhdGNoIGlzIHB1cmVseSBhYm91dCBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbi4gQW55IGlzc3VlcyB0aGlzIHBhdGNoIHdvdWxkIGFkZHJlc3MgYXJlIG1lbW9yeSBvcmRlcmluZyBidWdzLCBhbmQgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGlzIHBhdGNoIGlzIGFib3V0IGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBiYXJyaWVycywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYyLCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjI1OjU5LjMwOTAwNjYxMloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIGBtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXdgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vciBkb2VzIGl0IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBkYXRhIHJhY2VzIG9yIHVzZS1hZnRlci1mcmVlL05VTEwtZGVyZWYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQ1NBTiBhbmQgS0FTQU4gcmVzcGVjdGl2ZWx5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIGFkZGluZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBhbmQgYSBtZW1vcnkgYmFycmllciAoc21wX3JtYikgZm9yIGFjY2Vzc2luZyBgbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZS9OVUxMLWRlcmVmIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0NTQU4gYW5kIEtBU0FOIHJlc3BlY3RpdmVseS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowc5shl[1] Phase: Succeeded StartedAt: 2026-08-13 04:26:09 +0000 UTC FinishedAt: 2026-08-13 04:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 04:26:09 +0000 UTC FinishedAt: 2026-08-13 04:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[2] Phase: Succeeded StartedAt: 2026-08-13 04:26:09 +0000 UTC FinishedAt: 2026-08-13 08:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 04:26:09 +0000 UTC FinishedAt: 2026-08-13 08:11:51 +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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 04:26:09 +0000 UTC FinishedAt: 2026-08-13 04:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 04:26:09 +0000 UTC FinishedAt: 2026-08-13 04:26:15 +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-workflowc5shl/series-workflowc5shl-convert-artifact-335553395/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 04:26:20 +0000 UTC FinishedAt: 2026-08-13 04:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 04:26:20 +0000 UTC FinishedAt: 2026-08-13 04:42:35 +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:*4d9dcb79-47d2-48da-b4da-3cc32164c3a0,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-workflowc5shl/series-workflowc5shl-convert-artifact-335553395/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": "f913f9e5-5991-4573-b647-5d4325ac70ef", "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-workflowc5shl/series-workflowc5shl-build-action-1251640865/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 04:26:20 +0000 UTC FinishedAt: 2026-08-13 04:42:25 +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:*4d9dcb79-47d2-48da-b4da-3cc32164c3a0,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-workflowc5shl/series-workflowc5shl-convert-artifact-335553395/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": "f913f9e5-5991-4573-b647-5d4325ac70ef", "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-workflowc5shl/series-workflowc5shl-build-action-1251640865/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 04:42:35 +0000 UTC FinishedAt: 2026-08-13 04:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 04:42:35 +0000 UTC FinishedAt: 2026-08-13 04:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 04:42:35 +0000 UTC FinishedAt: 2026-08-13 04:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 04:42:35 +0000 UTC FinishedAt: 2026-08-13 04:42:39 +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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-workflowc5shl/series-workflowc5shl-convert-artifact-86204522/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 04:42:45 +0000 UTC FinishedAt: 2026-08-13 04:44:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 04:42:45 +0000 UTC FinishedAt: 2026-08-13 04:44:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f913f9e5-5991-4573-b647-5d4325ac70ef,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-workflowc5shl/series-workflowc5shl-build-action-1251640865/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-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 04:44:53 +0000 UTC FinishedAt: 2026-08-13 04:44:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 04:44:53 +0000 UTC FinishedAt: 2026-08-13 04:44:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 04:44:53 +0000 UTC FinishedAt: 2026-08-13 05:00:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 04:44:54 +0000 UTC FinishedAt: 2026-08-13 05:00:54 +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:*4d9dcb79-47d2-48da-b4da-3cc32164c3a0,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-workflowc5shl/series-workflowc5shl-convert-artifact-86204522/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": "a2e569b4-7d5b-4b0b-958e-2c41510172cf", "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-workflowc5shl/series-workflowc5shl-build-action-2007731342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 04:44:54 +0000 UTC FinishedAt: 2026-08-13 05:00:44 +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:*4d9dcb79-47d2-48da-b4da-3cc32164c3a0,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-workflowc5shl/series-workflowc5shl-convert-artifact-86204522/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": "a2e569b4-7d5b-4b0b-958e-2c41510172cf", "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-workflowc5shl/series-workflowc5shl-build-action-2007731342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 05:00:54 +0000 UTC FinishedAt: 2026-08-13 05:00:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 05:00:54 +0000 UTC FinishedAt: 2026-08-13 05:00:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 05:00:54 +0000 UTC FinishedAt: 2026-08-13 05:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 05:00:54 +0000 UTC FinishedAt: 2026-08-13 05:03:28 +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:*a2e569b4-7d5b-4b0b-958e-2c41510172cf,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-workflowc5shl/series-workflowc5shl-build-action-2007731342/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-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 05:03:38 +0000 UTC FinishedAt: 2026-08-13 08:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 05:03:38 +0000 UTC FinishedAt: 2026-08-13 08:11:51 +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:*f913f9e5-5991-4573-b647-5d4325ac70ef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a2e569b4-7d5b-4b0b-958e-2c41510172cf,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-workflowc5shl/series-workflowc5shl-build-action-1251640865/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-workflowc5shl/series-workflowc5shl-build-action-2007731342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 05:03:38 +0000 UTC FinishedAt: 2026-08-13 05:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 05:03:38 +0000 UTC FinishedAt: 2026-08-13 05:03:54 +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-workflowc5shl/series-workflowc5shl-convert-artifact-612514815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 05:03:38 +0000 UTC FinishedAt: 2026-08-13 05:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 05:03:38 +0000 UTC FinishedAt: 2026-08-13 05:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 05:03:38 +0000 UTC FinishedAt: 2026-08-13 05:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 05:04:01 +0000 UTC FinishedAt: 2026-08-13 08:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5shl[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":"e2e27cdc-c55d-45f2-ad21-1e3ab38221dc","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-13 05:04:01 +0000 UTC FinishedAt: 2026-08-13 08:11:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f913f9e5-5991-4573-b647-5d4325ac70ef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a2e569b4-7d5b-4b0b-958e-2c41510172cf,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-workflowc5shl/series-workflowc5shl-build-action-1251640865/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-workflowc5shl/series-workflowc5shl-build-action-2007731342/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-workflowc5shl/series-workflowc5shl-convert-artifact-612514815/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,}