Name: series-workflowjzk5p Phase: Succeeded StartedAt: 2026-08-28 20:26:58 +0000 UTC FinishedAt: 2026-08-29 00:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[0] Phase: Succeeded StartedAt: 2026-08-28 20:26:58 +0000 UTC FinishedAt: 2026-08-28 20:30:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[0].run-triage Phase: Succeeded StartedAt: 2026-08-28 20:26:58 +0000 UTC FinishedAt: 2026-08-28 20:30:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "73e3f0710014fe6d4ed98cfc02292f6121db7558", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "73e3f0710014fe6d4ed98cfc02292f6121db7558", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "0c417af7-7d8b-4207-9f06-b21c9c083aaf" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_mmu_page_fault", "x86_emulate_instruction" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfcGFnZV9mYXVsdCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIGlzc3VlIGluIEtWTSB3aGVyZSBhIGZhdWx0aW5nIEdQQSB3YXMgcmV1c2VkIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlIGhhcmR3YXJlIHBhZ2UgZmF1bHQgd2FzIGFuIGFjdHVhbCB3cml0ZSBhY2Nlc3MgdG8gdGhlIGZpbmFsIEdQQS4gSXQgaW50cm9kdWNlcyBhIG5ldyBib29sZWFuIGZpZWxkIGBncGFfd3JpdGVgIHRvIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGAgYW5kIGFuIGVtdWxhdGlvbiBmbGFnIGBFTVVMVFlQRV9QRl9XUklURWAuXG5cblRoZSBuZXcgZmllbGQgYGdwYV93cml0ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgYWxsb2NfZW11bGF0ZV9jdHh0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgY29weS10by11c2VyIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYW5kIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGNhY2hlZCBHUEEgaXMgb25seSByZXVzZWQgZm9yIHdyaXRlcyBkdXJpbmcgZW11bGF0aW9uIGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgZmluYWwgd3JpdGUgYWNjZXNzIChFTVVMVFlQRV9QRl9XUklURSksIHByZXZlbnRpbmcgdW5hdXRob3JpemVkIGd1ZXN0IG1lbW9yeSB3cml0ZXMuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29yZSBWTSBleGVjdXRpb24gcGF0aHMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBwYWdlIGZhdWx0IGVtdWxhdGlvbiwgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZTUwY2E3YjhmMGE4NzJjOGZlODkwYTk4MmI5MzhiMzk2ZDc1NDhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjA6Mjg6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuaW5kZXggM2UzNzVhZjE1YzAzNS4uYWNlY2E5ZDNhMTZkMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuQEAgLTM1NCw4ICYjNDM7MzU0LDkgQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQge1xuIFx0Ym9vbCBoYXZlX2V4Y2VwdGlvbjtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGV4Y2VwdGlvbjtcbiBcbi1cdC8qIEdQQSBhdmFpbGFibGUgKi9cbiYjNDM7XHQvKiBHUEEgYW5kIHdyaXRlIGFjY2VzcyBzdXBwbGllZCBieSBhIGhhcmR3YXJlIHBhZ2UgZmF1bHQuICovXG4gXHRib29sIGdwYV9hdmFpbGFibGU7XG4mIzQzO1x0Ym9vbCBncGFfd3JpdGU7XG4gXHRncGFfdCBncGFfdmFsO1xuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uMjIzNjk4Y2JiOWJlNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC02NjMyLDYgJiM0Mzs2NjMyLDE2IEBAIGludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyXG4gXHRcdHJldHVybiByO1xuIFxuIGVtdWxhdGU6XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHdyaXRlIGR1cmluZyBhIGd1ZXN0IHBhZ2Ugd2FsayBkb2VzIG5vdCBhdXRob3JpemUgdGhlIGluc3RydWN0aW9uXG4mIzQzO1x0ICogaXRzZWxmIHRvIHdyaXRlIHRvIHRoZSBmYXVsdGluZyBHUEEuICBSZXF1aXJlIGEgZmluYWwgd3JpdGUgYWNjZXNzXG4mIzQzO1x0ICogYmVmb3JlIGFsbG93aW5nIHRoZSBlbXVsYXRvciB0byByZXVzZSB0aGUgR1BBIGZvciB3cml0ZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRpcmVjdCBcdTAwMjZcdTAwMjYgKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1dSSVRFX01BU0spIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfR1VFU1RfRklOQUxfTUFTSykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEoZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfR1VFU1RfUEFHRV9NQVNLKSlcbiYjNDM7XHRcdGVtdWxhdGlvbl90eXBlIHw9IEVNVUxUWVBFX1BGX1dSSVRFO1xuJiM0MztcbiBcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcbiBcdFx0XHRcdCAgICAgICBpbnNuX2xlbik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uOGM0NmFhMzQ2OGMyZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTA4OCw4ICYjNDM7NTA4OCwxMyBAQCBzdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKnZhbCxcbiBcdCAqIE5vdGUsIHRoaXMgY2Fubm90IGJlIHVzZWQgb24gc3RyaW5nIG9wZXJhdGlvbnMgc2luY2Ugc3RyaW5nXG4gXHQgKiBvcGVyYXRpb24gdXNpbmcgcmVwIHdpbGwgb25seSBoYXZlIHRoZSBpbml0aWFsIEdQQSBmcm9tIHRoZSBOUEZcbiBcdCAqIG9jY3VycmVkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXG4mIzQzO1x0ICogdGhlIEdQQSBmb3Igd3JpdGVzIG9ubHkgaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSBmaW5hbCB3cml0ZSBhY2Nlc3M7XG4mIzQzO1x0ICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuXG4gXHQgKi9cbi1cdGlmIChjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgXHUwMDI2XHUwMDI2IGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmIChjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgXHUwMDI2XHUwMDI2ICghd3JpdGUgfHwgY3R4dC1cdTAwM2VncGFfd3JpdGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoYWRkciBcdTAwMjYgflBBR0VfTUFTSykgPT0gKGN0eHQtXHUwMDNlZ3BhX3ZhbCBcdTAwMjYgflBBR0VfTUFTSykpIHtcbiBcdFx0Z3BhID0gY3R4dC1cdTAwM2VncGFfdmFsO1xuIFx0XHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xuQEAgLTU5MzksNiAmIzQzOzU5NDQsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXHUwMDI2Y3NfZGIsIFx1MDAyNmNzX2wpO1xuIFxuIFx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XG4mIzQzO1x0Y3R4dC1cdTAwM2VncGFfd3JpdGUgPSBmYWxzZTtcbiBcdGN0eHQtXHUwMDNlZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7XG4gXHRjdHh0LVx1MDAzZXRmID0gKGN0eHQtXHUwMDNlZWZsYWdzIFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xuIFxuQEAgLTY0NTUsNiAmIzQzOzY0NjEsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuIFx0XHQvKiBXaXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgY3IyIGNvbnRhaW5zIGEgR1ZBIG9yIG5HUEEuICovXG4gXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gubW11LVx1MDAzZXJvb3Rfcm9sZS5kaXJlY3QpIHtcbiBcdFx0XHRjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgPSB0cnVlO1xuJiM0MztcdFx0XHRjdHh0LVx1MDAzZWdwYV93cml0ZSA9IGVtdWxhdGlvbl90eXBlIFx1MDAyNiBFTVVMVFlQRV9QRl9XUklURTtcbiBcdFx0XHRjdHh0LVx1MDAzZWdwYV92YWwgPSBjcjJfb3JfZ3BhO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggMGY1OTE5YjA5MmU0Ny4uMmRkNDU2YWQzZTJkNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5AQCAtNDA3LDYgJiM0Mzs0MDcsOSBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2VcbiAgKlx0XHQgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuXG4gICpcbiYjNDM7ICogRU1VTFRZUEVfUEZfV1JJVEUgLSBTZXQgd2l0aCBFTVVMVFlQRV9QRiB3aGVuIGhhcmR3YXJlIHJlcG9ydHMgYSB3cml0ZSB0byB0aGVcbiYjNDM7ICpcdFx0ICAgICBmaW5hbCBHUEEsIG5vdCBhbiBpbXBsaWNpdCBndWVzdCBwYWdlLXRhYmxlIGFjY2Vzcy5cbiYjNDM7ICpcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XG4gICpcdFx0XHRcdCBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmdcbiAgKlx0XHRcdFx0IGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLlxuQEAgLTQ0NSw2ICYjNDM7NDQ4LDcgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbiAjZGVmaW5lIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAoMSBcdTAwM2NcdTAwM2MgNylcbiAjZGVmaW5lIEVNVUxUWVBFX1dSSVRFX1BGX1RPX1NQXHQgICAgKDEgXHUwMDNjXHUwMDNjIDgpXG4gI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UXHQgICAgKDEgXHUwMDNjXHUwMDNjIDkpXG4mIzQzOyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVcdCAgICBCSVQoMTApXG4gXG4gI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpXHQoKHUzMikoKHYpIFx1MDAyNiAweGZmKSBcdTAwM2NcdTAwM2MgMTYpXG4gI2RlZmluZSBFTVVMVFlQRV9HRVRfU09GVF9JTlRfVkVDVE9SKGUpXHQoKChlKSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfcGFnZV9mYXVsdCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBhbmQgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY2FjaGVkIEdQQSBpcyBvbmx5IHJldXNlZCBmb3Igd3JpdGVzIGR1cmluZyBlbXVsYXRpb24gaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSBmaW5hbCB3cml0ZSBhY2Nlc3MgKEVNVUxUWVBFX1BGX1dSSVRFKSwgcHJldmVudGluZyB1bmF1dGhvcml6ZWQgZ3Vlc3QgbWVtb3J5IHdyaXRlcy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIFZNIGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IHBhZ2UgZmF1bHQgZW11bGF0aW9uLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdlNTBjYTdiOGYwYTg3MmM4ZmU4OTBhOTgyYjkzOGIzOTZkNzU0OGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyOCAyMDoyODowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKaW5kZXggM2UzNzVhZjE1YzAzNS4uYWNlY2E5ZDNhMTZkMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKQEAgLTM1NCw4ICYjNDM7MzU0LDkgQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgewogCWJvb2wgaGF2ZV9leGNlcHRpb247CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZXhjZXB0aW9uOwogCi0JLyogR1BBIGF2YWlsYWJsZSAqLwomIzQzOwkvKiBHUEEgYW5kIHdyaXRlIGFjY2VzcyBzdXBwbGllZCBieSBhIGhhcmR3YXJlIHBhZ2UgZmF1bHQuICovCiAJYm9vbCBncGFfYXZhaWxhYmxlOwomIzQzOwlib29sIGdwYV93cml0ZTsKIAlncGFfdCBncGFfdmFsOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDA2NGVjYzMzYjkyNjcuLjIyMzY5OGNiYjliZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNjYzMiw2ICYjNDM7NjYzMiwxNiBAQCBpbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycgogCQlyZXR1cm4gcjsKIAogZW11bGF0ZToKJiM0MzsJLyoKJiM0MzsJICogQSB3cml0ZSBkdXJpbmcgYSBndWVzdCBwYWdlIHdhbGsgZG9lcyBub3QgYXV0aG9yaXplIHRoZSBpbnN0cnVjdGlvbgomIzQzOwkgKiBpdHNlbGYgdG8gd3JpdGUgdG8gdGhlIGZhdWx0aW5nIEdQQS4gIFJlcXVpcmUgYSBmaW5hbCB3cml0ZSBhY2Nlc3MKJiM0MzsJICogYmVmb3JlIGFsbG93aW5nIHRoZSBlbXVsYXRvciB0byByZXVzZSB0aGUgR1BBIGZvciB3cml0ZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGlyZWN0ICZhbXA7JmFtcDsgKGVycm9yX2NvZGUgJmFtcDsgUEZFUlJfV1JJVEVfTUFTSykgJmFtcDsmYW1wOwomIzQzOwkgICAgKGVycm9yX2NvZGUgJmFtcDsgUEZFUlJfR1VFU1RfRklOQUxfTUFTSykgJmFtcDsmYW1wOwomIzQzOwkgICAgIShlcnJvcl9jb2RlICZhbXA7IFBGRVJSX0dVRVNUX1BBR0VfTUFTSykpCiYjNDM7CQllbXVsYXRpb25fdHlwZSB8PSBFTVVMVFlQRV9QRl9XUklURTsKJiM0MzsKIAlyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyX29yX2dwYSwgZW11bGF0aW9uX3R5cGUsIGluc24sCiAJCQkJICAgICAgIGluc25fbGVuKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCA3OTQ2OGRkZmU0NzM2Li44YzQ2YWEzNDY4YzJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC01MDg4LDggJiM0Mzs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLAogCSAqIE5vdGUsIHRoaXMgY2Fubm90IGJlIHVzZWQgb24gc3RyaW5nIG9wZXJhdGlvbnMgc2luY2Ugc3RyaW5nCiAJICogb3BlcmF0aW9uIHVzaW5nIHJlcCB3aWxsIG9ubHkgaGF2ZSB0aGUgaW5pdGlhbCBHUEEgZnJvbSB0aGUgTlBGCiAJICogb2NjdXJyZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBndWVzdCBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBpbnN0cnVjdGlvbiBzaW5jZSB0aGUgZmF1bHQuICBSZXVzZQomIzQzOwkgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzczsKJiM0MzsJICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuCiAJICovCi0JaWYgKGN0eHQtJmd0O2dwYV9hdmFpbGFibGUgJmFtcDsmYW1wOyBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSAmYW1wOyZhbXA7CiYjNDM7CWlmIChjdHh0LSZndDtncGFfYXZhaWxhYmxlICZhbXA7JmFtcDsgKCF3cml0ZSB8fCBjdHh0LSZndDtncGFfd3JpdGUpICZhbXA7JmFtcDsKJiM0MzsJICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpICZhbXA7JmFtcDsKIAkgICAgKGFkZHIgJmFtcDsgflBBR0VfTUFTSykgPT0gKGN0eHQtJmd0O2dwYV92YWwgJmFtcDsgflBBR0VfTUFTSykpIHsKIAkJZ3BhID0gY3R4dC0mZ3Q7Z3BhX3ZhbDsKIAkJcmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTsKQEAgLTU5MzksNiAmIzQzOzU5NDQsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJa3ZtX3g4Nl9jYWxsKGdldF9jc19kYl9sX2JpdHMpKHZjcHUsICZhbXA7Y3NfZGIsICZhbXA7Y3NfbCk7CiAKIAljdHh0LSZndDtncGFfYXZhaWxhYmxlID0gZmFsc2U7CiYjNDM7CWN0eHQtJmd0O2dwYV93cml0ZSA9IGZhbHNlOwogCWN0eHQtJmd0O2VmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpOwogCWN0eHQtJmd0O3RmID0gKGN0eHQtJmd0O2VmbGFncyAmYW1wOyBYODZfRUZMQUdTX1RGKSAhPSAwOwogCkBAIC02NDU1LDYgJiM0Mzs2NDYxLDcgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKIAkJLyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqLwogCQlpZiAodmNwdS0mZ3Q7YXJjaC5tbXUtJmd0O3Jvb3Rfcm9sZS5kaXJlY3QpIHsKIAkJCWN0eHQtJmd0O2dwYV9hdmFpbGFibGUgPSB0cnVlOwomIzQzOwkJCWN0eHQtJmd0O2dwYV93cml0ZSA9IGVtdWxhdGlvbl90eXBlICZhbXA7IEVNVUxUWVBFX1BGX1dSSVRFOwogCQkJY3R4dC0mZ3Q7Z3BhX3ZhbCA9IGNyMl9vcl9ncGE7CiAJCX0KIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oCmluZGV4IDBmNTkxOWIwOTJlNDcuLjJkZDQ1NmFkM2UyZDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmgKQEAgLTQwNyw2ICYjNDM7NDA3LDkgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2UKICAqCQkgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuCiAgKgomIzQzOyAqIEVNVUxUWVBFX1BGX1dSSVRFIC0gU2V0IHdpdGggRU1VTFRZUEVfUEYgd2hlbiBoYXJkd2FyZSByZXBvcnRzIGEgd3JpdGUgdG8gdGhlCiYjNDM7ICoJCSAgICAgZmluYWwgR1BBLCBub3QgYW4gaW1wbGljaXQgZ3Vlc3QgcGFnZS10YWJsZSBhY2Nlc3MuCiYjNDM7ICoKICAqIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAtIFNldCB3aGVuIHRoZSBlbXVsYXRvciBzaG91bGQgdXBkYXRlIGludGVycnVwdGliaWxpdHkKICAqCQkJCSBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmcKICAqCQkJCSBhbiBpbnN0cnVjdGlvbiAoYWZ0ZXIgY29tcGxldGluZyB1c2Vyc3BhY2UgSS9PKS4KQEAgLTQ0NSw2ICYjNDM7NDQ4LDcgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxICZsdDsmbHQ7IDcpCiAjZGVmaW5lIEVNVUxUWVBFX1dSSVRFX1BGX1RPX1NQCSAgICAoMSAmbHQ7Jmx0OyA4KQogI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UCSAgICAoMSAmbHQ7Jmx0OyA5KQomIzQzOyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEUJICAgIEJJVCgxMCkKIAogI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpCSgodTMyKSgodikgJmFtcDsgMHhmZikgJmx0OyZsdDsgMTYpCiAjZGVmaW5lIEVNVUxUWVBFX0dFVF9TT0ZUX0lOVF9WRUNUT1IoZSkJKCgoZSkgJmd0OyZndDsgMTYpICZhbXA7IDB4ZmYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgS1ZNIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3MgYSBmZXcga2V5IEtWTS94ODYgZmlsZXM6IGBrdm1fZW11bGF0ZS5oYCwgYG1tdS9tbXUuY2AsIGB4ODYuY2AsIGFuZCBgeDg2LmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBjb3JlIEtWTSBzdHVmZiwgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY29kZToKCkluIGBtbXUuY2AsIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGhhcyBiZWVuIHVwZGF0ZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgbm93IHNldHRpbmcgYEVNVUxUWVBFX1BGX1dSSVRFYCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zOiB3aGVuIGRpcmVjdCBhY2Nlc3MgaXMgYWxsb3dlZCwgYSB3cml0ZSBlcnJvciBpcyBmbGFnZ2VkLCB0aGUgZ3Vlc3QgZmluYWwgYml0IGlzIHNldCwgYW5kIHRoZSBndWVzdCBwYWdlIGJpdCBpcyBub3Qgc2V0LiBUaGlzIGlzIGludGVyZXN0aW5nIOKAkyBpdCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIHdyaXRlIGZhdWx0cyB3aXRoaW4gdGhlIE1NVSBlbXVsYXRpb24uCgpUaGVuLCBsb29raW5nIGF0IGB4ODYuY2AsIEkgc2VlIHNvbWUgY2hhbmdlcyBpbiBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYC4gVGhlcmUmIzM5O3Mgbm93IGEgY2hlY2sgdGhhdCBzZWVtcyB0byBkZXRlcm1pbmUgd2hlbiBhIEdQQSBjYW4gYmUgdXNlZCBmb3Igd3JpdGVzLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCAoYGN0eHRgKSBhbmQgd2hldGhlciB0aGUgYGVtdWxhdG9yX2Nhbl91c2VfZ3BhKClgIGZ1bmN0aW9uIGlzIHRydWUuIFRoZSBgaW5pdF9lbXVsYXRlX2N0eHRgIGZ1bmN0aW9uIHNldHMgYGN0eHQtJmd0O2dwYV93cml0ZWAgdG8gZmFsc2UgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgc2V0cyBpdCB0byBgZW11bGF0aW9uX3R5cGUgJmFtcDsgRU1VTFRZUEVfUEZfV1JJVEU7YC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGBFTVVMVFlQRV9QRl9XUklURWAgaXMgYmVpbmcgdXNlZCwgdG8gZGV0ZXJtaW5lLCBvbiBhIHBlci1pbnN0cnVjdGlvbiBiYXNpcywgd2hldGhlciB0aGUgR1BBIGNhbiBiZSB1c2VkIGZvciB3cml0ZSBvcGVyYXRpb25zLgoKU28sIGluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaXMgYWJvdXQgcmVmaW5pbmcgdGhlIGxvZ2ljIGZvciBLVk0mIzM5O3MgeDg2IGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIEdQQSByZXVzZSBmb3Igd3JpdGVzIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGRpcmVjdGx5IHRvdWNoZXMgY29yZSB4ODYgdmlydHVhbGl6YXRpb24gZnVuY3Rpb25hbGl0eSBhbmQsIGNydWNpYWxseSwgaXMgKmFic29sdXRlbHkqIGluIHNjb3BlIGZvciBmdXp6aW5nLCBnaXZlbiBob3cgc3l6a2FsbGVyIGhpdHMgS1ZNIHRocm91Z2ggYC9kZXYva3ZtYC4gQW55IG1pc2NhbGN1bGF0aW9uIGhlcmUgY291bGQgaGF2ZSByZWFsbHkgbmFzdHkgaW1wbGljYXRpb25zLgoKTm93IEkgbmVlZCB0byBzdGFydCB1c2luZyBteSB1c3VhbCB0b29scyB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcywgc2VlIHdoYXQgc3ltYm9scyBhcmUgaW1wYWN0ZWQsIGFuZCBjb25maXJtIHRoYXQgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGludGVycGxheSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvcnJlY3QuIFRpbWUgdG8gZ2V0IHNvbWUgbW9yZSBkYXRhIGFuZCB2ZXJpZnkgbXkgaW5pdGlhbCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X3BhZ2VfZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTE0Nj12b2lkIGt2bV9pbml0X3NoYWRvd19lcHRfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBleGVjb25seSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQ5LVxuYXJjaC94ODYva3ZtL21tdS5oOjE1MDppbnQga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTUxLVx0XHQgICAgICAgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ4OTA9aW50IGt2bV9oYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlcnJvcl9jb2RlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDkxOC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDkxOTpcdFx0ciA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlLCBpbnNuLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTIwLVx0XHRcdFx0aW5zbl9sZW4pO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjQ3ND1zdGF0aWMgaW50IGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTY2LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTY3OmludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU2OC1cdFx0ICAgICAgIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDctfVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjQ4OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fbW11X3BhZ2VfZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjQ5LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3ND1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyNC1cdHRyYWNlX2t2bV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMjU6XHRyYyA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjYtXHRcdFx0XHRjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpID9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTgzPXN0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTE1LVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDoxMTY6XHRyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgTlVMTCwgMCk7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTExNy19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MDA1PXN0YXRpYyBpbnQgaGFuZGxlX2VwdF9taXNjb25maWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjAyMi1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjAyMzpcdHJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBQRkVSUl9SU1ZEX01BU0ssIE5VTEwsIDApO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDI0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjE1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBLVk0gaXMgcHJvcGVybHkgc2V0IHVwIGZvciB4ODYuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGZ1bmRhbWVudGFsIG9wdGlvbnMgYXJlIGRlZmluZWQsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgS1ZNIG9wdGlvbnMgYXJlIGVuYWJsZWQgYW5kIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY29uZmxpY3Rpbmcgc2V0dGluZ3Mgd2l0aCBvdGhlciB2aXJ0dWFsaXphdGlvbiBtb2R1bGVzIG9yIGNvcmUgeDg2IGZlYXR1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llczsgYXJlIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucyBjb3JyZWN0bHkgZW5hYmxlZCBpbiB0aGUgQklPUy9maXJtd2FyZSBhbmQgaXMgdGhlIGtlcm5lbCBjb25maWd1cmVkIHRvIGRldGVjdCBhbmQgdXNlIHRoZW0/IEFueSBpc3N1ZXMgaGVyZSBhbmQgS1ZNIHdpbGwgYmUgZGVhZCBpbiB0aGUgd2F0ZXIuIEkmIzM5O2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBvciBmZWF0dXJlcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBLVk0mIzM5O3MgcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3Igb24geDg2LiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSBldmVyeXRoaW5nIGlzIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBNYWtlZmlsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYSBjcnVjaWFsIGZpbGU6IGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgd2hhdGV2ZXIgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcsIG9yIHdoYXRldmVyIGVuaGFuY2VtZW50IEkmIzM5O20gd29ya2luZyBvbiwgbGlrZWx5IGhhcyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIEtWTSB4ODYgbW9kdWxlLiBUaGlzIE1ha2VmaWxlIGlzIHdoZXJlIGEgbG90IG9mIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQsIGNvbXBpbGF0aW9uIHRhcmdldHMgYXJlIHNldCB1cCwgYW5kIHVsdGltYXRlbHksIHRoZSBLVk0ga2VybmVsIG1vZHVsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUgZ2V0cyBidWlsdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmaWxlJiMzOTtzIGxvZ2ljIHRvIHNlZSB3aGVyZSBteSBjaGFuZ2VzIGZpdCBpbiBvciB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbXUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vTWFrZWZpbGU9OD1rdm0teVx0XHRcdCYjNDM7PSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIG1zcnMubyBwbXUubyByZWdzLm8gXFxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo5Olx0XHRcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEwLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjExOmt2bS0kKENPTkZJR19YODZfNjQpICYjNDM7PSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTIta3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICYjNDM7PSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gQmFzZWQgb24gdGhlIGlzc3VlLCBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBwb2tpbmcgYXJvdW5kIGluIHRoZSBLVk0gY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0YXJnZXQgd2lsbCBiZSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkgZmlndXJlIHRoZSBsaW5lcyBiZXR3ZWVuIDIwIGFuZCA2MCBhcmUgYSBnb29kIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEkmIzM5O20gaG9waW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gd2hhdGV2ZXImIzM5O3MgZ29uZSBhd3J5LiBUaGF0IHJhbmdlIHVzdWFsbHkgY292ZXJzIHNvbWUgb2YgdGhlIGNvcmUgZmVhdHVyZXMgYW5kIGRlcGVuZGVuY2llcywgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBzdGFydCB0aGUgaHVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5LCBvciBhbnkgaGludHMgYXQgdGhlIHJvb3QgY2F1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0Y29uZmlnIEtWTV9YODZcbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiAgMjI6XHRcdHNlbGVjdCBLVk1fQ09NTU9OXG4gIDIzOlx0XHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xuICAyNDpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDI2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcbiAgMjc6XHRcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuICAyODpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiAgMzA6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAzMTpcdFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxuICAzMjpcdFx0c2VsZWN0IFZIT1NUX1RBU0tcbiAgMzM6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbiAgMzQ6XHRcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxuICAzNTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDM2Olx0XHRzZWxlY3QgU0NIRURfSU5GT1xuICAzNzpcdFx0c2VsZWN0IFBFUkZfRVZFTlRTXG4gIDM4Olx0XHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcbiAgMzk6XHRcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxuICA0MDpcdFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxuICA0MTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbiAgNDI6XHRcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG4gIDQzOlx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgNDQ6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiAgNDU6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICA0NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXG4gIDQ3Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbiAgNDg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gIDQ5Olx0XHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcbiAgNTA6XHRcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIEtWTVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxuICA1NzpcdFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcbiAgNTg6XHRcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xuICA1OTpcdFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkludmVzdGlnYXRpbmcgS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIFRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gdGhlIGJyb2FkZXIgYFZJUlRVQUxJWkFUSU9OYCBjb250ZXh0LiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHZpcnR1YWxpemF0aW9uIGlzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IHRoZSB4ODYgbGV2ZWwgd2l0aGluIEtWTS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgdG8gdW5kZXJzdGFuZCByZWxhdGVkIG1vZHVsZXMgYW5kIGZsYWdzLiBJIGV4cGVjdCB0byBmaW5kIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIG1heWJlIGV2ZW4gc29tZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB0aGUgQ1BVJiMzOTtzIGNhcGFiaWxpdGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEtWTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdHNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuICAgOTpcdFx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCB5XG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuIG90aGVyXG4gIDEzOlx0XHQgIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxuICAxNDpcdFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEtWTV9YODZcbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiAgMjI6XHRcdHNlbGVjdCBLVk1fQ09NTU9OXG4gIDIzOlx0XHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xuICAyNDpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgS1ZNIGlzc3VlLCBhbmQgaW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIHRoZSBicm9hZGVyIGBWSVJUVUFMSVpBVElPTmAgc2V0dGluZy4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cy4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQsIHNvIEkmIzM5O2xsIHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgY2hhbmdlZCBmdW5jdGlvbnMuCgpGaXJzdCB1cCBpcyBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgd2hpY2ggcmVzaWRlcyB3aXRoaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBUaGVuLCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBGb2xsb3dpbmcgdGhhdCwgSSBzZWUgYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAsIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIGFsc28gd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBGaW5hbGx5LCBgaW5pdF9lbXVsYXRlX2N0eHRgIGlzIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLCBhbHNvIGZvdW5kIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgaWYgYGt2bV9tbXVfcGFnZV9mYXVsdGAgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYXJlIGV4cG9ydGVkLiBJIHJlbWVtYmVyIHNlZWluZyBgRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9tbXVfcGFnZV9mYXVsdCk7YCBhc3NvY2lhdGVkIHdpdGggYGt2bV9tbXVfcGFnZV9mYXVsdGAsIHNvIHRoYXQgb25lIGlzIGV4cG9ydGVkIGludGVybmFsbHkgdG8gS1ZNLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBleHBvcnQgb2YgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyB2aXNpYmlsaXR5IGFuZCB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz02NTY3PWludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDQtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY2NDU6XHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyX29yX2dwYSwgZW11bGF0aW9uX3R5cGUsIGluc24sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDYtXHRcdFx0XHQgICAgICAgaW5zbl9sZW4pO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01MTUzPXN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTIyNi1cdCAqIGFmdGVyIGNvbXBsZXRpbmcgZW11bGF0aW9uIChzZWUgdGhlIGNoZWNrIG9uIHZjcHUtXHUwMDNlbW1pb19uZWVkZWQgaW5cbmFyY2gveDg2L2t2bS94ODYuYzo1MjI3Olx0ICogeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKSkuXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTIyOC1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02MzM0PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTCh4ODZfZGVjb2RlX2VtdWxhdGVkX2luc3RydWN0aW9uKTtcbmFyY2gveDg2L2t2bS94ODYuYy02MzM1LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjYzMzY6aW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbmFyY2gveDg2L2t2bS94ODYuYy02MzM3LVx0XHRcdCAgICBpbnQgZW11bGF0aW9uX3R5cGUsIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjU1Nz1pbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bGF0aW9uX3R5cGUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU1OC17XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU1OTpcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCBlbXVsYXRpb25fdHlwZSwgTlVMTCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2MC19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTY1NjM9aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uX2Zyb21fYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2NS17XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU2NjpcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCAwLCBpbnNuLCBpbnNuX2xlbik7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2Ny19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTM3MT1pbnQgeDg2X2RlY29kZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsYXRpb25fdHlwZSxcbmFyY2gveDg2L2t2bS94ODYuaC0zNzItXHRcdFx0XHQgICAgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcbmFyY2gveDg2L2t2bS94ODYuaDozNzM6aW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbmFyY2gveDg2L2t2bS94ODYuaC0zNzQtXHRcdFx0ICAgIGludCBlbXVsYXRpb25fdHlwZSwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGFuZCBga3ZtX21tdV9wYWdlX2ZhdWx0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBhbmQgYGt2bV9tbXVfcGFnZV9mYXVsdGAuIFRoZXkmIzM5O3JlIGNsZWFybHkgaW50ZW5kZWQgYXMgQVBJIGVudHJ5cG9pbnRzLCBidXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBzdGF0aWMgb3IgaW5saW5lZC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlaXIgc2NvcGUg4oCTIGFyZSB0aGV5IGludGVuZGVkIGZvciBpbnRlcm5hbCBLVk0gdXNlLCBvciBhcmUgdGhleSBleHBvc2VkIGZvciBleHRlcm5hbCBtb2R1bGVzIHRvIGxldmVyYWdlPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGVpciB2aXNpYmlsaXR5LgoKSSYjMzk7bGwgc3RhcnQgd2l0aCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgbGluZSA2MzM2LCBpdCYjMzk7cyBkZWNsYXJlZCBhcyBgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKC4uLilgLCBzbyBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBpZiBpdCYjMzk7cyBwcm90ZWN0ZWQgc29tZWhvdy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBjaGVjayB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIGZvY3VzIGFyb3VuZCBsaW5lIDY1NTAsIHNlZSBpZiBhbnkgdXNhZ2UgcGF0dGVybnMgZW1lcmdlIHRoYXQgY2FuIGdpdmUgbWUgYSBjbHVlIGFib3V0IHRoZSBpbnRlbmRlZCBhdWRpZW5jZS4gUGVyaGFwcyBzb21lIHN0YXRpYyBkZWNsYXJhdGlvbnMgb3IgbWFjcm9zIGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjU0MDpcdFx0XHRcdF9fa3ZtX3NldF9yZmxhZ3ModmNwdSwgY3R4dC1cdTAwM2VlZmxhZ3MpO1xuNjU0MTpcdFx0XHR9XG42NTQyOlx0XG42NTQzOlx0XHRcdC8qXG42NTQ0Olx0XHRcdCAqIEZvciBTVEksIGludGVycnVwdHMgYXJlIHNoYWRvd2VkOyBzbyBLVk1fUkVRX0VWRU5UIHdpbGxcbjY1NDU6XHRcdFx0ICogZG8gbm90aGluZywgYW5kIGl0IHdpbGwgYmUgcmVxdWVzdGVkIGFnYWluIGFzIHNvb24gYXNcbjY1NDY6XHRcdFx0ICogdGhlIHNoYWRvdyBleHBpcmVzLiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gY2hlY2sgaGVyZSxcbjY1NDc6XHRcdFx0ICogYmVjYXVzZSBQT1BGIGhhcyBubyBpbnRlcnJ1cHQgc2hhZG93LlxuNjU0ODpcdFx0XHQgKi9cbjY1NDk6XHRcdFx0aWYgKHVubGlrZWx5KChjdHh0LVx1MDAzZWVmbGFncyBcdTAwMjYgfnJmbGFncykgXHUwMDI2IFg4Nl9FRkxBR1NfSUYpKVxuNjU1MDpcdFx0XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgdmNwdSk7XG42NTUxOlx0XHR9IGVsc2VcbjY1NTI6XHRcdFx0dmNwdS1cdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfdG9fdmNwdSA9IHRydWU7XG42NTUzOlx0XG42NTU0Olx0XHRyZXR1cm4gcjtcbjY1NTU6XHR9XG42NTU2Olx0XG42NTU3Olx0aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxhdGlvbl90eXBlKVxuNjU1ODpcdHtcbjY1NTk6XHRcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCBlbXVsYXRpb25fdHlwZSwgTlVMTCwgMCk7XG42NTYwOlx0fVxuNjU2MTpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbik7XG42NTYyOlx0XG42NTYzOlx0aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uX2Zyb21fYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbjY1NjQ6XHRcdFx0XHRcdFx0dm9pZCAqaW5zbiwgaW50IGluc25fbGVuKVxuNjU2NTpcdHtcbjY1NjY6XHRcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCAwLCBpbnNuLCBpbnNuX2xlbik7XG42NTY3Olx0fVxuNjU2ODpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbl9mcm9tX2J1ZmZlcik7XG42NTY5Olx0XG42NTcwOlx0c3RhdGljIGludCBjb21wbGV0ZV9mYXN0X3Bpb19vdXRfcG9ydF8weDdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjY1NzE6XHR7XG42NTcyOlx0XHR2Y3B1LVx1MDAzZWFyY2gucGlvLmNvdW50ID0gMDtcbjY1NzM6XHRcdHJldHVybiAxO1xuNjU3NDpcdH1cbjY1NzU6XHRcbjY1NzY6XHRzdGF0aWMgaW50IGNvbXBsZXRlX2Zhc3RfcGlvX291dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG42NTc3Olx0e1xuNjU3ODpcdFx0dmNwdS1cdTAwM2VhcmNoLnBpby5jb3VudCA9IDA7XG42NTc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjQ5CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0geDg2IEVtdWxhdGlvbiBhbmQgTU1VIENvZGUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHNvbWUgS1ZNIGNvZGUgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8geDg2IGVtdWxhdGlvbiBhbmQgdGhlIE1NVS4gSSBzZWUgdGhhdCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGlzIHJpZ2h0IHRoZXJlIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBhbmQgdGhlIGRlY2xhcmF0aW9uIGlzIGluIHRoZSBoZWFkZXIsIGB4ODYuaGAuIEl0JiMzOTtzIGNsZWFybHkgYSBjb3JlIGZ1bmN0aW9uLCBhcyBpdCYjMzk7cyBkaXJlY3RseSBjYWxsZWQgdGhyb3VnaG91dCBLVk0uIFNpbWlsYXJseSwgYGt2bV9tbXVfcGFnZV9mYXVsdGAgbGl2ZXMgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBkZWNsYXJlZCBpbiBgbW11LmhgLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3Mgb3Igb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLiBBbHJpZ2h0LCB0aGUgcmVsZXZhbnQgY29uZmlncyBzZWVtIHRvIGJlIGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBhbmQgYFZJUlRVQUxJWkFUSU9OYCDigJMgc3RhbmRhcmQgc3R1ZmYgZm9yIHZpcnR1YWxpemF0aW9uLCBlc3BlY2lhbGx5IHg4Ni4KCkJhc2VkIG9uIHRoZSBjb2RlIEkmIzM5O3ZlIHJldmlld2VkLCB0aGlzIGFyZWEgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIEtWTSB4ODYgTU1VIGFuZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMuIENydWNpYWxseSwgaXQgc2VlbXMgdG8gYmUgZGVhbGluZyB3aXRoIHNvbWUgdHJpY2t5IGlzc3VlcyBhcm91bmQgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyAoR1BBKSBjYWNoaW5nIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB3aGVuIHBhZ2UgZmF1bHRzIG9jY3VyLiBJdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSBpbmNvcnJlY3QgcmV1c2Ugb2YgY2FjaGVkIEdQQXMgZm9yIHdyaXRlcywgYSBidWcgdGhhdCYjMzk7cyB0aWVkIHRvIHBhZ2UgdGFibGUgd2FsayBmYXVsdHMgdmVyc3VzIGZpbmFsIHdyaXRlcy4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmaXguIFRoZSBmYWN0IHRoYXQgaXTigJlzIGFsbCByZWFjaGFibGUgaW4gUUVNVS9LVk0gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG1ha2VzIGl0IGFuIGV2ZW4gYmV0dGVyIHRhcmdldC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBrZXkgc3ltYm9scyBJIHdhbnQgdG8gZm9jdXMgb246IGBrdm1fbW11X3BhZ2VfZmF1bHRgIGFuZCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBZZXAsIHRob3NlIGFyZSB0aGUgb25lcy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZS4gWWVwLCBzdGlsbCBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIGBYODZfTE9DQUxfQVBJQ2AuIE1ha2VzIHNlbnNlLiBUaGUgQVBJQyBpcyBwcmV0dHkgc3RhbmRhcmQgb24geDg2IHN5c3RlbXMuCgpPa2F5LCBJJiMzOTttIHJlYWR5IHRvIGZvcm1hbGl6ZSBteSBmaW5kaW5ncyBhbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBhcmVhIGFuZCBrbm93IHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fbW11X3BhZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYW5kIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGNhY2hlZCBHUEEgaXMgb25seSByZXVzZWQgZm9yIHdyaXRlcyBkdXJpbmcgZW11bGF0aW9uIGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgZmluYWwgd3JpdGUgYWNjZXNzIChFTVVMVFlQRV9QRl9XUklURSksIHByZXZlbnRpbmcgdW5hdXRob3JpemVkIGd1ZXN0IG1lbW9yeSB3cml0ZXMuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29yZSBWTSBleGVjdXRpb24gcGF0aHMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBwYWdlIGZhdWx0IGVtdWxhdGlvbiwgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfcGFnZV9mYXVsdCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBhbmQgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY2FjaGVkIEdQQSBpcyBvbmx5IHJldXNlZCBmb3Igd3JpdGVzIGR1cmluZyBlbXVsYXRpb24gaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSBmaW5hbCB3cml0ZSBhY2Nlc3MgKEVNVUxUWVBFX1BGX1dSSVRFKSwgcHJldmVudGluZyB1bmF1dGhvcml6ZWQgZ3Vlc3QgbWVtb3J5IHdyaXRlcy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIFZNIGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IHBhZ2UgZmF1bHQgZW11bGF0aW9uLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIGlzc3VlIGluIEtWTSB3aGVyZSBhIGZhdWx0aW5nIEdQQSB3YXMgcmV1c2VkIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlIGhhcmR3YXJlIHBhZ2UgZmF1bHQgd2FzIGFuIGFjdHVhbCB3cml0ZSBhY2Nlc3MgdG8gdGhlIGZpbmFsIEdQQS4gSXQgaW50cm9kdWNlcyBhIG5ldyBib29sZWFuIGZpZWxkIGBncGFfd3JpdGVgIHRvIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGAgYW5kIGFuIGVtdWxhdGlvbiBmbGFnIGBFTVVMVFlQRV9QRl9XUklURWAuXG5cblRoZSBuZXcgZmllbGQgYGdwYV93cml0ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgYWxsb2NfZW11bGF0ZV9jdHh0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgY29weS10by11c2VyIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2U1MGNhN2I4ZjBhODcyYzhmZTg5MGE5ODJiOTM4YjM5NmQ3NTQ4ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIwOjI4OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAppbmRleCAzZTM3NWFmMTVjMDM1Li5hY2VjYTlkM2ExNmQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaApAQCAtMzU0LDggJiM0MzszNTQsOSBAQCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCB7CiAJYm9vbCBoYXZlX2V4Y2VwdGlvbjsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247CiAKLQkvKiBHUEEgYXZhaWxhYmxlICovCiYjNDM7CS8qIEdQQSBhbmQgd3JpdGUgYWNjZXNzIHN1cHBsaWVkIGJ5IGEgaGFyZHdhcmUgcGFnZSBmYXVsdC4gKi8KIAlib29sIGdwYV9hdmFpbGFibGU7CiYjNDM7CWJvb2wgZ3BhX3dyaXRlOwogCWdwYV90IGdwYV92YWw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggMDY0ZWNjMzNiOTI2Ny4uMjIzNjk4Y2JiOWJlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC02NjMyLDYgJiM0Mzs2NjMyLDE2IEBAIGludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyCiAJCXJldHVybiByOwogCiBlbXVsYXRlOgomIzQzOwkvKgomIzQzOwkgKiBBIHdyaXRlIGR1cmluZyBhIGd1ZXN0IHBhZ2Ugd2FsayBkb2VzIG5vdCBhdXRob3JpemUgdGhlIGluc3RydWN0aW9uCiYjNDM7CSAqIGl0c2VsZiB0byB3cml0ZSB0byB0aGUgZmF1bHRpbmcgR1BBLiAgUmVxdWlyZSBhIGZpbmFsIHdyaXRlIGFjY2VzcwomIzQzOwkgKiBiZWZvcmUgYWxsb3dpbmcgdGhlIGVtdWxhdG9yIHRvIHJldXNlIHRoZSBHUEEgZm9yIHdyaXRlcy4KJiM0MzsJICovCiYjNDM7CWlmIChkaXJlY3QgJmFtcDsmYW1wOyAoZXJyb3JfY29kZSAmYW1wOyBQRkVSUl9XUklURV9NQVNLKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZXJyb3JfY29kZSAmYW1wOyBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKGVycm9yX2NvZGUgJmFtcDsgUEZFUlJfR1VFU1RfUEFHRV9NQVNLKSkKJiM0MzsJCWVtdWxhdGlvbl90eXBlIHw9IEVNVUxUWVBFX1BGX1dSSVRFOwomIzQzOwogCXJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbiwKIAkJCQkgICAgICAgaW5zbl9sZW4pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjhjNDZhYTM0NjhjMmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTUwODgsOCAmIzQzOzUwODgsMTMgQEAgc3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsCiAJICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmcKIAkgKiBvcGVyYXRpb24gdXNpbmcgcmVwIHdpbGwgb25seSBoYXZlIHRoZSBpbml0aWFsIEdQQSBmcm9tIHRoZSBOUEYKIAkgKiBvY2N1cnJlZC4KJiM0MzsJICoKJiM0MzsJICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlCiYjNDM7CSAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgZmluYWwgd3JpdGUgYWNjZXNzOwomIzQzOwkgKiBvdGhlcndpc2UsIHJlY2hlY2sgcGVybWlzc2lvbnMgZm9yIHRoZSBkZWNvZGVkIGFjY2Vzcy4KIAkgKi8KLQlpZiAoY3R4dC0mZ3Q7Z3BhX2F2YWlsYWJsZSAmYW1wOyZhbXA7IGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpICZhbXA7JmFtcDsKJiM0MzsJaWYgKGN0eHQtJmd0O2dwYV9hdmFpbGFibGUgJmFtcDsmYW1wOyAoIXdyaXRlIHx8IGN0eHQtJmd0O2dwYV93cml0ZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgJmFtcDsmYW1wOwogCSAgICAoYWRkciAmYW1wOyB+UEFHRV9NQVNLKSA9PSAoY3R4dC0mZ3Q7Z3BhX3ZhbCAmYW1wOyB+UEFHRV9NQVNLKSkgewogCQlncGEgPSBjdHh0LSZndDtncGFfdmFsOwogCQlyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpOwpAQCAtNTkzOSw2ICYjNDM7NTk0NCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgJmFtcDtjc19kYiwgJmFtcDtjc19sKTsKIAogCWN0eHQtJmd0O2dwYV9hdmFpbGFibGUgPSBmYWxzZTsKJiM0MzsJY3R4dC0mZ3Q7Z3BhX3dyaXRlID0gZmFsc2U7CiAJY3R4dC0mZ3Q7ZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7CiAJY3R4dC0mZ3Q7dGYgPSAoY3R4dC0mZ3Q7ZWZsYWdzICZhbXA7IFg4Nl9FRkxBR1NfVEYpICE9IDA7CiAKQEAgLTY0NTUsNiAmIzQzOzY0NjEsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLAogCQkvKiBXaXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgY3IyIGNvbnRhaW5zIGEgR1ZBIG9yIG5HUEEuICovCiAJCWlmICh2Y3B1LSZndDthcmNoLm1tdS0mZ3Q7cm9vdF9yb2xlLmRpcmVjdCkgewogCQkJY3R4dC0mZ3Q7Z3BhX2F2YWlsYWJsZSA9IHRydWU7CiYjNDM7CQkJY3R4dC0mZ3Q7Z3BhX3dyaXRlID0gZW11bGF0aW9uX3R5cGUgJmFtcDsgRU1VTFRZUEVfUEZfV1JJVEU7CiAJCQljdHh0LSZndDtncGFfdmFsID0gY3IyX29yX2dwYTsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggMGY1OTE5YjA5MmU0Ny4uMmRkNDU2YWQzZTJkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtNDA3LDYgJiM0Mzs0MDcsOSBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLAogICogRU1VTFRZUEVfUEYgLSBTZXQgd2hlbiBhbiBpbnRlcmNlcHRlZCAjUEYgdHJpZ2dlcnMgdGhlIGVtdWxhdGlvbiwgaW4gd2hpY2ggY2FzZQogICoJCSB0aGUgQ1IyL0dQQSB2YWx1ZSBwYXNzIG9uIHRoZSBzdGFjayBpcyB2YWxpZC4KICAqCiYjNDM7ICogRU1VTFRZUEVfUEZfV1JJVEUgLSBTZXQgd2l0aCBFTVVMVFlQRV9QRiB3aGVuIGhhcmR3YXJlIHJlcG9ydHMgYSB3cml0ZSB0byB0aGUKJiM0MzsgKgkJICAgICBmaW5hbCBHUEEsIG5vdCBhbiBpbXBsaWNpdCBndWVzdCBwYWdlLXRhYmxlIGFjY2Vzcy4KJiM0MzsgKgogICogRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUIC0gU2V0IHdoZW4gdGhlIGVtdWxhdG9yIHNob3VsZCB1cGRhdGUgaW50ZXJydXB0aWJpbGl0eQogICoJCQkJIHN0YXRlIGFuZCBpbmplY3Qgc2luZ2xlLXN0ZXAgI0RCcyBhZnRlciBza2lwcGluZwogICoJCQkJIGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLgpAQCAtNDQ1LDYgJiM0Mzs0NDgsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLAogI2RlZmluZSBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgKDEgJmx0OyZsdDsgNykKICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1AJICAgICgxICZsdDsmbHQ7IDgpCiAjZGVmaW5lIEVNVUxUWVBFX1NLSVBfU09GVF9JTlQJICAgICgxICZsdDsmbHQ7IDkpCiYjNDM7I2RlZmluZSBFTVVMVFlQRV9QRl9XUklURQkgICAgQklUKDEwKQogCiAjZGVmaW5lIEVNVUxUWVBFX1NFVF9TT0ZUX0lOVF9WRUNUT1IodikJKCh1MzIpKCh2KSAmYW1wOyAweGZmKSAmbHQ7Jmx0OyAxNikKICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKQkoKChlKSAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBLTVNBTiBSaXNrcyBpbiB0aGUgS1ZNIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gbmVlZHMgdG8gYmUgY29uY2VybmVkIGFib3V0LiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICpkb2luZyouCgpBbHJpZ2h0LCBJIHNlZSB0aGUgY2hhbmdlczoKCjEuICBXZSYjMzk7cmUgYWRkaW5nIGEgYm9vbGVhbiwgYGdwYV93cml0ZWAsIHRvIHRoZSBgeDg2X2VtdWxhdGVfY3R4dGAgc3RydWN0IGluIGBrdm1fZW11bGF0ZS5oYC4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuCjIuICBJbiBgbW11LmNgLCB0aGUgYGt2bV9tbXVfcGFnZV9mYXVsdCgpYCBmdW5jdGlvbiBub3cgc2V0cyBgZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7YCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBwYWdlIGZhdWx0cyBhbmQgd3JpdGUgb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBvdXIgZmxhZyBmb3IgYSB3cml0ZSBiZWluZyBhdHRlbXB0ZWQuCjMuICBgeDg2LmNgIHNlZW1zIHRvIGJlIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGlzIHVwZGF0ZWQuIFdlJiMzOTtyZSBtb2RpZnlpbmcgdGhlIGNvbmRpdGlvbiBpbiBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKClgIHRvIGluY2x1ZGUgYGN0eHQtJmd0O2dwYV93cml0ZWAuICBDcnVjaWFsbHksIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBleHBsaWNpdGx5ICppbml0aWFsaXplcyogYGN0eHQtJmd0O2dwYV93cml0ZWAgdG8gYGZhbHNlYCwganVzdCBsaWtlIGBncGFfYXZhaWxhYmxlYC4gR29vZC4gQW5kIGxhdGVyIGluIHRoZSBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAgZnVuY3Rpb24gd2Ugc2V0IGBjdHh0LSZndDtncGFfd3JpdGUgPSBlbXVsYXRpb25fdHlwZSAmYW1wOyBFTVVMVFlQRV9QRl9XUklURTtgIGlmIHRoZSBNTVUgaXMgb3BlcmF0aW5nIGluIGEgZGlyZWN0IG1vZGUuCjQuICBGaW5hbGx5LCB0aGVyZSYjMzk7cyBhIG5ldyBkZWZpbml0aW9uLCBgRU1VTFRZUEVfUEZfV1JJVEVgLCBpbiBgeDg2LmhgLiBUaGlzIGlzIHRoZSBiaXQgZmxhZyBiZWluZyB1c2VkIGZvciB0aGUgd3JpdGUgY29uZGl0aW9uLgoKU28sIGZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlIGBncGFfd3JpdGVgIGZsYWcgaXMgdXNlZCB0byB0cmFjayB3aGV0aGVyIHRoZSBmYXVsdCB3YXMgYSB3cml0ZSBhbmQgYGluaXRfZW11bGF0ZV9jdHh0YCBlbnN1cmVzIHRoYXQgdGhlIGZsYWcgaXMgaW5pdGlhbGl6ZWQgdG8gZmFsc2UuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgbG9va3MgbGlrZSBpdCYjMzk7cyBkZXNpZ25lZCB0byB0cmFjayBhIHdyaXRlLCB3aGljaCB3aWxsIHByZXZlbnQgdW5pbml0aWFsaXplZCByZWFkcy4gV2UgaW5pdGlhbGl6ZSwgd2Ugc2V0IGl0LCBhbmQgd2UgY2hlY2sgaXQuIEhvd2V2ZXIsIHRoZSB0cnVlIHRlc3QgaXMgd2hldGhlciB0aGlzIGlzIHRoZSBvbmx5IHBhdGggYnkgd2hpY2ggZ3BhX3dyaXRlIGNhbiBiZSBzZXQuCgpOb3csIGxldCBtZSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBgaW5pdF9lbXVsYXRlX2N0eHRgIGFuZCBhbnl3aGVyZSB0aGF0IGB4ODZfZW11bGF0ZV9jdHh0YCBpcyB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBncmVwcGVyIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBpbml0aWFsaXphdGlvbiBvciB1c2FnZSBwb2ludHMsIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBvbmx5IHBhdGggYW5kIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGludGVyYWN0aW9ucyBJJiMzOTttIG1pc3NpbmcuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgd2hlcmUgYGdwYV93cml0ZWAgY291bGQgYmUgcG90ZW50aWFsbHkgcmVhZCB1bmluaXRpYWxpemVkLCBvciB3aGVyZSBpdCBnZXRzIHNldCBpbiBhbiB1bmV4cGVjdGVkIHdheS4gSSYjMzk7bGwgc2VhcmNoIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgaW5pdF9lbXVsYXRlX2N0eHRgIGFuZCBhbHNvIGxvb2sgZm9yIGFueSBjYWxscyBkaXJlY3RseSBvbiBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbml0X2VtdWxhdGVfY3R4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9NTkyMj1zdGF0aWMgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmFsbG9jX2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU5MzgtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTkzOTpzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTk0MC17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU5Njc9dm9pZCBrdm1faW5qZWN0X3JlYWxtb2RlX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBpcnEsIGludCBpbmNfZWlwKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01OTcxLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjU5NzI6XHRpbml0X2VtdWxhdGVfY3R4dCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy01OTczLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02MzE5PWludCB4ODZfZGVjb2RlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxhdGlvbl90eXBlLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02MzI0LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjYzMjU6XHRpbml0X2VtdWxhdGVfY3R4dCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy02MzI2LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05MDc2PWludCBrdm1fdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgdHNzX3NlbGVjdG9yLCBpbnQgaWR0X2luZGV4LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05MTAwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjkxMDE6XHRpbml0X2VtdWxhdGVfY3R4dCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy05MTAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHg4NiBFbXVsYXRpb24gQ29udGV4dCBBbGxvY2F0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IHRoZSBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGlzIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBNeSBndXQgZmVlbGluZyBpcyB0aGUgYW5zd2VycyBJIG5lZWQgYXJlIGx1cmtpbmcgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIHNvIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmVzIDU5MjIgYW5kIDY0NTUuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBzZWUgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBhbmQgaW5pdGlhbCBzZXR1cCBpbiBkZXRhaWwuIEhvcGVmdWxseSwgdGhvc2Ugc3BvdHMgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzdHJ1Y3R1cmUgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTIwOlx0fVxuNTkyMTpcdFxuNTkyMjpcdHN0YXRpYyBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqYWxsb2NfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjU5MjM6XHR7XG41OTI0Olx0XHRzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dDtcbjU5MjU6XHRcbjU5MjY6XHRcdGN0eHQgPSBrbWVtX2NhY2hlX3phbGxvYyh4ODZfZW11bGF0b3JfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG41OTI3Olx0XHRpZiAoIWN0eHQpIHtcbjU5Mjg6XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSB2Y3B1JiMzOTtzIGVtdWxhdG9yXFxuXCYjMzQ7KTtcbjU5Mjk6XHRcdFx0cmV0dXJuIE5VTEw7XG41OTMwOlx0XHR9XG41OTMxOlx0XG41OTMyOlx0XHRjdHh0LVx1MDAzZXZjcHUgPSB2Y3B1O1xuNTkzMzpcdFx0Y3R4dC1cdTAwM2VvcHMgPSBcdTAwMjZlbXVsYXRlX29wcztcbjU5MzQ6XHRcdHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQgPSBjdHh0O1xuNTkzNTpcdFxuNTkzNjpcdFx0cmV0dXJuIGN0eHQ7XG41OTM3Olx0fVxuNTkzODpcdFxuNTkzOTpcdHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjU5NDA6XHR7XG41OTQxOlx0XHRzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCA9IHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQ7XG41OTQyOlx0XHRpbnQgY3NfZGIsIGNzX2w7XG41OTQzOlx0XG41OTQ0Olx0XHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXHUwMDI2Y3NfZGIsIFx1MDAyNmNzX2wpO1xuNTk0NTpcdFxuNTk0NjpcdFx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XG41OTQ3Olx0XHRjdHh0LVx1MDAzZWdwYV93cml0ZSA9IGZhbHNlO1xuNTk0ODpcdFx0Y3R4dC1cdTAwM2VlZmxhZ3MgPSBrdm1fZ2V0X3JmbGFncyh2Y3B1KTtcbjU5NDk6XHRcdGN0eHQtXHUwMDNldGYgPSAoY3R4dC1cdTAwM2VlZmxhZ3MgXHUwMDI2IFg4Nl9FRkxBR1NfVEYpICE9IDA7XG41OTUwOlx0XG41OTUxOlx0XHRjdHh0LVx1MDAzZWVpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTtcbjU5NTI6XHRcdGN0eHQtXHUwMDNlbW9kZSA9ICghaXNfcHJvdG1vZGUodmNwdSkpXHRcdD8gWDg2RU1VTF9NT0RFX1JFQUwgOlxuNTk1MzpcdFx0XHQgICAgIChjdHh0LVx1MDAzZWVmbGFncyBcdTAwMjYgWDg2X0VGTEFHU19WTSlcdD8gWDg2RU1VTF9NT0RFX1ZNODYgOlxuNTk1NDpcdFx0XHQgICAgIChjc19sIFx1MDAyNlx1MDAyNiBpc19sb25nX21vZGUodmNwdSkpXHQ/IFg4NkVNVUxfTU9ERV9QUk9UNjQgOlxuNTk1NTpcdFx0XHQgICAgIGNzX2RiXHRcdFx0XHQ/IFg4NkVNVUxfTU9ERV9QUk9UMzIgOlxuNTk1NjpcdFx0XHRcdFx0XHRcdFx0ICBYODZFTVVMX01PREVfUFJPVDE2O1xuNTk1NzpcdFx0Y3R4dC1cdTAwM2VpbnRlcnJ1cHRpYmlsaXR5ID0gMDtcbjU5NTg6XHRcdGN0eHQtXHUwMDNlaGF2ZV9leGNlcHRpb24gPSBmYWxzZTtcbjU5NTk6XHRcdGN0eHQtXHUwMDNlZXhjZXB0aW9uLnZlY3RvciA9IC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTkxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLVk0mIzM5O3MgeDg2IEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGFyZ2V0aW5nIGFyb3VuZCBsaW5lIDY0NTAuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIHN0cnVjdHVyZSBvZiB0aGUga2VybmVsLCB0aGF0IGZpbGUgaXMgYWxtb3N0IGNlcnRhaW5seSB3aGVyZSB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCB0aGUgeDg2LXNwZWNpZmljIEtWTSBleHRlbnNpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBpbnRlcmFjdGlvbiBsb2dpYyBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgaG9zdCBpbiB0aGlzIGFyZWEuIFByb2JhYmx5IHJlbGF0ZWQgdG8gdmlydHVhbGl6YXRpb24gb2YgQ1BVIHJlZ2lzdGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0NDA6XHRcdCAqIHdyaXRpbmcgaW5zdHJ1Y3Rpb24sIHRyeSB0byB1bnByb3RlY3QgdGhlIGdmbiwgaS5lLiB6YXAgc2hhZG93IHBhZ2VzLFxuNjQ0MTpcdFx0ICogYW5kIHJldHJ5IHRoZSBpbnN0cnVjdGlvbiwgYXMgdGhlIHZDUFUgaXMgbGlrZWx5IG5vIGxvbmdlciB1c2luZyB0aGVcbjY0NDI6XHRcdCAqIGdmbiBhcyBhIHBhZ2UgdGFibGUuXG42NDQzOlx0XHQgKi9cbjY0NDQ6XHRcdGlmICgoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX0FMTE9XX1JFVFJZX1BGKSBcdTAwMjZcdTAwMjZcbjY0NDU6XHRcdCAgICAheDg2X3BhZ2VfdGFibGVfd3JpdGluZ19pbnNuKGN0eHQpIFx1MDAyNlx1MDAyNlxuNjQ0NjpcdFx0ICAgIGt2bV9tbXVfdW5wcm90ZWN0X2dmbl9hbmRfcmV0cnkodmNwdSwgY3IyX29yX2dwYSkpXG42NDQ3Olx0XHRcdHJldHVybiAxO1xuNjQ0ODpcdFxuNjQ0OTpcdFx0LyogdGhpcyBpcyBuZWVkZWQgZm9yIHZtd2FyZSBiYWNrZG9vciBpbnRlcmZhY2UgdG8gd29yayBzaW5jZSBpdFxuNjQ1MDpcdFx0ICAgY2hhbmdlcyByZWdpc3RlcnMgdmFsdWVzICBkdXJpbmcgSU8gb3BlcmF0aW9uICovXG42NDUxOlx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfZnJvbV92Y3B1KSB7XG42NDUyOlx0XHRcdHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSA9IGZhbHNlO1xuNjQ1MzpcdFx0XHRlbXVsYXRvcl9pbnZhbGlkYXRlX3JlZ2lzdGVyX2NhY2hlKGN0eHQpO1xuNjQ1NDpcdFx0fVxuNjQ1NTpcdFxuNjQ1NjpcdHJlc3RhcnQ6XG42NDU3Olx0XHRpZiAoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX1BGKSB7XG42NDU4Olx0XHRcdC8qIFNhdmUgdGhlIGZhdWx0aW5nIEdQQSAoY3IyKSBpbiB0aGUgYWRkcmVzcyBmaWVsZCAqL1xuNjQ1OTpcdFx0XHRjdHh0LVx1MDAzZWV4Y2VwdGlvbi5hZGRyZXNzID0gY3IyX29yX2dwYTtcbjY0NjA6XHRcbjY0NjE6XHRcdFx0LyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqL1xuNjQ2MjpcdFx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1tdS1cdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XG42NDYzOlx0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gdHJ1ZTtcbjY0NjQ6XHRcdFx0XHRjdHh0LVx1MDAzZWdwYV93cml0ZSA9IGVtdWxhdGlvbl90eXBlIFx1MDAyNiBFTVVMVFlQRV9QRl9XUklURTtcbjY0NjU6XHRcdFx0XHRjdHh0LVx1MDAzZWdwYV92YWwgPSBjcjJfb3JfZ3BhO1xuNjQ2NjpcdFx0XHR9XG42NDY3Olx0XHR9IGVsc2Uge1xuNjQ2ODpcdFx0XHQvKiBTYW5pdGl6ZSB0aGUgYWRkcmVzcyBvdXQgb2YgYW4gYWJ1bmRhbmNlIG9mIHBhcmFub2lhLiAqL1xuNjQ2OTpcdFx0XHRjdHh0LVx1MDAzZWV4Y2VwdGlvbi5hZGRyZXNzID0gMDtcbjY0NzA6XHRcdH1cbjY0NzE6XHRcbjY0NzI6XHRcdC8qXG42NDczOlx0XHQgKiBDaGVjayBMMSYjMzk7cyBpbnN0cnVjdGlvbiBpbnRlcmNlcHRzIHdoZW4gZW11bGF0aW5nIGluc3RydWN0aW9ucyBmb3JcbjY0NzQ6XHRcdCAqIEwyLCB1bmxlc3MgS1ZNIGlzIHJlLWVtdWxhdGluZyBhIHByZXZpb3VzbHkgZGVjb2RlZCBpbnN0cnVjdGlvbixcbjY0NzU6XHRcdCAqIGUuZy4gdG8gY29tcGxldGUgdXNlcnNwYWNlIEkvTywgaW4gd2hpY2ggY2FzZSBLVk0gaGFzIGFscmVhZHlcbjY0NzY6XHRcdCAqIGNoZWNrZWQgdGhlIGludGVyY2VwdHMuXG42NDc3Olx0XHQgKi9cbjY0Nzg6XHRcdHIgPSB4ODZfZW11bGF0ZV9pbnNuKGN0eHQsIGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2XG42NDc5Olx0XHRcdFx0XHQgICAhKGVtdWxhdGlvbl90eXBlIFx1MDAyNiBFTVVMVFlQRV9OT19ERUNPREUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIE1NVSBDb2RlKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIEtWTSBhbmQgc3BlY2lmaWNhbGx5IHRoZSBNTVUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyB0aGluZyAqcmVhbGx5KiB3b3Jrcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCBmaWxlLiBJJiMzOTttIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgNjYzMi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdmFudGFnZSBwb2ludCB0byBnZXQgdG8gZ3JpcHMgd2l0aCB3aGF0JiMzOTtzIGdvaW5nIG9uIGF0IGEgZGV0YWlsZWQgbGV2ZWwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHBhcnQgb2YgdGhlIGNvZGUgcmV2ZWFscyBhYm91dCB0aGUgTU1VJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NjE1Olx0XG42NjE2Olx0XHRpZiAociA9PSBSRVRfUEZfRklYRUQpXG42NjE3Olx0XHRcdHZjcHUtXHUwMDNlc3RhdC5wZl9maXhlZCYjNDM7JiM0Mzs7XG42NjE4Olx0XHRlbHNlIGlmIChyID09IFJFVF9QRl9FTVVMQVRFKVxuNjYxOTpcdFx0XHR2Y3B1LVx1MDAzZXN0YXQucGZfZW11bGF0ZSYjNDM7JiM0Mzs7XG42NjIwOlx0XHRlbHNlIGlmIChyID09IFJFVF9QRl9TUFVSSU9VUylcbjY2MjE6XHRcdFx0dmNwdS1cdTAwM2VzdGF0LnBmX3NwdXJpb3VzJiM0MzsmIzQzOztcbjY2MjI6XHRcbjY2MjM6XHRcdC8qXG42NjI0Olx0XHQgKiBOb25lIG9mIGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoKSwga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCksIG9yXG42NjI1Olx0XHQgKiBrdm1fbW11X3dyaXRlX3Byb3RlY3RfZmF1bHQoKSByZXR1cm4gUkVUX1BGX0NPTlRJTlVFLlxuNjYyNjpcdFx0ICoga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCkgb25seSB1c2VzIFJFVF9QRl9DT05USU5VRSBpbnRlcm5hbGx5IHRvXG42NjI3Olx0XHQgKiBpbmRpY2F0ZSBjb250aW51aW5nIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIHVudGlsIHRvIHRoZSBmaW5hbFxuNjYyODpcdFx0ICogcGFnZSB0YWJsZSBtYXBwaW5nIHBoYXNlLlxuNjYyOTpcdFx0ICovXG42NjMwOlx0XHRXQVJOX09OX09OQ0UociA9PSBSRVRfUEZfQ09OVElOVUUpO1xuNjYzMTpcdFx0aWYgKHIgIT0gUkVUX1BGX0VNVUxBVEUpXG42NjMyOlx0XHRcdHJldHVybiByO1xuNjYzMzpcdFxuNjYzNDpcdGVtdWxhdGU6XG42NjM1Olx0XHQvKlxuNjYzNjpcdFx0ICogQSB3cml0ZSBkdXJpbmcgYSBndWVzdCBwYWdlIHdhbGsgZG9lcyBub3QgYXV0aG9yaXplIHRoZSBpbnN0cnVjdGlvblxuNjYzNzpcdFx0ICogaXRzZWxmIHRvIHdyaXRlIHRvIHRoZSBmYXVsdGluZyBHUEEuICBSZXF1aXJlIGEgZmluYWwgd3JpdGUgYWNjZXNzXG42NjM4Olx0XHQgKiBiZWZvcmUgYWxsb3dpbmcgdGhlIGVtdWxhdG9yIHRvIHJldXNlIHRoZSBHUEEgZm9yIHdyaXRlcy5cbjY2Mzk6XHRcdCAqL1xuNjY0MDpcdFx0aWYgKGRpcmVjdCBcdTAwMjZcdTAwMjYgKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1dSSVRFX01BU0spIFx1MDAyNlx1MDAyNlxuNjY0MTpcdFx0ICAgIChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLKSBcdTAwMjZcdTAwMjZcbjY2NDI6XHRcdCAgICAhKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX0dVRVNUX1BBR0VfTUFTSykpXG42NjQzOlx0XHRcdGVtdWxhdGlvbl90eXBlIHw9IEVNVUxUWVBFX1BGX1dSSVRFO1xuNjY0NDpcdFxuNjY0NTpcdFx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIGNyMl9vcl9ncGEsIGVtdWxhdGlvbl90eXBlLCBpbnNuLFxuNjY0NjpcdFx0XHRcdFx0ICAgICAgIGluc25fbGVuKTtcbjY2NDc6XHR9XG42NjQ4Olx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9tbXVfcGFnZV9mYXVsdCk7XG42NjQ5Olx0XG42NjUwOlx0dm9pZCBrdm1fbW11X3ByaW50X3NwdGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCBjb25zdCBjaGFyICptc2cpXG42NjUxOlx0e1xuNjY1MjpcdFx0dTY0IHNwdGVzW1BUNjRfUk9PVF9NQVhfTEVWRUwgJiM0MzsgMV07XG42NjUzOlx0XHRpbnQgcm9vdF9sZXZlbCwgbGVhZiwgbGV2ZWw7XG42NjU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlIGBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2VgIGZ1bmN0aW9uIHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgd2UgbWlnaHQgZmluZCBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzLCB1bmRvdWJ0ZWRseSwgYSBjb3JlIGNvbXBvbmVudCBvZiBob3cgdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBtZW1vcnkgb3BlcmF0aW9ucyBhdCB0aGUgc2luZ2xlLXBhZ2UgbGV2ZWwgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHRoZSBncml0dHkgZGV0YWlscyBvZiBlbXVsYXRpbmcgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIGEgZ3Vlc3QmIzM5O3MgbWVtb3J5IHNwYWNlIHJlc2lkZS4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHRyYXBwaW5nIGFuZCBoYW5kbGluZyBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMsIHBhZ2UgZmF1bHRzLCBvciBwb3RlbnRpYWxseSBldmVuIE1NSU8gKE1lbW9yeS1NYXBwZWQgSS9PKSBzY2VuYXJpb3MsIGRlcGVuZGluZyBvbiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEnigJlsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgYW55IHNwZWNpZmljIHg4NiBpbnN0cnVjdGlvbnMgb3IgZmVhdHVyZXMgdGhhdCBpdCBsZXZlcmFnZXMgZm9yIGVmZmljaWVuY3kgYW5kIGNvcnJlY3RuZXNzLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBpdCB2YWxpZGF0ZXMgdGhlIGd1ZXN0JiMzOTtzIHBoeXNpY2FsIGFkZHJlc3MsIGhhbmRsZXMgcG90ZW50aWFsIHRyYW5zbGF0aW9uIGlzc3VlcywgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBob3N0JiMzOTtzIG1lbW9yeSB0byBwZXJmb3JtIHRoZSBkYXRhIHRyYW5zZmVyLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB1c2VkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgY29uY3VycmVudCBhY2Nlc3MsIGFuZCB3aGF0IHRoZSBlcnJvciBoYW5kbGluZyBsb29rcyBsaWtlIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcuIEkgd2FudCB0byBzZWUgaWYgYW55IG9wdGltaXphdGlvbnMgbGlrZSBwYWdlIGNhY2hpbmcgYXJlIGltcGxlbWVudGVkIGhlcmUsIGJlY2F1c2UsIGlmIHRoZXkgYXJlLCB0aGF0JiMzOTtzIHdoYXQgd2lsbCBiZSBrZXkuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIG1lbW9yeSBlbXVsYXRpb24sIHNvIHRoZSBkZXZpbCB3aWxsIGJlIGluIHRoZSBkZXRhaWxzLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIGxvdHMgdG8gdW5yYXZlbCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwODA6XHRcdGludCBoYW5kbGVkLCByZXQ7XG41MDgxOlx0XHRib29sIHdyaXRlID0gb3BzLVx1MDAzZXdyaXRlO1xuNTA4MjpcdFx0c3RydWN0IGt2bV9tbWlvX2ZyYWdtZW50ICpmcmFnO1xuNTA4MzpcdFx0c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQgPSB2Y3B1LVx1MDAzZWFyY2guZW11bGF0ZV9jdHh0O1xuNTA4NDpcdFxuNTA4NTpcdFx0LypcbjUwODY6XHRcdCAqIElmIHRoZSBleGl0IHdhcyBkdWUgdG8gYSBOUEYgd2UgbWF5IGFscmVhZHkgaGF2ZSBhIEdQQS5cbjUwODc6XHRcdCAqIElmIHRoZSBHUEEgaXMgcHJlc2VudCwgdXNlIGl0IHRvIGF2b2lkIHRoZSBHVkEgdG8gR1BBIHRhYmxlIHdhbGsuXG41MDg4Olx0XHQgKiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIG9uIHN0cmluZyBvcGVyYXRpb25zIHNpbmNlIHN0cmluZ1xuNTA4OTpcdFx0ICogb3BlcmF0aW9uIHVzaW5nIHJlcCB3aWxsIG9ubHkgaGF2ZSB0aGUgaW5pdGlhbCBHUEEgZnJvbSB0aGUgTlBGXG41MDkwOlx0XHQgKiBvY2N1cnJlZC5cbjUwOTE6XHRcdCAqXG41MDkyOlx0XHQgKiBUaGUgZ3Vlc3QgbWF5IGhhdmUgY2hhbmdlZCB0aGUgaW5zdHJ1Y3Rpb24gc2luY2UgdGhlIGZhdWx0LiAgUmV1c2VcbjUwOTM6XHRcdCAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgZmluYWwgd3JpdGUgYWNjZXNzO1xuNTA5NDpcdFx0ICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuXG41MDk1Olx0XHQgKi9cbjUwOTY6XHRcdGlmIChjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgXHUwMDI2XHUwMDI2ICghd3JpdGUgfHwgY3R4dC1cdTAwM2VncGFfd3JpdGUpIFx1MDAyNlx1MDAyNlxuNTA5NzpcdFx0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFx1MDAyNlx1MDAyNlxuNTA5ODpcdFx0ICAgIChhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cdTAwM2VncGFfdmFsIFx1MDAyNiB+UEFHRV9NQVNLKSkge1xuNTA5OTpcdFx0XHRncGEgPSBjdHh0LVx1MDAzZWdwYV92YWw7XG41MTAwOlx0XHRcdHJldCA9IHZjcHVfaXNfbW1pb19ncGEodmNwdSwgYWRkciwgZ3BhLCB3cml0ZSk7XG41MTAxOlx0XHR9IGVsc2Uge1xuNTEwMjpcdFx0XHRyZXQgPSB2Y3B1X21taW9fZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyLCBcdTAwMjZncGEsIGV4Y2VwdGlvbiwgd3JpdGUpO1xuNTEwMzpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNTEwNDpcdFx0XHRcdHJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDtcbjUxMDU6XHRcdH1cbjUxMDY6XHRcbjUxMDc6XHRcdC8qXG41MTA4Olx0XHQgKiBJZiB0aGUgbWVtb3J5IGlzIG5vdCBfa25vd25fIHRvIGJlIGVtdWxhdGVkIE1NSU8sIGF0dGVtcHQgdG8gYWNjZXNzXG41MTA5Olx0XHQgKiBndWVzdCBtZW1vcnkuICBJZiBhY2Nlc3NpbmcgZ3Vlc3QgbWVtb3J5IGZhaWxzLCBlLmcuIGJlY2F1c2UgdGhlcmUmIzM5O3NcbjUxMTA6XHRcdCAqIG5vIG1lbXNsb3QsIHRoZW4gaGFuZGxlIHRoZSBhY2Nlc3MgYXMgTU1JTy4gIE5vdGUsIHRyZWF0aW5nIHRoZVxuNTExMTpcdFx0ICogYWNjZXNzIGFzIGVtdWxhdGVkIE1NSU8gaXMgdGVjaG5pY2FsbHkgd3JvbmcgaWYgdGhlcmUgaXMgYSBtZW1zbG90LFxuNTExMjpcdFx0ICogaS5lLiBpZiBhY2Nlc3NpbmcgaG9zdCB1c2VyIG1lbW9yeSBmYWlsZWQsIGJ1dCB0aGlzIGhhcyBiZWVuIEtWTSYjMzk7c1xuNTExMzpcdFx0ICogaGlzdG9yaWNhbCBBQkkgZm9yIGRlY2FkZXMuXG41MTE0Olx0XHQgKi9cbjUxMTU6XHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlcmVhZF93cml0ZV9ndWVzdCh2Y3B1LCBncGEsIHZhbCwgYnl0ZXMpKVxuNTExNjpcdFx0XHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbjUxMTc6XHRcbjUxMTg6XHRcdC8qXG41MTE5Olx0XHQgKiBBdHRlbXB0IHRvIGhhbmRsZSBlbXVsYXRlZCBNTUlPIHdpdGhpbiB0aGUga2VybmVsLCBlLmcuIGZvciBhY2Nlc3Nlc1xuNTEyMDpcdFx0ICogdG8gYW4gaW4ta2VybmVsIGxvY2FsIG9yIEkvTyBBUElDLCBvciB0byBhbiBpb2V2ZW50ZmQgcmFuZ2UgYXR0YWNoZWRcbjUxMjE6XHRcdCAqIHRvIE1NSU8gYnVzLiAgSWYgdGhlIGFjY2VzcyBpc24mIzM5O3QgZnVsbHkgcmVzb2x2ZWQsIGluc2VydCBhbiBNTUlPXG41MTIyOlx0XHQgKiBmcmFnbWVudCB3aXRoIHRoZSByZWxldmFudCBkZXRhaWxzLlxuNTEyMzpcdFx0ICovXG41MTI0Olx0XHRoYW5kbGVkID0gb3BzLVx1MDAzZXJlYWRfd3JpdGVfbW1pbyh2Y3B1LCBncGEsIGJ5dGVzLCB2YWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI3CgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDc4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gZmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgcGF0Y2ggcmVxdWlyZXMgYE5lZWRzS01TQU49dHJ1ZWAuIEkgbmVlZCB0byBzeXN0ZW1hdGljYWxseSBldmFsdWF0ZSB0aGUgY29kZSBhZ2FpbnN0IHRoZSBkb2N1bWVudGVkIGNyaXRlcmlhIGZvciBLTVNBTiBlbmFibGVtZW50LCBrZWVwaW5nIGluIG1pbmQgdGhhdCB0aGUgcHJpbWFyeSByaXNrcyBLTVNBTiBmbGFncyBhcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuCgpGaXJzdCwgSSB3ZW50IHRocm91Z2ggdGhlIGNyaXRlcmlhOiBLTVNBTiBpcyByZWxldmFudCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZHMsIGludHJvZHVjZXMgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGludm9sdmVzIGFsbG9jYXRpbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXIsIG9yIG1vZGlmaWVzIGJvdW5kcyBjaGVja3MgaW4gd2F5cyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIE90aGVyd2lzZSwgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgc3VmZmljZS4KCk5vdywgbGV0JiMzOTtzIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZi4gSSYjMzk7dmUgZ290IGEgbmV3IGJvb2xlYW4gdmFyaWFibGUsIGBncGFfd3JpdGVgLCBpbnRyb2R1Y2VkIGluIGB4ODZfZW11bGF0ZV9jdHh0YC4gSW1tZWRpYXRlbHksIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBleHBsaWNpdGx5IHplcm9lcyB0aGlzIHdpdGggYGN0eHQtJmd0O2dwYV93cml0ZSA9IGZhbHNlYC4gRnVydGhlcm1vcmUsIHRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgbWVhbmluZyB0aGUgbWVtb3J5IGlzIGd1YXJhbnRlZWQgemVyb2VkLiBMYXRlciBpbiB0aGUgY29kZSwgYGN0eHQtJmd0O2dwYV93cml0ZWAgaXMgY29uZGl0aW9uYWxseSBzZXQgdG8gYSB2YWx1ZSBkZXJpdmVkIGZyb20gYGVtdWxhdGlvbl90eXBlYCBpbiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAsIGJ1dCAqb25seSogaWYgYGN0eHQtJmd0O2dwYV9hdmFpbGFibGVgIGlzIGFsc28gdHJ1ZS4gVGhlIHJlYWQgaW4gYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSgpYCBpcyBzaW1pbGFybHkgY29uZGl0aW9uYWwgb24gYGN0eHQtJmd0O2dwYV9hdmFpbGFibGVgLCBhbmQgdGhpcyB2YXJpYWJsZSBpcyAqYWx3YXlzKiBpbml0aWFsaXplZC4gSSBzZWUgbm8gcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgbm8gYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgbmV3IHN0cnVjdHVyZSBtZW1iZXIgYW5kIGFsbCBleGlzdGluZyBtZW1iZXJzIGFyZSBpbml0aWFsaXplZCAoZWl0aGVyIGV4cGxpY2l0bHkgb3IgdmlhIHRoZSBhbGxvY2F0aW9uKSwgYW5kIHRoZXJlJiMzOTtzIG5vIHdheSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBgTmVlZHNLTVNBTmAgY2xlYXJseSBzaG91bGQgYmUgYGZhbHNlYC4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7dmUgY2hlY2tlZCBhbGwgdGhlIG1vZGlmaWVkIGZpbGVzOiBgYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhgIChhZGRpbmcgYGdwYV93cml0ZWApLCBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgKHNldHRpbmcgYEVNVUxUWVBFX1BGX1dSSVRFYCksIGBhcmNoL3g4Ni9rdm0veDg2LmNgIChpbml0aWFsaXppbmcgYW5kIHVzaW5nIGBjdHh0LSZndDtncGFfd3JpdGVgKSwgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmhgIChkZWZpbmluZyBgRU1VTFRZUEVfUEZfV1JJVEVgKS4gRXZlcnl0aGluZyBpcyBwcmlzdGluZTsgdGhlcmUgYXJlIG5vIHJpc2tzIHdoYXRzb2V2ZXIuCgpUaW1lIHRvIGZlZWQgdGhpcyByZWFzb25pbmcgaW50byB0aGUgYHNldC1yZXN1bHRzYCB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBpc3N1ZSBpbiBLVk0gd2hlcmUgYSBmYXVsdGluZyBHUEEgd2FzIHJldXNlZCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSBoYXJkd2FyZSBwYWdlIGZhdWx0IHdhcyBhbiBhY3R1YWwgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaW5hbCBHUEEuIEl0IGludHJvZHVjZXMgYSBuZXcgYm9vbGVhbiBmaWVsZCBgZ3BhX3dyaXRlYCB0byBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGFuZCBhbiBlbXVsYXRpb24gZmxhZyBgRU1VTFRZUEVfUEZfV1JJVEVgLlxuXG5UaGUgbmV3IGZpZWxkIGBncGFfd3JpdGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgaW5pdF9lbXVsYXRlX2N0eHQoKWAgYW5kIHplcm8tYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgaW4gYGFsbG9jX2VtdWxhdGVfY3R4dCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGNvcHktdG8tdXNlciBidWZmZXJzIG9yIHN0cnVjdCBwYWRkaW5nLCBhbmQgaW50cm9kdWNlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBpc3N1ZSBpbiBLVk0gd2hlcmUgYSBmYXVsdGluZyBHUEEgd2FzIHJldXNlZCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSBoYXJkd2FyZSBwYWdlIGZhdWx0IHdhcyBhbiBhY3R1YWwgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaW5hbCBHUEEuIEl0IGludHJvZHVjZXMgYSBuZXcgYm9vbGVhbiBmaWVsZCBgZ3BhX3dyaXRlYCB0byBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGFuZCBhbiBlbXVsYXRpb24gZmxhZyBgRU1VTFRZUEVfUEZfV1JJVEVgLlxuXG5UaGUgbmV3IGZpZWxkIGBncGFfd3JpdGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgaW5pdF9lbXVsYXRlX2N0eHQoKWAgYW5kIHplcm8tYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgaW4gYGFsbG9jX2VtdWxhdGVfY3R4dCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGNvcHktdG8tdXNlciBidWZmZXJzIG9yIHN0cnVjdCBwYWRkaW5nLCBhbmQgaW50cm9kdWNlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjA3LjUwODQ1NjkyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTA1NTg2NTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9tbXVfcGFnZV9mYXVsdFwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIGlzc3VlIGluIEtWTSB3aGVyZSBhIGZhdWx0aW5nIEdQQSB3YXMgcmV1c2VkIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlIGhhcmR3YXJlIHBhZ2UgZmF1bHQgd2FzIGFuIGFjdHVhbCB3cml0ZSBhY2Nlc3MgdG8gdGhlIGZpbmFsIEdQQS4gSXQgaW50cm9kdWNlcyBhIG5ldyBib29sZWFuIGZpZWxkIGBncGFfd3JpdGVgIHRvIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGAgYW5kIGFuIGVtdWxhdGlvbiBmbGFnIGBFTVVMVFlQRV9QRl9XUklURWAuXFxuXFxuVGhlIG5ldyBmaWVsZCBgZ3BhX3dyaXRlYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYGluaXRfZW11bGF0ZV9jdHh0KClgIGFuZCB6ZXJvLWFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIGluIGBhbGxvY19lbXVsYXRlX2N0eHQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBjb3B5LXRvLXVzZXIgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZywgYW5kIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGFuZCBNTVUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYy4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjYWNoZWQgR1BBIGlzIG9ubHkgcmV1c2VkIGZvciB3cml0ZXMgZHVyaW5nIGVtdWxhdGlvbiBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzcyAoRU1VTFRZUEVfUEZfV1JJVEUpLCBwcmV2ZW50aW5nIHVuYXV0aG9yaXplZCBndWVzdCBtZW1vcnkgd3JpdGVzLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvcmUgVk0gZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgcGFnZSBmYXVsdCBlbXVsYXRpb24sIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODowNy41MDg0NjMzMzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDUxNjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdlNTBjYTdiOGYwYTg3MmM4ZmU4OTBhOTgyYjkzOGIzOTZkNzU0OGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjggMjA6Mjg6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbmluZGV4IDNlMzc1YWYxNWMwMzUuLmFjZWNhOWQzYTE2ZDMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbkBAIC0zNTQsOCArMzU0LDkgQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQge1xcbiBcXHRib29sIGhhdmVfZXhjZXB0aW9uO1xcbiBcXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247XFxuIFxcbi1cXHQvKiBHUEEgYXZhaWxhYmxlICovXFxuK1xcdC8qIEdQQSBhbmQgd3JpdGUgYWNjZXNzIHN1cHBsaWVkIGJ5IGEgaGFyZHdhcmUgcGFnZSBmYXVsdC4gKi9cXG4gXFx0Ym9vbCBncGFfYXZhaWxhYmxlO1xcbitcXHRib29sIGdwYV93cml0ZTtcXG4gXFx0Z3BhX3QgZ3BhX3ZhbDtcXG4gXFxuIFxcdC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uMjIzNjk4Y2JiOWJlNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbkBAIC02NjMyLDYgKzY2MzIsMTYgQEAgaW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJcXG4gXFx0XFx0cmV0dXJuIHI7XFxuIFxcbiBlbXVsYXRlOlxcbitcXHQvKlxcbitcXHQgKiBBIHdyaXRlIGR1cmluZyBhIGd1ZXN0IHBhZ2Ugd2FsayBkb2VzIG5vdCBhdXRob3JpemUgdGhlIGluc3RydWN0aW9uXFxuK1xcdCAqIGl0c2VsZiB0byB3cml0ZSB0byB0aGUgZmF1bHRpbmcgR1BBLiAgUmVxdWlyZSBhIGZpbmFsIHdyaXRlIGFjY2Vzc1xcbitcXHQgKiBiZWZvcmUgYWxsb3dpbmcgdGhlIGVtdWxhdG9yIHRvIHJldXNlIHRoZSBHUEEgZm9yIHdyaXRlcy5cXG4rXFx0ICovXFxuK1xcdGlmIChkaXJlY3QgXFx1MDAyNlxcdTAwMjYgKGVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9XUklURV9NQVNLKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShlcnJvcl9jb2RlIFxcdTAwMjYgUEZFUlJfR1VFU1RfUEFHRV9NQVNLKSlcXG4rXFx0XFx0ZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7XFxuK1xcbiBcXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyX29yX2dwYSwgZW11bGF0aW9uX3R5cGUsIGluc24sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBpbnNuX2xlbik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggNzk0NjhkZGZlNDczNi4uOGM0NmFhMzQ2OGMyZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtNTA4OCw4ICs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxcbiBcXHQgKiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIG9uIHN0cmluZyBvcGVyYXRpb25zIHNpbmNlIHN0cmluZ1xcbiBcXHQgKiBvcGVyYXRpb24gdXNpbmcgcmVwIHdpbGwgb25seSBoYXZlIHRoZSBpbml0aWFsIEdQQSBmcm9tIHRoZSBOUEZcXG4gXFx0ICogb2NjdXJyZWQuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBndWVzdCBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBpbnN0cnVjdGlvbiBzaW5jZSB0aGUgZmF1bHQuICBSZXVzZVxcbitcXHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzcztcXG4rXFx0ICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuXFxuIFxcdCAqL1xcbi1cXHRpZiAoY3R4dC1cXHUwMDNlZ3BhX2F2YWlsYWJsZSBcXHUwMDI2XFx1MDAyNiBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAoY3R4dC1cXHUwMDNlZ3BhX2F2YWlsYWJsZSBcXHUwMDI2XFx1MDAyNiAoIXdyaXRlIHx8IGN0eHQtXFx1MDAzZWdwYV93cml0ZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAoYWRkciBcXHUwMDI2IH5QQUdFX01BU0spID09IChjdHh0LVxcdTAwM2VncGFfdmFsIFxcdTAwMjYgflBBR0VfTUFTSykpIHtcXG4gXFx0XFx0Z3BhID0gY3R4dC1cXHUwMDNlZ3BhX3ZhbDtcXG4gXFx0XFx0cmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTtcXG5AQCAtNTkzOSw2ICs1OTQ0LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9lbXVsYXRlX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXFx1MDAyNmNzX2RiLCBcXHUwMDI2Y3NfbCk7XFxuIFxcbiBcXHRjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XFxuK1xcdGN0eHQtXFx1MDAzZWdwYV93cml0ZSA9IGZhbHNlO1xcbiBcXHRjdHh0LVxcdTAwM2VlZmxhZ3MgPSBrdm1fZ2V0X3JmbGFncyh2Y3B1KTtcXG4gXFx0Y3R4dC1cXHUwMDNldGYgPSAoY3R4dC1cXHUwMDNlZWZsYWdzIFxcdTAwMjYgWDg2X0VGTEFHU19URikgIT0gMDtcXG4gXFxuQEAgLTY0NTUsNiArNjQ2MSw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuIFxcdFxcdC8qIFdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBjcjIgY29udGFpbnMgYSBHVkEgb3IgbkdQQS4gKi9cXG4gXFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gubW11LVxcdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XFxuIFxcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV9hdmFpbGFibGUgPSB0cnVlO1xcbitcXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfd3JpdGUgPSBlbXVsYXRpb25fdHlwZSBcXHUwMDI2IEVNVUxUWVBFX1BGX1dSSVRFO1xcbiBcXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcXG5pbmRleCAwZjU5MTliMDkyZTQ3Li4yZGQ0NTZhZDNlMmQ2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxcbkBAIC00MDcsNiArNDA3LDkgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcXG4gICogRU1VTFRZUEVfUEYgLSBTZXQgd2hlbiBhbiBpbnRlcmNlcHRlZCAjUEYgdHJpZ2dlcnMgdGhlIGVtdWxhdGlvbiwgaW4gd2hpY2ggY2FzZVxcbiAgKlxcdFxcdCB0aGUgQ1IyL0dQQSB2YWx1ZSBwYXNzIG9uIHRoZSBzdGFjayBpcyB2YWxpZC5cXG4gICpcXG4rICogRU1VTFRZUEVfUEZfV1JJVEUgLSBTZXQgd2l0aCBFTVVMVFlQRV9QRiB3aGVuIGhhcmR3YXJlIHJlcG9ydHMgYSB3cml0ZSB0byB0aGVcXG4rICpcXHRcXHQgICAgIGZpbmFsIEdQQSwgbm90IGFuIGltcGxpY2l0IGd1ZXN0IHBhZ2UtdGFibGUgYWNjZXNzLlxcbisgKlxcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XFxuICAqXFx0XFx0XFx0XFx0IHN0YXRlIGFuZCBpbmplY3Qgc2luZ2xlLXN0ZXAgI0RCcyBhZnRlciBza2lwcGluZ1xcbiAgKlxcdFxcdFxcdFxcdCBhbiBpbnN0cnVjdGlvbiAoYWZ0ZXIgY29tcGxldGluZyB1c2Vyc3BhY2UgSS9PKS5cXG5AQCAtNDQ1LDYgKzQ0OCw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1BcXHQgICAgKDEgXFx1MDAzY1xcdTAwM2MgOClcXG4gI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UXFx0ICAgICgxIFxcdTAwM2NcXHUwMDNjIDkpXFxuKyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVcXHQgICAgQklUKDEwKVxcbiBcXG4gI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpXFx0KCh1MzIpKCh2KSBcXHUwMDI2IDB4ZmYpIFxcdTAwM2NcXHUwMDNjIDE2KVxcbiAjZGVmaW5lIEVNVUxUWVBFX0dFVF9TT0ZUX0lOVF9WRUNUT1IoZSlcXHQoKChlKSBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweGZmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODowNy45Mjk2MDY1OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQyNjExODExOTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9wYWdlX2ZhdWx0XCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGFuZCBNTVUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYy4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjYWNoZWQgR1BBIGlzIG9ubHkgcmV1c2VkIGZvciB3cml0ZXMgZHVyaW5nIGVtdWxhdGlvbiBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzcyAoRU1VTFRZUEVfUEZfV1JJVEUpLCBwcmV2ZW50aW5nIHVuYXV0aG9yaXplZCBndWVzdCBtZW1vcnkgd3JpdGVzLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvcmUgVk0gZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgcGFnZSBmYXVsdCBlbXVsYXRpb24sIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTUwY2E3YjhmMGE4NzJjOGZlODkwYTk4MmI5MzhiMzk2ZDc1NDhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjA6Mjg6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaCBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5pbmRleCAzZTM3NWFmMTVjMDM1Li5hY2VjYTlkM2ExNmQzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbisrKyBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5AQCAtMzU0LDggKzM1NCw5IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IHtcbiBcdGJvb2wgaGF2ZV9leGNlcHRpb247XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247XG4gXG4tXHQvKiBHUEEgYXZhaWxhYmxlICovXG4rXHQvKiBHUEEgYW5kIHdyaXRlIGFjY2VzcyBzdXBwbGllZCBieSBhIGhhcmR3YXJlIHBhZ2UgZmF1bHQuICovXG4gXHRib29sIGdwYV9hdmFpbGFibGU7XG4rXHRib29sIGdwYV93cml0ZTtcbiBcdGdwYV90IGdwYV92YWw7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCAwNjRlY2MzM2I5MjY3Li4yMjM2OThjYmI5YmU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTY2MzIsNiArNjYzMiwxNiBAQCBpbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVyclxuIFx0XHRyZXR1cm4gcjtcbiBcbiBlbXVsYXRlOlxuK1x0LypcbitcdCAqIEEgd3JpdGUgZHVyaW5nIGEgZ3Vlc3QgcGFnZSB3YWxrIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgaW5zdHJ1Y3Rpb25cbitcdCAqIGl0c2VsZiB0byB3cml0ZSB0byB0aGUgZmF1bHRpbmcgR1BBLiAgUmVxdWlyZSBhIGZpbmFsIHdyaXRlIGFjY2Vzc1xuK1x0ICogYmVmb3JlIGFsbG93aW5nIHRoZSBlbXVsYXRvciB0byByZXVzZSB0aGUgR1BBIGZvciB3cml0ZXMuXG4rXHQgKi9cbitcdGlmIChkaXJlY3QgXHUwMDI2XHUwMDI2IChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9XUklURV9NQVNLKSBcdTAwMjZcdTAwMjZcbitcdCAgICAoZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfR1VFU1RfRklOQUxfTUFTSykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9HVUVTVF9QQUdFX01BU0spKVxuK1x0XHRlbXVsYXRpb25fdHlwZSB8PSBFTVVMVFlQRV9QRl9XUklURTtcbitcbiBcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcbiBcdFx0XHRcdCAgICAgICBpbnNuX2xlbik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uOGM0NmFhMzQ2OGMyZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTA4OCw4ICs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxuIFx0ICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmdcbiBcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxuIFx0ICogb2NjdXJyZWQuXG4rXHQgKlxuK1x0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXG4rXHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzcztcbitcdCAqIG90aGVyd2lzZSwgcmVjaGVjayBwZXJtaXNzaW9ucyBmb3IgdGhlIGRlY29kZWQgYWNjZXNzLlxuIFx0ICovXG4tXHRpZiAoY3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlIFx1MDAyNlx1MDAyNiBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbitcdGlmIChjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgXHUwMDI2XHUwMDI2ICghd3JpdGUgfHwgY3R4dC1cdTAwM2VncGFfd3JpdGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cdTAwM2VncGFfdmFsIFx1MDAyNiB+UEFHRV9NQVNLKSkge1xuIFx0XHRncGEgPSBjdHh0LVx1MDAzZWdwYV92YWw7XG4gXHRcdHJldCA9IHZjcHVfaXNfbW1pb19ncGEodmNwdSwgYWRkciwgZ3BhLCB3cml0ZSk7XG5AQCAtNTkzOSw2ICs1OTQ0LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9lbXVsYXRlX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX3g4Nl9jYWxsKGdldF9jc19kYl9sX2JpdHMpKHZjcHUsIFx1MDAyNmNzX2RiLCBcdTAwMjZjc19sKTtcbiBcbiBcdGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSA9IGZhbHNlO1xuK1x0Y3R4dC1cdTAwM2VncGFfd3JpdGUgPSBmYWxzZTtcbiBcdGN0eHQtXHUwMDNlZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7XG4gXHRjdHh0LVx1MDAzZXRmID0gKGN0eHQtXHUwMDNlZWZsYWdzIFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xuIFxuQEAgLTY0NTUsNiArNjQ2MSw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4gXHRcdC8qIFdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBjcjIgY29udGFpbnMgYSBHVkEgb3IgbkdQQS4gKi9cbiBcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5tbXUtXHUwMDNlcm9vdF9yb2xlLmRpcmVjdCkge1xuIFx0XHRcdGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSA9IHRydWU7XG4rXHRcdFx0Y3R4dC1cdTAwM2VncGFfd3JpdGUgPSBlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEU7XG4gXHRcdFx0Y3R4dC1cdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjJkZDQ1NmFkM2UyZDYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxuQEAgLTQwNyw2ICs0MDcsOSBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2VcbiAgKlx0XHQgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuXG4gICpcbisgKiBFTVVMVFlQRV9QRl9XUklURSAtIFNldCB3aXRoIEVNVUxUWVBFX1BGIHdoZW4gaGFyZHdhcmUgcmVwb3J0cyBhIHdyaXRlIHRvIHRoZVxuKyAqXHRcdCAgICAgZmluYWwgR1BBLCBub3QgYW4gaW1wbGljaXQgZ3Vlc3QgcGFnZS10YWJsZSBhY2Nlc3MuXG4rICpcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XG4gICpcdFx0XHRcdCBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmdcbiAgKlx0XHRcdFx0IGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLlxuQEAgLTQ0NSw2ICs0NDgsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxIFx1MDAzY1x1MDAzYyA3KVxuICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1BcdCAgICAoMSBcdTAwM2NcdTAwM2MgOClcbiAjZGVmaW5lIEVNVUxUWVBFX1NLSVBfU09GVF9JTlRcdCAgICAoMSBcdTAwM2NcdTAwM2MgOSlcbisjZGVmaW5lIEVNVUxUWVBFX1BGX1dSSVRFXHQgICAgQklUKDEwKVxuIFxuICNkZWZpbmUgRU1VTFRZUEVfU0VUX1NPRlRfSU5UX1ZFQ1RPUih2KVx0KCh1MzIpKCh2KSBcdTAwMjYgMHhmZikgXHUwMDNjXHUwMDNjIDE2KVxuICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKVx0KCgoZSkgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjA3LjkyOTYwNzc4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODEwMjg2NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIEtWTSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGZldyBrZXkgS1ZNL3g4NiBmaWxlczogYGt2bV9lbXVsYXRlLmhgLCBgbW11L21tdS5jYCwgYHg4Ni5jYCwgYW5kIGB4ODYuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGNvcmUgS1ZNIHN0dWZmLCBzbyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwuIExldCdzIGJyZWFrIGRvd24gdGhlIGNvZGU6XG5cbkluIGBtbXUuY2AsIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGhhcyBiZWVuIHVwZGF0ZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBub3cgc2V0dGluZyBgRU1VTFRZUEVfUEZfV1JJVEVgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM6IHdoZW4gZGlyZWN0IGFjY2VzcyBpcyBhbGxvd2VkLCBhIHdyaXRlIGVycm9yIGlzIGZsYWdnZWQsIHRoZSBndWVzdCBmaW5hbCBiaXQgaXMgc2V0LCBhbmQgdGhlIGd1ZXN0IHBhZ2UgYml0IGlzIG5vdCBzZXQuIFRoaXMgaXMgaW50ZXJlc3Rpbmcg4oCTIGl0IHNlZW1zIHRvIGJlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgd3JpdGUgZmF1bHRzIHdpdGhpbiB0aGUgTU1VIGVtdWxhdGlvbi5cblxuVGhlbiwgbG9va2luZyBhdCBgeDg2LmNgLCBJIHNlZSBzb21lIGNoYW5nZXMgaW4gYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAuIFRoZXJlJ3Mgbm93IGEgY2hlY2sgdGhhdCBzZWVtcyB0byBkZXRlcm1pbmUgd2hlbiBhIEdQQSBjYW4gYmUgdXNlZCBmb3Igd3JpdGVzLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCAoYGN0eHRgKSBhbmQgd2hldGhlciB0aGUgYGVtdWxhdG9yX2Nhbl91c2VfZ3BhKClgIGZ1bmN0aW9uIGlzIHRydWUuIFRoZSBgaW5pdF9lbXVsYXRlX2N0eHRgIGZ1bmN0aW9uIHNldHMgYGN0eHQtXHUwMDNlZ3BhX3dyaXRlYCB0byBmYWxzZSBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBzZXRzIGl0IHRvIGBlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEU7YC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGBFTVVMVFlQRV9QRl9XUklURWAgaXMgYmVpbmcgdXNlZCwgdG8gZGV0ZXJtaW5lLCBvbiBhIHBlci1pbnN0cnVjdGlvbiBiYXNpcywgd2hldGhlciB0aGUgR1BBIGNhbiBiZSB1c2VkIGZvciB3cml0ZSBvcGVyYXRpb25zLlxuXG5TbywgaW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBpcyBhYm91dCByZWZpbmluZyB0aGUgbG9naWMgZm9yIEtWTSdzIHg4NiBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBHUEEgcmV1c2UgZm9yIHdyaXRlcyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZy4gVGhpcyBkaXJlY3RseSB0b3VjaGVzIGNvcmUgeDg2IHZpcnR1YWxpemF0aW9uIGZ1bmN0aW9uYWxpdHkgYW5kLCBjcnVjaWFsbHksIGlzICphYnNvbHV0ZWx5KiBpbiBzY29wZSBmb3IgZnV6emluZywgZ2l2ZW4gaG93IHN5emthbGxlciBoaXRzIEtWTSB0aHJvdWdoIGAvZGV2L2t2bWAuIEFueSBtaXNjYWxjdWxhdGlvbiBoZXJlIGNvdWxkIGhhdmUgcmVhbGx5IG5hc3R5IGltcGxpY2F0aW9ucy5cblxuTm93IEkgbmVlZCB0byBzdGFydCB1c2luZyBteSB1c3VhbCB0b29scyB0byBkaWcgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLCBzZWUgd2hhdCBzeW1ib2xzIGFyZSBpbXBhY3RlZCwgYW5kIGNvbmZpcm0gdGhhdCBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgaW50ZXJwbGF5IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29ycmVjdC4gVGltZSB0byBnZXQgc29tZSBtb3JlIGRhdGEgYW5kIHZlcmlmeSBteSBpbml0aWFsIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjAwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6MjQuNzM5ODk2MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3OTQzODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9wYWdlX2ZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11Lmg9MTQ2PXZvaWQga3ZtX2luaXRfc2hhZG93X2VwdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGV4ZWNvbmx5LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oLTE0OS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MTUwOmludCBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTUxLVxcdFxcdCAgICAgICB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00ODkwPWludCBrdm1faGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXJyb3JfY29kZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDkxOC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5MTk6XFx0XFx0ciA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlLCBpbnNuLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDkyMC1cXHRcXHRcXHRcXHRpbnNuX2xlbik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY0NzQ9c3RhdGljIGludCBrdm1fbW11X3dyaXRlX3Byb3RlY3RfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTY2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjU2NzppbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTY4LVxcdFxcdCAgICAgICB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDctfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjY0ODpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX21tdV9wYWdlX2ZhdWx0KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE5NzQ9c3RhdGljIGludCBucGZfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyNC1cXHR0cmFjZV9rdm1fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjAyNTpcXHRyYyA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDI2LVxcdFxcdFxcdFxcdGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfREVDT0RFQVNTSVNUUykgP1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD04Mz1zdGF0aWMgaW5saW5lIGludCBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTE1LVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6MTE2OlxcdHJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBlcnJvcl9jb2RlLCBOVUxMLCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTExNy19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTYwMDU9c3RhdGljIGludCBoYW5kbGVfZXB0X21pc2NvbmZpZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMjItXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MDIzOlxcdHJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBQRkVSUl9SU1ZEX01BU0ssIE5VTEwsIDApO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjAyNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjI0Ljc4NTcwMDAxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NzkzOTA2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBLVk0gaXMgcHJvcGVybHkgc2V0IHVwIGZvciB4ODYuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgb3B0aW9ucyBhcmUgZGVmaW5lZCwgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBkZWZhdWx0IHNldHRpbmdzLiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IEtWTSBvcHRpb25zIGFyZSBlbmFibGVkIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgY29uZmxpY3Rpbmcgc2V0dGluZ3Mgd2l0aCBvdGhlciB2aXJ0dWFsaXphdGlvbiBtb2R1bGVzIG9yIGNvcmUgeDg2IGZlYXR1cmVzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzOyBhcmUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zIGNvcnJlY3RseSBlbmFibGVkIGluIHRoZSBCSU9TL2Zpcm13YXJlIGFuZCBpcyB0aGUga2VybmVsIGNvbmZpZ3VyZWQgdG8gZGV0ZWN0IGFuZCB1c2UgdGhlbT8gQW55IGlzc3VlcyBoZXJlIGFuZCBLVk0gd2lsbCBiZSBkZWFkIGluIHRoZSB3YXRlci4gSSdsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3Mgb3IgZmVhdHVyZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgS1ZNJ3MgcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3Igb24geDg2LiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSBldmVyeXRoaW5nIGlzIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6MzAuNDY1MDkyNjc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzI2NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjMwLjUxMDgyMzUwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzY1NzIyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBNYWtlZmlsZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgY3J1Y2lhbCBmaWxlOiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gSSdtIGd1ZXNzaW5nIHRoYXQgd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZywgb3Igd2hhdGV2ZXIgZW5oYW5jZW1lbnQgSSdtIHdvcmtpbmcgb24sIGxpa2VseSBoYXMgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBLVk0geDg2IG1vZHVsZS4gVGhpcyBNYWtlZmlsZSBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbWFnaWMgaGFwcGVucyDigJMgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBjb21waWxhdGlvbiB0YXJnZXRzIGFyZSBzZXQgdXAsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGdldHMgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZSdzIGxvZ2ljIHRvIHNlZSB3aGVyZSBteSBjaGFuZ2VzIGZpdCBpbiBvciB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDg1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6MzIuNjQ3Mzk4MDk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTg2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tdS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGU9OD1rdm0teVxcdFxcdFxcdCs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjk6XFx0XFx0XFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEwLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxMTprdm0tJChDT05GSUdfWDg2XzY0KSArPSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEyLWt2bS0kKENPTkZJR19LVk1fSU9BUElDKSArPSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6MzIuNjkxMzkxMTQ0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMjU3ODk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBCYXNlZCBvbiB0aGUgaXNzdWUsIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IHBva2luZyBhcm91bmQgaW4gdGhlIEtWTSBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRhcmdldCB3aWxsIGJlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSBmaWd1cmUgdGhlIGxpbmVzIGJldHdlZW4gMjAgYW5kIDYwIGFyZSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSdtIGhvcGluZyB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxhdGVkIHRvIHdoYXRldmVyJ3MgZ29uZSBhd3J5LiBUaGF0IHJhbmdlIHVzdWFsbHkgY292ZXJzIHNvbWUgb2YgdGhlIGNvcmUgZmVhdHVyZXMgYW5kIGRlcGVuZGVuY2llcywgc28gdGhhdCdzIHdoZXJlIEknbGwgc3RhcnQgdGhlIGh1bnQuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueXRoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnksIG9yIGFueSBoaW50cyBhdCB0aGUgcm9vdCBjYXVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUyNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjM0LjkwMzk3MzIxNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRjb25maWcgS1ZNX1g4NlxcbiAgMjE6XFx0XFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbiAgMjI6XFx0XFx0c2VsZWN0IEtWTV9DT01NT05cXG4gIDIzOlxcdFxcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxuICAyNDpcXHRcXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAgMjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG4gIDI2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbiAgMjc6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXFxuICAyODpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xcbiAgMzA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAzMjpcXHRcXHRzZWxlY3QgVkhPU1RfVEFTS1xcbiAgMzM6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXFxuICAzNTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDM2OlxcdFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuICAzNzpcXHRcXHRzZWxlY3QgUEVSRl9FVkVOVFNcXG4gIDM4OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xcbiAgMzk6XFx0XFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXFxuICA0MDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICA0MTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgNDI6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG4gIDQzOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgNDQ6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgNDU6XFx0XFx0c2VsZWN0IEtWTV9WRklPXFxuICA0NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cXG4gIDQ3OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbiAgNDg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG4gIDQ5OlxcdFxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbiAgNTA6XFx0XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG4gIDUxOlxcdFxcbiAgNTI6XFx0Y29uZmlnIEtWTVxcbiAgNTM6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXFxuICA1NzpcXHRcXHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxcbiAgNTg6XFx0XFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXFxuICA1OTpcXHRcXHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6MzQuOTA0MDU1MDk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NDk1ODIzNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6XG5cbioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIEtWTSBjb25maWd1cmF0aW9uLiBUaGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBlc3BlY2lhbGx5IHNpbmNlIHdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlIGJyb2FkZXIgYFZJUlRVQUxJWkFUSU9OYCBjb250ZXh0LiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHZpcnR1YWxpemF0aW9uIGlzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IHRoZSB4ODYgbGV2ZWwgd2l0aGluIEtWTS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgdG8gdW5kZXJzdGFuZCByZWxhdGVkIG1vZHVsZXMgYW5kIGZsYWdzLiBJIGV4cGVjdCB0byBmaW5kIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIG1heWJlIGV2ZW4gc29tZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB0aGUgQ1BVJ3MgY2FwYWJpbGl0aWVzLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIHJldmVhbHMuLi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODozOS40NTM2NDAxMDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEtWTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdHNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IHlcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcXG4gIDEzOlxcdFxcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXFxuICAxNDpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgVklSVFVBTElaQVRJT05cXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEtWTV9YODZcXG4gIDIxOlxcdFxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4gIDIyOlxcdFxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuICAyMzpcXHRcXHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbiAgMjQ6XFx0XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gIDI1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjM5LjQ1MzcwOTE2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzIzMTEyMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBLVk0gaXNzdWUsIGFuZCBpbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCB0aGUgYnJvYWRlciBgVklSVFVBTElaQVRJT05gIHNldHRpbmcuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLCBzbyBJJ2xsIHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgY2hhbmdlZCBmdW5jdGlvbnMuXG5cbkZpcnN0IHVwIGlzIGBrdm1fbW11X3BhZ2VfZmF1bHRgLCB3aGljaCByZXNpZGVzIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFRoZW4sIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AuIEZvbGxvd2luZyB0aGF0LCBJIHNlZSBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiBhbHNvIHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gRmluYWxseSwgYGluaXRfZW11bGF0ZV9jdHh0YCBpcyBhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgYWxzbyBmb3VuZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC5cblxuTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiBga3ZtX21tdV9wYWdlX2ZhdWx0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBhcmUgZXhwb3J0ZWQuIEkgcmVtZW1iZXIgc2VlaW5nIGBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX21tdV9wYWdlX2ZhdWx0KTtgIGFzc29jaWF0ZWQgd2l0aCBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgc28gdGhhdCBvbmUgaXMgZXhwb3J0ZWQgaW50ZXJuYWxseSB0byBLVk0uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgZXhwb3J0IG9mIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgdmlzaWJpbGl0eSBhbmQgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODo0My4xNzY4MjMzNDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTYwMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY1Njc9aW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjQ0LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjY0NTpcXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyX29yX2dwYSwgZW11bGF0aW9uX3R5cGUsIGluc24sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjQ2LVxcdFxcdFxcdFxcdCAgICAgICBpbnNuX2xlbik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTE1Mz1zdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTIyNi1cXHQgKiBhZnRlciBjb21wbGV0aW5nIGVtdWxhdGlvbiAoc2VlIHRoZSBjaGVjayBvbiB2Y3B1LVxcdTAwM2VtbWlvX25lZWRlZCBpblxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjI3OlxcdCAqIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKCkpLlxcbmFyY2gveDg2L2t2bS94ODYuYy01MjI4LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTYzMzQ9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKHg4Nl9kZWNvZGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy02MzM1LVxcbmFyY2gveDg2L2t2bS94ODYuYzo2MzM2OmludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTYzMzctXFx0XFx0XFx0ICAgIGludCBlbXVsYXRpb25fdHlwZSwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTY1NTc9aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxhdGlvbl90eXBlKVxcbmFyY2gveDg2L2t2bS94ODYuYy02NTU4LXtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU1OTpcXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgZW11bGF0aW9uX3R5cGUsIE5VTEwsIDApO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NTYwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz02NTYzPWludCBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbl9mcm9tX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2NS17XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY1NjY6XFx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIGluc24sIGluc25fbGVuKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2Ny19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzcxPWludCB4ODZfZGVjb2RlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxhdGlvbl90eXBlLFxcbmFyY2gveDg2L2t2bS94ODYuaC0zNzItXFx0XFx0XFx0XFx0ICAgIHZvaWQgKmluc24sIGludCBpbnNuX2xlbik7XFxuYXJjaC94ODYva3ZtL3g4Ni5oOjM3MzppbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuaC0zNzQtXFx0XFx0XFx0ICAgIGludCBlbXVsYXRpb25fdHlwZSwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6NDMuMjIxNzg4MjExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwOTQ1NTg0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGFuZCBga3ZtX21tdV9wYWdlX2ZhdWx0YCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYW5kIGBrdm1fbW11X3BhZ2VfZmF1bHRgLiBUaGV5J3JlIGNsZWFybHkgaW50ZW5kZWQgYXMgQVBJIGVudHJ5cG9pbnRzLCBidXQgYXJlbid0IGRlY2xhcmVkIGFzIHN0YXRpYyBvciBpbmxpbmVkLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdvbmRlciBhYm91dCB0aGVpciBzY29wZSDigJMgYXJlIHRoZXkgaW50ZW5kZWQgZm9yIGludGVybmFsIEtWTSB1c2UsIG9yIGFyZSB0aGV5IGV4cG9zZWQgZm9yIGV4dGVybmFsIG1vZHVsZXMgdG8gbGV2ZXJhZ2U/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZWlyIHZpc2liaWxpdHkuXG5cbkknbGwgc3RhcnQgd2l0aCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCBsaW5lIDYzMzYsIGl0J3MgZGVjbGFyZWQgYXMgYGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiguLi4pYCwgc28gaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBpZiBpdCdzIHByb3RlY3RlZCBzb21laG93LiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBjaGVjayB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIGZvY3VzIGFyb3VuZCBsaW5lIDY1NTAsIHNlZSBpZiBhbnkgdXNhZ2UgcGF0dGVybnMgZW1lcmdlIHRoYXQgY2FuIGdpdmUgbWUgYSBjbHVlIGFib3V0IHRoZSBpbnRlbmRlZCBhdWRpZW5jZS4gUGVyaGFwcyBzb21lIHN0YXRpYyBkZWNsYXJhdGlvbnMgb3IgbWFjcm9zIGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU4OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODo0Ni4zMTYzNDg4MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NTQwOlxcdFxcdFxcdFxcdF9fa3ZtX3NldF9yZmxhZ3ModmNwdSwgY3R4dC1cXHUwMDNlZWZsYWdzKTtcXG42NTQxOlxcdFxcdFxcdH1cXG42NTQyOlxcdFxcbjY1NDM6XFx0XFx0XFx0LypcXG42NTQ0OlxcdFxcdFxcdCAqIEZvciBTVEksIGludGVycnVwdHMgYXJlIHNoYWRvd2VkOyBzbyBLVk1fUkVRX0VWRU5UIHdpbGxcXG42NTQ1OlxcdFxcdFxcdCAqIGRvIG5vdGhpbmcsIGFuZCBpdCB3aWxsIGJlIHJlcXVlc3RlZCBhZ2FpbiBhcyBzb29uIGFzXFxuNjU0NjpcXHRcXHRcXHQgKiB0aGUgc2hhZG93IGV4cGlyZXMuICBCdXQgd2Ugc3RpbGwgbmVlZCB0byBjaGVjayBoZXJlLFxcbjY1NDc6XFx0XFx0XFx0ICogYmVjYXVzZSBQT1BGIGhhcyBubyBpbnRlcnJ1cHQgc2hhZG93LlxcbjY1NDg6XFx0XFx0XFx0ICovXFxuNjU0OTpcXHRcXHRcXHRpZiAodW5saWtlbHkoKGN0eHQtXFx1MDAzZWVmbGFncyBcXHUwMDI2IH5yZmxhZ3MpIFxcdTAwMjYgWDg2X0VGTEFHU19JRikpXFxuNjU1MDpcXHRcXHRcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpO1xcbjY1NTE6XFx0XFx0fSBlbHNlXFxuNjU1MjpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfdG9fdmNwdSA9IHRydWU7XFxuNjU1MzpcXHRcXG42NTU0OlxcdFxcdHJldHVybiByO1xcbjY1NTU6XFx0fVxcbjY1NTY6XFx0XFxuNjU1NzpcXHRpbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bGF0aW9uX3R5cGUpXFxuNjU1ODpcXHR7XFxuNjU1OTpcXHRcXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgZW11bGF0aW9uX3R5cGUsIE5VTEwsIDApO1xcbjY1NjA6XFx0fVxcbjY1NjE6XFx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2luc3RydWN0aW9uKTtcXG42NTYyOlxcdFxcbjY1NjM6XFx0aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uX2Zyb21fYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG42NTY0OlxcdFxcdFxcdFxcdFxcdFxcdHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcXG42NTY1OlxcdHtcXG42NTY2OlxcdFxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCAwLCBpbnNuLCBpbnNuX2xlbik7XFxuNjU2NzpcXHR9XFxuNjU2ODpcXHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25fZnJvbV9idWZmZXIpO1xcbjY1Njk6XFx0XFxuNjU3MDpcXHRzdGF0aWMgaW50IGNvbXBsZXRlX2Zhc3RfcGlvX291dF9wb3J0XzB4N2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbjY1NzE6XFx0e1xcbjY1NzI6XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5waW8uY291bnQgPSAwO1xcbjY1NzM6XFx0XFx0cmV0dXJuIDE7XFxuNjU3NDpcXHR9XFxuNjU3NTpcXHRcXG42NTc2OlxcdHN0YXRpYyBpbnQgY29tcGxldGVfZmFzdF9waW9fb3V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42NTc3OlxcdHtcXG42NTc4OlxcdFxcdHZjcHUtXFx1MDAzZWFyY2gucGlvLmNvdW50ID0gMDtcXG42NTc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODo0Ni4zMTY4OTAyMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE0Mjg2ODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0geDg2IEVtdWxhdGlvbiBhbmQgTU1VIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCBzb21lIEtWTSBjb2RlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHg4NiBlbXVsYXRpb24gYW5kIHRoZSBNTVUuIEkgc2VlIHRoYXQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBpcyByaWdodCB0aGVyZSBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgYW5kIHRoZSBkZWNsYXJhdGlvbiBpcyBpbiB0aGUgaGVhZGVyLCBgeDg2LmhgLiBJdCdzIGNsZWFybHkgYSBjb3JlIGZ1bmN0aW9uLCBhcyBpdCdzIGRpcmVjdGx5IGNhbGxlZCB0aHJvdWdob3V0IEtWTS4gU2ltaWxhcmx5LCBga3ZtX21tdV9wYWdlX2ZhdWx0YCBsaXZlcyBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGRlY2xhcmVkIGluIGBtbXUuaGAuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb25maWdzIG9yIG90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucy4gQWxyaWdodCwgdGhlIHJlbGV2YW50IGNvbmZpZ3Mgc2VlbSB0byBiZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIGBWSVJUVUFMSVpBVElPTmAg4oCTIHN0YW5kYXJkIHN0dWZmIGZvciB2aXJ0dWFsaXphdGlvbiwgZXNwZWNpYWxseSB4ODYuXG5cbkJhc2VkIG9uIHRoZSBjb2RlIEkndmUgcmV2aWV3ZWQsIHRoaXMgYXJlYSBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0J3MgdG91Y2hpbmcgY29yZSBLVk0geDg2IE1NVSBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljLiBDcnVjaWFsbHksIGl0IHNlZW1zIHRvIGJlIGRlYWxpbmcgd2l0aCBzb21lIHRyaWNreSBpc3N1ZXMgYXJvdW5kIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKEdQQSkgY2FjaGluZyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgd2hlbiBwYWdlIGZhdWx0cyBvY2N1ci4gSXQncyBwcmV2ZW50aW5nIHRoZSBpbmNvcnJlY3QgcmV1c2Ugb2YgY2FjaGVkIEdQQXMgZm9yIHdyaXRlcywgYSBidWcgdGhhdCdzIHRpZWQgdG8gcGFnZSB0YWJsZSB3YWxrIGZhdWx0cyB2ZXJzdXMgZmluYWwgd3JpdGVzLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZpeC4gVGhlIGZhY3QgdGhhdCBpdOKAmXMgYWxsIHJlYWNoYWJsZSBpbiBRRU1VL0tWTSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbWFrZXMgaXQgYW4gZXZlbiBiZXR0ZXIgdGFyZ2V0LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUga2V5IHN5bWJvbHMgSSB3YW50IHRvIGZvY3VzIG9uOiBga3ZtX21tdV9wYWdlX2ZhdWx0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYC4gWWVwLCB0aG9zZSBhcmUgdGhlIG9uZXMuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncyBhZ2FpbiwganVzdCB0byBiZSBzdXJlLiBZZXAsIHN0aWxsIGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBhbmQgYFg4Nl9MT0NBTF9BUElDYC4gTWFrZXMgc2Vuc2UuIFRoZSBBUElDIGlzIHByZXR0eSBzdGFuZGFyZCBvbiB4ODYgc3lzdGVtcy5cblxuT2theSwgSSdtIHJlYWR5IHRvIGZvcm1hbGl6ZSBteSBmaW5kaW5ncyBhbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBhcmVhIGFuZCBrbm93IHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ5LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjUwLjQ1OTc2MTA2N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNjUzODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9tbXVfcGFnZV9mYXVsdFwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBhbmQgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY2FjaGVkIEdQQSBpcyBvbmx5IHJldXNlZCBmb3Igd3JpdGVzIGR1cmluZyBlbXVsYXRpb24gaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSBmaW5hbCB3cml0ZSBhY2Nlc3MgKEVNVUxUWVBFX1BGX1dSSVRFKSwgcHJldmVudGluZyB1bmF1dGhvcml6ZWQgZ3Vlc3QgbWVtb3J5IHdyaXRlcy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIFZNIGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IHBhZ2UgZmF1bHQgZW11bGF0aW9uLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9tbXVfcGFnZV9mYXVsdFwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBhbmQgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY2FjaGVkIEdQQSBpcyBvbmx5IHJldXNlZCBmb3Igd3JpdGVzIGR1cmluZyBlbXVsYXRpb24gaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSBmaW5hbCB3cml0ZSBhY2Nlc3MgKEVNVUxUWVBFX1BGX1dSSVRFKSwgcHJldmVudGluZyB1bmF1dGhvcml6ZWQgZ3Vlc3QgbWVtb3J5IHdyaXRlcy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIFZNIGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IHBhZ2UgZmF1bHQgZW11bGF0aW9uLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6NTAuNTQxNDI4MDcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjAyMjg4NTU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjUwLjU0MTg3NTY0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY2MDIyNDMzNDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBpc3N1ZSBpbiBLVk0gd2hlcmUgYSBmYXVsdGluZyBHUEEgd2FzIHJldXNlZCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSBoYXJkd2FyZSBwYWdlIGZhdWx0IHdhcyBhbiBhY3R1YWwgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaW5hbCBHUEEuIEl0IGludHJvZHVjZXMgYSBuZXcgYm9vbGVhbiBmaWVsZCBgZ3BhX3dyaXRlYCB0byBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGFuZCBhbiBlbXVsYXRpb24gZmxhZyBgRU1VTFRZUEVfUEZfV1JJVEVgLlxcblxcblRoZSBuZXcgZmllbGQgYGdwYV93cml0ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgYWxsb2NfZW11bGF0ZV9jdHh0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgY29weS10by11c2VyIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTUwY2E3YjhmMGE4NzJjOGZlODkwYTk4MmI5MzhiMzk2ZDc1NDhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjA6Mjg6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaCBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5pbmRleCAzZTM3NWFmMTVjMDM1Li5hY2VjYTlkM2ExNmQzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbisrKyBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5AQCAtMzU0LDggKzM1NCw5IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IHtcbiBcdGJvb2wgaGF2ZV9leGNlcHRpb247XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247XG4gXG4tXHQvKiBHUEEgYXZhaWxhYmxlICovXG4rXHQvKiBHUEEgYW5kIHdyaXRlIGFjY2VzcyBzdXBwbGllZCBieSBhIGhhcmR3YXJlIHBhZ2UgZmF1bHQuICovXG4gXHRib29sIGdwYV9hdmFpbGFibGU7XG4rXHRib29sIGdwYV93cml0ZTtcbiBcdGdwYV90IGdwYV92YWw7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCAwNjRlY2MzM2I5MjY3Li4yMjM2OThjYmI5YmU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTY2MzIsNiArNjYzMiwxNiBAQCBpbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVyclxuIFx0XHRyZXR1cm4gcjtcbiBcbiBlbXVsYXRlOlxuK1x0LypcbitcdCAqIEEgd3JpdGUgZHVyaW5nIGEgZ3Vlc3QgcGFnZSB3YWxrIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgaW5zdHJ1Y3Rpb25cbitcdCAqIGl0c2VsZiB0byB3cml0ZSB0byB0aGUgZmF1bHRpbmcgR1BBLiAgUmVxdWlyZSBhIGZpbmFsIHdyaXRlIGFjY2Vzc1xuK1x0ICogYmVmb3JlIGFsbG93aW5nIHRoZSBlbXVsYXRvciB0byByZXVzZSB0aGUgR1BBIGZvciB3cml0ZXMuXG4rXHQgKi9cbitcdGlmIChkaXJlY3QgXHUwMDI2XHUwMDI2IChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9XUklURV9NQVNLKSBcdTAwMjZcdTAwMjZcbitcdCAgICAoZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfR1VFU1RfRklOQUxfTUFTSykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9HVUVTVF9QQUdFX01BU0spKVxuK1x0XHRlbXVsYXRpb25fdHlwZSB8PSBFTVVMVFlQRV9QRl9XUklURTtcbitcbiBcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcbiBcdFx0XHRcdCAgICAgICBpbnNuX2xlbik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uOGM0NmFhMzQ2OGMyZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTA4OCw4ICs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxuIFx0ICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmdcbiBcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxuIFx0ICogb2NjdXJyZWQuXG4rXHQgKlxuK1x0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXG4rXHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzcztcbitcdCAqIG90aGVyd2lzZSwgcmVjaGVjayBwZXJtaXNzaW9ucyBmb3IgdGhlIGRlY29kZWQgYWNjZXNzLlxuIFx0ICovXG4tXHRpZiAoY3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlIFx1MDAyNlx1MDAyNiBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbitcdGlmIChjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgXHUwMDI2XHUwMDI2ICghd3JpdGUgfHwgY3R4dC1cdTAwM2VncGFfd3JpdGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cdTAwM2VncGFfdmFsIFx1MDAyNiB+UEFHRV9NQVNLKSkge1xuIFx0XHRncGEgPSBjdHh0LVx1MDAzZWdwYV92YWw7XG4gXHRcdHJldCA9IHZjcHVfaXNfbW1pb19ncGEodmNwdSwgYWRkciwgZ3BhLCB3cml0ZSk7XG5AQCAtNTkzOSw2ICs1OTQ0LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9lbXVsYXRlX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX3g4Nl9jYWxsKGdldF9jc19kYl9sX2JpdHMpKHZjcHUsIFx1MDAyNmNzX2RiLCBcdTAwMjZjc19sKTtcbiBcbiBcdGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSA9IGZhbHNlO1xuK1x0Y3R4dC1cdTAwM2VncGFfd3JpdGUgPSBmYWxzZTtcbiBcdGN0eHQtXHUwMDNlZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7XG4gXHRjdHh0LVx1MDAzZXRmID0gKGN0eHQtXHUwMDNlZWZsYWdzIFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xuIFxuQEAgLTY0NTUsNiArNjQ2MSw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4gXHRcdC8qIFdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBjcjIgY29udGFpbnMgYSBHVkEgb3IgbkdQQS4gKi9cbiBcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5tbXUtXHUwMDNlcm9vdF9yb2xlLmRpcmVjdCkge1xuIFx0XHRcdGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSA9IHRydWU7XG4rXHRcdFx0Y3R4dC1cdTAwM2VncGFfd3JpdGUgPSBlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEU7XG4gXHRcdFx0Y3R4dC1cdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjJkZDQ1NmFkM2UyZDYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxuQEAgLTQwNyw2ICs0MDcsOSBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2VcbiAgKlx0XHQgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuXG4gICpcbisgKiBFTVVMVFlQRV9QRl9XUklURSAtIFNldCB3aXRoIEVNVUxUWVBFX1BGIHdoZW4gaGFyZHdhcmUgcmVwb3J0cyBhIHdyaXRlIHRvIHRoZVxuKyAqXHRcdCAgICAgZmluYWwgR1BBLCBub3QgYW4gaW1wbGljaXQgZ3Vlc3QgcGFnZS10YWJsZSBhY2Nlc3MuXG4rICpcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XG4gICpcdFx0XHRcdCBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmdcbiAgKlx0XHRcdFx0IGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLlxuQEAgLTQ0NSw2ICs0NDgsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxIFx1MDAzY1x1MDAzYyA3KVxuICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1BcdCAgICAoMSBcdTAwM2NcdTAwM2MgOClcbiAjZGVmaW5lIEVNVUxUWVBFX1NLSVBfU09GVF9JTlRcdCAgICAoMSBcdTAwM2NcdTAwM2MgOSlcbisjZGVmaW5lIEVNVUxUWVBFX1BGX1dSSVRFXHQgICAgQklUKDEwKVxuIFxuICNkZWZpbmUgRU1VTFRZUEVfU0VUX1NPRlRfSU5UX1ZFQ1RPUih2KVx0KCh1MzIpKCh2KSBcdTAwMjYgMHhmZikgXHUwMDNjXHUwMDNjIDE2KVxuICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKVx0KCgoZSkgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjUwLjU0MTg3NjUzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzYzMDUyNDQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEtNU0FOIFJpc2tzIGluIHRoZSBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gbmVlZHMgdG8gYmUgY29uY2VybmVkIGFib3V0LiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICpkb2luZyouXG5cbkFscmlnaHQsIEkgc2VlIHRoZSBjaGFuZ2VzOlxuXG4xLiAgV2UncmUgYWRkaW5nIGEgYm9vbGVhbiwgYGdwYV93cml0ZWAsIHRvIHRoZSBgeDg2X2VtdWxhdGVfY3R4dGAgc3RydWN0IGluIGBrdm1fZW11bGF0ZS5oYC4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuXG4yLiAgSW4gYG1tdS5jYCwgdGhlIGBrdm1fbW11X3BhZ2VfZmF1bHQoKWAgZnVuY3Rpb24gbm93IHNldHMgYGVtdWxhdGlvbl90eXBlIHw9IEVNVUxUWVBFX1BGX1dSSVRFO2AgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdHMgYW5kIHdyaXRlIG9wZXJhdGlvbnMuIFRoYXQncyBvdXIgZmxhZyBmb3IgYSB3cml0ZSBiZWluZyBhdHRlbXB0ZWQuXG4zLiAgYHg4Ni5jYCBzZWVtcyB0byBiZSB3aGVyZSB0aGUgY29yZSBsb2dpYyBpcyB1cGRhdGVkLiBXZSdyZSBtb2RpZnlpbmcgdGhlIGNvbmRpdGlvbiBpbiBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKClgIHRvIGluY2x1ZGUgYGN0eHQtXHUwMDNlZ3BhX3dyaXRlYC4gIENydWNpYWxseSwgYGluaXRfZW11bGF0ZV9jdHh0KClgIGV4cGxpY2l0bHkgKmluaXRpYWxpemVzKiBgY3R4dC1cdTAwM2VncGFfd3JpdGVgIHRvIGBmYWxzZWAsIGp1c3QgbGlrZSBgZ3BhX2F2YWlsYWJsZWAuIEdvb2QuIEFuZCBsYXRlciBpbiB0aGUgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKClgIGZ1bmN0aW9uIHdlIHNldCBgY3R4dC1cdTAwM2VncGFfd3JpdGUgPSBlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEU7YCBpZiB0aGUgTU1VIGlzIG9wZXJhdGluZyBpbiBhIGRpcmVjdCBtb2RlLlxuNC4gIEZpbmFsbHksIHRoZXJlJ3MgYSBuZXcgZGVmaW5pdGlvbiwgYEVNVUxUWVBFX1BGX1dSSVRFYCwgaW4gYHg4Ni5oYC4gVGhpcyBpcyB0aGUgYml0IGZsYWcgYmVpbmcgdXNlZCBmb3IgdGhlIHdyaXRlIGNvbmRpdGlvbi5cblxuU28sIGZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGUgYGdwYV93cml0ZWAgZmxhZyBpcyB1c2VkIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGZhdWx0IHdhcyBhIHdyaXRlIGFuZCBgaW5pdF9lbXVsYXRlX2N0eHRgIGVuc3VyZXMgdGhhdCB0aGUgZmxhZyBpcyBpbml0aWFsaXplZCB0byBmYWxzZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgaXQncyBkZXNpZ25lZCB0byB0cmFjayBhIHdyaXRlLCB3aGljaCB3aWxsIHByZXZlbnQgdW5pbml0aWFsaXplZCByZWFkcy4gV2UgaW5pdGlhbGl6ZSwgd2Ugc2V0IGl0LCBhbmQgd2UgY2hlY2sgaXQuIEhvd2V2ZXIsIHRoZSB0cnVlIHRlc3QgaXMgd2hldGhlciB0aGlzIGlzIHRoZSBvbmx5IHBhdGggYnkgd2hpY2ggZ3BhX3dyaXRlIGNhbiBiZSBzZXQuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IGBpbml0X2VtdWxhdGVfY3R4dGAgYW5kIGFueXdoZXJlIHRoYXQgYHg4Nl9lbXVsYXRlX2N0eHRgIGlzIHVzZWQuIEknbGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBlciB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgaW5pdGlhbGl6YXRpb24gb3IgdXNhZ2UgcG9pbnRzLCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgb25seSBwYXRoIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGludGVyYWN0aW9ucyBJJ20gbWlzc2luZy4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSBgZ3BhX3dyaXRlYCBjb3VsZCBiZSBwb3RlbnRpYWxseSByZWFkIHVuaW5pdGlhbGl6ZWQsIG9yIHdoZXJlIGl0IGdldHMgc2V0IGluIGFuIHVuZXhwZWN0ZWQgd2F5LiBJJ2xsIHNlYXJjaCBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYGluaXRfZW11bGF0ZV9jdHh0YCBhbmQgYWxzbyBsb29rIGZvciBhbnkgY2FsbHMgZGlyZWN0bHkgb24gYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI5OjA4LjE3MjQwMzA0NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0ODA5MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluaXRfZW11bGF0ZV9jdHh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NTkyMj1zdGF0aWMgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmFsbG9jX2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTkzOC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTkzOTpzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU5NDAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTU5Njc9dm9pZCBrdm1faW5qZWN0X3JlYWxtb2RlX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBpcnEsIGludCBpbmNfZWlwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU5NzEtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU5NzI6XFx0aW5pdF9lbXVsYXRlX2N0eHQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU5NzMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjMxOT1pbnQgeDg2X2RlY29kZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsYXRpb25fdHlwZSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02MzI0LVxcbmFyY2gveDg2L2t2bS94ODYuYzo2MzI1OlxcdGluaXRfZW11bGF0ZV9jdHh0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02MzI2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTkwNzY9aW50IGt2bV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiB0c3Nfc2VsZWN0b3IsIGludCBpZHRfaW5kZXgsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTEwMC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTEwMTpcXHRpbml0X2VtdWxhdGVfY3R4dCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTEwMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6MDguNDc3MjIzNjYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNjMxOTk3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB4ODYgRW11bGF0aW9uIENvbnRleHQgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IHRoZSBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGlzIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBNeSBndXQgZmVlbGluZyBpcyB0aGUgYW5zd2VycyBJIG5lZWQgYXJlIGx1cmtpbmcgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIHNvIEknbGwgc3RhcnQgdGhlcmUuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lcyA1OTIyIGFuZCA2NDU1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIGluaXRpYWwgc2V0dXAgaW4gZGV0YWlsLiBIb3BlZnVsbHksIHRob3NlIHNwb3RzIGNvbnRhaW4gdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3RydWN0dXJlIGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjE5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6MTMuNTQwNDI2MjU1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTkyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTkyMDpcXHR9XFxuNTkyMTpcXHRcXG41OTIyOlxcdHN0YXRpYyBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqYWxsb2NfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG41OTIzOlxcdHtcXG41OTI0OlxcdFxcdHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0O1xcbjU5MjU6XFx0XFxuNTkyNjpcXHRcXHRjdHh0ID0ga21lbV9jYWNoZV96YWxsb2MoeDg2X2VtdWxhdG9yX2NhY2hlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjU5Mjc6XFx0XFx0aWYgKCFjdHh0KSB7XFxuNTkyODpcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBhbGxvY2F0ZSB2Y3B1J3MgZW11bGF0b3JcXFxcblxcXCIpO1xcbjU5Mjk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuNTkzMDpcXHRcXHR9XFxuNTkzMTpcXHRcXG41OTMyOlxcdFxcdGN0eHQtXFx1MDAzZXZjcHUgPSB2Y3B1O1xcbjU5MzM6XFx0XFx0Y3R4dC1cXHUwMDNlb3BzID0gXFx1MDAyNmVtdWxhdGVfb3BzO1xcbjU5MzQ6XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQgPSBjdHh0O1xcbjU5MzU6XFx0XFxuNTkzNjpcXHRcXHRyZXR1cm4gY3R4dDtcXG41OTM3OlxcdH1cXG41OTM4OlxcdFxcbjU5Mzk6XFx0c3RhdGljIHZvaWQgaW5pdF9lbXVsYXRlX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbjU5NDA6XFx0e1xcbjU5NDE6XFx0XFx0c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQgPSB2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfY3R4dDtcXG41OTQyOlxcdFxcdGludCBjc19kYiwgY3NfbDtcXG41OTQzOlxcdFxcbjU5NDQ6XFx0XFx0a3ZtX3g4Nl9jYWxsKGdldF9jc19kYl9sX2JpdHMpKHZjcHUsIFxcdTAwMjZjc19kYiwgXFx1MDAyNmNzX2wpO1xcbjU5NDU6XFx0XFxuNTk0NjpcXHRcXHRjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XFxuNTk0NzpcXHRcXHRjdHh0LVxcdTAwM2VncGFfd3JpdGUgPSBmYWxzZTtcXG41OTQ4OlxcdFxcdGN0eHQtXFx1MDAzZWVmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpO1xcbjU5NDk6XFx0XFx0Y3R4dC1cXHUwMDNldGYgPSAoY3R4dC1cXHUwMDNlZWZsYWdzIFxcdTAwMjYgWDg2X0VGTEFHU19URikgIT0gMDtcXG41OTUwOlxcdFxcbjU5NTE6XFx0XFx0Y3R4dC1cXHUwMDNlZWlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpO1xcbjU5NTI6XFx0XFx0Y3R4dC1cXHUwMDNlbW9kZSA9ICghaXNfcHJvdG1vZGUodmNwdSkpXFx0XFx0PyBYODZFTVVMX01PREVfUkVBTCA6XFxuNTk1MzpcXHRcXHRcXHQgICAgIChjdHh0LVxcdTAwM2VlZmxhZ3MgXFx1MDAyNiBYODZfRUZMQUdTX1ZNKVxcdD8gWDg2RU1VTF9NT0RFX1ZNODYgOlxcbjU5NTQ6XFx0XFx0XFx0ICAgICAoY3NfbCBcXHUwMDI2XFx1MDAyNiBpc19sb25nX21vZGUodmNwdSkpXFx0PyBYODZFTVVMX01PREVfUFJPVDY0IDpcXG41OTU1OlxcdFxcdFxcdCAgICAgY3NfZGJcXHRcXHRcXHRcXHQ/IFg4NkVNVUxfTU9ERV9QUk9UMzIgOlxcbjU5NTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBYODZFTVVMX01PREVfUFJPVDE2O1xcbjU5NTc6XFx0XFx0Y3R4dC1cXHUwMDNlaW50ZXJydXB0aWJpbGl0eSA9IDA7XFxuNTk1ODpcXHRcXHRjdHh0LVxcdTAwM2VoYXZlX2V4Y2VwdGlvbiA9IGZhbHNlO1xcbjU5NTk6XFx0XFx0Y3R4dC1cXHUwMDNlZXhjZXB0aW9uLnZlY3RvciA9IC0xO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyOToxMy41NDA5Njc3MTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2Mjk2MDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBLVk0ncyB4ODYgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBTcGVjaWZpY2FsbHksIEknbSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgNjQ1MC4gSSdtIGFzc3VtaW5nIHRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBJJ20gaW50ZXJlc3RlZCBpbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9ucyBhbmQgc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwsIHRoYXQgZmlsZSBpcyBhbG1vc3QgY2VydGFpbmx5IHdoZXJlIHRoZXkndmUgaW1wbGVtZW50ZWQgdGhlIHg4Ni1zcGVjaWZpYyBLVk0gZXh0ZW5zaW9ucy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBpbnRlcmFjdGlvbiBsb2dpYyBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgaG9zdCBpbiB0aGlzIGFyZWEuIFByb2JhYmx5IHJlbGF0ZWQgdG8gdmlydHVhbGl6YXRpb24gb2YgQ1BVIHJlZ2lzdGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6MTYuMDAzOTMwMTM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjQ0MDpcXHRcXHQgKiB3cml0aW5nIGluc3RydWN0aW9uLCB0cnkgdG8gdW5wcm90ZWN0IHRoZSBnZm4sIGkuZS4gemFwIHNoYWRvdyBwYWdlcyxcXG42NDQxOlxcdFxcdCAqIGFuZCByZXRyeSB0aGUgaW5zdHJ1Y3Rpb24sIGFzIHRoZSB2Q1BVIGlzIGxpa2VseSBubyBsb25nZXIgdXNpbmcgdGhlXFxuNjQ0MjpcXHRcXHQgKiBnZm4gYXMgYSBwYWdlIHRhYmxlLlxcbjY0NDM6XFx0XFx0ICovXFxuNjQ0NDpcXHRcXHRpZiAoKGVtdWxhdGlvbl90eXBlIFxcdTAwMjYgRU1VTFRZUEVfQUxMT1dfUkVUUllfUEYpIFxcdTAwMjZcXHUwMDI2XFxuNjQ0NTpcXHRcXHQgICAgIXg4Nl9wYWdlX3RhYmxlX3dyaXRpbmdfaW5zbihjdHh0KSBcXHUwMDI2XFx1MDAyNlxcbjY0NDY6XFx0XFx0ICAgIGt2bV9tbXVfdW5wcm90ZWN0X2dmbl9hbmRfcmV0cnkodmNwdSwgY3IyX29yX2dwYSkpXFxuNjQ0NzpcXHRcXHRcXHRyZXR1cm4gMTtcXG42NDQ4OlxcdFxcbjY0NDk6XFx0XFx0LyogdGhpcyBpcyBuZWVkZWQgZm9yIHZtd2FyZSBiYWNrZG9vciBpbnRlcmZhY2UgdG8gd29yayBzaW5jZSBpdFxcbjY0NTA6XFx0XFx0ICAgY2hhbmdlcyByZWdpc3RlcnMgdmFsdWVzICBkdXJpbmcgSU8gb3BlcmF0aW9uICovXFxuNjQ1MTpcXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSkge1xcbjY0NTI6XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSA9IGZhbHNlO1xcbjY0NTM6XFx0XFx0XFx0ZW11bGF0b3JfaW52YWxpZGF0ZV9yZWdpc3Rlcl9jYWNoZShjdHh0KTtcXG42NDU0OlxcdFxcdH1cXG42NDU1OlxcdFxcbjY0NTY6XFx0cmVzdGFydDpcXG42NDU3OlxcdFxcdGlmIChlbXVsYXRpb25fdHlwZSBcXHUwMDI2IEVNVUxUWVBFX1BGKSB7XFxuNjQ1ODpcXHRcXHRcXHQvKiBTYXZlIHRoZSBmYXVsdGluZyBHUEEgKGNyMikgaW4gdGhlIGFkZHJlc3MgZmllbGQgKi9cXG42NDU5OlxcdFxcdFxcdGN0eHQtXFx1MDAzZWV4Y2VwdGlvbi5hZGRyZXNzID0gY3IyX29yX2dwYTtcXG42NDYwOlxcdFxcbjY0NjE6XFx0XFx0XFx0LyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqL1xcbjY0NjI6XFx0XFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gubW11LVxcdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XFxuNjQ2MzpcXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlID0gdHJ1ZTtcXG42NDY0OlxcdFxcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV93cml0ZSA9IGVtdWxhdGlvbl90eXBlIFxcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEU7XFxuNjQ2NTpcXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcXG42NDY2OlxcdFxcdFxcdH1cXG42NDY3OlxcdFxcdH0gZWxzZSB7XFxuNjQ2ODpcXHRcXHRcXHQvKiBTYW5pdGl6ZSB0aGUgYWRkcmVzcyBvdXQgb2YgYW4gYWJ1bmRhbmNlIG9mIHBhcmFub2lhLiAqL1xcbjY0Njk6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZXhjZXB0aW9uLmFkZHJlc3MgPSAwO1xcbjY0NzA6XFx0XFx0fVxcbjY0NzE6XFx0XFxuNjQ3MjpcXHRcXHQvKlxcbjY0NzM6XFx0XFx0ICogQ2hlY2sgTDEncyBpbnN0cnVjdGlvbiBpbnRlcmNlcHRzIHdoZW4gZW11bGF0aW5nIGluc3RydWN0aW9ucyBmb3JcXG42NDc0OlxcdFxcdCAqIEwyLCB1bmxlc3MgS1ZNIGlzIHJlLWVtdWxhdGluZyBhIHByZXZpb3VzbHkgZGVjb2RlZCBpbnN0cnVjdGlvbixcXG42NDc1OlxcdFxcdCAqIGUuZy4gdG8gY29tcGxldGUgdXNlcnNwYWNlIEkvTywgaW4gd2hpY2ggY2FzZSBLVk0gaGFzIGFscmVhZHlcXG42NDc2OlxcdFxcdCAqIGNoZWNrZWQgdGhlIGludGVyY2VwdHMuXFxuNjQ3NzpcXHRcXHQgKi9cXG42NDc4OlxcdFxcdHIgPSB4ODZfZW11bGF0ZV9pbnNuKGN0eHQsIGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG42NDc5OlxcdFxcdFxcdFxcdFxcdCAgICEoZW11bGF0aW9uX3R5cGUgXFx1MDAyNiBFTVVMVFlQRV9OT19ERUNPREUpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6MTYuMDA0NTA5MTc2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjMyMjIxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIE1NVSBDb2RlKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBLVk0gYW5kIHNwZWNpZmljYWxseSB0aGUgTU1VIGltcGxlbWVudGF0aW9uLiBJJ20gdGhpbmtpbmcsIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nICpyZWFsbHkqIHdvcmtzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgZmlsZS4gSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgNjYzMi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdmFudGFnZSBwb2ludCB0byBnZXQgdG8gZ3JpcHMgd2l0aCB3aGF0J3MgZ29pbmcgb24gYXQgYSBkZXRhaWxlZCBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIE1NVSdzIGJlaGF2aW9yLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0NSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6MTguMDY3NzM0Njg3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY2MTU6XFx0XFxuNjYxNjpcXHRcXHRpZiAociA9PSBSRVRfUEZfRklYRUQpXFxuNjYxNzpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VzdGF0LnBmX2ZpeGVkKys7XFxuNjYxODpcXHRcXHRlbHNlIGlmIChyID09IFJFVF9QRl9FTVVMQVRFKVxcbjY2MTk6XFx0XFx0XFx0dmNwdS1cXHUwMDNlc3RhdC5wZl9lbXVsYXRlKys7XFxuNjYyMDpcXHRcXHRlbHNlIGlmIChyID09IFJFVF9QRl9TUFVSSU9VUylcXG42NjIxOlxcdFxcdFxcdHZjcHUtXFx1MDAzZXN0YXQucGZfc3B1cmlvdXMrKztcXG42NjIyOlxcdFxcbjY2MjM6XFx0XFx0LypcXG42NjI0OlxcdFxcdCAqIE5vbmUgb2YgaGFuZGxlX21taW9fcGFnZV9mYXVsdCgpLCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSwgb3JcXG42NjI1OlxcdFxcdCAqIGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdCgpIHJldHVybiBSRVRfUEZfQ09OVElOVUUuXFxuNjYyNjpcXHRcXHQgKiBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSBvbmx5IHVzZXMgUkVUX1BGX0NPTlRJTlVFIGludGVybmFsbHkgdG9cXG42NjI3OlxcdFxcdCAqIGluZGljYXRlIGNvbnRpbnVpbmcgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgdW50aWwgdG8gdGhlIGZpbmFsXFxuNjYyODpcXHRcXHQgKiBwYWdlIHRhYmxlIG1hcHBpbmcgcGhhc2UuXFxuNjYyOTpcXHRcXHQgKi9cXG42NjMwOlxcdFxcdFdBUk5fT05fT05DRShyID09IFJFVF9QRl9DT05USU5VRSk7XFxuNjYzMTpcXHRcXHRpZiAociAhPSBSRVRfUEZfRU1VTEFURSlcXG42NjMyOlxcdFxcdFxcdHJldHVybiByO1xcbjY2MzM6XFx0XFxuNjYzNDpcXHRlbXVsYXRlOlxcbjY2MzU6XFx0XFx0LypcXG42NjM2OlxcdFxcdCAqIEEgd3JpdGUgZHVyaW5nIGEgZ3Vlc3QgcGFnZSB3YWxrIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgaW5zdHJ1Y3Rpb25cXG42NjM3OlxcdFxcdCAqIGl0c2VsZiB0byB3cml0ZSB0byB0aGUgZmF1bHRpbmcgR1BBLiAgUmVxdWlyZSBhIGZpbmFsIHdyaXRlIGFjY2Vzc1xcbjY2Mzg6XFx0XFx0ICogYmVmb3JlIGFsbG93aW5nIHRoZSBlbXVsYXRvciB0byByZXVzZSB0aGUgR1BBIGZvciB3cml0ZXMuXFxuNjYzOTpcXHRcXHQgKi9cXG42NjQwOlxcdFxcdGlmIChkaXJlY3QgXFx1MDAyNlxcdTAwMjYgKGVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9XUklURV9NQVNLKSBcXHUwMDI2XFx1MDAyNlxcbjY2NDE6XFx0XFx0ICAgIChlcnJvcl9jb2RlIFxcdTAwMjYgUEZFUlJfR1VFU1RfRklOQUxfTUFTSykgXFx1MDAyNlxcdTAwMjZcXG42NjQyOlxcdFxcdCAgICAhKGVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9HVUVTVF9QQUdFX01BU0spKVxcbjY2NDM6XFx0XFx0XFx0ZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7XFxuNjY0NDpcXHRcXG42NjQ1OlxcdFxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcXG42NjQ2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnNuX2xlbik7XFxuNjY0NzpcXHR9XFxuNjY0ODpcXHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX21tdV9wYWdlX2ZhdWx0KTtcXG42NjQ5OlxcdFxcbjY2NTA6XFx0dm9pZCBrdm1fbW11X3ByaW50X3NwdGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCBjb25zdCBjaGFyICptc2cpXFxuNjY1MTpcXHR7XFxuNjY1MjpcXHRcXHR1NjQgc3B0ZXNbUFQ2NF9ST09UX01BWF9MRVZFTCArIDFdO1xcbjY2NTM6XFx0XFx0aW50IHJvb3RfbGV2ZWwsIGxlYWYsIGxldmVsO1xcbjY2NTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI5OjE4LjA2ODE5NDI1N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDkxMDcxMDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZSBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCBmdW5jdGlvbiB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuY2AuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgd2UgbWlnaHQgZmluZCBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzLCB1bmRvdWJ0ZWRseSwgYSBjb3JlIGNvbXBvbmVudCBvZiBob3cgdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBtZW1vcnkgb3BlcmF0aW9ucyBhdCB0aGUgc2luZ2xlLXBhZ2UgbGV2ZWwgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIGdyaXR0eSBkZXRhaWxzIG9mIGVtdWxhdGluZyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gYSBndWVzdCdzIG1lbW9yeSBzcGFjZSByZXNpZGUuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHRyYXBwaW5nIGFuZCBoYW5kbGluZyBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMsIHBhZ2UgZmF1bHRzLCBvciBwb3RlbnRpYWxseSBldmVuIE1NSU8gKE1lbW9yeS1NYXBwZWQgSS9PKSBzY2VuYXJpb3MsIGRlcGVuZGluZyBvbiBob3cgaXQncyBpbXBsZW1lbnRlZC4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHVzZSBvZiBhbnkgc3BlY2lmaWMgeDg2IGluc3RydWN0aW9ucyBvciBmZWF0dXJlcyB0aGF0IGl0IGxldmVyYWdlcyBmb3IgZWZmaWNpZW5jeSBhbmQgY29ycmVjdG5lc3MuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IGl0IHZhbGlkYXRlcyB0aGUgZ3Vlc3QncyBwaHlzaWNhbCBhZGRyZXNzLCBoYW5kbGVzIHBvdGVudGlhbCB0cmFuc2xhdGlvbiBpc3N1ZXMsIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgaG9zdCdzIG1lbW9yeSB0byBwZXJmb3JtIHRoZSBkYXRhIHRyYW5zZmVyLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHVzZWQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyBjb25jdXJyZW50IGFjY2VzcywgYW5kIHdoYXQgdGhlIGVycm9yIGhhbmRsaW5nIGxvb2tzIGxpa2Ugd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZy4gSSB3YW50IHRvIHNlZSBpZiBhbnkgb3B0aW1pemF0aW9ucyBsaWtlIHBhZ2UgY2FjaGluZyBhcmUgaW1wbGVtZW50ZWQgaGVyZSwgYmVjYXVzZSwgaWYgdGhleSBhcmUsIHRoYXQncyB3aGF0IHdpbGwgYmUga2V5LiBUaGlzIGlzIHRoZSBoZWFydCBvZiBtZW1vcnkgZW11bGF0aW9uLCBzbyB0aGUgZGV2aWwgd2lsbCBiZSBpbiB0aGUgZGV0YWlscy4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBsb3RzIHRvIHVucmF2ZWwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwOTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI5OjI4Ljk3ODkwODA3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTA1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwODAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUwODA6XFx0XFx0aW50IGhhbmRsZWQsIHJldDtcXG41MDgxOlxcdFxcdGJvb2wgd3JpdGUgPSBvcHMtXFx1MDAzZXdyaXRlO1xcbjUwODI6XFx0XFx0c3RydWN0IGt2bV9tbWlvX2ZyYWdtZW50ICpmcmFnO1xcbjUwODM6XFx0XFx0c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQgPSB2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfY3R4dDtcXG41MDg0OlxcdFxcbjUwODU6XFx0XFx0LypcXG41MDg2OlxcdFxcdCAqIElmIHRoZSBleGl0IHdhcyBkdWUgdG8gYSBOUEYgd2UgbWF5IGFscmVhZHkgaGF2ZSBhIEdQQS5cXG41MDg3OlxcdFxcdCAqIElmIHRoZSBHUEEgaXMgcHJlc2VudCwgdXNlIGl0IHRvIGF2b2lkIHRoZSBHVkEgdG8gR1BBIHRhYmxlIHdhbGsuXFxuNTA4ODpcXHRcXHQgKiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIG9uIHN0cmluZyBvcGVyYXRpb25zIHNpbmNlIHN0cmluZ1xcbjUwODk6XFx0XFx0ICogb3BlcmF0aW9uIHVzaW5nIHJlcCB3aWxsIG9ubHkgaGF2ZSB0aGUgaW5pdGlhbCBHUEEgZnJvbSB0aGUgTlBGXFxuNTA5MDpcXHRcXHQgKiBvY2N1cnJlZC5cXG41MDkxOlxcdFxcdCAqXFxuNTA5MjpcXHRcXHQgKiBUaGUgZ3Vlc3QgbWF5IGhhdmUgY2hhbmdlZCB0aGUgaW5zdHJ1Y3Rpb24gc2luY2UgdGhlIGZhdWx0LiAgUmV1c2VcXG41MDkzOlxcdFxcdCAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgZmluYWwgd3JpdGUgYWNjZXNzO1xcbjUwOTQ6XFx0XFx0ICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuXFxuNTA5NTpcXHRcXHQgKi9cXG41MDk2OlxcdFxcdGlmIChjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlIFxcdTAwMjZcXHUwMDI2ICghd3JpdGUgfHwgY3R4dC1cXHUwMDNlZ3BhX3dyaXRlKSBcXHUwMDI2XFx1MDAyNlxcbjUwOTc6XFx0XFx0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFxcdTAwMjZcXHUwMDI2XFxuNTA5ODpcXHRcXHQgICAgKGFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cXHUwMDNlZ3BhX3ZhbCBcXHUwMDI2IH5QQUdFX01BU0spKSB7XFxuNTA5OTpcXHRcXHRcXHRncGEgPSBjdHh0LVxcdTAwM2VncGFfdmFsO1xcbjUxMDA6XFx0XFx0XFx0cmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTtcXG41MTAxOlxcdFxcdH0gZWxzZSB7XFxuNTEwMjpcXHRcXHRcXHRyZXQgPSB2Y3B1X21taW9fZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyLCBcXHUwMDI2Z3BhLCBleGNlcHRpb24sIHdyaXRlKTtcXG41MTAzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjUxMDQ6XFx0XFx0XFx0XFx0cmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUO1xcbjUxMDU6XFx0XFx0fVxcbjUxMDY6XFx0XFxuNTEwNzpcXHRcXHQvKlxcbjUxMDg6XFx0XFx0ICogSWYgdGhlIG1lbW9yeSBpcyBub3QgX2tub3duXyB0byBiZSBlbXVsYXRlZCBNTUlPLCBhdHRlbXB0IHRvIGFjY2Vzc1xcbjUxMDk6XFx0XFx0ICogZ3Vlc3QgbWVtb3J5LiAgSWYgYWNjZXNzaW5nIGd1ZXN0IG1lbW9yeSBmYWlscywgZS5nLiBiZWNhdXNlIHRoZXJlJ3NcXG41MTEwOlxcdFxcdCAqIG5vIG1lbXNsb3QsIHRoZW4gaGFuZGxlIHRoZSBhY2Nlc3MgYXMgTU1JTy4gIE5vdGUsIHRyZWF0aW5nIHRoZVxcbjUxMTE6XFx0XFx0ICogYWNjZXNzIGFzIGVtdWxhdGVkIE1NSU8gaXMgdGVjaG5pY2FsbHkgd3JvbmcgaWYgdGhlcmUgaXMgYSBtZW1zbG90LFxcbjUxMTI6XFx0XFx0ICogaS5lLiBpZiBhY2Nlc3NpbmcgaG9zdCB1c2VyIG1lbW9yeSBmYWlsZWQsIGJ1dCB0aGlzIGhhcyBiZWVuIEtWTSdzXFxuNTExMzpcXHRcXHQgKiBoaXN0b3JpY2FsIEFCSSBmb3IgZGVjYWRlcy5cXG41MTE0OlxcdFxcdCAqL1xcbjUxMTU6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VyZWFkX3dyaXRlX2d1ZXN0KHZjcHUsIGdwYSwgdmFsLCBieXRlcykpXFxuNTExNjpcXHRcXHRcXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcXG41MTE3OlxcdFxcbjUxMTg6XFx0XFx0LypcXG41MTE5OlxcdFxcdCAqIEF0dGVtcHQgdG8gaGFuZGxlIGVtdWxhdGVkIE1NSU8gd2l0aGluIHRoZSBrZXJuZWwsIGUuZy4gZm9yIGFjY2Vzc2VzXFxuNTEyMDpcXHRcXHQgKiB0byBhbiBpbi1rZXJuZWwgbG9jYWwgb3IgSS9PIEFQSUMsIG9yIHRvIGFuIGlvZXZlbnRmZCByYW5nZSBhdHRhY2hlZFxcbjUxMjE6XFx0XFx0ICogdG8gTU1JTyBidXMuICBJZiB0aGUgYWNjZXNzIGlzbid0IGZ1bGx5IHJlc29sdmVkLCBpbnNlcnQgYW4gTU1JT1xcbjUxMjI6XFx0XFx0ICogZnJhZ21lbnQgd2l0aCB0aGUgcmVsZXZhbnQgZGV0YWlscy5cXG41MTIzOlxcdFxcdCAqL1xcbjUxMjQ6XFx0XFx0aGFuZGxlZCA9IG9wcy1cXHUwMDNlcmVhZF93cml0ZV9tbWlvKHZjcHUsIGdwYSwgYnl0ZXMsIHZhbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI5OjI4Ljk3OTQ2MTQ1NloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzU4NDgyOTc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHBhdGNoIHJlcXVpcmVzIGBOZWVkc0tNU0FOPXRydWVgLiBJIG5lZWQgdG8gc3lzdGVtYXRpY2FsbHkgZXZhbHVhdGUgdGhlIGNvZGUgYWdhaW5zdCB0aGUgZG9jdW1lbnRlZCBjcml0ZXJpYSBmb3IgS01TQU4gZW5hYmxlbWVudCwga2VlcGluZyBpbiBtaW5kIHRoYXQgdGhlIHByaW1hcnkgcmlza3MgS01TQU4gZmxhZ3MgYXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxuXG5GaXJzdCwgSSB3ZW50IHRocm91Z2ggdGhlIGNyaXRlcmlhOiBLTVNBTiBpcyByZWxldmFudCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZHMsIGludHJvZHVjZXMgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGludm9sdmVzIGFsbG9jYXRpbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXIsIG9yIG1vZGlmaWVzIGJvdW5kcyBjaGVja3MgaW4gd2F5cyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIE90aGVyd2lzZSwgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgc3VmZmljZS5cblxuTm93LCBsZXQncyBhbmFseXplIHRoZSBwYXRjaCBpdHNlbGYuIEkndmUgZ290IGEgbmV3IGJvb2xlYW4gdmFyaWFibGUsIGBncGFfd3JpdGVgLCBpbnRyb2R1Y2VkIGluIGB4ODZfZW11bGF0ZV9jdHh0YC4gSW1tZWRpYXRlbHksIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBleHBsaWNpdGx5IHplcm9lcyB0aGlzIHdpdGggYGN0eHQtXHUwMDNlZ3BhX3dyaXRlID0gZmFsc2VgLiBGdXJ0aGVybW9yZSwgdGhlIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZ3VhcmFudGVlZCB6ZXJvZWQuIExhdGVyIGluIHRoZSBjb2RlLCBgY3R4dC1cdTAwM2VncGFfd3JpdGVgIGlzIGNvbmRpdGlvbmFsbHkgc2V0IHRvIGEgdmFsdWUgZGVyaXZlZCBmcm9tIGBlbXVsYXRpb25fdHlwZWAgaW4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKClgLCBidXQgKm9ubHkqIGlmIGBjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGVgIGlzIGFsc28gdHJ1ZS4gVGhlIHJlYWQgaW4gYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSgpYCBpcyBzaW1pbGFybHkgY29uZGl0aW9uYWwgb24gYGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZWAsIGFuZCB0aGlzIHZhcmlhYmxlIGlzICphbHdheXMqIGluaXRpYWxpemVkLiBJIHNlZSBubyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gaW5mb3JtYXRpb24gbGVha3MsIGFuZCBubyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIG5ldyBzdHJ1Y3R1cmUgbWVtYmVyIGFuZCBhbGwgZXhpc3RpbmcgbWVtYmVycyBhcmUgaW5pdGlhbGl6ZWQgKGVpdGhlciBleHBsaWNpdGx5IG9yIHZpYSB0aGUgYWxsb2NhdGlvbiksIGFuZCB0aGVyZSdzIG5vIHdheSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBgTmVlZHNLTVNBTmAgY2xlYXJseSBzaG91bGQgYmUgYGZhbHNlYC5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ3ZlIGNoZWNrZWQgYWxsIHRoZSBtb2RpZmllZCBmaWxlczogYGFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oYCAoYWRkaW5nIGBncGFfd3JpdGVgKSwgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIChzZXR0aW5nIGBFTVVMVFlQRV9QRl9XUklURWApLCBgYXJjaC94ODYva3ZtL3g4Ni5jYCAoaW5pdGlhbGl6aW5nIGFuZCB1c2luZyBgY3R4dC1cdTAwM2VncGFfd3JpdGVgKSwgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmhgIChkZWZpbmluZyBgRU1VTFRZUEVfUEZfV1JJVEVgKS4gRXZlcnl0aGluZyBpcyBwcmlzdGluZTsgdGhlcmUgYXJlIG5vIHJpc2tzIHdoYXRzb2V2ZXIuXG5cblRpbWUgdG8gZmVlZCB0aGlzIHJlYXNvbmluZyBpbnRvIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjcsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6NTYuNTY0MjkzMjQ4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBpc3N1ZSBpbiBLVk0gd2hlcmUgYSBmYXVsdGluZyBHUEEgd2FzIHJldXNlZCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSBoYXJkd2FyZSBwYWdlIGZhdWx0IHdhcyBhbiBhY3R1YWwgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaW5hbCBHUEEuIEl0IGludHJvZHVjZXMgYSBuZXcgYm9vbGVhbiBmaWVsZCBgZ3BhX3dyaXRlYCB0byBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGFuZCBhbiBlbXVsYXRpb24gZmxhZyBgRU1VTFRZUEVfUEZfV1JJVEVgLlxcblxcblRoZSBuZXcgZmllbGQgYGdwYV93cml0ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgYWxsb2NfZW11bGF0ZV9jdHh0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgY29weS10by11c2VyIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBpc3N1ZSBpbiBLVk0gd2hlcmUgYSBmYXVsdGluZyBHUEEgd2FzIHJldXNlZCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSBoYXJkd2FyZSBwYWdlIGZhdWx0IHdhcyBhbiBhY3R1YWwgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaW5hbCBHUEEuIEl0IGludHJvZHVjZXMgYSBuZXcgYm9vbGVhbiBmaWVsZCBgZ3BhX3dyaXRlYCB0byBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGFuZCBhbiBlbXVsYXRpb24gZmxhZyBgRU1VTFRZUEVfUEZfV1JJVEVgLlxcblxcblRoZSBuZXcgZmllbGQgYGdwYV93cml0ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgYWxsb2NfZW11bGF0ZV9jdHh0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgY29weS10by11c2VyIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowjzk5p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-28 20:26:58 +0000 UTC FinishedAt: 2026-08-28 20:29:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "73e3f0710014fe6d4ed98cfc02292f6121db7558", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "73e3f0710014fe6d4ed98cfc02292f6121db7558", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "0c417af7-7d8b-4207-9f06-b21c9c083aaf" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_mmu_page_fault", "x86_emulate_instruction" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfcGFnZV9mYXVsdCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIGlzc3VlIGluIEtWTSB3aGVyZSBhIGZhdWx0aW5nIEdQQSB3YXMgcmV1c2VkIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlIGhhcmR3YXJlIHBhZ2UgZmF1bHQgd2FzIGFuIGFjdHVhbCB3cml0ZSBhY2Nlc3MgdG8gdGhlIGZpbmFsIEdQQS4gSXQgaW50cm9kdWNlcyBhIG5ldyBib29sZWFuIGZpZWxkIGBncGFfd3JpdGVgIHRvIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGAgYW5kIGFuIGVtdWxhdGlvbiBmbGFnIGBFTVVMVFlQRV9QRl9XUklURWAuXG5cblRoZSBuZXcgZmllbGQgYGdwYV93cml0ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgYWxsb2NfZW11bGF0ZV9jdHh0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgY29weS10by11c2VyIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYW5kIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGNhY2hlZCBHUEEgaXMgb25seSByZXVzZWQgZm9yIHdyaXRlcyBkdXJpbmcgZW11bGF0aW9uIGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgZmluYWwgd3JpdGUgYWNjZXNzIChFTVVMVFlQRV9QRl9XUklURSksIHByZXZlbnRpbmcgdW5hdXRob3JpemVkIGd1ZXN0IG1lbW9yeSB3cml0ZXMuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29yZSBWTSBleGVjdXRpb24gcGF0aHMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBwYWdlIGZhdWx0IGVtdWxhdGlvbiwgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZTUwY2E3YjhmMGE4NzJjOGZlODkwYTk4MmI5MzhiMzk2ZDc1NDhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjA6Mjg6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuaW5kZXggM2UzNzVhZjE1YzAzNS4uYWNlY2E5ZDNhMTZkMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuQEAgLTM1NCw4ICYjNDM7MzU0LDkgQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQge1xuIFx0Ym9vbCBoYXZlX2V4Y2VwdGlvbjtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGV4Y2VwdGlvbjtcbiBcbi1cdC8qIEdQQSBhdmFpbGFibGUgKi9cbiYjNDM7XHQvKiBHUEEgYW5kIHdyaXRlIGFjY2VzcyBzdXBwbGllZCBieSBhIGhhcmR3YXJlIHBhZ2UgZmF1bHQuICovXG4gXHRib29sIGdwYV9hdmFpbGFibGU7XG4mIzQzO1x0Ym9vbCBncGFfd3JpdGU7XG4gXHRncGFfdCBncGFfdmFsO1xuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uMjIzNjk4Y2JiOWJlNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC02NjMyLDYgJiM0Mzs2NjMyLDE2IEBAIGludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyXG4gXHRcdHJldHVybiByO1xuIFxuIGVtdWxhdGU6XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHdyaXRlIGR1cmluZyBhIGd1ZXN0IHBhZ2Ugd2FsayBkb2VzIG5vdCBhdXRob3JpemUgdGhlIGluc3RydWN0aW9uXG4mIzQzO1x0ICogaXRzZWxmIHRvIHdyaXRlIHRvIHRoZSBmYXVsdGluZyBHUEEuICBSZXF1aXJlIGEgZmluYWwgd3JpdGUgYWNjZXNzXG4mIzQzO1x0ICogYmVmb3JlIGFsbG93aW5nIHRoZSBlbXVsYXRvciB0byByZXVzZSB0aGUgR1BBIGZvciB3cml0ZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRpcmVjdCBcdTAwMjZcdTAwMjYgKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1dSSVRFX01BU0spIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfR1VFU1RfRklOQUxfTUFTSykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEoZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfR1VFU1RfUEFHRV9NQVNLKSlcbiYjNDM7XHRcdGVtdWxhdGlvbl90eXBlIHw9IEVNVUxUWVBFX1BGX1dSSVRFO1xuJiM0MztcbiBcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcbiBcdFx0XHRcdCAgICAgICBpbnNuX2xlbik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uOGM0NmFhMzQ2OGMyZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTA4OCw4ICYjNDM7NTA4OCwxMyBAQCBzdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKnZhbCxcbiBcdCAqIE5vdGUsIHRoaXMgY2Fubm90IGJlIHVzZWQgb24gc3RyaW5nIG9wZXJhdGlvbnMgc2luY2Ugc3RyaW5nXG4gXHQgKiBvcGVyYXRpb24gdXNpbmcgcmVwIHdpbGwgb25seSBoYXZlIHRoZSBpbml0aWFsIEdQQSBmcm9tIHRoZSBOUEZcbiBcdCAqIG9jY3VycmVkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXG4mIzQzO1x0ICogdGhlIEdQQSBmb3Igd3JpdGVzIG9ubHkgaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSBmaW5hbCB3cml0ZSBhY2Nlc3M7XG4mIzQzO1x0ICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuXG4gXHQgKi9cbi1cdGlmIChjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgXHUwMDI2XHUwMDI2IGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmIChjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgXHUwMDI2XHUwMDI2ICghd3JpdGUgfHwgY3R4dC1cdTAwM2VncGFfd3JpdGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoYWRkciBcdTAwMjYgflBBR0VfTUFTSykgPT0gKGN0eHQtXHUwMDNlZ3BhX3ZhbCBcdTAwMjYgflBBR0VfTUFTSykpIHtcbiBcdFx0Z3BhID0gY3R4dC1cdTAwM2VncGFfdmFsO1xuIFx0XHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xuQEAgLTU5MzksNiAmIzQzOzU5NDQsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXHUwMDI2Y3NfZGIsIFx1MDAyNmNzX2wpO1xuIFxuIFx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XG4mIzQzO1x0Y3R4dC1cdTAwM2VncGFfd3JpdGUgPSBmYWxzZTtcbiBcdGN0eHQtXHUwMDNlZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7XG4gXHRjdHh0LVx1MDAzZXRmID0gKGN0eHQtXHUwMDNlZWZsYWdzIFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xuIFxuQEAgLTY0NTUsNiAmIzQzOzY0NjEsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuIFx0XHQvKiBXaXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgY3IyIGNvbnRhaW5zIGEgR1ZBIG9yIG5HUEEuICovXG4gXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gubW11LVx1MDAzZXJvb3Rfcm9sZS5kaXJlY3QpIHtcbiBcdFx0XHRjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgPSB0cnVlO1xuJiM0MztcdFx0XHRjdHh0LVx1MDAzZWdwYV93cml0ZSA9IGVtdWxhdGlvbl90eXBlIFx1MDAyNiBFTVVMVFlQRV9QRl9XUklURTtcbiBcdFx0XHRjdHh0LVx1MDAzZWdwYV92YWwgPSBjcjJfb3JfZ3BhO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggMGY1OTE5YjA5MmU0Ny4uMmRkNDU2YWQzZTJkNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5AQCAtNDA3LDYgJiM0Mzs0MDcsOSBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2VcbiAgKlx0XHQgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuXG4gICpcbiYjNDM7ICogRU1VTFRZUEVfUEZfV1JJVEUgLSBTZXQgd2l0aCBFTVVMVFlQRV9QRiB3aGVuIGhhcmR3YXJlIHJlcG9ydHMgYSB3cml0ZSB0byB0aGVcbiYjNDM7ICpcdFx0ICAgICBmaW5hbCBHUEEsIG5vdCBhbiBpbXBsaWNpdCBndWVzdCBwYWdlLXRhYmxlIGFjY2Vzcy5cbiYjNDM7ICpcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XG4gICpcdFx0XHRcdCBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmdcbiAgKlx0XHRcdFx0IGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLlxuQEAgLTQ0NSw2ICYjNDM7NDQ4LDcgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbiAjZGVmaW5lIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAoMSBcdTAwM2NcdTAwM2MgNylcbiAjZGVmaW5lIEVNVUxUWVBFX1dSSVRFX1BGX1RPX1NQXHQgICAgKDEgXHUwMDNjXHUwMDNjIDgpXG4gI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UXHQgICAgKDEgXHUwMDNjXHUwMDNjIDkpXG4mIzQzOyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVcdCAgICBCSVQoMTApXG4gXG4gI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpXHQoKHUzMikoKHYpIFx1MDAyNiAweGZmKSBcdTAwM2NcdTAwM2MgMTYpXG4gI2RlZmluZSBFTVVMVFlQRV9HRVRfU09GVF9JTlRfVkVDVE9SKGUpXHQoKChlKSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfcGFnZV9mYXVsdCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBhbmQgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY2FjaGVkIEdQQSBpcyBvbmx5IHJldXNlZCBmb3Igd3JpdGVzIGR1cmluZyBlbXVsYXRpb24gaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSBmaW5hbCB3cml0ZSBhY2Nlc3MgKEVNVUxUWVBFX1BGX1dSSVRFKSwgcHJldmVudGluZyB1bmF1dGhvcml6ZWQgZ3Vlc3QgbWVtb3J5IHdyaXRlcy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIFZNIGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IHBhZ2UgZmF1bHQgZW11bGF0aW9uLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdlNTBjYTdiOGYwYTg3MmM4ZmU4OTBhOTgyYjkzOGIzOTZkNzU0OGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyOCAyMDoyODowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKaW5kZXggM2UzNzVhZjE1YzAzNS4uYWNlY2E5ZDNhMTZkMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKQEAgLTM1NCw4ICYjNDM7MzU0LDkgQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgewogCWJvb2wgaGF2ZV9leGNlcHRpb247CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZXhjZXB0aW9uOwogCi0JLyogR1BBIGF2YWlsYWJsZSAqLwomIzQzOwkvKiBHUEEgYW5kIHdyaXRlIGFjY2VzcyBzdXBwbGllZCBieSBhIGhhcmR3YXJlIHBhZ2UgZmF1bHQuICovCiAJYm9vbCBncGFfYXZhaWxhYmxlOwomIzQzOwlib29sIGdwYV93cml0ZTsKIAlncGFfdCBncGFfdmFsOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDA2NGVjYzMzYjkyNjcuLjIyMzY5OGNiYjliZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNjYzMiw2ICYjNDM7NjYzMiwxNiBAQCBpbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycgogCQlyZXR1cm4gcjsKIAogZW11bGF0ZToKJiM0MzsJLyoKJiM0MzsJICogQSB3cml0ZSBkdXJpbmcgYSBndWVzdCBwYWdlIHdhbGsgZG9lcyBub3QgYXV0aG9yaXplIHRoZSBpbnN0cnVjdGlvbgomIzQzOwkgKiBpdHNlbGYgdG8gd3JpdGUgdG8gdGhlIGZhdWx0aW5nIEdQQS4gIFJlcXVpcmUgYSBmaW5hbCB3cml0ZSBhY2Nlc3MKJiM0MzsJICogYmVmb3JlIGFsbG93aW5nIHRoZSBlbXVsYXRvciB0byByZXVzZSB0aGUgR1BBIGZvciB3cml0ZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGlyZWN0ICZhbXA7JmFtcDsgKGVycm9yX2NvZGUgJmFtcDsgUEZFUlJfV1JJVEVfTUFTSykgJmFtcDsmYW1wOwomIzQzOwkgICAgKGVycm9yX2NvZGUgJmFtcDsgUEZFUlJfR1VFU1RfRklOQUxfTUFTSykgJmFtcDsmYW1wOwomIzQzOwkgICAgIShlcnJvcl9jb2RlICZhbXA7IFBGRVJSX0dVRVNUX1BBR0VfTUFTSykpCiYjNDM7CQllbXVsYXRpb25fdHlwZSB8PSBFTVVMVFlQRV9QRl9XUklURTsKJiM0MzsKIAlyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyX29yX2dwYSwgZW11bGF0aW9uX3R5cGUsIGluc24sCiAJCQkJICAgICAgIGluc25fbGVuKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCA3OTQ2OGRkZmU0NzM2Li44YzQ2YWEzNDY4YzJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC01MDg4LDggJiM0Mzs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLAogCSAqIE5vdGUsIHRoaXMgY2Fubm90IGJlIHVzZWQgb24gc3RyaW5nIG9wZXJhdGlvbnMgc2luY2Ugc3RyaW5nCiAJICogb3BlcmF0aW9uIHVzaW5nIHJlcCB3aWxsIG9ubHkgaGF2ZSB0aGUgaW5pdGlhbCBHUEEgZnJvbSB0aGUgTlBGCiAJICogb2NjdXJyZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBndWVzdCBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBpbnN0cnVjdGlvbiBzaW5jZSB0aGUgZmF1bHQuICBSZXVzZQomIzQzOwkgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzczsKJiM0MzsJICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuCiAJICovCi0JaWYgKGN0eHQtJmd0O2dwYV9hdmFpbGFibGUgJmFtcDsmYW1wOyBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSAmYW1wOyZhbXA7CiYjNDM7CWlmIChjdHh0LSZndDtncGFfYXZhaWxhYmxlICZhbXA7JmFtcDsgKCF3cml0ZSB8fCBjdHh0LSZndDtncGFfd3JpdGUpICZhbXA7JmFtcDsKJiM0MzsJICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpICZhbXA7JmFtcDsKIAkgICAgKGFkZHIgJmFtcDsgflBBR0VfTUFTSykgPT0gKGN0eHQtJmd0O2dwYV92YWwgJmFtcDsgflBBR0VfTUFTSykpIHsKIAkJZ3BhID0gY3R4dC0mZ3Q7Z3BhX3ZhbDsKIAkJcmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTsKQEAgLTU5MzksNiAmIzQzOzU5NDQsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJa3ZtX3g4Nl9jYWxsKGdldF9jc19kYl9sX2JpdHMpKHZjcHUsICZhbXA7Y3NfZGIsICZhbXA7Y3NfbCk7CiAKIAljdHh0LSZndDtncGFfYXZhaWxhYmxlID0gZmFsc2U7CiYjNDM7CWN0eHQtJmd0O2dwYV93cml0ZSA9IGZhbHNlOwogCWN0eHQtJmd0O2VmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpOwogCWN0eHQtJmd0O3RmID0gKGN0eHQtJmd0O2VmbGFncyAmYW1wOyBYODZfRUZMQUdTX1RGKSAhPSAwOwogCkBAIC02NDU1LDYgJiM0Mzs2NDYxLDcgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKIAkJLyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqLwogCQlpZiAodmNwdS0mZ3Q7YXJjaC5tbXUtJmd0O3Jvb3Rfcm9sZS5kaXJlY3QpIHsKIAkJCWN0eHQtJmd0O2dwYV9hdmFpbGFibGUgPSB0cnVlOwomIzQzOwkJCWN0eHQtJmd0O2dwYV93cml0ZSA9IGVtdWxhdGlvbl90eXBlICZhbXA7IEVNVUxUWVBFX1BGX1dSSVRFOwogCQkJY3R4dC0mZ3Q7Z3BhX3ZhbCA9IGNyMl9vcl9ncGE7CiAJCX0KIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oCmluZGV4IDBmNTkxOWIwOTJlNDcuLjJkZDQ1NmFkM2UyZDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmgKQEAgLTQwNyw2ICYjNDM7NDA3LDkgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2UKICAqCQkgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuCiAgKgomIzQzOyAqIEVNVUxUWVBFX1BGX1dSSVRFIC0gU2V0IHdpdGggRU1VTFRZUEVfUEYgd2hlbiBoYXJkd2FyZSByZXBvcnRzIGEgd3JpdGUgdG8gdGhlCiYjNDM7ICoJCSAgICAgZmluYWwgR1BBLCBub3QgYW4gaW1wbGljaXQgZ3Vlc3QgcGFnZS10YWJsZSBhY2Nlc3MuCiYjNDM7ICoKICAqIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAtIFNldCB3aGVuIHRoZSBlbXVsYXRvciBzaG91bGQgdXBkYXRlIGludGVycnVwdGliaWxpdHkKICAqCQkJCSBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmcKICAqCQkJCSBhbiBpbnN0cnVjdGlvbiAoYWZ0ZXIgY29tcGxldGluZyB1c2Vyc3BhY2UgSS9PKS4KQEAgLTQ0NSw2ICYjNDM7NDQ4LDcgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxICZsdDsmbHQ7IDcpCiAjZGVmaW5lIEVNVUxUWVBFX1dSSVRFX1BGX1RPX1NQCSAgICAoMSAmbHQ7Jmx0OyA4KQogI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UCSAgICAoMSAmbHQ7Jmx0OyA5KQomIzQzOyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEUJICAgIEJJVCgxMCkKIAogI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpCSgodTMyKSgodikgJmFtcDsgMHhmZikgJmx0OyZsdDsgMTYpCiAjZGVmaW5lIEVNVUxUWVBFX0dFVF9TT0ZUX0lOVF9WRUNUT1IoZSkJKCgoZSkgJmd0OyZndDsgMTYpICZhbXA7IDB4ZmYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgS1ZNIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3MgYSBmZXcga2V5IEtWTS94ODYgZmlsZXM6IGBrdm1fZW11bGF0ZS5oYCwgYG1tdS9tbXUuY2AsIGB4ODYuY2AsIGFuZCBgeDg2LmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBjb3JlIEtWTSBzdHVmZiwgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY29kZToKCkluIGBtbXUuY2AsIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGhhcyBiZWVuIHVwZGF0ZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgbm93IHNldHRpbmcgYEVNVUxUWVBFX1BGX1dSSVRFYCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zOiB3aGVuIGRpcmVjdCBhY2Nlc3MgaXMgYWxsb3dlZCwgYSB3cml0ZSBlcnJvciBpcyBmbGFnZ2VkLCB0aGUgZ3Vlc3QgZmluYWwgYml0IGlzIHNldCwgYW5kIHRoZSBndWVzdCBwYWdlIGJpdCBpcyBub3Qgc2V0LiBUaGlzIGlzIGludGVyZXN0aW5nIOKAkyBpdCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIHdyaXRlIGZhdWx0cyB3aXRoaW4gdGhlIE1NVSBlbXVsYXRpb24uCgpUaGVuLCBsb29raW5nIGF0IGB4ODYuY2AsIEkgc2VlIHNvbWUgY2hhbmdlcyBpbiBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYC4gVGhlcmUmIzM5O3Mgbm93IGEgY2hlY2sgdGhhdCBzZWVtcyB0byBkZXRlcm1pbmUgd2hlbiBhIEdQQSBjYW4gYmUgdXNlZCBmb3Igd3JpdGVzLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCAoYGN0eHRgKSBhbmQgd2hldGhlciB0aGUgYGVtdWxhdG9yX2Nhbl91c2VfZ3BhKClgIGZ1bmN0aW9uIGlzIHRydWUuIFRoZSBgaW5pdF9lbXVsYXRlX2N0eHRgIGZ1bmN0aW9uIHNldHMgYGN0eHQtJmd0O2dwYV93cml0ZWAgdG8gZmFsc2UgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgc2V0cyBpdCB0byBgZW11bGF0aW9uX3R5cGUgJmFtcDsgRU1VTFRZUEVfUEZfV1JJVEU7YC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGBFTVVMVFlQRV9QRl9XUklURWAgaXMgYmVpbmcgdXNlZCwgdG8gZGV0ZXJtaW5lLCBvbiBhIHBlci1pbnN0cnVjdGlvbiBiYXNpcywgd2hldGhlciB0aGUgR1BBIGNhbiBiZSB1c2VkIGZvciB3cml0ZSBvcGVyYXRpb25zLgoKU28sIGluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaXMgYWJvdXQgcmVmaW5pbmcgdGhlIGxvZ2ljIGZvciBLVk0mIzM5O3MgeDg2IGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIEdQQSByZXVzZSBmb3Igd3JpdGVzIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGRpcmVjdGx5IHRvdWNoZXMgY29yZSB4ODYgdmlydHVhbGl6YXRpb24gZnVuY3Rpb25hbGl0eSBhbmQsIGNydWNpYWxseSwgaXMgKmFic29sdXRlbHkqIGluIHNjb3BlIGZvciBmdXp6aW5nLCBnaXZlbiBob3cgc3l6a2FsbGVyIGhpdHMgS1ZNIHRocm91Z2ggYC9kZXYva3ZtYC4gQW55IG1pc2NhbGN1bGF0aW9uIGhlcmUgY291bGQgaGF2ZSByZWFsbHkgbmFzdHkgaW1wbGljYXRpb25zLgoKTm93IEkgbmVlZCB0byBzdGFydCB1c2luZyBteSB1c3VhbCB0b29scyB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcywgc2VlIHdoYXQgc3ltYm9scyBhcmUgaW1wYWN0ZWQsIGFuZCBjb25maXJtIHRoYXQgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGludGVycGxheSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvcnJlY3QuIFRpbWUgdG8gZ2V0IHNvbWUgbW9yZSBkYXRhIGFuZCB2ZXJpZnkgbXkgaW5pdGlhbCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X3BhZ2VfZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTE0Nj12b2lkIGt2bV9pbml0X3NoYWRvd19lcHRfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBleGVjb25seSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQ5LVxuYXJjaC94ODYva3ZtL21tdS5oOjE1MDppbnQga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTUxLVx0XHQgICAgICAgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ4OTA9aW50IGt2bV9oYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlcnJvcl9jb2RlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDkxOC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDkxOTpcdFx0ciA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlLCBpbnNuLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTIwLVx0XHRcdFx0aW5zbl9sZW4pO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjQ3ND1zdGF0aWMgaW50IGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTY2LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTY3OmludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU2OC1cdFx0ICAgICAgIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDctfVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjQ4OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fbW11X3BhZ2VfZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjQ5LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3ND1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyNC1cdHRyYWNlX2t2bV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMjU6XHRyYyA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjYtXHRcdFx0XHRjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpID9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTgzPXN0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTE1LVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDoxMTY6XHRyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgTlVMTCwgMCk7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTExNy19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MDA1PXN0YXRpYyBpbnQgaGFuZGxlX2VwdF9taXNjb25maWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjAyMi1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjAyMzpcdHJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBQRkVSUl9SU1ZEX01BU0ssIE5VTEwsIDApO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDI0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjE1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBLVk0gaXMgcHJvcGVybHkgc2V0IHVwIGZvciB4ODYuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGZ1bmRhbWVudGFsIG9wdGlvbnMgYXJlIGRlZmluZWQsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgS1ZNIG9wdGlvbnMgYXJlIGVuYWJsZWQgYW5kIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY29uZmxpY3Rpbmcgc2V0dGluZ3Mgd2l0aCBvdGhlciB2aXJ0dWFsaXphdGlvbiBtb2R1bGVzIG9yIGNvcmUgeDg2IGZlYXR1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llczsgYXJlIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucyBjb3JyZWN0bHkgZW5hYmxlZCBpbiB0aGUgQklPUy9maXJtd2FyZSBhbmQgaXMgdGhlIGtlcm5lbCBjb25maWd1cmVkIHRvIGRldGVjdCBhbmQgdXNlIHRoZW0/IEFueSBpc3N1ZXMgaGVyZSBhbmQgS1ZNIHdpbGwgYmUgZGVhZCBpbiB0aGUgd2F0ZXIuIEkmIzM5O2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBvciBmZWF0dXJlcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBLVk0mIzM5O3MgcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3Igb24geDg2LiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSBldmVyeXRoaW5nIGlzIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBNYWtlZmlsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYSBjcnVjaWFsIGZpbGU6IGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgd2hhdGV2ZXIgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcsIG9yIHdoYXRldmVyIGVuaGFuY2VtZW50IEkmIzM5O20gd29ya2luZyBvbiwgbGlrZWx5IGhhcyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIEtWTSB4ODYgbW9kdWxlLiBUaGlzIE1ha2VmaWxlIGlzIHdoZXJlIGEgbG90IG9mIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQsIGNvbXBpbGF0aW9uIHRhcmdldHMgYXJlIHNldCB1cCwgYW5kIHVsdGltYXRlbHksIHRoZSBLVk0ga2VybmVsIG1vZHVsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUgZ2V0cyBidWlsdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmaWxlJiMzOTtzIGxvZ2ljIHRvIHNlZSB3aGVyZSBteSBjaGFuZ2VzIGZpdCBpbiBvciB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbXUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vTWFrZWZpbGU9OD1rdm0teVx0XHRcdCYjNDM7PSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIG1zcnMubyBwbXUubyByZWdzLm8gXFxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo5Olx0XHRcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEwLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjExOmt2bS0kKENPTkZJR19YODZfNjQpICYjNDM7PSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTIta3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICYjNDM7PSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gQmFzZWQgb24gdGhlIGlzc3VlLCBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBwb2tpbmcgYXJvdW5kIGluIHRoZSBLVk0gY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0YXJnZXQgd2lsbCBiZSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkgZmlndXJlIHRoZSBsaW5lcyBiZXR3ZWVuIDIwIGFuZCA2MCBhcmUgYSBnb29kIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEkmIzM5O20gaG9waW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gd2hhdGV2ZXImIzM5O3MgZ29uZSBhd3J5LiBUaGF0IHJhbmdlIHVzdWFsbHkgY292ZXJzIHNvbWUgb2YgdGhlIGNvcmUgZmVhdHVyZXMgYW5kIGRlcGVuZGVuY2llcywgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBzdGFydCB0aGUgaHVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5LCBvciBhbnkgaGludHMgYXQgdGhlIHJvb3QgY2F1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0Y29uZmlnIEtWTV9YODZcbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiAgMjI6XHRcdHNlbGVjdCBLVk1fQ09NTU9OXG4gIDIzOlx0XHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xuICAyNDpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDI2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcbiAgMjc6XHRcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuICAyODpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiAgMzA6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAzMTpcdFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxuICAzMjpcdFx0c2VsZWN0IFZIT1NUX1RBU0tcbiAgMzM6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbiAgMzQ6XHRcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxuICAzNTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDM2Olx0XHRzZWxlY3QgU0NIRURfSU5GT1xuICAzNzpcdFx0c2VsZWN0IFBFUkZfRVZFTlRTXG4gIDM4Olx0XHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcbiAgMzk6XHRcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxuICA0MDpcdFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxuICA0MTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbiAgNDI6XHRcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG4gIDQzOlx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgNDQ6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiAgNDU6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICA0NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXG4gIDQ3Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbiAgNDg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gIDQ5Olx0XHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcbiAgNTA6XHRcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIEtWTVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxuICA1NzpcdFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcbiAgNTg6XHRcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xuICA1OTpcdFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkludmVzdGlnYXRpbmcgS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIFRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gdGhlIGJyb2FkZXIgYFZJUlRVQUxJWkFUSU9OYCBjb250ZXh0LiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHZpcnR1YWxpemF0aW9uIGlzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IHRoZSB4ODYgbGV2ZWwgd2l0aGluIEtWTS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgdG8gdW5kZXJzdGFuZCByZWxhdGVkIG1vZHVsZXMgYW5kIGZsYWdzLiBJIGV4cGVjdCB0byBmaW5kIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIG1heWJlIGV2ZW4gc29tZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB0aGUgQ1BVJiMzOTtzIGNhcGFiaWxpdGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEtWTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdHNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuICAgOTpcdFx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCB5XG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuIG90aGVyXG4gIDEzOlx0XHQgIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxuICAxNDpcdFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEtWTV9YODZcbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiAgMjI6XHRcdHNlbGVjdCBLVk1fQ09NTU9OXG4gIDIzOlx0XHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xuICAyNDpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgS1ZNIGlzc3VlLCBhbmQgaW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIHRoZSBicm9hZGVyIGBWSVJUVUFMSVpBVElPTmAgc2V0dGluZy4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cy4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQsIHNvIEkmIzM5O2xsIHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgY2hhbmdlZCBmdW5jdGlvbnMuCgpGaXJzdCB1cCBpcyBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgd2hpY2ggcmVzaWRlcyB3aXRoaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBUaGVuLCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBGb2xsb3dpbmcgdGhhdCwgSSBzZWUgYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAsIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIGFsc28gd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBGaW5hbGx5LCBgaW5pdF9lbXVsYXRlX2N0eHRgIGlzIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLCBhbHNvIGZvdW5kIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgaWYgYGt2bV9tbXVfcGFnZV9mYXVsdGAgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYXJlIGV4cG9ydGVkLiBJIHJlbWVtYmVyIHNlZWluZyBgRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9tbXVfcGFnZV9mYXVsdCk7YCBhc3NvY2lhdGVkIHdpdGggYGt2bV9tbXVfcGFnZV9mYXVsdGAsIHNvIHRoYXQgb25lIGlzIGV4cG9ydGVkIGludGVybmFsbHkgdG8gS1ZNLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCBleHBvcnQgb2YgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyB2aXNpYmlsaXR5IGFuZCB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz02NTY3PWludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDQtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY2NDU6XHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyX29yX2dwYSwgZW11bGF0aW9uX3R5cGUsIGluc24sXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDYtXHRcdFx0XHQgICAgICAgaW5zbl9sZW4pO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01MTUzPXN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTIyNi1cdCAqIGFmdGVyIGNvbXBsZXRpbmcgZW11bGF0aW9uIChzZWUgdGhlIGNoZWNrIG9uIHZjcHUtXHUwMDNlbW1pb19uZWVkZWQgaW5cbmFyY2gveDg2L2t2bS94ODYuYzo1MjI3Olx0ICogeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKSkuXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTIyOC1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02MzM0PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTCh4ODZfZGVjb2RlX2VtdWxhdGVkX2luc3RydWN0aW9uKTtcbmFyY2gveDg2L2t2bS94ODYuYy02MzM1LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjYzMzY6aW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbmFyY2gveDg2L2t2bS94ODYuYy02MzM3LVx0XHRcdCAgICBpbnQgZW11bGF0aW9uX3R5cGUsIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjU1Nz1pbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bGF0aW9uX3R5cGUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU1OC17XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU1OTpcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCBlbXVsYXRpb25fdHlwZSwgTlVMTCwgMCk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2MC19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTY1NjM9aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uX2Zyb21fYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2NS17XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU2NjpcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCAwLCBpbnNuLCBpbnNuX2xlbik7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2Ny19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTM3MT1pbnQgeDg2X2RlY29kZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsYXRpb25fdHlwZSxcbmFyY2gveDg2L2t2bS94ODYuaC0zNzItXHRcdFx0XHQgICAgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcbmFyY2gveDg2L2t2bS94ODYuaDozNzM6aW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbmFyY2gveDg2L2t2bS94ODYuaC0zNzQtXHRcdFx0ICAgIGludCBlbXVsYXRpb25fdHlwZSwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGFuZCBga3ZtX21tdV9wYWdlX2ZhdWx0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBhbmQgYGt2bV9tbXVfcGFnZV9mYXVsdGAuIFRoZXkmIzM5O3JlIGNsZWFybHkgaW50ZW5kZWQgYXMgQVBJIGVudHJ5cG9pbnRzLCBidXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBzdGF0aWMgb3IgaW5saW5lZC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlaXIgc2NvcGUg4oCTIGFyZSB0aGV5IGludGVuZGVkIGZvciBpbnRlcm5hbCBLVk0gdXNlLCBvciBhcmUgdGhleSBleHBvc2VkIGZvciBleHRlcm5hbCBtb2R1bGVzIHRvIGxldmVyYWdlPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGVpciB2aXNpYmlsaXR5LgoKSSYjMzk7bGwgc3RhcnQgd2l0aCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgbGluZSA2MzM2LCBpdCYjMzk7cyBkZWNsYXJlZCBhcyBgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKC4uLilgLCBzbyBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBpZiBpdCYjMzk7cyBwcm90ZWN0ZWQgc29tZWhvdy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBjaGVjayB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIGZvY3VzIGFyb3VuZCBsaW5lIDY1NTAsIHNlZSBpZiBhbnkgdXNhZ2UgcGF0dGVybnMgZW1lcmdlIHRoYXQgY2FuIGdpdmUgbWUgYSBjbHVlIGFib3V0IHRoZSBpbnRlbmRlZCBhdWRpZW5jZS4gUGVyaGFwcyBzb21lIHN0YXRpYyBkZWNsYXJhdGlvbnMgb3IgbWFjcm9zIGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjU0MDpcdFx0XHRcdF9fa3ZtX3NldF9yZmxhZ3ModmNwdSwgY3R4dC1cdTAwM2VlZmxhZ3MpO1xuNjU0MTpcdFx0XHR9XG42NTQyOlx0XG42NTQzOlx0XHRcdC8qXG42NTQ0Olx0XHRcdCAqIEZvciBTVEksIGludGVycnVwdHMgYXJlIHNoYWRvd2VkOyBzbyBLVk1fUkVRX0VWRU5UIHdpbGxcbjY1NDU6XHRcdFx0ICogZG8gbm90aGluZywgYW5kIGl0IHdpbGwgYmUgcmVxdWVzdGVkIGFnYWluIGFzIHNvb24gYXNcbjY1NDY6XHRcdFx0ICogdGhlIHNoYWRvdyBleHBpcmVzLiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gY2hlY2sgaGVyZSxcbjY1NDc6XHRcdFx0ICogYmVjYXVzZSBQT1BGIGhhcyBubyBpbnRlcnJ1cHQgc2hhZG93LlxuNjU0ODpcdFx0XHQgKi9cbjY1NDk6XHRcdFx0aWYgKHVubGlrZWx5KChjdHh0LVx1MDAzZWVmbGFncyBcdTAwMjYgfnJmbGFncykgXHUwMDI2IFg4Nl9FRkxBR1NfSUYpKVxuNjU1MDpcdFx0XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgdmNwdSk7XG42NTUxOlx0XHR9IGVsc2VcbjY1NTI6XHRcdFx0dmNwdS1cdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfdG9fdmNwdSA9IHRydWU7XG42NTUzOlx0XG42NTU0Olx0XHRyZXR1cm4gcjtcbjY1NTU6XHR9XG42NTU2Olx0XG42NTU3Olx0aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxhdGlvbl90eXBlKVxuNjU1ODpcdHtcbjY1NTk6XHRcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCBlbXVsYXRpb25fdHlwZSwgTlVMTCwgMCk7XG42NTYwOlx0fVxuNjU2MTpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbik7XG42NTYyOlx0XG42NTYzOlx0aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uX2Zyb21fYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbjY1NjQ6XHRcdFx0XHRcdFx0dm9pZCAqaW5zbiwgaW50IGluc25fbGVuKVxuNjU2NTpcdHtcbjY1NjY6XHRcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCAwLCBpbnNuLCBpbnNuX2xlbik7XG42NTY3Olx0fVxuNjU2ODpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbl9mcm9tX2J1ZmZlcik7XG42NTY5Olx0XG42NTcwOlx0c3RhdGljIGludCBjb21wbGV0ZV9mYXN0X3Bpb19vdXRfcG9ydF8weDdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjY1NzE6XHR7XG42NTcyOlx0XHR2Y3B1LVx1MDAzZWFyY2gucGlvLmNvdW50ID0gMDtcbjY1NzM6XHRcdHJldHVybiAxO1xuNjU3NDpcdH1cbjY1NzU6XHRcbjY1NzY6XHRzdGF0aWMgaW50IGNvbXBsZXRlX2Zhc3RfcGlvX291dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG42NTc3Olx0e1xuNjU3ODpcdFx0dmNwdS1cdTAwM2VhcmNoLnBpby5jb3VudCA9IDA7XG42NTc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjQ5CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0geDg2IEVtdWxhdGlvbiBhbmQgTU1VIENvZGUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHNvbWUgS1ZNIGNvZGUgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8geDg2IGVtdWxhdGlvbiBhbmQgdGhlIE1NVS4gSSBzZWUgdGhhdCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGlzIHJpZ2h0IHRoZXJlIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBhbmQgdGhlIGRlY2xhcmF0aW9uIGlzIGluIHRoZSBoZWFkZXIsIGB4ODYuaGAuIEl0JiMzOTtzIGNsZWFybHkgYSBjb3JlIGZ1bmN0aW9uLCBhcyBpdCYjMzk7cyBkaXJlY3RseSBjYWxsZWQgdGhyb3VnaG91dCBLVk0uIFNpbWlsYXJseSwgYGt2bV9tbXVfcGFnZV9mYXVsdGAgbGl2ZXMgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBkZWNsYXJlZCBpbiBgbW11LmhgLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3Mgb3Igb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLiBBbHJpZ2h0LCB0aGUgcmVsZXZhbnQgY29uZmlncyBzZWVtIHRvIGJlIGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBhbmQgYFZJUlRVQUxJWkFUSU9OYCDigJMgc3RhbmRhcmQgc3R1ZmYgZm9yIHZpcnR1YWxpemF0aW9uLCBlc3BlY2lhbGx5IHg4Ni4KCkJhc2VkIG9uIHRoZSBjb2RlIEkmIzM5O3ZlIHJldmlld2VkLCB0aGlzIGFyZWEgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIEtWTSB4ODYgTU1VIGFuZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMuIENydWNpYWxseSwgaXQgc2VlbXMgdG8gYmUgZGVhbGluZyB3aXRoIHNvbWUgdHJpY2t5IGlzc3VlcyBhcm91bmQgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyAoR1BBKSBjYWNoaW5nIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB3aGVuIHBhZ2UgZmF1bHRzIG9jY3VyLiBJdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSBpbmNvcnJlY3QgcmV1c2Ugb2YgY2FjaGVkIEdQQXMgZm9yIHdyaXRlcywgYSBidWcgdGhhdCYjMzk7cyB0aWVkIHRvIHBhZ2UgdGFibGUgd2FsayBmYXVsdHMgdmVyc3VzIGZpbmFsIHdyaXRlcy4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmaXguIFRoZSBmYWN0IHRoYXQgaXTigJlzIGFsbCByZWFjaGFibGUgaW4gUUVNVS9LVk0gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG1ha2VzIGl0IGFuIGV2ZW4gYmV0dGVyIHRhcmdldC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBrZXkgc3ltYm9scyBJIHdhbnQgdG8gZm9jdXMgb246IGBrdm1fbW11X3BhZ2VfZmF1bHRgIGFuZCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBZZXAsIHRob3NlIGFyZSB0aGUgb25lcy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZS4gWWVwLCBzdGlsbCBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIGBYODZfTE9DQUxfQVBJQ2AuIE1ha2VzIHNlbnNlLiBUaGUgQVBJQyBpcyBwcmV0dHkgc3RhbmRhcmQgb24geDg2IHN5c3RlbXMuCgpPa2F5LCBJJiMzOTttIHJlYWR5IHRvIGZvcm1hbGl6ZSBteSBmaW5kaW5ncyBhbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBhcmVhIGFuZCBrbm93IHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fbW11X3BhZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYW5kIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGNhY2hlZCBHUEEgaXMgb25seSByZXVzZWQgZm9yIHdyaXRlcyBkdXJpbmcgZW11bGF0aW9uIGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgZmluYWwgd3JpdGUgYWNjZXNzIChFTVVMVFlQRV9QRl9XUklURSksIHByZXZlbnRpbmcgdW5hdXRob3JpemVkIGd1ZXN0IG1lbW9yeSB3cml0ZXMuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29yZSBWTSBleGVjdXRpb24gcGF0aHMgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBndWVzdCBwYWdlIGZhdWx0IGVtdWxhdGlvbiwgbWFraW5nIHRoZW0gcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfcGFnZV9mYXVsdCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBhbmQgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY2FjaGVkIEdQQSBpcyBvbmx5IHJldXNlZCBmb3Igd3JpdGVzIGR1cmluZyBlbXVsYXRpb24gaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSBmaW5hbCB3cml0ZSBhY2Nlc3MgKEVNVUxUWVBFX1BGX1dSSVRFKSwgcHJldmVudGluZyB1bmF1dGhvcml6ZWQgZ3Vlc3QgbWVtb3J5IHdyaXRlcy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIFZNIGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IHBhZ2UgZmF1bHQgZW11bGF0aW9uLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIGlzc3VlIGluIEtWTSB3aGVyZSBhIGZhdWx0aW5nIEdQQSB3YXMgcmV1c2VkIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlIGhhcmR3YXJlIHBhZ2UgZmF1bHQgd2FzIGFuIGFjdHVhbCB3cml0ZSBhY2Nlc3MgdG8gdGhlIGZpbmFsIEdQQS4gSXQgaW50cm9kdWNlcyBhIG5ldyBib29sZWFuIGZpZWxkIGBncGFfd3JpdGVgIHRvIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGAgYW5kIGFuIGVtdWxhdGlvbiBmbGFnIGBFTVVMVFlQRV9QRl9XUklURWAuXG5cblRoZSBuZXcgZmllbGQgYGdwYV93cml0ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgYWxsb2NfZW11bGF0ZV9jdHh0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgY29weS10by11c2VyIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2U1MGNhN2I4ZjBhODcyYzhmZTg5MGE5ODJiOTM4YjM5NmQ3NTQ4ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIwOjI4OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAppbmRleCAzZTM3NWFmMTVjMDM1Li5hY2VjYTlkM2ExNmQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaApAQCAtMzU0LDggJiM0MzszNTQsOSBAQCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCB7CiAJYm9vbCBoYXZlX2V4Y2VwdGlvbjsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247CiAKLQkvKiBHUEEgYXZhaWxhYmxlICovCiYjNDM7CS8qIEdQQSBhbmQgd3JpdGUgYWNjZXNzIHN1cHBsaWVkIGJ5IGEgaGFyZHdhcmUgcGFnZSBmYXVsdC4gKi8KIAlib29sIGdwYV9hdmFpbGFibGU7CiYjNDM7CWJvb2wgZ3BhX3dyaXRlOwogCWdwYV90IGdwYV92YWw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggMDY0ZWNjMzNiOTI2Ny4uMjIzNjk4Y2JiOWJlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC02NjMyLDYgJiM0Mzs2NjMyLDE2IEBAIGludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyCiAJCXJldHVybiByOwogCiBlbXVsYXRlOgomIzQzOwkvKgomIzQzOwkgKiBBIHdyaXRlIGR1cmluZyBhIGd1ZXN0IHBhZ2Ugd2FsayBkb2VzIG5vdCBhdXRob3JpemUgdGhlIGluc3RydWN0aW9uCiYjNDM7CSAqIGl0c2VsZiB0byB3cml0ZSB0byB0aGUgZmF1bHRpbmcgR1BBLiAgUmVxdWlyZSBhIGZpbmFsIHdyaXRlIGFjY2VzcwomIzQzOwkgKiBiZWZvcmUgYWxsb3dpbmcgdGhlIGVtdWxhdG9yIHRvIHJldXNlIHRoZSBHUEEgZm9yIHdyaXRlcy4KJiM0MzsJICovCiYjNDM7CWlmIChkaXJlY3QgJmFtcDsmYW1wOyAoZXJyb3JfY29kZSAmYW1wOyBQRkVSUl9XUklURV9NQVNLKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZXJyb3JfY29kZSAmYW1wOyBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKGVycm9yX2NvZGUgJmFtcDsgUEZFUlJfR1VFU1RfUEFHRV9NQVNLKSkKJiM0MzsJCWVtdWxhdGlvbl90eXBlIHw9IEVNVUxUWVBFX1BGX1dSSVRFOwomIzQzOwogCXJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbiwKIAkJCQkgICAgICAgaW5zbl9sZW4pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjhjNDZhYTM0NjhjMmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTUwODgsOCAmIzQzOzUwODgsMTMgQEAgc3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsCiAJICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmcKIAkgKiBvcGVyYXRpb24gdXNpbmcgcmVwIHdpbGwgb25seSBoYXZlIHRoZSBpbml0aWFsIEdQQSBmcm9tIHRoZSBOUEYKIAkgKiBvY2N1cnJlZC4KJiM0MzsJICoKJiM0MzsJICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlCiYjNDM7CSAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgZmluYWwgd3JpdGUgYWNjZXNzOwomIzQzOwkgKiBvdGhlcndpc2UsIHJlY2hlY2sgcGVybWlzc2lvbnMgZm9yIHRoZSBkZWNvZGVkIGFjY2Vzcy4KIAkgKi8KLQlpZiAoY3R4dC0mZ3Q7Z3BhX2F2YWlsYWJsZSAmYW1wOyZhbXA7IGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpICZhbXA7JmFtcDsKJiM0MzsJaWYgKGN0eHQtJmd0O2dwYV9hdmFpbGFibGUgJmFtcDsmYW1wOyAoIXdyaXRlIHx8IGN0eHQtJmd0O2dwYV93cml0ZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgJmFtcDsmYW1wOwogCSAgICAoYWRkciAmYW1wOyB+UEFHRV9NQVNLKSA9PSAoY3R4dC0mZ3Q7Z3BhX3ZhbCAmYW1wOyB+UEFHRV9NQVNLKSkgewogCQlncGEgPSBjdHh0LSZndDtncGFfdmFsOwogCQlyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpOwpAQCAtNTkzOSw2ICYjNDM7NTk0NCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgJmFtcDtjc19kYiwgJmFtcDtjc19sKTsKIAogCWN0eHQtJmd0O2dwYV9hdmFpbGFibGUgPSBmYWxzZTsKJiM0MzsJY3R4dC0mZ3Q7Z3BhX3dyaXRlID0gZmFsc2U7CiAJY3R4dC0mZ3Q7ZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7CiAJY3R4dC0mZ3Q7dGYgPSAoY3R4dC0mZ3Q7ZWZsYWdzICZhbXA7IFg4Nl9FRkxBR1NfVEYpICE9IDA7CiAKQEAgLTY0NTUsNiAmIzQzOzY0NjEsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLAogCQkvKiBXaXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgY3IyIGNvbnRhaW5zIGEgR1ZBIG9yIG5HUEEuICovCiAJCWlmICh2Y3B1LSZndDthcmNoLm1tdS0mZ3Q7cm9vdF9yb2xlLmRpcmVjdCkgewogCQkJY3R4dC0mZ3Q7Z3BhX2F2YWlsYWJsZSA9IHRydWU7CiYjNDM7CQkJY3R4dC0mZ3Q7Z3BhX3dyaXRlID0gZW11bGF0aW9uX3R5cGUgJmFtcDsgRU1VTFRZUEVfUEZfV1JJVEU7CiAJCQljdHh0LSZndDtncGFfdmFsID0gY3IyX29yX2dwYTsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggMGY1OTE5YjA5MmU0Ny4uMmRkNDU2YWQzZTJkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtNDA3LDYgJiM0Mzs0MDcsOSBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLAogICogRU1VTFRZUEVfUEYgLSBTZXQgd2hlbiBhbiBpbnRlcmNlcHRlZCAjUEYgdHJpZ2dlcnMgdGhlIGVtdWxhdGlvbiwgaW4gd2hpY2ggY2FzZQogICoJCSB0aGUgQ1IyL0dQQSB2YWx1ZSBwYXNzIG9uIHRoZSBzdGFjayBpcyB2YWxpZC4KICAqCiYjNDM7ICogRU1VTFRZUEVfUEZfV1JJVEUgLSBTZXQgd2l0aCBFTVVMVFlQRV9QRiB3aGVuIGhhcmR3YXJlIHJlcG9ydHMgYSB3cml0ZSB0byB0aGUKJiM0MzsgKgkJICAgICBmaW5hbCBHUEEsIG5vdCBhbiBpbXBsaWNpdCBndWVzdCBwYWdlLXRhYmxlIGFjY2Vzcy4KJiM0MzsgKgogICogRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUIC0gU2V0IHdoZW4gdGhlIGVtdWxhdG9yIHNob3VsZCB1cGRhdGUgaW50ZXJydXB0aWJpbGl0eQogICoJCQkJIHN0YXRlIGFuZCBpbmplY3Qgc2luZ2xlLXN0ZXAgI0RCcyBhZnRlciBza2lwcGluZwogICoJCQkJIGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLgpAQCAtNDQ1LDYgJiM0Mzs0NDgsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLAogI2RlZmluZSBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgKDEgJmx0OyZsdDsgNykKICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1AJICAgICgxICZsdDsmbHQ7IDgpCiAjZGVmaW5lIEVNVUxUWVBFX1NLSVBfU09GVF9JTlQJICAgICgxICZsdDsmbHQ7IDkpCiYjNDM7I2RlZmluZSBFTVVMVFlQRV9QRl9XUklURQkgICAgQklUKDEwKQogCiAjZGVmaW5lIEVNVUxUWVBFX1NFVF9TT0ZUX0lOVF9WRUNUT1IodikJKCh1MzIpKCh2KSAmYW1wOyAweGZmKSAmbHQ7Jmx0OyAxNikKICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKQkoKChlKSAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBLTVNBTiBSaXNrcyBpbiB0aGUgS1ZNIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gbmVlZHMgdG8gYmUgY29uY2VybmVkIGFib3V0LiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICpkb2luZyouCgpBbHJpZ2h0LCBJIHNlZSB0aGUgY2hhbmdlczoKCjEuICBXZSYjMzk7cmUgYWRkaW5nIGEgYm9vbGVhbiwgYGdwYV93cml0ZWAsIHRvIHRoZSBgeDg2X2VtdWxhdGVfY3R4dGAgc3RydWN0IGluIGBrdm1fZW11bGF0ZS5oYC4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuCjIuICBJbiBgbW11LmNgLCB0aGUgYGt2bV9tbXVfcGFnZV9mYXVsdCgpYCBmdW5jdGlvbiBub3cgc2V0cyBgZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7YCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBwYWdlIGZhdWx0cyBhbmQgd3JpdGUgb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBvdXIgZmxhZyBmb3IgYSB3cml0ZSBiZWluZyBhdHRlbXB0ZWQuCjMuICBgeDg2LmNgIHNlZW1zIHRvIGJlIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGlzIHVwZGF0ZWQuIFdlJiMzOTtyZSBtb2RpZnlpbmcgdGhlIGNvbmRpdGlvbiBpbiBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKClgIHRvIGluY2x1ZGUgYGN0eHQtJmd0O2dwYV93cml0ZWAuICBDcnVjaWFsbHksIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBleHBsaWNpdGx5ICppbml0aWFsaXplcyogYGN0eHQtJmd0O2dwYV93cml0ZWAgdG8gYGZhbHNlYCwganVzdCBsaWtlIGBncGFfYXZhaWxhYmxlYC4gR29vZC4gQW5kIGxhdGVyIGluIHRoZSBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAgZnVuY3Rpb24gd2Ugc2V0IGBjdHh0LSZndDtncGFfd3JpdGUgPSBlbXVsYXRpb25fdHlwZSAmYW1wOyBFTVVMVFlQRV9QRl9XUklURTtgIGlmIHRoZSBNTVUgaXMgb3BlcmF0aW5nIGluIGEgZGlyZWN0IG1vZGUuCjQuICBGaW5hbGx5LCB0aGVyZSYjMzk7cyBhIG5ldyBkZWZpbml0aW9uLCBgRU1VTFRZUEVfUEZfV1JJVEVgLCBpbiBgeDg2LmhgLiBUaGlzIGlzIHRoZSBiaXQgZmxhZyBiZWluZyB1c2VkIGZvciB0aGUgd3JpdGUgY29uZGl0aW9uLgoKU28sIGZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlIGBncGFfd3JpdGVgIGZsYWcgaXMgdXNlZCB0byB0cmFjayB3aGV0aGVyIHRoZSBmYXVsdCB3YXMgYSB3cml0ZSBhbmQgYGluaXRfZW11bGF0ZV9jdHh0YCBlbnN1cmVzIHRoYXQgdGhlIGZsYWcgaXMgaW5pdGlhbGl6ZWQgdG8gZmFsc2UuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgbG9va3MgbGlrZSBpdCYjMzk7cyBkZXNpZ25lZCB0byB0cmFjayBhIHdyaXRlLCB3aGljaCB3aWxsIHByZXZlbnQgdW5pbml0aWFsaXplZCByZWFkcy4gV2UgaW5pdGlhbGl6ZSwgd2Ugc2V0IGl0LCBhbmQgd2UgY2hlY2sgaXQuIEhvd2V2ZXIsIHRoZSB0cnVlIHRlc3QgaXMgd2hldGhlciB0aGlzIGlzIHRoZSBvbmx5IHBhdGggYnkgd2hpY2ggZ3BhX3dyaXRlIGNhbiBiZSBzZXQuCgpOb3csIGxldCBtZSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBgaW5pdF9lbXVsYXRlX2N0eHRgIGFuZCBhbnl3aGVyZSB0aGF0IGB4ODZfZW11bGF0ZV9jdHh0YCBpcyB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBncmVwcGVyIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBpbml0aWFsaXphdGlvbiBvciB1c2FnZSBwb2ludHMsIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBvbmx5IHBhdGggYW5kIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGludGVyYWN0aW9ucyBJJiMzOTttIG1pc3NpbmcuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgd2hlcmUgYGdwYV93cml0ZWAgY291bGQgYmUgcG90ZW50aWFsbHkgcmVhZCB1bmluaXRpYWxpemVkLCBvciB3aGVyZSBpdCBnZXRzIHNldCBpbiBhbiB1bmV4cGVjdGVkIHdheS4gSSYjMzk7bGwgc2VhcmNoIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgaW5pdF9lbXVsYXRlX2N0eHRgIGFuZCBhbHNvIGxvb2sgZm9yIGFueSBjYWxscyBkaXJlY3RseSBvbiBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbml0X2VtdWxhdGVfY3R4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9NTkyMj1zdGF0aWMgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmFsbG9jX2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU5MzgtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTkzOTpzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTk0MC17XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU5Njc9dm9pZCBrdm1faW5qZWN0X3JlYWxtb2RlX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBpcnEsIGludCBpbmNfZWlwKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01OTcxLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjU5NzI6XHRpbml0X2VtdWxhdGVfY3R4dCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy01OTczLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02MzE5PWludCB4ODZfZGVjb2RlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxhdGlvbl90eXBlLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02MzI0LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjYzMjU6XHRpbml0X2VtdWxhdGVfY3R4dCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy02MzI2LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05MDc2PWludCBrdm1fdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgdHNzX3NlbGVjdG9yLCBpbnQgaWR0X2luZGV4LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05MTAwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjkxMDE6XHRpbml0X2VtdWxhdGVfY3R4dCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy05MTAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHg4NiBFbXVsYXRpb24gQ29udGV4dCBBbGxvY2F0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IHRoZSBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGlzIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBNeSBndXQgZmVlbGluZyBpcyB0aGUgYW5zd2VycyBJIG5lZWQgYXJlIGx1cmtpbmcgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIHNvIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmVzIDU5MjIgYW5kIDY0NTUuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBzZWUgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBhbmQgaW5pdGlhbCBzZXR1cCBpbiBkZXRhaWwuIEhvcGVmdWxseSwgdGhvc2Ugc3BvdHMgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzdHJ1Y3R1cmUgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTIwOlx0fVxuNTkyMTpcdFxuNTkyMjpcdHN0YXRpYyBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqYWxsb2NfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjU5MjM6XHR7XG41OTI0Olx0XHRzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dDtcbjU5MjU6XHRcbjU5MjY6XHRcdGN0eHQgPSBrbWVtX2NhY2hlX3phbGxvYyh4ODZfZW11bGF0b3JfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG41OTI3Olx0XHRpZiAoIWN0eHQpIHtcbjU5Mjg6XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSB2Y3B1JiMzOTtzIGVtdWxhdG9yXFxuXCYjMzQ7KTtcbjU5Mjk6XHRcdFx0cmV0dXJuIE5VTEw7XG41OTMwOlx0XHR9XG41OTMxOlx0XG41OTMyOlx0XHRjdHh0LVx1MDAzZXZjcHUgPSB2Y3B1O1xuNTkzMzpcdFx0Y3R4dC1cdTAwM2VvcHMgPSBcdTAwMjZlbXVsYXRlX29wcztcbjU5MzQ6XHRcdHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQgPSBjdHh0O1xuNTkzNTpcdFxuNTkzNjpcdFx0cmV0dXJuIGN0eHQ7XG41OTM3Olx0fVxuNTkzODpcdFxuNTkzOTpcdHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjU5NDA6XHR7XG41OTQxOlx0XHRzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCA9IHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQ7XG41OTQyOlx0XHRpbnQgY3NfZGIsIGNzX2w7XG41OTQzOlx0XG41OTQ0Olx0XHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXHUwMDI2Y3NfZGIsIFx1MDAyNmNzX2wpO1xuNTk0NTpcdFxuNTk0NjpcdFx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XG41OTQ3Olx0XHRjdHh0LVx1MDAzZWdwYV93cml0ZSA9IGZhbHNlO1xuNTk0ODpcdFx0Y3R4dC1cdTAwM2VlZmxhZ3MgPSBrdm1fZ2V0X3JmbGFncyh2Y3B1KTtcbjU5NDk6XHRcdGN0eHQtXHUwMDNldGYgPSAoY3R4dC1cdTAwM2VlZmxhZ3MgXHUwMDI2IFg4Nl9FRkxBR1NfVEYpICE9IDA7XG41OTUwOlx0XG41OTUxOlx0XHRjdHh0LVx1MDAzZWVpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTtcbjU5NTI6XHRcdGN0eHQtXHUwMDNlbW9kZSA9ICghaXNfcHJvdG1vZGUodmNwdSkpXHRcdD8gWDg2RU1VTF9NT0RFX1JFQUwgOlxuNTk1MzpcdFx0XHQgICAgIChjdHh0LVx1MDAzZWVmbGFncyBcdTAwMjYgWDg2X0VGTEFHU19WTSlcdD8gWDg2RU1VTF9NT0RFX1ZNODYgOlxuNTk1NDpcdFx0XHQgICAgIChjc19sIFx1MDAyNlx1MDAyNiBpc19sb25nX21vZGUodmNwdSkpXHQ/IFg4NkVNVUxfTU9ERV9QUk9UNjQgOlxuNTk1NTpcdFx0XHQgICAgIGNzX2RiXHRcdFx0XHQ/IFg4NkVNVUxfTU9ERV9QUk9UMzIgOlxuNTk1NjpcdFx0XHRcdFx0XHRcdFx0ICBYODZFTVVMX01PREVfUFJPVDE2O1xuNTk1NzpcdFx0Y3R4dC1cdTAwM2VpbnRlcnJ1cHRpYmlsaXR5ID0gMDtcbjU5NTg6XHRcdGN0eHQtXHUwMDNlaGF2ZV9leGNlcHRpb24gPSBmYWxzZTtcbjU5NTk6XHRcdGN0eHQtXHUwMDNlZXhjZXB0aW9uLnZlY3RvciA9IC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTkxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLVk0mIzM5O3MgeDg2IEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGFyZ2V0aW5nIGFyb3VuZCBsaW5lIDY0NTAuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIHN0cnVjdHVyZSBvZiB0aGUga2VybmVsLCB0aGF0IGZpbGUgaXMgYWxtb3N0IGNlcnRhaW5seSB3aGVyZSB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCB0aGUgeDg2LXNwZWNpZmljIEtWTSBleHRlbnNpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBpbnRlcmFjdGlvbiBsb2dpYyBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgaG9zdCBpbiB0aGlzIGFyZWEuIFByb2JhYmx5IHJlbGF0ZWQgdG8gdmlydHVhbGl6YXRpb24gb2YgQ1BVIHJlZ2lzdGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0NDA6XHRcdCAqIHdyaXRpbmcgaW5zdHJ1Y3Rpb24sIHRyeSB0byB1bnByb3RlY3QgdGhlIGdmbiwgaS5lLiB6YXAgc2hhZG93IHBhZ2VzLFxuNjQ0MTpcdFx0ICogYW5kIHJldHJ5IHRoZSBpbnN0cnVjdGlvbiwgYXMgdGhlIHZDUFUgaXMgbGlrZWx5IG5vIGxvbmdlciB1c2luZyB0aGVcbjY0NDI6XHRcdCAqIGdmbiBhcyBhIHBhZ2UgdGFibGUuXG42NDQzOlx0XHQgKi9cbjY0NDQ6XHRcdGlmICgoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX0FMTE9XX1JFVFJZX1BGKSBcdTAwMjZcdTAwMjZcbjY0NDU6XHRcdCAgICAheDg2X3BhZ2VfdGFibGVfd3JpdGluZ19pbnNuKGN0eHQpIFx1MDAyNlx1MDAyNlxuNjQ0NjpcdFx0ICAgIGt2bV9tbXVfdW5wcm90ZWN0X2dmbl9hbmRfcmV0cnkodmNwdSwgY3IyX29yX2dwYSkpXG42NDQ3Olx0XHRcdHJldHVybiAxO1xuNjQ0ODpcdFxuNjQ0OTpcdFx0LyogdGhpcyBpcyBuZWVkZWQgZm9yIHZtd2FyZSBiYWNrZG9vciBpbnRlcmZhY2UgdG8gd29yayBzaW5jZSBpdFxuNjQ1MDpcdFx0ICAgY2hhbmdlcyByZWdpc3RlcnMgdmFsdWVzICBkdXJpbmcgSU8gb3BlcmF0aW9uICovXG42NDUxOlx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfZnJvbV92Y3B1KSB7XG42NDUyOlx0XHRcdHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSA9IGZhbHNlO1xuNjQ1MzpcdFx0XHRlbXVsYXRvcl9pbnZhbGlkYXRlX3JlZ2lzdGVyX2NhY2hlKGN0eHQpO1xuNjQ1NDpcdFx0fVxuNjQ1NTpcdFxuNjQ1NjpcdHJlc3RhcnQ6XG42NDU3Olx0XHRpZiAoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX1BGKSB7XG42NDU4Olx0XHRcdC8qIFNhdmUgdGhlIGZhdWx0aW5nIEdQQSAoY3IyKSBpbiB0aGUgYWRkcmVzcyBmaWVsZCAqL1xuNjQ1OTpcdFx0XHRjdHh0LVx1MDAzZWV4Y2VwdGlvbi5hZGRyZXNzID0gY3IyX29yX2dwYTtcbjY0NjA6XHRcbjY0NjE6XHRcdFx0LyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqL1xuNjQ2MjpcdFx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1tdS1cdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XG42NDYzOlx0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gdHJ1ZTtcbjY0NjQ6XHRcdFx0XHRjdHh0LVx1MDAzZWdwYV93cml0ZSA9IGVtdWxhdGlvbl90eXBlIFx1MDAyNiBFTVVMVFlQRV9QRl9XUklURTtcbjY0NjU6XHRcdFx0XHRjdHh0LVx1MDAzZWdwYV92YWwgPSBjcjJfb3JfZ3BhO1xuNjQ2NjpcdFx0XHR9XG42NDY3Olx0XHR9IGVsc2Uge1xuNjQ2ODpcdFx0XHQvKiBTYW5pdGl6ZSB0aGUgYWRkcmVzcyBvdXQgb2YgYW4gYWJ1bmRhbmNlIG9mIHBhcmFub2lhLiAqL1xuNjQ2OTpcdFx0XHRjdHh0LVx1MDAzZWV4Y2VwdGlvbi5hZGRyZXNzID0gMDtcbjY0NzA6XHRcdH1cbjY0NzE6XHRcbjY0NzI6XHRcdC8qXG42NDczOlx0XHQgKiBDaGVjayBMMSYjMzk7cyBpbnN0cnVjdGlvbiBpbnRlcmNlcHRzIHdoZW4gZW11bGF0aW5nIGluc3RydWN0aW9ucyBmb3JcbjY0NzQ6XHRcdCAqIEwyLCB1bmxlc3MgS1ZNIGlzIHJlLWVtdWxhdGluZyBhIHByZXZpb3VzbHkgZGVjb2RlZCBpbnN0cnVjdGlvbixcbjY0NzU6XHRcdCAqIGUuZy4gdG8gY29tcGxldGUgdXNlcnNwYWNlIEkvTywgaW4gd2hpY2ggY2FzZSBLVk0gaGFzIGFscmVhZHlcbjY0NzY6XHRcdCAqIGNoZWNrZWQgdGhlIGludGVyY2VwdHMuXG42NDc3Olx0XHQgKi9cbjY0Nzg6XHRcdHIgPSB4ODZfZW11bGF0ZV9pbnNuKGN0eHQsIGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2XG42NDc5Olx0XHRcdFx0XHQgICAhKGVtdWxhdGlvbl90eXBlIFx1MDAyNiBFTVVMVFlQRV9OT19ERUNPREUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0NQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIE1NVSBDb2RlKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIEtWTSBhbmQgc3BlY2lmaWNhbGx5IHRoZSBNTVUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyB0aGluZyAqcmVhbGx5KiB3b3Jrcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCBmaWxlLiBJJiMzOTttIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgNjYzMi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdmFudGFnZSBwb2ludCB0byBnZXQgdG8gZ3JpcHMgd2l0aCB3aGF0JiMzOTtzIGdvaW5nIG9uIGF0IGEgZGV0YWlsZWQgbGV2ZWwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHBhcnQgb2YgdGhlIGNvZGUgcmV2ZWFscyBhYm91dCB0aGUgTU1VJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NjE1Olx0XG42NjE2Olx0XHRpZiAociA9PSBSRVRfUEZfRklYRUQpXG42NjE3Olx0XHRcdHZjcHUtXHUwMDNlc3RhdC5wZl9maXhlZCYjNDM7JiM0Mzs7XG42NjE4Olx0XHRlbHNlIGlmIChyID09IFJFVF9QRl9FTVVMQVRFKVxuNjYxOTpcdFx0XHR2Y3B1LVx1MDAzZXN0YXQucGZfZW11bGF0ZSYjNDM7JiM0Mzs7XG42NjIwOlx0XHRlbHNlIGlmIChyID09IFJFVF9QRl9TUFVSSU9VUylcbjY2MjE6XHRcdFx0dmNwdS1cdTAwM2VzdGF0LnBmX3NwdXJpb3VzJiM0MzsmIzQzOztcbjY2MjI6XHRcbjY2MjM6XHRcdC8qXG42NjI0Olx0XHQgKiBOb25lIG9mIGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoKSwga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCksIG9yXG42NjI1Olx0XHQgKiBrdm1fbW11X3dyaXRlX3Byb3RlY3RfZmF1bHQoKSByZXR1cm4gUkVUX1BGX0NPTlRJTlVFLlxuNjYyNjpcdFx0ICoga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCkgb25seSB1c2VzIFJFVF9QRl9DT05USU5VRSBpbnRlcm5hbGx5IHRvXG42NjI3Olx0XHQgKiBpbmRpY2F0ZSBjb250aW51aW5nIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIHVudGlsIHRvIHRoZSBmaW5hbFxuNjYyODpcdFx0ICogcGFnZSB0YWJsZSBtYXBwaW5nIHBoYXNlLlxuNjYyOTpcdFx0ICovXG42NjMwOlx0XHRXQVJOX09OX09OQ0UociA9PSBSRVRfUEZfQ09OVElOVUUpO1xuNjYzMTpcdFx0aWYgKHIgIT0gUkVUX1BGX0VNVUxBVEUpXG42NjMyOlx0XHRcdHJldHVybiByO1xuNjYzMzpcdFxuNjYzNDpcdGVtdWxhdGU6XG42NjM1Olx0XHQvKlxuNjYzNjpcdFx0ICogQSB3cml0ZSBkdXJpbmcgYSBndWVzdCBwYWdlIHdhbGsgZG9lcyBub3QgYXV0aG9yaXplIHRoZSBpbnN0cnVjdGlvblxuNjYzNzpcdFx0ICogaXRzZWxmIHRvIHdyaXRlIHRvIHRoZSBmYXVsdGluZyBHUEEuICBSZXF1aXJlIGEgZmluYWwgd3JpdGUgYWNjZXNzXG42NjM4Olx0XHQgKiBiZWZvcmUgYWxsb3dpbmcgdGhlIGVtdWxhdG9yIHRvIHJldXNlIHRoZSBHUEEgZm9yIHdyaXRlcy5cbjY2Mzk6XHRcdCAqL1xuNjY0MDpcdFx0aWYgKGRpcmVjdCBcdTAwMjZcdTAwMjYgKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1dSSVRFX01BU0spIFx1MDAyNlx1MDAyNlxuNjY0MTpcdFx0ICAgIChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLKSBcdTAwMjZcdTAwMjZcbjY2NDI6XHRcdCAgICAhKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX0dVRVNUX1BBR0VfTUFTSykpXG42NjQzOlx0XHRcdGVtdWxhdGlvbl90eXBlIHw9IEVNVUxUWVBFX1BGX1dSSVRFO1xuNjY0NDpcdFxuNjY0NTpcdFx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIGNyMl9vcl9ncGEsIGVtdWxhdGlvbl90eXBlLCBpbnNuLFxuNjY0NjpcdFx0XHRcdFx0ICAgICAgIGluc25fbGVuKTtcbjY2NDc6XHR9XG42NjQ4Olx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9tbXVfcGFnZV9mYXVsdCk7XG42NjQ5Olx0XG42NjUwOlx0dm9pZCBrdm1fbW11X3ByaW50X3NwdGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCBjb25zdCBjaGFyICptc2cpXG42NjUxOlx0e1xuNjY1MjpcdFx0dTY0IHNwdGVzW1BUNjRfUk9PVF9NQVhfTEVWRUwgJiM0MzsgMV07XG42NjUzOlx0XHRpbnQgcm9vdF9sZXZlbCwgbGVhZiwgbGV2ZWw7XG42NjU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlIGBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2VgIGZ1bmN0aW9uIHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgd2UgbWlnaHQgZmluZCBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzLCB1bmRvdWJ0ZWRseSwgYSBjb3JlIGNvbXBvbmVudCBvZiBob3cgdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBtZW1vcnkgb3BlcmF0aW9ucyBhdCB0aGUgc2luZ2xlLXBhZ2UgbGV2ZWwgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHRoZSBncml0dHkgZGV0YWlscyBvZiBlbXVsYXRpbmcgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIGEgZ3Vlc3QmIzM5O3MgbWVtb3J5IHNwYWNlIHJlc2lkZS4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHRyYXBwaW5nIGFuZCBoYW5kbGluZyBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMsIHBhZ2UgZmF1bHRzLCBvciBwb3RlbnRpYWxseSBldmVuIE1NSU8gKE1lbW9yeS1NYXBwZWQgSS9PKSBzY2VuYXJpb3MsIGRlcGVuZGluZyBvbiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEnigJlsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgYW55IHNwZWNpZmljIHg4NiBpbnN0cnVjdGlvbnMgb3IgZmVhdHVyZXMgdGhhdCBpdCBsZXZlcmFnZXMgZm9yIGVmZmljaWVuY3kgYW5kIGNvcnJlY3RuZXNzLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBpdCB2YWxpZGF0ZXMgdGhlIGd1ZXN0JiMzOTtzIHBoeXNpY2FsIGFkZHJlc3MsIGhhbmRsZXMgcG90ZW50aWFsIHRyYW5zbGF0aW9uIGlzc3VlcywgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBob3N0JiMzOTtzIG1lbW9yeSB0byBwZXJmb3JtIHRoZSBkYXRhIHRyYW5zZmVyLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB1c2VkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgY29uY3VycmVudCBhY2Nlc3MsIGFuZCB3aGF0IHRoZSBlcnJvciBoYW5kbGluZyBsb29rcyBsaWtlIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcuIEkgd2FudCB0byBzZWUgaWYgYW55IG9wdGltaXphdGlvbnMgbGlrZSBwYWdlIGNhY2hpbmcgYXJlIGltcGxlbWVudGVkIGhlcmUsIGJlY2F1c2UsIGlmIHRoZXkgYXJlLCB0aGF0JiMzOTtzIHdoYXQgd2lsbCBiZSBrZXkuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIG1lbW9yeSBlbXVsYXRpb24sIHNvIHRoZSBkZXZpbCB3aWxsIGJlIGluIHRoZSBkZXRhaWxzLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIGxvdHMgdG8gdW5yYXZlbCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwODA6XHRcdGludCBoYW5kbGVkLCByZXQ7XG41MDgxOlx0XHRib29sIHdyaXRlID0gb3BzLVx1MDAzZXdyaXRlO1xuNTA4MjpcdFx0c3RydWN0IGt2bV9tbWlvX2ZyYWdtZW50ICpmcmFnO1xuNTA4MzpcdFx0c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQgPSB2Y3B1LVx1MDAzZWFyY2guZW11bGF0ZV9jdHh0O1xuNTA4NDpcdFxuNTA4NTpcdFx0LypcbjUwODY6XHRcdCAqIElmIHRoZSBleGl0IHdhcyBkdWUgdG8gYSBOUEYgd2UgbWF5IGFscmVhZHkgaGF2ZSBhIEdQQS5cbjUwODc6XHRcdCAqIElmIHRoZSBHUEEgaXMgcHJlc2VudCwgdXNlIGl0IHRvIGF2b2lkIHRoZSBHVkEgdG8gR1BBIHRhYmxlIHdhbGsuXG41MDg4Olx0XHQgKiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIG9uIHN0cmluZyBvcGVyYXRpb25zIHNpbmNlIHN0cmluZ1xuNTA4OTpcdFx0ICogb3BlcmF0aW9uIHVzaW5nIHJlcCB3aWxsIG9ubHkgaGF2ZSB0aGUgaW5pdGlhbCBHUEEgZnJvbSB0aGUgTlBGXG41MDkwOlx0XHQgKiBvY2N1cnJlZC5cbjUwOTE6XHRcdCAqXG41MDkyOlx0XHQgKiBUaGUgZ3Vlc3QgbWF5IGhhdmUgY2hhbmdlZCB0aGUgaW5zdHJ1Y3Rpb24gc2luY2UgdGhlIGZhdWx0LiAgUmV1c2VcbjUwOTM6XHRcdCAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgZmluYWwgd3JpdGUgYWNjZXNzO1xuNTA5NDpcdFx0ICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuXG41MDk1Olx0XHQgKi9cbjUwOTY6XHRcdGlmIChjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgXHUwMDI2XHUwMDI2ICghd3JpdGUgfHwgY3R4dC1cdTAwM2VncGFfd3JpdGUpIFx1MDAyNlx1MDAyNlxuNTA5NzpcdFx0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFx1MDAyNlx1MDAyNlxuNTA5ODpcdFx0ICAgIChhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cdTAwM2VncGFfdmFsIFx1MDAyNiB+UEFHRV9NQVNLKSkge1xuNTA5OTpcdFx0XHRncGEgPSBjdHh0LVx1MDAzZWdwYV92YWw7XG41MTAwOlx0XHRcdHJldCA9IHZjcHVfaXNfbW1pb19ncGEodmNwdSwgYWRkciwgZ3BhLCB3cml0ZSk7XG41MTAxOlx0XHR9IGVsc2Uge1xuNTEwMjpcdFx0XHRyZXQgPSB2Y3B1X21taW9fZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyLCBcdTAwMjZncGEsIGV4Y2VwdGlvbiwgd3JpdGUpO1xuNTEwMzpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNTEwNDpcdFx0XHRcdHJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDtcbjUxMDU6XHRcdH1cbjUxMDY6XHRcbjUxMDc6XHRcdC8qXG41MTA4Olx0XHQgKiBJZiB0aGUgbWVtb3J5IGlzIG5vdCBfa25vd25fIHRvIGJlIGVtdWxhdGVkIE1NSU8sIGF0dGVtcHQgdG8gYWNjZXNzXG41MTA5Olx0XHQgKiBndWVzdCBtZW1vcnkuICBJZiBhY2Nlc3NpbmcgZ3Vlc3QgbWVtb3J5IGZhaWxzLCBlLmcuIGJlY2F1c2UgdGhlcmUmIzM5O3NcbjUxMTA6XHRcdCAqIG5vIG1lbXNsb3QsIHRoZW4gaGFuZGxlIHRoZSBhY2Nlc3MgYXMgTU1JTy4gIE5vdGUsIHRyZWF0aW5nIHRoZVxuNTExMTpcdFx0ICogYWNjZXNzIGFzIGVtdWxhdGVkIE1NSU8gaXMgdGVjaG5pY2FsbHkgd3JvbmcgaWYgdGhlcmUgaXMgYSBtZW1zbG90LFxuNTExMjpcdFx0ICogaS5lLiBpZiBhY2Nlc3NpbmcgaG9zdCB1c2VyIG1lbW9yeSBmYWlsZWQsIGJ1dCB0aGlzIGhhcyBiZWVuIEtWTSYjMzk7c1xuNTExMzpcdFx0ICogaGlzdG9yaWNhbCBBQkkgZm9yIGRlY2FkZXMuXG41MTE0Olx0XHQgKi9cbjUxMTU6XHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlcmVhZF93cml0ZV9ndWVzdCh2Y3B1LCBncGEsIHZhbCwgYnl0ZXMpKVxuNTExNjpcdFx0XHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbjUxMTc6XHRcbjUxMTg6XHRcdC8qXG41MTE5Olx0XHQgKiBBdHRlbXB0IHRvIGhhbmRsZSBlbXVsYXRlZCBNTUlPIHdpdGhpbiB0aGUga2VybmVsLCBlLmcuIGZvciBhY2Nlc3Nlc1xuNTEyMDpcdFx0ICogdG8gYW4gaW4ta2VybmVsIGxvY2FsIG9yIEkvTyBBUElDLCBvciB0byBhbiBpb2V2ZW50ZmQgcmFuZ2UgYXR0YWNoZWRcbjUxMjE6XHRcdCAqIHRvIE1NSU8gYnVzLiAgSWYgdGhlIGFjY2VzcyBpc24mIzM5O3QgZnVsbHkgcmVzb2x2ZWQsIGluc2VydCBhbiBNTUlPXG41MTIyOlx0XHQgKiBmcmFnbWVudCB3aXRoIHRoZSByZWxldmFudCBkZXRhaWxzLlxuNTEyMzpcdFx0ICovXG41MTI0Olx0XHRoYW5kbGVkID0gb3BzLVx1MDAzZXJlYWRfd3JpdGVfbW1pbyh2Y3B1LCBncGEsIGJ5dGVzLCB2YWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI3CgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDc4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gZmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgcGF0Y2ggcmVxdWlyZXMgYE5lZWRzS01TQU49dHJ1ZWAuIEkgbmVlZCB0byBzeXN0ZW1hdGljYWxseSBldmFsdWF0ZSB0aGUgY29kZSBhZ2FpbnN0IHRoZSBkb2N1bWVudGVkIGNyaXRlcmlhIGZvciBLTVNBTiBlbmFibGVtZW50LCBrZWVwaW5nIGluIG1pbmQgdGhhdCB0aGUgcHJpbWFyeSByaXNrcyBLTVNBTiBmbGFncyBhcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuCgpGaXJzdCwgSSB3ZW50IHRocm91Z2ggdGhlIGNyaXRlcmlhOiBLTVNBTiBpcyByZWxldmFudCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZHMsIGludHJvZHVjZXMgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGludm9sdmVzIGFsbG9jYXRpbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXIsIG9yIG1vZGlmaWVzIGJvdW5kcyBjaGVja3MgaW4gd2F5cyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIE90aGVyd2lzZSwgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgc3VmZmljZS4KCk5vdywgbGV0JiMzOTtzIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZi4gSSYjMzk7dmUgZ290IGEgbmV3IGJvb2xlYW4gdmFyaWFibGUsIGBncGFfd3JpdGVgLCBpbnRyb2R1Y2VkIGluIGB4ODZfZW11bGF0ZV9jdHh0YC4gSW1tZWRpYXRlbHksIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBleHBsaWNpdGx5IHplcm9lcyB0aGlzIHdpdGggYGN0eHQtJmd0O2dwYV93cml0ZSA9IGZhbHNlYC4gRnVydGhlcm1vcmUsIHRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvYygpYCwgbWVhbmluZyB0aGUgbWVtb3J5IGlzIGd1YXJhbnRlZWQgemVyb2VkLiBMYXRlciBpbiB0aGUgY29kZSwgYGN0eHQtJmd0O2dwYV93cml0ZWAgaXMgY29uZGl0aW9uYWxseSBzZXQgdG8gYSB2YWx1ZSBkZXJpdmVkIGZyb20gYGVtdWxhdGlvbl90eXBlYCBpbiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAsIGJ1dCAqb25seSogaWYgYGN0eHQtJmd0O2dwYV9hdmFpbGFibGVgIGlzIGFsc28gdHJ1ZS4gVGhlIHJlYWQgaW4gYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSgpYCBpcyBzaW1pbGFybHkgY29uZGl0aW9uYWwgb24gYGN0eHQtJmd0O2dwYV9hdmFpbGFibGVgLCBhbmQgdGhpcyB2YXJpYWJsZSBpcyAqYWx3YXlzKiBpbml0aWFsaXplZC4gSSBzZWUgbm8gcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgbm8gYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgbmV3IHN0cnVjdHVyZSBtZW1iZXIgYW5kIGFsbCBleGlzdGluZyBtZW1iZXJzIGFyZSBpbml0aWFsaXplZCAoZWl0aGVyIGV4cGxpY2l0bHkgb3IgdmlhIHRoZSBhbGxvY2F0aW9uKSwgYW5kIHRoZXJlJiMzOTtzIG5vIHdheSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBgTmVlZHNLTVNBTmAgY2xlYXJseSBzaG91bGQgYmUgYGZhbHNlYC4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7dmUgY2hlY2tlZCBhbGwgdGhlIG1vZGlmaWVkIGZpbGVzOiBgYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhgIChhZGRpbmcgYGdwYV93cml0ZWApLCBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgKHNldHRpbmcgYEVNVUxUWVBFX1BGX1dSSVRFYCksIGBhcmNoL3g4Ni9rdm0veDg2LmNgIChpbml0aWFsaXppbmcgYW5kIHVzaW5nIGBjdHh0LSZndDtncGFfd3JpdGVgKSwgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmhgIChkZWZpbmluZyBgRU1VTFRZUEVfUEZfV1JJVEVgKS4gRXZlcnl0aGluZyBpcyBwcmlzdGluZTsgdGhlcmUgYXJlIG5vIHJpc2tzIHdoYXRzb2V2ZXIuCgpUaW1lIHRvIGZlZWQgdGhpcyByZWFzb25pbmcgaW50byB0aGUgYHNldC1yZXN1bHRzYCB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBpc3N1ZSBpbiBLVk0gd2hlcmUgYSBmYXVsdGluZyBHUEEgd2FzIHJldXNlZCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSBoYXJkd2FyZSBwYWdlIGZhdWx0IHdhcyBhbiBhY3R1YWwgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaW5hbCBHUEEuIEl0IGludHJvZHVjZXMgYSBuZXcgYm9vbGVhbiBmaWVsZCBgZ3BhX3dyaXRlYCB0byBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGFuZCBhbiBlbXVsYXRpb24gZmxhZyBgRU1VTFRZUEVfUEZfV1JJVEVgLlxuXG5UaGUgbmV3IGZpZWxkIGBncGFfd3JpdGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgaW5pdF9lbXVsYXRlX2N0eHQoKWAgYW5kIHplcm8tYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgaW4gYGFsbG9jX2VtdWxhdGVfY3R4dCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGNvcHktdG8tdXNlciBidWZmZXJzIG9yIHN0cnVjdCBwYWRkaW5nLCBhbmQgaW50cm9kdWNlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBpc3N1ZSBpbiBLVk0gd2hlcmUgYSBmYXVsdGluZyBHUEEgd2FzIHJldXNlZCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSBoYXJkd2FyZSBwYWdlIGZhdWx0IHdhcyBhbiBhY3R1YWwgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaW5hbCBHUEEuIEl0IGludHJvZHVjZXMgYSBuZXcgYm9vbGVhbiBmaWVsZCBgZ3BhX3dyaXRlYCB0byBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGFuZCBhbiBlbXVsYXRpb24gZmxhZyBgRU1VTFRZUEVfUEZfV1JJVEVgLlxuXG5UaGUgbmV3IGZpZWxkIGBncGFfd3JpdGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgaW5pdF9lbXVsYXRlX2N0eHQoKWAgYW5kIHplcm8tYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgaW4gYGFsbG9jX2VtdWxhdGVfY3R4dCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGNvcHktdG8tdXNlciBidWZmZXJzIG9yIHN0cnVjdCBwYWRkaW5nLCBhbmQgaW50cm9kdWNlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjA3LjUwODQ1NjkyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTA1NTg2NTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9tbXVfcGFnZV9mYXVsdFwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIGlzc3VlIGluIEtWTSB3aGVyZSBhIGZhdWx0aW5nIEdQQSB3YXMgcmV1c2VkIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlIGhhcmR3YXJlIHBhZ2UgZmF1bHQgd2FzIGFuIGFjdHVhbCB3cml0ZSBhY2Nlc3MgdG8gdGhlIGZpbmFsIEdQQS4gSXQgaW50cm9kdWNlcyBhIG5ldyBib29sZWFuIGZpZWxkIGBncGFfd3JpdGVgIHRvIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGAgYW5kIGFuIGVtdWxhdGlvbiBmbGFnIGBFTVVMVFlQRV9QRl9XUklURWAuXFxuXFxuVGhlIG5ldyBmaWVsZCBgZ3BhX3dyaXRlYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYGluaXRfZW11bGF0ZV9jdHh0KClgIGFuZCB6ZXJvLWFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIGluIGBhbGxvY19lbXVsYXRlX2N0eHQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBjb3B5LXRvLXVzZXIgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZywgYW5kIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGFuZCBNTVUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYy4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjYWNoZWQgR1BBIGlzIG9ubHkgcmV1c2VkIGZvciB3cml0ZXMgZHVyaW5nIGVtdWxhdGlvbiBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzcyAoRU1VTFRZUEVfUEZfV1JJVEUpLCBwcmV2ZW50aW5nIHVuYXV0aG9yaXplZCBndWVzdCBtZW1vcnkgd3JpdGVzLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvcmUgVk0gZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgcGFnZSBmYXVsdCBlbXVsYXRpb24sIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODowNy41MDg0NjMzMzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDUxNjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdlNTBjYTdiOGYwYTg3MmM4ZmU4OTBhOTgyYjkzOGIzOTZkNzU0OGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjggMjA6Mjg6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbmluZGV4IDNlMzc1YWYxNWMwMzUuLmFjZWNhOWQzYTE2ZDMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbkBAIC0zNTQsOCArMzU0LDkgQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQge1xcbiBcXHRib29sIGhhdmVfZXhjZXB0aW9uO1xcbiBcXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247XFxuIFxcbi1cXHQvKiBHUEEgYXZhaWxhYmxlICovXFxuK1xcdC8qIEdQQSBhbmQgd3JpdGUgYWNjZXNzIHN1cHBsaWVkIGJ5IGEgaGFyZHdhcmUgcGFnZSBmYXVsdC4gKi9cXG4gXFx0Ym9vbCBncGFfYXZhaWxhYmxlO1xcbitcXHRib29sIGdwYV93cml0ZTtcXG4gXFx0Z3BhX3QgZ3BhX3ZhbDtcXG4gXFxuIFxcdC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uMjIzNjk4Y2JiOWJlNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbkBAIC02NjMyLDYgKzY2MzIsMTYgQEAgaW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJcXG4gXFx0XFx0cmV0dXJuIHI7XFxuIFxcbiBlbXVsYXRlOlxcbitcXHQvKlxcbitcXHQgKiBBIHdyaXRlIGR1cmluZyBhIGd1ZXN0IHBhZ2Ugd2FsayBkb2VzIG5vdCBhdXRob3JpemUgdGhlIGluc3RydWN0aW9uXFxuK1xcdCAqIGl0c2VsZiB0byB3cml0ZSB0byB0aGUgZmF1bHRpbmcgR1BBLiAgUmVxdWlyZSBhIGZpbmFsIHdyaXRlIGFjY2Vzc1xcbitcXHQgKiBiZWZvcmUgYWxsb3dpbmcgdGhlIGVtdWxhdG9yIHRvIHJldXNlIHRoZSBHUEEgZm9yIHdyaXRlcy5cXG4rXFx0ICovXFxuK1xcdGlmIChkaXJlY3QgXFx1MDAyNlxcdTAwMjYgKGVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9XUklURV9NQVNLKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShlcnJvcl9jb2RlIFxcdTAwMjYgUEZFUlJfR1VFU1RfUEFHRV9NQVNLKSlcXG4rXFx0XFx0ZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7XFxuK1xcbiBcXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyX29yX2dwYSwgZW11bGF0aW9uX3R5cGUsIGluc24sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBpbnNuX2xlbik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggNzk0NjhkZGZlNDczNi4uOGM0NmFhMzQ2OGMyZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtNTA4OCw4ICs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxcbiBcXHQgKiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIG9uIHN0cmluZyBvcGVyYXRpb25zIHNpbmNlIHN0cmluZ1xcbiBcXHQgKiBvcGVyYXRpb24gdXNpbmcgcmVwIHdpbGwgb25seSBoYXZlIHRoZSBpbml0aWFsIEdQQSBmcm9tIHRoZSBOUEZcXG4gXFx0ICogb2NjdXJyZWQuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBndWVzdCBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBpbnN0cnVjdGlvbiBzaW5jZSB0aGUgZmF1bHQuICBSZXVzZVxcbitcXHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzcztcXG4rXFx0ICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuXFxuIFxcdCAqL1xcbi1cXHRpZiAoY3R4dC1cXHUwMDNlZ3BhX2F2YWlsYWJsZSBcXHUwMDI2XFx1MDAyNiBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAoY3R4dC1cXHUwMDNlZ3BhX2F2YWlsYWJsZSBcXHUwMDI2XFx1MDAyNiAoIXdyaXRlIHx8IGN0eHQtXFx1MDAzZWdwYV93cml0ZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAoYWRkciBcXHUwMDI2IH5QQUdFX01BU0spID09IChjdHh0LVxcdTAwM2VncGFfdmFsIFxcdTAwMjYgflBBR0VfTUFTSykpIHtcXG4gXFx0XFx0Z3BhID0gY3R4dC1cXHUwMDNlZ3BhX3ZhbDtcXG4gXFx0XFx0cmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTtcXG5AQCAtNTkzOSw2ICs1OTQ0LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9lbXVsYXRlX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXFx1MDAyNmNzX2RiLCBcXHUwMDI2Y3NfbCk7XFxuIFxcbiBcXHRjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XFxuK1xcdGN0eHQtXFx1MDAzZWdwYV93cml0ZSA9IGZhbHNlO1xcbiBcXHRjdHh0LVxcdTAwM2VlZmxhZ3MgPSBrdm1fZ2V0X3JmbGFncyh2Y3B1KTtcXG4gXFx0Y3R4dC1cXHUwMDNldGYgPSAoY3R4dC1cXHUwMDNlZWZsYWdzIFxcdTAwMjYgWDg2X0VGTEFHU19URikgIT0gMDtcXG4gXFxuQEAgLTY0NTUsNiArNjQ2MSw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuIFxcdFxcdC8qIFdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBjcjIgY29udGFpbnMgYSBHVkEgb3IgbkdQQS4gKi9cXG4gXFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gubW11LVxcdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XFxuIFxcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV9hdmFpbGFibGUgPSB0cnVlO1xcbitcXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfd3JpdGUgPSBlbXVsYXRpb25fdHlwZSBcXHUwMDI2IEVNVUxUWVBFX1BGX1dSSVRFO1xcbiBcXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcXG5pbmRleCAwZjU5MTliMDkyZTQ3Li4yZGQ0NTZhZDNlMmQ2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxcbkBAIC00MDcsNiArNDA3LDkgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcXG4gICogRU1VTFRZUEVfUEYgLSBTZXQgd2hlbiBhbiBpbnRlcmNlcHRlZCAjUEYgdHJpZ2dlcnMgdGhlIGVtdWxhdGlvbiwgaW4gd2hpY2ggY2FzZVxcbiAgKlxcdFxcdCB0aGUgQ1IyL0dQQSB2YWx1ZSBwYXNzIG9uIHRoZSBzdGFjayBpcyB2YWxpZC5cXG4gICpcXG4rICogRU1VTFRZUEVfUEZfV1JJVEUgLSBTZXQgd2l0aCBFTVVMVFlQRV9QRiB3aGVuIGhhcmR3YXJlIHJlcG9ydHMgYSB3cml0ZSB0byB0aGVcXG4rICpcXHRcXHQgICAgIGZpbmFsIEdQQSwgbm90IGFuIGltcGxpY2l0IGd1ZXN0IHBhZ2UtdGFibGUgYWNjZXNzLlxcbisgKlxcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XFxuICAqXFx0XFx0XFx0XFx0IHN0YXRlIGFuZCBpbmplY3Qgc2luZ2xlLXN0ZXAgI0RCcyBhZnRlciBza2lwcGluZ1xcbiAgKlxcdFxcdFxcdFxcdCBhbiBpbnN0cnVjdGlvbiAoYWZ0ZXIgY29tcGxldGluZyB1c2Vyc3BhY2UgSS9PKS5cXG5AQCAtNDQ1LDYgKzQ0OCw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1BcXHQgICAgKDEgXFx1MDAzY1xcdTAwM2MgOClcXG4gI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UXFx0ICAgICgxIFxcdTAwM2NcXHUwMDNjIDkpXFxuKyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVcXHQgICAgQklUKDEwKVxcbiBcXG4gI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpXFx0KCh1MzIpKCh2KSBcXHUwMDI2IDB4ZmYpIFxcdTAwM2NcXHUwMDNjIDE2KVxcbiAjZGVmaW5lIEVNVUxUWVBFX0dFVF9TT0ZUX0lOVF9WRUNUT1IoZSlcXHQoKChlKSBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweGZmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODowNy45Mjk2MDY1OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQyNjExODExOTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9wYWdlX2ZhdWx0XCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGFuZCBNTVUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYy4gSXQgZW5zdXJlcyB0aGF0IHRoZSBjYWNoZWQgR1BBIGlzIG9ubHkgcmV1c2VkIGZvciB3cml0ZXMgZHVyaW5nIGVtdWxhdGlvbiBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzcyAoRU1VTFRZUEVfUEZfV1JJVEUpLCBwcmV2ZW50aW5nIHVuYXV0aG9yaXplZCBndWVzdCBtZW1vcnkgd3JpdGVzLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvcmUgVk0gZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgZ3Vlc3QgcGFnZSBmYXVsdCBlbXVsYXRpb24sIG1ha2luZyB0aGVtIHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTUwY2E3YjhmMGE4NzJjOGZlODkwYTk4MmI5MzhiMzk2ZDc1NDhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjA6Mjg6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaCBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5pbmRleCAzZTM3NWFmMTVjMDM1Li5hY2VjYTlkM2ExNmQzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbisrKyBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5AQCAtMzU0LDggKzM1NCw5IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IHtcbiBcdGJvb2wgaGF2ZV9leGNlcHRpb247XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247XG4gXG4tXHQvKiBHUEEgYXZhaWxhYmxlICovXG4rXHQvKiBHUEEgYW5kIHdyaXRlIGFjY2VzcyBzdXBwbGllZCBieSBhIGhhcmR3YXJlIHBhZ2UgZmF1bHQuICovXG4gXHRib29sIGdwYV9hdmFpbGFibGU7XG4rXHRib29sIGdwYV93cml0ZTtcbiBcdGdwYV90IGdwYV92YWw7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCAwNjRlY2MzM2I5MjY3Li4yMjM2OThjYmI5YmU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTY2MzIsNiArNjYzMiwxNiBAQCBpbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVyclxuIFx0XHRyZXR1cm4gcjtcbiBcbiBlbXVsYXRlOlxuK1x0LypcbitcdCAqIEEgd3JpdGUgZHVyaW5nIGEgZ3Vlc3QgcGFnZSB3YWxrIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgaW5zdHJ1Y3Rpb25cbitcdCAqIGl0c2VsZiB0byB3cml0ZSB0byB0aGUgZmF1bHRpbmcgR1BBLiAgUmVxdWlyZSBhIGZpbmFsIHdyaXRlIGFjY2Vzc1xuK1x0ICogYmVmb3JlIGFsbG93aW5nIHRoZSBlbXVsYXRvciB0byByZXVzZSB0aGUgR1BBIGZvciB3cml0ZXMuXG4rXHQgKi9cbitcdGlmIChkaXJlY3QgXHUwMDI2XHUwMDI2IChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9XUklURV9NQVNLKSBcdTAwMjZcdTAwMjZcbitcdCAgICAoZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfR1VFU1RfRklOQUxfTUFTSykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9HVUVTVF9QQUdFX01BU0spKVxuK1x0XHRlbXVsYXRpb25fdHlwZSB8PSBFTVVMVFlQRV9QRl9XUklURTtcbitcbiBcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcbiBcdFx0XHRcdCAgICAgICBpbnNuX2xlbik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uOGM0NmFhMzQ2OGMyZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTA4OCw4ICs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxuIFx0ICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmdcbiBcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxuIFx0ICogb2NjdXJyZWQuXG4rXHQgKlxuK1x0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXG4rXHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzcztcbitcdCAqIG90aGVyd2lzZSwgcmVjaGVjayBwZXJtaXNzaW9ucyBmb3IgdGhlIGRlY29kZWQgYWNjZXNzLlxuIFx0ICovXG4tXHRpZiAoY3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlIFx1MDAyNlx1MDAyNiBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbitcdGlmIChjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgXHUwMDI2XHUwMDI2ICghd3JpdGUgfHwgY3R4dC1cdTAwM2VncGFfd3JpdGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cdTAwM2VncGFfdmFsIFx1MDAyNiB+UEFHRV9NQVNLKSkge1xuIFx0XHRncGEgPSBjdHh0LVx1MDAzZWdwYV92YWw7XG4gXHRcdHJldCA9IHZjcHVfaXNfbW1pb19ncGEodmNwdSwgYWRkciwgZ3BhLCB3cml0ZSk7XG5AQCAtNTkzOSw2ICs1OTQ0LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9lbXVsYXRlX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX3g4Nl9jYWxsKGdldF9jc19kYl9sX2JpdHMpKHZjcHUsIFx1MDAyNmNzX2RiLCBcdTAwMjZjc19sKTtcbiBcbiBcdGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSA9IGZhbHNlO1xuK1x0Y3R4dC1cdTAwM2VncGFfd3JpdGUgPSBmYWxzZTtcbiBcdGN0eHQtXHUwMDNlZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7XG4gXHRjdHh0LVx1MDAzZXRmID0gKGN0eHQtXHUwMDNlZWZsYWdzIFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xuIFxuQEAgLTY0NTUsNiArNjQ2MSw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4gXHRcdC8qIFdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBjcjIgY29udGFpbnMgYSBHVkEgb3IgbkdQQS4gKi9cbiBcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5tbXUtXHUwMDNlcm9vdF9yb2xlLmRpcmVjdCkge1xuIFx0XHRcdGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSA9IHRydWU7XG4rXHRcdFx0Y3R4dC1cdTAwM2VncGFfd3JpdGUgPSBlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEU7XG4gXHRcdFx0Y3R4dC1cdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjJkZDQ1NmFkM2UyZDYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxuQEAgLTQwNyw2ICs0MDcsOSBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2VcbiAgKlx0XHQgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuXG4gICpcbisgKiBFTVVMVFlQRV9QRl9XUklURSAtIFNldCB3aXRoIEVNVUxUWVBFX1BGIHdoZW4gaGFyZHdhcmUgcmVwb3J0cyBhIHdyaXRlIHRvIHRoZVxuKyAqXHRcdCAgICAgZmluYWwgR1BBLCBub3QgYW4gaW1wbGljaXQgZ3Vlc3QgcGFnZS10YWJsZSBhY2Nlc3MuXG4rICpcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XG4gICpcdFx0XHRcdCBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmdcbiAgKlx0XHRcdFx0IGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLlxuQEAgLTQ0NSw2ICs0NDgsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxIFx1MDAzY1x1MDAzYyA3KVxuICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1BcdCAgICAoMSBcdTAwM2NcdTAwM2MgOClcbiAjZGVmaW5lIEVNVUxUWVBFX1NLSVBfU09GVF9JTlRcdCAgICAoMSBcdTAwM2NcdTAwM2MgOSlcbisjZGVmaW5lIEVNVUxUWVBFX1BGX1dSSVRFXHQgICAgQklUKDEwKVxuIFxuICNkZWZpbmUgRU1VTFRZUEVfU0VUX1NPRlRfSU5UX1ZFQ1RPUih2KVx0KCh1MzIpKCh2KSBcdTAwMjYgMHhmZikgXHUwMDNjXHUwMDNjIDE2KVxuICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKVx0KCgoZSkgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjA3LjkyOTYwNzc4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODEwMjg2NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIEtWTSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIGZldyBrZXkgS1ZNL3g4NiBmaWxlczogYGt2bV9lbXVsYXRlLmhgLCBgbW11L21tdS5jYCwgYHg4Ni5jYCwgYW5kIGB4ODYuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGNvcmUgS1ZNIHN0dWZmLCBzbyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwuIExldCdzIGJyZWFrIGRvd24gdGhlIGNvZGU6XG5cbkluIGBtbXUuY2AsIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGhhcyBiZWVuIHVwZGF0ZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBub3cgc2V0dGluZyBgRU1VTFRZUEVfUEZfV1JJVEVgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM6IHdoZW4gZGlyZWN0IGFjY2VzcyBpcyBhbGxvd2VkLCBhIHdyaXRlIGVycm9yIGlzIGZsYWdnZWQsIHRoZSBndWVzdCBmaW5hbCBiaXQgaXMgc2V0LCBhbmQgdGhlIGd1ZXN0IHBhZ2UgYml0IGlzIG5vdCBzZXQuIFRoaXMgaXMgaW50ZXJlc3Rpbmcg4oCTIGl0IHNlZW1zIHRvIGJlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgd3JpdGUgZmF1bHRzIHdpdGhpbiB0aGUgTU1VIGVtdWxhdGlvbi5cblxuVGhlbiwgbG9va2luZyBhdCBgeDg2LmNgLCBJIHNlZSBzb21lIGNoYW5nZXMgaW4gYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAuIFRoZXJlJ3Mgbm93IGEgY2hlY2sgdGhhdCBzZWVtcyB0byBkZXRlcm1pbmUgd2hlbiBhIEdQQSBjYW4gYmUgdXNlZCBmb3Igd3JpdGVzLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCAoYGN0eHRgKSBhbmQgd2hldGhlciB0aGUgYGVtdWxhdG9yX2Nhbl91c2VfZ3BhKClgIGZ1bmN0aW9uIGlzIHRydWUuIFRoZSBgaW5pdF9lbXVsYXRlX2N0eHRgIGZ1bmN0aW9uIHNldHMgYGN0eHQtXHUwMDNlZ3BhX3dyaXRlYCB0byBmYWxzZSBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBzZXRzIGl0IHRvIGBlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEU7YC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGBFTVVMVFlQRV9QRl9XUklURWAgaXMgYmVpbmcgdXNlZCwgdG8gZGV0ZXJtaW5lLCBvbiBhIHBlci1pbnN0cnVjdGlvbiBiYXNpcywgd2hldGhlciB0aGUgR1BBIGNhbiBiZSB1c2VkIGZvciB3cml0ZSBvcGVyYXRpb25zLlxuXG5TbywgaW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBpcyBhYm91dCByZWZpbmluZyB0aGUgbG9naWMgZm9yIEtWTSdzIHg4NiBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBHUEEgcmV1c2UgZm9yIHdyaXRlcyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZy4gVGhpcyBkaXJlY3RseSB0b3VjaGVzIGNvcmUgeDg2IHZpcnR1YWxpemF0aW9uIGZ1bmN0aW9uYWxpdHkgYW5kLCBjcnVjaWFsbHksIGlzICphYnNvbHV0ZWx5KiBpbiBzY29wZSBmb3IgZnV6emluZywgZ2l2ZW4gaG93IHN5emthbGxlciBoaXRzIEtWTSB0aHJvdWdoIGAvZGV2L2t2bWAuIEFueSBtaXNjYWxjdWxhdGlvbiBoZXJlIGNvdWxkIGhhdmUgcmVhbGx5IG5hc3R5IGltcGxpY2F0aW9ucy5cblxuTm93IEkgbmVlZCB0byBzdGFydCB1c2luZyBteSB1c3VhbCB0b29scyB0byBkaWcgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLCBzZWUgd2hhdCBzeW1ib2xzIGFyZSBpbXBhY3RlZCwgYW5kIGNvbmZpcm0gdGhhdCBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgaW50ZXJwbGF5IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29ycmVjdC4gVGltZSB0byBnZXQgc29tZSBtb3JlIGRhdGEgYW5kIHZlcmlmeSBteSBpbml0aWFsIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjAwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6MjQuNzM5ODk2MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3OTQzODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9wYWdlX2ZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11Lmg9MTQ2PXZvaWQga3ZtX2luaXRfc2hhZG93X2VwdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGV4ZWNvbmx5LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oLTE0OS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MTUwOmludCBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTUxLVxcdFxcdCAgICAgICB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00ODkwPWludCBrdm1faGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXJyb3JfY29kZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDkxOC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5MTk6XFx0XFx0ciA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlLCBpbnNuLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDkyMC1cXHRcXHRcXHRcXHRpbnNuX2xlbik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY0NzQ9c3RhdGljIGludCBrdm1fbW11X3dyaXRlX3Byb3RlY3RfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTY2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjU2NzppbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTY4LVxcdFxcdCAgICAgICB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDctfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjY0ODpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX21tdV9wYWdlX2ZhdWx0KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE5NzQ9c3RhdGljIGludCBucGZfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyNC1cXHR0cmFjZV9rdm1fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjAyNTpcXHRyYyA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDI2LVxcdFxcdFxcdFxcdGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfREVDT0RFQVNTSVNUUykgP1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD04Mz1zdGF0aWMgaW5saW5lIGludCBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTE1LVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6MTE2OlxcdHJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBlcnJvcl9jb2RlLCBOVUxMLCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTExNy19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTYwMDU9c3RhdGljIGludCBoYW5kbGVfZXB0X21pc2NvbmZpZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMjItXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MDIzOlxcdHJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBQRkVSUl9SU1ZEX01BU0ssIE5VTEwsIDApO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjAyNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjI0Ljc4NTcwMDAxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NzkzOTA2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBLVk0gaXMgcHJvcGVybHkgc2V0IHVwIGZvciB4ODYuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgb3B0aW9ucyBhcmUgZGVmaW5lZCwgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBkZWZhdWx0IHNldHRpbmdzLiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IEtWTSBvcHRpb25zIGFyZSBlbmFibGVkIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgY29uZmxpY3Rpbmcgc2V0dGluZ3Mgd2l0aCBvdGhlciB2aXJ0dWFsaXphdGlvbiBtb2R1bGVzIG9yIGNvcmUgeDg2IGZlYXR1cmVzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzOyBhcmUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zIGNvcnJlY3RseSBlbmFibGVkIGluIHRoZSBCSU9TL2Zpcm13YXJlIGFuZCBpcyB0aGUga2VybmVsIGNvbmZpZ3VyZWQgdG8gZGV0ZWN0IGFuZCB1c2UgdGhlbT8gQW55IGlzc3VlcyBoZXJlIGFuZCBLVk0gd2lsbCBiZSBkZWFkIGluIHRoZSB3YXRlci4gSSdsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3Mgb3IgZmVhdHVyZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgS1ZNJ3MgcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3Igb24geDg2LiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSBldmVyeXRoaW5nIGlzIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6MzAuNDY1MDkyNjc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzI2NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjMwLjUxMDgyMzUwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzY1NzIyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBNYWtlZmlsZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgY3J1Y2lhbCBmaWxlOiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gSSdtIGd1ZXNzaW5nIHRoYXQgd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZywgb3Igd2hhdGV2ZXIgZW5oYW5jZW1lbnQgSSdtIHdvcmtpbmcgb24sIGxpa2VseSBoYXMgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBLVk0geDg2IG1vZHVsZS4gVGhpcyBNYWtlZmlsZSBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgbWFnaWMgaGFwcGVucyDigJMgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBjb21waWxhdGlvbiB0YXJnZXRzIGFyZSBzZXQgdXAsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGdldHMgYnVpbHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZSdzIGxvZ2ljIHRvIHNlZSB3aGVyZSBteSBjaGFuZ2VzIGZpdCBpbiBvciB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDg1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6MzIuNjQ3Mzk4MDk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTg2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tdS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGU9OD1rdm0teVxcdFxcdFxcdCs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjk6XFx0XFx0XFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEwLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxMTprdm0tJChDT05GSUdfWDg2XzY0KSArPSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEyLWt2bS0kKENPTkZJR19LVk1fSU9BUElDKSArPSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6MzIuNjkxMzkxMTQ0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMjU3ODk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBCYXNlZCBvbiB0aGUgaXNzdWUsIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IHBva2luZyBhcm91bmQgaW4gdGhlIEtWTSBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRhcmdldCB3aWxsIGJlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSBmaWd1cmUgdGhlIGxpbmVzIGJldHdlZW4gMjAgYW5kIDYwIGFyZSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSdtIGhvcGluZyB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxhdGVkIHRvIHdoYXRldmVyJ3MgZ29uZSBhd3J5LiBUaGF0IHJhbmdlIHVzdWFsbHkgY292ZXJzIHNvbWUgb2YgdGhlIGNvcmUgZmVhdHVyZXMgYW5kIGRlcGVuZGVuY2llcywgc28gdGhhdCdzIHdoZXJlIEknbGwgc3RhcnQgdGhlIGh1bnQuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueXRoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnksIG9yIGFueSBoaW50cyBhdCB0aGUgcm9vdCBjYXVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUyNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjM0LjkwMzk3MzIxNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRjb25maWcgS1ZNX1g4NlxcbiAgMjE6XFx0XFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbiAgMjI6XFx0XFx0c2VsZWN0IEtWTV9DT01NT05cXG4gIDIzOlxcdFxcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxuICAyNDpcXHRcXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAgMjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG4gIDI2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbiAgMjc6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXFxuICAyODpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xcbiAgMzA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAzMjpcXHRcXHRzZWxlY3QgVkhPU1RfVEFTS1xcbiAgMzM6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXFxuICAzNTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDM2OlxcdFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuICAzNzpcXHRcXHRzZWxlY3QgUEVSRl9FVkVOVFNcXG4gIDM4OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xcbiAgMzk6XFx0XFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXFxuICA0MDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICA0MTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgNDI6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG4gIDQzOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgNDQ6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgNDU6XFx0XFx0c2VsZWN0IEtWTV9WRklPXFxuICA0NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cXG4gIDQ3OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbiAgNDg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG4gIDQ5OlxcdFxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbiAgNTA6XFx0XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG4gIDUxOlxcdFxcbiAgNTI6XFx0Y29uZmlnIEtWTVxcbiAgNTM6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXFxuICA1NzpcXHRcXHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxcbiAgNTg6XFx0XFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXFxuICA1OTpcXHRcXHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6MzQuOTA0MDU1MDk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NDk1ODIzNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6XG5cbioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIEtWTSBjb25maWd1cmF0aW9uLiBUaGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBlc3BlY2lhbGx5IHNpbmNlIHdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlIGJyb2FkZXIgYFZJUlRVQUxJWkFUSU9OYCBjb250ZXh0LiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHZpcnR1YWxpemF0aW9uIGlzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IHRoZSB4ODYgbGV2ZWwgd2l0aGluIEtWTS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgdG8gdW5kZXJzdGFuZCByZWxhdGVkIG1vZHVsZXMgYW5kIGZsYWdzLiBJIGV4cGVjdCB0byBmaW5kIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIG1heWJlIGV2ZW4gc29tZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB0aGUgQ1BVJ3MgY2FwYWJpbGl0aWVzLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIHJldmVhbHMuLi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODozOS40NTM2NDAxMDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEtWTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdHNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IHlcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcXG4gIDEzOlxcdFxcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXFxuICAxNDpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgVklSVFVBTElaQVRJT05cXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEtWTV9YODZcXG4gIDIxOlxcdFxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4gIDIyOlxcdFxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuICAyMzpcXHRcXHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbiAgMjQ6XFx0XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gIDI1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjM5LjQ1MzcwOTE2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzIzMTEyMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBLVk0gaXNzdWUsIGFuZCBpbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCB0aGUgYnJvYWRlciBgVklSVFVBTElaQVRJT05gIHNldHRpbmcuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLCBzbyBJJ2xsIHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgY2hhbmdlZCBmdW5jdGlvbnMuXG5cbkZpcnN0IHVwIGlzIGBrdm1fbW11X3BhZ2VfZmF1bHRgLCB3aGljaCByZXNpZGVzIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFRoZW4sIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AuIEZvbGxvd2luZyB0aGF0LCBJIHNlZSBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiBhbHNvIHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gRmluYWxseSwgYGluaXRfZW11bGF0ZV9jdHh0YCBpcyBhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgYWxzbyBmb3VuZCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC5cblxuTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiBga3ZtX21tdV9wYWdlX2ZhdWx0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBhcmUgZXhwb3J0ZWQuIEkgcmVtZW1iZXIgc2VlaW5nIGBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX21tdV9wYWdlX2ZhdWx0KTtgIGFzc29jaWF0ZWQgd2l0aCBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgc28gdGhhdCBvbmUgaXMgZXhwb3J0ZWQgaW50ZXJuYWxseSB0byBLVk0uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgZXhwb3J0IG9mIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgdmlzaWJpbGl0eSBhbmQgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODo0My4xNzY4MjMzNDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTYwMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY1Njc9aW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjQ0LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjY0NTpcXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyX29yX2dwYSwgZW11bGF0aW9uX3R5cGUsIGluc24sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjQ2LVxcdFxcdFxcdFxcdCAgICAgICBpbnNuX2xlbik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTE1Mz1zdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTIyNi1cXHQgKiBhZnRlciBjb21wbGV0aW5nIGVtdWxhdGlvbiAoc2VlIHRoZSBjaGVjayBvbiB2Y3B1LVxcdTAwM2VtbWlvX25lZWRlZCBpblxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjI3OlxcdCAqIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKCkpLlxcbmFyY2gveDg2L2t2bS94ODYuYy01MjI4LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTYzMzQ9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKHg4Nl9kZWNvZGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy02MzM1LVxcbmFyY2gveDg2L2t2bS94ODYuYzo2MzM2OmludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTYzMzctXFx0XFx0XFx0ICAgIGludCBlbXVsYXRpb25fdHlwZSwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTY1NTc9aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxhdGlvbl90eXBlKVxcbmFyY2gveDg2L2t2bS94ODYuYy02NTU4LXtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU1OTpcXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgZW11bGF0aW9uX3R5cGUsIE5VTEwsIDApO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NTYwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz02NTYzPWludCBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbl9mcm9tX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2NS17XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY1NjY6XFx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIGluc24sIGluc25fbGVuKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU2Ny19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzcxPWludCB4ODZfZGVjb2RlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxhdGlvbl90eXBlLFxcbmFyY2gveDg2L2t2bS94ODYuaC0zNzItXFx0XFx0XFx0XFx0ICAgIHZvaWQgKmluc24sIGludCBpbnNuX2xlbik7XFxuYXJjaC94ODYva3ZtL3g4Ni5oOjM3MzppbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuaC0zNzQtXFx0XFx0XFx0ICAgIGludCBlbXVsYXRpb25fdHlwZSwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6NDMuMjIxNzg4MjExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwOTQ1NTg0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGFuZCBga3ZtX21tdV9wYWdlX2ZhdWx0YCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYW5kIGBrdm1fbW11X3BhZ2VfZmF1bHRgLiBUaGV5J3JlIGNsZWFybHkgaW50ZW5kZWQgYXMgQVBJIGVudHJ5cG9pbnRzLCBidXQgYXJlbid0IGRlY2xhcmVkIGFzIHN0YXRpYyBvciBpbmxpbmVkLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdvbmRlciBhYm91dCB0aGVpciBzY29wZSDigJMgYXJlIHRoZXkgaW50ZW5kZWQgZm9yIGludGVybmFsIEtWTSB1c2UsIG9yIGFyZSB0aGV5IGV4cG9zZWQgZm9yIGV4dGVybmFsIG1vZHVsZXMgdG8gbGV2ZXJhZ2U/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZWlyIHZpc2liaWxpdHkuXG5cbkknbGwgc3RhcnQgd2l0aCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCBsaW5lIDYzMzYsIGl0J3MgZGVjbGFyZWQgYXMgYGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiguLi4pYCwgc28gaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBpZiBpdCdzIHByb3RlY3RlZCBzb21laG93LiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBjaGVjayB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIGZvY3VzIGFyb3VuZCBsaW5lIDY1NTAsIHNlZSBpZiBhbnkgdXNhZ2UgcGF0dGVybnMgZW1lcmdlIHRoYXQgY2FuIGdpdmUgbWUgYSBjbHVlIGFib3V0IHRoZSBpbnRlbmRlZCBhdWRpZW5jZS4gUGVyaGFwcyBzb21lIHN0YXRpYyBkZWNsYXJhdGlvbnMgb3IgbWFjcm9zIGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU4OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODo0Ni4zMTYzNDg4MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NTQwOlxcdFxcdFxcdFxcdF9fa3ZtX3NldF9yZmxhZ3ModmNwdSwgY3R4dC1cXHUwMDNlZWZsYWdzKTtcXG42NTQxOlxcdFxcdFxcdH1cXG42NTQyOlxcdFxcbjY1NDM6XFx0XFx0XFx0LypcXG42NTQ0OlxcdFxcdFxcdCAqIEZvciBTVEksIGludGVycnVwdHMgYXJlIHNoYWRvd2VkOyBzbyBLVk1fUkVRX0VWRU5UIHdpbGxcXG42NTQ1OlxcdFxcdFxcdCAqIGRvIG5vdGhpbmcsIGFuZCBpdCB3aWxsIGJlIHJlcXVlc3RlZCBhZ2FpbiBhcyBzb29uIGFzXFxuNjU0NjpcXHRcXHRcXHQgKiB0aGUgc2hhZG93IGV4cGlyZXMuICBCdXQgd2Ugc3RpbGwgbmVlZCB0byBjaGVjayBoZXJlLFxcbjY1NDc6XFx0XFx0XFx0ICogYmVjYXVzZSBQT1BGIGhhcyBubyBpbnRlcnJ1cHQgc2hhZG93LlxcbjY1NDg6XFx0XFx0XFx0ICovXFxuNjU0OTpcXHRcXHRcXHRpZiAodW5saWtlbHkoKGN0eHQtXFx1MDAzZWVmbGFncyBcXHUwMDI2IH5yZmxhZ3MpIFxcdTAwMjYgWDg2X0VGTEFHU19JRikpXFxuNjU1MDpcXHRcXHRcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfRVZFTlQsIHZjcHUpO1xcbjY1NTE6XFx0XFx0fSBlbHNlXFxuNjU1MjpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfdG9fdmNwdSA9IHRydWU7XFxuNjU1MzpcXHRcXG42NTU0OlxcdFxcdHJldHVybiByO1xcbjY1NTU6XFx0fVxcbjY1NTY6XFx0XFxuNjU1NzpcXHRpbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bGF0aW9uX3R5cGUpXFxuNjU1ODpcXHR7XFxuNjU1OTpcXHRcXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgZW11bGF0aW9uX3R5cGUsIE5VTEwsIDApO1xcbjY1NjA6XFx0fVxcbjY1NjE6XFx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2luc3RydWN0aW9uKTtcXG42NTYyOlxcdFxcbjY1NjM6XFx0aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uX2Zyb21fYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG42NTY0OlxcdFxcdFxcdFxcdFxcdFxcdHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcXG42NTY1OlxcdHtcXG42NTY2OlxcdFxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCAwLCBpbnNuLCBpbnNuX2xlbik7XFxuNjU2NzpcXHR9XFxuNjU2ODpcXHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25fZnJvbV9idWZmZXIpO1xcbjY1Njk6XFx0XFxuNjU3MDpcXHRzdGF0aWMgaW50IGNvbXBsZXRlX2Zhc3RfcGlvX291dF9wb3J0XzB4N2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbjY1NzE6XFx0e1xcbjY1NzI6XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5waW8uY291bnQgPSAwO1xcbjY1NzM6XFx0XFx0cmV0dXJuIDE7XFxuNjU3NDpcXHR9XFxuNjU3NTpcXHRcXG42NTc2OlxcdHN0YXRpYyBpbnQgY29tcGxldGVfZmFzdF9waW9fb3V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42NTc3OlxcdHtcXG42NTc4OlxcdFxcdHZjcHUtXFx1MDAzZWFyY2gucGlvLmNvdW50ID0gMDtcXG42NTc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyODo0Ni4zMTY4OTAyMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE0Mjg2ODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0geDg2IEVtdWxhdGlvbiBhbmQgTU1VIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCBzb21lIEtWTSBjb2RlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHg4NiBlbXVsYXRpb24gYW5kIHRoZSBNTVUuIEkgc2VlIHRoYXQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBpcyByaWdodCB0aGVyZSBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgYW5kIHRoZSBkZWNsYXJhdGlvbiBpcyBpbiB0aGUgaGVhZGVyLCBgeDg2LmhgLiBJdCdzIGNsZWFybHkgYSBjb3JlIGZ1bmN0aW9uLCBhcyBpdCdzIGRpcmVjdGx5IGNhbGxlZCB0aHJvdWdob3V0IEtWTS4gU2ltaWxhcmx5LCBga3ZtX21tdV9wYWdlX2ZhdWx0YCBsaXZlcyBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGRlY2xhcmVkIGluIGBtbXUuaGAuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb25maWdzIG9yIG90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucy4gQWxyaWdodCwgdGhlIHJlbGV2YW50IGNvbmZpZ3Mgc2VlbSB0byBiZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIGBWSVJUVUFMSVpBVElPTmAg4oCTIHN0YW5kYXJkIHN0dWZmIGZvciB2aXJ0dWFsaXphdGlvbiwgZXNwZWNpYWxseSB4ODYuXG5cbkJhc2VkIG9uIHRoZSBjb2RlIEkndmUgcmV2aWV3ZWQsIHRoaXMgYXJlYSBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0J3MgdG91Y2hpbmcgY29yZSBLVk0geDg2IE1NVSBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljLiBDcnVjaWFsbHksIGl0IHNlZW1zIHRvIGJlIGRlYWxpbmcgd2l0aCBzb21lIHRyaWNreSBpc3N1ZXMgYXJvdW5kIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKEdQQSkgY2FjaGluZyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgd2hlbiBwYWdlIGZhdWx0cyBvY2N1ci4gSXQncyBwcmV2ZW50aW5nIHRoZSBpbmNvcnJlY3QgcmV1c2Ugb2YgY2FjaGVkIEdQQXMgZm9yIHdyaXRlcywgYSBidWcgdGhhdCdzIHRpZWQgdG8gcGFnZSB0YWJsZSB3YWxrIGZhdWx0cyB2ZXJzdXMgZmluYWwgd3JpdGVzLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZpeC4gVGhlIGZhY3QgdGhhdCBpdOKAmXMgYWxsIHJlYWNoYWJsZSBpbiBRRU1VL0tWTSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbWFrZXMgaXQgYW4gZXZlbiBiZXR0ZXIgdGFyZ2V0LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUga2V5IHN5bWJvbHMgSSB3YW50IHRvIGZvY3VzIG9uOiBga3ZtX21tdV9wYWdlX2ZhdWx0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYC4gWWVwLCB0aG9zZSBhcmUgdGhlIG9uZXMuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncyBhZ2FpbiwganVzdCB0byBiZSBzdXJlLiBZZXAsIHN0aWxsIGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBhbmQgYFg4Nl9MT0NBTF9BUElDYC4gTWFrZXMgc2Vuc2UuIFRoZSBBUElDIGlzIHByZXR0eSBzdGFuZGFyZCBvbiB4ODYgc3lzdGVtcy5cblxuT2theSwgSSdtIHJlYWR5IHRvIGZvcm1hbGl6ZSBteSBmaW5kaW5ncyBhbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBhcmVhIGFuZCBrbm93IHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ5LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjUwLjQ1OTc2MTA2N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNjUzODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9tbXVfcGFnZV9mYXVsdFwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBhbmQgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY2FjaGVkIEdQQSBpcyBvbmx5IHJldXNlZCBmb3Igd3JpdGVzIGR1cmluZyBlbXVsYXRpb24gaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSBmaW5hbCB3cml0ZSBhY2Nlc3MgKEVNVUxUWVBFX1BGX1dSSVRFKSwgcHJldmVudGluZyB1bmF1dGhvcml6ZWQgZ3Vlc3QgbWVtb3J5IHdyaXRlcy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIFZNIGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IHBhZ2UgZmF1bHQgZW11bGF0aW9uLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9tbXVfcGFnZV9mYXVsdFwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBhbmQgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMuIEl0IGVuc3VyZXMgdGhhdCB0aGUgY2FjaGVkIEdQQSBpcyBvbmx5IHJldXNlZCBmb3Igd3JpdGVzIGR1cmluZyBlbXVsYXRpb24gaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSBmaW5hbCB3cml0ZSBhY2Nlc3MgKEVNVUxUWVBFX1BGX1dSSVRFKSwgcHJldmVudGluZyB1bmF1dGhvcml6ZWQgZ3Vlc3QgbWVtb3J5IHdyaXRlcy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIFZNIGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIGd1ZXN0IHBhZ2UgZmF1bHQgZW11bGF0aW9uLCBtYWtpbmcgdGhlbSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjg6NTAuNTQxNDI4MDcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjAyMjg4NTU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjUwLjU0MTg3NTY0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY2MDIyNDMzNDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBpc3N1ZSBpbiBLVk0gd2hlcmUgYSBmYXVsdGluZyBHUEEgd2FzIHJldXNlZCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSBoYXJkd2FyZSBwYWdlIGZhdWx0IHdhcyBhbiBhY3R1YWwgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaW5hbCBHUEEuIEl0IGludHJvZHVjZXMgYSBuZXcgYm9vbGVhbiBmaWVsZCBgZ3BhX3dyaXRlYCB0byBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGFuZCBhbiBlbXVsYXRpb24gZmxhZyBgRU1VTFRZUEVfUEZfV1JJVEVgLlxcblxcblRoZSBuZXcgZmllbGQgYGdwYV93cml0ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgYWxsb2NfZW11bGF0ZV9jdHh0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgY29weS10by11c2VyIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTUwY2E3YjhmMGE4NzJjOGZlODkwYTk4MmI5MzhiMzk2ZDc1NDhkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjA6Mjg6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaCBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5pbmRleCAzZTM3NWFmMTVjMDM1Li5hY2VjYTlkM2ExNmQzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbisrKyBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5AQCAtMzU0LDggKzM1NCw5IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IHtcbiBcdGJvb2wgaGF2ZV9leGNlcHRpb247XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247XG4gXG4tXHQvKiBHUEEgYXZhaWxhYmxlICovXG4rXHQvKiBHUEEgYW5kIHdyaXRlIGFjY2VzcyBzdXBwbGllZCBieSBhIGhhcmR3YXJlIHBhZ2UgZmF1bHQuICovXG4gXHRib29sIGdwYV9hdmFpbGFibGU7XG4rXHRib29sIGdwYV93cml0ZTtcbiBcdGdwYV90IGdwYV92YWw7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCAwNjRlY2MzM2I5MjY3Li4yMjM2OThjYmI5YmU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTY2MzIsNiArNjYzMiwxNiBAQCBpbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVyclxuIFx0XHRyZXR1cm4gcjtcbiBcbiBlbXVsYXRlOlxuK1x0LypcbitcdCAqIEEgd3JpdGUgZHVyaW5nIGEgZ3Vlc3QgcGFnZSB3YWxrIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgaW5zdHJ1Y3Rpb25cbitcdCAqIGl0c2VsZiB0byB3cml0ZSB0byB0aGUgZmF1bHRpbmcgR1BBLiAgUmVxdWlyZSBhIGZpbmFsIHdyaXRlIGFjY2Vzc1xuK1x0ICogYmVmb3JlIGFsbG93aW5nIHRoZSBlbXVsYXRvciB0byByZXVzZSB0aGUgR1BBIGZvciB3cml0ZXMuXG4rXHQgKi9cbitcdGlmIChkaXJlY3QgXHUwMDI2XHUwMDI2IChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9XUklURV9NQVNLKSBcdTAwMjZcdTAwMjZcbitcdCAgICAoZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfR1VFU1RfRklOQUxfTUFTSykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9HVUVTVF9QQUdFX01BU0spKVxuK1x0XHRlbXVsYXRpb25fdHlwZSB8PSBFTVVMVFlQRV9QRl9XUklURTtcbitcbiBcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcbiBcdFx0XHRcdCAgICAgICBpbnNuX2xlbik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uOGM0NmFhMzQ2OGMyZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTA4OCw4ICs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxuIFx0ICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmdcbiBcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxuIFx0ICogb2NjdXJyZWQuXG4rXHQgKlxuK1x0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXG4rXHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIGZpbmFsIHdyaXRlIGFjY2VzcztcbitcdCAqIG90aGVyd2lzZSwgcmVjaGVjayBwZXJtaXNzaW9ucyBmb3IgdGhlIGRlY29kZWQgYWNjZXNzLlxuIFx0ICovXG4tXHRpZiAoY3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlIFx1MDAyNlx1MDAyNiBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbitcdGlmIChjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgXHUwMDI2XHUwMDI2ICghd3JpdGUgfHwgY3R4dC1cdTAwM2VncGFfd3JpdGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cdTAwM2VncGFfdmFsIFx1MDAyNiB+UEFHRV9NQVNLKSkge1xuIFx0XHRncGEgPSBjdHh0LVx1MDAzZWdwYV92YWw7XG4gXHRcdHJldCA9IHZjcHVfaXNfbW1pb19ncGEodmNwdSwgYWRkciwgZ3BhLCB3cml0ZSk7XG5AQCAtNTkzOSw2ICs1OTQ0LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9lbXVsYXRlX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX3g4Nl9jYWxsKGdldF9jc19kYl9sX2JpdHMpKHZjcHUsIFx1MDAyNmNzX2RiLCBcdTAwMjZjc19sKTtcbiBcbiBcdGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSA9IGZhbHNlO1xuK1x0Y3R4dC1cdTAwM2VncGFfd3JpdGUgPSBmYWxzZTtcbiBcdGN0eHQtXHUwMDNlZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7XG4gXHRjdHh0LVx1MDAzZXRmID0gKGN0eHQtXHUwMDNlZWZsYWdzIFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xuIFxuQEAgLTY0NTUsNiArNjQ2MSw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4gXHRcdC8qIFdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBjcjIgY29udGFpbnMgYSBHVkEgb3IgbkdQQS4gKi9cbiBcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5tbXUtXHUwMDNlcm9vdF9yb2xlLmRpcmVjdCkge1xuIFx0XHRcdGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSA9IHRydWU7XG4rXHRcdFx0Y3R4dC1cdTAwM2VncGFfd3JpdGUgPSBlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEU7XG4gXHRcdFx0Y3R4dC1cdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjJkZDQ1NmFkM2UyZDYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxuQEAgLTQwNyw2ICs0MDcsOSBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2VcbiAgKlx0XHQgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuXG4gICpcbisgKiBFTVVMVFlQRV9QRl9XUklURSAtIFNldCB3aXRoIEVNVUxUWVBFX1BGIHdoZW4gaGFyZHdhcmUgcmVwb3J0cyBhIHdyaXRlIHRvIHRoZVxuKyAqXHRcdCAgICAgZmluYWwgR1BBLCBub3QgYW4gaW1wbGljaXQgZ3Vlc3QgcGFnZS10YWJsZSBhY2Nlc3MuXG4rICpcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XG4gICpcdFx0XHRcdCBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmdcbiAgKlx0XHRcdFx0IGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLlxuQEAgLTQ0NSw2ICs0NDgsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxIFx1MDAzY1x1MDAzYyA3KVxuICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1BcdCAgICAoMSBcdTAwM2NcdTAwM2MgOClcbiAjZGVmaW5lIEVNVUxUWVBFX1NLSVBfU09GVF9JTlRcdCAgICAoMSBcdTAwM2NcdTAwM2MgOSlcbisjZGVmaW5lIEVNVUxUWVBFX1BGX1dSSVRFXHQgICAgQklUKDEwKVxuIFxuICNkZWZpbmUgRU1VTFRZUEVfU0VUX1NPRlRfSU5UX1ZFQ1RPUih2KVx0KCh1MzIpKCh2KSBcdTAwMjYgMHhmZikgXHUwMDNjXHUwMDNjIDE2KVxuICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKVx0KCgoZSkgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI4OjUwLjU0MTg3NjUzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzYzMDUyNDQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEtNU0FOIFJpc2tzIGluIHRoZSBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gbmVlZHMgdG8gYmUgY29uY2VybmVkIGFib3V0LiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICpkb2luZyouXG5cbkFscmlnaHQsIEkgc2VlIHRoZSBjaGFuZ2VzOlxuXG4xLiAgV2UncmUgYWRkaW5nIGEgYm9vbGVhbiwgYGdwYV93cml0ZWAsIHRvIHRoZSBgeDg2X2VtdWxhdGVfY3R4dGAgc3RydWN0IGluIGBrdm1fZW11bGF0ZS5oYC4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuXG4yLiAgSW4gYG1tdS5jYCwgdGhlIGBrdm1fbW11X3BhZ2VfZmF1bHQoKWAgZnVuY3Rpb24gbm93IHNldHMgYGVtdWxhdGlvbl90eXBlIHw9IEVNVUxUWVBFX1BGX1dSSVRFO2AgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdHMgYW5kIHdyaXRlIG9wZXJhdGlvbnMuIFRoYXQncyBvdXIgZmxhZyBmb3IgYSB3cml0ZSBiZWluZyBhdHRlbXB0ZWQuXG4zLiAgYHg4Ni5jYCBzZWVtcyB0byBiZSB3aGVyZSB0aGUgY29yZSBsb2dpYyBpcyB1cGRhdGVkLiBXZSdyZSBtb2RpZnlpbmcgdGhlIGNvbmRpdGlvbiBpbiBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKClgIHRvIGluY2x1ZGUgYGN0eHQtXHUwMDNlZ3BhX3dyaXRlYC4gIENydWNpYWxseSwgYGluaXRfZW11bGF0ZV9jdHh0KClgIGV4cGxpY2l0bHkgKmluaXRpYWxpemVzKiBgY3R4dC1cdTAwM2VncGFfd3JpdGVgIHRvIGBmYWxzZWAsIGp1c3QgbGlrZSBgZ3BhX2F2YWlsYWJsZWAuIEdvb2QuIEFuZCBsYXRlciBpbiB0aGUgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKClgIGZ1bmN0aW9uIHdlIHNldCBgY3R4dC1cdTAwM2VncGFfd3JpdGUgPSBlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEU7YCBpZiB0aGUgTU1VIGlzIG9wZXJhdGluZyBpbiBhIGRpcmVjdCBtb2RlLlxuNC4gIEZpbmFsbHksIHRoZXJlJ3MgYSBuZXcgZGVmaW5pdGlvbiwgYEVNVUxUWVBFX1BGX1dSSVRFYCwgaW4gYHg4Ni5oYC4gVGhpcyBpcyB0aGUgYml0IGZsYWcgYmVpbmcgdXNlZCBmb3IgdGhlIHdyaXRlIGNvbmRpdGlvbi5cblxuU28sIGZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGUgYGdwYV93cml0ZWAgZmxhZyBpcyB1c2VkIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGZhdWx0IHdhcyBhIHdyaXRlIGFuZCBgaW5pdF9lbXVsYXRlX2N0eHRgIGVuc3VyZXMgdGhhdCB0aGUgZmxhZyBpcyBpbml0aWFsaXplZCB0byBmYWxzZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgaXQncyBkZXNpZ25lZCB0byB0cmFjayBhIHdyaXRlLCB3aGljaCB3aWxsIHByZXZlbnQgdW5pbml0aWFsaXplZCByZWFkcy4gV2UgaW5pdGlhbGl6ZSwgd2Ugc2V0IGl0LCBhbmQgd2UgY2hlY2sgaXQuIEhvd2V2ZXIsIHRoZSB0cnVlIHRlc3QgaXMgd2hldGhlciB0aGlzIGlzIHRoZSBvbmx5IHBhdGggYnkgd2hpY2ggZ3BhX3dyaXRlIGNhbiBiZSBzZXQuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IGBpbml0X2VtdWxhdGVfY3R4dGAgYW5kIGFueXdoZXJlIHRoYXQgYHg4Nl9lbXVsYXRlX2N0eHRgIGlzIHVzZWQuIEknbGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBlciB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgaW5pdGlhbGl6YXRpb24gb3IgdXNhZ2UgcG9pbnRzLCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgb25seSBwYXRoIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGludGVyYWN0aW9ucyBJJ20gbWlzc2luZy4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSBgZ3BhX3dyaXRlYCBjb3VsZCBiZSBwb3RlbnRpYWxseSByZWFkIHVuaW5pdGlhbGl6ZWQsIG9yIHdoZXJlIGl0IGdldHMgc2V0IGluIGFuIHVuZXhwZWN0ZWQgd2F5LiBJJ2xsIHNlYXJjaCBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYGluaXRfZW11bGF0ZV9jdHh0YCBhbmQgYWxzbyBsb29rIGZvciBhbnkgY2FsbHMgZGlyZWN0bHkgb24gYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI5OjA4LjE3MjQwMzA0NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0ODA5MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluaXRfZW11bGF0ZV9jdHh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NTkyMj1zdGF0aWMgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmFsbG9jX2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTkzOC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTkzOTpzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU5NDAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTU5Njc9dm9pZCBrdm1faW5qZWN0X3JlYWxtb2RlX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBpcnEsIGludCBpbmNfZWlwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU5NzEtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU5NzI6XFx0aW5pdF9lbXVsYXRlX2N0eHQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU5NzMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjMxOT1pbnQgeDg2X2RlY29kZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsYXRpb25fdHlwZSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02MzI0LVxcbmFyY2gveDg2L2t2bS94ODYuYzo2MzI1OlxcdGluaXRfZW11bGF0ZV9jdHh0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02MzI2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTkwNzY9aW50IGt2bV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiB0c3Nfc2VsZWN0b3IsIGludCBpZHRfaW5kZXgsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTEwMC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTEwMTpcXHRpbml0X2VtdWxhdGVfY3R4dCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTEwMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6MDguNDc3MjIzNjYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNjMxOTk3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB4ODYgRW11bGF0aW9uIENvbnRleHQgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgaG93IHRoZSBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGlzIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBNeSBndXQgZmVlbGluZyBpcyB0aGUgYW5zd2VycyBJIG5lZWQgYXJlIGx1cmtpbmcgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIHNvIEknbGwgc3RhcnQgdGhlcmUuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lcyA1OTIyIGFuZCA2NDU1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIGluaXRpYWwgc2V0dXAgaW4gZGV0YWlsLiBIb3BlZnVsbHksIHRob3NlIHNwb3RzIGNvbnRhaW4gdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3RydWN0dXJlIGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjE5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6MTMuNTQwNDI2MjU1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTkyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTkyMDpcXHR9XFxuNTkyMTpcXHRcXG41OTIyOlxcdHN0YXRpYyBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqYWxsb2NfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG41OTIzOlxcdHtcXG41OTI0OlxcdFxcdHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0O1xcbjU5MjU6XFx0XFxuNTkyNjpcXHRcXHRjdHh0ID0ga21lbV9jYWNoZV96YWxsb2MoeDg2X2VtdWxhdG9yX2NhY2hlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjU5Mjc6XFx0XFx0aWYgKCFjdHh0KSB7XFxuNTkyODpcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBhbGxvY2F0ZSB2Y3B1J3MgZW11bGF0b3JcXFxcblxcXCIpO1xcbjU5Mjk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuNTkzMDpcXHRcXHR9XFxuNTkzMTpcXHRcXG41OTMyOlxcdFxcdGN0eHQtXFx1MDAzZXZjcHUgPSB2Y3B1O1xcbjU5MzM6XFx0XFx0Y3R4dC1cXHUwMDNlb3BzID0gXFx1MDAyNmVtdWxhdGVfb3BzO1xcbjU5MzQ6XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQgPSBjdHh0O1xcbjU5MzU6XFx0XFxuNTkzNjpcXHRcXHRyZXR1cm4gY3R4dDtcXG41OTM3OlxcdH1cXG41OTM4OlxcdFxcbjU5Mzk6XFx0c3RhdGljIHZvaWQgaW5pdF9lbXVsYXRlX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbjU5NDA6XFx0e1xcbjU5NDE6XFx0XFx0c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQgPSB2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfY3R4dDtcXG41OTQyOlxcdFxcdGludCBjc19kYiwgY3NfbDtcXG41OTQzOlxcdFxcbjU5NDQ6XFx0XFx0a3ZtX3g4Nl9jYWxsKGdldF9jc19kYl9sX2JpdHMpKHZjcHUsIFxcdTAwMjZjc19kYiwgXFx1MDAyNmNzX2wpO1xcbjU5NDU6XFx0XFxuNTk0NjpcXHRcXHRjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XFxuNTk0NzpcXHRcXHRjdHh0LVxcdTAwM2VncGFfd3JpdGUgPSBmYWxzZTtcXG41OTQ4OlxcdFxcdGN0eHQtXFx1MDAzZWVmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpO1xcbjU5NDk6XFx0XFx0Y3R4dC1cXHUwMDNldGYgPSAoY3R4dC1cXHUwMDNlZWZsYWdzIFxcdTAwMjYgWDg2X0VGTEFHU19URikgIT0gMDtcXG41OTUwOlxcdFxcbjU5NTE6XFx0XFx0Y3R4dC1cXHUwMDNlZWlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpO1xcbjU5NTI6XFx0XFx0Y3R4dC1cXHUwMDNlbW9kZSA9ICghaXNfcHJvdG1vZGUodmNwdSkpXFx0XFx0PyBYODZFTVVMX01PREVfUkVBTCA6XFxuNTk1MzpcXHRcXHRcXHQgICAgIChjdHh0LVxcdTAwM2VlZmxhZ3MgXFx1MDAyNiBYODZfRUZMQUdTX1ZNKVxcdD8gWDg2RU1VTF9NT0RFX1ZNODYgOlxcbjU5NTQ6XFx0XFx0XFx0ICAgICAoY3NfbCBcXHUwMDI2XFx1MDAyNiBpc19sb25nX21vZGUodmNwdSkpXFx0PyBYODZFTVVMX01PREVfUFJPVDY0IDpcXG41OTU1OlxcdFxcdFxcdCAgICAgY3NfZGJcXHRcXHRcXHRcXHQ/IFg4NkVNVUxfTU9ERV9QUk9UMzIgOlxcbjU5NTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBYODZFTVVMX01PREVfUFJPVDE2O1xcbjU5NTc6XFx0XFx0Y3R4dC1cXHUwMDNlaW50ZXJydXB0aWJpbGl0eSA9IDA7XFxuNTk1ODpcXHRcXHRjdHh0LVxcdTAwM2VoYXZlX2V4Y2VwdGlvbiA9IGZhbHNlO1xcbjU5NTk6XFx0XFx0Y3R4dC1cXHUwMDNlZXhjZXB0aW9uLnZlY3RvciA9IC0xO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDoyOToxMy41NDA5Njc3MTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2Mjk2MDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBLVk0ncyB4ODYgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBTcGVjaWZpY2FsbHksIEknbSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgNjQ1MC4gSSdtIGFzc3VtaW5nIHRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBJJ20gaW50ZXJlc3RlZCBpbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9ucyBhbmQgc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwsIHRoYXQgZmlsZSBpcyBhbG1vc3QgY2VydGFpbmx5IHdoZXJlIHRoZXkndmUgaW1wbGVtZW50ZWQgdGhlIHg4Ni1zcGVjaWZpYyBLVk0gZXh0ZW5zaW9ucy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBpbnRlcmFjdGlvbiBsb2dpYyBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgaG9zdCBpbiB0aGlzIGFyZWEuIFByb2JhYmx5IHJlbGF0ZWQgdG8gdmlydHVhbGl6YXRpb24gb2YgQ1BVIHJlZ2lzdGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6MTYuMDAzOTMwMTM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjQ0MDpcXHRcXHQgKiB3cml0aW5nIGluc3RydWN0aW9uLCB0cnkgdG8gdW5wcm90ZWN0IHRoZSBnZm4sIGkuZS4gemFwIHNoYWRvdyBwYWdlcyxcXG42NDQxOlxcdFxcdCAqIGFuZCByZXRyeSB0aGUgaW5zdHJ1Y3Rpb24sIGFzIHRoZSB2Q1BVIGlzIGxpa2VseSBubyBsb25nZXIgdXNpbmcgdGhlXFxuNjQ0MjpcXHRcXHQgKiBnZm4gYXMgYSBwYWdlIHRhYmxlLlxcbjY0NDM6XFx0XFx0ICovXFxuNjQ0NDpcXHRcXHRpZiAoKGVtdWxhdGlvbl90eXBlIFxcdTAwMjYgRU1VTFRZUEVfQUxMT1dfUkVUUllfUEYpIFxcdTAwMjZcXHUwMDI2XFxuNjQ0NTpcXHRcXHQgICAgIXg4Nl9wYWdlX3RhYmxlX3dyaXRpbmdfaW5zbihjdHh0KSBcXHUwMDI2XFx1MDAyNlxcbjY0NDY6XFx0XFx0ICAgIGt2bV9tbXVfdW5wcm90ZWN0X2dmbl9hbmRfcmV0cnkodmNwdSwgY3IyX29yX2dwYSkpXFxuNjQ0NzpcXHRcXHRcXHRyZXR1cm4gMTtcXG42NDQ4OlxcdFxcbjY0NDk6XFx0XFx0LyogdGhpcyBpcyBuZWVkZWQgZm9yIHZtd2FyZSBiYWNrZG9vciBpbnRlcmZhY2UgdG8gd29yayBzaW5jZSBpdFxcbjY0NTA6XFx0XFx0ICAgY2hhbmdlcyByZWdpc3RlcnMgdmFsdWVzICBkdXJpbmcgSU8gb3BlcmF0aW9uICovXFxuNjQ1MTpcXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSkge1xcbjY0NTI6XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSA9IGZhbHNlO1xcbjY0NTM6XFx0XFx0XFx0ZW11bGF0b3JfaW52YWxpZGF0ZV9yZWdpc3Rlcl9jYWNoZShjdHh0KTtcXG42NDU0OlxcdFxcdH1cXG42NDU1OlxcdFxcbjY0NTY6XFx0cmVzdGFydDpcXG42NDU3OlxcdFxcdGlmIChlbXVsYXRpb25fdHlwZSBcXHUwMDI2IEVNVUxUWVBFX1BGKSB7XFxuNjQ1ODpcXHRcXHRcXHQvKiBTYXZlIHRoZSBmYXVsdGluZyBHUEEgKGNyMikgaW4gdGhlIGFkZHJlc3MgZmllbGQgKi9cXG42NDU5OlxcdFxcdFxcdGN0eHQtXFx1MDAzZWV4Y2VwdGlvbi5hZGRyZXNzID0gY3IyX29yX2dwYTtcXG42NDYwOlxcdFxcbjY0NjE6XFx0XFx0XFx0LyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqL1xcbjY0NjI6XFx0XFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gubW11LVxcdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XFxuNjQ2MzpcXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlID0gdHJ1ZTtcXG42NDY0OlxcdFxcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV93cml0ZSA9IGVtdWxhdGlvbl90eXBlIFxcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEU7XFxuNjQ2NTpcXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcXG42NDY2OlxcdFxcdFxcdH1cXG42NDY3OlxcdFxcdH0gZWxzZSB7XFxuNjQ2ODpcXHRcXHRcXHQvKiBTYW5pdGl6ZSB0aGUgYWRkcmVzcyBvdXQgb2YgYW4gYWJ1bmRhbmNlIG9mIHBhcmFub2lhLiAqL1xcbjY0Njk6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZXhjZXB0aW9uLmFkZHJlc3MgPSAwO1xcbjY0NzA6XFx0XFx0fVxcbjY0NzE6XFx0XFxuNjQ3MjpcXHRcXHQvKlxcbjY0NzM6XFx0XFx0ICogQ2hlY2sgTDEncyBpbnN0cnVjdGlvbiBpbnRlcmNlcHRzIHdoZW4gZW11bGF0aW5nIGluc3RydWN0aW9ucyBmb3JcXG42NDc0OlxcdFxcdCAqIEwyLCB1bmxlc3MgS1ZNIGlzIHJlLWVtdWxhdGluZyBhIHByZXZpb3VzbHkgZGVjb2RlZCBpbnN0cnVjdGlvbixcXG42NDc1OlxcdFxcdCAqIGUuZy4gdG8gY29tcGxldGUgdXNlcnNwYWNlIEkvTywgaW4gd2hpY2ggY2FzZSBLVk0gaGFzIGFscmVhZHlcXG42NDc2OlxcdFxcdCAqIGNoZWNrZWQgdGhlIGludGVyY2VwdHMuXFxuNjQ3NzpcXHRcXHQgKi9cXG42NDc4OlxcdFxcdHIgPSB4ODZfZW11bGF0ZV9pbnNuKGN0eHQsIGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG42NDc5OlxcdFxcdFxcdFxcdFxcdCAgICEoZW11bGF0aW9uX3R5cGUgXFx1MDAyNiBFTVVMVFlQRV9OT19ERUNPREUpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6MTYuMDA0NTA5MTc2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjMyMjIxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIE1NVSBDb2RlKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBLVk0gYW5kIHNwZWNpZmljYWxseSB0aGUgTU1VIGltcGxlbWVudGF0aW9uLiBJJ20gdGhpbmtpbmcsIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nICpyZWFsbHkqIHdvcmtzLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgZmlsZS4gSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgNjYzMi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdmFudGFnZSBwb2ludCB0byBnZXQgdG8gZ3JpcHMgd2l0aCB3aGF0J3MgZ29pbmcgb24gYXQgYSBkZXRhaWxlZCBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIE1NVSdzIGJlaGF2aW9yLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0NSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6MTguMDY3NzM0Njg3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY2MTU6XFx0XFxuNjYxNjpcXHRcXHRpZiAociA9PSBSRVRfUEZfRklYRUQpXFxuNjYxNzpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VzdGF0LnBmX2ZpeGVkKys7XFxuNjYxODpcXHRcXHRlbHNlIGlmIChyID09IFJFVF9QRl9FTVVMQVRFKVxcbjY2MTk6XFx0XFx0XFx0dmNwdS1cXHUwMDNlc3RhdC5wZl9lbXVsYXRlKys7XFxuNjYyMDpcXHRcXHRlbHNlIGlmIChyID09IFJFVF9QRl9TUFVSSU9VUylcXG42NjIxOlxcdFxcdFxcdHZjcHUtXFx1MDAzZXN0YXQucGZfc3B1cmlvdXMrKztcXG42NjIyOlxcdFxcbjY2MjM6XFx0XFx0LypcXG42NjI0OlxcdFxcdCAqIE5vbmUgb2YgaGFuZGxlX21taW9fcGFnZV9mYXVsdCgpLCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSwgb3JcXG42NjI1OlxcdFxcdCAqIGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdCgpIHJldHVybiBSRVRfUEZfQ09OVElOVUUuXFxuNjYyNjpcXHRcXHQgKiBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSBvbmx5IHVzZXMgUkVUX1BGX0NPTlRJTlVFIGludGVybmFsbHkgdG9cXG42NjI3OlxcdFxcdCAqIGluZGljYXRlIGNvbnRpbnVpbmcgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgdW50aWwgdG8gdGhlIGZpbmFsXFxuNjYyODpcXHRcXHQgKiBwYWdlIHRhYmxlIG1hcHBpbmcgcGhhc2UuXFxuNjYyOTpcXHRcXHQgKi9cXG42NjMwOlxcdFxcdFdBUk5fT05fT05DRShyID09IFJFVF9QRl9DT05USU5VRSk7XFxuNjYzMTpcXHRcXHRpZiAociAhPSBSRVRfUEZfRU1VTEFURSlcXG42NjMyOlxcdFxcdFxcdHJldHVybiByO1xcbjY2MzM6XFx0XFxuNjYzNDpcXHRlbXVsYXRlOlxcbjY2MzU6XFx0XFx0LypcXG42NjM2OlxcdFxcdCAqIEEgd3JpdGUgZHVyaW5nIGEgZ3Vlc3QgcGFnZSB3YWxrIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgaW5zdHJ1Y3Rpb25cXG42NjM3OlxcdFxcdCAqIGl0c2VsZiB0byB3cml0ZSB0byB0aGUgZmF1bHRpbmcgR1BBLiAgUmVxdWlyZSBhIGZpbmFsIHdyaXRlIGFjY2Vzc1xcbjY2Mzg6XFx0XFx0ICogYmVmb3JlIGFsbG93aW5nIHRoZSBlbXVsYXRvciB0byByZXVzZSB0aGUgR1BBIGZvciB3cml0ZXMuXFxuNjYzOTpcXHRcXHQgKi9cXG42NjQwOlxcdFxcdGlmIChkaXJlY3QgXFx1MDAyNlxcdTAwMjYgKGVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9XUklURV9NQVNLKSBcXHUwMDI2XFx1MDAyNlxcbjY2NDE6XFx0XFx0ICAgIChlcnJvcl9jb2RlIFxcdTAwMjYgUEZFUlJfR1VFU1RfRklOQUxfTUFTSykgXFx1MDAyNlxcdTAwMjZcXG42NjQyOlxcdFxcdCAgICAhKGVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9HVUVTVF9QQUdFX01BU0spKVxcbjY2NDM6XFx0XFx0XFx0ZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7XFxuNjY0NDpcXHRcXG42NjQ1OlxcdFxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcXG42NjQ2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnNuX2xlbik7XFxuNjY0NzpcXHR9XFxuNjY0ODpcXHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX21tdV9wYWdlX2ZhdWx0KTtcXG42NjQ5OlxcdFxcbjY2NTA6XFx0dm9pZCBrdm1fbW11X3ByaW50X3NwdGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCBjb25zdCBjaGFyICptc2cpXFxuNjY1MTpcXHR7XFxuNjY1MjpcXHRcXHR1NjQgc3B0ZXNbUFQ2NF9ST09UX01BWF9MRVZFTCArIDFdO1xcbjY2NTM6XFx0XFx0aW50IHJvb3RfbGV2ZWwsIGxlYWYsIGxldmVsO1xcbjY2NTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI5OjE4LjA2ODE5NDI1N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDkxMDcxMDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZSBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCBmdW5jdGlvbiB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuY2AuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgd2UgbWlnaHQgZmluZCBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzLCB1bmRvdWJ0ZWRseSwgYSBjb3JlIGNvbXBvbmVudCBvZiBob3cgdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBtZW1vcnkgb3BlcmF0aW9ucyBhdCB0aGUgc2luZ2xlLXBhZ2UgbGV2ZWwgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIGdyaXR0eSBkZXRhaWxzIG9mIGVtdWxhdGluZyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gYSBndWVzdCdzIG1lbW9yeSBzcGFjZSByZXNpZGUuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHRyYXBwaW5nIGFuZCBoYW5kbGluZyBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMsIHBhZ2UgZmF1bHRzLCBvciBwb3RlbnRpYWxseSBldmVuIE1NSU8gKE1lbW9yeS1NYXBwZWQgSS9PKSBzY2VuYXJpb3MsIGRlcGVuZGluZyBvbiBob3cgaXQncyBpbXBsZW1lbnRlZC4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHVzZSBvZiBhbnkgc3BlY2lmaWMgeDg2IGluc3RydWN0aW9ucyBvciBmZWF0dXJlcyB0aGF0IGl0IGxldmVyYWdlcyBmb3IgZWZmaWNpZW5jeSBhbmQgY29ycmVjdG5lc3MuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IGl0IHZhbGlkYXRlcyB0aGUgZ3Vlc3QncyBwaHlzaWNhbCBhZGRyZXNzLCBoYW5kbGVzIHBvdGVudGlhbCB0cmFuc2xhdGlvbiBpc3N1ZXMsIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgaG9zdCdzIG1lbW9yeSB0byBwZXJmb3JtIHRoZSBkYXRhIHRyYW5zZmVyLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHVzZWQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyBjb25jdXJyZW50IGFjY2VzcywgYW5kIHdoYXQgdGhlIGVycm9yIGhhbmRsaW5nIGxvb2tzIGxpa2Ugd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZy4gSSB3YW50IHRvIHNlZSBpZiBhbnkgb3B0aW1pemF0aW9ucyBsaWtlIHBhZ2UgY2FjaGluZyBhcmUgaW1wbGVtZW50ZWQgaGVyZSwgYmVjYXVzZSwgaWYgdGhleSBhcmUsIHRoYXQncyB3aGF0IHdpbGwgYmUga2V5LiBUaGlzIGlzIHRoZSBoZWFydCBvZiBtZW1vcnkgZW11bGF0aW9uLCBzbyB0aGUgZGV2aWwgd2lsbCBiZSBpbiB0aGUgZGV0YWlscy4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBsb3RzIHRvIHVucmF2ZWwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwOTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI5OjI4Ljk3ODkwODA3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTA1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwODAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUwODA6XFx0XFx0aW50IGhhbmRsZWQsIHJldDtcXG41MDgxOlxcdFxcdGJvb2wgd3JpdGUgPSBvcHMtXFx1MDAzZXdyaXRlO1xcbjUwODI6XFx0XFx0c3RydWN0IGt2bV9tbWlvX2ZyYWdtZW50ICpmcmFnO1xcbjUwODM6XFx0XFx0c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQgPSB2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfY3R4dDtcXG41MDg0OlxcdFxcbjUwODU6XFx0XFx0LypcXG41MDg2OlxcdFxcdCAqIElmIHRoZSBleGl0IHdhcyBkdWUgdG8gYSBOUEYgd2UgbWF5IGFscmVhZHkgaGF2ZSBhIEdQQS5cXG41MDg3OlxcdFxcdCAqIElmIHRoZSBHUEEgaXMgcHJlc2VudCwgdXNlIGl0IHRvIGF2b2lkIHRoZSBHVkEgdG8gR1BBIHRhYmxlIHdhbGsuXFxuNTA4ODpcXHRcXHQgKiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIG9uIHN0cmluZyBvcGVyYXRpb25zIHNpbmNlIHN0cmluZ1xcbjUwODk6XFx0XFx0ICogb3BlcmF0aW9uIHVzaW5nIHJlcCB3aWxsIG9ubHkgaGF2ZSB0aGUgaW5pdGlhbCBHUEEgZnJvbSB0aGUgTlBGXFxuNTA5MDpcXHRcXHQgKiBvY2N1cnJlZC5cXG41MDkxOlxcdFxcdCAqXFxuNTA5MjpcXHRcXHQgKiBUaGUgZ3Vlc3QgbWF5IGhhdmUgY2hhbmdlZCB0aGUgaW5zdHJ1Y3Rpb24gc2luY2UgdGhlIGZhdWx0LiAgUmV1c2VcXG41MDkzOlxcdFxcdCAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgZmluYWwgd3JpdGUgYWNjZXNzO1xcbjUwOTQ6XFx0XFx0ICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuXFxuNTA5NTpcXHRcXHQgKi9cXG41MDk2OlxcdFxcdGlmIChjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlIFxcdTAwMjZcXHUwMDI2ICghd3JpdGUgfHwgY3R4dC1cXHUwMDNlZ3BhX3dyaXRlKSBcXHUwMDI2XFx1MDAyNlxcbjUwOTc6XFx0XFx0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFxcdTAwMjZcXHUwMDI2XFxuNTA5ODpcXHRcXHQgICAgKGFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cXHUwMDNlZ3BhX3ZhbCBcXHUwMDI2IH5QQUdFX01BU0spKSB7XFxuNTA5OTpcXHRcXHRcXHRncGEgPSBjdHh0LVxcdTAwM2VncGFfdmFsO1xcbjUxMDA6XFx0XFx0XFx0cmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTtcXG41MTAxOlxcdFxcdH0gZWxzZSB7XFxuNTEwMjpcXHRcXHRcXHRyZXQgPSB2Y3B1X21taW9fZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyLCBcXHUwMDI2Z3BhLCBleGNlcHRpb24sIHdyaXRlKTtcXG41MTAzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjUxMDQ6XFx0XFx0XFx0XFx0cmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUO1xcbjUxMDU6XFx0XFx0fVxcbjUxMDY6XFx0XFxuNTEwNzpcXHRcXHQvKlxcbjUxMDg6XFx0XFx0ICogSWYgdGhlIG1lbW9yeSBpcyBub3QgX2tub3duXyB0byBiZSBlbXVsYXRlZCBNTUlPLCBhdHRlbXB0IHRvIGFjY2Vzc1xcbjUxMDk6XFx0XFx0ICogZ3Vlc3QgbWVtb3J5LiAgSWYgYWNjZXNzaW5nIGd1ZXN0IG1lbW9yeSBmYWlscywgZS5nLiBiZWNhdXNlIHRoZXJlJ3NcXG41MTEwOlxcdFxcdCAqIG5vIG1lbXNsb3QsIHRoZW4gaGFuZGxlIHRoZSBhY2Nlc3MgYXMgTU1JTy4gIE5vdGUsIHRyZWF0aW5nIHRoZVxcbjUxMTE6XFx0XFx0ICogYWNjZXNzIGFzIGVtdWxhdGVkIE1NSU8gaXMgdGVjaG5pY2FsbHkgd3JvbmcgaWYgdGhlcmUgaXMgYSBtZW1zbG90LFxcbjUxMTI6XFx0XFx0ICogaS5lLiBpZiBhY2Nlc3NpbmcgaG9zdCB1c2VyIG1lbW9yeSBmYWlsZWQsIGJ1dCB0aGlzIGhhcyBiZWVuIEtWTSdzXFxuNTExMzpcXHRcXHQgKiBoaXN0b3JpY2FsIEFCSSBmb3IgZGVjYWRlcy5cXG41MTE0OlxcdFxcdCAqL1xcbjUxMTU6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VyZWFkX3dyaXRlX2d1ZXN0KHZjcHUsIGdwYSwgdmFsLCBieXRlcykpXFxuNTExNjpcXHRcXHRcXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcXG41MTE3OlxcdFxcbjUxMTg6XFx0XFx0LypcXG41MTE5OlxcdFxcdCAqIEF0dGVtcHQgdG8gaGFuZGxlIGVtdWxhdGVkIE1NSU8gd2l0aGluIHRoZSBrZXJuZWwsIGUuZy4gZm9yIGFjY2Vzc2VzXFxuNTEyMDpcXHRcXHQgKiB0byBhbiBpbi1rZXJuZWwgbG9jYWwgb3IgSS9PIEFQSUMsIG9yIHRvIGFuIGlvZXZlbnRmZCByYW5nZSBhdHRhY2hlZFxcbjUxMjE6XFx0XFx0ICogdG8gTU1JTyBidXMuICBJZiB0aGUgYWNjZXNzIGlzbid0IGZ1bGx5IHJlc29sdmVkLCBpbnNlcnQgYW4gTU1JT1xcbjUxMjI6XFx0XFx0ICogZnJhZ21lbnQgd2l0aCB0aGUgcmVsZXZhbnQgZGV0YWlscy5cXG41MTIzOlxcdFxcdCAqL1xcbjUxMjQ6XFx0XFx0aGFuZGxlZCA9IG9wcy1cXHUwMDNlcmVhZF93cml0ZV9tbWlvKHZjcHUsIGdwYSwgYnl0ZXMsIHZhbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjI5OjI4Ljk3OTQ2MTQ1NloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzU4NDgyOTc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHBhdGNoIHJlcXVpcmVzIGBOZWVkc0tNU0FOPXRydWVgLiBJIG5lZWQgdG8gc3lzdGVtYXRpY2FsbHkgZXZhbHVhdGUgdGhlIGNvZGUgYWdhaW5zdCB0aGUgZG9jdW1lbnRlZCBjcml0ZXJpYSBmb3IgS01TQU4gZW5hYmxlbWVudCwga2VlcGluZyBpbiBtaW5kIHRoYXQgdGhlIHByaW1hcnkgcmlza3MgS01TQU4gZmxhZ3MgYXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxuXG5GaXJzdCwgSSB3ZW50IHRocm91Z2ggdGhlIGNyaXRlcmlhOiBLTVNBTiBpcyByZWxldmFudCBpZiB0aGUgcGF0Y2ggdG91Y2hlcyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZHMsIGludHJvZHVjZXMgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGludm9sdmVzIGFsbG9jYXRpbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXIsIG9yIG1vZGlmaWVzIGJvdW5kcyBjaGVja3MgaW4gd2F5cyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIE90aGVyd2lzZSwgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd291bGQgc3VmZmljZS5cblxuTm93LCBsZXQncyBhbmFseXplIHRoZSBwYXRjaCBpdHNlbGYuIEkndmUgZ290IGEgbmV3IGJvb2xlYW4gdmFyaWFibGUsIGBncGFfd3JpdGVgLCBpbnRyb2R1Y2VkIGluIGB4ODZfZW11bGF0ZV9jdHh0YC4gSW1tZWRpYXRlbHksIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBleHBsaWNpdGx5IHplcm9lcyB0aGlzIHdpdGggYGN0eHQtXHUwMDNlZ3BhX3dyaXRlID0gZmFsc2VgLiBGdXJ0aGVybW9yZSwgdGhlIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZ3VhcmFudGVlZCB6ZXJvZWQuIExhdGVyIGluIHRoZSBjb2RlLCBgY3R4dC1cdTAwM2VncGFfd3JpdGVgIGlzIGNvbmRpdGlvbmFsbHkgc2V0IHRvIGEgdmFsdWUgZGVyaXZlZCBmcm9tIGBlbXVsYXRpb25fdHlwZWAgaW4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKClgLCBidXQgKm9ubHkqIGlmIGBjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGVgIGlzIGFsc28gdHJ1ZS4gVGhlIHJlYWQgaW4gYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSgpYCBpcyBzaW1pbGFybHkgY29uZGl0aW9uYWwgb24gYGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZWAsIGFuZCB0aGlzIHZhcmlhYmxlIGlzICphbHdheXMqIGluaXRpYWxpemVkLiBJIHNlZSBubyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gaW5mb3JtYXRpb24gbGVha3MsIGFuZCBubyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIG5ldyBzdHJ1Y3R1cmUgbWVtYmVyIGFuZCBhbGwgZXhpc3RpbmcgbWVtYmVycyBhcmUgaW5pdGlhbGl6ZWQgKGVpdGhlciBleHBsaWNpdGx5IG9yIHZpYSB0aGUgYWxsb2NhdGlvbiksIGFuZCB0aGVyZSdzIG5vIHdheSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBgTmVlZHNLTVNBTmAgY2xlYXJseSBzaG91bGQgYmUgYGZhbHNlYC5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ3ZlIGNoZWNrZWQgYWxsIHRoZSBtb2RpZmllZCBmaWxlczogYGFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oYCAoYWRkaW5nIGBncGFfd3JpdGVgKSwgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIChzZXR0aW5nIGBFTVVMVFlQRV9QRl9XUklURWApLCBgYXJjaC94ODYva3ZtL3g4Ni5jYCAoaW5pdGlhbGl6aW5nIGFuZCB1c2luZyBgY3R4dC1cdTAwM2VncGFfd3JpdGVgKSwgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmhgIChkZWZpbmluZyBgRU1VTFRZUEVfUEZfV1JJVEVgKS4gRXZlcnl0aGluZyBpcyBwcmlzdGluZTsgdGhlcmUgYXJlIG5vIHJpc2tzIHdoYXRzb2V2ZXIuXG5cblRpbWUgdG8gZmVlZCB0aGlzIHJlYXNvbmluZyBpbnRvIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjcsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6Mjk6NTYuNTY0MjkzMjQ4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBpc3N1ZSBpbiBLVk0gd2hlcmUgYSBmYXVsdGluZyBHUEEgd2FzIHJldXNlZCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSBoYXJkd2FyZSBwYWdlIGZhdWx0IHdhcyBhbiBhY3R1YWwgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaW5hbCBHUEEuIEl0IGludHJvZHVjZXMgYSBuZXcgYm9vbGVhbiBmaWVsZCBgZ3BhX3dyaXRlYCB0byBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGFuZCBhbiBlbXVsYXRpb24gZmxhZyBgRU1VTFRZUEVfUEZfV1JJVEVgLlxcblxcblRoZSBuZXcgZmllbGQgYGdwYV93cml0ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgYWxsb2NfZW11bGF0ZV9jdHh0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgY29weS10by11c2VyIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBpc3N1ZSBpbiBLVk0gd2hlcmUgYSBmYXVsdGluZyBHUEEgd2FzIHJldXNlZCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSBoYXJkd2FyZSBwYWdlIGZhdWx0IHdhcyBhbiBhY3R1YWwgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaW5hbCBHUEEuIEl0IGludHJvZHVjZXMgYSBuZXcgYm9vbGVhbiBmaWVsZCBgZ3BhX3dyaXRlYCB0byBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgIGFuZCBhbiBlbXVsYXRpb24gZmxhZyBgRU1VTFRZUEVfUEZfV1JJVEVgLlxcblxcblRoZSBuZXcgZmllbGQgYGdwYV93cml0ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBpbiBgYWxsb2NfZW11bGF0ZV9jdHh0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgY29weS10by11c2VyIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcsIGFuZCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowjzk5p[1] Phase: Succeeded StartedAt: 2026-08-28 20:30:07 +0000 UTC FinishedAt: 2026-08-28 20:30:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-28 20:30:07 +0000 UTC FinishedAt: 2026-08-28 20:30:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2] Phase: Succeeded StartedAt: 2026-08-28 20:30:07 +0000 UTC FinishedAt: 2026-08-29 00:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-28 20:30:07 +0000 UTC FinishedAt: 2026-08-29 00:09:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-28 20:30:07 +0000 UTC FinishedAt: 2026-08-28 20:30:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-28 20:30:07 +0000 UTC FinishedAt: 2026-08-28 20:30:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowjzk5p/series-workflowjzk5p-convert-artifact-1284926010/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-28 20:30:17 +0000 UTC FinishedAt: 2026-08-28 20:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-28 20:30:17 +0000 UTC FinishedAt: 2026-08-28 20:46:15 +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:*68459ceb-f081-4c57-90cd-aa74e43eb9d8,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-workflowjzk5p/series-workflowjzk5p-convert-artifact-1284926010/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": "42610659-61d4-4cb4-8487-a82133cbefb4", "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-workflowjzk5p/series-workflowjzk5p-build-action-2262015976/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-28 20:30:17 +0000 UTC FinishedAt: 2026-08-28 20:46:05 +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:*68459ceb-f081-4c57-90cd-aa74e43eb9d8,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-workflowjzk5p/series-workflowjzk5p-convert-artifact-1284926010/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": "42610659-61d4-4cb4-8487-a82133cbefb4", "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-workflowjzk5p/series-workflowjzk5p-build-action-2262015976/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-28 20:46:15 +0000 UTC FinishedAt: 2026-08-28 20:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-28 20:46:15 +0000 UTC FinishedAt: 2026-08-28 20:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-28 20:46:15 +0000 UTC FinishedAt: 2026-08-28 20:46:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-28 20:46:15 +0000 UTC FinishedAt: 2026-08-28 20:46:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowjzk5p/series-workflowjzk5p-convert-artifact-3447242901/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-28 20:46:26 +0000 UTC FinishedAt: 2026-08-28 20:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-28 20:46:26 +0000 UTC FinishedAt: 2026-08-28 20:48:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*42610659-61d4-4cb4-8487-a82133cbefb4,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-workflowjzk5p/series-workflowjzk5p-build-action-2262015976/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-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-28 20:48:24 +0000 UTC FinishedAt: 2026-08-28 20:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-28 20:48:24 +0000 UTC FinishedAt: 2026-08-28 20:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-28 20:48:24 +0000 UTC FinishedAt: 2026-08-28 21:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-28 20:48:24 +0000 UTC FinishedAt: 2026-08-28 21:04:33 +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:*68459ceb-f081-4c57-90cd-aa74e43eb9d8,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-workflowjzk5p/series-workflowjzk5p-convert-artifact-3447242901/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": "ca8331ed-88ac-4825-b46c-061994a7211e", "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-workflowjzk5p/series-workflowjzk5p-build-action-3561449249/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-28 20:48:24 +0000 UTC FinishedAt: 2026-08-28 21:04:23 +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:*68459ceb-f081-4c57-90cd-aa74e43eb9d8,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-workflowjzk5p/series-workflowjzk5p-convert-artifact-3447242901/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": "ca8331ed-88ac-4825-b46c-061994a7211e", "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-workflowjzk5p/series-workflowjzk5p-build-action-3561449249/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-28 21:04:33 +0000 UTC FinishedAt: 2026-08-28 21:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-28 21:04:33 +0000 UTC FinishedAt: 2026-08-28 21:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-28 21:04:33 +0000 UTC FinishedAt: 2026-08-28 21:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-28 21:04:33 +0000 UTC FinishedAt: 2026-08-28 21:06:31 +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:*ca8331ed-88ac-4825-b46c-061994a7211e,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-workflowjzk5p/series-workflowjzk5p-build-action-3561449249/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-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-28 21:06:41 +0000 UTC FinishedAt: 2026-08-29 00:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-28 21:06:41 +0000 UTC FinishedAt: 2026-08-29 00:09:29 +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":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"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:*42610659-61d4-4cb4-8487-a82133cbefb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ca8331ed-88ac-4825-b46c-061994a7211e,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-workflowjzk5p/series-workflowjzk5p-build-action-2262015976/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-workflowjzk5p/series-workflowjzk5p-build-action-3561449249/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-28 21:06:41 +0000 UTC FinishedAt: 2026-08-28 21:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-28 21:06:41 +0000 UTC FinishedAt: 2026-08-28 21:06:46 +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":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"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-workflowjzk5p/series-workflowjzk5p-convert-artifact-1739920250/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-28 21:06:41 +0000 UTC FinishedAt: 2026-08-28 21:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-28 21:06:41 +0000 UTC FinishedAt: 2026-08-28 21:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-28 21:06:41 +0000 UTC FinishedAt: 2026-08-28 21:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-28 21:06:51 +0000 UTC FinishedAt: 2026-08-29 00:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzk5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"0c417af7-7d8b-4207-9f06-b21c9c083aaf","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-28 21:06:51 +0000 UTC FinishedAt: 2026-08-29 00:09:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*42610659-61d4-4cb4-8487-a82133cbefb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ca8331ed-88ac-4825-b46c-061994a7211e,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-workflowjzk5p/series-workflowjzk5p-build-action-2262015976/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-workflowjzk5p/series-workflowjzk5p-build-action-3561449249/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-workflowjzk5p/series-workflowjzk5p-convert-artifact-1739920250/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,}